Author Archives: windu

Pascal: Funkcije i procedure

U Pascalu postoje dva tipa potprograma, funkcije i procedure. Razlike je sto funkcije vracaju neku vrednost u glavni program, dok procedure jednostavno izvrse ono zbog cega su pozvane. Inace glavni razlog za koriscenje potprograma je bolja organizacija. Ako neki proces ponavljamo nekoliko puta na vise mesta u programu, logicno je da ga napisemo jednom i kasnije pozivamo kada nam treba. Takodje, ovakve potprograme mozemo koristiti kasnije i u drugim programima. Pogledajmo nekoliko primera.

program Funkcije;
var
a,b,v: integer;

//funkcija koja vraca veci broj
function max(x,y:integer): integer;
//lokalna varijabla unutar funkcije
var
calc: integer;
begin
if (x > y) then calc := x else calc :=y;
max := calc;
end;

//glavni program
begin
write('Unesite prvi broj: ');
readln(a);
write('Unesite drugi broj: ');
readln(b);
writeln('--------------------');
//pozivamo funkciju
v := max(a,b);
writeln ('Veci broj je: ',v);
readln;
end.

U ovom primeru smo najpre deklarisali funkciju max koja od dva poslata broja vraca veci. Zatim smo je pozvali iz glavnog programa da bi odredili koji je broj veci od dva uneta, i na kraju ispisali rezultat na ekranu. Kao sto ste mogli da vidite, funkcije se definisu sintaxom:

function ime(argumenti:tip; argumenti2:tip2;..):izlazni tip

.. i na kraju vraca rezultat u formatu: ime := neki proracun. Ona moze sadrzati i lokalne varijable koje smo u nasem primeru ubacili samo radi demonstracije, inace nije bilo neophodno. Pogledajmo jos jedan primer.

program Funkcije2;
var
a,b:integer;
//direktno vracena funkcija
function god(a,b:integer):integer;
begin
god := a-b;
end;

//glavni program
begin
write('Unestite vase godiste: ');
readln(a);
write('Unestite aktuelnu godinu: ');
readln(b);
writeln('--------------------');
writeln('Ove godine punite ',god(b,a),' god.');
readln;
end.

Ovaj program je vrlo slican, i demonstrira vracanje rezultata u jednoj liniji bez dodatnih internih varijabli. Takodje i pozivanje funkcije direktno iz druge komande ili izraza, bez dodatnih spoljnih varijabli.

Vise o potprogramima u Pascalu mozete pogledati ovde.

Pascal: Stringovi

Stringove smo vec pominjali i koristili u prethodnim primerima. Oni predstavljaju niz karaktera i kao takvi su jedan od najbitnijih elemenata u svim modernim programskim jezicima opste namene. Ovde cemo obraditi neke od brojnih funkcija i operacija sa stringovima u Pascalu.

Pogledajmo sada jedan primer sa stringovima:

program Stringovi;
uses
crt;

var
ime,pre,c,n:string;

begin
write('Unesite ime: ');
readln(ime);
write('Unesite prezime: ');
readln(pre);
c := ' '; //dodajemo razmak
clrscr;
//nastavljanje
writeln('Puno ime je: ', concat(ime,c,pre));
//moze i sa +
c := ime+pre;
writeln('Zbir imena i prezimena je: ', c);
//brisanje dela stringa
n := c; //cuvamo originalni zbir
delete(c,2,3);
writeln('Zbir bez tri slova: ', c);
//razno
writeln('Broj karaktera u imenu: ', length(ime));
writeln('Zbir malim slovima: ', lowercase(n));
writeln('Zbir velikim slovima: ',upcase(n));
writeln('Pozicija prezimena u zbiru: ',pos(pre,n));
readln;
end.

U nasem programu najpre smo uneli ime i prezime. Zatim smo pomocu funkcije concat sastavili tri stringa u jedan, i demonstrirali kako se isti efekat moze postici sa prostim sabiranjem. Zatim smo obrisali deo stringa pomocu funkcije delete. Argumetni su delete(string,pocetak brisanja,duzina brisanja). U delu razno smo obradili jos nekoliko funkcija. To su length koja vraca duzinu stringu, zatim prebacivanje u mala i velika slova pomocu lowercase i upcase, kao i odredjivanje pozicije stringa u stringu pomocu funkcije pos.

