Transpiling C into Brainfuck

Just so that I don't link to this randomly in the middle of the post, the project I will be talking about can be viewed on GitHub, and you can download the thesis (it's in Serbian, sorry) here.

Back in university (which, scarily enough, was roughly 10 years ago), a few other students and myself were introduced to the glorious programming language under the name of Brainfuck. In case you are not familiar with it, Brainfuck is an esoteric language (which Google further describes as "intended for or likely to be understood by only a small number of people with a specialized knowledge or interest") consisting of only 8 very simple command, yet one that is Turing-complete. To give you a brief example, this is what a "Hello, World!" program looks like in Brainfuck.

++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.

As you can see, it's pretty messed up and near-impossible to understand. But, before I go off on a tangent, let me continue with my story.

Even though Brainfuck didn't have any real use, one of my friends and I kept toying with the idea of applying it in some situation, just for the challenge and for the lols. For example, we were both involved in organizing programming contests for high school students, i.e. coming up with problems, and injecting some Brainfuck in there (granted, while omitting the probably-frowned-upon-by-all-professors name) kept being brought up, but nothing came out of it. Eventually, we graduated and got jobs; history became legend, and legend became myth...

That is, up until a year ago, when yours truly decided that it would be a phenomenal idea (Narrator: "It was not.") to revisit all of this and incorporate Brainfuck into his Master's thesis – thus, I present to you: "Transpiling C into Brainfuck."

Read more


Američki vizni sistem (iliti David protiv Golijata)

Septembar. Doba kada većina ljudi mlađih od 18 godina očajava zato što mora ponovo u školu, a oni nešto stariji paniče zato što se poslednji ispitni rok približavaja kraju. Međutim, ne zahuktavaju se stvari samo tu – kraj leta je ujedno i doba kada mnogi odlaze na testove i intervjue u velike svetske univerzitete i firme, ne bi li im se ukazala prilika da iskuse i nešto van Balkana.

Ovaj period, naravno, nije nasumično odabran da bude udaran kada su u pitanju intervjui. Ako pričamo o univerzitetima, broj prijava je ogroman, pa je samim tim potrebno dosta vremena da se proberu najbolji kandidati. Firme, s druge strane, uglavnom imaju kvote za zapošljavanje (kako za puno radno vreme, tako i za praksu) – slično kao što imaju projektovanu zaradu koju moraju da dostignu – i početak nove školske godine je pravi trenutak da se među sobom bore za najbolje talente i pobrinu da tokom sledeće godine zaista zaposle onoliko ljudi koliko im je potrebno.

Nažalost, gde god aplicirali, dobar učinak na ovim intervjuima je tek prvi korak, i ljudi uglavnom zaboravljaju da posle toga i dalje sledi dobijanje studentske ili radne vize. Iako je moj prvobitni susret sa ovim izazovom, kada sam išao na praksu, bio uspešan, drugi put je već usledila borba od preko godinu dana. Kako su me ljudi često pitali zašto sam prvo bio u Vankuveru, kao i kako to da sam već u Americi a bivam odbijan za radnu vizu, odlučio sam da najbitnije delove mnogobrojnih odgovora stavim u pisanu formu i objasnim šta ljudi koji žele da se presele u SAD mogu očekivati.

Read more


Parsiranje Bulovih izraza

Da, veoma dugo nisam pisao, ali me ovaj zadatak kopka već neko vreme, tako da sam najzad seo i bacio se na njegovo rešavanje.

U svom sada već skoro četiri godine starom tekstu Utisci sa testa za praksu u Microsoftu naveo sam zadatke sa kojima sam se tada susreo, ali nisam zalazio u to kako se oni rešavaju. Međutim, za ovo je očigledno bilo zainteresovanih ljudi, pa je jedan komentar na tekst bio pitanje kako se rešava zadatak sa parsiranjem Bulovog izraza. Prisetimo se kako je on glasio:

Dat je pravilno formiran logički izraz koji se sastoji od karaktera T, F, &, |, !, (, ) i razmaka. Potrebno je odrediti njegovu vrednost u linearnom vremenu. Pritom je & (AND) većeg prioriteta od | (OR).

Nažalost, na sâmom testu ovaj zadatak nisam uspeo da rešim sa zadatom (linearnom) složenošću, a nakon toga mu se nisam vraćao. Sada sam, međutim, došao u situaciju gde se već neko vreme nisam bavio algoritmima, i ovo je bila savršena prilika da se podsetim nekih najosnovnijih stvari, uključujući i C++a (jer na poslu radim frontend u PHPu i Javascriptu). Dakle, bacimo se na posao.

Read more


Setting up a "Pay What You Want" download with PayPal

Almost seven years ago, in 2007, Radiohead decided to give away their new album, "In Rainbows", for free – well, sort of. It wasn't free per se, but they did give the fans the choice to pay what they wanted, and that's how the "Pay What You Want" pricing strategy came to prominence. But why am I mentioning this?

