Programmerings Produktion indblik

skrevet af Tobiasz Topczewski, Emil Qvistgaard, Christian Gadgaard

Intro  

Velkommen til vores blog indlæg! Vi er en gruppe i SKP (skolepraktik) der har arbejdet med et projekt. Det projekt endte tidligere end forventet på grund af nogle problemer, men nu skriver vi denne blog indlæg for at forhåbentlig give jer et indblik i vores projekt. I kan måske endda lære noget fra vores oplevelse og de ting vi selv har lært fra projektet.  

Hvem er vi? 

Først og fremmest en lille introduktion om hvem vi er – vi er 3 programmøre fra SKP (skolepraktik) på AarhusTech, hvor vi bliver udannet som programmør. Vi kommer fra forskellige steder i vores uddannelse, som betyder, at vi ikke havde mødt hinanden, før projektet og derfor har forskellige niveauer af erfaring. Det betyder at allerede før projektet, havde vi noget arbejde der skulle udføres. Kort fortalt har vores instruktør tildelt et projekt vi skulle udarbejde. Detaljerne af dette projekt kan findes i den næste sektion.  

Hvad var projektet 

Vores projekt var at lave et el simulations værktøj til de elever der deltager i DM i fagene. Simulationen skulle indeholde et 9 volts batteri, en modstand og 4 LEDer. Med de komponenter skulle eleverne kunne opstille den mest effektive måde at få de 4 LEDer til at lyse på. Vi fik også et simulationsværktøj vi kunne arbejde ud fra og modificere så det passede til vores projekt.  

Hvad sket der med projektet  

Vi startede ud med at kigge på den simulation der inspirerede projektet. Den hedder PhET og er udviklet af elever på University of Colorado. Det gav os et godt udgangspunkt på opgaven og gjorde at vi hurtig kunne komme i gang. Da det ikke var os som havde lavet den, skulle den rettes til. Den kom allerede med et 9 volts batteri, ledninger, en modstand hvor man kan ændre modstanden og en lyspære. Den kom også med en andre ting så man kunne se hvad der skete hvis man satte det i et el-kredsløb. Så vi skulle bare slette de ting vi ikke havde brug for og ændre pæren til en led. Vi fandt ud af at der var 29000 filer i projektet og 24 dependencies. Men på trods af det fik vi hurtig slettet det vi ikke havde brug for og ændret pærens billede til en led. Det er her det går ned af bakke, for vi skulle ændre pæren så den opførte sig som en LED i stedet for. Der fandt vi ud af at vi skulle bruge noget der hedder MatLab for at skifte pæren opførsel.  

Efter vi fandt ud af at vi skulle bruge MatLab, gik vi i gang med at kigge på andre løsninger til projektet. Den første løsning vi kom på, var at lave det fra bunden, så vi selv havde styr på hvordan systemet fungerede. Det gik også godt i starten og vi lavede sådan at vi kunne flytte elementer rundt på skærmen. Men vi løb ind i problemer med at forbinde komponenter til hinanden. Det prøvede vi på at løse ved at se, om der var andre der har lavet noget lignede det vi skal lave og hvordan de har lavet det. Der fandt vi nogle andre el simulations projekter. De brugte også MatLab til at forbinde og beregne simulationen. Efter det konkluderede vi, at vi ikke havde den nødvendige viden omkring MatLab og kunne derfor ikke lave projektet inden for den deadline vi havde fået.  

Start overblik/planlægning  

I starten af vores opgave havde vi ikke det bedste overblik over opgaven, da vi ikke have snakket med kunden endnu. Men vi havde fået lidt oplysninger omkring opgaven, blandt andet at vi skulle bruge simulationen fra PhET. Så vi gik i gang med at kigge koden og de dependencies igennem som den brugte. Efter vi havde kigget lidt af koden igennem og kunden havde tid til at komme forbi, havde vi omkring den samme erfaring med simulationen. Det gjorde at vi havde begge vores perspektiver at gå ud fra både fra vores synspunkt som programmører og kunden. Efter det kunne kunden fortælle hans krav til opgaven og vi stille opklarende spørgsmål til opgaven. Efter det første møde kunne vi udarbejde en plan for hvordan vi vil udføre opgaven. Det er vigtigt at have et godt overblik over opgaven før man begynder at lave en opgave. Hvis man ikke har et godt overblik, kan man hurtigt komme på afveje og blive forvirret over opgaven.  

