Echo server in Elixir used in a CI/CD Pipeline

This project was used during an internship workshop. The Elixir code (the echo server) was not written by me. I only added the unit tests.

You can go through the workshop and learn how to

  • create a local Jenkins server with Docker
  • spin a few virtual machines (with Hyper-V or VirtualBox) with Docker machine
  • create a Docker Swarm with those virtual machines
  • connect Jenkins to the Swarm
  • create a pipeline to build, test and deploy the echo server in the Swarm

The code and its documentation can be seen in

more ...

Chef & AWS OpsWorks Workshops

Since I've used Chef a lot, especially with AWS OpsWorks, I've had the chance of presenting this setup.

In 2015, during a MeetMagento event, I showed this presentation, followed by a workshop. The code can be seen on GitHub and it uses Chef in order to spin up an AWS OpsWorks stack and deploy a PHP application on it

In 2017, during an event called Rise of the DevOps, I delivered a similar presentation that did kinda the same thing. Here's the code.

more ...

Rezolvarea cubului Rubik

I. Introducere şi motivaţie

Salut şi bine ai venit pe pagina aceasta. Mi-am propus să îţi arat aici o metodă de rezolvare a cubului Rubik. “De ce-ai face una ca asta?”, ar putea întreba cineva. Păi hai să studiem puţin acest cub, ca să vezi câteva motive.

A fost inventat în 1974 de Ernő Rubik, un sculptor şi arhitect ungur. Este considerată cea mai bine vândută jucărie din lume, fiind cunoscut şi sub denumirea “cubul magic”. După unele statistici 1 din 4 oameni s-a “jucat” cel puţin o dată cu un cub Rubik. Şi cu siguranţă fiecare om care s-a jucat vreodată cu el (cubul, nu cu el însuşi!) a vrut să ştie să-l rezolve.

Din păcate documentaţie de calitate, în limba română, nu există. Cea în engleză e de multe ori confuză, incompletă sau greu de găsit. În plus, pentru copii, documentaţia în limba engleză e foarte greu de înţeles.

Sper ca ce scriu mai jos, să fie pe înţelesul tuturor. Metoda de rezolvare pe care o expun aici e o “compilaţie” din mai multe metode pe care le-am studiat. E logică şi uşor de reţinut, dar nu e foarte rapidă.

Ca să-ţi fie mai uşor, am creat şi filmuleţe pentru fiecare pas în parte. Întregul playlist poate fi găsit aici.

Să-i dăm drumul!

II. Noţiuni de bază

În cele ce urmează vom lucra cu un cub standard (3×3x3). Acest cub are:

  • 6 feţe, fiecare de altă culoare. Le vom nota cu câte o literă, aşa cum sunt notate ele în documentaţia de specialitate:
    • U – faţa de sus (upper face)
    • D – faţa de jos (down face)
    • R – faţa din dreapta (right face)
    • L – faţa din stânga (left face)
    • F – faţa din... faţă... dinspre tine (front face)
    • B – faţa din spate (back face)

Evident, orice faţă poate fi cea de sus, sau cea din dreapta. Dar o dată ce ai început să rezolvi cubul şi ai ales ca faţa albă să fie cea de sus şi cea verde cea din dreapta, nu le mai schimba! Nu roti cubul în mână în timp ce îl rezolvi. E cea mai comună greşeală şi totodată cea mai gravă pentru că uiţi secvenţa de mutări pe care trebuie să o faci!

Cu orice faţă se pot face 3 tipuri de rotiri: o rotire în sensul acelor de ceas, o rotire în sens opus acelor de ceas (sens trigonometric, cum se numeşte în geometrie) şi o rotire dublă (nu contează sensul). De exemplu, pentru faţa U, sensul acelor de ceas se notează U, sensul trigonometric U’ iar rotirea dublă se notează U². Cum se determină sensul corect pentru o faţă? Simplu: priveşti faţa respectivă în mod “natural”, centrul cubului aflându-se în spatele ei. Deci pentru a determina sensul invers acelor de ceasornic pentru faţa B, pentru câteva secunde vei întoarce cubul cu faţa B la tine (faţa F e acum în locul feţei B) şi o vei roti spre stânga, apoi vei întoarce cubul în poziţia iniţială (dacă am decis la început că faţa …

more ...

ToXic Chat

ToXic Chat was a project I started in highschool (December of 2003) with Dragoș Bucevschi. The idea was to create a cross-platform (Windows and Linux), peer-to-peer (no dependency on a specific server), reliable (TCP) chat system.

Initial implementation was done in Delphi (Windows) and Kylix (Linux) and in 2005 I rewrote it in C++/Qt but I discontinued the project.

Version history:

  • 10th of May 2004 - 0.0.1
  • 23rd of May 2004 - 0.1.0
  • 30th of August 2004 - 0.2.0
  • 1st of September 2004 - 0.2.1
  • 16th of July 2005 - 0.4
  • 25th of December 2006 - 0.5 alpha1 - this was the version in C++/Qt but I discontinued the project.

The source code, binaries, installers and screenshots can be found on Sourceforge:

more ...

QPdf2Swf

QPdf2Swf is a GUI (graphical user interface) written in Qt4 for pdf2swf, a pdf to swf converter. It was a demo that I wrote in a few hours for an interview at a company wanting to convert PDF presentation catalogs and render Flash pages from them. Flash websites were a thing in 2005 :)

I didn't get the job so I published the code online but didn't maintain it. You can view it on Sourceforge. It is cross platform and should run on both Windows and Linux (probably even Mac OS, but I didn't test)

Version history:

  • October 2005 - unreleased version, written in Qt 4.0
  • 31st of October 2006 - 0.1, the version I released, refactored in Qt 4.2
more ...

Cărămida Verde

Cărămida Verde a fost o revistă-pamflet scrisă în liceu. A avut 8 numere și un manifest.

Echipa permanentă era formată din:

  • 4 redactori şefi: Syl (eu), BOGGHY (Bogdan Bucevschi), m0|3 (Andrei Şanta) şi v|v (Viorel Dram)
  • 1 jurnalist (şi el şef într-un fel): GhostD (Dragoş Bucevschi)
  • 1 badigard (nu era şef, dar e clar că era cel mai tare): tony (Ovidiu Căldare)

Sediul Institutului şi al Trustului nostru de presă era format din ultimele bănci de pe rândul de la perete.

more ...