chatcontrol_dk/img/chatapp.svg

1355 lines
88 KiB
XML
Raw Normal View History

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
width="300"
height="600"
viewBox="0 0 300 600"
onload="run()"
overflow="auto"
style="font-family: sans; border-radius: 10px;"
id="movie"
sodipodi:docname="chatapp.svg"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview90"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.1125147"
inkscape:cx="371.23105"
inkscape:cy="272.80538"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="contact_name_box" />
<defs
id="defs55">
<symbol
id="kaereste_foto"
width="60"
height="200">
<g
style="fill: pink; stroke: pink;"
id="g18">
<circle
cx="20"
cy="20"
r="20"
id="circle2" />
<line
x1="20"
y1="40"
x2="20"
y2="60"
id="line4" />
<ellipse
cx="20"
cy="110"
rx="10"
ry="50"
id="ellipse6" />
<!-- left arm -->
<polyline
fill="none"
points="15,70 5,50 0,40"
id="polyline8" />
<!-- right arm -->
<polyline
fill="none"
points="25,70 35,50 40,40"
id="polyline10" />
<!-- left leg -->
<polyline
fill="none"
points="15,155 5,135 0,125"
id="polyline12" />
<!-- right leg -->
<polyline
fill="none"
points="25,155 35,135 40,125"
id="polyline14" />
<!-- the thing -->
<text
x="14"
y="160"
style="font: bold 20px sans-serif"
fill="black"
id="text16">?</text>
</g>
</symbol>
<symbol
id="strand"
width="80"
height="1200">
<rect
width="80"
height="130"
fill="yellow"
id="rect21" />
<g
style="fill: pink; stroke: pink;"
id="g35">
<circle
cx="60"
cy="20"
r="20"
id="circle23" />
<!-- spine -->
<line
x1="55"
y1="40"
x2="22"
y2="100"
id="line25" />
<!-- left leg -->
<polyline
fill="none"
points="20,100 60,90 35,125"
id="polyline27" />
<!-- right leg -->
<polyline
fill="none"
points="20,100 50,75 25,120"
id="polyline29" />
<!-- left arm -->
<polyline
fill="none"
points="37,70 20,45"
id="polyline31" />
<!-- right arm + bucket -->
<polyline
fill="none"
points="39,71 70,50"
id="polyline33" />
</g>
</symbol>
<symbol
id="flag_denmark"
width="20"
height="15">
<path
fill="#c8102e"
d="M0,0H20V15H0Z"
id="path38" />
<path
fill="#fff"
d="M0,6H6V0H8V6H20V8H8V15H6V8H0Z"
id="path40" />
</symbol>
<symbol
id="flag_uk"
width="50"
height="30">
<clipPath
id="t">
<path
d="M25,15h25v15zv15h-25zh-25v-15zv-15h25z"
id="path43" />
</clipPath>
<path
d="M0,0v30h50v-30z"
fill="#012169"
id="path46" />
<path
d="M0,0 50,30M50,0 0,30"
stroke="#fff"
stroke-width="6"
id="path48" />
<path
d="M0,0 50,30M50,0 0,30"
clip-path="url(#t)"
stroke="#C8102E"
stroke-width="4"
id="path50" />
<path
d="M-1 11h22v-12h8v12h22v8h-22v12h-8v-12h-22z"
fill="#C8102E"
stroke="#FFF"
stroke-width="2"
id="path52" />
</symbol>
</defs>
<script
type="application/ecmascript"
id="script57"><![CDATA[
2022-09-22 06:35:37 +00:00
'use strict';
const svgns = "http://www.w3.org/2000/svg";
// must be the same as the SVG dimensions
const width = 300;
const height = 550;
const line_height = 14;
const bubble_padding = 6;
const bubble_spacing = 5;
const visible_chat_area = {'top': 60,
'bottom': height - 100 // minus status & input areas
};
2022-11-26 10:27:06 +00:00
var typing_speed = 50;
function set_typing_speed(new_speed) {
typing_speed = new_speed;
}
function get_typing_speed() {
return typing_speed; // prevent closure capture
}
2022-09-22 06:35:37 +00:00
var conversation_count = 0;
var current_dialog = null;
2024-12-13 19:51:16 +00:00
var translations = {
// Contact list
'Friend': {en:'Friend', da:'Ven', tok:'jan pona'},
'Mom': {en:'Mom', da:'Mor', tok:'jan mama'},
'Sweetheart': {en:'Sweetheart ❤️', da: 'Kæreste ❤️', tok:'jan olin'},
'Police friend': {en:'Police friend', da:'Politiven', tok:'jan pi lawa awen'},
'Chat support': {en:'Chat support', da:'Chat support', tok:'jan tan kulupu ilo'},
'Neighbor': {en:'Neighbor', da:'Nabo', tok:'jan poka'},
'Hacker': {en:'Hacker', da:'Hacker', tok:'jan pi pakala alasa'},
'Erasmus': {en:'Erasmus', da:'Erasmus', tok:'jan Elamu'},
'Nerd': {en:'Nerd', da:'Nørd', tok:'jan pi sona ilo'},
2024-12-19 20:24:06 +00:00
'Ylva Johansson': {en:'Ylva Johansson', da:'Ylva Johansson', tok:'jan Uwa (Ylva Johansson)'},
2024-12-13 19:51:16 +00:00
// Dialogs: Friend
'hi': {en:'hi', da:'hej', tok:'toki'},
'hi, what\'s up?': {en:'hi, what\'s up?', da:'tak for sidst!', tok:'toki! seme li lon?'},
'Have you heard about the new EU law "ChatControl"?': {en:'Have you heard about the new EU law "ChatControl"?', da:'Har du hørt om den nye EU lov "ChatControl"?', tok:'sina sona ala sona e lipu lawa sin pi ma Elopa pi nimi ChatControl?'},
'No, I haven\'t': {en:'No, I haven\'t', da:'nej, det har jeg ikke', tok:'ala'},
'What is it about?': {en:'What is it about?', da:'hvad handler det om?', tok:'ona li toki e seme?'},
'The EU commission plans to read all chat messages in the EU': {en:'The EU commission plans to read all chat messages in the EU', da:'EU kommissionen planlægger at læse alle chatbeskeder i EU', tok:'kulupu lawa mi ma Elopa li wile lukin e lipu linluwi ale'},
'Yeah? But we encrypt all of our chats? Tough luck!': {en:'Yeah? But we encrypt all of our chats? Tough luck!', da:'Ja, men vi krypterer jo vores beskeder? Tough luck!', tok:'a. taso mi len e lipu mi ale. ona li kama ala lukin.'},
'That has been taken into account. The eavesdropping will happen before the encryption step on your phone!': {en:'That has been taken into account. The eavesdropping will happen before the encryption step on your phone!', da:'Det tager de højde for. Aflytningen sker før krypteringen på din telefon!', tok:'ona li sona e ni. tenpo tu la mi len e lipu. tenpo wan la ona li lukin lon ilo toki sina.'},
'That sounds stupid. Why do they want to do that?': {en:'That sounds stupid. Why do they want to do that?', da:'Det lyder overhovedet ikke rart. Hvorfor vil de gøre det?', tok:'ni li pakala! ona li wile e ni tan seme?'},
'They claim that this is for protecting children on the internet': {en:'They claim that this is for protecting children on the internet', da:'De siger at det er for at beskytte børn på nettet.', tok:'ona li toki e ni: ona li awen e jan lili tan jan ike lon linluwi'},
'But that doesn\'t make any sense.': {en:'But that doesn\'t make any sense.', da:'Men det giver ikke meget mening', tok:'taso ni li nasa a!'},
'All of our messages will be scanned because of children on the internet? That sounds really stupid!': {en:'All of our messages will be scanned because of children on the internet? That sounds really stupid!', da:'Alle vores beskeder skal scannes på grund af børn på nettet? Det lyder dumt!', tok:'ona li lukin e lipu ale mi tan ni: jan lili li lon linluwi. nasa ike pakala jaki!'},
'Here you can read more about it:': {en:'Here you can read more about it:', da:'Her kan du læse mere om det:', tok:'lipu ni li pana e sona.'},
'https://chatcontrol.dk': {en:'https://chatcontrol.dk', da:'https://chatcontrol.dk', tok:''},
'Your friend is offline now': {en:'Your friend is offline now', da:'din ven er offline nu', tok:'jan pona sina li tawa weka'},
// Dialogs: Mom
'I have found some old family photos from our holiday from 10 years ago': {en:'I have found some old family photos from our holiday from 10 years ago', da:'Jeg har fundet nogle gamle familiebilleder fra vores ferie for 10 år siden', tok:'mi alasa pona e sitelen tan tenpo musi mi tan tenpo pini mute.'},
'This is you playing on the beach': {en:'This is you playing on the beach', da:'Her leger du på stranden', tok:'sina li musi lon poka telo.'},
// '#beach': {en:'#beach', da:'#strand', tok:'#poka-telo'},
'Thanks, but I would rather not have my nude pictures on the internet': {en:'Thanks, but I would rather not have my nude pictures on the internet', da:'Tak, men jeg vil heller ikke have at mine nøgenbilleder kommer på nettet', tok:'pona. sitelen li pona taso mi wile ala e ni: sitelen li lon linluwi.'},
'Why do you worry about that? This is just you as a child a long time ago': {en:'Why do you worry about that? This is just you as a child a long time ago', da:'Hvorfor er du bekymret over det? Det er jo bare dig som barn. Lange tid siden', tok:'tan seme? sitelen la sina jan lili lili. sitelen tan tenpo pini a.'},
'The Internet is not a good place to share very private pictures': {en:'It is very easy to lose control over them', da:'Internettet er ikke et godt sted til at dele meget private billeder', tok:'pana sitelen pi mi taso la linluwi li ike.'},
'Well, but it is just us who share the pictures?': {en:'Well, but it is just us who share the pictures?', da:'Ja, men det er jo bare os to som deler billederne?', tok:'taso mi tawa e sitelen tawa sina taso?'},
'It is very easy to lose control over them': {en:'', da:'Man taber let kontrollen over dem', tok:'taso jan ante li ken kama jo'},
'We encrypt our messages, so it is kinda fine.': {en:'We encrypt our messages, so it is kinda fine.', da:'Vi krypterer faktisk vores beskeder, så det er ikke så slemt', tok:'mi len e lipu. len ni li pona.'},
'But the EU commission wants to introduce a function for scanning all messages even if they are encrypted': {en:'But the EU commission wants to introduce a function for scanning all messages even if they are encrypted', da:'Men EU komissionen vil indføre en funktion sådan at alle beskeder kan scannes, selv om de er krypteret', tok:'taso kulupu lawa pi ma Elopa li wile e ni: jan pi lawa awen li ken lukin e lipu ale--e lipu pi len ala e lipu len.'},
'It won\'t be just us two who will have access to our private pictures': {en:'It won\'t be just us two who will have access to our private pictures', da:'Det vil ikke være bare os to, som har adgang til vores private billeder', tok:'tenpo ni la mi tu taso li ken lukin e sitelen pi mi tu taso. tenpo kama la jan ante li ken lukin.'},
'That surprises me. But then I think I will give you a USB stick next time you visit me': {en:'That surprises me. But then I think I will give you a USB stick next time you visit me', da:'Det overrasker mig. Men så tænker jeg at jeg bare vil give dig en USB-nøgle næste gang du kommer på besøg', tok:'mi sona ala! tenpo kama la sina kama tomo mi la mi pana e poki USB.'},
'Good idea! Thanks :-)': {en:'Good idea! Thanks :-)', da:'God idé. Tak :-)', tok:'ni li pona tawa mi!'},
'Your mom is offline now': {en:'Your mom is offline now', da:'Din mor er offline nu', tok:'jan mama sina li tawa weka'},
// Dialogs: Partner
'Morning, gourgeous': {en:'Morning, gourgeous', da:'hej smukke', tok:'jan pi pona lukin o toki'},
'Hey ;) how are you doing?': {en:'', da:'Hej ;) hvordan har du det?', tok:'toki ;) sina pali e seme?'},
'I\'m feeling... cheeky': {en:'I\'m feeling... cheeky', da:'Jeg har lyst til noget speciel... ', tok:'mi pilin... wawa'},
// '#kaereste_foto': {en:'#kaereste_foto', da:'#kaereste_foto', tok:'#sitelen_tan_jan_olin'},
'Wow 😍! You look STUNNING': {en:'Wow 😍! You look STUNNING', da:'Wow 😍! Du ser FANTASTISK ud', tok:'wawa 😍! sina lukin PONA A!'},
'oh no... i think our conversation was just reported...': {en:'oh no... i think our conversation was just reported...', da:'oh nej... jeg tror vores samtale blev lige rapporteret...', tok:'ike la... mi toki e ni: ilo li tawa e toki ni tawa kulupu pi awen lawa...'},
'Reported????? What do you mean?': {en:'Reported????? What do you mean?', da:'Rapporteret????? Hvad mener du?', tok:'kulupu pi awen lawa????? sina toki e seme?'},
'There is this new EU law, chatcontrol, it scans everything in our conversations, even when they are encrypted': {en:'There is this new EU law, chatcontrol, it scans everything in our conversations, even when they are encrypted', da:'Der er en ny EU lov, som kaldes chatcontrol. Efter loven skal private samtaler skannes og kryptering beskytter ikke mod det', tok:'lipu lawa sin pi ma Elopa pi nimi Chatcontrol li lon. kulupu ilo li lukin e toki ale la. lipu lawa ni la kulupu ilo li lukin sin e toki len.'},
'But why did it report us?': {en:'But why did it report us?', da:'Men hvorfor blev vi rapporteret?', tok:'taso kulupu pi awen lawa tan seme?'},
'It uses Artificial Intelligence to scan pictures, I think it thinks you are underage.. ': {en:'It uses Artificial Intelligence to scan pictures, I think it thinks you are underage.. ', da:'Systemet bruger kunstlig intelligens for at skanne billeder. Og efter systemets vurdering er at du er mindreårig.', tok:'ilo li kepeken e ilo Artificial Intelligence. ilo ni li toki e ni: sina lili.'},
'BUT I\'M 27!': {en:'BUT I\'M 27!', da:'MEN JEG ER 27!', tok:'taso mi jan suli! SIKE SUNO PINI TU TU TU TU TU TU TU TU TU TU TU TU TU WAN LA MI KAMA LON!'},
'Yeah... it\'s really unreliable. I heard it is even worse for minorities and trans folk...': {en:'', da:'Ja... det er virkelig upålidelig. Jeg har hørt at det er endnu dårligere når det skal vurdere minoriteter eller transkønnende...', tok:'lon... ilo ni li pakala. mi kute e ni: jan tan ma ante en jan tonsi la ilo li pakala mute a.'},
'So what happens now?': {en:'So what happens now?', da:'Så, hvad sker der nu?', tok:'tenpo ni la seme li kama lon?'},
'Well, the police might see the picture...': {en:'Well, the police might see the picture...', da:'Nå, politiet ser måske billedet...', tok:'a... jan pi awen lawa li ken kama lukin e sitelen.'},
'WHAT?! THAT IS INSANE! I DON\'T WANT THE POLICE TO SEE MY NUDES.': {en:'WHAT?! THAT IS INSANE! I DON\'T WANT THE POLICE TO SEE MY NUDES.', da:'HVAD? DET ER HELT SINDSSYGT! JEG VIL IKKE AT POLITIET SER MINE NØGENBILLEDER.', tok:'SEME?! NASA A! MI WILE ALA E NI: JAN PI AWEN LAWA LI LUKIN E SITELEN MI PI LEN ALA.'},
'WHAT IF THEY SHARE THEM OR POST THEM ONLINE?': {en:'WHAT IF THEY SHARE THEM OR POST THEM ONLINE?', da:'HVAD HVIS DE DELER DEM ELLER LÆGGER DEM ONLINE?', tok:'ONA LI PANA E SITELEN LA MI PALI E SEME?'},
'THIS IS A MASSIVE INFRINGEMENT ON MY PRIVACY!': {en:'THIS IS A MASSIVE INFRINGEMENT ON MY PRIVACY!', da:'DET ER EN GROV KRÆNKELSE AF MIT PRIVATLIV!', tok:'ONA LI WEKA E WAWA LEN MI! SITELEN NI O TAWA MI EN SINA TASO!'},
'Your better half is offline now': {en:'Your better half is offline now', da:'Din kæreste er offline nu', tok:'jan olin sina li tawa weka'},
// Dialogs: Police officier
'Hi, I have a question': {en:'Hi, I have a question', da:'Hej, jeg har et spørgsmål', tok:'toki, mi wile sona e ijo'},
'Have you heard about ChatControl and what do you think about it?': {en:'Have you heard about ChatControl and what do you think about it?', da:'Har du hørt om chatcontrollen og hvad tænker du om det?', tok:'sina sona ala sona e lipu lawa ChatControl? lipu lawa li pona ala pona tawa sina?'},
'I know about it. It is actually a really bad idea': {en:'I know about it. It is actually a really bad idea', da:'Jeg er bekendt med det. Og det er faktisk en ret dårlig idé', tok:'mi sona e ni. ni li ike a.'},
'The problem is that there are many false positive hits that need to be analysed manually': {en:'The problem is that there are many false positive hits that need to be analysed manually', da:'Problemet er at der er så mange falske positiver som skal analyseres', tok:'ike li ni: ilo alasa li pakala. tenpo mute la sina pona taso ilo toki li toki e ni: ken la sina ike. kulupu ilo li tawa e toki sina tawa kulupu mi. kulupu mi li kepeken e tenpo mute tan ni: mi lukin e toki mute.'},
'And I do not want to read through people\'s private messages. These are confidential conversations': {en:'And I do not want to read through people\'s private messages. These are confidential conversations', da:'Og jeg gider ikke kigge på folks private beskeder. Det er jo deres fortrolige samtaler', tok:'sin la mi wile ala lukin e lipu jan. lipu sina li lipu sina taso.'},
'I don\'t like that my collegues can potentially see what I write to my partner, just because I could potentially do something illegal while chatting': {en:'I don\'t like that my collegues can potentially see what I write to my partner, just because I could potentially do something illegal while chatting', da:'Jeg vil heller ikke have at mine kolleger ser hvad jeg skriver til min kæreste, bare fordi jeg hypotetisk kunne gøre noget illegalt', tok:'jan tan kulupu pali mi li ken lukin e ni: mi sitelen e seme tawa jan olin mi. ona li ken lukin tan ni: jan ale li ken pali e ike. ni li ike tawa mi.'},
'Just think about how absurd the idea is: Why don\'t we wiretap all phones? There will be some crimes that we will detect!': {en:'Just think about how absurd the idea is: Why don\'t we wiretap all phones? There will be some crimes that we will detect!', da:'Tænk bare på hvor absurd idéen er: Hvorfor aflytter vi ikke bare alle telefoner? Der er altid forbrydere at fange!', tok:'ni li nasa a. mi ken kute e ilo toki ale taso mi pali ala e ni. tan seme? mi kama alasa e ijo ike!'},
'But then we have total surveillance and no longer a free society.': {en:'But then we have total surveillance and no longer a free society.', da:'Men så har vi masseovervågning og ikke længere et frit samfund.', tok:'taso mi pali e ni la mi ken ala len e toki mi. wawa jan li kama weka.'},
'The police officer is offline now': {en:'The police officer is offline now', da:'Politibejenten er offline nu', tok:'jan pi lawa awen li tawa weka'},
// Dialogs: Chat support
'Welcome to the ChatWorld support. How can I help you?': {en:'Welcome to the ChatWorld support. How can I help you?', da:'Velkommen til ChatWorld supporten. Hvad kan jeg hjælpe dig med?', tok:'o kama pona. mi tan kulupu ilo ChatWorld. mi ken pona e seme?'},
'I suspect that the chat program is scanning my end-to-end encrypted messages. Am I right?': {en:'I suspect that the chat program is scanning my end-to-end encrypted messages. Am I right?', da:'Jeg mistænker at chatprogrammet scanner mine end-to-end krypterede beskeder. Er det rigtigt?', tok:'mi toki e ni: ilo toki ni li lukin e lipu len mi. ni li lon ala lon?'},
'Yes, that is a feature that our boss wanted to have': {en:'Yes, that is a feature that our boss wanted to have', da:'Ja, det er en feature som chefen gerne vil have.', tok:'lon, jan lawa mi li wile e ni'},
'Some people have abused the chat service to share child pornography and that gives bad publicity. The boss has therefore chosen to scan all end-to-end encrypted messages': {en:'Some people have abused the chat service to share child pornography and that gives bad publicity. The boss has therefore chosen to scan all end-to-end encrypted messages', da:'Der er nogle som har misbrugt chattjenesten til børneporno og det giver meget dårlig PR. Derfor har chefen valgt at scanne end-to-end krypterede beskeder', tok:'tenpo pini la jan ike li pali e ike ni kepeken ilo toki mi: ona li tawa e sitelen unpa pi jan lili. jan ante li toki e ni: ilo mi li ike. ni la jan lawa li wile lukin e toki ale.'},
'Child pornography is a really bad thing. But I don\'t think it is sensible to scan all messages.': {en:'Child pornography is a really bad thing. But I don\'t think it is sensible to scan all messages.', da:'børneporno er jo en meget dårlig ting. Men jeg synes ikke at det giver mening at aflytte alle private beskeder.', tok:' sitelen unpa pi lan lili li ike a. taso mi toki e ni: mi o lukin ala e lipu ale. ni li nasa.'},
'and the scan technology can be abused for many things. I as a software engineer can not even see what the scanner is searching for': {en:'and the scan technology can be abused for many things. I as a software engineer can not even see what the scanner is searching for', da:'og teknologien kan misbruges til mange ting. Jeg som teknikker kan ikke se hvad søgefunktionen faktisk leder efter.', tok:'sin kulupu ilo en jan lawa li ken pali e ante kepeken ilo lukin.'},
2024-12-19 20:24:06 +00:00
'It can be that it will look for alternative political views and marks them as illegal even though they aren\'t': {en:'It can be that it will look for alternative political views and marks them as illegal even though they aren\'t', da:'Det kan være at den kunne finde politiske beskeder og markere dem som illegale selv om de ikke er det.', tok:'ken la ona li alasa monsuta: ona li toki e ni taso sina toki e ante la toki sina li ike. taso toki sina li ike ala.'},
'It is a danger to our democracy when confidential messages are scanned for things that the political elite does not like': {en:'It is a danger to our democracy when confidential messages are scanned for things that the political elite does not like', da:'Det er en fare for demokratiet hvis fortrolige beskeder bliver scannet for ting som den politiske elite ikke ønsker', tok:'jan lawa li lukin e lipu ale pi jan ale la nasin lawa pi wawa kulupu li kama pakala.'},
'But it is unfortunately my job to keep the surveillance working': {en:'But it is unfortunately my job to keep the surveillance working', da:'Men det er desværre mit job at vedligeholde driften af overvågningen', tok:'ike la pali mi li ni: ilo lukin o pali pona.'},
'That does not solve the problem. But thank you for the information. I will look for ways to avoid the surveillance in the future': {en:'That does not solve the problem. But thank you for the information. I will look for ways to avoid the surveillance in the future', da:'Det løser ikke mit problem. Men tak for informationen. Jeg vil se hvad jeg kan gøre for at undgå overvågning i fremtiden', tok:'ike li awen lon. taso pona tawa sina tan ni: sina pana e sona. mi alasa weka e ilo lukin.'},
'I apologize that I can not offer something better. But I hope you understand the situation': {en:'I apologize that I can not offer something better. But I hope you understand the situation', da:'Beklager at jeg ikke kan gøre mere. Men jeg håber at du forstår situationen', tok:'mi pilin ike tan ni: mi ken ala pana e pona. taso mi wile e ni: sina sona.'},
'The chat support is offline now': {en:'The chat support is offline now', da:'Chatsupporten er offline nu', tok:'jan tan kulupu ilo li tawa weka'},
2024-12-13 19:51:16 +00:00
// Dialogs: Neighbor
2024-12-19 20:24:06 +00:00
'Hi! It\'s Ellie!': {en:'Hi! It\'s Ellie!', da:'Hej, det er Ellie!', tok:'toki! mi jan Eli'},
'Ellie? What are you doing with your mums phone?': {en:'Ellie? What are you doing with your mums phone?', da:'Ellie? Hvad laver du med din mors telefon?', tok:'jan Eli anu seme? sina pali e seme kepeken ilo toki pi jan mama sina?'},
'guess whos birthday it is soon!': {en:'guess whos birthday it is soon!', da:'Gæt hvem der snart har fødselsdag!', tok:'sina sona ala sona e ni: tenpo kama lili la suno pi jan seme li lon?'},
'Yours?': {en:'Yours?', da:'Er det dig?', tok:'suno sina?'},
'yep! I\'m having a party on friday! mummy told me to invite you!': {en:'yep! I\'m having a party on friday! mummy told me to invite you!', da:'Netop! Jeg vil have en fest på fredag! Mor sagde at jeg skal invitere dig!', tok:'suno mi! suno pi nanpa tu tu wan la mi kulupu musi! jan mama li toki e mi: sina o kama!'},
'How old will you be?': {en:'How old will you be?', da:'Hvor gammel bliver du så?', tok:'sina kama pi suli seme?'},
'ten': {en:'ten', da:'ti', tok:'sike suno pi nanpa tu tu tu tu tu!'},
'Ten? Wow! I wouldn\'t want to miss your tenth birthday party! I promise i\'ll be there!': {en:'Ten? Wow! I wouldn\'t want to miss your tenth birthday party! I promise i\'ll be there!', da:'Ti? Wow! Jeg vil ikke gå glip af din tiende fødselsdagsfest! Jeg lover at jeg kommer!', tok:'tu tu tu tu tu? mi o lon!'},
'how old are you?': {en:'how old are you?', da:'Hvor gammel er du?', tok:'sina suli seme?'},
'Very old! I\'m 48!': {en:'', da:'Meget gammelt! Jeg er 48!', tok:'suli mute! sike suno pi nanpa tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu tu!'},
'you must have lots of candles on your cake!': {en:'you must have lots of candles on your cake!', da:'Så får du rigtig mange kerter på din kage!', tok:'linja seli mute li lon moku suwi sina!'},
'Could you give the phone to your mum please?': {en:'Could you give the phone to your mum please?', da:'Kan du give telefonen til din mor?', tok:'sina o pana ala pana e ilo toki tawa jan mama sina?'},
'okay': {en:'okay', da:'ok', tok:'pana'},
'Hi! whats up? can you make it to the party?': {en:'Hi! whats up? can you make it to the party?', da:'Hej, hvordan har du det? Kan du komme til festen?', tok:'toki! sina pilin seme? sina kama ala kama musi?'},
'Yeah! of course, but just to warn you: i think our conversation just got reported': {en:'Yeah! of course, but just to warn you: i think our conversation just got reported', da:'Helt sikkert! Men jeg skal orientere dig om at vores samtale sandsynligvis blev rapporteret', tok:'kama! taso mi wile pana e sona tawa sina. mi toki e ni: toki mi en jan Eli li tawa kulupu pi awen lawa.'},
'Reported? why?': {en:'Reported? why?', da:'Rapporteret? Hvorfor?', tok:'kulupu pi awen lawa? tan seme?'},
'It is chatcontrol, a new EU law that scans all our conversations.': {en:'It is chatcontrol, a new EU law that scans all our conversations.', da:'Det er chatcontrollen. Det er en ny EU lov som kræver skanningen af alle vores beskeder', tok:'nasin ChatControl. ni li lipu lawa sin pi ma Elopa. nasin ni la ilo li lukin e toki ale pi jan ale.'},
'It\'s supposed to protect kids from abuse, but sometimes it flags totally normal conversations...': {en:'It\'s supposed to protect kids from abuse, but sometimes it flags totally normal conversations...', da:'Formålet er at beskytte børn mod misbrug. Men det rapporterer også helt almindelige samtaler...', tok:'wile li ni: mi o awen a jan lili tan jan ike. taso tenpo mute la ona li alasa e toki pi ike ala.'},
'That is crazy :o So will the police read our conversation?': {en:'That is crazy :o So will the police read our conversation?', da:'Det er vanvittigt :o Det vil sige at politiet læser med i vores kommunikation?', tok:'ni li nasa :o jan pi awen lawa li kama lukin e toki mi anu seme?'},
'I\'m not sure...': {en:'I\'m not sure...', da:'Jeg er ikke helt sikker...', tok:'mi sona ala...'},
'What a waste of time!': {en:'What a waste of time!', da:'Det lyder som en spild af politiarbejdstid!', tok:'weka tenpo!'},
'the police don\'t even have the time to deal with the cases they know about': {en:'the police don\'t even have the time to deal with the cases they know about', da:'Politiet har ikke nok tid til at arbejde på alle rapporter de allerede har.', tok:'jan pi awen lawa li jo ala e tenpo mute. tenpo pini la ona li jo e tenpo lili e pali mute. tenpo ni la ona li jo e tenpo lili e pali mute mute mute.'},
'let alone to investigate a 10 year olds birthday invitation': {en:'let alone to investigate a 10 year olds birthday invitation', da:'Og en invitation til en 10 års fødselsdag er helt irrelevant', tok:'ona li jo ala e tenpo tawa ni: jan lili li pana sona e kulupu musi pi suno ona'},
'Yeah... I have a friend who is a policeman, he says they have to review loads of reports now...': {en:'Yeah... I have a friend who is a policeman, he says they have to review loads of reports now...', da:'Netop... Jeg har en politiven og han siger at han skal undersøge mange rapporteringer nu...', tok:'lon... jan pona mi li jan pi awen lawa. ona li toki e ni: kulupu ona li wile lukin e toki mute mute mute li jo ala e tenpo...'},
'What a disaster... anyway, see you at the party!': {en:'What a disaster... anyway, see you at the party!', da:'Øv. Det er en katastrofe... Men vi ses til festen!', tok:'pakala epiku... pona la mi kulupu musi!'},
'Don\'t forget to get Ellie a present!': {en:'Don', da:'Husk at får en gave til Ellie!', tok:'o sona: o pana e ijo pona tawa jan Eli!'},
2024-12-13 19:51:16 +00:00
// Dialogs: Hacker
2024-12-19 20:24:06 +00:00
'Hi there': {en:'Hi there', da:'hejsa', tok:'toki'},
'hi, I haven\'t heard from you in a long time': {en:'hi, I haven\'t heard from you in a long time', da:'hej, jeg har ikke hørt fra dig i lang tid!', tok:'toki, tenpo mute la sina sitelen ala.'},
'yeah, I was busy because of chatcontrol': {en:'yeah, I was busy because of chatcontrol', da:'ja, jeg havde lidt travlt på grund af chatcontrollen', tok:'lon, mi jo ala e tenpo tan ni: nasin ChatControl li kama lon.'},
'oh, so you already know about it?': {en:'oh, so you already know about it?', da:'åh, så er du allerede bekendt med det?', tok:'a, sina sona e ni anu seme?'},
'yes, attacks on privacy are something that we hackers take very seriously.': {en:'yes, attacks on privacy are something that we hackers take very seriously.', da:'Ja, angreb på privatliv er noget vi hackere tager meget alvorligt.', tok:'sona, ni li wawa tawa jan pi pakala alasa: utala tawa sona pi jan taso'},
'because we think that the private life on the net should be as private as the "real" life': {en:'because we think that the private life on the net should be as private as the "real" life', da:'Fordi vi synes at livet på nettet skal være så privat som det "reelle" liv', tok:'tan ni: linluwi anu ma ante la sona pi sina taso li tawa sina taso.'},
'and what should be done about it then?': {en:'and what should be done about it then?', da:'Og hvad skal man gøre så?', tok:'ni la mi pali e seme?'},
'well, from a technical perspective there is a simple solution: You encrypt your messages before the scanner can get a hold of them': {en:'well, from a technical perspective there is a simple solution: You encrypt your messages before the scanner can get a hold of them', da:'nå, rent teknisk er der en nemt løsning: Man krypterer sine beskeder før skanningen kan få fat af dem.', tok:'ilo la mi ken pona: tenpo wan la mi len e sitelen.'},
'that means you use an extra software that protects your messages': {en:'that means you use an extra software that protects your messages', da:'Dvs. at du bruger en ektra software som beskytter dine beskeder', tok:'mi kepeken e ilo sona ante. ilo sona ni li len e sitelen sina.'},
'I have actually created such a software. It is a plugin to our chatprogram': {en:'I have actually created such a software. It is a plugin to our chatprogram', da:'Jeg har faktisk lavet sådan en software. Det er en plug-in til vores chatprogram', tok:'mi pali e ilo ni.'},
'and with my plugin you will be safe': {en:'and with my plugin you will be safe', da:'Og med min plug-in er du sikkert', tok:'sina kepeken e ilo mi la sina awen.'},
'I will send you the file right away': {en:'I will send you the file right away', da:'Jeg sender dig lige filen', tok:'tenpo ni la mi tawa e ilo.'},
'Thanks. I have received it.': {en:'Thanks. I have received it.', da:'Tak. Jeg har modtaget den.', tok:'pona. mi jo.'},
'Your plugin is being installed': {en:'Your plugin is being installed', da:'Din plug-in bliver installeret', tok:'ilo sina li kama pona'},
'I can imagine that crimials will use something similar in the future to avoid chatcontrol': {en:'I can imagine that crimials will use something similar in the future to avoid chatcontrol', da:'Jeg kan godt forestille mig at forbrydere vil bruge noget lignende i fremtiden for at undgå chatcontrollen', tok:'mi toki e ni: jan ike li kepeken e ilo sama. ona li wile weka e nasin Chatcontrol'},
'and then chatcontrol will only affect innocent citizens': {en:'and then chatcontrol will only affect innocent citizens', da:'Og så rammer chatcontrollen kun uskyldige borgere', tok:'ni la nasin Chatcontrol li ike tawa jan pona taso'},
'the installation is done. I will activate it now.': {en:'the installation is done. I will activate it now.', da:'installationen er færdig. Jeg aktiverer det lige.', tok:'ilo li pona. mi open e ona.'},
2024-12-13 19:51:16 +00:00
'ehlnwo dfgien dfignhhug enodeonia endtrio nedosdiaen srnisdite ng': {en:'ehlnwo dfgien dfignhhug enodeonia endtrio nedosdiaen srnisdite ng', da:'ehlnwo dfgien dfignhhug enodeonia endtrio nedosdiaen srnisdite ng', tok:''},
'rondhkd rtn3vgoh niartne sgornidena sudtor giean drtanodfg undae': {en:'rondhkd rtn3vgoh niartne sgornidena sudtor giean drtanodfg undae', da:'rondhkd rtn3vgoh niartne sgornidena sudtor giean drtanodfg undae', tok:''},
'onfdgnxrt nare ndiatrsn dxvun gdnra edt nadhndgfn air nd': {en:'onfdgnxrt nare ndiatrsn dxvun gdnra edt nadhndgfn air nd', da:'onfdgnxrt nare ndiatrsn dxvun gdnra edt nadhndgfn air nd', tok:''},
'endtrion idfgen teria non daenr bdoadtern udnre draien diae rtdnoa': {en:'endtrion idfgen teria non daenr bdoadtern udnre draien diae rtdnoa', da:'endtrion idfgen teria non daenr bdoadtern udnre draien diae rtdnoa', tok:''},
'rian dondvglne dgon fgdndul noa gfhdfghsgndga odnane dodfgvunle da': {en:'rian dondvglne dgon fgdndul noa gfhdfghsgndga odnane dodfgvunle da', da:'rian dondvglne dgon fgdndul noa gfhdfghsgndga odnane dodfgvunle da', tok:''},
2024-12-19 20:24:06 +00:00
'chatcontrol does not work': {en:'chatcontrol does not work', da:'chatcontrollen virker ikke', tok:'nasin Chatcontrol li pali ala'},
2024-12-13 19:51:16 +00:00
// Dialog: Erasmus
2024-12-19 20:24:06 +00:00
'Hi, I will soon move again!': {en:'Hi, I will soon move again!', da:'Hej, jeg vil snart flytte igen!', tok:'toki! tenpo lili la mi tawa ma ante!'},
'To which country this time?': {en:'To which country this time?', da:'Til hvilket land i denne gang?', tok:'tenpo ni la ma seme?'},
'To Germany. I have gotten a job there.': {en:'To Germany. I have gotten a job there.', da:'Til tyskland. Jeg har fået en nyt job der.', tok:'ma Tosi. mi tawa pali.'},
'Nice! The EU makes it possible to live and work at many different places.': {en:'Nice! The EU makes it possible to live and work at many different places.', da:'Fedt! Det er godt at bo i EU, hvis man vil arbejde mange forskellige steder', tok:'pona! ma Elopa la jan li ken awen li ken pali lon ma ante'},
'Yes, I appreciate that very much. Do you remember how we meet in Warsaw for the first time?': {en:'Yes, I appreciate that very much. Do you remember how we meet in Warsaw for the first time?', da:'Ja, det værdsætter jeg meget. Kan du huske der vi mødtes i Warszawa den første gang?', tok:'lon, ni li pona mute tawa mi. sina sona ala sona e ni: tenpo wan la mi kulupu lon ma Wasa kepeken nasin seme?'},
'Yes, of course!': {en:'Yes, of course!', da:'Ja, selvfølgelig!', tok:'sona!'},
'You certainly remember Pedro from that time. He will get married in Romania next month!': {en:'You certainly remember Pedro from that time. He will get married in Romania next month!', da:'Du kan sikkert huske Pedro fra denne tid. Han bliver gift i Rumænien næste måned!', tok:'sina sona pona e jan Peto tan tenpo ni. ona en jan olin ona li kama wan lon ma Lomani'},
'Good to hear! I will definitely write to him to congratulate.': {en:'Good to hear! I will definitely write to him to congratulate.', da:'Sejt! Jeg vil i hvert fald skrive til ham for at gratulere.', tok:'mi pilin pona tan ni! mi sitelen tawa ona.'},
'It is so nice that we know so many people from all over the EU.': {en:'It is so nice that we know so many people from all over the EU.', da:'Det er så rart, at vi kender så mange mennesker fra hele EU.', tok:'mi pilin pona tan ni: mi sona e jan mute tan ma ante mute lon ma Elopa'},
'However, the EU commission wants that all messages will be scanned for child porn. Simply because it is theoretically possible that our digital communication is illegal.': {en:'However, the EU commission wants that all messages will be scanned for child porn. Simply because it is theoretically possible that our digital communication is illegal.', da:'Men, så vil EU kommissionen indføre at alle beskeder skal scannes for børnepornografi. Simplethen, fordi det er teoretisk muligt, at vores digitale samtaler er illegale.', tok:'taso kulupu lawa pi ma Elopa li wile e ni: kulupu mani ilo li lukin e toki linluwi ale. wile li tan ni taso: ken la ona li alasa e sitelen pi jan lili pi len ala.'},
'Ouch. Is this from the same politicians again, who have not grown up with the internet?': {en:'Ouch. Is this from the same politicians again, who have not grown up with the internet?', da:'Øv. Er det de samme politikere igen, som ikke er vokset op med internettet? ', tok:'pakala. tenpo sin la ni li jan lawa pi suli mute pi lon linluwi ala?'},
'I live in Europe. But I also live on the internet. And that is where I meet my big family and my good friends who I haven\'t seen in years.': {en:'I live in Europe. But I also live on the internet. And that is where I meet my big family and my good friends who I haven\'t seen in years.', da:'Jeg bor i Europa. Men jeg bor også på nettet. Og der møder jeg min stor familie og mine gode venner som jeg har ikke set i årevis.', tok:'mi lon ma Elopa. taso mi lon sin linluwi. linluwi la mi kama sona e jan sama mi e jan pona tan tenpo pini.'},
'It is the internet that makes it possible for me to keep my personal connections alive over long distances.': {en:'It is the internet that makes it possible for me to keep my personal connections alive over long distances.', da:'Det er internettet som gør det muligt at pleje mine personlige forhold over lange distancer.', tok:'mi kan toki e jan pona lon ma ante tan ni: linluwi li lon.'},
'How should I continue with this, when my conversations are being wiretapped like they did it in the old Stasi-East-Germany?': {en:'How should I continue with this, when my conversations are being wiretapped like they did it in the old Stasi-East-Germany?', da:'Hvordan skal jeg forsætte med det, når mine samtaler bliver aflyttet som de gjorde det i den gamle Stasi-Østtyskland? ', tok:'ni li sama ma Tosi pi poka ike pi tenpo pini. kulupu pi awen lawa li kute e toki ale mi la mi awen toki tawa jan pona mi kepeken nasin seme?'},
'I can no longer speak freely.': {en:'I can no longer speak freely.', da:'Jeg kan ikke længere tale frit.', tok:'wawa toki mi li weka.'},
'Yes, this does not make any sense. Modern personal conversation happens online in most cases today.': {en:'Yes, this does not make any sense. Modern personal conversation happens online in most cases today.', da:'Ja, det passer overhoved ikke. Den moderne personlige samtale foregår faktisk over nettet i de fleste tilfælde i dag.', tok:'lon, ni li ken ala. tenpo ni la jan mute li toki mute lon linluwi. toki lili li lon linluwi ala.'},
'That new surveillance law sounds very anti-european, if you ask me.': {en:'That new surveillance law sounds very anti-european, if you ask me.', da:'Denne ny overvågningslov er meget anti-europæisk, hvis du spørger mig', tok:'nasin wawa Elopa la mi o wawa toki. kulupu pi awen lawa o kute ala e toki mi ale'},
'Totally agree': {en:'Totally agree', da:'helt enig', tok:'ni li lon a'},
'Your old Erasmus friend is offline': {en:'Your old Erasmus friend is offline', da:'Din gamle erasmusven er offline', tok:'jan pona sina pi tenpo pini pi nimi Elamu li tawa weka'},
2024-12-13 19:51:16 +00:00
// Dialog: Nerd
2024-12-19 20:24:06 +00:00
'Hi, have you heard about chatcontrol? I wonder how it will work on a technical level': {en:'Hi, have you heard about chatcontrol? I wonder how it will work on a technical level', da:'Hej, har du hørt om chatcontrollen? Jeg undrer mig hvordan det vil fungere på et teknisk niveau', tok:'toki. sina sona ala sona e lipu lawa Chatcontrol? mi wile sona e ni: nasin ilo la ni li pali kepeken nasin seme?'},
'Yes, I have heard about it': {en:'Yes, I have heard about it', da:'Ja, det har jeg.', tok:'sona, mi sona e ona'},
'There are actually several things that have to be identified:': {en:'There are actually several things that have to be identified:', da:'Der er faktisk flere ting som skal identificeres:', tok:'nasin li wile alasa e ijo mute:'},
'1. Childporn in pictures and movies': {en:'1. Childporn in pictures and movies', da:'1. Børneporno i billeder og film', tok:'wan: sitelen pi jan lili pi len ala lon sitelen anu sitelen tawa'},
'2. Links to know illegal websites': {en:'2. Links to know illegal websites', da:'2. Links til velkendte illegale hjemmesider', tok:'tu: nimi nasin tawa lipu linluwi jaki'},
'3. Illegal chats between adults and children': {en:'', da:'3. Illegale samtaler mellem voksne og børn', tok:'mute: jan suli en jan lili li toki sama pi ijo jaki'},
'Number 2 sounds easy! You just check the address of the link!': {en:'Number 2 sounds easy! You just check the address of the link!', da:'Nummer 2 er jo meget nemt! Det kræver bare at man tjekker adressen af linket!', tok:'ijo nanpa tu li utala ala! o lukin e nimi nasin!'},
'Exactly! This is trivial. Now think about the abortion debate in the USA. It will be very easy to identify people who try to find information on abortions.': {en:'Exactly! This is trivial. Now think about the abortion debate in the USA. It will be very easy to identify people who try to find information on abortions.', da:'Præcis! Det er trivialt at identificere. Nu tænk bare på abortdebatten i USA. Det vil være nemt at identificere folk som forsøger at finde informationer om abort.', tok:'lon! ni li utala ala. tenpo ni la o lukin e ni: nasin weka pi jan lili pi jan mama insa lon ma Mewika'},
'Ouch. That is horrible! I immediately think about Poland. There are some politicians who will like this a lot.': {en:'Yes, the potential for abuse is huge.', da:'Øv. Det er jo skræmmende. Jeg tænker lige på Polen. Der er nogle politikere som vil lide det meget!', tok:'pakala, ni li pakala epiku! mi sona e ma Posuka. ni li pona mute tawa jan lawa'},
'Yes, the potential for abuse is huge.': {en:'Yes, the potential for abuse is huge.', da:'Ja, og misbrugmulighederne er store.', tok:'lon, jan ken kepeken e nasin ni tawa ike suli.'},
'How does it work with childporn in movies and pictures?': {en:'There are systems like e.g. PhotoDNA from Microsoft which use algorithms to compute hash values of data.', da:'Hvad er der så med børneporno i film og billeder?', tok:'sitelen pi jan lili pi len ala lon sitelen la nasin ni li pali kepeken nasin seme?'},
'There are systems like e.g. PhotoDNA from Microsoft which use algorithms to compute hash values of data.': {en:'', da:'Der findes systemer som fx. PhotoDNA fra Microsoft som bruger en proprietær algoritme for at beregne hashværdier til data.', tok:'ilo lukin li kepeken e ilo nanpa. (ilo PhotoDNA en ilo ante li lon.) ilo ni mute li nanpa e nanpa Hasu tan sona.'},
'That means if you have a file with data, the software will calculate a single value of limited size based on the data. This value is called a "hash"': {en:'', da:'Det vil sige, at, hvis du har en fil som indeholder data, så beregner softwaren en enkelte værdi af begrænset størrelse baseret på dataen. Værdien kalder man en "hash"', tok:'ilo lukin li nanpa e nanpa taso tan sona. nanpa ni li lili. nanpa ni li nanpa Hasu.'},
'If I have illegal files, then the software will identify it based on the hash value of the file?': {en:'', da:'Hvis jeg har illegale filer, så vil softwaren genkende den på grundlag af hashværdien af filen?', tok:'lipu jaki li lon la ilo lukin li alasa e lipu ike kepeken nanpa Hasu.'},
'Yes': {en:'Yes', da:'Ja', tok:'lon'},
'But there is a fundamental problem: The data can be of any size while the hash value is always limited.': {en:'That means an infinite amount of data is projected into a finite amount of values. This leads to so-called collissions.', da:'Men der er et fundamentalt problem: Dataen kan være alle mulige størrelser mens hashværdien er altid begrænset i sin størrelse.', tok:'taso pakala suli li lon: lipu li ken suli a taso nanpa Hasu li lili.'},
'That means an infinite amount of data is projected into a finite amount of values. This leads to so-called collissions.': {en:'Two completely different files can have the same hash.', da:'dvs. at en uendelig mængde af data bliver omregnet til en endelig mængde. Det fører til såkaldte kollisioner.', tok:'sona ale lon nanpa Hasu lili. sona mute li ken jo a nanpa Hasu sama.'},
'Two completely different files can have the same hash.': {en:'And thereby people get identified as pedophiles even though they are none', da:'To helt forskellige filer kan have den samme hash.', tok:'lipu ante li ken jo e nanpa Hasu sama.'},
'And thereby people get identified as pedophiles even though they are none': {en:'And thereby people get identified as pedophiles even though they are none', da:'Og dermed bliver man identificeret som pædofil selvom man ikke er det', tok:'jan pi ike la ilo lukin li ken toki e ni: sina ike'},
'Has that happened to someone?': {en:'Has that happened to someone?', da:'Er det sket til nogen?', tok:'ni li lon ala lon?'},
'Yes, there are several cases, where the access has been blocked by Microsoft or Google.': {en:'Yes, there are several cases, where the access has been blocked by Microsoft or Google.', da:'Ja, der er flere tilfælde, hvor adgange blev blokeret af Microsoft og Google.', tok:'lon, jan mute li lon. tenpo wan la ona li awen e sona mute lon ilo linluwi tana kulupu Microsoft anu kulupu Kuko. ike li lon ala taso tenpo tu la kulupu mani li toki e ni: sina ike. tenpo tu wan la ona li ken ala kepeken e ilo li ken ala jo e sona ona.'},
'Even though Google and Microsoft are some of the most advanced companies, when it comes to artificial intelligence, their systems are far from perfect.': {en:'Even though Google and Microsoft are some of the most advanced companies, when it comes to artificial intelligence, their systems are far from perfect.', da:'Selvom Google og Microsoft er nogle af de bedste virksomheder når det kommer til kunstlig intelligens, er deres systemer langt fra perfekt.', tok:'kulupu Kuko en kulupu Microsoft li sona e mute taso ilo ona li ken pakala.'},
'And they rather block some accounts of innocent users instead of checking some potentially disgusting childporn.': {en:'', da:'Og de blokerer heller automatisk kontoer af uskyldige folk end at kigge på potentielt grimme børnepornografi', tok:'sin la ona li lukin ala e ni: sitelen ni li sitelen jaki pi len ala pi jan lili anu seme? lukin ala la ona li open ala e ilo tawa jan ni.'},
'Will the EU do the same?': {en:'Will the EU do the same?', da:'Vil det også være sådan med EU?', tok:'ma Elopa li wile e sama anu seme?'},
'No. The EU commission has actually a different plan: They will create a center where there are people who will look at suspicious chat contents.': {en:'', da:'Nej. EU kommissionen har faktisk en anden plan: De vil oprette en center hvor der arbejder mennesker som kigger på mistænkelige chatindhold.', tok:'ala. kulupu lawa pi ma Elopa li pali e ante: ona li open a kulupu pali suli. kulupu pali ni la jan pali li lukin e lipu toki pi ike ken.'},
'And if the suspicion is justified, they will hand over the information to Europol.': {en:'And if the suspicion is justified, they will hand over the information to Europol.', da:'Og hvis mistanken er berettiget, så giver de informationen videre til Europol.', tok:'toki li ike la kulupu pali suli li pana e lipu toki tawa kulupu pi awen lawa pi ma Elopa pi nimi Elopolo'},
// Jeg forstår ikke meningen bag disse linier og derfor har svært ved at oversætte.
'That means the EU kommissionen doesn\'t actually think that the system is so smart?': {en:'', da:'Så tror EU kommissionen heller ikke at systemet er så smart?', tok:'sina toki ala toki e ni: ilo lukin li pakala tawa kulupu lawa pi ma Elopa'},
'Obviously not. But having people read our personal chat messages, just because some "smart" software says that we are child molesters, is not any better': {en:'', da:'Åbenbart ikke. Og det gør det ikke bedre at der er folk som vil læse vores chatbeskeder, kun fordi en "smart" software siger at vi dyrker børnemisbrug', tok:'toki a. ilo lukin li pakala li ike. taso jan lukin li pakala sin li ike sin.'},
'What is the stupid "smart" technology that will be used?': {en:'', da:'Hvad er den dumme "smarte" teknologi som skal bruges?', tok:'ona li kepeken e ilo ike pi nimi Smart. ilo ni li seme?'},
'Ha! That\'s an interesting story': {en:'', da:'Ha! Det er en interessante historie', tok:'a! musi mute!'},
'There is an organisation called "Thorn". They produce software-based filters. An important investor and lobbyist from that organisation is Ashton Kutcher. He often visits the EU commission to promote his software': {en:'', da:'Der er en organisation som hedder "Thorn". Og de fremstiller en filtreringssoftware. En vigtig investor og lobbyist fra virksomheden hedder Ashton Kutcher. Han er tit på besøg på EU kommissionen for at sælge sin software', tok:'kulupu mani Tonu (Thorn) li lon. ona li pali e ilo sona. ilo sona ona li alasa e sitelen ike. jan wawa tan kulupu mani ni li jan Atan (Ashton Kutcher). tenpo mute la ona li tawa kulupu lawa pi ma Elopa li esun e ilo sona ona.'},
'And of course he claims that his software can magically solve child abuse problems': {en:'', da:'Og selvfølgelig påstår han at sin software kan på magiske måde løse børnemisbrugproblemer', tok:'ona li toki e ni: ilo sona ona li pona e ale kepeken nasin sewi.'},
'I hate it when people are so blinding trusting technology and buy into all that marketing bullshit.': {en:'I hate it when people are so blinding trusting technology and buy into all that marketing bullshit.', da:'Jeg hader det, når folk er så teknologitroende og køber alt den marketingnonsens', tok:'jan li sona ala e ilo sona taso ona li olin e ilo sona tan ni: jan mani li toki mani nasa kepeken nimi ike. mi pilin ike tan ni.'},
'That means that the proposed law is actually the result of a commercial lobbying effort?': {en:'That means that the proposed law is actually the result of a comercial lobbying effort?', da:'dvs at lovforeslaget er faktisk et resultat af kommercielt lobbyisme?', tok:'ni la lipu lawa tan ni: jan mani li toki mani tawa jan lawa?'},
'I think so': {en:'I think so', da:'Det mener jeg', tok:'tan, mi toki e ni.'},
'And lastly, what about scanning of illegal conversations?': {en:'And lastly, what about scanning of illegal conversations?', da:'Og til sidst, hvad er med scanning af illegale samtaler?', tok:'nanpa pini: ilo li lukin e toki pi lawa ala la'},
'No system has ever passed the Turing test': {en:'No system has ever passed the Turing test', da:'Der er stadig ingen system som har bestået Turing-testen', tok:'ilo ala li ken jan'},
'Computers are still far away from understanding human language on the same level as us humans': {en:'Computers are still far away from understanding human language on the same level as us humans', da:'Computer er stadig langt væk fra at forstå menneskelig sprog på det samme niveau som vi mennesker taler', tok:'jan ken toki wawa a. ilo sona li ken toki ike taso.'},
'Algorithms can in some cases identify the topic of a conversation but there is no actual understanding behind the current technology': {en:'Algorithms can in some cases identify the topic of a conversation but there is no actual understanding behind the current technology', da:'Algorithme kan i nogle tilfælde identificere emnet der bliver talt om, men en virkelig forståelse findes ikke i den nuværende teknologi', tok:'ilo pi nasin nanpa li toki la ona li sona ala e ni: ona li toki e seme?'},
'The nerd is rebooting': {en:'The nerd is rebooting', da:'Nørden genstarter sin computer', tok:'jan pi sona ilo'},
2024-12-13 19:51:16 +00:00
// Dialog: Ylva
2024-12-19 20:24:06 +00:00
'Hi, I heard that you are responsible for the chatcontrol proposal': {en:'Hi, I heard that you are responsible for the chatcontrol proposal', da:'Hej, jeg har hørt at du er ansvarlig for chatcontrol lovforslaget', tok:'toki. mi kama sona e ni: sina wile jo e lipu lawa pi nasin Chatcontrol'},
'This is not about chatcontrol. It is about creating rules to prevent and fight sexual violence against children': {en:'This is not about chatcontrol. It is about creating rules to prevent and fight sexual violence against children', da:'Det handlar inte om "chatcontrol", det handlar om att skapa regler för att förhindra och motverka sexuella övergrepp mot barn', tok:'nasin ChatControl ala. mi pali e nasin lawa. nasin li utala e utala unpa pi jan lili tawa'},
'Alright': {en:'Alright', da:'ok', tok:'pona'},
'But why do you think this proposal is a good idea?': {en:'I explained all of that when I received the big brother award in 2022.', da:'Men hvorfor synes du at dette lovforslag er en god idé?', tok:'taso tan seme la sina toki e ni: lipu lawa ni li pona?'},
'I explained all of that when I received the big brother award in 2022.': {en:'I explained all of that when I received the big brother award in 2022.', da:'Jag har redan förklarat allt det där vid prisutdelningen på Big Brother Awards 2022.', tok:'mi alasa e pana pona Big Brother pi sike suno 2022 la mi toki e ni.'},
'You can find the video recording here:': {en:'You can find the video recording here:', da:'Du hittar en videoinspelning av ceremonin här:', tok:'o lukin e sitelen tawa ni:'},
'https://chatcontrol.dk/en/bigbrother.html': {en:'https://chatcontrol.dk/en/bigbrother.html', da:'https://chatcontrol.dk/en/bigbrother.html', tok:'https://chatcontrol.dk/en/bigbrother.html'},
'Thank you!': {en:'Thank you!', da:'Mange tak!', tok:'pona tawa sina'},
'Ylva is back to drafting more laws': {en:'Ylva is back to drafting more laws', da:'Ylva har travlt med at lave love', tok:'jan Uwa li sitelen sin e lipu lawa', tok: 'jan Uwa li tawa weka li sitelen e lipu lawa.'},
2024-12-13 19:51:16 +00:00
// Misc
'⚠ this message was reported': {en:'⚠ this message was reported', da:'⚠ beskeden blev rapporteret', tok:'⚠ kulupu lukin li kama lukin e lipu'},
'back to the contact list': {en:'back to the contact list', da:'tilbage til kontaktlisten', tok:'tawa poki jan'}
}
function _(key) {
return (translations[key] || {})[current_language] || key
}
2022-10-16 10:46:29 +00:00
var current_discussion_index = parseInt(new URLSearchParams(location.search).get('discussion') ?? 0);
var current_language = new URLSearchParams(location.search).get('lang') ?? 'da';
2022-09-22 06:35:37 +00:00
/// SVG 1.1 doesn't do proper text splitting into several lines.
/// we need to do it ourselves.
function split_text_into_lines(text, upper_line_length) {
let result = [];
while(text.length) {
if(text.length < upper_line_length) {
result.push(text);
break; // we are done
}
let found_split_point = false;
for(let i = upper_line_length; i; i--) {
if(text[i] == ' ') {
result.push(text.slice(0, i));
text = text.slice(i+1);
found_split_point = true;
break;
}
}
if(!found_split_point) {
// no <space> found. Split at character boundary instead
result.push(text.slice(0, upper_line_length));
text = text.slice(upper_line_length);
}
}
return result;
}
function is_hyperlink(str) {
return str.startsWith('http');
}
function create_link_node(url, line) {
2022-09-22 06:35:37 +00:00
let link = create_svg_node('a', {target:'_blank', href: url});
link.appendChild(document.createTextNode(line));
2022-09-22 06:35:37 +00:00
return link;
}
/// A class holding a text chat message.
///
/// *ChatMessages are owned by a Dialog.
function TextChatMessage(message_text, is_myself) {
let lines = split_text_into_lines(message_text, 28);
let bubble_color = (is_myself)? '#0084FF': '#E4E6EB';
let text_color = (is_myself)? 'white': 'black';
let container = document.getElementById('messages');
let make_link = is_hyperlink(message_text);
2022-09-22 06:35:37 +00:00
// attributes
this.height = 0; // height on screen when fully visible
this.group = null; // a <g> with a transform=translate(0,y_shift) attribute
/// Render the chat message on the screen
this.draw = function(y_offset, y_shift) {
let group = create_svg_node('g', {'transform': `translate(0, ${y_shift})`});
let x = (is_myself ? 195 : 105);
let text = create_svg_node('text', {
'x': `${x}%`,
'font-size': `${line_height}px`,
'text-anchor': is_myself ? 'end' : 'start'
});
let height_so_far = y_offset;
lines.forEach(function(line) {
let y = height_so_far;
let tspan = create_svg_node('tspan', {
'x': `${x}%`,
'y': `${y + line_height}`, // important: y is lower text baseline
'fill': text_color,
'width': '5%'
});
enable_scrolling(tspan)
if(make_link) {
tspan.appendChild(create_link_node(message_text, line));
2022-09-22 06:35:37 +00:00
} else {
tspan.appendChild(document.createTextNode(line));
}
text.appendChild(tspan);
height_so_far += line_height;
});
group.appendChild(text); // needs to be part of the DOM *now*
container.appendChild(group);
let bubble = create_bubble(text, bubble_color);
group.appendChild(bubble);
redraw_on_top(text);
this.height = bubble.getBBox().height + bubble_spacing;
this.group = group;
}
/// Move a chat message on the screen (to simulate scrolling)
this.shift_y_pos = function(by) {
redraw_on_top(document.getElementById('contact_name_box'));
this.group.setAttribute('transform', `translate(0, ${by})`);
}
}
function ReportChatMessage(_exclamation_mark, is_myself) {
2024-12-13 19:51:16 +00:00
let line = _('⚠ this message was reported')
let bubble_color = '#FFFFFF';
let text_color = '#FF0000';
let container = document.getElementById('messages');
// attributes
this.height = 0; // height on screen when fully visible
this.group = null; // a <g> with a transform=translate(0,y_shift) attribute
/// Render the chat message on the screen
this.draw = function(y_offset, y_shift) {
let group = create_svg_node('g', {'transform': `translate(0, ${y_shift})`});
let x = 150; // middle
let text = create_svg_node('text', {
'x': `${x}%`,
'font-size': `${line_height}px`,
'text-anchor': 'middle',
'font-weight': 'bold'
});
let tspan = create_svg_node('tspan', {
'x': `${x}%`,
'y': `${y_offset + line_height}`, // important: y is lower text baseline
'fill': text_color,
'width': '5%'
});
enable_scrolling(tspan)
tspan.appendChild(document.createTextNode(line));
text.appendChild(tspan);
group.appendChild(text); // needs to be part of the DOM *now*
container.appendChild(group);
let bubble = create_bubble(text, bubble_color);
group.appendChild(bubble);
redraw_on_top(text);
this.height = bubble.getBBox().height + bubble_spacing;
this.group = group;
}
/// Move a chat message on the screen (to simulate scrolling)
this.shift_y_pos = function(by) {
redraw_on_top(document.getElementById('contact_name_box'));
this.group.setAttribute('transform', `translate(0, ${by})`);
}
}
2022-09-22 06:35:37 +00:00
/// A class holding a image-based chat message.
///
/// *ChatMessages are owned by a Dialog.
function ImageChatMessage(symbol_id, is_myself) {
let container = document.getElementById('messages');
let bubble_color = (is_myself)? 'white': '#DDFF66';
// attributes
this.height = 0; // height on screen when fully visible
this.group = null; // a <g> with a transform=translate(0,y_shift) attribute
this.draw = function(y_offset, y_shift) {
let group = create_svg_node('g', {'transform': `translate(0, ${y_shift})`});
let x = (is_myself ? 190 : 110);
let img = create_svg_node('use', {
'href': symbol_id,
x: `${x}%`,
y: y_offset,
});
group.appendChild(img); // needs to be part of the DOM *now*
container.appendChild(group);
let bubble = create_bubble(img, bubble_color);
group.appendChild(bubble);
redraw_on_top(img);
this.height = bubble.getBBox().height + bubble_spacing;
this.group = group;
}
this.shift_y_pos = function(by) {
redraw_on_top(document.getElementById('contact_name_box'));
this.group.setAttribute('transform', `translate(0, ${by})`);
}
}
/// A class for holding a final message that says that the chat partner is offline
///
/// *ChatMessages are owned by a Dialog.
function OfflineChatMessage(dollar_message, _is_myself) {
let offline_message = dollar_message.substring(1);
let container = document.getElementById('messages');
// attributes
this.height = 0; // height on screen when fully visible
this.group = null; // a <g> with a transform=translate(0,y_shift) attribute
this.draw = function(y_offset, y_shift) {
let group = create_svg_node('g', {'transform': `translate(0, ${y_shift})`});
let height_so_far = y_offset;
function post_process(element) {
enable_scrolling(element);
height_so_far += line_height;
group.appendChild(element);
redraw_on_top(element);
}
let x = 101;
let bar = create_svg_node('rect', {
'x': `${x}%`,
'y': `${height_so_far + line_height}`,
'fill': '#CCCCCC',
'width': '90%',
'height': '4px'
});
post_process(bar);
height_so_far += 5; // spacing
let text = create_svg_node('text', {
'x': `${x}%`,
'y': `${height_so_far + line_height}`,
'font-size': `${line_height}px`,
'text-anchor': 'start'
});
text.appendChild(document.createTextNode(offline_message));
post_process(text);
let back_link_text = create_svg_node('text', {
'x': `${x}%`,
'y': `${height_so_far + line_height}`,
'font-size': `${line_height}px`,
'text-anchor': 'start',
'style': 'text-decoration: underline',
'fill': 'blue'
});
let back_link = create_svg_node('a', {
'href': 'javascript: swipe_viewport()',
});
2024-12-13 19:51:16 +00:00
let link_text = _('back to the contact list')
back_link_text.appendChild(document.createTextNode(link_text));
back_link.appendChild(back_link_text);
post_process(back_link);
container.appendChild(group);
this.height = height_so_far - y_offset;
this.group = group;
}
this.shift_y_pos = function(by) {
redraw_on_top(document.getElementById('contact_name_box'));
this.group.setAttribute('transform', `translate(0, ${by})`);
}
}
2022-09-22 06:35:37 +00:00
function create_chat_message(content, is_myself) {
let constr = null;
if(content.startsWith('#')) {
constr = ImageChatMessage;
} else if(content.startsWith('$')) {
constr = OfflineChatMessage;
} else if(content.startsWith('!')) {
constr = ReportChatMessage;
} else {
constr = TextChatMessage;
}
2022-09-22 06:35:37 +00:00
return new constr(content, is_myself);
}
/// Promise-based version of setTimeout
const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
/// toggle viewport between message list and contact list
/// That means: show either the left or right side of the SVG
function swipe_viewport() {
let svg = document.getElementsByTagName('svg')[0];
let coords = svg.getAttribute('viewBox').split(' ');
let x = parseInt(coords.shift());
if(x == 0) {
// moving from messages to contacts
var step = 5;
var end = width;
} else {
// moving from contacts to messages
var step = -5;
var end = 0;
}
let viewBox_suffix = coords.join(' '); // only 3 elements
async function animate(resolve, reject) {
while(x!=end) {
await wait(1);
x += step;
svg.setAttribute('viewBox', `${x} ${viewBox_suffix}`);
}
resolve();
};
new Promise(animate);
}
// Create a chat bubble around an element.
//
// The element must already be inside the DOM for this to work.
function create_bubble(inner_element, color) {
const bbox = inner_element.getBBox();
let bubble = create_svg_node('rect', {
'x': bbox.x - bubble_padding,
'y': bbox.y - bubble_padding,
'width': bbox.width + 2 * bubble_padding,
'height': bbox.height + 2 * bubble_padding,
'rx': 8,
'fill': color,
});
enable_scrolling(bubble);
return bubble;
}
function create_svg_node(tag_name, attrs) {
let node = document.createElementNS(svgns, tag_name);
for(let attr in attrs) {
node.setAttribute(attr, attrs[attr]);
}
return node;
}
/// Ensure that an element is redrawn above all other elements
///
/// The element's children will also be redrawn on top
function redraw_on_top(element) {
let parent = element.parentNode;
parent.appendChild(parent.removeChild(element));
}
function removeAllChildren(parentNode) {
while(parentNode.firstChild) {
parentNode.removeChild(parentNode.lastChild);
}
}
2022-10-16 10:46:29 +00:00
function start_chat(index) {
current_discussion_index = index;
2024-12-13 19:51:16 +00:00
let contact = contact_list[index];
let who = _(contact.name);
2022-09-22 06:35:37 +00:00
let indicator = document.getElementById('contact_indicator');
indicator.childNodes[0].data = `Contact: ${who}`;
2022-09-22 06:35:37 +00:00
removeAllChildren(document.getElementById('messages'));
swipe_viewport();
2022-10-16 10:46:29 +00:00
contact.dialog();
2022-09-22 06:35:37 +00:00
}
function Dialog() {
let conversation_id = ++conversation_count;
this.messages = [];
this.y_shift = visible_chat_area.top; // for scrolling
this.all_elements_height = 0; // also for scrolling
this.is_active = function() {
return conversation_id == conversation_count;
}
2024-12-13 19:51:16 +00:00
async function post_message(dialog, message_en, is_myself) {
let message = _(message_en)
if(!is_myself && dialog.messages.length && !message.startsWith('!')) {
2022-11-26 10:27:06 +00:00
await wait(message.length * get_typing_speed());
2022-09-22 06:35:37 +00:00
} // first message should be instant
if(!dialog.is_active()) {
return; // Do not add messages to old conversation
}
let chat_message = create_chat_message(message, is_myself);
chat_message.draw(dialog.all_elements_height, // offset
dialog.y_shift);
dialog.all_elements_height += chat_message.height;
dialog.messages.push(chat_message);
let bottom = dialog.all_elements_height + dialog.y_shift;
let scroll = Math.max(0, bottom - visible_chat_area.bottom);
while(scroll > line_height) {
dialog.scroll_by(-line_height);
scroll -= line_height;
2022-11-26 10:27:06 +00:00
await wait(get_typing_speed());
2022-09-22 06:35:37 +00:00
}
}
this.scroll_by = function(change) {
this.y_shift += change;
this.messages.forEach(msg => msg.shift_y_pos(this.y_shift));
}
this.me = async function(message, will_be_flagged) {
2022-11-26 10:27:06 +00:00
await wait(30 * get_typing_speed()); // give me some time to read
2022-09-22 06:35:37 +00:00
if(!this.is_active()) return;
await type_message(this, message);
if(!this.is_active()) return;
hit_send_button();
await local_message_processing(will_be_flagged);
clear_input_field();
release_send_button();
await post_message(this, message, true);
if(will_be_flagged) {
await post_message(this, '!flagged', true);
}
2022-09-22 06:35:37 +00:00
}
this.you = async function(message, will_be_flagged) {
2022-09-22 06:35:37 +00:00
await post_message(this, message, false);
if(will_be_flagged) {
await post_message(this, '!flagged', true);
}
2022-09-22 06:35:37 +00:00
}
this.end = async function(message) {
await post_message(this, `$${message}`, true);
}
2022-09-22 06:35:37 +00:00
}
async function type_message(dialog, message) {
clear_input_field(); // just to be sure
let text = document.getElementById('message_input_data').firstChild;
let lines = split_text_into_lines(message, 22);
for(let line of lines) {
text.data = '';
for(let c of line) {
2022-11-26 10:27:06 +00:00
await wait(get_typing_speed());
2022-09-22 06:35:37 +00:00
text.data += c;
}
if(!dialog.is_active()) break;
2022-11-26 10:27:06 +00:00
await wait(0.4 * get_typing_speed()); // otherwise it's too fast
2022-09-22 06:35:37 +00:00
}
}
function hit_send_button() {
document.getElementById('message_submit_button').setAttribute('fill', 'white');
document.getElementById('message_submit_box').setAttribute('fill', '#888888');
}
function release_send_button() {
document.getElementById('message_submit_button').setAttribute('fill', 'black');
document.getElementById('message_submit_box').setAttribute('fill', '#CCCCCC');
}
function clear_input_field() {
let element = document.getElementById('message_input_data')
removeAllChildren(element);
element.appendChild(document.createTextNode(''));
}
async function local_message_processing(will_be_flagged) {
let text_element = document.getElementById('message_status');
let indicator = text_element.childNodes[0];
indicator.data = 'scanning for illegal content';
2022-11-26 10:27:06 +00:00
await wait(16 * get_typing_speed());
2022-09-22 06:35:37 +00:00
if(will_be_flagged) {
let box = document.getElementById('message_status_box');
text_element.setAttribute('fill', 'red');
box.setAttribute('fill', 'yellow');
indicator.data = 'Reporting suspicious content';
2022-11-26 10:27:06 +00:00
await wait(20 * get_typing_speed());
2022-09-22 06:35:37 +00:00
text_element.setAttribute('fill', 'white');
box.setAttribute('fill', '#FF7B00');
}
indicator.data = 'encrypting message';
2022-11-26 10:27:06 +00:00
await wait(11 * get_typing_speed());
2022-09-22 06:35:37 +00:00
indicator.data = 'sending message';
2022-11-26 10:27:06 +00:00
await wait(10 * get_typing_speed());
2022-09-22 06:35:37 +00:00
indicator.data = 'message was sent';
}
async function scroll_up() {
current_dialog.scroll_by(line_height);
}
async function scroll_down() {
current_dialog.scroll_by(-line_height);
}
const on_wheel = (e) => { e.deltaY < 0 ? scroll_up() : scroll_down() }
const enable_scrolling = (elem) => elem.addEventListener('wheel', on_wheel);
// enable scrolling
document.addEventListener(
"DOMContentLoaded",
() => document.getElementById("message_box").addEventListener('wheel', on_wheel)
)
async function switch_language(language_code) {
2022-10-16 10:46:29 +00:00
let url = new URL(document.location);
url.searchParams.set('lang', language_code);
url.searchParams.set('discussion', current_discussion_index);
location.href = url;
2022-09-22 06:35:37 +00:00
}
2022-10-17 20:13:03 +00:00
2022-11-26 21:40:02 +00:00
2024-12-13 19:51:16 +00:00
const contact_list = [
{
name: "Friend",
dialog: async function () {
let d = new Dialog();
current_dialog = d;
await d.me("hi");
await d.you("hi, what's up?");
await d.you('Have you heard about the new EU law "ChatControl"?');
await d.me("No, I haven't");
await d.me("What is it about?");
await d.you('The EU commission plans to read all chat messages in the EU');
await d.me('Yeah? But we encrypt all of our chats? Tough luck!');
await d.you('That has been taken into account. The eavesdropping will happen before the encryption step on your phone!');
await d.me('That sounds stupid. Why do they want to do that?');
await d.you('They claim that this is for protecting children on the internet');
await d.you("But that doesn't make any sense.");
await d.me('All of our messages will be scanned because of children on the internet? That sounds really stupid!', true);
await d.you('Here you can read more about it:');
await d.you('https://chatcontrol.dk');
await d.end('Your friend is offline now');
}
},
{
name: "Mom",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.you("I have found some old family photos from our holiday from 10 years ago");
await d.you("This is you playing on the beach");
await d.you("#strand");
await d.me('Thanks, but I would rather not have my nude pictures on the internet', true);
await d.you('Why do you worry about that? This is just you as a child a long time ago');
await d.me('The Internet is not a good place to share very private pictures');
await d.me('It is very easy to lose control over them');
await d.you('Well, but it is just us who share the pictures?');
await d.me('We encrypt our messages, so it is kinda fine.');
await d.me('But the EU commission wants to introduce a function for scanning all messages even if they are encrypted');
await d.me('It won\'t be just us two who will have access to our private pictures');
await d.you('That surprises me. But then I think I will give you a USB stick next time you visit me');
await d.me('Good idea! Thanks :-)');
await d.end('Your mom is offline now');
}
},
{
name: "Sweetheart",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.me('Morning, gourgeous');
await d.you('Hey ;) how are you doing?');
await d.you("I'm feeling... cheeky");
await d.you('#kaereste_foto', true);
await d.me('Wow 😍! You look STUNNING', true);
await d.me('oh no... i think our conversation was just reported...');
await d.you('Reported????? What do you mean?');
await d.me('There is this new EU law, chatcontrol, it scans everything in our conversations, even when they are encrypted');
await d.you('But why did it report us?');
await d.me('It uses Artificial Intelligence to scan pictures, I think it thinks you are underage.. ');
await d.you("BUT I'M 27!", true);
await d.me("Yeah... it's really unreliable. I heard it is even worse for minorities and trans folk...");
await d.you('So what happens now?');
await d.me('Well, the police might see the picture...');
await d.you("WHAT?! THAT IS INSANE! I DON'T WANT THE POLICE TO SEE MY NUDES.");
await d.you("WHAT IF THEY SHARE THEM OR POST THEM ONLINE?");
await d.you("THIS IS A MASSIVE INFRINGEMENT ON MY PRIVACY!");
await d.end('Your better half is offline now');
}
},
{
name: "Police friend",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.me('Hi, I have a question');
await d.me('Have you heard about ChatControl and what do you think about it?');
await d.you('I know about it. It is actually a really bad idea');
await d.you('The problem is that there are many false positive hits that need to be analysed manually');
await d.you("And I do not want to read through people's private messages. These are confidential conversations");
await d.you("I don't like that my collegues can potentially see what I write to my partner, just because I could potentially do something illegal while chatting");
await d.you("Just think about how absurd the idea is: Why don't we wiretap all phones? There will be some crimes that we will detect!");
await d.you('But then we have total surveillance and no longer a free society.');
await d.end('The police officer is offline now');
}
},
{
name: "Chat support",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.you('Welcome to the ChatWorld support. How can I help you?');
await d.me('I suspect that the chat program is scanning my end-to-end encrypted messages. Am I right?');
await d.you('Yes, that is a feature that our boss wanted to have');
await d.you('Some people have abused the chat service to share child pornography and that gives bad publicity. The boss has therefore chosen to scan all end-to-end encrypted messages');
await d.you("Child pornography is a really bad thing. But I don't think it is sensible to scan all messages.");
await d.you('and the scan technology can be abused for many things. I as a software engineer can not even see what the scanner is searching for');
await d.you("It can be that it will look for alternative political views and marks them as illegal even though they aren't");
await d.you('It is a danger to our democracy when confidential messages are scanned for things that the political elite does not like');
await d.you('But it is unfortunately my job to keep the surveillance working');
await d.me('That does not solve the problem. But thank you for the information. I will look for ways to avoid the surveillance in the future', true);
await d.you('I apologize that I can not offer something better. But I hope you understand the situation');
await d.end('The chat support is offline now');
}
},
{
name: "Neighbor",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.you("Hi! It's Ellie!");
await d.me("Ellie? What are you doing with your mums phone?");
await d.you("guess whos birthday it is soon!");
await d.me("Yours?");
await d.you("yep! I'm having a party on friday! mummy told me to invite you!");
await d.me("How old will you be?");
await d.you("ten");
await d.me("Ten? Wow! I wouldn't want to miss your tenth birthday party! I promise i'll be there!");
await d.you("how old are you?");
await d.me("Very old! I'm 48!", true);
await d.you("you must have lots of candles on your cake!");
await d.me("Could you give the phone to your mum please?");
await d.you("okay");
await d.you("Hi! whats up? can you make it to the party?");
await d.me("Yeah! of course, but just to warn you: i think our conversation just got reported");
await d.you("Reported? why?");
await d.me("It is chatcontrol, a new EU law that scans all our conversations.");
await d.me("It's supposed to protect kids from abuse, but sometimes it flags totally normal conversations...");
await d.you("That is crazy :o So will the police read our conversation?");
await d.me("I'm not sure...");
await d.you("What a waste of time!");
await d.you("the police don't even have the time to deal with the cases they know about, let alone to investigate a 10 year olds birthday invitation");
await d.me("Yeah... I have a friend who is a policeman, he says they have to review loads of reports now...");
await d.you("What a disaster... anyway, see you at the party!");
await d.end("Don't forget to get Ellie a present!");
}
},
{
name: "Hacker",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.you('Hi there');
await d.me("hi, I haven't heard from you in a long time");
await d.you('yeah, I was busy because of chatcontrol');
await d.me('oh, so you already know about it?');
await d.you('yes, attacks on privacy are something that we hackers take very seriously.');
await d.you('because we think that the private life on the net should be as private as the "real" life');
await d.me('and what should be done about it then?');
await d.you('well, from a technical perspective there is a simple solution: You encrypt your messages before the scanner can get a hold of them');
await d.you('that means you use an extra software that protects your messages');
await d.you('I have actually created such a software. It is a plugin to our chatprogram');
await d.you('and with my plugin you will be safe');
await d.you('I will send you the file right away');
await d.me('Thanks. I have received it.');
await d.me('Your plugin is being installed');
await d.you('I can imagine that crimials will use something similar in the future to avoid chatcontrol');
await d.you('and then chatcontrol will only affect innocent citizens');
await d.me('the installation is done. I will activate it now.');
await d.me('ehlnwo dfgien dfignhhug enodeonia endtrio nedosdiaen srnisdite ng');
await d.you('rondhkd rtn3vgoh niartne sgornidena sudtor giean drtanodfg undae');
await d.you('onfdgnxrt nare ndiatrsn dxvun gdnra edt nadhndgfn air nd');
await d.me('endtrion idfgen teria non daenr bdoadtern udnre draien diae rtdnoa');
await d.me('rian dondvglne dgon fgdndul noa gfhdfghsgndga odnane dodfgvunle da');
await d.end('chatcontrol does not work');
}
},
{
name: "Erasmus",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.you('Hi, I will soon move again!');
await d.me('To which country this time?');
await d.you('To Germany. I have gotten a job there.');
await d.me('Nice! The EU makes it possible to live and work at many different places.');
await d.you('Yes, I appreciate that very much. Do you remember how we meet in Warsaw for the first time?');
await d.me('Yes, of course!');
await d.you('You certainly remember Pedro from that time. He will get married in Romania next month!');
await d.me('Good to hear! I will definitely write to him to congratulate.');
await d.me('It is so nice that we know so many people from all over the EU.');
await d.me('However, the EU commission wants that all messages will be scanned for child porn. Simply because it is theoretically possible that our digital communication is illegal.');
await d.you('Ouch. Is this from the same politicians again, who have not grown up with the internet?');
await d.you('I live in Europe. But I also live on the internet. And that is where I meet my big family and my good friends who I haven\'t seen in years.');
await d.you('It is the internet that makes it possible for me to keep my personal connections alive over long distances.');
await d.you('How should I continue with this, when my conversations are being wiretapped like they did it in the old Stasi-East-Germany?');
await d.you('I can no longer speak freely.');
await d.me('Yes, this does not make any sense. Modern personal conversation happens online in most cases today.');
await d.you('That new surveillance law sounds very anti-european, if you ask me.');
await d.me('Totally agree');
await d.end('Your old Erasmus friend is offline');
}
},
{
name: "Nerd",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.me('Hi, have you heard about chatcontrol? I wonder how it will work on a technical level');
await d.you('Yes, I have heard about it');
await d.you('There are actually several things that have to be identified:')
await d.you('1. Childporn in pictures and movies');
await d.you('2. Links to know illegal websites');
await d.you('3. Illegal chats between adults and children');
await d.me('Number 2 sounds easy! You just check the address of the link!');
await d.you('Exactly! This is trivial. Now think about the abortion debate in the USA. It will be very easy to identify people who try to find information on abortions.');
await d.me('Ouch. That is horrible! I immediately think about Poland. There are some politicians who will like this a lot.');
await d.you('Yes, the potential for abuse is huge.');
await d.me('How does it work with childporn in movies and pictures?');
await d.you('There are systems like e.g. PhotoDNA from Microsoft which use algorithms to compute hash values of data.');
await d.you('That means if you have a file with data, the software will calculate a single value of limited size based on the data. This value is called a "hash"');
await d.me('If I have illegal files, then the software will identify it based on the hash value of the file?');
await d.you('Yes');
await d.you('But there is a fundamental problem: The data can be of any size while the hash value is always limited.');
await d.you('That means an infinite amount of data is projected into a finite amount of values. This leads to so-called collissions.', true);
await d.you('Two completely different files can have the same hash.');
await d.you('And thereby people get identified as pedophiles even though they are none');
await d.me('Has that happened to someone?');
await d.you('Yes, there are several cases, where the access has been blocked by Microsoft or Google.');
await d.you('Even though Google and Microsoft are some of the most advanced companies, when it comes to artificial intelligence, their systems are far from perfect.');
await d.you('And they rather block some accounts of innocent users instead of checking some potentially disgusting childporn.');
await d.me('Will the EU do the same?');
await d.you('No. The EU commission has actually a different plan: They will create a center where there are people who will look at suspicious chat contents.');
await d.you('And if the suspicion is justified, they will hand over the information to Europol.');
await d.me('That means the EU kommissionen doesn\'t actually think that the system is so smart?');
await d.you('Obviously not. But having people read our personal chat messages, just because some "smart" software says that we are child molesters, is not any better', true);
await d.me('What is the stupid "smart" technology that will be used?');
await d.you('Ha! That\'s an interesting story');
await d.you('There is an organisation called "Thorn". They produce software-based filters. An important investor and lobbyist from that organisation is Ashton Kutcher. He often visits the EU commission to promote his software');
await d.you('And of course he claims that his software can magically solve child abuse problems');
await d.you('I hate it when people are so blinding trusting technology and buy into all that marketing bullshit.');
await d.me('That means that the proposed law is actually the result of a comercial lobbying effort?');
await d.you('I think so');
await d.me('And lastly, what about scanning of illegal conversations?');
await d.you('No system has ever passed the Turing test');
await d.you('Computers are still far away from understanding human language on the same level as us humans');
await d.you('Algorithms can in some cases identify the topic of a conversation but there is no actual understanding behind the current technology');
await d.end('The nerd is rebooting');
}
},
{
name: "Ylva Johansson",
dialog: async function() {
let d = new Dialog();
current_dialog = d;
await d.me('Hi, I heard that you are responsible for the chatcontrol proposal');
await d.you('This is not about chatcontrol. It is about creating rules to prevent and fight sexual violence against children');
await d.me('Alright');
await d.me('But why do you think this proposal is a good idea?');
await d.you('I explained all of that when I received the big brother award in 2022.', true);
await d.you('You can find the video recording here:');
await d.you('https://chatcontrol.dk/en/bigbrother.html');
await d.me('Thank you!');
await d.end('Ylva is back to drafting more laws');
}
}
]
2022-10-16 10:46:29 +00:00
function fill_contact_list(lang) {
let x = 15;
let y = 75;
let y_step = 30;
2022-10-16 10:46:29 +00:00
let group = document.getElementById('contacts');
removeAllChildren(group);
2022-09-22 06:35:37 +00:00
2024-12-13 19:51:16 +00:00
for(let i=0; i < contact_list.length; i++) {
let box = create_svg_node('rect', {x: x - 10,
y: y - y_step / 2,
width: 300 - 10,
height: y_step - 2,
rx: "3px",
ry: "3px",
"stroke-linejoin":"round",
fill: '#8042ef'});
2024-12-13 19:51:16 +00:00
2022-10-16 10:46:29 +00:00
let text = create_svg_node('text', {
x: x,
y: y + 2,
2022-10-16 10:46:29 +00:00
});
y += y_step;
2024-12-13 19:51:16 +00:00
let contact = contact_list[i];
box.onclick = function() { start_chat(i) };
2022-10-16 10:46:29 +00:00
text.onclick = function() { start_chat(i) };
2024-12-13 19:51:16 +00:00
text.appendChild(document.createTextNode(_(contact.name)));
group.appendChild(box);
2022-10-16 10:46:29 +00:00
group.appendChild(text);
}
}
function run() {
fill_contact_list(current_language);
}
]]></script>
<!-- [right] contact name view -->
<g
id="contact_name_box">
<rect
x="300"
y="0"
width="300"
height="50"
fill="#F5F5F5"
onclick="swipe_viewport()"
id="rect59" />
<polyline
points="300,20 320,0 320,40"
fill="#0084ff"
onclick="swipe_viewport()"
id="to_contact_list_button"
transform="translate(6,4)" />
<text
x="343"
y="28"
id="contact_indicator"
onclick="swipe_viewport()"
inkscape:label="contact_indicator">loading...</text>
<g
transform="scale(0.5,0.5)"
id="g71" />
2022-09-22 06:35:37 +00:00
</g>
<!-- [right] messages view -->
<rect
id="message_box"
x="300"
y="50"
width="300"
height="450"
fill="white" />
<g
id="messages" />
<!-- [right] message status -->
<rect
id="message_status_box"
x="300"
y="520"
fill="#FF7B00"
width="300"
height="30" />
<text
id="message_status"
x="310"
y="540"
fill="white">status</text>
<!-- [right] text input -->
<rect
id="message_input_box"
x="300"
y="550"
stroke="black"
fill="white"
width="250"
height="50"
onclick="return set_typing_speed" />
<rect
id="message_submit_box"
x="550"
y="550"
stroke="black"
fill="#CCCCCC"
width="50"
height="50" />
<text
id="message_input_data"
x="310"
y="575"
fill="black" />
<text
id="message_submit_button"
x="555"
y="580"
fill="black">SEND</text>
<!-- [left] contact list -->
<rect
x="0"
y="0"
width="300"
height="50"
fill="#E4E6EB"
id="rect82" />
<text
x="60"
y="30"
id="text84">Dine kontakter</text>
<rect
x="0"
y="50"
width="300"
height="550"
style="stroke: green; stroke-width: 0px"
fill="white"
id="rect86" />
<!-- contact list -->
<g
id="contacts" />
2022-09-22 06:35:37 +00:00
</svg>