Kundemøder  

Kundemøder er vigtige for at planlægge hvad man skal lave og for at vise kunden hvor langt man er med opgaven. Men før et kundemøde er det godt at have et overblik over hvad man vil vise og snakke om til mødet. Så vi afholdt typisk et møde en time før kundemødet hvor vi diskuterede i gruppen, hvad vi vil snakke om.   

Til kundemødet startede vi med at vise hvor langt vi var kommet med opgaven. Det gjorde vi ved at vise en prototype af vores projekt. Efter det snakkede vi om det var sådan, kunden vil have det og om der var nogle ændringer der skulle fortages. Det næste vi snakkede om, var kundens forventninger til næste møde og hvornår næste møde skulle afholdes. Vi har holdt løbende kundemøde omkring hver uge igennem helle opgaven. Det behøves ikke at være hver uge, men det er også afhængig af hvornår kunden har tid. Det er også her vi begik nogle fejl.   

Vi holdt os til kundemøder omkring hver uge, uanset hvad det var vi skulle lave. Det gjorde at vi ikke altid nåde det vi skulle lave til næste kundemøde. Vi afholdte møder hver uge, fordi vi havde lidt af en urealistisk tankegang til af de ting vi skulle lave og det var der kunden havde tid. Det kan være svært at give et realistisk tidsestimat for hvornår man er klar til næste kundemøde, men så må man lave et gæt. Det er også noget man bliver bedre til efterhånden som man får mere erfaring.   

Urealistisk tankegang /reality check 

Efterhånden som vi har haft mange kundemøder, kunne vi godt se, at vi blev ved med at sætte mål som er svært at opnå. Selvfølgelig blev vi bedre til at sætte realistiske forventninger, og til at estimere hvor meget tid vi har brug for. Men det var ikke nok!  

Med vores færdigheder, var vi kun i stand til at ’gætte’ hvordan projektet kørte frem. For hver deadline vi satte for projektet, havde vi også en målpind som krævet at vi tilfældigt finder guld. Det er det som vi internt kalder ”Magisk Tænkning”. Det var f.eks. at finde en linje i eksisterende kode, som gør det muligt at udskifte billede, eller at implementere en feature vi ikke 100% forstår.  
  
Til sidst gik det op for os, at vi ikke har nok tid til at stole på mirakler. Vores sidste kundemøde handlede om at afklare om vi skal holde fast i vores håb for at finde den rigtig løsning i løbet af det næste måned, eller give op på projektet og bruge vores tid på noget mere fornuftig. Det var en hård samtale, og vi var ikke alle sammen klar til at efterlade et halvt færdigt produkt, men vi blev enig om at det er alt for risikabelt.  

Fail fast 

En af de ting man hører i branchen, er at ‘fail fast’. Det vil sige at man skal afprøve tingene så hurtig man kan, for at se om det kan lade sige gøre. Tankegangen er at man hurtigt kan se hvad der virker og hvad der ikke virker. Det sparer tid for os og for kunden.  

I vores tilfælde var det noget vi tænkte over til vores sidste kundemøde. Hvad nu hvis vi fortsat med at arbejde på projektet, og det ikke lykkedes? Så ville vi havde fejlet langsomt, mens slutresultatet ville havde været det samme – et halvfærdigt produkt.  

Prototyping / proof of concept   

Noget vi kunne have gjort bedere i projektet var at have nogle prototyper. Prototyper eller ’proof of concept’ kunne være noget visuelt eller få en feature til at virke, så kunden kunne se hvad det var vi var i gang med. Det vil også give et beder overblik over hvor vi var i processen. Men i vores opgave var vi lidt over det hele og hoppede fra ting til ting og derfor havde aldrig rigtig noget nyt at vise når der var kundemøder.   

Motivation  

Motivation kan være svært at holde oppe hele tiden i et projekt, specielt hvis man ikke kan få det til at gøre som man vil. Motivation var også noget der gik fra op og ned i vores projekt.   

