Discussion:
[Lisp] Anteckningar från Lispmöte i Göteborg
Johan Lindberg
2013-07-12 19:09:30 UTC
Permalink
Hej,

Tack för igår. Som utlovat kommer här en renskriven (och något utökad)
servett (servetten finns också förevigad på
http://instagram.com/p/bo3A5uIz7G/ för den som är intresserad).

Vi diskuterade frekvens på möten och kom fram till att ungefär 4 ggr/år
skulle vara lagom. Vi pratade också om att nästa möte skulle bli nånstans i
september med ett tredje möte i november.

Angående innehåll så diskuterades fem olika typer av aktiviteter för mötena:

1) Turnering för AI spelare. Var och en tar med sig en AI och vi kör en
turnering under själva mötet. Diskuterar olika implementations-strategier,
tips och tricks och kanske tom hackar lite kod för att bättra på
resultatet. Vi diskuterade lite olika spel som skulle kunna användas: a)
nåt Core War-aktigt[1] och b) Pentago[2].

2) Swarm coding[3] eller Randori Kata CodingDojo-style[4] gemensamt
hackande på ett intressant problem. Vi angriper ett väldefinierat problem
som kan lösas under tiden mötet hålls och diskuterar, vrider och vänder på
kod för att få till den bästa lösningen gemensamt.

3) Kodgranskning. En förberedd genomgång/presentation av t ex ett GitHub
repo. Lik #2 men med mer fokus på diskussion om kod än på kodande.

4) Gemensamt projekt. Vi hackar på nåt spännande, lite större projekt, och
använder mötena för att lösa problem och hacka vidare koncentrerat och
gemensamt. Här diskuterades lite olika förslag bl a a) en Husmans-Lisp
(kokbok för vardagshacking), b) en Lisp miljö designad för lärande (t ex en
Fluxus-baserad[5] Raspberry Pi[6] som bootar rakt in i en fullskärms-REPL),
c) Quicklisp[7] (vad vi än kan bidra med) och d) en lite mer akademiskt
tänkt övning att bygga en Lisp från grunden och basera på t ex Arduino[8]
eller liknande målplattform).

5) Show & Tell. En klassisk presentation/genomgång av ett intressant ämne.
Gruppen har ganska varierande kunskaper och erfarenhet och vi var överens
om att det finns mycket att lära av varandra. Vi diskuterade bl a att det
skulle vara intressant att a) ha en genomgång av utvecklingsmiljö (Emacs,
VI etc) och b) olika Lisp implementationer (SBCL, Clozure CL, Gambit
Scheme, Clojure etc).

I övrigt kan nämnas att mötet höll på i ungefär 3,5h. 100% av deltagarna
var av manligt kön. Det genomsnittliga antalet öl som konsumerades var 1,2.
Det fanns två Appleprodukter och ett skägg på plats .

Mvh
Johan Lindberg
***@pulp.se

[1] http://en.wikipedia.org/wiki/Core_War
[2] http://en.wikipedia.org/wiki/Pentago
[3] http://technomancy.us/162
[4] http://codingdojo.org/cgi-bin/wiki.pl?RandoriKata
[5] http://en.wikipedia.org/wiki/Fluxus_(programming_environment)
[6] http://en.wikipedia.org/wiki/Raspberry_Pi
[7] http://www.quicklisp.org/
[8] http://en.wikipedia.org/wiki/Arduino
Lars Brinkhoff
2013-07-16 06:12:49 UTC
Permalink
De som var nyfikna på samspelet mellan Emacs Lisp och min Common Lisp
kan läsa lite mer detaljer här:

http://github.com/larsbrinkhoff/emacs-cl/blob/master/HOWTO
Lars Brinkhoff
2013-07-16 19:16:41 UTC
Permalink
Post by Lars Brinkhoff
De som var nyfikna på samspelet mellan Emacs Lisp och min Common Lisp
Det undrades också hur man kan kompilera CL-kod med lexikal bindning
till elisp-kod med dynamisk bindning. Min metod har varit att lagra
värden i anonyma symboler (gensymer) ungefär som register i assembler-
kod. Detta säkerställer att variabler i en funktion inte påverkar en
annan funktion genom dynamisk bindning.

