Clojure er en Lisp-dialekt som kjører på JVM-en (i tillegg til CLR-en og JavaScript). Det er et dynamisk og kompilert programmeringsspråk som er designet for å integrere tett med sin host-plattform. Til tross for dette er Clojure primært et funksjonellt programmeringsspråk med persistente datastrukturer og et standard-API som er spesielt god egnet for parallelisering.

Våre anbefalinger

Simple Made Easy
Anbefalt av August, Kristian, Christian og Magnar

Rich Hickey, oppfinneren av Clojure og Datomic, snakker om forskjellene på «Simple» og «Easy». Det er stor forskjell på «vanskelig», som er subjektivt (Russisk er vanskelig fordi du ikke kan det), og «simpelt», som er objektivt (spagetti-kode er vanskelig å lese fordi det er sammenvevd). Denne presentasjonen har allerede rukket å bli rene Woodstock-legenden, og forklarer godt hovedpoengene med Clojure uten en eneste linje kode.

The Nature of Lisp
Anbefalt av Magnar

Eric Raymond sa «Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.» Hva i all verden skal det bety? Denne artikkelen har en bra innfallsvinkel for å forklare nettopp det.

The Joy of Clojure
Anbefalt av Alf Kristian

Dette er ingen intro bok om Clojure, dette er en bok for de som vil lære litt mer. I tillegg til et dypdykk i språket, lærer man om generell funksjonell programmering. Kan anbefales for alle som føler det er forbi begynnerstadiet i FP, enten det gjelder Clojure eller andre spåk.

Clojure Applied
Anbefalt av André

Dette er ikke en ‘Lær Clojure’ bok, men gir en hel tips og forslag til hvordan benytte Clojure på en bra og fornuftig måte. Jeg leste denne boken etter mitt første Clojure/ClojureScript prosjekt. Det hadde selvfølgelig vært nyttig å ha lest boken før prosjektet, men jeg er ikke sikker om alt hadde gitt så mye mening som nå etter at jeg har følt noen av problemstillingene på kroppen. Uansett en bok jeg varmt vil anbefale.

Webutvikling med Clojure
Anbefalt av Stein Tore

Et veldig bra foredrag fra JavaZone 2014. Dette fikk meg til å virkelig ønske å lære Clojure. Anbefales!

Våre foredrag

Magnar snakker hva, hvorfor og hvordan om Pure Functions, i et utbrudd av entusiasme etter å ha jobbet med en kodebase basert på disse prinsippene et par år.

På Javazone 2015, snakket Alf Kristian erfaringer med de funksjonelle språkene på JVM’en. I tillegg sammenlignet han dem med «FP» i Java 8.

Det finnes et utall plattformer for å lage webapplikasjoner; så hvorfor skal du vurdere Clojure? Fordi det gir deg enklere løsninger, raskere utvikling og færre feil. Ta sjansen til å bli kjent med et språk som vil forandre måten du tenker på.

Magnar og Christian parprogrammerer nettspill med Clojure og ClojureScript på JavaZone. Det blir funksjonell programmering, testdrevet utvikling og to tomsinger fra Østfold.

Datomic - the most innovative DB you've never heard of

Datomic is a strange database. The writer is single threaded. It writes to other databases and has no storage of its own. It has a completely different API for reads and writes. Queries runs on the client, not the server. Time travel is built in, and you can query the history of your database.

In this talk, you’ll learn where Datomic fits and for which use cases the above are good ideas, how Datomic actually invented very little and stands on the shoulders of BigTable and VoltDB, all using Kotlin, of course :)

I put 7 years of meal data in Datomic - Here's what I learned

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.

Really understanding Clojure, getting into macros

På Javazone 2014, snakket Alf Kristian om Clojure sine makroer. Det ble et dypdykk inn i en av Clojure sine kraftigste features

The imminent revolution of functional append-only databases

I de fleste domener har gammel data høy verdi. Det bør ikke være ditt ansvar å løse dette manuelt med tradisjonelle muterbare databaser. Få en introduksjon til ny grensesprengende database-teknologi som løser dette problemet for deg.

WTF is Datomic?

Introduksjon til hvordan i alle dager en immutable database kan funke, og hvorfor det er bra greier.

Programmeringsspråket betyr alt!

Hovedverktøyet til programmerere er programmeringsspråket. Likevel velge vi sjeldent det beste riktige verktøyet for å løse oppgavene. Denne presentasjonen fokuserer på hvor viktig det er å velge riktig programmeringsspråk.

Lisp er vakkert!

Mange misliker Lisp på grunn av annerledes syntaks. Men når man forstår hvorfor syntaksen er som den er, så blir språket vakkert!

Clojure - JVM språket som er "multi-core ready"

En introduksjonspresentasjon om Clojure, som går igjennom språkets oppbygning og filosofi. Forklarer også hvorfor Clojure er et bedre rustet språk for fremtiden enn andre.

Funksjonell Programmering på JVM

Presentasjon fra JavaZone 2010. Hovedsaklig en presentasjon av arbeidet Eivind gjorde med master-oppgaven. Snakker om forskjellige aspekter ved funksjonell programmering og hvordan man oppnår dette med forskjellige språk på JVM.