If you are a developer of any kind, or even an artist, it has probably occurred to you that you could sell something online. Unfortunately, this is easier said than done, since there usually exist only two major options:

  1. Register at a web site that specialises in selling such products (e.g. ThemeForest, if you are creating web templates). The problem with this is that there is a high quality bar that needs to be met if you want to actually sell anything, and even in that case the fees are hefty, so you end up getting only a percentage of the price.
  2. Create your own web site and use an e-commerce system to sell the product. Such systems aren't cheap, and you still end up having to promote your content in order to attract visitors. Writing your own code for integration with PayPal is also a challenge, because of all the security that you would need to put in place.

Obviously, for someone who would just like to earn a bit on the side, neither of these are a viable option. However, if you are ready to compromise and give your stuff away for free, you can actually earn money by using the "Pay What You Want" system. The logic is simple – if you are willing to put your product up for download, why not give the users the option to pay for it? Surprisingly enough, unlike a "Donate Now" button which nobody clicks, this approach leads to a lot of people paying something, which in the end amounts to a considerable profit.

Read more


Iz ugla poslodavca

Sajmovi zapošljavanja. Koliko vas je uopšte bilo na nekom takvom sajmu sa namerom da nađe posao, ili pak čisto informisanja radi? Ja, recimo, nisam bio ni na jednom – jedan od razloga jeste što nisam imao potrebu za time, ali je na tu odluku ipak najviše uticalo to što mislim da je na sajmu zapošljavanja skoro nemoguće naći posao, jer su ili firme nezainteresovane ili kandidati neozbiljni.

Igrom slučaja, tokom svog prvog sajma zapošljavanja sam se našao na drugoj strani štanda, u ulozi poslodavca. Naime, pre dve nedelje na Univerzitetu Britanske Kolumbije (UBC) održan je Career Fair na kojem je potencijalne kandidate tražio Facebook, ali i druge velike firme kao što su Google, Amazon, Microsoft i NVidia. Kako je UBC jedan od najprestižnijih kanadskih univerziteta, očekivao sam dosta jake kandidate, ali ispostavilo se da nisam bio u pravu.

Kroz razgovor sa raznim trenutnim i bivšim studentima ovog univerziteta, ali i sa regruterima iz gore pomenutih firmi, shvatio sam da su studenti zapravo svuda isti – žele posao, ali su uglavnom nedovoljno zainteresovani da se za isti zaista bore. Ukoliko se ne pronalazite u takvom opisu, na dobrom ste putu, jer uz trud lako možete da dođete do toga da ne budete samo vi zainteresovani za firmu, već i firma za vas. Ovo je posebno tačno kod velikih IT kompanija, jer se one bukvalno bore ko će da osvoji nekog boljeg kandidata. Sledi nekoliko saveta kako da se lakše nađete u toj grupi probranih junaka.

Read more


Nordeus Hackathon 2013

Otkako sam prvi put iskusio hakaton, u okviru prošlogodišnje Start konferencije, postao sam veliki zagovornik ovakvog tipa takmičenja (odnosno događaja – Facebook hakatoni, na primer, nisu takmičarskog tipa). Verovatno glavni razlog za to je što tokom dvadeset i četiri sata radite na nekom proizvodu, od nule pa do razvoja funkcionalnog prototipa, i samim tim tokom ovog perioda možete da se susretnete sa najraznovrsnijim izazovima.

Algoritamska takmičenja, s druge strane, su prilično "predvidiva" – uglavnom se zna koje oblasti dolaze, kao i kakvi tipovi zadataka, pa je pripreme lako isplanirati (doduše, nije lako spremiti se). Naravno, ona su i dalje najbolja priprema za intervjue u velikim softverskim kompanijama, ali ipak treba obratiti pažnju i na hakatone, jer pružaju drugačiji skup iskustava koja su značajna kada taj intervju prođete i zapravo dobijete posao.

Ukoliko ste zaintrigirani, sada je pravi trenutak da se upustite u ovu avanturu, jer Nordeus u decembru, već treću godinu za redom, organizuje hakaton u razvoju igara. Ukoliko niste, čitajte dalje...

Read more


Facebook, eh?

Noćas opet snijeg. Opet prošla grtalica i zatrpala kapiju. Ovdje je prekrasno.

Ukoliko vam citat iznad ne zvuči poznato, to znači da niste čitali takozvani "Dnevnik jednog Bosanca", priču o Balkancu koji odlučuje da napusti domovinu i okuša svoju sreću u predivnoj Kanadi.

Igrom slučaja, ja sam se našao upravo u takvoj situaciji... Setićete se, krajem prošle godine sam objavio tekst Facebook – tamo i nazad: III deo u kojem sam pisao o svojoj praksi u Facebooku iz koje je izrodila ponuda za posao, a samim tim i plan za preseljenje u Kaliforniju. Iako je čitav administrativni proces odmah počeo, godinu dana pre nego što je trebalo da odem, stvari ipak nisu u potpunosti išle svojim tokom – svu dokumentaciju sam slao na vreme i diplomirao u najkraćem mogućem roku, ali američka radna viza je čudna rabota.

