Personal Projects

From art to tools to systems - evolving from meaning-making to operation and futures speculation.

1

Artistic Projects

Material traditions as computation; present-day critiques; hybrid poem/code artiefact synthesis.

mosaic.aa - culture as communication

Cultural artefacts communicate: what is made - along with the temporal, material, social, economic, geographic and historical conditions encoded within - transmits facets of past human experience. This communicative power became the catalyst for this project: from a 32×32 grid emerged the seed of a pattern-as-program, where rule-based tessellations and interactive motifs make reflect culture's transmissive mode.

Context

This work originated from a Compiler workshop held at the Women’s Museum, part of an ongoing exhibition series exploring code, pattern, and material culture.

The prompt was deceptively simple: a 32×32 grid inspired by Palestinian Tatreez embroidery. From there, I began to imagine the processes behind such patterns - the collective skills, resources and motivations that converged to create them. What kinds of implicit and explicit coordination lay beneath these acts of making?

In parallel, I considered the mechanics of weaving itself: how the logic of warp and weft anticipates computation. The Jacquard loom and Babbage’s analytical engine revealed a shared lineage of encoded instruction, where threads and punch cards both functioned as programs of material execution.

The resulting pattern sought to close this loop - translating that reflection into a visual form that describes a process of transmission, both cultural and computational. A pattern that generates itself.

How to interact

  • Follow the link below to open the puzzle.
  • Press Help to learn more; press Start to initiate.
  • You'll first be prompted to create two seed patterns.
  • These will be reflected and used as input for the pattern generation algorithm.
  • The console below will show progress; the goal is to get each step to light up green for success.
  • Check the logs to review how you did.
Open mosaic.aa
mosaic.aa scanned original

Visual references

Traditions and ideas this draws from.

mosaic.aa — How it works

Each corner pair acts as a source and a target. The band between them is a transmission protocol that explains how to get from the start pattern to the end pattern.

  1. Structure: the protocol has three parts: a header, the translation area, and a footer.
    • Header captures the parts of the start pattern that must move.
    • Footer captures the places those parts must occupy to match the end pattern.
    • Anything the start and end already share is omitted here - it doesn’t need to move.
  2. Translation grid: the instructions live in a fixed 4 × 8 area, split into 4 steps. Each step uses 2 lines (each line is 4 cells wide).
    • Line 1 (address): a 4-bit binary counter that points to a specific segment of the header (segments are made by horizontal/vertical or diagonal cuts).
    • Line 2 (movement): tells how that segment moves to line up with the footer. Each of the 4 cells encodes a direction (U, R, L, D).
  3. Movement types: the movement line can express three kinds of translations:
    • Single-direction: move the whole segment up/right/left/down.
    • Combined orthogonals: move the whole segment by a sum of two directions (e.g, up + right).
    • Bifurcation: split the segment and send copies along two orthogonal directions - one step each.
  4. Execution: for each addressed segment, apply its movement; the algorithm checks whether the moved segment matches the footer position.
    • Pass → the console prints a green success message.
    • Fail → the console prints a red message.
  5. Margins first: the protocol runs along all margins (each corner pair) to establish the transmissions at the edges.
  6. Interior logic: the remaining interior is built with simple logical reductions on 4‑cell‑wide signals.
    • OR and AND gates condense 4‑wide to 2‑wide, and then to 1‑wide streams.
    • These govern intermediate corner patterns and how signals meet.
  7. Center: the final central motif is a convolution of all the computed transmissions from the margins.

Help password

The in‑app Help panel currently expects the password: recursion Password: recursion

Collages - present-day commentaries

Material experiments exploring society, environment and identity. Presented compactly by series.

Risograph

2 stencils → final print

Created during a workshop at Rabbits Road Press at Old Manor Park Library, this Riso print emerged from an introduction to the medium’s distinctive layering process. The piece became an exploration of composition and broader typographic/design motifs.

Risograph stencil A Risograph A+B overlay
Risograph stencil B Risograph final print

Sexual Misinformation

single-page

