rolisz's site

How to organize a wedding - in 20 easy steps

Roda and Roland wedding

So you decided to get married. You need a wedding for that. It's a lot of work. Given that I just got married two weeks ago, I'll try to jot down some step-by-step in­struc­tions (with par­tic­u­lars about Romanian bu­reau­cra­cy).

  1. Find a partner who is willing to say "Yes". Trivial exercise, left as homework for the reader.
  2. Decide on the style of wedding. Do you want a fancy, shiny, super modern wedding in the middle of the city? Do you want something in nature, far from civ­i­liza­tion? Do you want a smaller, cozier wedding? Do you want to invite continue.

How to make a selfie time-lapse video

Mostly for future self reference, but also in case somebody else wants to do something similar, I'll write down the steps I took to do my selfie time lapse video.

First step: take daily pictures. I recommend about 0.3-0.5 seconds per picture in the slideshow and you want to have at least 30 seconds of video, so that means at least 60-90 photos. Pro-tip: do them in as similar way as possible every day. Especially the distance to the camera is important. You'll thank me soon enough.

After you gathered all your pictures together, you want to align them. I did this in GIMP. You open the program continue.

Tutorial Camelot

Nu sunt Arthur sau Merlin, așa că nu voi vorbi despre orașul Camelot, ci despre frame­workul Python, care îi pretty much everything but the kitchen sink.

Cum tutorialul acesta este mai mult pentru colegii de grupă cu care lucrăm la proiect colectiv, voi presupune că este deja instalat Camelot.

Proiectul pe care îl vom crea este o mică chestie pe care eu vreau s-o fac de mai mult timp, și aceasta este opor­tu­ni­tatea perfectă: vom face un program cu care să pot urmări când se întâmplă anumite lucruri, în speranța ca mai încolo să pot extrage informații utile din când se întâmplă acele lucruri. Ce am de gând să măsor continue.

Git tutorial - part 2

Acest tutorial e mai mult pentru colegii de grupă cu care voi lucra la Proiect Colectiv

Prima parte am scris-o mai demult, dar nu îi bai, că nu s-o schimbat multe la Git de atunci :)))

În prima parte am configurat Git-ul, am creat un proiect nou, cu un fișier .gitignore și am făcut primul commit. În cei doi ani care au trecut de atunci ne-am dat seama că la primul commit am greșit două chestii: mai trebuia inclus fișierul config.txt și trebuia să dăm un mesaj de commit mai detaliat.

> git status
# On branch master
# Untracked files:
#   (use "git add ..." to include in what will 
continue.

Grafice cu d3.js - part 2

Data trecută am făcut un barchart simplu, care să poată fi sortat. Acum, să îl complicăm un pic: vrem să prezentăm un set de date, care este împărțit pe mai multe grupe, datele având mai multe dimensiuni. Vrem să vedem cum se compară grupele diferite la diferite dimensiuni. Vom reprezenta datele din fiecare dimensiune în câte un barchart, separat pentru fiecare grupă sau mai multe împreună, schimbarea făcându-se alegând grupele care să apară. Când schimbăm în cadrul aceleiași grupe, indivizii vor avea per­sis­tență, adică car­ac­ter­is­ti­ca din a doua dimensiune va fi reprezen­tată în locul unde a fost reprezen­tată car­ac­ter­is­ti­ca core­spun­ză­toare primei dimensiuni.

În HTML vom pune butoanele pentru sortare și continue.

Grafice cu d3.js - part 1

Anul trecut am făcut graficele cu notele din sesiune în R. Au fost super simplu de făcut, mai am scrip­turile de generare, și probabil aș putea să le refolosesc și să termin cu toată treaba în 5 minute. Dar... arată un pic cam nașpa. Liniile nu au an­tialias­ing, culorile sunt cam stridente și, cel mai important, sunt statice, nu se poate in­ter­acționa cu ele.

Așa că am decis ca anul acesta să le refac în d3.js, care îi la modă acuma pentru vizual­izări de date. După cum sugerează și numele, acesta este o librărie Javascript care se folosește la ma­nip­u­larea doc­u­mentelor în funcția de datele pe care le avem. Se bazează pe HTML5, continue.

Tutorial LISP

E acea vreme a anului când am chef de a face tutoriale. Cum colegii mei înjură cel mai mult PLF, voi face un tutorial cu care să îi ajut la această materie: tutorial de LISP.

Cum nu am chef să rezolv mai multe probleme simpluțe de pe siteul profei, voi face una singură, dar mai complexă: voi implementa Conway's Game of Life, fără UI desigur, că de-aia nu îs masochist.

Ce este Conway's Game of Life? Citiți pe Wikipedia.

Începem prin a ne defini trei funcții ajutătoare:

(defun multime(l)     (cond         ((null l) nil)     
continue.

Tutorial awk

La materia SO[1. Sisteme de operare] învățăm printre altele Unix, unelte Unix și avem și teme cu anumite scripturi. Printre altele, sed, grep și awk. La primele două nu am fost pe fază și nu am scris tutorial, dar voi încerca să explic un pic awk acuma (pentru că există greșeli în doc­u­men­tația pe care ne-a dat-o proful).

Awk este un limbaj de scripting spe­cial­izat pe pre­lu­crarea datelor de tip text. Awk consideră un fișier ca fiind format din în­reg­istrări (delimitate prin ’n’, adică linie nouă Unix-style, dar se poate schimba), iar fiecare în­reg­is­trare are câmpuri, care sunt delimitate prin spațiu deobicei (dar se poate schimba aceasta). Un program continue.

Instalare Linux pe mașină virtuală

Cum la SO [1. Sisteme de operare, Cătă dragă ], mare parte din timp vom lucra în Linux, vom avea nevoie de el instalat pe cal­cu­la­toare. O opțiune ar fi să instalăm pe o partiție separată și să facem dual-boot. Cum nu toți pot face asta (coughno driverscoughNVidia Optimuscough) sau nu toți au chef (ma­jori­tatea colegilor mei) sau și-au aranjat deja partiția de Windows încercând să facă asta, o să prezint o altă metodă, care este destul de bună în ma­jori­tatea cazurilor: instalarea pe o mașină virtuală. Aceasta va fi suficientă pentru a învăța chestiile de care avem nevoie, dar dacă cineva vrea să se ocupe de low-latency audio continue.

Simplu calculator în Python - partea 3

Acest post face parte dintr-o serie în care eu fac un mic calculator în Python.

Data trecută am construit arborele sintactic core­spun­ză­tor expresiei, iar acuma îl vom evalua. Aceasta este mult mai simplu decât parsarea, așa că hai să scăpăm. În final vom face apoi un REPL (read, evaluate, print loop), deci vom face o „consola” pentru cal­cu­la­torul nostru. Aceasta este utilă pentru a putea beneficia de atribuirea de valori, că altfel ele se pierd după fiecare execuție.

Să începem cu testele:

from interpreter import interpreter
from tokenizer import Tokenizer
from tree import parseTree

pT = parseTree()
tok = Tokenizer()
interp = interpreter()
Tree = pT.buildParseTree(tok.tokenize("1+2"))
assert(interp.evaluate(Tree) == 3)
Tree = pT.buildParseTree(tok.tokenize("(5+(2\*3+2))-3\*((5+6)/2-4)"))
assert(interp.evaluate(Tree) == 8.5)
Tree = pT.buildParseTree(tok.tokenize("x = 2"))
assert(interp.evaluate(Tree) 
continue.