Tag Archives: Zanimljivosti

Nova instalacija WordPress-a i problemi sa backup-om

Od kad sam pokrenuo blog vrti mi se ista instalacija WordPress-a. Iz meni nepoznatog razloga čudne stvari su počele da se dešavaju u poslednje vreme u administracionom panelu, ali ne bih sad o tome. U svakom slučaju sinoć odlučim da uradim instalaciju od početka. Naravno, export članaka prvo, backup baze (zlu ne trebalo) i krenem u proces. Prvo što sam uradio je da sam obrisao sve fajlove sa servera. Velika greška… Ovim sa obrisao i sve slike koje sam upload-ovao, a backup fajlova, naravno, nisam pravio :(

Ništa, odradim sve i sve radi, samo što se ne vide slike u postovima gde ih ima i odlučim da pošaljem mail Loopia-i, kod kojih se sve hostuje i da ih zamolim da vrate uploads folder.

E sad dolazi onaj lep deo za koji ja nisam znao. Na njihovom serveru se radi redovan backup (satni, noćni i nedeljni) i korisnici mu imaju pristup. Sve što korisnik treba da uradi je da se pomoću nekog FTP programa zakači na server, locira folder čiji backup traži i ukuca cd .snapshot i dobiće pristup svim starim fajlovima. Zaista super stvar…

Zahvaljujući ovome problem sam rešio za par minuta (koliko je potrebno da download-ujem 20ak slika, proverim da li je sve na svom mestu što se tiče putanja i upload-ujem ih) i sve radi kao sat…

import antigravity

Ne znam kako do sad ovo nisam primetio (u stvari znam, ali nije sad bitno :) ), ali python u verziji 3.0 je doneo novu skrivenu zezalicu (easter egg). Naime, kad neko pokuša da importuje modul antigravity desi je jedna čudna stvar. Python Vas odvede na sajt XKCD, na kome postoji jedan zanimljiv strip na račun python-a.

Inače, i u proteklim verzijama su postojale ovakve ugrađene zezalice. Jedna od mojih omiljenih je from __future__ import braces koja baca exception SytaxError sa porukom “not a chance”. Za one koji ne znaju, __future__ paket je namenjan za nove stvari koje će biti ugrađene u python u sledećim verzijama.

Zatim postoji i import this koji ispisuje The Zen Of Python (nekoliko korisnih saveta u vezi programiranja generalno). Interesantno je i videti kod modula this :)

Ima li ih još za koje ne znam? Uvek se obradujem kad naiđem na nešto ovakvo (mada ništa od ovoga nisam sam otkrio, to ne umanjuje moje zadovoljstvo :) )…

Programerski citati

Skupljao sam ih dosta dugo u jedan fajl. Ovo neki koji mi se najviše sviđaju…

  • Walking on water and developing software from a specification are easy if both are frozen.
  • Every language has an optimization operator. In C++ that operator is ‘//’.
  • Some people, when confronted with a problem, think “I know, I’ll use regular expressions.” Now they have two problems.
  • In order to understand recursion, one must first understand recursion.
  • The only “intuitive” interface is the nipple. After that it’s all learned.
  • The generation of random numbers is too important to be left to chance.
  • It works on my machin.
  • In theory, theory and practice are the same. In practice, they’re not.
  • Beware of programmers who carry screwdrivers.
  • Perl – The only language that looks the same before and after RSA encryption.
  • Nine people can’t make a baby in a month.
  • Software is like sex: It’s better when it’s free.
  • Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
  • C++ : Where friends have access to your private members.
  • Debuggers don’t remove bugs. They only show them in slow motion.
  • God could create the world in six days because he didn’t have to make it compatible with the previous version.
  • Programmer: an organism that turns coffee into software.
  • There are only two kinds of languages: the ones people complain about and the ones nobody uses.
  • Hofstadter’s Law: It always takes longer than you expect, even when you take into account Hofstadter’s Law
  • Java: Write Once, Debug Everywhere
  • My programs don’t have bugs, they just develop random features.
  • If Java had true garbage collection, most programs would delete themselves upon execution.

Za većinu ne znam ko je autor, tako da nisam hteo da stavim autora ni za one koje znam.

Ajde programeri, dajete vaše omiljene citate :)

Geeky song

Dr. Suess Explains Computers
by Anonymous

If a packet hits a pocket on a socket on a port
and the bus is interrupted as a very last resort,
and the address of the memory makes your floppy disk abort…
Then-the-socket-packet-pocket-has-an-error- to-report!

