Welcome to Svetlana's Systems Engineering Portfolio
Click on the disco balls to explore my projects!
Streaming Media Server
Icecast is a streaming media server that supports Ogg Vorbis, Opus, WebM, and MP3 audio formats. It's commonly used for internet radio streaming.
In this project, I set up an Icecast server on our Orange Pi to stream audio content across the network.
You can also view this video on my EngStube channel:
Note Gallery
This project involved creating artistic representations of musical notes and concepts.
These artistic notes explore the intersection of music, mathematics, and visual art in systems engineering.
Circuit Simulation & Digital Circuit Design
QUCS (Quite Universal Circuit Simulator) is an integrated circuit simulator with a graphical user interface.
TkGate is a digital circuit editor and simulator.
View my QUCS video on my EngStube channel:
https://engstube.aua.am/w/areiTAFrp6zGTgvu77ss56
Note: TkGate assignment was not completed due to application crashes during simulation attempts.
Cellular Automaton Simulation
Conway's Game of Life is a cellular automaton devised by mathematician John Conway. It's a zero-player game that evolves based on initial conditions.
Rules:
Click on cells to toggle them between alive and dead states.
Implementing Factorial in Multiple Languages
This project involved implementing the factorial algorithm in multiple programming languages to compare syntax, performance, and expressiveness.
Videos of factorial implementations:
JavaScript Factorial
Python Factorial
C++ Factorial
Also available: Lua, TCL implementations (videos in hakobyan_svetlana/systems_engineering directory)
You can also view these videos and a video explaining Lisp factorial on my EngStube channel:
https://engstube.aua.am/w/rQazbjaioCu65YAubHBh9x
Related document: OS_ComputerArchitecture_draft1.pdf
Creative Coding & Visual Art
Demoscenes are computer art productions that combine music, code, and visuals in real-time.
View my demoscene videos on EngStube:
(defun starfield ()
(let* ((w 80) (h 24) ;; terminal size
(stars (loop repeat 100 collect
(list (random w) (random h)))))
(loop
(progn
;; clear screen
(format t "~c[2J~c[H" #\Esc #\Esc)
;; draw stars
(dotimes (y h)
(dotimes (x w)
(if (find (list x y) stars :test #'equal)
(write-char #\*)
(write-char #\Space)))
(terpri))
;; move stars "down"
(setf stars (mapcar (lambda (s)
(destructuring-bind (x y) s
(list x (mod (+ y 1) h))))
stars))
(sleep 0.05)))))
(starfield)
#!/usr/bin/sbcl --script
;; Simple swimming fish ASCII demo — no libraries
(defun fish-demo ()
(let* ((w 80) (h 24) (n 8)
(tau 6.283185307179586)
(shapes-r '("><>" ">))>" ">)))>"))
(shapes-l '("<><" "<((" "<((("))
(fishes
(loop repeat n collect
(let* ((dx (if (< (random 2) 1) 1 -1))
(shape (if (= dx 1)
(nth (random (length shapes-r)) shapes-r)
(nth (random (length shapes-l)) shapes-l)))
(x (random (float w)))
(by (+ 2 (random (- h 4))))
(phase (random tau))
(speed (+ 0.2 (random 0.6))))
(list x by dx shape phase speed)))))
(loop
;; clear screen
(format t "~c[2J~c[H" #\Esc #\Esc)
;; draw rows
(dotimes (row h)
(let ((line (make-string w :initial-element #\Space)))
(dolist (fish fishes)
(destructuring-bind (fx by dx shape phase speed) fish
(let* ((len (length shape))
(xpos (truncate fx))
(ypos (+ by (truncate (* 1.5 (sin phase)))))
(ypos (max 0 (min (1- h) ypos))))
(when (= ypos row)
(dotimes (i len)
(let ((p (+ xpos i)))
(when (and (>= p 0) (< p w))
(setf (schar line p) (char shape i)))))))))
(write-line line)))
;; update fish positions and phases, wrap around edges
(dolist (fish fishes)
(let ((fx (nth 0 fish)) (dx (nth 2 fish)) (phase (nth 4 fish))
(speed (nth 5 fish)) (shape (nth 3 fish)))
(setf (nth 0 fish) (+ fx (* dx speed)))
(setf (nth 4 fish) (+ phase (* 0.3 speed)))
(let ((len (length shape)))
(when (> (nth 0 fish) w) (setf (nth 0 fish) (- len)))
(when (< (nth 0 fish) (- len)) (setf (nth 0 fish) w)))))
(sleep 0.08))))
(fish-demo)
// piano1octave.cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
const int WIDTH = 700;
const int HEIGHT = 200;
// Explicit frequencies for first octave
struct Key {
int x, y, width, height;
double freq;
bool isBlack;
};
std::vector createKeys() {
std::vector keys;
int whiteWidth = WIDTH / 7;
int blackWidth = whiteWidth / 2;
// White keys
keys.push_back({0*whiteWidth,0,whiteWidth,HEIGHT,261.63,false}); // C
keys.push_back({1*whiteWidth,0,whiteWidth,HEIGHT,293.66,false}); // D
keys.push_back({2*whiteWidth,0,whiteWidth,HEIGHT,329.63,false}); // E
keys.push_back({3*whiteWidth,0,whiteWidth,HEIGHT,349.23,false}); // F
keys.push_back({4*whiteWidth,0,whiteWidth,HEIGHT,392.00,false}); // G
keys.push_back({5*whiteWidth,0,whiteWidth,HEIGHT,440.00,false}); // A
keys.push_back({6*whiteWidth,0,whiteWidth,HEIGHT,493.88,false}); // B
// Black keys
keys.push_back({0*whiteWidth + 3*whiteWidth/4,0,blackWidth,HEIGHT/2,277.18,true}); // C#
keys.push_back({1*whiteWidth + 3*whiteWidth/4,0,blackWidth,HEIGHT/2,311.13,true}); // D#
keys.push_back({3*whiteWidth + 3*whiteWidth/4,0,blackWidth,HEIGHT/2,369.99,true}); // F#
keys.push_back({4*whiteWidth + 3*whiteWidth/4,0,blackWidth,HEIGHT/2,415.30,true}); // G#
keys.push_back({5*whiteWidth + 3*whiteWidth/4,0,blackWidth,HEIGHT/2,466.16,true}); // A#
return keys;
}
// Generate sine wave with smoother envelope
std::vector generateSine(double freq, double duration_sec = 0.5) {
int sampleRate = 44100;
int nSamples = int(duration_sec * sampleRate);
std::vector buffer(nSamples);
for(int i=0;i keys = createKeys();
XEvent event;
while(true) {
XNextEvent(display,&event);
if(event.type==ButtonPress) {
int mx=event.xbutton.x, my=event.xbutton.y;
// Black keys first
for(auto it=keys.rbegin(); it!=keys.rend(); ++it) {
Key &k = *it;
if(mx>=k.x && mx<=k.x+k.width && my>=k.y && my<=k.y+k.height) {
auto buf = generateSine(k.freq);
write(dsp, buf.data(), buf.size()*sizeof(short));
break;
}
}
} else if(event.type==Expose) {
// Draw keys
for(auto &k: keys) {
if(k.isBlack) XSetForeground(display,gc,BlackPixel(display,screen));
else XSetForeground(display,gc,WhitePixel(display,screen));
XFillRectangle(display,win,gc,k.x,k.y,k.width,k.height);
XSetForeground(display,gc,BlackPixel(display,screen));
XDrawRectangle(display,win,gc,k.x,k.y,k.width,k.height);
}
}
}
close(dsp);
XCloseDisplay(display);
return 0;
}
Systems Engineering Writings
This essay explores the fundamental concepts and importance of systems engineering in modern technology development.
An analysis of operating systems and computer architecture principles.
Systems Engineering Industry Analysis
This matrix analyzes different industries and their relationship to systems engineering principles, tools, and methodologies.
matrix.png not found in current directory.
Make sure the file is located in hakobyan_svetlana/
The matrix examines sectors such as aerospace, automotive, healthcare, and software development, highlighting how systems engineering principles apply across different domains.
You are here!
This website is hosted on our class's shared Orange Pi single-board computer.
SSH Access: hakobyan_svetlana
The Orange Pi is running this HTML file directly from the home directory, demonstrating how simple web content can be served without a full web server.
This environment allows us to experiment with systems engineering concepts, networking, and embedded systems development.
🍊 You're currently accessing this site from the Orange Pi! 🍊
Participation & Access
Active participation in the systems engineering community helps build practical skills and professional networks.