U koliko pod Uses ucitate i sysutils, bice vam dostupne dodatne korisne funkcije, poput IntToStr i StrToInt. Pogledajmo jos jedan primer.

program Stringovi2;
uses
crt, sysutils;

var
ime,god,lin:string;
g,x:integer;

begin
write('Unesite ime: ');
readln(ime);
write('Unesite godiste: ');
readln(god);
clrscr;
//prebacivanje u integer i nazad
g := strtoint(god);
g := 2020 - g;
god := inttostr(g);
//sabiranje stringa
lin := '2020te punite ' + god + ' godina';
writeln(lin);
//vracamo vrednost u god
g := 2020 - g;
god := inttostr(g);
//prebacivanje u ASCII i nazad
x := ord(ime[1]);
writeln('ASCII prvog slova imena: ', x);
lin := chr(x);
writeln('Prvo slovo imena iz ASCII: ',lin);
insert(god,ime,3);
writeln('Godiste ubaceno u ime: ',ime);
delete(ime,3,4);
writeln('Obrisano godiste iz imena: ',ime);
readln;
end.

Ovde smo najpre uneli ime i godiste. Zatim smo prebacili godiste u integer da bi izvrsili racunsku operaciju, nakon cega smo vrednost opet vratili u string i ispisali na ekranu. Zatim smo prebacili slovo u ASCII vrednost i nazad, i na kraju pokazali kako se string ubacuje i izbacuje iz drugog stringa. Argumenti funkcije insert su (string koji ubacujemo, string u koji ubacujemo, mesto odakle pocinjemo). Argumenti funkcije delete su vec objasnjenji u prethodnom primeru.

Svi moderni jezici imaju brojne funkcije sa stringovima. Ovde smo obradili samo neke koje se cesto koriste. Vise o stringovima u pascalu pogledajte ovde i ovde.

Google digitalna radionica

Google je pokrenuo jako zanimljivu obrazovnu inicijativu na temu online marketinga. Ideja je da se pomogne ljudima, narocito malim preduzecima, u laksoj promociji svojih delatnosti putem interneta. Radionica obradjuje najrazlicitije teme, pocevsi od objasnjenja osnovnih termina pa nadalje. Poput principa SEO optimizacije, nacina rada SEM sistema, koriscenja drustvenih mreza, prednosti mobilnog (responsivnog) dizajna i aplikacija, razlicite metode povezivanja sa korisnicima, koriscenje alata za analizu aktivnosti korisnika radi dodatne optimizacije i slicno. Ukratko, sve na jednom mestu u vezi digitalnog marketinga.

Skola je organizovana na moderan i zanimljiv nacin, sa ciljem da stimulise studente. Predavaci su kvalitetni i jasno objasnjavaju teme. Teme se sastoje od kratkih i jednostavnih lekcija. Nakon sto kompletirate temu, sledi kratak test koji donosi bedzeve. U koliko vas tematika zainteresuje toliko da kompletirate sve bedzeve i polozite zavrsni test, dobicete digitalni sertifikat iz ove oblasti koji potpisuju Google i IAB Europe. Ali ono najvrednije sto cete dobiti je primenjivo znanje u ovoj oblasti, koje po zelji mozete da obnovite kad god vam odgovara.

Radionica je potpuno besplatna i mozete se registrovati ovde.

Youtube i Flash player

HTML5 je doneo brojne novine, medju kojima je i dugo ocekivana direktna podrska za medija fajlove. Ovo je otvorilo put za razvoj zanimljivih web elemenata poput video playera ili AV komunikacije. Google je kao jedan od glavnih inovatora medju prvima primenio ovaj sistem na svom Youtube servisu, tako sto je zamenio stari Flash player za novi baziran na HTML5. I ovde svaka bajka prestaje jer novi player zauzima neuporedivo vise resursa (CPU, RAM) od prethodnog. Ovo ga cini neupotrebljivim na starijem hardwareu jer video laguje, browser blokira itd. Obzirom da Youtube forsira HTML5 kod novijeg Firefoxa u vecini slucajeva, ovde cemo videti kako mozemo da koristimo stari player i time obezbedimo lepse iskustvo na Youtube-u.