I starten af vores projekt var vi meget motiveret. Det så lidt svært ud og virkede lidt uoverskueligt, men vi fik hurtig slettet de ting vi skulle og fik pæren skiftet til en led. Efter det var vi meget motiveret og det føltes som om vi kunne klare alting. Men efter det, brugte vi lang tid på at få pæren til at opføre sig som en led og jo længer tid det tog faldt vores motivation mere og mere. Efter vi droppede den første simulation og gik over til at lave det fra bunden fik vi en del motivation tilbage. Nu kunne vi lave det som vi ville og have kontrol over alting selv. Den motivation, vi havde fået igennem starten af det nye projekt faldt, da vi ikke kunne finde ud af hvordan vi skulle forbinde komponenterne igen.   

Tips til at holde motivationen oppe i et projekt 

Nogle tips til at holde motivationen oppe i et projekt. Have nogle små delopgaver så man kan se at det går frem af med opgaven.   

  • Skriv de delopgaver ned, det giver også et bedre overblik og status på opgaven. Husk at strege ting over på listen så man kan se hvor lang man er kommet med opgaven.   
  • Lav opgaven i en gruppe så i kan snakke om opgaven og hjælpe hinanden.   
  • Gå nogle ture og kom væk fra projektet en gang i mellem.   

Være ærlig over jer selv om hvordan det går med projektet og lad vær med at sætte for store mål, det er fint at udfordre sig selv, men en for stor udfordring kan gøre det svært at fortsætte med projektet hvis man ikke kan se en løsning til det.  

Konklusion   

Vi nåede desværre ikke det vi skulle lave inden for den deadline, men vi har fået en masse erfaring ud af at forsøge at lave denne opgave. Nogle ting vi har lært at overføre til andre projekter i fremtiden, er at undersøge opgaven mere grundigt og gå efter princippet fail fast, så vi hurtigere kan se hvad der virker og ikke virker.   

Vi har lært at holde kundemøder. Det er første gang vi har prøvet det. Der har vi også lærte, er at det er vigtigt at have realistiske deadlines til næste møde og have en prototype klar til at vise kunden.  

Vi har lært at det kan være farligt at have et urealistisk syn og magisk syn på opgaven. For man kan ikke altid finde nogle der har lavet det man har brug for på internettet.  

Til Slut  

Vi håber at I har kunne få noget ud af vores erfaring med at lave en opgave for en kunde og har fået lidt mere forståelse for hvad der virker og ikke virker. 

Skriv et svar