För att stöja closures, allokeras omslutna variabler till cons-celler
eller vectorer (beroende på hur många). Dessa krokas sedan in via en
sorts trampolinfunktion så att closure-funktionen kan komma åt dem.

Som ett exempel kompileras denna CL-kod:

(let ((x 42))
(lambda (y)
(shiftf x y))) ;Jag gillar SHIFTF, se http://l1sp.org/cl/shiftf

till denna elisp-kod (förenklad för läsbarhet):

(let ((#:R0 42))
(let ((env (cons #:R0 nil))) ;x allokeras till (car env)
(make-closure (lambda (#:R1) ;Tillverka en trampolin
(let ((#:R2 (car env))) ;Läs ut x
(setf (car env) #:R1) ;Sätt nytt värde på x
(setq nvals 1 mvals nil) ;För multipla returvärden
#:R2))
env)))
Lars Brinkhoff
2013-08-01 08:21:03 UTC
Permalink
Vi pratade också om att nästa möte skulle bli nånstans i september
Då är det dags att börja spara pengar till en öl nästa månad. (Eller
två om man står i skuld.) Vilket datum kan det bli?
2) Swarm coding[3] eller Randori Kata CodingDojo-style[4] gemensamt
hackande på ett intressant problem.
Sådant tycker jag kan vara mycket underhållande, speciellt om det är
något klurigt som gör man blir tvungen att ta till obskyra finesser i
ett programmeringsspråk. Det kan vara lite som en kombination av att
lösa en gåta och skriva en haiku.
4) Gemensamt projekt. Vi hackar på nåt spännande, lite större
projekt, och använder mötena för att lösa problem och hacka vidare
koncentrerat och gemensamt.
För min del föredrar jag kanske ett existerande användbart projekt
hellre än att starta upp ett nytt, om det mest är för att ha något
gemensamt.
5) Show & Tell.
Ytterligare förslag:
- Hur man använder restarts i CL för skoj och profit.
- Någon berättar om ett intressant programmeringsspråk som inte är en
Lisp.
Johan Lindberg
2013-08-04 15:09:13 UTC
Permalink
Hej,
Post by Lars Brinkhoff
Vi pratade också om att nästa möte skulle bli nånstans i september
Då är det dags att börja spara pengar till en öl nästa månad. (Eller
två om man står i skuld.) Vilket datum kan det bli?
Datumfrågan lämnade vi ju ganska öppen. Jag har ordnat till en doodle
om det (se länk nedan) men jag antar att vi behåller tiden (18-21/22
beroende på hur många öl man vill ha ;-)

Gå in på

==> http://doodle.com/328rr3k56vmgzmu5 <==

om du tänkt komma.
Post by Lars Brinkhoff
2) Swarm coding[3] eller Randori Kata CodingDojo-style[4] gemensamt
hackande på ett intressant problem.
Sådant tycker jag kan vara mycket underhållande, speciellt om det är
något klurigt som gör man blir tvungen att ta till obskyra finesser i
ett programmeringsspråk. Det kan vara lite som en kombination av att
lösa en gåta och skriva en haiku.
Jag tror att ovanstående kan vara ett bra innehåll för nästa möte.
Ytterligare en variant (istf swarm eller randori) är att man delar upp
sig och par-programmerar fram en lösning och sen spenderar några
minuter på att presentera resultaten i slutet av mötet. Då skulle man
också kunna komma åt att några t ex väljer att implementera i Clojure
och att vi får en liten introduktion i olika språk förutom tankarna
bakom implementationer och algoritmer.

Helt fräckt föreslår jag att vi kör FizzBuzz (se
http://codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz) gemensamt
(swarm/randori) som uppvärmning. Det bör inte ta mer än ungefär en
halvtimme men är en bra introduktion för alla i vad man förväntas
göra. Sen föreslår jag att vi som huvudrätt tar oss an Roman Numerals
(se http://codingdojo.org/cgi-bin/wiki.pl?KataRomanNumerals) i par och
att (defun number->roman-numeral (n) (format t "~@R" n)) betraktas som
fusk ;-)

Vad tror ni om det?

Mvh
Johan Lindberg
***@pulp.se

Loading...