magnetiq

Profile picture

Hi! I’m Ateş Göral. I enjoy writing code, tinkering with graphics, experimenting with electronics, and executing ambitious DIY projects.

I’m a self-taught programmer with 25+ years of professional and 35+ years of hobbyist experience. I’m a telco and web veteran with both breadth and depth, spanning multiple programming languages, disciplines, and technologies. I also have an ornamental Associate of Science degree in Molecular Biology and Genetics.

I’m currently working at Shopify on AI stuff (Sidekick).

Past: Orium (Myplanet), Genesys (Alcatel-Lucent, VoiceGenie), PhonoClick, Turk Nokta Net. And a whole bunch of odd jobs.

Jump to: Projects · Blog Posts · Talks

Elsewhere

Projects

Finished (mostly personal) projects in reverse chronological order.

Jump to: 2021 · 2020 · 2018 · 2017 · 2016 · 2015 · 2013 · 2009 · 2005 · 2003 · 2002 · 2000 · 1998 · 1992 · Blog Posts · Talks


2023

IKEA OBEGRÄNSAD Hack

IKEA OBEGRÄNSAD Hack

github.com/atesgoral/obegraensad-hack · 2023

I hacked an IKEA OBEGRÄNSAD LED wall lamp to replace its graphics chip with an ESP32 and wrote some C++, JavaScript and WebAssembly to run my own graphics on it.


2021

Airgap—True Analog Glitching by Transmitting Pixel Data Through Air

Airgap

atesgoral.github.io/airgap · 2021

Can we really get true analog/chaotic glitching with an entirely digital device? Using the screen as a signal source and the camera as a receiver, I experimented with transmitting a digital signal through the air, bouncing off random surfaces.

A source image is scanned pixel-by-pixel and the pixel value is drawn as a large square on the screen, close to where the webcam is. Something reflective (even the palm of a hand works) is cupped around the webcam and where the “signal” square is. After a calibration run, the image is transmitted through the reflector, picking up gnarly analog glitches.


2020

IKEA FREKVENS Hack

IKEA FREKVENS Hack

hackaday.io/project/171034-frekvens-fjrrkontroll · github.com/atesgoral/node-omega-frekvens · 2020

I hacked an IKEA FREKVENS LED cube lamp to replace its graphics chip with an Onion Omega 2+ and wrote some C++, JavaScript to run my own graphics on it.


Binary Versioning

Binary Versioning

binver.org · 2020

A humourous spin on Semantic Versioning. I apparently had too much free time on my hands (and disposable income to buy a new domain).


2018

MIDNIGHT TACTIX 3000

Binary Versioning

github.com/psygnoscapes3000/midnight-tactix-3000 · 2018

A multiplayer turn-based retro racing game we made with my friend Nick Matantsev during Toronto Game Jam (TOJam) 13. Using mobile phones as controllers over time-synched WebSocket connections, with the game rendered in GLSL.


2017

JavaScript Libraries for Mobile Telecommunication Protocols

MILENAGE

2017

While working at Myplanet (now Orium), I had the unique and exciting opportunity to implement major components of a cloud-based iMVNO solution for one of Canada’s largest mobile carriers, subsequently open-sourcing several JavaScript packages with the client’s consent. This endeavor focused on creating critical telecommunication components, bridging both Diameter and SS7/SIGTRAN through a narrow waist of JSON structures.

The project was among the most tangible and satisfying undertakings of my career. The real-time testing involved a physical phone and SIM card, and witnessing a successful registration blip on my real-time React dashboard the moment I inserted the SIM card was consistently thrilling.

The JavaScript libraries I published encapsulate functionality for manipulating Diameter AVPs, encoding/decoding ASN.1 structures, handling 3GPP authentication and key generation, among other tasks.


put.io Starry Night

Starry Night

put.io Starry Night · 2017

This is a canvas-based animation I created to replace a large MP4 movie on the landing page of put.io. The project was a freelance commission by put.io.

I developed a tweakable version for the client to fine-tune the animation to their liking.


Dweet Player

Dweet Player

dweetplayer.net · 2017