Toggle Console (0)
No entries found.
Profiler (0 ms)
No entries found.
SQL (44 queries | 28.96 ms)
3.0651
SELECT name, val 
FROM www_wfconfig 
WHERE autoload = 'yes'
0.8941
SELECT `name`, `value` 
FROM `www_wfls_settings` 
WHERE `autoload` = 'yes'
0.5589
SELECT name, val, autoload 
FROM www_wfconfig 
WHERE name = 'detectProxyRecommendation'
1.5790
SHOW FULL COLUMNS 
FROM `www_wfblocks7`
0.9332
SELECT * 
FROM `www_wfblocks7` 
WHERE `IP` = '\0\0\0\0\0\0\0\0\0\0:' 
AND `type` = 7 
AND (`expiration` = 0 OR `expiration` > UNIX_TIMESTAMP())
0.2968
SELECT name, val, autoload 
FROM www_wfconfig 
WHERE name = 'wordfenceCentralConnected'
0.3791
SELECT option_value 
FROM www_options 
WHERE option_name = 'acm_server_settings' 
LIMIT 1
0.2639
SELECT name, val, autoload 
FROM www_wfconfig 
WHERE name = 'needsGeoIPSync'
0.3071
SELECT name, val, autoload 
FROM www_wfconfig 
WHERE name = 'detectProxyRecommendation'
0.3059
SELECT MAX(attackLogTime) 
FROM www_wfhits
0.3130
SELECT option_value 
FROM www_options 
WHERE option_name = 'wordfence_lastSyncAttackData' 
LIMIT 1
0.6590
SELECT *, CASE WHEN `type` = 3 THEN 0 WHEN `type` = 4 THEN 1 WHEN `type` = 7 THEN 2 WHEN `type` = 6 THEN 3 WHEN `type` = 5 THEN 4 WHEN `type` = 9 THEN 5 WHEN `type` = 8 THEN 6 WHEN `type` = 2 THEN 7 WHEN `type` = 1 THEN 8 ELSE 9999 END AS `typeSort`, CASE WHEN `type` = 3 THEN `parameters` WHEN `type` = 4 THEN `parameters` WHEN `type` = 1 THEN `IP` WHEN `type` = 9 THEN `IP` WHEN `type` = 5 THEN `IP` WHEN `type` = 6 THEN `IP` WHEN `type` = 7 THEN `IP` WHEN `type` = 2 THEN `IP` WHEN `type` = 8 THEN `IP` ELSE 9999 END AS `detailSort` 
FROM `www_wfblocks7` 
WHERE `type` IN (4) 
AND (`expiration` = 0 OR `expiration` > UNIX_TIMESTAMP()) 
ORDER BY `typeSort` ASC, `id` DESC
0.4709
SELECT *, CASE WHEN `type` = 3 THEN 0 WHEN `type` = 4 THEN 1 WHEN `type` = 7 THEN 2 WHEN `type` = 6 THEN 3 WHEN `type` = 5 THEN 4 WHEN `type` = 9 THEN 5 WHEN `type` = 8 THEN 6 WHEN `type` = 2 THEN 7 WHEN `type` = 1 THEN 8 ELSE 9999 END AS `typeSort`, CASE WHEN `type` = 3 THEN `parameters` WHEN `type` = 4 THEN `parameters` WHEN `type` = 1 THEN `IP` WHEN `type` = 9 THEN `IP` WHEN `type` = 5 THEN `IP` WHEN `type` = 6 THEN `IP` WHEN `type` = 7 THEN `IP` WHEN `type` = 2 THEN `IP` WHEN `type` = 8 THEN `IP` ELSE 9999 END AS `detailSort` 
FROM `www_wfblocks7` 
WHERE `type` IN (3) 
AND (`expiration` = 0 OR `expiration` > UNIX_TIMESTAMP()) 
ORDER BY `typeSort` ASC, `id` DESC
0.4392
SELECT * 
FROM `www_wfblocks7` 
WHERE `type` IN (1, 8, 9, 2, 5, 6) 
AND `IP` = '\0\0\0\0\0\0\0\0\0\0:' 
AND (`expiration` = 0 OR `expiration` > UNIX_TIMESTAMP()) 
ORDER BY `blockedTime` DESC 
LIMIT 1
1.3049
SELECT option_value 
FROM www_options 
WHERE option_name = 'can_compress_scripts' 
LIMIT 1
0.3929
SELECT option_value 
FROM www_options 
WHERE option_name = 'ure_role_additional_options_values' 
LIMIT 1
0.9422
SHOW FULL COLUMNS 
FROM `www_wflivetraffichuman`
0.2611
SELECT COUNT(*) 
FROM www_wflivetraffichuman 
WHERE IP = '\0\0\0\0\0\0\0\0\0\0:' 
AND identifier = 'F	V\nV|!' 
AND expiration >= UNIX_TIMESTAMP()
0.7720
SELECT www_posts.* 
FROM www_posts 
WHERE 1=1 
AND ( ( YEAR( www_posts.post_date ) = 2021 
AND MONTH( www_posts.post_date ) = 6 
AND DAYOFMONTH( www_posts.post_date ) = 9 ) ) 
AND www_posts.post_name = 'programmerings-produktion-indblik' 
AND www_posts.post_type = 'post' 
ORDER BY www_posts.post_date DESC
0.9620
SELECT t.*, tt.*, tr.object_id 
FROM www_terms AS t 
INNER JOIN www_term_taxonomy AS tt ON t.term_id = tt.term_id 
INNER JOIN www_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id 
WHERE tt.taxonomy IN ('category', 'post_tag', 'post_format') 
AND tr.object_id IN (1665) 
ORDER BY t.name ASC
0.3119
SELECT post_id, meta_key, meta_value 
FROM www_postmeta 
WHERE post_id IN (1665) 
ORDER BY meta_id ASC
0.2489
SELECT COUNT(*) 
FROM www_wflivetraffichuman 
WHERE IP = '\0\0\0\0\0\0\0\0\0\0:' 
AND identifier = 'F	V\nV|!' 
AND expiration >= UNIX_TIMESTAMP()
0.3650
SELECT t.*, tt.* 
FROM www_terms AS t 
INNER JOIN www_term_taxonomy AS tt ON t.term_id = tt.term_id 
WHERE tt.taxonomy IN ('wp_theme') 
AND t.name IN ('busiprof')
0.2949
SELECT www_posts.* 
FROM www_posts 
WHERE 1=1 
AND www_posts.post_name IN ('single-post-programmerings-produktion-indblik','single-post','single') 
AND ( 0 = 1 ) 
AND www_posts.post_type = 'wp_template' 
AND ((www_posts.post_status = 'publish')) 
GROUP BY www_posts.ID 
ORDER BY www_posts.post_date DESC
0.2940
SELECT * 
FROM www_users 
WHERE ID = '210' 
LIMIT 1
0.6149
SELECT user_id, meta_key, meta_value 
FROM www_usermeta 
WHERE user_id IN (210) 
ORDER BY umeta_id ASC
0.5131
SELECT * 
FROM `www_yoast_indexable` 
WHERE `object_id` = '1665' 
AND `object_type` = 'post' 
LIMIT 1
0.2160
SELECT option_value 
FROM www_options 
WHERE option_name = 'https_migration_required' 
LIMIT 1
0.5081
SELECT * 
FROM `www_yoast_indexable` 
WHERE `permalink_hash` = '66:258fc3f912a21ef3bc1657ff431bdc40' 
AND `permalink` = 'https://www.ats-skpdatait.dk/wp-content/uploads/2021/06/Udklip.png' 
LIMIT 1
0.2909
SELECT * 
FROM www_posts 
WHERE ID = 1672 
LIMIT 1
0.5460
SELECT post_id, meta_key, meta_value 
FROM www_postmeta 
WHERE post_id IN (1672) 
ORDER BY meta_id ASC
0.5920
SELECT * 
FROM `www_yoast_indexable` 
WHERE `object_type` = 'home-page' 
LIMIT 1
0.5541
SELECT * 
FROM `www_yoast_indexable` 
WHERE `permalink_hash` = '66:258fc3f912a21ef3bc1657ff431bdc40' 
AND `permalink` = 'https://www.ats-skpdatait.dk/wp-content/uploads/2021/06/Udklip.png' 
LIMIT 1
0.4570
SELECT `ancestor_id` 
FROM `www_yoast_indexable_hierarchy` 
WHERE `indexable_id` = '325' 
ORDER BY `depth` DESC
0.3400
SELECT option_value 
FROM www_options 
WHERE option_name = 'site_logo' 
LIMIT 1
0.5529
SELECT t.*, tt.* 
FROM www_terms AS t 
INNER JOIN www_term_taxonomy AS tt ON t.term_id = tt.term_id 
WHERE t.term_id = 15
0.5150
SELECT tr.object_id 
FROM www_term_relationships AS tr 
INNER JOIN www_term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id 
WHERE tt.taxonomy IN ('nav_menu') 
AND tt.term_id IN ('15') 
ORDER BY tr.object_id ASC
0.9410
SELECT www_posts.* 
FROM www_posts 
WHERE 1=1 
AND www_posts.ID IN (310,311,312,313,314,399,1162,1163,1185,1482,1633,1634) 
AND www_posts.post_type = 'nav_menu_item' 
AND ((www_posts.post_status = 'publish')) 
ORDER BY www_posts.menu_order ASC
3.4089
SELECT post_id, meta_key, meta_value 
FROM www_postmeta 
WHERE post_id IN (310,1163,311,312,313,314,1185,1162,399,1634,1633,1482) 
ORDER BY meta_id ASC
0.5770
SELECT www_posts.* 
FROM www_posts 
WHERE 1=1 
AND www_posts.ID IN (290,292,295,297,1183,76,1620,1628,1470) 
AND www_posts.post_type = 'page' 
AND ((www_posts.post_status = 'publish')) 
ORDER BY www_posts.post_date DESC
0.5350
SELECT post_id, meta_key, meta_value 
FROM www_postmeta 
WHERE post_id IN (1628,1620,1470,1183,297,295,292,290,76) 
ORDER BY meta_id ASC
0.5150
SELECT t.term_id, tt.parent, tt.count, tt.taxonomy 
FROM www_terms AS t 
INNER JOIN www_term_taxonomy AS tt ON t.term_id = tt.term_id 
INNER JOIN www_term_relationships AS tr ON tr.term_taxonomy_id = tt.term_taxonomy_id 
WHERE tt.taxonomy IN ('category') 
AND tr.object_id IN (1665) 
ORDER BY t.name ASC
0.2770
SELECT term_id, meta_key, meta_value 
FROM www_termmeta 
WHERE term_id IN (1) 
ORDER BY meta_id ASC
0.3960
SELECT SQL_CALC_FOUND_ROWS www_comments.comment_ID 
FROM www_comments 
WHERE ( comment_approved = '1' ) 
AND comment_post_ID = 1665 
AND comment_parent = 0 
ORDER BY www_comments.comment_date_gmt ASC, www_comments.comment_ID ASC
Templates
[0] => themes/busiprof/theme_setup_data.php
[1] => themes/busiprof/child_theme_compatible.php
[2] => themes/busiprof/functions/menu/busiprof_nav_walker.php
[3] => themes/busiprof/functions/menu/default_menu_walker.php
[4] => themes/busiprof/functions/woo/woocommerce.php
[5] => themes/busiprof/functions/font/font.php
[6] => themes/busiprof/functions/breadcrumbs/breadcrumbs.php
[7] => themes/busiprof/functions/scripts/script.php
[8] => themes/busiprof/functions/widgets/custom-widgets.php
[9] => themes/busiprof/functions/commentbox/comment-function.php
[10] => themes/busiprof/functions/customizer/customizer-pro-feature.php
[11] => themes/busiprof/functions/customizer/custo_general_settings.php
[12] => themes/busiprof/functions/customizer/custo_sections_settings.php
[13] => themes/busiprof/functions/customizer/customizer-archive.php
[14] => themes/busiprof/functions/customizer/customizer_recommended_plugin.php
[15] => themes/busiprof/functions/customizer-notify/busiprof-customizer-notify.php
[16] => themes/busiprof/functions/class-tgm-plugin-activation.php
[17] => themes/busiprof/single.php
[18] => themes/busiprof/header.php
[19] => themes/busiprof/index-bannerstrip.php
[20] => themes/busiprof/content.php
[21] => themes/busiprof/comments.php
[22] => themes/busiprof/sidebar.php
[23] => themes/busiprof/footer.php
Globals
$_GET = array (
);

