Wednesday, August 31, 2011

New slides and how I made them

New slides

I've posted PDFs of slides from some talks I gave a while ago.

First-Class Concurrency in Haskell covers topics in concurrent imperative programming, such as:

This turned out to be far too much material for a one-hour talk, so the slides are probably more valuable than the talk itself. I'm also thinking of expanding the π-calculus bits into a proper blog post at some point.

High-level FFI in Haskell covers tricks for making bindings to C libraries that feel more like native Haskell libraries. Most of the examples are drawn from my hdis86 library . This includes:

  • Translating C types to idiomatic Haskell types

  • Passing Haskell functions as C function pointers

  • Passing ByteStrings as C buffers

  • Automatic locking and memory management of library state

  • Exposing a C library's state machine as a lazy pure function

  • Bundling a C library with Cabal while also allowing dynamic linking

These slides were available before, in a somewhat strange HTML format. The new PDFs are more portable and I think they look nicer, too.

How I made the slides

I originally wrote the slides in Markdown format and converted them to a S5 slideshow using pandoc. This was a great way to quickly prepare slides, including syntax-highlighted Haskell code. However I ran into a few limitations:

  • Slide layout depends on window size and screen resolution, rendering my obsessive tweaking useless. In some cases the text would run off the edge of the screen or overlap other elements.

  • The slides don't work at all in Chromium, as of the S5 version I used initially. I also got reports of issues with other browsers.

I wanted to switch over to Beamer, as I'd seen some very high-quality slides produced using that package. This would also provide a PDF that renders exactly the same on every machine. Fortunately, pandoc can output LaTeX code suitable for Beamer. I can keep using the lightweight syntax of Markdown, and most of my old slide source code works as-is. Once again pandoc handles a tricky problem with ease.

I followed this scheme with a few modifications. For example, pdflatex was unhappy with slides ("frames") containing verbatim text environments. The solution was to declare all frames as "fragile", whatever that means:

\begin{frame}[fragile]

Recent versions of pandoc accept the --listings option and will use the LaTeX listings package to render nicely-formatted source code. This article was helpful for configuring listings. The default Haskell style has a rather odd definition of what counts as a keyword, so I wrote a custom language definition. I ended up with this LaTeX header, which you can pass to pandoc using -H:

\usepackage{listings}
\usepackage{color}

\lstdefinelanguage{Haskell_mod}{
otherkeywords={.., ::, |, <-, ->, @, ~, =, =>},
morekeywords={
case, class, data, default, deriving, do, else,
foreign, if, import, in, infix, infixl, infixr,
instance, let, module, newtype, of, then, type,
where, _, forall, ccall },
sensitive,
morecomment=[l]--,
morecomment=[n]{\{-}{-\}},
morestring=[b]"
}[keywords,comments,strings]

\lstset{
language=Haskell_mod,
basicstyle=\ttfamily,
keywordstyle=\color[rgb]{0,0,1},
commentstyle=\color[rgb]{0.133,0.545,0.133},
stringstyle=\color[rgb]{0.627,0.126,0.941},
showstringspaces=false,
frame=single
}

The Markdown sources for the slides are available: 1, 2.

My biggest remaining complaint is that I have a lot of explicit spacing commands, e.g. \vspace{1em}. These are used for logical grouping, and so can't be fully inferred, but maybe there's a better (partial?) solution.

7 comments:

  1. HP printer support 24*7 at HP help number for printer connection and driver issues. HP printer repair and setup ... printer technical support.

    ReplyDelete
  2. Thanks for sharing such a valuable information.Im very thankful to you that you had given me this opportunity to write on this blog.please visit our website I assure you that it will be very useful for @ Packers And Movers Bangalore

    Packers And Movers Bangalore to Pune
    Packers And Movers Bangalore to Chennai
    Packers And Movers Bangalore to Noida
    Packers And Movers Bangalore to Mumbai

    ReplyDelete
  3. เปิดประสบการณ์ทำเงินไปกับเกมเดิมพันออนไลน์ที่ครบวงจรที่สุด ยกคาสิโนไว้บนเว็บไซต์ ทำเงินได้อย่างเรียงไทม์ไปกับ Dreamgaming casino เว็บคาสิโนที่ดีที่สุด อันดับ 1 ของเอเชีย เข้าเว็บไซต์ เว็บไซต์ที่ออกเเบบมารองรับผู้เล่นที่ชื่นชอบเกมเดิมพันออนไลน์ ทันสมัย ครบวงจร เข้าถึงง่าย ใช้งานสะดวก รวมเกมเดิมพันออนไลน์ไว้ที่นี่มากกว่า 1000 เกม ครบจบในเว็บไซต์เดียว.

    ReplyDelete
  4. Gutt Websäit : Zonahobisaya
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : One Piece
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : One Piece
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : Zonahobisaya
    Gutt Websäit : Zonahobisaya

    ReplyDelete
  5. สล็อตเว็บตรง โบนัสแตกบ่อยฝากถอนไม่มีขั้นต่ำ ผ่านระบบอัตโนมัติสะดวกสบายเล่นได้ทุกที่เกมสล็อตทำเงินให้คุณแบบไม่อั้น PG SLOT เว็บตรงแตกง่าย จัดเต็มทดลองเล่นได้เลยที่ pg-slot.game

    ReplyDelete
  6. เว็บไซต์ไชต์ตรง ไม่ผ่านเอเย่นต์ เรา คัดสรรถึงแม้ว่า เกม สล็อต แจ็คพอต แตกหลายครั้ง เล่นสล็อตได้เงินจริง รวม เว็บ สล็อต PG รองรับการใช้งาน ทั้งคอมพิวเตอร์ โทรศัพท์มือถือ

    ReplyDelete
  7. "รีวิวเว็บที่เล่นจริง ทำเงินได้ไว magame88 เล่นได้เพียงไม่กี่นาที ก็สามารถทำเงินได้แล้ว สล็อตเว็บใหม่ รวมเกมมากมาย ทำเงินได้สูงสุดหลักแสนบาท เล่นเวลาไหนก็สามารถทำเงินได้ เว็บทำเงินโบนัสแตกง่าย ถอนไวมาก
    "

    ReplyDelete