If your cursor finds a menu item followed by a dash
and the double clicking icon puts your window in the trash
and your data is corrupted ‘cause the index doesn’t hash,
then your situation’s hopeless and your system’s gonna crash!!!

If the label on the cable on the table at your house
says the network is connected to the button on your mouse,
but your packets want to tunnel on another protocol,
that’s repeatedly rejected by the printer down the hall,

When the copy of your floppy’s getting sloppy on the disk
and the microcode instructions cause unnecessary risk,
then you’ll have to flash your memory and you’ll want to RAM your ROM
Quickly turn off the computer and be sure to tell your Mom!

Čuvajmo gravitaciju

Vodeći svetski stručnjaci su se složili da će se, ako se nastavi trenutna potrošnja, Zemljine zalihe gravitacije iscrpeti do početka 24. veka. Dok potraga za jeftinom alternativom traje, potrebna je Vaša pomoć. Molimo Vas da

ŠTEDITE GRAVITACIJU

Pridržavajte se sledećih pravila:

  1. Hodajte lakim korakom. Ako je moguće sa sobom nosite balone helijuma.
  2. Koristite lepak, selotejp ili magnete umesto tegova za papire.
  3. Skakanje padobranom ili bandži džamp zamenite horizontalinim sportovima.
  4. Izbegavajte tuširanje. Bolje napravite kupku.
  5. Nemojte ići u teretanu.
  6. Prestanite da okrećete palačinke bacajući ih u vis.

Rešenja za PythonChallenge

Već sam pisao o sajtu PythonChallenge. Kada sam se prošli put igrao sa ovim zagonetkama stigao sam do 12. nivoa i tu sam, što zbog obaveza, što zbog toga što nisam mogao da skontam šta treba da radim, stao. Sinoć mi je, kako to obično biva, taman kad sam trebao da počnem da radim projekat obavezan za fakultet, sinula ideja da probam da rešim još koji nivo.

Na žalost, zbog svoje gluposti sam ostao bez podataka sa jedne particije, a, pogađate, upravo na njoj su mi bila rešenja do kojih sam ranije došao. Naravno, malo sam popizdeo što nemam back-up, ali to me nije mnogo omelo nego sam krenuo ispočetka da rešavam sve ne bih li opet došao gde sam bio (a i nije mi se radio projekat za fakultet – naravno, zato sam danas morao da ga uradim). I tako, nakon sat – dva vremena sam ponovo rešio sve zagonetke do 12. nivoa (mnogo brže ide drugi put, kad se znaju svi fazoni, ali svejetno, treba sve programe ponovo napisati). Dvanaesti nivo, oko koga sam se mučio nekoliko dana sada sam rešio za pola sata. Stvarno ne znam kako i zašto mi je to tad bio toliki problem. Sad mi je problem da rešim ovaj 13. nivo :)

Nego, kao posledicu činjenice da sam isti posao radio dva puta odlučio sam da napravim back-up (ne, neću početi da redovno pravim image diskova :) ) na sajtu, a isto to može dobro da dođe ljudima koji žele da se dalje da se igraju, ali su zapeli na nekom od nivoa. Spojio sam korisno sa korisnim.

Ovde možete naći sva moja rešenja. Napominjem da ne gledate rešenja ako želite ne da si pokvarite igru (bolje pitajte za neki dodatni savet). Pored samog koda uglavnom sam pisao i kratko objašnjenje kako sam došao do rešenja.

Pa, nadam se da će bar nekom pomoći i da neću stati na ovome.

Brainfuck

Sinoć u trenutcima dokolice (dobro, dobro, imao sam i pametnija posla, ali ovo mi je bilo zanimljivije) napisao sam Brainfuck interpreter. Verovatno zvuči ozbiljnije nego što stvarno jeste, jer je ceo program stao u nekih 200 linija koda sa sve komentarima i inline dokumentacijom.

Brainfuck

Za one koji ne znaju, Brainfuck je jezik koga je napravio Urban Müller 1993. godine kao pokušaj da napravi najmanji kompajler, pa mu je trebao i kompaktan jezik. Nema nikakvu upotrebnu vrednost. Jako lako se uči, ali se jako teško programira u njemu, a kod je čitljiv koliko i binarni.