Dweet Player is an audiovisual sequencer for dweets (visual effects in 140 characters of JavaScript, in the demoscene spirit).

I love looking at and writing my own dweets. I wanted to string together a bunch of dweets and make them dance to some music. I created Dweet Player to sate that appetite.

Using an esoteric language in the query string, you sequence a bunch of dweets and apply timing and effects, and then specify an audio track. Dweet Player performs real-time beat detection of the audio track to make the dweets dance to the beat by morphing space (trig function outputs) and time (the requestAnimationFrame time stamp), as well applying some post-processing effects.

I gave a talk about this project.


BD1K

BD1K

atesgoral.github.io/bd1k · 2017

A Boulder Dash clone in 1024 bytes of JavaScript (including the sprites from the original game). My contribution to JS1k 2017 - Magic.


2016

Doorbell Ringer—An Intentionally Complex IoT Project

Doorbell Ringer

github.com/atesgoral/doorbell-ringer · github.com/atesgoral/doorbell-nudger · 2016

A very roundabout way of ringing a doorbell through a mixture of: electronics hacking, Onion Omega, Python, Node.js, Twitter streaming API, QR codes, TOTP, Travis CI. A story of learning through self-inflicted problems.

I gave a talk about this project.


2015

Human Resource Machine Solutions

Human Resource Machine Solutions

http://atesgoral.github.io/hrm-solutions · 2015

Human Resource Machine is a fun, little, dark-humoured puzzle game that can either teach you assembly from the ground up, or allow you to apply your existing assembly knowledge in order to devise speed/size-optimized solutions to increasingly challenging problems.

This project started with me publishing my own solutions and then snowballed into a massive collaborative repository of solutions from some 80+ contributors. I’ve never had any of my open-source projects forked and PR’d this much.


Autonomous Cockroach

Autonomous Cockroach

hackaday.io/project/171720-cockroach · github.com/atesgoral/autonomous-cockroach · 2015

This is the very first microcontroller (and IKEA lamp hack) project I did with an Arduino starter kit and (mostly) found parts. A LEGO drivetrain + two motors controlled by an Arduino Uno.


AngularJS Modules

AngularJS Modules

2015

While working at Myplanet (now Orium), I wrote or co-wrote several AngularJS modules that we published as packages. They are all pure CSS & JS and are compatible with IE8+.

I also created their live documentation and demo pages.


2013

#direnturkce

#direnturkce

direnturkce.org · 2013

I have many pet peeves. I created a quick reference page for the most common misspellings in Turkish.


2009

jsUnity

jsUnity.com

jsunity.com capture · github.com/atesgoral/jsunity · 2009

jsUnity is a lightweight, environment-agnostic JavaScript testing framework: It doesn’t rely on any browser capabilities and therefore can be used in any client-side or server-side JavaScript environment.

There were already several unit testing frameworks for JavaScript that were browser-centric. jsUnity aimed to just focus on JavaScript as a language that’s used beyond the browser context, at a time when Node.js was still in its infancy.


2005

browsersize.com

browsersize.com

browsersize.com · 2005

Browser resizing utility to aid in responsive web development.

It needs to be either updated or archived, as modern browsers have become more restrictive regarding the programmatic resizing of windows.


2003

The Unofficial Adobe Color Book File Format Specification

Photoshop Color Picker

Adobe Color Book File Format Specification · 2003

Adobe Photoshop’s Color Picker has a Custom Colors dialog that offers a wide variety of colors from several industry-standard color catalogs such as ANPA, DIC, Focoltone and Pantone. The color catalog data comes from Adobe Color Book files.

Partly out of curiosity and partly because I needed the color data for a job, I went through reverse-engineering the file format since an official file format specification wasn’t readily available. I have put together what I’ve come up with into an unofficial file format specification.


GRAFICA Obscura Experiments

GRAFICA Obscura Experiments

Morphing Depth of Field · Multiple Synthetic Lights · 2003

Two Processing (ported to p5.js) experiments building on GRAFICA Obscura articles by Paul Haeberli.


2002

Burrito

Burrito

Download Burrito 1.0 beta Installer · 2002

