pharo-DJ-prototype

Description

This is a prototype made for Pharo GSOC application.

Details

Source
GitHub
Dialect
pharo (25% confidence)
Created
March 31, 2026
Updated
April 1, 2026

README excerpt

# 🎧 Phaust Neon DJ Console

A high-performance, animated DJ interface built using **Pharo 12** and the **Bloc** graphical framework. Developed on **Arch Linux**, this project demonstrates a clean **MVC (Model-View-Controller)** architecture and custom hardware abstraction for real-time audio simulation.

<img width="1919" height="1067" alt="image" src="https://github.com/user-attachments/assets/7ab8ff57-bdc0-4f59-845e-9908efd0e809" />


## ✨ Features

* **Neon Aesthetic:** High-contrast "Cyberpunk" UI featuring Cyan and Magenta themes with translucent layers.
* **Animated Platters:** Smooth, 60fps rotating "neon trails" powered by the Bloc Task API (bypassing standard animation overhead).
* **Responsive Layout:** Fully adaptive design using `BlLinearLayout` and `BlFrameLayout` that scales to any window size.
* **Hardware Abstraction Layer:** A robust Mock Engine that simulates DSP (Digital Signal Processing) output via the Pharo Transcript.

## 🛠️ Tech Stack

* **Language:** Smalltalk (Pharo 12)
* **Framework:** Bloc (Low-level vector graphics)
* **OS:** Arch Linux (Rolling Release)
* **Pattern:** Model-View-Controller (MVC)

## 🚀 How to Run

1.  Open a fresh **Pharo 12** image.
2.  Open the **Playground** (**Ctrl + O + W**).
3.  Paste the **God Script** (found in `dj_script.st`).
4.  Highlight all and hit **Ctrl + D**.
5.  Watch the neon console come to life!

## 🧠 The Development Journey (The Arch Struggle)

This project was a deep dive into the "trenches" of system-level integration. Key challenges overcome include:
* **FFI Troubleshooting:** Managing `.so` library links between Arch Linux and the Pharo VM.
* **Dynamic UI Engineering:** Moving from static layouts to an animated, task-based UI thread for better performance.
* **Dependency Management:** Engineering a custom Mock Engine when native ALSA/PipeWire drivers encountered concurrency locks.

To run this execute in playground :
```
| myEngine myUI space |
myEngine := DJEngine new.
myUI := DJInterface new.
myUI engine: myEngine.

space := BlSpace new.
space title: 'Neon DJ Console'.
space extent: 1024@600.
space root addChild: myUI.
space show.
```
← Back to results