Conceived as a design-as-research response to online sexual misinformation, this work reflects on the ways identity and gender are shaped, objectified and mediated through image and discourse.

Sexual Misinformation — single-page composition

Environmental Postcard

portrait + landscape

Created during a postcard-making workshop themed around sustainability, this piece pairs a visual composition with a collage-poem on the reverse. The image side seeks to capture the sublime in shifting contexts - natural, emotional and constructed - while the text evokes the confusion and fray of human activity in the wake of climate disruption.

Front

Press Enter or Space to expand the portrait front. Press Escape or click outside to close.

Reverse

Press Enter or Space to expand the landscape side. Press Escape or click outside to close.

"Barking Revelation" Poem - cyber-physical text

A single printed page produced through a computational pipeline, where humanist meaning meets executable composition.

Context, references & foundations

Commissioned through ongoing collaborations within the local community, this poem was conceived in response to The Barking Revival - a centenary reflection on a moment of spiritual and civic awakening in Barking’s history. The work reinterprets this through a contemporary lens: a meditation on the undercurrents of faith, belonging and civilisation’s growing interdependence with technology.

  • Local context and poetic traditions (Barking & Dagenham; river, history, faith)
  • Concrete & visual poetry lineages and typographic experimentation
  • Cartographic / GIS symbolism & chorography
  • Computational poetics: constraint, omission, weighting and generative systems
  • Ethics of depiction & authorship in hybrid human–machine collaboration

Artistic & philosophical framing

The composition draws from a wide lattice of influences - from the recursive systems of Borges and the constraint-driven poetics of Oulipo, to the procedural and typographic experiments of Strachey, bpNichol and Nick Montfort. It extends these traditions into the spatial and computational: cartographic data, typographic form and shader fields act as co-equal poetic devices, through which meaning is negotiated between geographic reference, textual fragment and algorithmic obfuscation.

Beneath this lies a deeper reflection on the hidden systems that structure our world - the infrastructures, algorithms and ideologies that quietly govern daily life while remaining largely unseen. What does it mean to hold a worldview shaped by forces we cannot fully perceive? In tracing these entanglements, the work questions the balance between pragmatism and knowledge - where reason, ethics and morality no longer appear as fixed constructs but as mutable, co-emergent logics within a living, evolving system.

Technical construction

1) GIS data extraction & structuring

  • Layers & tags: OSM water edges (waterway | natural:water | water), places of worship (amenity=place_of_worship), heritage/museums/ruins (historic | heritage | tourism=museum | ruins | archaeological_site), plus GLA planning apps (major dwellings + unit counts via Elastic API).
  • Normalization: water polygons → outlines; POIs → representative label point; planning footprints can be unioned/simplified when needed.
  • Frame & mapper: one global lon/lat bbox from AREA_NAME; affine map into a fixed PDF inner rect (Px0,Py0, Px1,Py1 = 50,120, 560,720; origin top‑left).
  • Projection note: degrees‑space box fit for visual consistency (ok at this scale). Use projected CRS upstream only if metric accuracy is required.
  • Outputs: PostScript arrays for paths and markers, plus optional label draw calls - consistent page‑space alignment across all layers.
  • Planning polygons: clean in meters (e.g., EPSG:3857), union/simplify/collapse touching; export outer rings as PS arrays or components.
# mapper(lon,lat):
# x = Px0 + (lon - xmin) * (Px1 - Px0) / (xmax - xmin)
# y = Py0 + (lat - ymin) * (Py1 - Py0) / (ymax - ymin)
# PS forms: paths → "[ x0 y0 x1 y1 ... ]"; labels → "(Name) x y T"