Long story short, američku vizu nisam dobio, ali zato kanadsku jesam, i evo me sad u Vankuveru. Ukoliko vas zanima šta se to sve izdešavalo između, odnosno kako izgleda jurnjava za radnom dozvolom u SAD i Kanadi, te informacije će uslediti u nekom od sledećih tekstova. Ovaj je, pak, najviše posvećen samoj Kanadi.

Read more


Zadaci sa Google intervjua za praksu

Iako sam u svojim tekstovima obrađivao razne teme, primetio sam da su ljudima uglavnom najkorisniji tekstovi u kojima sam opisivao zadatke sa testova i intervjua, što mi je veoma drago. Iz tog razloga ovu tradiciju nastavljam, prelazeći na sledeću veliku IT kompaniju – Google.

Google predstavlja svojevrsni Sveti Gral za mnoge programere, pa sam i ja odlučio da okušam svoju sreću sa njihovim procesom zapošljavanja. Međutim, sâm intervju se odigrao u relativno lošem trenutku – prijavu sam obavio još pre završetka prakse u Facebooku, ali mi je razgovor zakazan tek nakon što sam prihvatio ponudu da se tamo i vratim. Samim tim, intervjuu za Google nisam pristupio dovoljno ozbiljno, pa me je baratanje grafovima (treći zadatak) na kraju dotuklo. Svejedno, mislim da su ova dva intervjua bila dobra kako iz istraživačkog, tako i iz poznavanje-svojih-slabosti ugla.

Slede tri zadatka i njihova rešenja, kao rezultat tog "istraživanja".

Read more


Izložba "Čarolija svetleće tačke"

Oni koji me poznaju verovatno prilično dobro znaju da nisam obožavatelj moderne umetnosti. Povremeno mi se svidi neko neobično delo, ali to je uglavnom to (da, znam da je problem u meni i u mom ograničenom umu). Međutim, izložba Voje Antonića pod nazivom "LED ART – Čarolija svetleće tačke" se u taj šablon, pored svog modernističkog karaktera, ipak ne uklapa. Ovo prvenstveno pripisujem svojoj naklonjenosti prema računarstvu, pa sâmim tim i stvarima koje se baziraju na mikrokontrolerima, što je slučaj kod većine izloženih radova, što dalje znači da bi ova izložba verovatno i vama bila interesantna.

Od prikaza Konvejeve igre života, preko "Ulaza u pakao" (moj favorit), pa sve do digitalnog sata koji se topi i predstavlja omaž Salvadoru Daliju, ove instalacije sa mikrokontrolerima u svojoj srži imaju da ponude više od pukog dinamičnog vizuelnog užitka, pa i nije toliko čudno što se ljudi i po nekoliko minuta zadržavaju ispred jednog dela, verovatno razmišljajući kako je ono realizovano sa hardverske i softverske strane.

U nedostatku odeljka bloga koji bi se bavio umetnošću i digitalnim stvaralaštvom, mislim da je ova izložba krajnje opravdano svrstana upravo u kategoriju "Hardver".

Read more


Klupska fotografija za početnike

U fotografskim krugovima postoji jedna šala koja kaže "Kako postati milioner? Jednostavno – prvo postaneš milijarder, pa onda kreneš da se baviš fotografijom". Međutim, u svakoj šali ima i malo istine, pa je i ova zapravo tačna, ukoliko zanemarimo hiperbolu. Bavljenje fotografijom ume da bude jako skup hobi, a još skuplji posao, koji pritom nije nimalo lako monetizovati. Istina, velike pare leže u fotografisanju venčanja ili poznatih ličnosti (pritom ne mislim na paparaco fotografije napravljenje iz kontejnera), ali je u obe niše jako teško ući, jer osim para i veštine zahtevaju i upornost.

Ako se, pak, kao ja, bavite fotografijom pretežno amaterski, problem probijanja na tržištu nemate. Međutim, sigurno je da i dalje želite da vaše fotografije budu kvalitetne, pa se samim tim odmah vraćamo na nezaobilaznu stavku zvanu "novac".

Nakon skoro 5 godina, ja sam sebe pronašao u nekoliko tipova fotografije – shvatio sam da najviše volim da fotografišem pejzaže i ljude. Pejzaži k'o pejzaži, nema tu neke velike nauke (naravno da ima, ali to sad nije poenta), ali ljudi su već sasvim druga priča. To mogu biti spontane fotografije na otvorenom, studijske fotografije sa modelima koji poziraju, ili nešto treće. Kako nisam obožavatelj studijske fotografije, opredelio sam se za nešto treće, a to su klupska i koncertna fotografija.

Sa silaskom DSLR aparata međ' široke narodne mase, ova dva tipa fotografije su postala veoma popularna, ali to nikako ne znači da je kvalitet sâmih fotografija dobar – naprotiv, tužno je koliko često na Facebooku viđam zvanične fotografije klubova koje su mutne, isprane ili loše osvetljene. Možda ćete čuti kako ti fotografi nemaju [para za] adekvatnu opremu, ali to je loš izgovor, jer se i sa najosnovnijom konfiguracijom može svašta postići. Moje fotografije su daleko od savršenih, ali kao neko ko nije previše ulagao u svoj aparat, mislim da sam u poziciji da dam nekoliko saveta.

Read more