Repository navigation
Expand file tree
/
Copy pathscript.js
More file actions
1928 lines (1737 loc) · 113 KB
/
Copy pathscript.js
File metadata and controls
1928 lines (1737 loc) · 113 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// Note: the "could not start" fallback lives in an inline script in index.html,
// not here — it has to survive this file failing to load or parse at all.
// Configure up to 50 questions here.
// Each question has:
// - text: the abstract or comment to show
// - isHuman: true if written by a human, false if generated by AI
// - type (optional): label such as "Thesis abstract", "Comment", etc.
const QUESTIONS = [
{
title: "Organiserat samarbete mellan lärare och kollegor inom IKT-baserad distansundervisning",
text: "Abstrakt Detta är en hermeneutisk studie där vi använt oss av intervjuer som datainsamlingsmetod. Vi har studerat samarbete ur ett lärarperspektiv i distansundervisning på Blekinge Tekniska högskola (BTH). Vad vi fann var att lärarna och deras kollegor efterfrågade ett mer organiserat samarbete dem emellan. Två former för ett ökat samarbete är, samarbete i team och i distansnätverk, vilka kan existera parallellt med varandra. I nätverket ingår alla personer som arbetar med distanskurser, allt ifrån lärare till tekniker. Team är en mindre enhet för samarbete och är uppbyggd runt en specifik distanskurs. Deltagarna i teamet är experter på olika yrkesområden och kan komplettera och hjälpa varandra. Lärarna är experter på sitt område, vilket är undervisning, och vill inte behöva känna sig tvingade att bli experter på nya områden, för att kunna undervisa på distans. Undersökningen visar att de teammedlemmar som kan vara till hjälp för lärarna är: Andra lärare, Administratörer, Teknikpedagoger, Bibliotekarier, Inlånade kompetenser, Tekniker och Studentrepresentanter. Kursen och temadeltagarna, i huvudsak lärarna, avgör när och hur mycket de olika experterna behövs under kursen. Men det är viktigt att vara medveten om att alla inte vill arbeta i team eller anser att samarbete alltid är positivt. Samarbete och teamarbete ska ses som ett stöd för lärarnas i deras arbete",
isHuman: true,
type: "Kandidatuppsats abstrakt",
condition: "human",
},
{
title: "Kalmar - ett platsvarumärke i skuggan av Öland och Glasriket: En studie om destinationsutveckling",
text: "Denna studie undersöker Kalmar som platsvarumärke och hur stadens identitet och attraktionskraft formas i relation till närliggande och starkt etablerade destinationer, särskilt Öland och Glasriket. Utifrån ett place branding- och platsmarknadsföringsperspektiv analyseras hur Kalmar kan positionera sig i en regional kontext där konkurrensen om besökare, investeringar och uppmärksamhet är tydlig. Fokus ligger på samspelet mellan den bild som kommuniceras externt och den faktiska platsupplevelsen, samt på vilka berättelser, värden och kännetecken som används för att skapa igenkänning och differentiering. Studien belyser centrala utmaningar i destinationsutveckling när en plats uppfattas hamna “i skuggan” av starkare varumärken. Den problematiserar hur Kalmar kan dra nytta av närheten till Öland och Glasriket utan att reduceras till en “bas” eller genomfartsdestination, samt hur lokala aktörer kan arbeta mer samordnat för att stärka en gemensam och trovärdig profil. Samtidigt uppmärksammas möjligheter kopplade till Kalmars egna resurser—såsom historia, kulturmiljöer, evenemang och stadsmiljö—och hur dessa kan paketeras och kommuniceras för att bygga en mer tydlig position på destinationsmarknaden. Sammanfattningsvis bidrar studien med en fördjupad förståelse för hur platsvarumärkesarbete och destinationsutveckling kan användas för att stärka Kalmars konkurrenskraft. Genom att analysera Kalmar i relation till omgivande destinationer synliggörs behovet av en konsekvent berättelse, långsiktig strategi och samverkan mellan offentliga och privata aktörer för att skapa ett starkare, mer självständigt platsvarumärke.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "baseline",
},
{
title: "Fytoremediering med perenn solros i åkerjord",
text: "Den här studien handlar om fytoremediering med perenn solros i åkerjord. Utgångspunkten är att jordar i jordbruket kan ha förhöjda halter av metaller efter lång tid med gödsel, slam, kalk och annan påverkan. Målet är att pröva om H. maximilianis fungerar i fytoremediering i åkerjord och hur resultatet syns i metallanalysen. Arbetet bygger på odling av perenn solros i åkerjord och på uppföljning med metallanalysen. Fokus ligger på hur metaller fördelar sig mellan jordar och växtmaterial över tid. Man följer hur H. maximilianis tar upp metaller från jordar och om halterna minskar i åkerjord. Man jämför också delar av plantan. Till exempel rötter, stjälk och blad. Det är centralt för fytoremediering eftersom metaller ofta fastnar i rötterna. Det påverkar hur man ska skörda och hantera biomassan. Resultatet redovisas genom metallanalysen och genom enkla jämförelser mellan jordar före och efter odling. Man sammanfattar halter och förändringar. Man kopplar dem till hur H. maximilianis växer i åkerjord och hur mycket biomassa den ger. Det är viktigt eftersom hög biomassa ger mer upptag i fytoremediering. Samtidigt diskuteras att jordar skiljer sig åt. Till exempel i pH, mullhalt och lerhalt. Det påverkar hur metaller rör sig och hur växter tar upp dem. I diskussionen sätts fytoremediering med perenn solros i åkerjord in i ett praktiskt sammanhang. Man tar upp att H. maximilianis är flerårig och att det kan passa i system där man vill ha täckning av jordar under flera säsonger. Man tar också upp att metallanalysen behöver tolkas tillsammans med skörd och hantering av växtmaterial. Slutsatsen är att fytoremediering med perenn solros i åkerjord går att följa med metallanalysen och att H. maximilianis är en relevant art att arbeta vidare med i jordar där metaller är ett problem.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "detector_evasive",
},
{
title: "Lageroptimering med hjälp av datautvinning ur datalager",
text: "Denna studie undersöker hur lageroptimering kan stödjas genom datautvinning ur ett datalager, med utgångspunkt i att många organisationer sitter på stora mängder historiska data som sällan utnyttjas fullt ut i den operativa lagerstyrningen. Syftet är att analysera hur ett välstrukturerat datalager, i kombination med metoder för datautvinning, kan användas för att identifiera mönster i efterfrågan, upptäcka avvikelser och förbättra beslutsunderlaget för exempelvis beställningspunkter, säkerhetslager och påfyllnadsstrategier. Arbetet genomförs som en fallstudie där en verksamhets befintliga data- och lagerprocesser kartläggs och kopplas till ett datalager som samlar relevant information från flera källor, såsom försäljning, inköp, leveranser och lagersaldon. Med hjälp av datautvinning analyseras historiska transaktioner och lagerhändelser för att hitta återkommande samband, säsongsvariationer och produkter med avvikande beteenden (t.ex. hög volatilitet eller frekventa restnoteringar). Resultaten används för att formulera förbättringsförslag till lagerstyrningen, med fokus på att minska kapitalbindning och svinn samtidigt som servicenivån upprätthålls eller höjs. Studiens bidrag ligger i att tydliggöra hur datalager och datautvinning kan omsättas från tekniska resurser till praktiskt användbara insikter i lagerarbetet. Genom fallstudiens konkreta kontext belyses även vanliga utmaningar, exempelvis datakvalitet, integration mellan system och behovet av att tolka analytiska resultat i relation till verksamhetens mål och begränsningar. Sammantaget visar studien att en datadriven ansats kan skapa mer träffsäkra lagerbeslut, men att nyttan förutsätter både tillförlitliga data och en förankrad process där analysresultat faktiskt tas vidare till operativa åtgärder.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "human_like",
},
{
title: "Kvotflyktingar i Sverige: En kvalitativ studie om arbete och samverkan inom flyktingmottagande",
text: "Denna studie undersöker mottagandet av kvotflyktingar i Sverige med särskilt fokus på hur arbete och samverkan mellan berörda aktörer påverkar etablering och integration. Med utgångspunkt i en kvalitativ ansats belyses hur mottagningsprocessen formas av både individens förutsättningar och organisationers praktiska samarbete, exempelvis mellan kommunala verksamheter, Arbetsförmedlingen, civilsamhälle och andra stödstrukturer. Ett centralt tema är betydelsen av kvotflyktingars förkunskaper och tidigare erfarenheter – såsom utbildningsbakgrund, yrkeskompetens och språkliga resurser – och hur dessa tas tillvara (eller riskerar att förbises) i etableringsinsatser. Studien synliggör hur matchning mot arbete och utbildning ofta påverkas av institutionella ramar, tillgången till relevanta insatser samt graden av samordning. Brister i samverkan kan leda till parallella processer, informationsglapp och otydligt ansvar, vilket i sin tur kan fördröja vägen till egen försörjning och meningsfull delaktighet i samhället. Analysen tar stöd i Maslows behovshierarki och KASAM (känsla av sammanhang) för att förstå etablering som mer än en arbetsmarknadsfråga. Utifrån Maslow framträder hur grundläggande behov – trygghet, stabilt boende och tillgång till stöd – utgör förutsättningar för att individen ska kunna fokusera på lärande, arbete och social tillhörighet. KASAM används för att belysa hur begriplighet, hanterbarhet och meningsfullhet påverkar individens möjligheter att navigera i nya system och skapa riktning i tillvaron. När mottagandet upplevs sammanhängande och förutsägbart stärks individens handlingsutrymme och motivation, medan otydliga processer och fragmenterade insatser riskerar att undergräva både välbefinnande och etableringsprogression. Sammantaget visar studien att ett framgångsrikt mottagande av kvotflyktingar kräver en helhetssyn där arbete, sociala behov och psykosociala resurser förstås som sammanlänkade. Effektiv samverkan, tidig kartläggning av förkunskaper och insatser som stärker trygghet och begriplighet framstår som avgörande för att främja både etablering och långsiktig integration.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "baseline",
},
{
title: "Mesopotamiens gudomligförklarade kungar: En undersökning av teologiska perspektiv på två gudomligförklarade kungar i det forntida Mesopotamien",
text: "Ämnet för denna undersökning är de teologiska perspektiven runt två gudomligförklarade kungar i det forntida Mesopotamien; nämligen den gammalakkadiske kungen Naram-Sin (ca. 2254-2218 f.kr.) och den nysumeriske kungen Shulgi (ca. 2094-2047 f.kr.). De teologiska perspektiven behandlas här med hjälp av en induktionsbaserad historisk undersökning som utgår från vad olika forskare har skrivit i ämnet. Eftersom detta är en c-uppsats och det inte har varit möjligt att använda sig av primärkällor såsom arkeologiskt material och historiska källor på originalspråk så utgår denna undersökning uteslutande från forskningslitteratur. Undersökningen består av tre delar; i de två första delarna behandlas de teologiska perspektiven på kungarna var för sig och i det tredje görs en jämförelse mellan perspektiven. Undersökningens upplägg ser ut på så sätt att först har det gjorts observationer av vad som står om de teologiska perspektiven på monarkerna i de olika forskarnas verk. Sedan har perspektiven brutits ner i olika delämnen och därefter har informationen om dem sorterats in i de olika delämnena. Utifrån detta försöker sedan undersökningen att skissa fram en bild av de teologiska perspektivens karaktär. Uppsatsens tyngdpunkt ligger framförallt på att peka på olika tendenser i de religiösa föreställningarna runt dem med avseende på vilka teman de kretsar kring. I undersökningen framkommer det att perspektiven är ganska spretiga och går i många olika riktningar och även att det finns skillnader och likheter i perspektiven mellan kungarna. Två teman som dock ofta återkommer är fruktbarhet och himlen.",
isHuman: true,
type: "Kandidatuppsats abstrakt",
condition: "human",
},
{
title: "Om personalförmåner motiverar de anställda",
text: "Den här uppsatsen behandlar frågan om personalförmåner faktiskt motiverar anställda och vilken roll de spelar i organisationers belöningssystem. Utgångspunkten är att belöningar i arbetslivet inte enbart handlar om lön, utan även om olika typer av förmåner såsom friskvårdsbidrag, pension, flexibel arbetstid, kompetensutveckling och andra inslag som kan upplevas som värdefulla i vardagen. Genom att analysera personalförmåner som en del av ett bredare belöningssystem undersöks hur de kan påverka motivation, engagemang och i förlängningen prestation och lojalitet. I uppsatsen kopplas personalförmåner till motivationsteori och diskuteras både som yttre incitament och som möjliga stöd för inre motivation. En central utgångspunkt är att samma förmån kan uppfattas olika beroende på individens behov, livssituation och förväntningar. Därför problematiseras också antagandet att fler eller dyrare förmåner automatiskt leder till högre motivation. Förmåner kan fungera motiverande när de upplevs som relevanta, rättvisa och tydligt kopplade till organisationens omtanke om medarbetaren. Om de däremot upplevs som standardiserade, svårbegripliga eller orättvist fördelade riskerar de att få svag effekt eller till och med skapa missnöje. Vidare sätts personalförmåner in i ett ekonomistyrningsperspektiv, där belöningssystem ses som ett styrmedel för att påverka beteenden i linje med organisationens mål. Här diskuteras hur förmåner kan användas strategiskt för att attrahera och behålla kompetens, minska personalomsättning och stärka arbetsgivarvarumärket. Samtidigt lyfts den styrningsmässiga utmaningen i att mäta effekter: motivation och engagemang är svårfångade och påverkas av fler faktorer än belöningar, exempelvis ledarskap, arbetsmiljö och möjligheter till utveckling. Uppsatsen belyser därför behovet av att se personalförmåner som en del av ett sammanhängande system av styrning och incitament, snarare än som en isolerad åtgärd. Sammanfattningsvis visar uppsatsens resonemang att personalförmåner kan vara motiverande, men att effekten i hög grad beror på hur förmånerna är utformade, kommunicerade och integrerade i organisationens belöningssystem. För att fungera som ett effektivt verktyg inom ekonomistyrning behöver förmåner upplevas som meningsfulla för medarbetarna och samtidigt stödja verksamhetens långsiktiga mål.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "human_like",
},
{
title: "Aktiemarknadens effektivitet: En studie av effektiviteten på den svenska aktiemarknaden i samband med kvartalsrapporter",
text: "Denna studie handlar om Aktiemarknadens effektivitet och om hur effektiviteten på den svenska aktiemarknaden ser ut i samband med kvartalsrapporter. Utgångspunkten är EMH. Vi tar särskilt fasta på den semistarka formen av EMH eftersom den säger att all publik info snabbt ska synas i priset. Kvartalsrapporter är ett tydligt fall av ny publik info. Därför passar de för att testa hur snabbt och hur fullt Stockholmsbörsen tar in ny info. Vi genomför en eventstudie på bolag på Stockholmsbörsen. Vi utgår från en händelsedag som är dagen då kvartalsrapporter släpps. Vi bygger först en normal avkastning med Marknadsmodellen. Vi använder ett marknadsindex som jämförelse. Sedan räknar vi abnorm avkastning runt händelsedagen. Vi summerar den till CAR i valda eventfönster. Vi följer den vanliga linjen i litteraturen om eventstudier. Vi prövar om CAR avviker från noll. Vi tolkar utfallet som stöd eller svagt stöd för EMH i just detta sammanhang. Analysen fokuserar på om priset rör sig mest på rapportdagen eller om det finns tydliga rörelser före och efter. Om CAR blir stor före rapporten så pekar det mot att info når marknaden innan kvartalsrapporter släpps. Om CAR fortsätter efter rapporten så pekar det mot en långsam reaktion. Om CAR ligger nära noll i ett kort fönster så går det ihop med att Aktiemarknadens effektivitet är hög vid kvartalsrapporter. Resultaten knyts tillbaka till EMH och till hur Marknadsmodellen och CAR fångar reaktionen. Studien ger ett samlat svar på effektiviteten på den svenska aktiemarknaden kring kvartalsrapporter på Stockholmsbörsen.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "detector_evasive",
},
{
title: "3D på webben: nästa steg för E-handeln? Stereoskopisk 3D som produktpresentation",
text: "Den här studien undersöker om och hur stereoskopisk 3D kan utgöra “nästa steg” för produktpresentation inom e-handel. Med utgångspunkt i webbaserad 3D-teknik och stereoskopisk visning (S3D) analyseras möjligheterna att skapa en mer informativ och upplevelsebaserad produktpresentation än vad traditionella 2D-bilder och video normalt erbjuder. I fokus står I3DPP (stereoskopisk 3D som produktpresentation), där användaren får en tydligare känsla av form, djup och materialitet, vilket i teorin kan minska osäkerhet inför köp och därmed påverka både kundens beslutsprocess och upplevda förtroende för produkten. Arbetet diskuterar vilka typer av produkter och köpsituationer som särskilt kan dra nytta av S3D—exempelvis varor där storlek, proportioner och detaljrikedom är svåra att bedöma i 2D—samt hur tekniken förhåller sig till användbarhet och tillgänglighet på webben. Samtidigt problematiseras införandet av S3D ur ett praktiskt perspektiv: tekniska krav på utrustning och kompatibilitet, varierande användarförutsättningar, samt risken för ökad kognitiv belastning eller obehag vid 3D-visning. Studien belyser även hur en sådan presentation kan integreras i e-handelns befintliga flöden utan att skapa friktion, och vilka designval som krävs för att 3D ska tillföra verkligt värde snarare än att bli en ren effekt. Sammanfattningsvis pekar arbetet på att stereoskopisk 3D har potential att stärka produktförståelsen och upplevelsen i e-handel, men att nyttan i hög grad är beroende av kontext, målgrupp och teknisk implementation. För att S3D ska bli ett meningsfullt nästa steg krävs tydliga användarvinster, väl avvägda designprinciper och en pragmatisk syn på när 3D faktiskt förbättrar produktpresentationen jämfört med etablerade format.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "human_like",
},
{
title: "En undersökning om perspektivet på Islam i tre nyhetsprogram",
text: "Denna studie undersöker hur islam framställs i tre nyhetsprogram och vilka perspektiv som dominerar i rapporteringen. Utifrån medieforskning och teorier om orientalism analyseras nyhetsinslagens språkliga och visuella val, urval av ämnen, källor och röster samt hur konflikter och kulturmöten gestaltas. Särskild vikt läggs vid att identifiera tendenser till tendentiös rapportering, såsom generaliseringar, stereotypisering och återkommande kopplingar mellan islam och problem- eller hotbilder. Genom en kvalitativ innehållsanalys jämförs programmens narrativa strukturer och ramar (framing) för att synliggöra hur vissa tolkningar av islam normaliseras medan andra perspektiv marginaliseras. Studien diskuterar även möjliga diskriminerande effekter av mediala framställningar, exempelvis när muslimska aktörer i högre grad blir objekt för beskrivning än subjekt med egen tolkningsrätt. Resultaten relateras till nyhetsmediers roll i att forma publikens föreställningar om religion, identitet och samhällstillhörighet. Sammantaget syftar uppsatsen till att bidra med kunskap om hur nyhetsprogram kan reproducera eller utmana orientalistiska mönster och hur rapporteringen påverkar förståelsen av islam i ett pluralistiskt samhälle.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "baseline",
},
{
title: "Matematik för alla?: Hur lärare arbetar med individualisering",
text: "Utgångspunkt för arbetet har varit de brister i matematikkunskaper hos eleverna som framkommit i ett flertal rapporter, samtidigt som många framställningar pekar på att dagens matematikundervisning bedrivs på ett mycket traditionellt sätt. Syftet med denna uppsats har varit att ur ett matematikdidaktiskt perspektiv belysa hur matematiklärare i grundskolans senare år planerar, genomför, följer upp och utvärderar sin undervisning i avsikt möta den stora variation av elever som finns i varje elevgrupp, dvs hur lärare arbetar för att variera sin undervisning i syfte att individualisera för eleverna. Undersökningen har genomförts som en kombination av enkät och intervju, där den inledande enkäten dels har gett en bred bild av lärarnas uppfattningar inom några väsentliga områden dels använts för att fånga in intervjupersoner för den efterföljande intervjun. Den senare delen av undersökningen, där avsikten varit att komma några utvalda lärare närmare in på livet, har genomförts som kvalitativa intervjuer. Resultatet av undersökningen visar att det både finns stora variationer mellan olika lärares sätt att arbeta, samtidigt som det finns många gemensamma uppfattningar. Den bild som jag fått genom intervjuerna, vilken i mycket stämmer överens med flera tidigare undersökningar, är att den dominerande formen av individualisering är hastighetsindividualisering där eleverna arbetar med samma material men i olika takt. För att individualisera undervisningen på ett mer effektivt sätt krävs troligtvis en större variation, än vad denna undersökning kunnat visa, både vad gäller innehåll och metoder. Ofta handlar det om resurser, intentioner kontra betingelser, och frågan om att låta sig styras eller att försöka påverka och styra. För att kunna arbeta efter det senare alternativet krävs ett systematiskt och strukturerat angrepps- och arbetssätt. Detta kräver i sin tur åtgärder på flera olika nivåer inom skolan",
isHuman: true,
type: "Kandidatuppsats abstrakt",
condition: "human",
},
{
title: "Innan den strukturella differentieringens tidevarv",
text: "Den här uppsatsen handlar om tiden innan den strukturella differentieringens tidevarv. Den tar sin utgångspunkt i Tornedalen. Den följer hur en sockenkyrka band samman folk och rum. Den visar också hur kyrkoförlust blev en tydlig erfarenhet när gränser drogs om och när gamla vägar bröts. Tyngdpunkten ligger på 1809-års krig och följderna efter freden. När riket delades förändrades villkoren snabbt i Tornedalen. Haparanda växte fram i en ny roll. Björkö fick en annan plats i vardagen och i det lokala minnet. Uppsatsen beskriver hur sockenkyrka fungerade som ett centrum för gudstjänst, dop, vigsel och begravning. Den var också en plats för möten och för ordning i tiden. Det blev tydligt när sockenkyrka inte längre låg på samma sida av gränsen som många av dem som hade hört dit. Uppsatsen använder kyrkböcker och protokoll från socknen. Den tar också in kartor och brev från tiden kring 1809. Den jämför uppgifter från Haparanda och Björkö. Den följer enskilda namn som präster, klockare och länsmän. Den tar upp hur de skrev om resor till sockenkyrka. Den tar upp hur de skrev om nya vägar och nya hinder. Materialet visar hur kyrkoförlust inte bara var en fråga om tro. Den var också en fråga om vardag. Folk behövde en plats för riter. De behövde också en plats för beslut och gemensamma regler. Uppsatsen diskuterar hur man kan förstå förändringen innan den strukturella differentieringens tidevarv. Den visar hur sockenkyrka höll ihop flera saker på samma gång. Den visar hur detta mönster bröts när 1809-års krig och gränsdragningen ändrade villkor i Tornedalen. I Haparanda blev det viktigt att bygga upp nya former för kyrkoliv. I Björkö levde äldre band kvar men de fick nya ramar. Uppsatsen avslutar med att kyrkoförlust gav en lång effekt. Den påverkade minnet av platsen. Den påverkade också hur man talade om hemhörighet i Tornedalen efter 1809.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "detector_evasive",
},
{
title: "Hur budgeterar gaseller?: En studie om tillväxtens påverkan på budgetering i gasellföretag",
text: "Denna kandidatuppsats undersöker hur så kallade gasellföretag budgeterar och på vilket sätt snabb tillväxt påverkar budgeteringsprocessen. Med utgångspunkt i begreppen budgetering, gasellföretag och tillväxt belyser studien budgetens roll i verksamheter som kännetecknas av högt tempo, osäkerhet och förändrade resursbehov. Fokus ligger på hur budgeten används som styrmedel för planering, resursfördelning och uppföljning när företaget växer snabbt. Studien problematiserar särskilt spänningen mellan budgetens behov av struktur och kontroll och gasellföretagens behov av flexibilitet och snabb anpassning. Det analyseras hur tillväxt kan påverka bland annat budgethorisont, detaljeringsgrad, ansvarsfördelning och graden av formaliserade rutiner. Vidare behandlas hur budgetering kan utvecklas i takt med att företag går från mer informella arbetssätt till mer etablerade styr- och rapporteringsprocesser, samt vilka alternativ eller komplement som kan bli aktuella (exempelvis rullande prognoser eller tätare uppföljning). Sammanfattningsvis syftar uppsatsen till att skapa en ökad förståelse för hur budgetering praktiseras i snabbväxande företag och vilka anpassningar som krävs för att budgeten ska vara ett relevant stöd i styrningen under perioder av kraftig tillväxt.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "baseline",
},
{
title: "Datakvalitetsverktyg i datalager: Hur hanterar datakvalitetsverktyg datakvalitetsfaktorer?",
text: "Den här uppsatsen behandlar hur datakvalitetsverktyg används i datalager och på vilket sätt de kan hantera centrala datakvalitetsfaktorer. Utgångspunkten är att datalager ofta samlar in, integrerar och lagrar data från flera källsystem, vilket gör att brister i kvalitet lätt följer med in i lagret och i förlängningen påverkar rapportering, analys och beslutsfattande. Därför blir datakvalitet inte bara en teknisk fråga, utan en förutsättning för att datalagret ska vara tillförlitligt och skapa verksamhetsnytta. Fokus ligger på att koppla vanliga datakvalitetsfaktorer – exempelvis korrekthet, fullständighet, aktualitet, konsistens och unikhet – till funktioner i datakvalitetsverktyg. Uppsatsen belyser hur verktygen i praktiken arbetar med att profilera data (för att upptäcka avvikelser och mönster), validera innehåll mot regler och referensdata, standardisera format, matcha och deduplicera poster samt berika data för att öka dess användbarhet. Vidare diskuteras hur datakvalitetslösningar kan integreras i datalagerarkitekturen, antingen som en del av ETL/ELT-flöden eller som fristående steg i datahanteringsprocessen, samt hur automatisering och övervakning kan bidra till att kvaliteten upprätthålls över tid. Sammanfattningsvis visar uppsatsen att datakvalitetsverktyg kan hantera flera datakvalitetsfaktorer effektivt, men att resultatet i hög grad beror på hur väl regler och processer är förankrade i verksamhetens behov. Tekniken kan identifiera och åtgärda många problem, men kräver tydliga definitioner av vad som räknas som “bra” data, löpande uppföljning samt ansvarsfördelning för att datakvalitet ska bli en hållbar del av datalagerarbetet.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "human_like",
},
{
title: "Kommunikationspolicyn: En studie av svenska offentliga organisationers kommunikationspolicys med utgångspunkt i samtida forskningsperspektiv",
text: "I akademisk litteratur om public relations och strategisk kommunikation talas det om ett paradigmskifte. Istället för att se kommunikation som information som skickas från en aktiv sändare till en passiv mottagare; börjar man se kommunikation som något som skapas i en dialog mellan två aktiva aktörer. Man rör sig från en strategisk syn på publiken som en påverkbar målgrupp till en dialogisk syn på publiken som aktiva deltagare. Har detta paradigmskifte även ägt rum i praktiken? Hur ser man på kommunikation inom svenska offentliga organisationer idag? Finns det några likheter och skillnader i synsätt; och vad kan dessa tänkas bero på? Materialet utgörs av elva svenska offentliga organisationers kommunikationspolicys. Teorin utgörs av två svenska forskningsantologier om public relations respektive strategisk kommunikation; samt ett urval kritiskt problematiserande artiklar i ämnet. Efter en genomgång av den teoretiska litteraturen har de samtida forskningsperspektiven sammanfattats. Utifrån dessa har en idéanalysmall; en typologi; konstruerats med utgångspunkt i två idealtyper. Det förekom tydliga samband mellan de olika synsätten och hart när alla organisationer gick att placera i endera av de två idealtyperna. Samtliga forskningsperspektiv utom ett gick att hitta i materialet. Skillnaderna i synsätt gick att koppla till de olika organisationernas uppdrag och utformning. Organisationer med nya synsätt är överlag sådana som har tydliga behov av att effektivt kommunicera med omvärlden; medan de övriga organisationerna huvudsakligen har en informationsspridande funktion.",
isHuman: true,
type: "Kandidatuppsats abstrakt",
condition: "human",
},
{
title: "Förmögenhetsbeskattning av onoterade aktier - är den ändamålsenligt utformad för den skatteskyldige?",
text: "Denna uppsats behandlar hur förmögenhetsbeskattningen av onoterade aktier är utformad och i vilken utsträckning reglerna kan anses ändamålsenliga ur den skattskyldiges perspektiv. Utgångspunkten är de särskilda värderings- och beskattningsproblem som uppstår när aktierna inte är föremål för marknadsnotering, vilket medför att ett tydligt marknadsvärde ofta saknas. Därmed aktualiseras frågor om förutsebarhet, likformighet och rättssäkerhet i beskattningen. I fokus står de metoder och principer som används för att fastställa beskattningsunderlaget för onoterade innehav samt vilka praktiska konsekvenser dessa får för olika typer av skattskyldiga, exempelvis ägare till familjeföretag och entreprenörsledda bolag. Uppsatsen analyserar hur reglerna påverkar individens möjlighet att planera sin ekonomi och hantera skattens likviditetseffekter, särskilt i situationer där tillgångarna är kapitalbundna och svåra att omsätta utan att påverka företagets verksamhet. Vidare problematiseras om den nuvarande utformningen uppnår ett rimligt förhållande mellan skatteuttag och faktisk betalningsförmåga, samt om den skapar oönskade incitament såsom omstruktureringar, utflyttning eller val av ägarform av skatteskäl. Sammantaget syftar uppsatsen till att bedöma om beskattningen av onoterade aktier är ändamålsenlig genom att väga statens intresse av effektiv skatteuppbörd mot kraven på rättvisa, tydlighet och praktisk hanterbarhet för den skattskyldige.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "baseline",
},
{
title: "Balanserat styrkort i primärvården: En fallstudie om styrning med balanserat styrkort på KvaLita Närsjukvård AB",
text: "Denna kandidatuppsats handlar om balanserat styrkort i primärvården. Den tar upp ekonomistyrning och hur styrning med balanserat styrkort fungerar i praktiken. Studien är en fallstudie om KvaLita Närsjukvård AB. Syftet är att beskriva hur företaget använder styrkort och hur det hänger ihop med mål, uppföljning och ansvar i verksamheten. Uppsatsen utgår från att balanserat styrkort ska ge en mer samlad bild än bara ekonomi. Den knyter an till Kaplan och Norton och deras modell från 1992. Den visar hur ett styrkort kan dela upp styrningen i flera delar och hur primärvård behöver det eftersom arbetet både rör pengar, vård och bemötande. I KvaLita Närsjukvård AB kopplas ekonomistyrning till mål som personalen ska kunna följa i vardagen. Det gör att styrning med balanserat styrkort blir ett verktyg som återkommer i planering och i återkoppling. Fallstudien beskriver hur KvaLita Närsjukvård AB sätter mål. Den beskriver också hur de väljer mått och hur de följer upp dem. Styrkortet används i möten och i rapporter. Det används när chefer pratar om resultat med enheter och team. Uppsatsen visar att styrkortet får en tydlig roll i primärvård när man vill hålla ihop kvalitet och ekonomi. Den visar också att ekonomistyrning får mer innehåll när den kopplas till fler delar av styrkortet och när den följs upp löpande. Sammanfattningsvis visar uppsatsen att balanserat styrkort i primärvården kan stödja styrning med balanserat styrkort på KvaLita Närsjukvård AB. Den visar hur styrkort kan göra mål mer synliga. Den visar hur uppföljning kan bli mer regelbunden. Den visar hur ekonomistyrning kan kopplas till det som sker i primärvård varje dag.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "detector_evasive",
},
{
title: "Ingen rädder för vargen?: En kvantitativ innehållsanalys av tre tidningstyper med avseende på rapporteringen om varg",
text: "Denna studie undersöker hur vargen gestaltas i svensk press och om rapporteringen skiljer sig åt beroende på tidningstyp. Med utgångspunkt i frågan ”Ingen rädder för vargen?” genomförs en kvantitativ innehållsanalys av vargrelaterade texter i tre kategorier av medier: storstadspress, landsortspress och fackpress. Syftet är att kartlägga vilka teman som dominerar, vilka perspektiv som ges utrymme och i vilken mån rapporteringen präglas av oro, konflikt eller normalisering. Analysen fokuserar på återkommande innehållsmönster i materialet, exempelvis vilka aspekter av vargfrågan som lyfts fram (som rovdjurspolitik, tamdjursangrepp, jakt, naturvård och samexistens), hur ofta olika aktörer får komma till tals samt vilken övergripande ton som artiklarna förmedlar. Genom kodning av variabler som ämnesfokus, värderande språkbruk, problemformulering och källtyper möjliggörs jämförelser mellan tidningstyperna och en bedömning av om vargen främst framställs som hot, resurs eller samhällsfråga. Studiens upplägg gör det möjligt att synliggöra strukturella skillnader i rapporteringen. Storstadspress antas i större utsträckning placera vargfrågan i ett bredare politiskt och miljörelaterat sammanhang, medan landsortspress i högre grad kan väntas knyta an till lokala konsekvenser, närhet till vargrevir och konflikter mellan boende, jägare och myndigheter. Fackpressen kan i sin tur antas präglas av ett mer specialiserat språk och ett tydligare fokus på sakfrågor, exempelvis förvaltning, jaktpraktiker eller naturvårdsargument. Sammantaget bidrar studien med en systematisk översikt över hur olika medielogiker och målgrupper påverkar vilka bilder av vargen som reproduceras i offentligheten, och därmed hur den omstridda rovdjursfrågan ramas in för läsaren.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "human_like",
},
{
title: "Medarbetarnas upplvelse av gruppdialogen enligt Amforas samtalsmodell",
text: "Denna kandidatuppsats handlar om medarbetarnas upplvelse av gruppdialogen enligt Amforas samtalsmodell. Fokus ligger på hur gruppdialogen upplevs i praktiken. Studien tar också upp vad som händer när samtalet närmar sig en Komfortgräns. Utgångspunkten är att Amfora och samtalsmodell används för att skapa ett mer ordnat samtal där fler kommer till tals. Arbetet bygger på en kvalitativ ansats. Medarbetare får beskriva hur de upplever gruppdialog när Amforas samtalsmodell används. Materialet sorteras efter återkommande teman. Analysen rör både det som händer i rummet och det som deltagarna tar med sig efteråt. Här blir Komfortgräns central. Den syns när någon drar sig undan. Den syns också när någon tar mer plats eller styr samtalet. Resultatet visar att medarbetarnas upplvelse ofta blir mer positiv när samtalsmodell ger tydliga ramar. Många beskriver att gruppdialog blir lugnare. Fler lyssnar. Fler väntar på sin tur. Det blir också lättare att ta upp sakfrågor som annars fastnar. Samtidigt beskriver flera att Komfortgräns påverkar vad de vågar säga. Det gäller särskilt när ämnet rör ansvar, konflikt eller hur arbetet ska göras. Sammanfattningsvis visar studien att gruppdialog enligt Amforas samtalsmodell skapar en struktur som medarbetare upplever som stödjande. Den gör samtalet mer jämt. Den gör att fler kommer in. Men den tar inte bort Komfortgräns. I stället blir Komfortgräns synlig. Det gör att arbetet med gruppdialog behöver fortsätta även efter att Amfora och samtalsmodell har införts.",
isHuman: false,
type: "Kandidatuppsats abstrakt",
condition: "detector_evasive",
},
{
title: "Ickeverbal kommunikation: Hur kontakt kan skapas med demensdrabbade genom beröring och genom musik",
text: "Bakgrund: Att skapa kontakt med demensdrabbade kan vara svårt om vårdaren inte har rätt kunskap i hur kontakt kan skapas. Den ickeverbala kommunikationen såsom beröring och musik kan vara av betydelse när kontakt ska skapas. Människan förknippar beröring med att vara omtyckt och genom detta ökar känslan av trygghet och tillit och på så sätt kan kontakt skapas. Ett annat sätt att skapa kontakt på är genom musik, där det har visat sig att minnet av sång och musik betyder mycket för människan och kan stärka kommunikationen. Syfte: Syftet med studien är att belysa hur kontakt kan skapas med demensdrabbade genom beröring och genom musik. Metod: En litteraturstudie som är baserad på åtta vetenskapliga artiklar. Artiklarna ar granskade och analyserade efter Burnards innehållsanalys. Orlandos omvårdnadsteori användes som teoretisk referensram och som b1.a. tar upp interaktionen mellan vårdare och patient. Resultat: I resultatet har det visat sig att genom beröring och genom musik kan vårdare få en ökad förståelse för den demensdrabbade. Kontakt och kommunikation skapar gemenskap mellan demensdrabbade och deras vårdare, känslor av välbefinnande bildas och minnesförmågan hos personer med demenssjukdom ökar",
isHuman: true,
type: "Kandidatuppsats abstrakt",
condition: "human",
},
];
// Thread-style Reddit-like discussions
// Each thread has a question and a list of comments
const THREADS = [
{
questionText: "Om man äter massor av spaghetti som mellanmål några gånger om dagen, går man upp i vikt då? Eftersom det innehåller ju en del kolhydrater Tänkte testa nå nytt",
comments: [
{
text: "Ja, om du äter massor av spaghetti som mellanmål så är det stor risk att du går upp i vikt, speciellt om du inte är aktiv. Kolhydrater blir lätt energi som kroppen lagrar som fett om du inte förbränner dem. Kanske testa att blanda med lite grönsaker eller protein för en mer balanserad kost?",
isHuman: false,
condition: "baseline",
},
{
text: "Det är inte “kolhydraterna” i sig som gör att du går upp, utan att du hamnar på överskott av kalorier över tid. Spaghetti är rätt lätt att få i sig mycket av (speciellt om man kör stora portioner som mellanmål flera gånger om dagen), så ja – äter du “massor” utöver det du redan äter så lär vikten ticka upp. Sen beror det på hur du äter i övrigt. Byter du ut andra mellanmål mot spaghetti och totala intaget blir samma, då händer troligen inte så mycket. Men om du bara lägger till extra pasta ovanpå allt annat så blir det snabbt många hundra kcal extra per dag. Och som mellanmål är det lite… udda. Mättar inte alltid superlänge om du kör bara pasta. Vill du ändå köra på det: håll koll på mängden och släng på nåt som gör det mer “komplett” (protein/fett), typ kyckling/tonfisk/ägg/keso och lite grönsaker, så blir du mättare och det blir lättare att inte överäta.",
isHuman: false,
condition: "human_like",
},
{
text: "Klart du kan gå upp i vikt om du trycker i dig massor av spaghetti flera gånger om dagen. Det handlar inte om att det är “kolhydrater” i sig som magiskt gör dig tjock, utan om totala mängden kalorier över dagen. Pasta är ganska energitätt och det är lätt att få i sig mycket utan att bli mätt länge, särskilt om du kör det som mellanmål. Vill du testa nåt nytt så kör, men håll koll på portionerna och vad du har till (olja, ost, såser drar iväg fort). För mellis funkar ofta nåt med mer protein/fibrer bättre för mättnaden, typ kvarg/ägg/macka med bra pålägg, men pasta ibland är inget konstigt.",
isHuman: false,
condition: "human_like",
},
{
text: "Ja, det kan hända att du går upp i vikt om du äter stora mängder spaghetti som mellanmål. Kolhydrater ger energi, men om du får i dig fler kalorier än du förbrukar så kan det leda till viktökning. Det är alltid bra att tänka på balansen och kanske kombinera spaghettin med något proteinrikt eller grönsaker för att få en mer välbalanserad kost. Prova att lyssna på din kropp och se hur den reagerar!",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Mat till event utan kylskåp, men micro? Hyfsat less på panpizzor. **edit:** shit, menade inte till andra, bara till mig då",
comments: [
{
text: "Kör sånt som klarar rumstemp och bara behöver en vända i micron. Typ tortillawraps: ha med burktonfisk/kyckling på burk, salsa, bönor/majs och nån kryddmix, rulla ihop på plats. Eller couscous i matlåda (behöver bara varmt vatten om du får tag i det, annars micra med lite vatten), släng i soltorkade tomater, oliver, kikärtor, feta (finns ibland i småförpackning som klarar sig en stund). Annars är “bönchili på burk + ris i mikropåse” helt okej och billig. Jag har också kört micro-ramen och pimpat med jordnötssmör, chili, lime (om du orkar), och typ en burk champinjoner. Låter skumt men funkar när man är less på panpizza. Och glöm inte havregrynsgröt i micron om allt annat känns trist. Släng i banan/peanut butter så överlever man eventet utan att bli arg.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Asså micro utan kyl är ändå rätt mycket bättre än det låter. Jag brukar köra typ tortillawraps som “bas” och sen fylla med sånt som klarar sig: burktonfisk/kyckling på burk, majs, bönor, salsa på burk. Släng in i micron 30–60 sek så det blir lite varmt och mindre deppigt än kall wrap. Annars: nudelkoppar men pimpa med jordnötssmör + soja + sriracha (om du har), eller köp färska ägg och gör “micron-omelett” i en kopp med lite salt/peppar, rivna morötter typ (låter skumt men funkar). Havregrynsgröt är också underrated, går att göra i micro och du kan köra banan + jordnötssmör, eller kanel och russin. Och vill du ha “riktig mat”-känsla: microris (sån där påse) + bönmix + tacosås = typ ful-burrito bowl. Klarar sig i skafferiet och du slipper panpizza för femtioelfte gången.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Goohs micromaträtter, dom som piper när dom är klara, är sjukt goda.",
isHuman: true,
condition: "human",
},
{
text: "Om du har micro men ingen kyl så är det ändå rätt chill, bara satsa på grejer som klarar sig i rumstemp ett dygn och som är “helfabrikat”/torrt tills du öppnar. - Microris + färdig linsgryta/dal på tetra (såna som är hyllvara) - Couscous/nudlar + tonfisk/makrill på burk + lite olivolja/chilikrydda - Bönor på burk + tacokrydda + ris = “tacobowl” utan kyl - Soppor på tetra + knäckebröd/flatbread - Havregrynsgröt i micro (vatten + havre), toppa med jordnötssmör/banan/honung - Tortillas + burkkyckling/tonfisk + salsa i liten burk (äts direkt, inget som ska sparas öppnat) - Pulvermåltider (typ Real Turmat/Huel/”ramen”-grejer) om du pallar sånt Och protip: ta med en liten flaska sriracha/soja och en kryddmix, då smakar allt 10x mindre “panpizza-depp”.",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Hejhej käre tiltare. Någon som vet ifall några nya nerladdningsbara klienter till mac har släppts? Hitills vet jag bara om Full tilt. En innom EU hade varit götta. Vet att det finns en tråd, men tills dom fixar sök så korspostar jag och postar nytt. /fl.",
comments: [
{
text: "Kör Mac själv och det är tyvärr fortfarande rätt skralt. Full Tilt har ju en “riktig” Mac-klient, annars är det mest webbaserat som gäller (t.ex. PokerStars kör väl fortfarande inte native Mac utan man får köra deras via Wine/Crossover eller liknande). Inom EU: Unibet/Prima och Betsson/Microgaming har haft webblösningar som funkar okej i Safari/Chrome, men “nedladdningsbar Mac-klient” är sällan på riktigt, ofta bara en Windows-wrapper. Om du inte är rädd för lite meck så funkar Bootcamp bäst för stabilitet, Crossover/Wine i andra hand. Vilka sajter spelar du på/letar du efter (cash/tourneys)? Kan tipsa mer om du säger det.",
isHuman: false,
condition: "human_like",
},
{
text: "Körde Mac ett tag och det var typ alltid samma visa… de flesta sajter hade bara java/webb eller halvtrasiga lösningar. För “riktig” nedladdningsbar klient var det i princip Full Tilt + PokerStars som gällde (Stars har/har haft Mac-klient som funkar okej). Inom EU är det mest licensstrul som gör att utbudet suger, många kör bara Windows-klient och skiter i oss. Annars är det Bootcamp/Parallels som räddar en om man pallar, tyvärr.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Tror tyvärr inte det hänt supermycket på “riktiga” Mac-klientfronten senaste tiden. Full Tilt (om du nu fortfarande kör den) är ju den klassiska, men annars är det mest via browser/Java-lösningar eller att folk kör Windows-klienterna via Parallels/Bootcamp/Wine. Inom EU: kolla PokerStars har Mac-klient (om du inte redan gjort det), annars är det rätt tunt. De flesta nätverk har lagt mer krut på webbklienter än native för macOS. Vad är det för spel/limits du är ute efter? Cash/MTT? Då kanske man kan tipsa mer konkret.",
isHuman: false,
condition: "human_like",
},
{
text: "Hej! Jag har tyvärr inte sett några nya klienter för Mac nyligen, förutom Full Tilt. Skulle också gärna se fler alternativ inom EU. Hoppas de släpper något snart, det skulle verkligen underlätta för oss macanvändare! Håller koll på tråden, så hoppas vi får höra något snart. :)",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Någon annan som är ensam och full på nyårs? Sambon är med polare och mina kompisar alla bailade. (Hade bra anledningar och jag vart bjuden att joina sambon men eh, skönt med ensam tid) Nån som vill joina?!",
comments: [
{
text: "är inte ensam, för jag firar med min farmor, men kanske lite halvfull! allt bubbel vi köpte smaka piss så nu dricker jag billig rosé med nån jävla proviva iblandat för att det ska smaka bättre. det är så man vet att ens drink är serverad av en 90-åring :) om du villle snacka på skype så har jag samma användarnamn där som här! ps västerbotten represent (min flair säger östergötland för där bor jag nu men jag är umebo born and raised)",
isHuman: true,
condition: "human",
},
{
text: "Japp, sitter själv med en halvljummen prosecco och glor på nån kass repris på tv. Alla “ska bara ta det lugnt” tills man ser deras stories sen… klassiker. Skönt ändå att få vara ifred ibland, särskilt om du redan fick invite och ba “nä jag orkar inte folk”. Vad dricker du då?",
isHuman: false,
condition: "detector_aware",
},
{
text: "Japp, känner igen den där. Sitter också solo med ett glas och försöker intala mig själv att det är “självvald egentid” och inte bara FOMO. Men ärligt, det kan vara rätt skönt att slippa stressen och bara göra sin grej. Vad kör du för upplägg? Film, musik, spel? Jag är på att snacka lite här i tråden i alla fall.",
isHuman: false,
condition: "baseline",
},
{
text: "Japp, samma här typ. Sitter själv med ett glas och försöker intala mig att det är “självvald återhämtning” och inte bara att alla planer dog Men ärligt, ensamnyår kan vara rätt soft också – inga krav, ingen stress, bara göra exakt det man vill. Vad kör du för upplägg? Jag kan joina i tråden iaf, skål på distans!",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Jag befinner mig i Stockholm för tillfället och skulle vilja ha tips på affärer som säljer diverse brädspel, t.ex. Diplomacy eller Settlers of Catan. De vanliga affärerna tycks inte ha dessa spel. Tacksam för svar!",
comments: [
{
text: "Kolla Sci-Fi Bokhandeln vid Gamla stan, de brukar ha rätt mycket brädspel (inte bara nördprylar). Sen Dragons Lair på Kungsholmen om du vill nörda loss ordentligt, där har jag sett både Catan och sånt som inte finns på Åhléns typ. Webhallen i city kan också ha en del, men mer hit or miss. Annars om du bara vill hitta Catan snabbt så kan typ Akademibokhandeln på Mäster Samuelsgatan ha det ibland, fast deras sortiment är lite… slump.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Hej! Du borde kolla in \"Spel och Sånt\" på Södermalm, de har ett riktigt bra utbud av brädspel, inklusive de klassiska. Annars kan \"Swordfish\" i Gamla Stan också vara värt ett besök. De har massor av spel och personalen är superhjälpsam. Lycka till med spelletandet!",
isHuman: false,
condition: "baseline",
},
{
text: "Kolla in Alphaspel (Bromma, men de har också webbshop) – de brukar ha rätt nischade brädspel och mycket import. I stan är Science Fiction Bokhandeln på Västerlånggatan ofta ett säkert kort för Catan och liknande, och även en del mer “hobbygrejer”. Sen finns Spelexperten i Hötorgshallen (om den fortfarande är kvar) som kan ha klassiker som Diplomacy ibland. Annars: ring och fråga innan du åker, lagersaldon kan variera rätt mycket.",
isHuman: false,
condition: "human_like",
},
{
text: "Du kan kolla in \"Game Vault\" på Södermalm, de har ett bra utbud av brädspel och specifika titlar som Diplomacy och Settlers of Catan. Annars är \"Spelexperten\" ett bra alternativ, de har också många intressanta spel och personalen är superhjälpsam. Lycka till!",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Har precis köpt en gainer och det står att man ska ha i 50 gram. Hur mycket är det i ett dl-mått?",
comments: [
{
text: "Beror lite på hur fluffig gainern är, men som tumregel väger protein/gainerpulver typ 25–35 g per dl. Så 50 g blir nånstans runt 1,5–2 dl. Jag hade bara kört på våg om du har, dl-mått är rätt värdelöst för pulver (packar sig olika varje gång).",
isHuman: false,
condition: "detector_aware",
},
{
text: "Det går tyvärr inte att säga exakt i dl eftersom gainer kan väga olika beroende på hur “fluffigt” pulvret är. Men som tumregel brukar 1 dl pulver ligga nånstans runt 30–40 g. Så 50 g blir typ ca 1,3–1,7 dl-ish. Bästa är att väga en gång med köksvåg så vet du sen exakt hur mycket ditt dl-mått motsvarar.",
isHuman: false,
condition: "human_like",
},
{
text: "Svårt att säga exakt i dl eftersom det beror på hur “fluffigt” just din gainerpulver är, men på ett ungefär brukar 50 g hamna runt 0,8–1 dl. Bästa är att väga en gång med köksvåg och sen kolla hur mycket det blir i ditt dl-mått, så slipper du gissa varje gång.",
isHuman: false,
condition: "human_like",
},
{
text: "Jag är tämligen säker på att en deciliter motsvarar ca. 50 gram i ditt fall, jag äter själv en pulverbaserad måltidsersättning, vilken väger 45 gram per deciliter, någon större skillnad kan jag inte tänka mig att det finns.",
isHuman: true,
condition: "human",
},
],
},
{
questionText: "Vad kallar en blind programmerare sin ledhund? SYNTAX.",
comments: [
{
text: "Hahaha, den var ändå rätt klockren. “Syntax” som ledhund för en blind programmerare… nördig ordvits när den är som bäst.",
isHuman: false,
condition: "human_like",
},
{
text: "Haha, den där var ändå rätt vass. “SYNTAX” som ledhund till en blind programmerare… både nördigt och så dåligt att det blir bra.",
isHuman: false,
condition: "human_like",
},
{
text: "Ordvitsen Sweddit inte röstade upp in absurdum men som förtjänade det, speciellt kommentarerna.",
isHuman: true,
condition: "human",
},
{
text: "Din mamma är så tjock så att när hon väger sig står det INTEGER ERROR: OVERFLOW",
isHuman: true,
condition: "human",
},
],
},
{
questionText: "Stopp vid Odenplan för tunnelbanans gröna linje 17, 18 och 19 sedan kl 0:08 på grund av ordningsproblem.",
comments: [
{
text: "Jaha, då var det Odenplan igen… gröna linjen står still pga “ordningsproblem” mitt i natten, helt otippat. SL:s info är som vanligt lika tydlig som en dimma: man får gissa om det är bråk, väktare, eller nån som inte kan bete sig. Bara att räkna med att det tar en evighet och börja kolla buss/pendel eller gå om man kan.",
isHuman: false,
condition: "human_like",
},
{
text: "Jag var där när killen hoppade ner på spåret och sprang in i tunneln. Han var jagad av två ordningsvakter och tre poliser. När jag kom upp från t-banestationen kom det ytterligare två piketbussar - en för civilpoliser och en vanlig.",
isHuman: true,
condition: "human",
},
{
text: "Det är någon snubbe som vägrar komma ut därifrån fick jag höra av en kompis från tunneln asså",
isHuman: true,
condition: "human",
},
{
text: "Typiskt! Varför kan inte folk bara sköta sig? Odenplan verkar alltid vara ett ställe där det händer grejer. Hoppas ingen blivit skadad och att situationen löser sig snart!",
isHuman: false,
condition: "baseline",
},
],
},
{
questionText: "Vilka är era bästa synonymer för \"full\"?",
comments: [
{
text: "Asså “full” är ju standard, men jag brukar variera lite beroende på läge. Packad funkar alltid. Snurrig när man vill låta lite snällare. På lyset är en klassiker. Salongsberusad om man vill låtsas att man har kontroll (fast man inte har det). Dyngrak när det är total urspårning. Kanonfull är också bra, och “på kanelen” säger jag ibland mest för att det låter så jäkla gubbigt. “Rund om fötterna” när man vinglar men ändå tror man går rakt. “Plakat” är rätt gött ord med. Och så den där: “lite dragen” = man är inte lite dragen.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Från studietiden: \"Jag är inte full, jag har pollenallergi\"",
isHuman: true,
condition: "human",
},
{
text: "Beror lite på läget, men jag kör ofta på “packad” när det är rejält, “asberusad” när man vill låta lite dramatisk, och “på lyran”/“på kanelen” om man ska vara gubbcharmig. “Rund under fötterna” är också fint när man försöker förneka att man är dyngrak. “Tokfull” funkar alltid. Sen finns ju klassikern “salongsberusad” när man vill låtsas att man har koll (vilket man sällan har).",
isHuman: false,
condition: "detector_aware",
},
{
text: "\"Låtsasglad\", \"sneseglare\" och \"nyskild\" är dom som används ofta så här i 30års åldern.",
isHuman: true,
condition: "human",
},
],
},
{
questionText: "Tips på bra julbord i Stockholm? Var går man ut och äter kvalitets-julbord i Stockholm? (Lunch eller middag spelar ingen roll.)",
comments: [
{
text: "Beror lite på vad du är ute efter, men om du vill ha “riktigt” julbord och inte bara en buffé som smakar catering: Operakällaren är svindyrt men det är faktiskt löjligt bra om man vill göra en grej av det. Annars brukar jag tipsa folk om Stallmästaregården – mysigt, lite mer klassiskt och känns inte som ett konferenscenter-julbord. Ulla Winbladh på Djurgården är också en safe bet, trevlig miljö och bra sill (tycker jag i alla fall). Vill du ha mer stök och “Stockholmsjul” så kör Tennstopet/Den Gyldene Freden (boka i tid, annars glöm). Skansen kan vara rätt kul om man gillar atmosfär och att det är lite gammaldags, men det är inte samma “wow” på maten som de andra. Och ja, boka tidigt, Stockholm i december är helt bananas.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Beror lite på vad du är ute efter (klassiskt vs mer “fine dining”), men några ställen som brukar leverera på riktigt bra nivå i Sthlm: Ulla Winbladh (Djurgården) – väldigt klassiskt, mysig miljö och brukar hålla hög kvalitet rakt igenom. Populärt, så boka tidigt. Operakällaren – dyrt, men om du vill ha “lyxjulbord” med topp råvaror och service så är det här en av de säkraste korten. Tennstopet – stabilt, traditionellt och mer “svensk krogkänsla” än event-hall. Sturehof – bra om du vill ha lite mer restaurang än julbordsfabrik, ofta riktigt välgjort. Grand Hôtel (Verandan) – klassiskt och påkostat, bra helhetsupplevelse (men prislappen därefter). Vill du ha mer prisvärt utan att det blir sunkigt: kolla också Zum Franziskaner och Pelikan (Söder) – inte alltid “finast”, men ofta genuint och med bra drag. Protip: sikta på tidiga sittningar vardag om du vill ha lugnare och fräschare fat, helger blir lätt stök och mer “sällskap som ska bränna snaps”.",
isHuman: false,
condition: "baseline",
},
{
text: "Om du vill ha “riktigt” julbord i stan så tycker jag Operakällaren är svårslaget, men det svider ju i plånkan. För lite mer “klassisk” känsla utan att det blir superstelbent: Ulla Winbladh på Djurgården, alltid bra sill och de brukar ha ordning på det varma också. Tyrol på Grönan är mer stök/partystämning (kul med gäng, mindre kul om man vill sitta i lugn och ro och njuta av Janssons i fred). Gamla Riksarkivet har jag kört nåt år och blev positivt överraskad, lite mysig miljö och inte bara massproducerat. Skippa random bufféer på hotell vid Centralen om du inte bara är ute efter “mycket mat” – kan bli rätt meh. Bokar du sent: sikta på lunch, känns som man får lite mer value där.",
isHuman: false,
condition: "detector_aware",
},
{
text: "Glöm ej julbordets fem turer enligt Wretman: 01. Brännvinsbordet – sill, bröd, smör och lagrad ost. 02. Kall fisk – rökt och gravad lax och sik. 03. Kallskuret – sylta, grisfötter, rökt kött. 04. Småvarmt -skinka, prinskorv, köttbullar, revben, Janssons frestelse 05. Dessert – saffransostkaka, klenäter och ostar.",
isHuman: true,
condition: "human",
},
],
},
];
if (QUESTIONS.length === 0) {
console.warn("QUESTIONS array is empty. Add at least one question in script.js.");
}
const MAX_QUESTIONS = 50;
if (QUESTIONS.length > MAX_QUESTIONS) {
console.warn(`QUESTIONS has ${QUESTIONS.length} items, but only the first ${MAX_QUESTIONS} will be used.`);
}
const effectiveQuestions = QUESTIONS.slice(0, MAX_QUESTIONS);
// mode can be "intro", "reddit", "transition", "abstracts", "outro"
let mode = "intro";
let currentIndex = 0;
let hasAnsweredCurrent = false;
let numCorrect = 0;
let numAnswered = 0;
// State for reddit threads
let currentThreadIndex = 0;
let currentCommentIndex = 0;
let lastChoiceIsHuman = null;
let globalQuestionIndex = 0; // increments for every judgment (comment or abstract)
// Per-thread, per-comment answers: redditAnswers[threadIndex][commentIndex] = { choiceIsHuman }
let redditAnswers = [];
// When true, we're showing correct/incorrect for the current thread after user finished all comments
let redditShowingFeedback = false;
// The abstracts section is paged: 5 abstracts per page, so 20 abstracts = 4 pages.
const AB_PAGE_SIZE = 5;
let currentAbstractPage = 0;
// Demographics collected before the survey starts
let demographics = { age: null, profession: "", llmUsage: null, swedishLevel: null };
const RESULTS_ENDPOINT = "https://script.google.com/macros/s/AKfycbwYpMGlHYUxKaRoFzfskyVaOviYLEU_MGqZX9ULjZKOgdViPbW-bHLNwRk_qbHUok4-Rw/exec"
// Generating a participant id must never be the thing that stops the quiz from
// loading. crypto.randomUUID() only exists on iOS 15.4+ (and only in secure
// contexts), so on an older iPhone — including Facebook's in-app browser, which
// uses whatever WebKit the phone shipped with — it is undefined and calling it
// throws, killing this whole script. Degrade instead of throwing.
function makeParticipantId() {
try {
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
return crypto.randomUUID();
}
if (typeof crypto !== "undefined" && typeof crypto.getRandomValues === "function") {
// RFC 4122 v4, built by hand from getRandomValues (supported far wider).
var b = crypto.getRandomValues(new Uint8Array(16));
b[6] = (b[6] & 0x0f) | 0x40; // version 4
b[8] = (b[8] & 0x3f) | 0x80; // variant 10xx
var hex = "";
for (var i = 0; i < b.length; i++) hex += (b[i] + 0x100).toString(16).slice(1);
return hex.slice(0, 8) + "-" + hex.slice(8, 12) + "-" + hex.slice(12, 16) +
"-" + hex.slice(16, 20) + "-" + hex.slice(20);
}
} catch (err) {
// fall through to the Math.random path below
}
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (ch) {
var r = (Math.random() * 16) | 0;
return (ch === "x" ? r : (r & 0x3) | 0x8).toString(16);
});
}
const PARTICIPANT_ID = makeParticipantId();
const els = {
questionHeader: document.querySelector(".question-header"),
questionLabel: document.getElementById("question-label"),
questionTag: document.getElementById("question-tag"),
questionTitle: document.getElementById("question-title"),
questionText: document.getElementById("question-text"),
commentsContainer: document.getElementById("comments-container"),
controlsSection: document.querySelector(".controls"),
subtitle: document.querySelector(".app-subtitle"),
progressText: document.getElementById("progress-text"),
progressContainer: document.querySelector(".progress-container"),
progressComments: document.getElementById("progress-comments"),
progressAbstracts: document.getElementById("progress-abstracts"),
btnHuman: document.getElementById("btn-human"),
btnAi: document.getElementById("btn-ai"),
btnPrev: document.getElementById("btn-prev"),
btnExit: document.getElementById("btn-exit"),
btnSkip: document.getElementById("btn-skip"),
btnNext: document.getElementById("btn-next"),
feedback: document.getElementById("feedback"),
scoreCorrect: document.getElementById("score-correct"),
scoreTotal: document.getElementById("score-total"),
scoreSummary: document.getElementById("score-summary"),
};
// Running score is hidden so participants get no correctness feedback during the survey.
if (els.scoreSummary) els.scoreSummary.hidden = true;
const answers = new Array(effectiveQuestions.length).fill(null);
function computeTotalScoreSoFar() {
const abstractAnswered = answers.filter(Boolean).length;
const abstractCorrect = answers.reduce((acc, a, idx) => {
if (!a) return acc;
return acc + (a.choiceIsHuman === effectiveQuestions[idx].isHuman ? 1 : 0);
}, 0);
let commentAnswered = 0;
let commentCorrect = 0;
for (let t = 0; t < THREADS.length; t += 1) {
const thread = THREADS[t];
const threadAnswers = redditAnswers[t];
if (!thread || !threadAnswers) continue;
for (let c = 0; c < thread.comments.length; c += 1) {
const ans = threadAnswers[c];
if (!ans) continue;
commentAnswered += 1;
if (ans.choiceIsHuman === thread.comments[c].isHuman) {
commentCorrect += 1;
}
}
}
return {
answered: abstractAnswered + commentAnswered,
correct: abstractCorrect + commentCorrect,
};
}
function computeSectionScores() {
const abstractAnswered = answers.filter(Boolean).length;
const abstractCorrect = answers.reduce((acc, a, idx) => {
if (!a) return acc;
return acc + (a.choiceIsHuman === effectiveQuestions[idx].isHuman ? 1 : 0);
}, 0);
let commentAnswered = 0;
let commentCorrect = 0;
for (let t = 0; t < THREADS.length; t += 1) {
const thread = THREADS[t];
const threadAnswers = redditAnswers[t];
if (!thread || !threadAnswers) continue;
for (let c = 0; c < thread.comments.length; c += 1) {
const ans = threadAnswers[c];
if (!ans) continue;
commentAnswered += 1;
if (ans.choiceIsHuman === thread.comments[c].isHuman) {
commentCorrect += 1;
}
}
}
return {
comments: { answered: commentAnswered, correct: commentCorrect },
abstracts: { answered: abstractAnswered, correct: abstractCorrect },
};
}
async function sendAnswerEvent() {
let q;
let choiceIsHuman;
let extra = {};
let questionType = "";
let condition = "";
if (mode === "abstracts") {
q = effectiveQuestions[currentIndex];
const answer = answers[currentIndex];
if (!q || !answer) return;
choiceIsHuman = answer.choiceIsHuman;
condition = q.condition || "";
const isCorrect = choiceIsHuman === q.isHuman;
const totals = computeTotalScoreSoFar();
extra = {
mode: "abstracts",
isCorrect,
totalCorrectSoFar: totals.correct,
totalAnsweredSoFar: totals.answered,
};
questionType = "abstract";
} else if (mode === "reddit") {
const thread = THREADS[currentThreadIndex];
const comment = thread && thread.comments[currentCommentIndex];
const stored = redditAnswers[currentThreadIndex] && redditAnswers[currentThreadIndex][currentCommentIndex];
if (!thread || !comment || !stored) return;
q = { text: comment.text, isHuman: comment.isHuman };
choiceIsHuman = stored.choiceIsHuman;
condition = comment.condition || "";
const isCorrect = choiceIsHuman === q.isHuman;
const totals = computeTotalScoreSoFar();
extra = {
mode: "reddit",
threadIndex: currentThreadIndex,
commentIndex: currentCommentIndex,
threadQuestionText: thread.questionText,
isCorrect,
totalCorrectSoFar: totals.correct,
totalAnsweredSoFar: totals.answered,
};
questionType = "comment";
} else {
return;
}
const payload = {
participantId: PARTICIPANT_ID,
response: {
questionIndex: globalQuestionIndex,
questionType,
questionText: q.text,
isHumanLabel: q.isHuman,
userGuessIsHuman: choiceIsHuman,
condition,
age: demographics.age,
profession: demographics.profession,
llmUsage: demographics.llmUsage,
swedishLevel: demographics.swedishLevel,
...extra,
},
};
try {
await fetch(RESULTS_ENDPOINT, {
method: "POST",
mode: "no-cors",
body: JSON.stringify(payload),
});
} catch (err) {
console.error("Failed to send answer event", err);
}
}
function hideChoices(hide) {
if (!els.controlsSection) return;
if (hide) els.controlsSection.classList.add("controls--no-choices");
else els.controlsSection.classList.remove("controls--no-choices");
}
function clampIndex(index) {
if (index < 0) return 0;
if (index >= effectiveQuestions.length) return effectiveQuestions.length - 1;
return index;
}
function updateProgressBars() {
const commentsTotal = THREADS.reduce((n, t) => n + t.comments.length, 0);
let commentsAnswered = 0;
for (let t = 0; t < THREADS.length; t += 1) {
const ta = redditAnswers[t];
if (ta) commentsAnswered += ta.filter(Boolean).length;
}
const absAnswered = answers.filter(Boolean).length;
if (els.progressComments) {
els.progressComments.style.width =
`${Math.round((100 * commentsAnswered) / Math.max(1, commentsTotal))}%`;
}
if (els.progressAbstracts) {
els.progressAbstracts.style.width =
`${Math.round((100 * absAnswered) / Math.max(1, effectiveQuestions.length))}%`;
}
}
function showProgress(show) {
if (els.progressContainer) els.progressContainer.style.display = show ? "" : "none";
}
function goTop() {
// The options-object form of scrollTo is also newer than some phones we see.
try {
window.scrollTo({ top: 0, left: 0, behavior: "auto" });
} catch (err) {
window.scrollTo(0, 0);
}
}
function renderIntro() {
resetThreadChrome();
hideChoices(true);
if (els.questionTitle) els.questionTitle.hidden = true;
if (els.subtitle) {
els.subtitle.textContent = "";
}
els.questionLabel.textContent = "Välkommen!";
els.questionText.classList.add("question-text--intro");
els.questionText.innerHTML =
"<p>Det här är en studie om AI-genererad svensk text. Tack för att du deltar!</p>" +
"<p><strong>Upplägg:</strong></p>" +
"<ol>" +
"<li> För varje text ska du avgöra om den är skriven av <strong>en människa</strong> eller av <strong> en AI. </strong></li>" +
"<li>Först får du bedöma kommentarer i en forumtråd (likt Reddit eller Flashback).</li>" +
"<li>Därefter får du bedöma abstrakt från kandidatuppsatser.</li>" +
"</ol>" +
"<p>Du kan svara på så många frågor du vill, och du kan avsluta när som helst.</p>" +
"<p><strong>Obs!</strong> Det är möjligt att alla svar i en omgång är skrivna av AI eller att alla är skrivna av en människa. Utgå inte från att det alltid är en blandning.</p>" +
"<p>Ingen identifierande information om dig sparas i resultatet (t.ex. namn, e-post eller IP-adress).</p>";
if (els.commentsContainer) els.commentsContainer.innerHTML = "";
els.progressText.textContent = "";
updateProgressBars();
els.btnPrev.disabled = true;
els.btnNext.disabled = false;
els.btnNext.textContent = "Starta";
}
function renderDemographics() {
resetThreadChrome();
hideChoices(true);
if (els.questionTitle) els.questionTitle.hidden = true;
els.btnExit.hidden = true;
els.btnExit.style.display = "none";
if (els.subtitle) {
els.subtitle.textContent = "";
}
els.questionLabel.textContent = "Om dig";
els.questionTag.textContent = "Bakgrundsfrågor";
els.questionText.classList.add("question-text--intro");
els.questionText.innerHTML = "<p>Innan du börjar, svara på några korta frågor om dig själv.</p>";
els.progressText.textContent = "";
updateProgressBars();
els.btnPrev.disabled = true;
els.btnNext.textContent = "Fortsätt";
if (els.commentsContainer) {
els.commentsContainer.innerHTML = "";
const form = document.createElement("div");
form.style.cssText = "display:flex;flex-direction:column;gap:1rem;font-size:clamp(0.85rem,2.3vw,0.95rem);";
// --- Age ---
const ageGroup = document.createElement("div");
const ageQ = document.createElement("p");
ageQ.style.cssText = "font-weight:600;margin:0 0 0.3rem;";
ageQ.textContent = "Hur gammal är du?";
ageGroup.appendChild(ageQ);
["yngre än 18", "18–24", "25-34", "35–44", "45–60", "60+"].forEach(opt => {
const label = document.createElement("label");
label.style.cssText = "display:flex;align-items:center;gap:0.5rem;cursor:pointer;margin-bottom:0.3rem;";
const radio = document.createElement("input");
radio.type = "radio";
radio.name = "demo-age";
radio.value = opt;
if (demographics.age === opt) radio.checked = true;
radio.addEventListener("change", () => {
demographics.age = opt;
updateDemoNext();
});
label.appendChild(radio);
label.appendChild(document.createTextNode(opt));
ageGroup.appendChild(label);
});
form.appendChild(ageGroup);
// --- Profession ---
const profGroup = document.createElement("div");
const profQ = document.createElement("p");
profQ.style.cssText = "font-weight:600;margin:0 0 0.3rem;";
profQ.textContent = "Ange ditt yrke:";
profGroup.appendChild(profQ);
const profInput = document.createElement("input");
profInput.type = "text";
profInput.placeholder = "Skriv ditt yrke här...";
profInput.value = demographics.profession || "";
// font-size must be >= 16px: iOS Safari auto-zooms into any focused input
// with smaller text and does not zoom back out, which leaves the page
// magnified and off-centre for the rest of the quiz.
profInput.style.cssText = "width:100%;padding:0.5rem 0.6rem;font-size:16px;border:1px solid #ccc;border-radius:4px;box-sizing:border-box;";
profInput.addEventListener("input", () => { demographics.profession = profInput.value; });
profGroup.appendChild(profInput);
form.appendChild(profGroup);
// --- LLM usage ---
const llmGroup = document.createElement("div");
const llmQ = document.createElement("p");
llmQ.style.cssText = "font-weight:600;margin:0 0 0.3rem;";
llmQ.textContent = "Uppskatta hur många timmar per vecka du använder LLM-verktyg (t.ex. ChatGPT, Claude, Copilot):";
llmGroup.appendChild(llmQ);
["Inte alls", "0–5 timmar", "5–10 timmar", "10–20 timmar", "20+ timmar"].forEach(opt => {
const label = document.createElement("label");
label.style.cssText = "display:flex;align-items:center;gap:0.5rem;cursor:pointer;margin-bottom:0.3rem;";
const radio = document.createElement("input");
radio.type = "radio";
radio.name = "demo-llm";
radio.value = opt;
if (demographics.llmUsage === opt) radio.checked = true;
radio.addEventListener("change", () => {
demographics.llmUsage = opt;
updateDemoNext();
});
label.appendChild(radio);
label.appendChild(document.createTextNode(opt));
llmGroup.appendChild(label);
});
form.appendChild(llmGroup);
// --- Swedish level ---
const sweGroup = document.createElement("div");
const sweQ = document.createElement("p");
sweQ.style.cssText = "font-weight:600;margin:0 0 0.3rem;";
sweQ.textContent = "Vilken nivå av svenska talar du?";
sweGroup.appendChild(sweQ);
["Modersmål", "Avancerad", "Mellannivå"].forEach(opt => {
const label = document.createElement("label");
label.style.cssText = "display:flex;align-items:center;gap:0.5rem;cursor:pointer;margin-bottom:0.3rem;";
const radio = document.createElement("input");
radio.type = "radio";
radio.name = "demo-swedish";
radio.value = opt;
if (demographics.swedishLevel === opt) radio.checked = true;
radio.addEventListener("change", () => {
demographics.swedishLevel = opt;
updateDemoNext();
});
label.appendChild(radio);
label.appendChild(document.createTextNode(opt));
sweGroup.appendChild(label);
});
form.appendChild(sweGroup);
els.commentsContainer.appendChild(form);
}
function updateDemoNext() {
els.btnNext.disabled = !demographics.age || !demographics.llmUsage || !demographics.swedishLevel;
}
updateDemoNext();
}
async function sendDemographicsEvent() {
const payload = {
participantId: PARTICIPANT_ID,
response: {
questionIndex: 0,
questionType: "demographics",
age: demographics.age,
profession: demographics.profession,
llmUsage: demographics.llmUsage,
swedishLevel: demographics.swedishLevel,
},
};
try {
await fetch(RESULTS_ENDPOINT, { method: "POST", mode: "no-cors", body: JSON.stringify(payload) });
} catch (err) {
console.error("Failed to send demographics", err);
}
}
function renderQuestion() {
updateSkipButton();
resetThreadChrome();
const shell = document.querySelector(".app-shell");
if (shell) shell.classList.add("theme-abstracts");
els.btnExit.hidden = false;
els.btnExit.style.display = "";
hideChoices(false);
els.questionText.classList.remove("question-text--intro");
const q = effectiveQuestions[currentIndex];
const total = effectiveQuestions.length;
const questionNumber = currentIndex + 1;
els.questionLabel.textContent = `Fråga ${questionNumber}`;
if (els.questionTitle) {
const title = q.title ? q.title.trim() : "";
els.questionTitle.hidden = title.length === 0;
els.questionTitle.textContent = title;
}
els.questionText.textContent = q.text;
els.questionTag.textContent = q.type || "Item";
els.progressText.textContent = `Fråga ${questionNumber} av ${total}`;
const progressRatio = total > 0 ? questionNumber / total : 0;
updateProgressBars();
// Abstracts auto-advance on selection, so no Nästa button is shown here.
els.btnNext.hidden = true;
els.btnNext.style.display = "none";
resetChoiceStyles();
renderFeedback();
updateScoreSummary();
}
// ---------- Flashback-style thread rendering ----------
function fbRand(seed) {
const x = Math.sin(seed * 12.9898 + 78.233) * 43758.5453;
return x - Math.floor(x);
}
const FB_MONTHS = ["jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec"];
const FB_CATEGORIES = [
["Hem, bostad & familj", "Mat och dryck"],
["Livsstil", "Kropp och hälsa"],
["Resor och semester", "Resmål och resetips"],
["Dator och IT", "Hårdvara"],
["Sport, hobby och fritid", "Sällskapsspel"],
["Vardagsprat", "Off topic"],
["Konsument", "Elektronik och prylar"],
["Livsstil", "Träning och kost"],
];
function fbThreadTitle(q) {
const text = (q || "").trim().replace(/\s+/g, " ");
const m = text.match(/^.{0,85}?[.?!]/);
let t = (m ? m[0] : text).trim();
if (t.length > 80) t = t.slice(0, 78).trim() + "…";
return t || "Tråd";
}
function fbAvatar(hue) {
const wrap = document.createElement("div");
wrap.className = "fb-avatar";
wrap.style.background = `hsl(${hue}, 46%, 64%)`;
wrap.innerHTML =
'<svg viewBox="0 0 40 40" aria-hidden="true">' +
'<circle cx="20" cy="15" r="7.5" fill="#ffffff" opacity="0.92"/>' +
'<path d="M7 40c0-8 6-13 13-13s13 5 13 13z" fill="#ffffff" opacity="0.92"/></svg>';
return wrap;
}
function fbPost(opts) {
const post = document.createElement("article");
// Once judged, the whole row picks up a faint tint of the chosen answer's
// colour (green = Människa, blue = AI) so answered posts are scannable.
const answeredClass = opts.ans
? (opts.ans.choiceIsHuman ? " fb-post--ans-human" : " fb-post--ans-ai")
: "";
post.className = "fb-post" + (opts.isOp ? " fb-post--op" : "") +
(opts.num % 2 === 0 ? " fb-post--alt" : "") + answeredClass;
const side = document.createElement("div");
side.className = "fb-side";
const uname = document.createElement("div");
uname.className = "fb-user";
uname.textContent = opts.name;
side.appendChild(uname);
const rank = document.createElement("div");
rank.className = "fb-rank";
rank.innerHTML = '<span class="fb-online"></span> Medlem';
side.appendChild(rank);
// Distinct avatar colour per user (hues spaced ~67° apart within a thread).
side.appendChild(fbAvatar((opts.threadIdx * 40 + opts.num * 67) % 360));
const main = document.createElement("div");
main.className = "fb-main";
const head = document.createElement("div");
head.className = "fb-post-head";
const num = document.createElement("span");
num.className = "fb-num";
num.textContent = "#" + opts.num;
head.appendChild(num);
main.appendChild(head);
const body = document.createElement("div");
body.className = "fb-body";
body.textContent = opts.body;
main.appendChild(body);
const foot = document.createElement("div");
foot.className = "fb-post-foot";
const quote = document.createElement("span");
quote.className = "fb-quote";
quote.textContent = "Citera";
foot.appendChild(quote);
main.appendChild(foot);
post.appendChild(side);
post.appendChild(main);
// Reply posts get a prominent right-hand judgement column.
if (typeof opts.commentIdx === "number") {
const ans = opts.ans;
const jcol = document.createElement("div");
jcol.className = "fb-judge-col";
const title = document.createElement("div");
title.className = "fb-judge-title";
title.textContent = "Skrivet av?";
const bH = document.createElement("button");