Struktura podataka koju koristi jezik je jedan niz (zavisi od implementacije, ali obično je niz 8-bitnih vrednosti) i jedan implicitno deklasiran pokazivač. Sintaksa se sastoji samo od 8 znakova:

  • + uvećava za jedan vrednost na koju pokazuje pokazivač
  • - umanjuje za jedan vrednost na koju pokazuje pokazivač
  • < pomera pokazivač za jedno mesto u levo
  • > pomera pokazivač za jedno mesto u desno
  • . ispisuje ASCII vrednost znaka čiji kod se nalazi na lokaciji na koju pokazuje pokazivač
  • , učitava kod ASCII znaka sa tastature i smešta ga na lokaciju na koju pokazuje pokazivač
  • [ započinje petlju koja se izvršava sve dok vrednost u lokaciji na koju je pokazivaš pokazivao na početnu petlje ne bude 0
  • ] završava petlju

Jedan primer brainfuck programa je ovo:

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

Ovaj kod, kad se propusti kroz interpreter koji sam napisao (ili bilo koji drugi brainfuck interpreter) će kao rezultat dati string “del-boy”.

Kao što možete pretpostaviti, za ovakav jezik je dosta jednostavno napisati interpreter. Moje rešenje je dosta jednostavno i nekompletno. Napravio sam jedan niz od 1000 elemenata (u praksi je potrebno dosta više… u stvari, u praksi bi taj niz trebao da bude ograničen samo količinom memorije u računaru, ali to ću možda napraviti tek u sledećoj verziji). Ako se dođe do kraja niza odlučio sam da će pokazivač da se vrati na početak. Ista situacija je ako program pokuša da pomeri pokazivač levo od nulte pozicije – vratiće se na kraj.

Nisam ugrađivao nikakve provere sintakse ili bilo šta slično (mrzelo me) tako da vrlo lako može da se desi da interpreter upadne u beskonačnu petlju ili da se neredvidivo ponaša, ali tad je uglavnom program loše napisan. Mislim, najverovatnije ima stvari koje sam propustio, ali za moje test primere je vraćao dobar rezultat.

Svi znakovi sem gore nabrojanih 8 se zanemaruju, tako da slobodno možete da pišete komentare u kod pod uslovom da se u komentaru ne pojavljuju brainfuck znaci. Čak šta više, ako želite možete da sakrijete brainfuck program u neki drugi program, napisan u nekom drugom programskom jeziku.

Jezik koji sam izabrao za implementaciju je Python. Njega već neko vreme učim, ali nikako da nađem više vremena da mu se posvetim tako da sam stalno negde na početku, tako da mi je ovo došlo kao dobra vežba.

I za kraj, kod.

Ko kaže da je instrument bitan

Guns’n'Roses – Sweet child o’ mine na malo drugačiji način:

The ABC of Unix

Davno sam naišao na ovu pesmicu negde na netu (ne znam više gde, ali napravio sam kopiju). Ono što me potsetilo da je objavim je tema na LUGoNS forumu gde je objavljena još jedna zanimljiva pesmica.

Dakle, ABC of Unix:

A is for awk, which runs like a snail, and
B is for biff, which reads all your mail.
C is for cc, as hackers recall, while
D is for dd, the command that does all.
E is for emacs, which rebinds your keys, and
F is for fsck, which rebuilds your trees.
G is for grep, a clever detective, while
H is for halt, which may seem defective.
I is for indent, which rarely amuses, and
J is for join, which nobody uses.
K is for kill, which makes you the boss, while
L is for lex, which is missing from DOS.
M is for more, from which less was begot, and
N is for nice, which it really is not.
O is for od, which prints out things nice, while
P is for passwd, which reads in strings twice.
Q is for quota, a Berkeley-type fable, and
R is for ranlib, for sorting ar table.
S is for spell, which attempts to belittle, while
T is for true, which does very little.
U is for uniq, which is used after sort, and
V is for vi, which is hard to abort.
W is for whoami, which tells you your name, while
X is, well, X, of dubious fame.
Y is for yes, which makes an impression, and
Z is for zcat, which handles compression.

Kako živi Antun Tun

Dečija pesmica koju sam obožavao kad sam bio mali:

Kako živi Antun Tun

U desetom selu
Živi Antuntun.
U njega je malko
Neobičan um.

On posao svaki
Na svoj način radi:
Jaja za leženje
On u vrtu sadi.

Kad se jako smrači,
On mrak grabi loncem.
Razlupano jaje
On zašiva koncem.

Da l’ je jelo slano,
On to uhom sluša.
A ribu da peva
Naučiti kuša.

Na livadu tera
Bicikl da pase.
Da mu miše lovi,
On zatvori prase.

Guske senom hrani,
Snegom soli ovce.
A nasadi kvočku
Da mu leže novce.

Kad kroz žito ide
On seda u čun.
Sasvim na svoj način
Živi Antutun.

Grigor Vitez

Switch to our mobile site