$_POST = array (
);

$_COOKIE = array (
);

$_SESSION = array (
);

$_SERVER = array (
  'SERVER_SOFTWARE' => 'Apache',
  'REQUEST_URI' => '/2021/06/09/programmerings-produktion-indblik/',
  'ONECOM_DOMAIN_NAME' => 'ats-skpdatait.dk',
  'ONECOM_DOMAIN_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/',
  'ONECOM_MEMORYLIMIT' => '2684354560',
  'ONECOM_CPU_SHARES' => '4096',
  'ONECOM_EXEC' => 'latest',
  'ONECOM_DIR_LAYOUT_VER' => '0',
  'CONTENT_LENGTH' => '0',
  'HTTP_CONNECTION' => 'close',
  'SCRIPT_NAME' => '/index.php',
  'QUERY_STRING' => '',
  'REQUEST_METHOD' => 'GET',
  'SERVER_PROTOCOL' => 'HTTP/1.1',
  'GATEWAY_INTERFACE' => 'CGI/1.1',
  'REDIRECT_URL' => '/2021/06/09/programmerings-produktion-indblik/',
  'REMOTE_PORT' => '35926',
  'SCRIPT_FILENAME' => '/customers/b/3/2/ats-skpdatait.dk/httpd.www/index.php',
  'SERVER_ADMIN' => 'support@one.com',
  'CONTEXT_DOCUMENT_ROOT' => '/var/www',
  'CONTEXT_PREFIX' => '',
  'REQUEST_SCHEME' => 'https',
  'REMOTE_ADDR' => '3.239.58.199',
  'SERVER_PORT' => '80',
  'SERVER_ADDR' => '10.27.3.13',
  'SERVER_NAME' => 'www.ats-skpdatait.dk',
  'SERVER_SIGNATURE' => '',
  'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
  'HTTP_X_VARNISH' => '990425143',
  'HTTP_ACCEPT_ENCODING' => 'gzip',
  'HTTP_X_ONECOM_HOST' => 'ats-skpdatait.dk',
  'HTTP_X_ONECOM_BRAND' => 'one.com',
  'HTTP_X_FORWARDED_PROTO' => 'https',
  'HTTP_X_ONECOM_FORWARDED_PROTO' => 'https',
  'HTTP_X_FORWARDED_FOR' => '3.239.58.199',
  'HTTP_HOST' => 'www.ats-skpdatait.dk',
  'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5',
  'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  'HTTP_USER_AGENT' => 'CCBot/2.0 (https://commoncrawl.org/faq/)',
  'ENV_VCV_ENV_ADDONS_ID' => 'one.com',
  'ENV_VCV_TOKEN_URL' => 'https://wpapi.one.com/api/v1.0/plugins/visualcomposer/activate',
  'ONECOM_ONE_PHOTO_URL' => 'https://onephoto.one.com/domain_discover',
  'ONECOM_WP_ADDONS_API' => 'https://wpapi.one.com',
  'ONECOM_WEBSHOP_HOST' => 'webshop1.cst.webpod11-cph3.one.com',
  'HTTP_AUTHORIZATION' => '',
  'HTTPS' => 'on',
  'ONECOM_TMPDIR' => '/customers/b/3/2/ats-skpdatait.dk//tmp',
  'DOMAIN_NAME' => 'ats-skpdatait.dk',
  'ONECOM_DOCUMENT_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/httpd.www',
  'DOCUMENT_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/httpd.www',
  'REDIRECT_STATUS' => '200',
  'REDIRECT_ENV_VCV_ENV_ADDONS_ID' => 'one.com',
  'REDIRECT_ENV_VCV_TOKEN_URL' => 'https://wpapi.one.com/api/v1.0/plugins/visualcomposer/activate',
  'REDIRECT_ONECOM_ONE_PHOTO_URL' => 'https://onephoto.one.com/domain_discover',
  'REDIRECT_ONECOM_WP_ADDONS_API' => 'https://wpapi.one.com',
  'REDIRECT_ONECOM_WEBSHOP_HOST' => 'webshop1.cst.webpod11-cph3.one.com',
  'REDIRECT_HTTP_AUTHORIZATION' => '',
  'REDIRECT_HTTPS' => 'on',
  'REDIRECT_ONECOM_CPU_SHARES' => '4096',
  'REDIRECT_ONECOM_MEMORYLIMIT' => '2684354560',
  'REDIRECT_ONECOM_EXEC' => 'latest',
  'REDIRECT_ONECOM_DIR_LAYOUT_VER' => '0',
  'REDIRECT_ONECOM_TMPDIR' => '/customers/b/3/2/ats-skpdatait.dk//tmp',
  'REDIRECT_ONECOM_DOMAIN_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/',
  'REDIRECT_ONECOM_DOMAIN_NAME' => 'ats-skpdatait.dk',
  'REDIRECT_DOMAIN_NAME' => 'ats-skpdatait.dk',
  'REDIRECT_ONECOM_DOCUMENT_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/httpd.www',
  'REDIRECT_DOCUMENT_ROOT' => '/customers/b/3/2/ats-skpdatait.dk/httpd.www',
  'FCGI_ROLE' => 'RESPONDER',
  'PHP_SELF' => '/index.php',
  'REQUEST_TIME_FLOAT' => 1632735723.674478054046630859375,
  'REQUEST_TIME' => 1632735723,
  'ONECOM_CLIENT_IP' => '3.239.58.199',
);

Close