YouTube Flash Player addon koji razvija Maxime RF predstavlja jako dobro resenje, o cemu svedoci i veliki broj korisnika. Ovo je ujedno i najpopularniji addon tog tipa. Addon je lagan po resurse i jednostavan za rad. Nakon instalacije automatski se aktivira i jednostavno ucitava video materijale preko Flasha umesto HTML5. Ovo radi kako na samom Youtube sajtu tako i na embedovanim videima. Ako pozelite da ga iskljucite, to mozete uraditi klikom na toolbar dugme. U koliko vam se iz bilo kog razloga ne dopada kako addon radi, mozete pokusati sa popularnim alternativama poput Yt Flash Video ili Yt Flash-HTML5.

Drugi metod je slican onome koji smo primenili u prethodnom textu, samo sto ide u suprotnom smeru. Youtube je moguce zavarati preko User Agenta i na taj nacin dobiti Flash player kao default. Da bi ste ovo uradili, instalirajte User Agent Switcher i napravite novi profil sa Tools > Default User Agent > Edit User Agents > New > New User Agent i u liniji User Agent upisite nesto tipa:

Mozilla/5.0 (Windows NT 5.1; rv:25.0) Gecko/20100101 Firefox/25.0

.. dodajte ime pod Description, poput MyYtFox i snimite sa Ok > Ok. Setujte ga sa Tools > Deafult User Agent > MyYtFox, i Flash ce vam se ucitavati kao osnovni player. Inace, i ovaj metod radi na vecini embedovanih videa.

Povezano sa temom, stari nacin iskljucivanja FF upozorenja za Flash koji smo ovde opisali (4d), jos uvek radi bez problema.

Remove It Permanently & User Agent Switcher

Kao sto smo vise puta pomenuli, uvek je najsigurnije koristiti poslednje verzije programa, narocito onih koji dolaze u dodir sa internetom. Medjutim ponekad se desava da neke od ovih programa ne mozemo ili ne zelimo da updateujemo. Za ovo postoje brojni razlozi, npr. nova verzija ne podrzava nas 32bitni sistem, neke funkcije se vise ne razvijaju, ne dopada nam se nov izgled ili smatramo da je pretrpana itd. U tim situacijama sajtovi cesto preuzimaju ulogu babysittera i uporno pokusavaju da nas upozore kako recimo browser nije kompatibilan, addon zastareo itd. U pojedinim slucajevima, kao kod poslednjeg update-a Facebooka, ovo postaje pravo maltretiranje korisnika. U ovom poslednjem primeru zuti baner stoji na vrhu svake stranice bez mogucnosti da se iskljuci. Sreca pa je Firefox dovoljno flexibilan, te se i ovde moze naci resenje.

Addon Remove It Permantly radi upravo ono sto nam treba, a to je trajno uklanjanje nekog elementa sa web stranice. Ovo se moze raditi za konkretnu stranu, sajt ili domen. Takodje postoji opcije da se uklone svi iFrame elementi, pojedine tabele, moguce je editovanje URLa i obrisanih elemenata, kao i druga fina podesavanja. U slucaju promene browsera, moguce je exportovati celu arhivu blokiranih elemenata i uvesti u drugi browser. Addon je gotovo idealan za starije verzije Firefoxa, dok se za novije preporucuje Yet Another Remove It Permanently.

Drugi pristup je da promenite User Agent String, kojim se browser identifikuje na internetu. Ovo ce raditi u vecini slucajeva, ukljucujuci i pomenuti update Facebooka. Najpre instalirajte addon User Agent Switcher. Zatim idite na Tools > Default User Agent > Edit User Agents > New > New User Agent i u liniji User Agent videcete string koji ce izgledati nesto poput:

Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0

Jednostavno ga promenite tako da pokazuje neku noviju verziju, na primer:

Mozilla/5.0 (Windows NT 5.1; rv:43.0) Gecko/20100101 Firefox/43.0

Zatim dodajte ime pod Description, poput MyNewFox i snimite sa Ok > Ok. Na kraju ostaje samo da ga promenite preko Tools > Deafult User Agent > MyNewFox. Nakon ovoga vas vecina sajtova, ukljucujuci i Facebook, nece daviti sa dosadnim upozorenjima. Treba dodati da ovo podesavanje radi po sesiji i da se resetuje kada restartujete Firefox. Razlog za to, kao i nacin da se forsira trajno podesavanje, mozete videti ovde.