Våre screencasts

Zombie CLJ - Clojure og ClojureScript

I denne oppfølgeren til ZombieTDD lager Christian og Magnar spill med Clojure og ClojureScript. Det går i parprogrammering hele veien. Og jaggu skriver vi ikke flere tester først. Skulle tro XP hadde noe for seg.

Parens of the dead

Mer zombier og Clojure, denne gangen på engelsk. Magnar tenkte det kunne være moro å lage noe for et større publikum. Litt mer finpussa og litt mindre jovialt enn originalen.

A pinch of Clojure love to Light Table

Screencast som demonstrerer kule features i min Light Table refactoring plugin

Clojure refactoring in Light Table

Screencast som demonstrerer litt av min Light Table refactoring plugin

Våre sideprosjekter

mytomatoes

Et lite produktivitetsverktøy Magnar smalt sammen på en uke, som nå har flere tusen besøkende daglig - med 3,5 millioner 25 minutters arbeidsøkter registrert. Den første versjonen var kodet med PHP, men nylig lagde Magnar en Clojure backend som er litt morsommere å vedlikeholde.

Light Table

Etter å ha vært en ivrig bruker av Light Table i 1,5 år, bestemte Magnus meg sommeren 2015 til å ta steget opp å joine opensource teamet til Light Table for å forsøke å gjenopplive prosjektet. Det er nok å ta tak i for å si det sånn !

Cashflow
Av Odin

Nettbanken min har ingen regnskapsfunksjon. Så det lager Odin på egen hånd, i Clojure.

Vår fri programvare

  • Cashflow - Regnskap for nettbanktransaksjoner
  • Clj-Light-Refactor - Plugin som gir Clojure refactoring support til Light Table
  • Mapdown - Et lettvekts markup format for å lage maps av strenger.
  • Optimus - Et bibliotek for frontendytelse.
  • Prone - Bedre feilmeldinger og debugging for Clojure webapps.
  • Stasis - Et bibliotek for å lage statiske nettsider. Som denne.
  • asciidoclj - Rendre asciidoc i Clojure.
  • clj-refactor - Refaktorerings for Clojure.
  • datoms-differ - Et bibliotek for å finne diff mellom to txs a-la Datomic og DataScript
  • flare - Et verktøy som forbedrer rapportering av feilende tester for Clojure.
  • gadget-inspector - Utviklingsverktøy for ClojureScript og Clojure - visualiserer data i en Chrome-extension slik at man har full innsikt i kjøretids-tilstanden til applikasjonene under utvikling.
  • helpful-loader - Et lite bibliotek for å laste inn filer med gode feilmeldinger.
  • hiccup-find - Test-helpere for hiccup.
  • imagine - Et verktøy for å skalere, croppe, og gjøre andre transformasjoner på bilder før de serves på internett. Kan brukes som en Ring-middleware, eller til å generere transformerte/optimaliserte bilder til disk.
  • jiffy - Port av Java Time til Clojurescript
  • optimus-angular - Bedre ytelse for AngularJS-apps.
  • optimus-img-transform - Optimalisering og transformering av bilder til Optimus.
  • optimus-jsx - React JSX-støtte til Optimus.
  • optimus-less - LESS-støtte til Optimus.
  • pharmacist - Et bibliotek for deklarativ utførelse av en serie operasjoner som kanskje kan feile. Typisk use-case er orkestrering av nettverkskall, men Pharmacist er ikke begrenset til dette.
  • realize - Et bibliotek for å realisere lazy seqs i Clojure med feilhåndtering
  • rewrite-cljs - ClojureScript port av rewrite-clj. Bibliotek for traversering og omskriving av Clojure/ClojureScript/EDN- kode
  • rubberlike - Et verktøy for å enkelt spinne opp embedded ElasticSearch servere
  • stubadub - Et lite stubbing bibliotek.
  • test-with-files - Enkel måte å skrive tester som bruker filer på disk.
  • Vi har også bidratt til Collage, Quiescent, buddy-auth, cegdown, clj-time, clj-v8, datomic-type-extensions, devcards, kaocha, lambdacd-git, midje, quiescent og ring-server

Våre blogginnlegg

Sy sammen s-expressions med thread-first og -last

Når man er ny til Clojure er macro-ene -> og ->> temmelig forvirrende. Ikke bare er de vanskelige å søke etter på nett, men koden ser også helt mystisk ut. Heldigvis er det ikke lenge til du blir nyforelska og bruker dem overalt. Kanskje etter denne bloggposten?

Clojure zippers - snasen traversering og manipulering av trær

Har du hørt om zippers før? Ikke glidlåser altså, men en teknikk for å representere aggregerte datastrukturer slik at de kan enkelt traverseres og manipuleres nærmest vilkårlig. La oss utforske zippers litt nærmere og se hvordan du kan bruke de i Clojure.

Partisjonering av data

map, filter og reduce er nyttige verktøy som mange har i verktøykassa si. Oppi der burde også partition være, og jeg skal vise deg hvorfor.