2) Shader - extruded elliptical ring raycaster

  • Object: a block torus (annulus with elliptical inner/outer edges) extruded to height h; surfaces are OUTER wall, INNER wall, TOP cap (z=+h/2), BOTTOM cap (z=-h/2).
  • Frames: keep math simple in object space (axis‑aligned ellipses). World→object via R_obj^T for points and directions.
  • Camera: look‑at basis from cam_pos/target/up. For each pixel, form a ray using fov_y and aspect; transform to object space.
  • Intersections: solve quadratic for elliptical cylinders with z window; intersect planes for caps and accept only points in annulus (inside outer AND outside inner). Keep nearest positive t and record label (outer|inner|top|bottom).
  • Shading: discrete tones per label (e.g., TOP/BOTTOM=210, OUTER/INNER=90); background 0. No continuous lighting.
// per pixel
// 1) build world ray (px,py from NDC, fov_y, aspect) -> dir_w
// 2) transform to object space: o_obj, d_obj
// 3) hit tests:
//    - outer/inner elliptical cylinders: (x^2/a^2 + y^2/b^2 = 1) with z in [-h/2, +h/2]
//    - top/bottom planes: z = ±h/2 with annulus test (inside outer AND outside inner)
// 4) choose nearest valid t, write fixed gray by label; else 0

3) Axes construction & projection

  • Define a 3D axonometric frame (X,Y,Z) and project to page; positive axes drawn solid, negative axes dashed.
  • Words carry normalized 3D coords (each axis ∈ [0..1]) → remapped to a centered cube [−1..1] for projection.
  • Depth key for painter’s sorting: depth = y' − z' + x' (hand‑tuned linear combo) to draw far → near.
  • Axis labels placed just past ±1 with simple centering via stringwidth.
  • Key params: PageCenterX/PageCenterY, AxisSize, AngleX/AngleZ (with precomputed Sin/Cos).
% Params
/PageCenterX 160 def /PageCenterY 600 def
/AxisSize 100 def
/AngleX 30 def /AngleZ 30 def
/SinX AngleX sin def /CosX AngleX cos def
/SinZ AngleZ sin def /CosZ AngleZ cos def

% Axonometric projection: (x,y,z)∈[−1..1] → (Xp,Yp) page
/ProjAxon {      % x y z -> Xp Yp
  3 dict begin
    /z exch def /y exch def /x exch def
    /xp x CosX mul z CosZ mul sub def
    /yp y x SinX mul add z SinZ mul add def
    PageCenterX xp AxisSize mul add
    PageCenterY yp AxisSize mul add
  end
} def

% Remap & depth (conceptual, done when building WordList)
% x' = 2*x - 1; y' = 2*y - 1; z' = 2*z - 1
% depth = y' - z' + x'

% Axes: positive solid, negative dashed
0.7 setlinewidth 0.65 setgray [] 0 setdash
0 0 0 ProjAxon moveto  1 0 0 ProjAxon lineto
0 0 0 ProjAxon moveto  0 1 0 ProjAxon lineto
0 0 0 ProjAxon moveto  0 0 1 ProjAxon lineto
stroke
[2 4] 0 setdash
0 0 0 ProjAxon moveto -1 0 0 ProjAxon lineto
0 0 0 ProjAxon moveto  0 -1 0 ProjAxon lineto
0 0 0 ProjAxon moveto  0  0 -1 ProjAxon lineto
stroke

% Labels (examples)
1.05 0 0 ProjAxon moveto (future) show
-1.05 0 0 ProjAxon moveto (past) stringwidth pop neg 0 rmoveto (past) show
Hexadecimal decoder

Output

(decoded text will appear here)

Barking Poem — PDF

Loading preview when visible…

2

Personal Tooling - Festival Itinerary Engine

Compiling Open House and London Design Festival events into actionable itineraries, end-to-end from data mining to optimsied routes in calender.

Step 1 / 6
Loading map…

1. Inventory

I started by compiling all the events that passed the initial checks for inclusion across both festivals.

Open House:484LDF:153Total:637
Inventory – All Considered Events

Related work: CASA (network analysis, simulation), IG12 (cultural data models, mapping).

3

Institutional Systems and Futures

Bringing together threads of art, research and systems design - toward new architectures of knowledge, culture and place.

Preview: a shifting wall from my personal archive - memories from past events, organisations engaged with and people met.

Archive wall interactive panel layout