With Burrito you can read and manage your e-mails with any FTP client! It acts as a POP3/FTP protocol translator – it’s actually an FTP server that translates FTP commands to POP3 commands and serves your e-mail messages as individual files. You can view, delete and copy your e-mail messages as if they were files on an FTP server.


2000

Twofifty

Twofifty

twofifty.net · 2000

Constraints stoke creativity. In that spirit, this is a showcase of digital art, strictly 250x250 pixels in dimensions, contributed by many different artists. (My own works are published as “MaGnA”.)

Twofifty garnered popularity in the early 2000’s and was featured in several websites and print publications.

I used hidden iframes to inject JavaScript into the parent frame to achieve a SPA (Single Page Application) before AJAX was a thing.

This is a static snapshot of the once PHP+MySQL-powered website.


1998

Win-Res-Q

Win-Res-Q

Download Win-Res-Q 1.0 · 1998

Win-Res-Q (pronounced “win rescue”) is a simple utility that restores (shows) hidden windows. It can be used for bringing back your “lost” applications after their taskbar icons disappear following Explorer crashes that used to frequently occur on Windows 98. It’s also useful for exposing strange, hidden windows lurking around your desktop.


E-Res-Q

E-Res-Q

Download E-Res-Q 1.3 · 1998

E-Res-Q (pronounced “ee rescue”) is a very simple, portable POP3 email reader. It enables you to selectively read and delete messages without having to download them all. It’s ideal for getting rid of large messages that clog up your mailbox or getting rid of spam messages without even downloading them.

This small program has proved very useful back in the times when most of us still had dial-up connections. It’s still a very useful utility for setting up quick access to your POP3 mailbox when you’re temporarily using someone else’s computer. The fact that it doesn’t require installation is a plus. You just download the zip file, extract the binary and run it, punch in your account settings and you’re ready to go!


1992

Bootsector Columns

Bootsector Columns

github.com/atesgoral/bootsector-columns · 1992

A Columns clone in 68000 assembly, for the Atari ST.

My initial intent was to fit it into the bootsector of a floppy disk (without any compression), but I overran the 450 or so free bytes I would have in the bootsector. I therefore ended up adding a bunch of text, graphics, and sound effects; and intentionally overran the limit even further (I went up to a whopping 1832 bytes).

The code could still run from the bootsector with a bit of cheating: I was storing the overrun in the FAT backup and therefore keeping the disk operational until a write operation on the disk would overwrite the FAT backup and screw up the game.


Blog Posts

I don’t have my own blog, but I occasionally write posts for other blogs.


2023

Sidekick’s Improved Streaming Experience

Sidekick

August 1, 2023 · Shopify Engineering Blog

How to improve LLM chatbot UX by utilizing a stateful markdown stream processor.


2017

A JavaScript Interview Question and a Digression into XOR

Find the missing number

April 6, 2017 · HackerNoon

An intriguing JavaScript interview question about finding a missing number in an array of integers without sorting, and the unexpected elegance of a solution utilizing XOR.


Talks

While I’m not a frequent public speaker, I have had the opportunity to present a few talks in the past.


2018

Killing Characters while Making Art

Killing Characters while Making Art

July 25, 2018 · CreateInTO · Slides

A talk about Dwitter, JavaScript golfing, and dweet rendering techniques.


2017

Dweet Player

Dweet Player

October 17, 2017 · Toronto Hack && Tell · Slides

A talk about my Dweet Player project. I won a Raspberry Pi as an audience award.


2016

Unit Testing—The Whys, Whens and Hows

Unit Testing—The Whys, Whens and Hows

October 11, 2016 · Toronto Node.js · Slides

Talking about some best practices for unit testing in Node.js.


Doorbell Ringer—An Intentionally Complex IoT Project

Doorbell Ringer

June 7, 2016 · Toronto Hack && Tell · Slides

A talk about my Doorbell Ringer project. I won a Raspberry Pi as an audience award.


2014

Backend-less UI Development using Demock

Backend-less UI Development using Demock

March 16, 2014 · jQueryTO · Slides

A technique to transform any static web server into a simulated backend, capable of emulating various HTTP methods, generating different HTTP response codes, and mimicking latency.