forked from rundis/kodemaker.no
-
Notifications
You must be signed in to change notification settings - Fork 0
/
christian.edn
1322 lines (1283 loc) · 72.3 KB
/
christian.edn
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
{:id :christian
:name ["Christian" "Johansen"]
:title "Systemutvikler"
:start-date "2013-11-01"
:experience-since 2002
:born 1982
:description "Christian er en allsidig, engasjert og produktiv programmerer med
erfaring og interesse for alt fra infrastruktur og drift, databaser og
backends, til frontend webutvikling. Han har lang erfaring med systemer og
prosesser for kontinuerlig integrasjon og leveranse (CI/CD), samt prinsipper
for å kjøre applikasjoner i skyen.
Gjennom sine kurs og foredrag har han gjort seg kjent som en meningssterk og
kvass programmerer som tar design, testing og kvalitet seriøst. Han trives
godt både alene og i team, og fungerer både som humørspreder og kritisk røst
i samarbeid med andre."
:cv/description "Christian er en allsidig, engasjert og produktiv programmerer
med erfaring og interesse for alt fra infrastruktur og drift, databaser og
backends, til frontend webutvikling. Han har lang erfaring med systemer og
prosesser for kontinuerlig integrasjon og leveranse (CI/CD), samt prinsipper
for å kjøre applikasjoner i skyen.
Christian elsker å løse problemer, og brenner for å løse dem med så lite
programvare som mulig. Han er alltid på utkikk etter å redusere kompleksitet
for å sikre lang levetid og reduserte kostnader for drift av programvare.
Gjennom år med kurs og foredrag har Christian tilegnet seg gode evner til å
dele av sin kunnskap, noe han aktivt gjør i alle prosjekter. Han skriver
godt, og dokumenterer flittig løsningene han leverer fra seg.
Christian var tidlig ute som moderne frontend-utvikler. Han laget CSS for
Norges første offentlige nettsted med ren CSS-layout
(http://www.apollon.uio.no/) og har vært \"frontend-mann\" for utallige små og
store prosjekter, samt skrevet en bok om test-drevet utvikling med JavaScript."
:innate-skills [:terminal :browser-devtools :haproxy :svn :mac-os :android :ios]
:phone-number "+47 934 17 480"
:email-address "christian@kodemaker.no"
:presence {:cv "christian"
:twitter "cjno"
:mastodon "@christian@deff.no"
:linkedin "/in/christianjohansen"
:github "cjohansen"}
:tech {:using-at-work [:sanity :aws :kubernetes :clojurescript :clojure]
:favorites-at-the-moment [:sanity :clojure :clojurescript]
:want-to-learn-more [:haskell :go]}
:qualifications ["Fullstack, jobber like gjerne med backend som frontend"
"Erfaring med oppsett og drift av infrastruktur og CI/CD"
"Liker funksjonell programmering, enkle løsninger og små team"
"Skriver godt, liker å dokumentere, holder gjerne workshops, og bidrar til å løfte fagmiljøene han jobber i"]
:side-projects [{:title "TempCalc"
:description "Temperatur er viktig i gjærbakst. Ideellt sett
angir en oppskrift hvilken temperatur deigen skal ha etter
endt elting. Denne kalkulatoren hjelper deg med å finne riktig
temperatur på vannet for å nå en gitt deigtemperatur. Og andre
temperatur-kombinasjonsproblemer."
:tech [:clojurescript :pwa :aws :aws-s3 :aws-cloudfront :aws-route53]
:illustration "/illustrations/side-projects/tempcalc.png"
:link {:url "https://tempcalc.com/"
:text "tempcalc.com"}}
{:title "Shufflify"
:description "Til bilturene med familien er det behov for en
shuffle-funksjon som tar hensyn til at \"alle skal få sitt\".
Jeg lager en tjeneste i Go som løser dette svært essensielle
problemet."
:tech [:go :aws-lambda :serverless :aws-api-gateway]
:illustration "/illustrations/side-projects/shufflify.png"
:link {:url "https://shufflify.io/"
:text "Tjenesten er ikke lansert enda"}}
{:title "Learning Functional JavaScript"
:description "Et grundig videokurs i funksjonell programmering
med JavaScript. Laget for Packt forlag i 2015."
:illustration "/illustrations/side-projects/functional-js.jpg"
:tech [:javascript :nodejs :funksjonell-programmering]
:link {:url "https://www.packtpub.com/web-development/learning-functional-javascript-video"
:text "Sjekk ut kurset"}}
{:title "Test-Driven JavaScript Development"
:description "Etter noen år med fordypning i og blogging om
TDD med JavaScript kom jeg litt tilfeldigvis i kontakt med
Addison-Wesley. Resultatet ble en bok som kom ut i 2010."
:illustration "/illustrations/side-projects/jstdd.jpg"
:tech [:javascript :nodejs :tdd :testing]
:link {:url "http://tddjs.com/" :text "Sjekk ut boka"}}]
:upcoming []
:recommendations [{:title "Konsulenteriet må DØ!"
:link {:url "https://vimeo.com/139330934"
:text "Se lyn/torden-talen"}
:blurb "Erik Assum gir en tordnende god lyntale om hva man
_egentlig_ burde bruke konsulenter til, og hvordan en
konsulent er, eller ihvertfall burde være, noe annet enn en
vikar."
:tech [:consulting]}
{:title "Simple Made Easy"
:blurb "Det er ikke lett å lage noe enkelt. Rich
Hickey snakker om forskjellen på nærliggende
(subjektivt lett) og ukomplisert (objektivt
enkelt). Og implikasjonene for hvordan du bør
tenke rundt software."
:link {:url "http://www.infoq.com/presentations/Simple-Made-Easy"
:text "Se foredraget"}
:tech [:design :clojure]}
{:title "How to Use npm as a Build Tool"
:link {:url "http://blog.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/"
:text "Les artikkelen"}
:tech [:javascript :nodejs :npm :grunt :gulp]
:blurb "Grunt, Gulp og andre JavaScript-baserte task runnere
skaper flere problemer enn de løser. Denne artikkelen
viser på forbilledlig vis hvordan npm i de aller fleste
tilfeller er mer enn tilstrekkelig, og tilbyr konkrete
alternativer til de mest vanlige bruksområdene for Grunt
og dens like. Omfavn en smidigere frontend-stack du også!"}
{:title "React: Rethinking best-practices"
:link {:url "http://www.youtube.com/watch?v=x7cQ3mrcKaY"
:text "Se foredraget"}
:tech [:javascript :design :react]
:blurb "Pete Hunt, en av hodene bak JavaScript
UI-rammeverket til Facebook og Instagram, React,
forteller om tankene bak. Foredraget fra JSConf.eu
2013 utfordrer en del etablerte sannheter og
presenterer en måte å tenke på
web-frontend-programmering på som sammenfaller med
klassisk UI-programmering og som virkelig fokuserer
på *separation of concerns*."}
{:title "The Future of JavaScript MVC Frameworks"
:link {:url "http://swannodette.github.io/2013/12/17/the-future-of-javascript-mvcs/"
:text "Les artikkelen"}
:tech [:clojurescript :design]
:blurb "David Nolen, Clojurescript-superstjerne, forteller
om sitt 'Om', Clojurescript-API over Facebook's
React. Om går enda noen skritt fra hva React tilbyr
ved å servere hele pakka med immutable
datastrukturer og et funksjonelt API. Artikkelen
viser samtidig hvordan dagens mest populære
MVC-rammeverk for JavaScript er langt fra å tilby en
tilfredstillende løsning på problemene vi som
frontendutviklere møter."}]
:hobbies [{:title "Mat, brød og øl"
:description "Jeg har alltid vært interessert i mat, og over tid har
interessen bredt om seg: Interessen for meksikansk mat har gjort
chilibonde av meg, med 60 planter på det meste. Interessen for
fermenterte produkter har ført til en mengde glass med fermenterte
grønnsaker, saurkraut, øl, og ikke minst brød - bakt med og uten
surdeig tilnærmet daglig."
:illustration "/illustrations/hobbies/chili-con-carne.jpg"}
{:title "Musikk"
:description "Jeg har spilt i band siden jeg gikk på ungdomsskolen,
og holder fortsatt gitarspillet ved like gjennom
bandet Execration, som ble foræret en Spellemann for
2014. Mine musikalske røtter finner du innen rock og
metal, men som jeg eldes får jeg stadig bredere
musikksmak, og de senere årene har det gått mye i
70-talls progrock."
:illustration "/illustrations/hobbies/christian-gitar.jpg"
:url "http://execration.no/"}]
:blog-posts [{:url "https://cjohansen.no/tools-deps-figwheel-main-devcards-emacs/"
:published "2019-01-18"
:title "tools.deps, figwheel-main, Devcards, and Emacs"
:blurb "Hvordan sette opp et ClojureScript-prosjekt i 2019"
:tech [:clojurescript :clojure :tools-deps]}
{:url "https://cjohansen.no/git-subtree-multiple-dirs/"
:published "2018-05-03"
:title "Git Subtree for Multiple Directories"
:blurb "En liten howto for hvordan man kan skille ut én eller flere mapper fra et git repo som et nytt repo, med historikken intakt."
:tech [:git :bash]}
{:url "https://cjohansen.no/processing-data-with-clojure-and-golang/"
:published "2018-04-20"
:title "Processing Data with Clojure and Go"
:blurb "En sammenligning av samme algoritme implementert i Clojure og Go sammen med med litt synsing om ytelse, type-systemer, og uttrykkskraft."
:tech [:go :clojure :clojure-spec]}
{:url "https://cjohansen.no/a-better-playlist-shuffle-with-golang/"
:published "2019-04-19"
:title "A Better Playlist Shuffle with Go"
:blurb "\"Shuffle\" i eksempelvis Spotify burde være smartere enn ren tilfeldighet. I dette innlegget presenterer jeg en alternativ algoritme med implementasjon i Go."
:tech [:go]}
{:url "https://cjohansen.no/optimized-optimus-asset-paths-clojurescript/"
:published "2018-03-31"
:title "Optimized Optimus Asset Paths from ClojureScript"
:blurb "Hvordan eksponere Optimus asset-paths fra Clojure til ClojureScript via en macro"
:tech [:clojure :clojurescript :optimus]}
{:url "https://cjohansen.no/letsencrypt-haproxy-ssl/"
:published "2018-03-10"
:title "Securing HAProxy sites with Let's Encrypt SSL Certificates"
:blurb "En gjennomgang av oppsett av SSL-sertifikater fra Let's Encrypt med HAProxy"
:tech [:haproxy :letsencrypt :docker :centos]}
{:url "https://cjohansen.no/aws-apigw-proxy-cloudformation/"
:published "2017-12-11"
:title "Api Gateway Proxy Resource with Cloudformation"
:blurb "Cloudformation-oppsett for proxy-ressurser fra AWS Api Gateway"
:tech [:aws-api-gateway :aws-cloudformation]}
{:url "https://cjohansen.no/idempotent-cloudformation-updates/"
:published "2017-10-19"
:title "Idempotent Cloudformation Updates"
:blurb "Hvordan sørge for at Cloudformation-oppdateringer blir helt idempotente"
:tech [:aws-cloudformation :bash]}
{:url "https://cjohansen.no/referentially-transparent-crud/"
:published "2017-06-17"
:title "Referentially Transparent CRUD"
:blurb "Artikkel om hvordan Datomic lar deg implementere tradisjonell CRUD med referentially transparent funksjonell kode."
:tech [:datomic :clojure :datalog :immutability :funksjonell-programmering]}
{:url "https://cjohansen.no/annotating-datomic-transactions/"
:published "2017-06-17"
:title "Annotating Datomic transactions"
:blurb "En artikkel om Datomics transaksjoner, og hvordan de kan utvides med app-spesifik informasjon for bedre auditing og mer."
:tech [:datomic :clojure :datalog]}
{:url "https://cjohansen.no/querying-across-datomic-databases/"
:published "2017-06-17"
:title "Querying across Datomic databases"
:blurb "Et konkret eksempel på hvordan du kan gjøre datalog spørringer over flere databaser samtidig med Datomic."
:tech [:datomic :clojure :datalog]}
{:url "http://www.sitepoint.com/immutability-javascript/"
:published "2015-04-22"
:title "Immutability in JavaScript"
:blurb "Introduksjon til immutability, og hvordan jobbe med immutable data i JavaScript"
:tech [:javascript :immutability]}
{:url "http://www.sitepoint.com/immutability-react/"
:published "2015-05-07"
:title "Immutability in React"
:blurb "Artikkelen bygger videre på artikkelen om immutability i JavaScript, og viser immutable data i sving i en React-applikasjon."
:tech [:javascript :react :immutability]}
{:url "http://www.sitepoint.com/thinking-outside-dom-concepts-setup/"
:published "2016-04-09"
:title "Thinking outside the DOM"
:blurb "Hvordan tenker man egentlig design i JavaScript? Gjelder
konsepter som løse koblinger og 'single responsibility' også på
klienten? Jeg vil så absolutt påstå at det gjør det, og denne
artikkelen belyser hvordan man kan angripe klient-spesifikke
problemer i JavaScript med gode design-prinsipper i hånda."
:tech [:javascript]}
{:url "https://cjohansen.no/building-static-sites-in-clojure-with-stasis/"
:published "2014-03-10"
:title "Building Static Sites in Clojure With Stasis"
:blurb "En lang tutorial-style bloggpost om å lage statiske
websider i Clojure med blant annet biblioteket Stasis.
Artikkelen gir et innblikk i bruk av mange populære
web-biblioteker for Clojure."
:tech [:clojure :stasis :optimus]}
{:url "https://cjohansen.no/clojure-to-die-for/"
:published "2014-03-11"
:title "Clojure to die for"
:blurb "En liten feiring av helt hverdagslige idiomer of småtriks
som gjør det å jobbe med Clojure til en fantastisk god
opplevelse"
:tech [:clojure]}
{:url "https://cjohansen.no/an-introduction-to-elisp/"
:published "2012-07-01"
:title "An introduction to Emacs Lisp"
:blurb "Etter å ha brukt Emacs i mange år, og nylig ha gått
gjennom [The Little
Schemer](http://mitpress.mit.edu/books/little-schemer)
satte jeg meg for noen år siden ned for å lære meg Emacs
Lisp skikkelig. Jeg benyttet anledningen til å samtidig
skrive en god og grundig innføring for andre i samme
situasjon. Artikkelen handler om Emacs Lisp spesielt, men
fungerer også som en introduksjon til Lisp generelt. I
motsetning til andre introduksjonsartikler tar den for
seg et nogenlunde sammensatt eksempel slik at man ser
hvordan Lisp ser ut utover 'Hello world'."
:tech [:lisp :elisp :emacs]}]
:projects [{:customer "Kodemaker"
:employer :kodemaker
:summary "Utvikling av nettsted"
:description "Utviklet skinnende
ny [kodemaker.no](https://www.kodemaker.no). Data leses fra flate
filer inn i Datomic, noe som gir en superb programmeringsmodell for
å generere de statiske filene som utgjør nettstedet - proppfulle av
lenker på kryss og tvers i det etterhvert så omfangsrike faglige
innholdet vårt. Designet er levert av Sebastian
i [Eggs](https://eggsdesign.com), [Magnar](/magnar/) og jeg
sto for implementasjonen over tre uker.
[Koden finner du på Github](https://github.com/kodemaker/kodemaker.no/)."
:tech [:clojure :responsive-design :datomic :aws :puppeteer
:docker :clojurescript :dumdom :emacs :git]
:start "2020-08"
:end "2020-08"}
{:customer "Fortum"
:employer :kodemaker
:summary "Utvikling av nettsted"
:description "Utviklet nytt nettsted for Fortums
strømtilbud ([strom.fortum.no](https://strom.fortum.no)). Innholdet
forvaltes i det hodeløse CMS-et Sanity, mens nettsidene er god
gammeldags statisk HTML, levert av en Clojure-applikasjon bak
Varnish for maksimal ytelse."
:tech [:sanity :clojure :varnish :responsive-design :datadog :git]
:start "2020-04"}
{:customer "Fortum"
:employer :kodemaker
:summary "Smart bestillingsskjema for strøm"
:description "Utviklet et smart bestillingsskjema for strøm.
Løsningen søker opp kunden i flere registre, inkludert Elhub, og
klarer i de aller fleste tilfeller å hjelpe folk med å bestille
strøm ved å kun oppgi telefonnummer og epost-adresse. Løsningen
passerte ekstern sikkerhets- og personvernsgjennomgang med glans."
:tech [:clojurescript :clojure :postgresql :responsive-design :datadog :git :aws :aws-s3 :tools-deps]
:start "2019-10"}
{:customer "Hafslund Strøm"
:employer :kodemaker
:summary "Utvikling av ny Min Side"
:description "Utviklet ny Min Side basert på kodebasen til
mobil-appen til Hafslund Strøm."
:tech [:clojurescript :aws :aws-s3 :tools-deps :responsive-design :datadog :git]
:start "2019-04"}
{:customer "Hafslund Strøm"
:employer :kodemaker
:summary "Utvikling av månedsrapport-tjeneste"
:description "Utviklet en løsning som genererer en månedsrapport på
epost som viser et utsnitt av grafer og informasjon fra Hafslunds
strøm-app. Løsningen bruker Puppeteer til å lage screenshots av
SVG-grafer og samler det hele sammen i en HTML-epost som er 100%
personalisert, og som vises pent i \"alle\" epost-klienter."
:tech [:clojurescript :node :kafka :dynamodb :puppeteer :aws :aws-s3 :tools-deps]
:start "2018-04"}
{:customer "Hafslund Strøm"
:employer :kodemaker
:summary "Utvikling av infrastruktur på AWS med Kubernetes"
:description "Provisjonert ny infrastruktur for å kjøre
Docker-containere på AWS. Kubernetes med diverse tillegg som
automatiserer hele livssyklusen til en app, inkludert
provisjonering av DNS records i Route53. Hel-automatisert med kops
og Terraform."
:tech [:aws :kubernetes :aws-cloudfront :aws-s3 :aws-iam :aws-route53 :terraform
:packer :aws-ec2 :aws-iam :aws-rds :aws-route53 :aws-vpc :datadog :git]
:start "2018-04"}
{:customer "Hafslund Strøm"
:employer :kodemaker
:summary "App for iOS og Android: Cordova og ClojureScript"
:description "Videreutvikling av Hafslund Strøms app for iOS og
Android, samt tilstøtende backend-systemer og infrastruktur."
:tech [:clojurescript :cordova :svg :kubernetes :terraform :d3 :datadog :git :tools-deps]
:start "2018-04"}
{:customer "Tine Husdyrfag"
:employer :kodemaker
:summary "Domenemodellering og applikasjonsarkitektur"
:description "Jobbet med design av deler av det grunnleggende
domenet (eiere) for nye tjenester og hvordan dette spiller sammen
med autentisering og autorisasjon i platformen som helhet. Jobbet
med arkitektur og design av løsninger etter CQRS-prinsippet, samt en
pragmatisk tilnærming til event sourcing (blant annet med bruk av
Datomic).
Utviklet funksjonalitet i AWS. Modellert deler av domenet som en
graf i Datomic."
:tech [:datomic :aws :dynamodb :aws-iam :aws-lambda :aws-api-gateway
:oidc :material-ui :ddd :aws-kinesis :aws-cloudwatch :aws-cloudfront
:aws-rds :aws-s3 :auth0 :jira :confluence :cd :ci :ddd :alpine
:ubuntu :cqrs :event-sourcing :micro-services :figwheel]
:start "2017-09"
:end "2018-03"}
{:customer "Tine Husdyrfag"
:employer :kodemaker
:summary "Utvikling av infrastruktur på AWS"
:description "Design og oppsett av nettverksløsning. Automatisering
av oppsett og utforming av applikasjonsplatform med AWS
Cloudformation, bash og annet. Oppsett for frontendapplikasjoner med
S3/Cloudfront/Route 53. Jobbet med sikkerhetsløsning basert på Oauth
2.0 og OpenId Connect. Utviklet løype for CI/CD basert på
Concourse."
:tech [:aws :aws-vpc :aws-ecs :concourse :aws-iam :docker :bash :oidc
:nginx :go :dynamodb :aws-kinesis :aws-lambda :aws-api-gateway
:aws-route53 :aws-cloudwatch :aws-cloudfront :aws-rds :aws-s3
:auth0 :jira :confluence :cd :ci :alpine :ubuntu :micro-services
:datadog]
:start "2017-09"
:end "2018-03"}
{:customer "Eventum.no"
:employer :kodemaker
:summary "Automatisert bygg og deploy, ny funksjonalitet"
:description "Jeg automatiserte oppsett og deployment av løsningen
med Ansible, Docker og bash. Jobbet med videreutvikling av
eksisterende tjeneste. Designet arkitektur for og utviklet både
backend og frontend for ny spesialisert kommunikasjonsløsning for
arrangør og utleier. Utviklet ny sikkerhetsløsning basert på OAuth
2.0 og OpenId Connect.
Eventum (eventum.no/eventum.com) er \"Airbnb for event-lokaler\" -
møterom, konferanselokaler, restauranter/hoteller/slott til
bursdag, bryllup og andre sammenkomster samles på et sted og gjør
det lett for arrangører å finne og sammenligne tilbud på lokaler."
:tech [:datomic :clojure :clojurescript :ansible :docker :javascript :nodejs
:react :elasticsearch :centos :auth0 :oidc :aws-iam :aws-s3 :leiningen :asana
:maven :haproxy :nginx :datascript :oauth2 :bash :micro-services :core-async
:clojure-spec :component :sse :reagent :figwheel :quartz :datadog]
:start "2017-01"
:end "2017-09"}
{:customer "NRK"
:employer :kodemaker
:summary "Utviklet interaktiv søkemotor for NRKs enorme videoarkiv"
:description "Søk i NRKs enorme mengder videoklipp - både
nettklipp, ting som har gått på TV og råstoff. Utviklet en
søkekomponent for 'smart søk' som gjør utstrakt bruk av
autocomplete, forslag til forskjellige filtreringer, og gjør andre
grep for å styre brukeren i retning av et detaljert søk. Søket ble
implementert i Elasticsearch gjennom en node.js/Express webserver,
og med UI skrevet i React. UI-et ble skilt ut som et bibliotek for
intern gjenbruk, og er nå i bruk i flere applikasjoner."
:tech [:javascript :elasticsearch :nodejs :react :docker :mesos
:octopus :teamcity :jira :micro-services :babel :yarn]
:years [2015 2016]}
{:customer "NRK "
:employer :kodemaker
:summary "Ny frontend for NRKs interne Radioarkiv"
:description "Implementerte nytt design for NRKs interne
Radioarkiv, som brukes internt for research og gjenbruk av
arkivmatriale. Designet ble implementert i form av en styleguide
som senere ble den sentrale UI-komponenten i paraply-prosjektet
Origo, som favner alle NRKs egenproduserte systemer rettet mot
interne arbeidsflyter."
:tech [:javascript :css :responsive-design :less]
:years [2015]}
{:customer "NRK"
:employer :kodemaker
:summary "Laget bilderedigeringsverktøy med HTML Canvas og JavaScript"
:description "Laget en lettvekts bilderedigeringskomponent (litt
effekter, crop, skalering, panorering) med web-teknologi.
Komponenten benyttes som plugin i video-redigeringsverktøyene Adobe
Premiere Pro og Quantell."
:tech [:javascript :webgl :cef :angularjs :jasmine :karma :nodejs]
:start "2014-09"
:end "2014-12"}
{:customer "NRK"
:employer :kodemaker
:summary "Bidrag: Webapp for mottak og rask publisering av saker for journalister i felten"
:description "Laget en app som viser en strøm av bidrag som NRKs
journalister og andre ansatte sender inn fra 'felten'. Brukes
internt i NRK til å både få oversikt over hva som kommer inn, men
også til å se status for viderebehandling av bilder og video i
andre systemer (transkoding, arkiv osv)."
:tech [:javascript :react :nodejs :buster-js :express-js :mysql :jade :compass]
:years [2014]}
{:customer "SPiD"
:employer :kodemaker
:summary "Nytt nettsted for API-dokumentasjon med Clojure"
:description "Utviklet nytt nettsted for teknisk dokumentasjon. Vi
gjør mange grep for å holde dokumentasjonen aktuell og oppdatert.
Sidene blir bygget opp basert på informasjon hentet rett fra SPiD
sitt REST API. Eksempler i guides hentes fra fungerende eksempler,
for å sikre at kodeeksempler ikke er utdatert."
:tech [:clojure :responsive-design :stasis :optimus :midje]
:start "2014-03"
:end "2014-09"}
{:customer "SPiD"
:employer :kodemaker
:summary "Frontend for ny innlogging, registrering og kjøpsflyt for Schibsted Payment ID"
:description "Prototypet ny innlogging, registrering og kjøpsflyt
for SPiD, med fokus på brukervennlighet, støtte for mobil, og
forenkling av tekniske løsninger."
:tech [:html :css :responsive-design :javascript :grunt :mocha :chai]
:start "2014-03"
:end "2014-09"}
{:customer "FINN"
:employer :kodemaker
:summary "FINN Småjobber i produksjon"
:description "Hjalp [FINN Småjobber](http://finn.no/smajobber/)-teamet
med lanseringen av løsningen rett før jul 2013. Har
jobbet med hele løsningen, men med fokus på frontend.
Implementert nytt ajax-søk med React.JS og hjulpet
andre på teamet med å styrke sin frontend-kompetanse."
:tech [:javascript :spring-mvc :karma :jasmine :browserify :sinon :java :junit]
:start "2012-09"
:end "2014-03"}
{:customer "Gitorious AS"
:summary "Utviklet tjeneste for hosting og samarbeid på git-repoer (ala Github)"
:employer :gitorious
:tech [:ruby :rails :git :capistrano :redhat :puppet :mysql :rake :activemq]
:years [2011 2012 2013]}
{:customer "Gitorious AS"
:employer :gitorious
:summary "Drift gitorious.org"
:description "Oppsett, drift og vedlikehold av gitorious.org på
CentOS, samt CI/CD for dette."
:tech [:ruby :rails :git :capistrano :redhat :puppet :mysql :activemq]
:years [2011 2012 2013]}
{:customer "Programutvikling"
:employer :gitorious
:summary "Månedlige kurs i JavaScript og TDD med JavaScript"
:tech [:javascript :tdd]
:years [2011 2012 2013 2014 2015]}
{:customer "FINN"
:employer :kodemaker
:summary "Frontendutvikling for FINN Oppdrag"
:description "Klargjorde et avansert registreringsskjema
for utrulling til flere markedsplasser ved å modularisere
koden til komponenter som kunne settes sammen til
forskjellige skjemaer."
:tech [:javascript :js-test-driver :sinon :spring-mvc :java :junit]
:years [2011 2012]}
{:customer "Nordea"
:employer :shortcut
:summary "Nordea Android app"
:tech [:android :java :eclipse]
:years [2010]}
{:customer "Adecco"
:employer :shortcut
:summary "Adecco Android app"
:tech [:android :java :eclipse]
:years [2010]}
{:customer "Telenor"
:employer :shortcut
:summary "Ny frontend for telenor.no"
:tech [:html :css :javascript :ruby]
:years [2010 2011]}
{:customer "Shortcut"
:employer :shortcut
:summary "Diverse interne apper"
:tech [:ruby]
:years [2009 2010 2011]}
{:customer "Apotek 1"
:employer :ixd
:summary "Konkurranse-applikasjon i Ruby on Rails"
:description "Utviklet konkurranse.apotek1.no, en
quiz/konkurranse-tjeneste i Ruby on Rails, som ble hyppig brukt i
månedlig e-postmarkedsføring."
:tech [:ruby :rails :html :css :javascript :capistrano :ubuntu]
:years [2009]}
{:customer "Telenor"
:employer :ixd
:summary "Ny frontend for online.no"
:tech [:html :css :javascript :ruby]
:years [2009]}
{:customer "Webdagene"
:employer :ixd
:summary "Frontend og CMS for webdagene.no"
:description "Utviklet frontend of backend for nettsidene til
fagkonferansen Webdagene. HTML, CSS, JavaScript i front,eZ Publish
og PHP på baksiden."
:tech [:php :ezpublish :mysql :html :css :javascript]
:years [2007 2008]}
{:customer "Storebrand"
:employer :ixd
:summary "Ny frontend for storebrand.no"
:tech [:html :css :javascript]
:years [2007 2008]}
{:customer "Reiseliv.no"
:employer :ixd
:summary "Frontend og CMS for reiseliv.no"
:tech [:html :css :javascript :ezpublish :mysql]
:years [2007 2008 2009]}
{:customer "Storebrand"
:employer :ixd
:summary "Frontend for kjøpsløsningen til Storebrand Skadeforsikring"
:description "I 2006 bygget Storebrand opp ny Skadeforsikring fra
bunnen. Jeg var med prosjektet nesten fra starten og hadde
eneansvar for implementering av en dynamisk frontend for beregning
av pris og kjøp av forsikringer. Løsningen var den første av sitt
slag i Norge og ble i etterkant hyppig kopiert av andre selskaper."
:tech [:html :css :javascript]
:years [2006 2007]}
{:customer "Cosmopolite"
:employer :self-employed
:summary "Utviklet nettsidene cosmopolite.no i eZ Publish"
:tech [:html :css :javascript :ezpublish]
:years [2006 2007 2008 2009 2010 2011 2012 2013]}
{:customer "IXD"
:employer :self-employed
:summary "Diverse mindre websider basert på eZ Publish"
:tech [:html :css :javascript :ezpublish :ubuntu :windows :mysql :php]
:years [2005 2006 2007 2008 2009]}
{:customer "Rarelink"
:employer :self-employed
:summary "Videreutviklet og driftet tjenesten rarelink.no"
:tech [:java :ant :maven :docker :centos :ansible :mysql]
:years [2005 :ongoing]}
{:customer "IXD"
:employer :self-employed
:summary "Utivklet tjenesten flysiden.no"
:tech [:php :javascript :mysql :html :css]
:years [2004 2005]}
{:customer "Universitetet i Oslo"
:employer :study-part-time
:summary "Frontend og emnekart for apollon.uio.no"
:description "Som første offentlige nettsted i Norge lanserte UiO's
populærvitenskapelige magasin Apollon i 2002 et nettsted som
utelukkende brukte CSS, ingen tabeller. Jeg sto for
frontend-implementasjonen, og bidro også med konvertering av
gammelt innhold over til ny emnekartløsning."
:tech [:html :css :php]
:years [2002 2003]}]
:cv-picture "/foto/profiles/christian/DSCF1411.jpg"
:presentations [{:title "Kosetime: Live parprogrammering og zombier"
:blurb "[Magnar](/magnar/) og [jeg](/christian/)
parprogrammerer funksjonelt med Clojure og ClojureScript på
JavaZone."
:event "JavaZone"
:tech [:clojure :clojurescript :funksjonell-programmering]
:date "2019-09-11"
:urls {:video "https://vimeo.com/362770913"}
:thumb "/thumbs/videos/tomsinger-2019.jpg"}
{:title "To the Cloud"
:blurb "AWS lover uendelig skalering og fleksibilitet ved
klikk på en knapp. Men er det egentlig så enkelt? Jeg går
gjennom en del problemstillinger du møter når du går til
skyen, og viser til erfaringer fra flere AWS-prosjekter."
:event "JavaZone"
:tech [:aws :terraform :kubernetes]
:date "2018-09-13"
:urls {:video "https://vimeo.com/289627521"
:slides "https://2018.javazone.no/program/1f3d689b-9f01-4856-ada5-b200f6076936"}
:thumb "/thumbs/videos/to-the-cloud.jpg"}
{:title "I put 7 years of meal data in Datomic - Here's what I learned"
:blurb "Datomic is an append-only database, designed from the
ground up with modern applications and hardware in mind. It
never loses data, it has an RDF-like approach to schemas, it's
really fast, and it has a powerful query language borrowed
from Prolog that expresses queries as data structures. In
short: it's pretty awesome."
:event "JavaZone"
:tech [:datomic :clojure]
:date "2017-09-14"
:urls {:video "https://2017.javazone.no/program/b334906441754e7b9b282dfdf533738b"}}
{:title "EcmaScript 2015: The Close Future of JavaScript"
:blurb "I juni 2015 ble siste versjon av EcmaScript - spec-en
til JavaScript - ferdigstilt. EcmaScript 2015 (eller
EcmaScript 6 som det en gang het) er tidenes største
oppgradering av språket, og i dette foredraget gjennomgås en
hel haug med eksempler på nye features og hvordan de kan
brukes. Alt kodes live med hjelp av Emacs."
:event "JavaZone"
:tech [:javascript]
:date "2015-09-10"
:urls {:video "https://vimeo.com/album/3556815/video/138956041"}
:thumb "/thumbs/videos/ecmascript-2015.jpg"}
{:title "You can't change this: Immutability in JavaScript"
:blurb "Hva er immutability? Hva er hensikten? Kan man benytte
seg av det i JavaScript? Hvordan? Hvilke konsekvenser har
immutability for UI-programmering? Dette foredraget gir deg
svar på disse spørsmålene, med mer til."
:tech [:javascript :react :immutability]
:event "NDC"
:date "2015-06-19"
:urls {:video "https://vimeo.com/131643024"}
:thumb "/thumbs/videos/immutable-js.jpg"}
{:title "Immutable JavaScript"
:blurb "When it comes to functional programming techniques
seeing widespread adoption in the JavaScript community,
immutability is a strong contender for \"next in line\". In
this talk I'll show you what immutability is all about, why
it's useful, and how to work with it. We'll even put
immutability to work in a React app and observe how we can
reduce complexity while increasing performance."
:date "2015-05-22"
:event "Web Rebels"
:tech [:javascript :immutability]
:urls {:video "https://vimeo.com/128790457"}
:thumb "/thumbs/videos/immutable-javascript-wr.jpg"}
{:title "ZombieCLJ: Live parprogrammering"
:blurb "[Magnar](/magnar/) og jeg parprogrammerer nettspill
med Clojure og ClojureScript på JavaZone. Det blir funksjonell
programmering, testdrevet utvikling og to tomsinger fra Østfold."
:date "2014-09-10"
:event "JavaZone"
:tech [:clojure :clojurescript :react]
:urls {:video "http://vimeo.com/album/3031533/video/105777538"}
:thumb "/thumbs/videos/zombieclj-live.jpg"}
{:title "Functional UI Programming"
:blurb "En introduksjon til React.js, med sammenligning av
populære MC*-rammeverk, samt et eksempel på bruk i form av
live-koding av minesveiper med ClojureScript og Om (en
React-wrapper)."
:date "2014-05-13"
:event "flatMap(Oslo)"
:urls {:video "http://vimeo.com/user18356272/review/96639841/5556b7d3ab"}
:thumb "/thumbs/videos/functional-ui.jpg"
:tech [:javascript :clojurescript :react :om]}
{:title "Zombie TDD: Live parprogrammering"
:blurb "Magnar og jeg setter oss ned med emacsen
og parprogrammerer foran publikum. Se
hvordan to typer som digger JavaScript
angriper problemer og gjør koden testbar."
:date "2012-09-12"
:event "JavaZone"
:tech [:javascript :tdd :testing]
:urls {:video "http://vimeo.com/49485653"}
:thumb "/thumbs/videos/zombie-tdd-live.jpg"}
{:title "Pure JavaScript"
:blurb "Kast de objekt-orienterte krykkene og se denne
introduksjonen til funksjonell programmering med JavaScript"
:date "2012-06-11"
:event "NDC"
:urls {:video "http://vimeo.com/43808808"}
:thumb "/thumbs/videos/pure-javascript.jpg"
:tech [:javascript]
:direct-link? true}
{:title "Test-driven JavaScript Development"
:blurb "En praktisk gjennomgang av TDD i JavaScript.
Foredraget er en times live-kode-sesjon der jeg lager et
autocomplete/type-ahead søk, test-first."
:date "2011-06-11"
:event "NDC"
:urls {:video "http://ndc2011.macsimum.no/mp4/Day1%20Wednesday/Track5%201620-1720.mp4"}
:tech [:javascript :design :testing]}
{:title "JavaScript design and architecture"
:blurb "En liten inspirasjonsprat om å finne gode
abstraksjoner for frontend-programmering"
:date "2011-09-07"
:event "JavaZone"
:urls {:video "http://vimeo.com/28760470"
:slides "http://cjohansen.no/talks/2011/javazone-js-design"}
:tech [:javascript :design]}
{:title "Mythbusters: JavaScript Edition"
:blurb "Få programmeringsspråk er omgitt av så mye unøyaktig,
irrelevant og direkte feil informasjon og misforstått
'hjelpematriell'. I dette foredraget tar jeg for meg
noen av de vanligste misforståelsene, og prøver
gjennom eksempler å oppgradere publikums JavaScript-kunnskap."
:date "2011-09-07"
:event "JavaZone"
:urls {:video "http://vimeo.com/28723225"
:slides "http://cjohansen.no/talks/2011/mythbusters/#1"}
:thumb "/thumbs/videos/js-mythbusters.jpg"
:tech [:javascript]}
]
:appearances [{:title "Datomic"
:event "Fürst Medisinsk Laboratorium IT"
:tech [:datomic :clojure]
:date "2018-05-31"}
{:title "Datomic"
:event "Hafslund/Fortum"
:tech [:datomic :clojure]
:date "2018-05-02"}
{:title "Datomic"
:event "Bring"
:tech [:datomic :clojure]
:date "2018-04-10"}
{:title "Å Bygge sin egen Infrastruktur på AWS"
:event "Kodemaker fagdag"
:tech [:aws :aws-cloudformation :concourse]
:date "2018-04-05"}
{:title "Datomic"
:event "Tine Husdyrfag"
:tech [:datomic :clojure]
:date "2017-11-14"}
{:title "I put 7 years of meal data in Datomic - Here's what I learned"
:event "NDC Oslo"
:tech [:datomic :clojure]
:date "2017-06-14"}
{:title "Datamodellering med Datomic"
:event "Kodemaker fagdag"
:tech [:datomic :clojure]
:date "2017-01-14"}
{:title "Webutvikling med React - intern workshop"
:event "NRK"
:tech [:javascript :react]
:date "2016-06-10"}
{:title "JavaScript og React, 2 dagers kurs"
:event "Conax"
:tech [:javascript :react]
:date "2016-04-22"}
{:title "The Imminent Future of JavaScript"
:event "JavaZone Academy"
:tech [:javascript]
:date "2016-02-16"}
{:title "Webutvikling med React"
:event "Webstep"
:tech [:javascript :react]
:date "2016-02-03"}
{:title "The Imminent Future of JavaScript"
:event "Framsia"
:tech [:javascript]
:date "2015-11-25"}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:tech [:javascript]
:date "2015-11-24"}
{:title "TDD og Arkitektur med JavaScript - intern workshop"
:event "NRK"
:tech [:javascript :tdd :react]
:date "2015-11-10"}
{:title "JavaScript for programmers, 2-dagers kurs"
:event "Cisco"
:tech [:javascript]
:date "2015-11-09"}
{:title "JavaScript Decoupled"
:event "Capra Consulting"
:tech [:javascript]
:date "2015-10-30"}
{:title "Test-Driven JavaScript"
:event "Iterate"
:tech [:javascript]
:date "2016-10-21"}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:tech [:javascript]
:date "2015-09-22"}
{:title "JavaScript for Programmers, 3-dagers kurs"
:event "Programutvikling"
:tech [:javascript]
:date "2015-02-25"}
{:title "Thinking Outside the DOM"
:event "NDC London"
:tech [:javascript]
:date "2014-12-04"}
{:title "JavaScript for Programmers, 3-dagers kurs"
:event "Programutvikling"
:tech [:javascript]
:date "2014-11-05"}
{:title "Test-Drevet JavaScript, 1-dags workshop"
:event "Visma"
:tech [:javascript :tdd]
:date "2014-09-01"}
{:title "JavaScript for Developers, 3-dagers kurs"
:event "Programutvikling"
:tech [:javascript]
:date "2014-08-11"}
{:title "Functional UI Programming - React.js, ClojureScript og Om"
:event "NDC 2014"
:date "2014-06-20"
:tech [:clojurescript :om :react]}
{:title "Functional UI programming"
:event "Oslo Socially Functional"
:date "2014-04-28"
:tech [:javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2014-04-05"
:tech [:javascript]}
{:title "Party in the front, party in the back - workshop om node.js og React.js"
:event "Booster conf"
:date "2014-04-01"
:tech [:nodejs :react]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2014-02-01"
:tech [:javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2013-12-01"
:tech [:javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2013-10-01"
:tech [:javascript]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2013-09-01"
:tech [:javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2013-08-01"
:tech [:javascript]}
{:title "Test-driven JavaScript Development, 3-dagers internkurs"
:event "Startsiden.no"
:date "2013-04-10"
:tech [:javascript :tdd]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2013-04-01"
:tech [:javascript :tdd]}
{:title "JavaScript for programmers, 3-dagers internkurs"
:event "Startsiden.no"
:date "2013-03-10"
:tech [:javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2013-03-01"
:tech [:javascript]}
{:title "Unit testing with Buster.JS"
:event "Capra"
:date "2013-01-10"
:tech [:buster-js :javascript :tdd]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2013-01-05"
:tech [:javascript]}
{:title "Introduction to Git, 1-dags kurs"
:event "Nets"
:date "2013-01-01"
:tech [:git]}
{:title "Pure, functional JavaScript"
:event "Felix Aker Brygge"
:date "2012-12-01"
:tech [:javascript :funksjonell-programmering]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2012-11-01"
:tech [:javascript]}
{:title "Automated testing and JavaScript"
:event "Mesan"
:date "2012-11-10"
:tech [:tdd :javascript]}
{:title "Pure, functional JavaScript"
:event "Øredev"
:date "2012-11-01"
:tech [:funksjonell-programmering :javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2012-10-01"
:tech [:javascript]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2012-09-10"
:tech [:javascript :tdd]}
{:title "Pure, functional JavaScript"
:event "JavaZone"
:date "2012-09-08"
:tech [:funksjonell-programmering :javascript]}
{:title "JavaScript Basics"
:event "InMeta"
:date "2012-09-07"
:tech [:javascript]}
{:title "Automated testing and JavaScript"
:event "NIFSL"
:date "2012-09-06"
:tech [:javascript :tdd]}
{:title "Node.JS"
:event "Dataforeningen"
:date "2012-08-10"
:tech [:nodejs :javascript]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2012-08-09"
:tech [:javascript]}
{:title "Working with Buster.JS"
:event ""
:date "2012-08-08"
:tech [:javascript :buster-js]}
{:title "Pure, functional JavaScript"
:event "WebRebels"
:date "2012-05-10"
:tech [:funksjonell-programmering :javascript]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2012-05-09"
:tech [:javascript :tdd]}
{:title "JavaScript for programmers, 3-dagers kurs"
:event "Programutvikling"
:date "2012-04-10"
:tech [:javascript]}
{:title "Test-Driven JavaScript Development"
:event "SDC (Sverige)"
:date "2012-04-09"
:tech [:javascript :tdd]}
{:title "Pure, functional JavaScript"
:event "SDC (Sverige)"
:date "2012-04-08"
:tech [:funksjonell-programmering :javascript]}
{:title "Buster.JS"
:event "Bergen NNUH"
:date "2012-03-10"
:tech [:buster-js :javascript]}
{:title "Node.JS"
:event "Bergen NNUG"
:date "2012-03-09"
:tech [:nodejs :javascript]}
{:title "Unit testing"
:event "JavaScript Days, Køln"
:date "2012-03-08"
:tech [:tdd :javascript]}
{:title "Sinon.JS"
:event "JavaScript Days, Køln"
:date "2012-03-07"
:tech [:sinon :javascript]}
{:title "TDD with JavaScript"
:event "JavaScript Days, Køln"
:date "2012-03-06"
:tech [:javascript :tdd]}
{:title "Buster.JS/TDD workshop (med August Lilleaas)"
:event "BEKK"
:date "2012-02-10"
:tech [:javascript :buster-js :tdd]}
{:title "JavaScript: From Zero to Hero in 1.5 days"
:event "Konwit, Stavanger"
:date "2012-02-09"
:tech [:javascript]}
{:title "Step away from the for-loop!"
:event "Framsia"
:date "2012-01-10"
:tech [:javascript :funksjonell-programmering]}
{:title "Introduction to JavaScript"
:event "Unit4"
:date "2012-01-09"
:tech [:javascript]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Programutvikling"
:date "2011-11-10"
:tech [:javascript :tdd]}
{:title "Test-driven JavaScript Development, 3-dagers kurs"
:event "Questback"
:date "2011-11-09"
:tech [:javascript :tdd]}
{:title "Writing a book experience report: Test-Driven JavaScript Development"
:event "Øredev"
:date "2011-11-08"