This is a prototype made for Pharo GSOC application.
# 🎧 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. ```