Na kraju bih dodao jos jedno resenje, a to je trajna promena User Agenta. Za ovo vam ne treba addon. U Adress Baru: about:config > I’ll be careful, i promise! > Search: general.useragent.override > dupli klik na entry i promenite u zeljeni string. Ako se desi da ovaj entry ne postoji mozete ga kreirati. Desni klik bilo gde u about:config na listi preferencija, New > String > za ime upisite: general.useragent.override a sadrzaj bilo koji string koji vam odgovara, poput gore pomenutog za Firefox v43. Iako nije idealno, jer pojedini sajtovi isporucuju sadrzaj baziran na ovome, ponekad moze predstavljati najbolje resenje. U koliko pozelite da obrisete entry, izaberite desni klik i reset. Nakon restarta Firefox ce se ponasati po defaultu.

Vas trenutni User Agent, kao i primere stringova, mozete pogledati ovde.

Kontakt stranica

Na predlog citaoca dodali smo kontakt formu. Ako imate bilo kakve komentare, sugestije ili zelite da se javite, to mozete uraditi ovde. Polje za Sajt nije obavezno, ostala jesu. Takodje, ako vec imate nalog na WordPressu, neophodni podaci ce biti unapred popunjeni. Iako pratimo vase poruke, nismo u mogucnosti da odgovorima svima. Ukoliko imate pitanja vezana za neku od tema koje obradjujemo, uvek je bolje da ih postavite u komentaru konkretnog texta.

Cybrary sajt

Cybrary je vrlo zanimljiv sajt posvecen pre svega sigurnosnom aspektu rada sa kompjuterima, ali i raznim drugim oblastima. Ono sto ga izdvaja su potpuno besplatni video kursevi na razne zanimljive teme. Pored sigurnosti i etickog hakovanja, tu su pripremni kursevi za gotovo sve znacajnije firme koje izdaju poznate internacionalne sertifikate. Izmedju ostalog tu su pripreme za CEH, ComptTIA, Microsoft, Cisco itd. Pored njih mogu se naci odlicni video kursevi na teme za koje ne postoji neki poseban poznati sertifikat, ali su same po sebi jako zanimljive. Na primer tu je kurs o Socijalnom Inzenjeringu u kontekstu sigurnosti ili kurs posvecen upotrebi Pythona za pen testiranje.

Inace na ovom portalu su svi kursevi, forumi, interakcija itd, potpuno besplatni. Medjutim sajt ima i neke zanimljive opcije poput bedzeva i svojih internih sertifikata. Ove dodatne opcije se placaju u virtuelnim tokenima koji se zovu cybytes. Ovi tokeni se mogu kupiti normalnim novcem ali se mogu zaraditi i raznim aktivnostima na sajtu poput postovanja na forumu, pozivanja novih clanova ili cak samo logovanjem. Menadzment ovog sajta ceni svaku podrsku clanova, sto je vise nego korektno.

Na Cybrary se mozete uclaniti ovde, a mozete ih pratiti i preko fejsbuka ili tvitera.

Pascal: Nizovi (Arrays)

Nizovi su, kako im samo ime govori, elementi u programiranju koji sadrze sredjeni niz podataka. To mogu biti brojevi, stringovi, bajtovi itd. Nizovi se definisu u var bloku a zatim inicijalizuju pre koriscenja, tako sto se ispunjavaju nekim standardnim podacima. Elementima niza se pristupa pomocu rednog broja. Ovo vazi i za citanje i za pisanje. Pogledajmo sada sve ovo u praksi.

program Nizovi;
uses
crt;

var
n:integer;
//definisanje niza
a:array[1..10] of Integer;

begin
//inicijalizacija
for n := 1 to 10 do
//punimo niz brojevima
a[n] := n*n;
//citamo redne brojeve 2 i 7
writeln('Na broju 2 je ',a[2]);
writeln('Na broju 7 je ',a[7]);
readln;
clrscr;
//upisujemo 30 na mesto broj 5
a[5] := 30;
//citamo sve brojeve
for n in a do
writeln('Na broju ',round(sqrt(n)), ' je vrednost: ',n);
readln;
end.

