SlideShare a Scribd company logo
Spelunking
through JPEG in
Racket
Andy Wingo ~ wingo@igalia.com
wingolog.org ~ @andywingo
Theses
We should work with JPEG and other media
from safe languages
Our languages should understand the
structure of JPEG
Guilers and Racketeers should steal more
code and ideas from each other
An idiot in racketland
A live demo, in which I make a dog’s dinner
of the fine DrRacket
Spelunking through JPEG with Racket (Sixth RacketCon)
glitch or no?
Spelunking through JPEG with Racket (Sixth RacketCon)
Lessons learned?
DC component: Things mostly just work
AC components: Lots of details...
Easy
logand / bitwise-and
1+ / add1
match differences
module differences
Lovely
Background expansion in DrRacket
Bitmaps in DrRacket
Packages very nice
struct
(module+ test ...)
Chucklers
Same problem Guile has when printing large
data
(It prints large because structs, equal?, and
tests)
Head-scratchers
bytevector-s16-ref with endianness?
Why are bytes so stringy?
What pronoun to use for struct instances?
Port argument to write-bytes optional?
(Compare to R6RS)
No embedded array literals?
Why no right-click in DrRacket?
Gnarlies
No generic array facility
math/array weird
array-map lazy but not documented as such
Unfolds over arrays hard
Reloads versus incremental dev
Summary
Happy hacking!
https://github.com/wingo/racket-jpeg
wingolog.org
@andywingo
wingo@igalia.com

More Related Content

PPTX
C# 4.0 and .NET 4.0
ODP
PPTX
Practical F#
PPTX
Understanding VI(M)
PPTX
C programming interview questions
PDF
Chatbots are so last decade
PDF
GPT and other Text Transformers: Black Swans and Stochastic Parrots
PDF
Python for the C# developer
C# 4.0 and .NET 4.0
Practical F#
Understanding VI(M)
C programming interview questions
Chatbots are so last decade
GPT and other Text Transformers: Black Swans and Stochastic Parrots
Python for the C# developer

What's hot (20)

PPTX
Python 101 For The Net Developer
PPTX
F# for BLOBA, by brandon d'imperio
PDF
Arguman
PPTX
Lessons from Indic OCR Development
PPTX
PDF
Perl::Lint - Yet Another Perl Source Code Linter
ODP
ANTLR4 and its testing
PDF
Allganize AI seminar - GPT3 and PET
PDF
I didn't know you could do that with groovy
PDF
Learning to Translate with Joey NMT
PDF
Anton Kasyanov, Introduction to Python, Lecture1
PPTX
Multilingual websites - UX Camp Berlin 2012
DOCX
Bca1020 programming in c
PPTX
Python Programming Course
PDF
Lets learn Python !
PDF
Python in 15 minutes
PDF
Difference between c, c++ and java
PPTX
Semana Interop: Trabalhando com IronPython e com Ironruby
PDF
Growing up new PostgreSQL developers (pgcon.org 2018)
Python 101 For The Net Developer
F# for BLOBA, by brandon d'imperio
Arguman
Lessons from Indic OCR Development
Perl::Lint - Yet Another Perl Source Code Linter
ANTLR4 and its testing
Allganize AI seminar - GPT3 and PET
I didn't know you could do that with groovy
Learning to Translate with Joey NMT
Anton Kasyanov, Introduction to Python, Lecture1
Multilingual websites - UX Camp Berlin 2012
Bca1020 programming in c
Python Programming Course
Lets learn Python !
Python in 15 minutes
Difference between c, c++ and java
Semana Interop: Trabalhando com IronPython e com Ironruby
Growing up new PostgreSQL developers (pgcon.org 2018)
Ad

More from Igalia (20)

PDF
Life of a Kernel Bug Fix
PDF
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
PDF
Advancing WebDriver BiDi support in WebKit
PDF
Jumping Over the Garden Wall - WPE WebKit on Android
PDF
Collective Funding, Governance and Prioritiation of Browser Engine Projects
PDF
Don't let your motivation go, save time with kworkflow
PDF
Solving the world’s (localization) problems
PDF
The Whippet Embeddable Garbage Collection Library
PDF
Nobody asks "How is JavaScript?"
PDF
Getting more juice out from your Raspberry Pi GPU
PDF
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
PDF
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
PDF
CSS :has() Unlimited Power
PDF
Device-Generated Commands in Vulkan
PDF
Current state of Lavapipe: Mesa's software renderer for Vulkan
PDF
Vulkan Video is Open: Application showcase
PDF
Scheme on WebAssembly: It is happening!
PDF
EBC - A new backend compiler for etnaviv
PDF
RISC-V LLVM State of the Union
PDF
Device-Generated Commands in Vulkan
Life of a Kernel Bug Fix
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
Advancing WebDriver BiDi support in WebKit
Jumping Over the Garden Wall - WPE WebKit on Android
Collective Funding, Governance and Prioritiation of Browser Engine Projects
Don't let your motivation go, save time with kworkflow
Solving the world’s (localization) problems
The Whippet Embeddable Garbage Collection Library
Nobody asks "How is JavaScript?"
Getting more juice out from your Raspberry Pi GPU
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
CSS :has() Unlimited Power
Device-Generated Commands in Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Vulkan Video is Open: Application showcase
Scheme on WebAssembly: It is happening!
EBC - A new backend compiler for etnaviv
RISC-V LLVM State of the Union
Device-Generated Commands in Vulkan
Ad

Recently uploaded (20)

PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Machine learning based COVID-19 study performance prediction
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Big Data Technologies - Introduction.pptx
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
Cloud computing and distributed systems.
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Chapter 3 Spatial Domain Image Processing.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Machine learning based COVID-19 study performance prediction
Per capita expenditure prediction using model stacking based on satellite ima...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Digital-Transformation-Roadmap-for-Companies.pptx
“AI and Expert System Decision Support & Business Intelligence Systems”
Big Data Technologies - Introduction.pptx
20250228 LYD VKU AI Blended-Learning.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Cloud computing and distributed systems.
Understanding_Digital_Forensics_Presentation.pptx
Programs and apps: productivity, graphics, security and other tools
sap open course for s4hana steps from ECC to s4
Dropbox Q2 2025 Financial Results & Investor Presentation
Network Security Unit 5.pdf for BCA BBA.
Unlocking AI with Model Context Protocol (MCP)
Reach Out and Touch Someone: Haptics and Empathic Computing
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Chapter 3 Spatial Domain Image Processing.pdf

Spelunking through JPEG with Racket (Sixth RacketCon)