Napomena: Ovaj program nece raditi u Dev-Pascalu zato sto on koristi verziju FPC kompajlera u kojoj ne postoji podrska za For/In strukturu. Mozete ga probati u Lazarusu, jer je podrska za ovo dodata od FPC v2.4.2. Ako insistirate na Dev-Pascal IDEu isti efekat cete dobiti ako poslednjih pet redova napisete ovako:

//citamo sve brojeve
for n := 1 to 10 do
writeln('Na broju ',n, ' je vrednost: ',a[n]);
readln;
end.

Da podsetimo, u Lazarusu ovakve programe mozete kreirati sa Project > New Project > Simple Program ili Program. Za nase potrebe preporucljiva je prva opcija.

Pogledajmo sta nas program radi. Najpre definisemo sam niz u var bloku. Zatim ga punimo brojevima tako sto na svako mesto u nizu stavljamo kvadrat rednog broja elementa. Nakon toga ocitavamo vrednost na dva mesta, da bi se uverili sta se tu nalazi. Zatim upisujemo drugaciju vrednost na mestu broj 5 (gde se nalazi 25 kao kvadrat rednog broja). I na kraju iscitavamo sve vrednosti po redu, kao demonstraciju For/In strukture. Da bi simulirali redne brojeve koristimo zaokruzivanje korena vrednosti na tom mestu. Drugi nacin da se uradi ista stvar objasnjen je u delu napomene.

Vise o nizovima mozete pogledati ovde.

Napad na Linux Mint

Proslog vikenda (Subota, 20.2) napadnut je sajt popularne distribucije Linux Mint. Tokom napada zamenjen je link za ISO v17.3 Cinnamon, sa linkom koji skida ISO koji u sebi ima backdoor. Ovaj backdoor omogucava napadacima da dolaze do licnih podataka o korisniku, kao i da koriste njegov internet kao deo botnet mreze. Ovo ne pogadja one koji koriste neku drugu verziju Minta ili su koristili torrent za download. Ovo takodje ne pogadja repozitorije i sistemske upgrade-e na ovaj nacin. U koliko se ovo odnosi na vas, preporuka je da reinstalirate sistem i promenite sifre.

Vise informacija i pitanja korisnika mozete naci na zvanicnom blogu Minta.

Pascal: Loo(m)povanje plus

Drugi text o lupovima odvajamo zbog preglednosti. Ovde cemo obraditi jos nekoliko korisnih stvari vezano za Pascal petlje. To su brojanje unazad, brojanje na preskoke i petlja u petlji. Ovde necemo obraditi korisnu For/in strukturu, jer su nam za to potrebni nizovi. Primeri ce kao i ranije biti vrlo jednostavni da bi se video princip. A nakon toga vam mogu posluziti kao modeli za sopstvene programe.

1) Brojanje unazad

program ForUnazad;
var
a:integer;

begin
for a := 10 downto 1 do
begin
writeln('Vrednost a je ',a);
end;
readln;
end.

2) Preskoci Do/While

program Neparni;
var
a:integer;

begin
a := 1;
while a <= 10 do
begin
writeln('Vrednost a je ',a);
a := a+2; //preskacemo za 2
end;
readln;
end.

3) Preskoci Repeat/Until

program Parni;
var
a:integer;

begin
a := 2;
repeat
writeln('Vrednost a je ',a);
a := a+2;
until a > 10;
readln;
end.

4) Petlja u petlji

program PuP;
var
a,n:integer;

begin
for n := 1 to 3 do
begin
for a := 1 to 5 do
writeln('Za krug: ',n,' - Vrednost a je: ',a);
end;
readln;
end.

Ovde su data 4 jednostavna primera koriscenja petlji. Najpre smo demonstrirali kako se broji unazad pomocu for-a. Nakon toga smo dali dva primera preskakanja pomocu DoWhile i RepeatUntil i na kraju smo demonstrirali petlju u petlji pomocu dva for lupa. Za unutrasnji for nismo otvarali begin/end blok jer smo koristili samo jednu komandu, te u tom slucaju nije neophodno. U Pascalu ne postoji For/Step struktura, tipicna za neke druge programske jezike, i zato se preskoci rade pomocu drugih metoda. Naravno, sve ove petlje je moguce kombinovati u zavisnosti od situacije, potreba ili kako vama odgovara.

%d bloggers like this: