Category Archives: Razno

Pascal: Dodatne teme

U danasnjoj lekciji obradjujemo teme koje se nisu nasle na dnevnom redu. To su Setovi, grananje sa upotrebom Case Of, i rad sa greskom uz Try-Except konstrukciju. Obzirom da nisu esencijalne, dacemo samo osnovne primere za svaki pristup. Ako vam se bas dopadnu, uvek ih mozete bolje upoznati preko preporucenih sajtova.

1) Case Of

U ranijem textu o kontroli toka programa, obradili smo if/then komande, koje se generalno najvise koriste u razlicitim programskim jezicima. U Pascalu postoji i elegantna Case Of konstrukcija, pomocu koje mozemo proveriti vise mogucnosti odjednom. Pogledajmo primer sa pogadjanjem brojeva.

program CaseOf;

var
b:integer;

begin
b := 0;
while (b<>35) do begin
write('Unesite broj od 1 do 70: ');
readln(b);
case (b) of
1..34 : begin writeln;
writeln('Trazeni broj je veci'); writeln;
end;
36..70 : begin writeln;
writeln('Trazeni broj je manji'); writeln;
end;
35 : begin writeln;
writeln('Cestitamo, pogodili ste broj');
readln; end;
else begin writeln;
writeln('Broj mora biti izmedju 1 i 70'); writeln;
end; end;
end;
end.

U ovom primeru najpre smo definisali uslov za izvrsenje programa i zatrazili unos broja koji zatim proveravamo kroz nekoliko mogucnosti. U prvom slucaju broj je manji, u drugom veci, u trecem tacan dok else opcija daje odgovor u koliko korisnik nije sledio uputstva. Za Case-Of konstrukciju Else deo nije neophodan. Vise o mogucnostima Case Of pogledajte ovde i ovde.

2) Try-Except

Ovde se radi o dobroj praxi provere mogucnosti rada, da ne bi doslo do nekontrolisanog izlaska iz programa. Uvek je pametnije kontrolisati izlaz uz planirani output, nego prepustiti greske slucaju. U tom smislu za jednostavan a koristan primer, upotrebicemo nas prethodni program. Najpre pokrenite program CaseOf koji smo upravo probali, i umesto punog broja unesite decimalni broj ili neko slovo. Videcete da se program jednostavno zatvorio sam od sebe. Ono sto se zapravo desava je da ocekivani unos mora biti integer tipa, i u svakom drugom slucaju dolazi do greske koja nekontrolisano zatvara program. Sada cemo preraditi prethodni primer da hvata ovu gresku i daje odgovor.

program TryExcept;
uses
sysutils;
var
a:boolean;
b:integer;

begin
b := 0;
while (b<>35) do begin
write('Unesite broj od 1 do 70: ');
try //pokusaj citanja b
a := true; readln(b);
except //ako dodje do greske
writeln;
writeln('Neophodno je da unesete integer');
writeln; a := false; end;
case (b) of
1..34 : begin writeln;
writeln('Trazeni broj je veci'); writeln;
end;
36..70 : begin writeln;
writeln('Trazeni broj je manji'); writeln;
end;
35 : begin writeln;
writeln('Cestitamo, pogodili ste broj');
readln; end;
else begin
if a then begin writeln;
writeln('Broj mora biti izmedju 1 i 70'); writeln;
a := false; end; end; end;
end;

end.

Najpre smo ucitali unit sysutils, koji je neophodan za rad sa sistemskim greskama. Nakon toga smo organizovali tok programa kao u prethodnom slucaju, uz hvatanje greske prilikom unosa varijable b. Ako do nje dodje, umesto izlaska iz programa, pokrece se alternativni kod koji salje poruku, dok program nastavlja sa izvrsavanjem. Kontrolni boolean omogucava elegantniji nastavak programa jer preskace nepotrebnu finalnu poruku u slucaju sistemske greske. Vise o Try-Except pogledajte ovde i ovde.

Inace, Lazarusov forum je odlicno mesto za nalazenje resenja kada je Pascal u pitanju.

Advertisements

Pascal: Rekordi

Rekordi predstavljaju skup razlicitih tipova podataka, rasporedjenih po jedinicama. Na primer, dva stringa i dva broja, pa vise jedinica koje ih sadrze. U tom smislu oni su zapravo rudimentarne baze podataka, koje su vremenom izasle iz upotrebe sa razvojem modernih i nezavisnih baza. Ipak, u cilju ucenja programiranja, obradicemo i ovu kategoriju. Pogledajmo osnovni primer rekorda.

program Rekordi;
//definisemo rekord bla sa elementima
type bla = record
im,pre,op:string;
god:integer;
end;
var //definisemo varijable tipa bla
b1,b2:bla;

begin
//unos podataka
b1.im := 'John';
b1.pre := 'Smith';
b1.god := 1983;
b2.im := 'Elvis';
b2.pre := 'Prisli';
b2.god := 1935;
//ispis podataka
writeln(b1.im,' ',b1.pre,' je rodjen ',b1.god, ' godine.');
writeln(b2.im,' ',b2.pre,' je rodjen ',b2.god, ' godine.');
readln;
end.

U nasem programu smo najpre definisali bla kao rekord sa odredjenim elementima, a zatim deklarisali dve varijable tipa bla. Nakon toga smo uneli podatke u nas rekord a zatim ih ispisali na ekranu. Za sledeci primer cemo preraditi ovaj program tako da kombinuje rekorde i nizove.

program Rekordi2;
uses crt;
//definisemo rekord bla sa elementima
type bla = record
im,pre:string;
god:integer;
end;
var
//definisemo varijablu kao bla niz
b:array[1..3] of bla;
n:integer;

begin
//unos podataka
for n := 1 to 3 do begin
write('Unesite Ime broj ',n,': '); readln(b[n].im);
write('Unesite Prezime broj ',n,': '); readln(b[n].pre);
write('Unesite Godiste broj ',n,': '); readln(b[n].god);
clrscr;
end;
//ispis podataka
writeln('Podaci su sledeci:');
for n := 1 to 3 do begin
writeln(n,'. ','Ime: ',b[n].im,' - Prezime: ',b[n].pre,' - Godiste: ',b[n].god);
end;
readln;
end.

Ovde smo najpre definisali rekord za elementima, a onda smo deklarisali niz za pomenuti rekord. To nam omogucava da koristimo loopove za unos i ispis podataka, sto smo i iskoristili.

Vise o rekordima mozete videti ovde i ovde. Takodje, pogledajte primere odavde.

Pascal: Rad sa fajlovima

Kao i vecina modernih programskih jezika, Pascal ima brojne funkcije vezane za fajlove. Moguce ih je kreirati, pisati u njima, dodavati materijal, brisati, kopirati itd. Komande za fajlove nalaze se u unitu Sysutils, koji najpre standardno ucitavamo pomocu Uses. Pogledajmo nekoliko primera.

program Kreiranje;
uses sysutils;
var
a:textfile;
b:string;

begin
AssignFile(a, 'bla.txt'); //definisemo ime fajla
rewrite(a); //kreiramo ga
writeln(a,'Hello World!'); //upisujemo text
closefile(a); //zatvaramo fajl
writeln('Fajl je napravljen');
readln; //pauza za proveru
writeln('Text za dodavanje:');
readln(b);
append(a); //produzavamo fajl nasim textom
writeln(a,b);
closefile(a); //zatvaramo fajl drugi put
writeln('Text je dodat');
readln;
end.

U ovom programu najpre smo definisali fajl tako sto smo mu dali ime. Zatim smo ga kreirali, upisali u njega kratak text i zatvorili. Nakon toga smo ga opet otvorili, dodali novi text na postojeci i zatvorili. Inace, preporuka je da primere u ovoj lekciji isprobavate u Lazarusu sa: Project > New Project > Simple Program. U koliko ipak zelite Dev-Pascal, najpre iskompajlirajte program, pa ga pokrenite iz sopstvenog foldera. Ovo je neophodno zbog nedostataka u pomenutom okruzenju, koji su otklonjeni u Lazarusu.

Za sledeci program neophodno je da prethodno kreirani bla.txt bude u istom folderu sa izvrsnim exe fajlom. Ako pravite projekte u zasebnim folderima, jednostavno iskopirajte text fajl iz prethodnog primera u njega.

program Citanje;
uses sysutils;
var
a:textfile;
b:file of byte;
n:string;

begin
//proveravamo prisustvo fajla
if fileexists('bla.txt') then
begin
writeln('Nasli smo ga!'); //obavestenje ako je tu
//otvaramo fajl kao binarni
assign(b,'bla.txt');
reset(b);
//proveravamo duzinu
writeln('Duzina fajla u bajtovima: ', filesize(b));
close(b);
//otvaramo fajl kao textualni
assign(a,'bla.txt');
reset(a);
writeln('----------');
writeln;
writeln('Sadrzaj fajla je:');
//ispisujemo sadrzaj do kraja
while not eof(a) do //provera da li je kraj
begin
readln(a,n);
writeln(n);
end;
readln;
end else begin
//obavestavamo ako nije tu
writeln('2x0=0, Fajla nije ni bilo');
readln; end;
end.

U ovom primeru najpre proveravamo da li fajl postoji. Zatim ga otvaramo kao binarni, da bi mogli da iscitamo njegovu duzinu. Nakon toga ga ponovo otvaramo kao textualni, da bi iscitali sadrzaj. Ovaj pristup je neophodan jer nisu sve funkcije dostupne za svaki tip fajla. Na kraju ispisujemo gresku za slucaj da ga nismo nasli.

Ovim smo pokrili neke od osnovnih metoda za rad sa fajlovima. Vise informacija mozete naci ovde i ovde.

Malware Fundamentals

Malware Fundamentals
https://www.cybrary.it/verify-certificate/
Certification Number: SC-935c75f14-1ab14a

CREATE A SUBNET

CREATE A SUBNET
https://www.cybrary.it/verify-certificate/
Certification Number: SC-935c75f14-ff674

Security Assessment & Testing

Security Assessment & Testing
https://www.cybrary.it/verify-certificate/
Certification Number: SC-935c75f14-83cd23

SECURITY MISCONFIGURATIONS

SECURITY MISCONFIGURATIONS
https://www.cybrary.it/verify-certificate/
Certification Number: SC-935c75f14-fc2853

Pascal: Funkcije i procedure (nastavak)

Ovo je nastavak prethodnog texta koji odvajamo zbog preglednosti. Kao sto smo vec pomenuli, funkcije i procedure su dva tipa potprograma. Ovo vazi za pascal, python kao i vecinu modernih programskih jezika. Razlika je sto funkcije vracaju neku vrednost u glavni program, dok procedure jednostavno urade ono zbog cega su pozvane i tu im se zadatak zavrsava. One medjutim mogu primati argumente iz glavnog programa, na osnovu kojih ce izvrsiti svoj zadatak. Pogledajmo primer:

program Procedura;
uses crt;
var
n:integer;

procedure lines(c:byte; lin:integer);
var
m:integer;
begin
textcolor(c);
gotoXy(10,lin);
for m := 1 to 10 do
begin
Write(chr(196));
end; end;

begin
for n := 1 to 7 do
begin
lines (n,n);
end;
readln;
end.

U ovom primeru nasa procedura ispisuje linije u razlicitim bojama u sukcesivnim redovima. Argumente koje prima su boja i linija. Iz glavnog programa for petlja poziva proceduru i salje joj parametre za oba elementa koji se povecavaju za jedan. Rezultat je program koji ispisuje 7 linija u isto toliko boja.

Kao sto smo vec pomenuli, procedure mogu da rade i bez argumenata. Tada ih jednostavno pozivamo iz glavnom programa imenom. U tom slucaju funkcionisu recimo kao klasicni potprogrami iz Basica. Sada cemo prethodni primer preraditi tako da funkcionise na ovaj nacin.

program Procedura2;
uses crt;

procedure xyz;
var
n,m:integer;
begin
for n := 1 to 7 do
begin
textcolor(n);
gotoXy(10,n+5);
for m := 1 to 10 do
begin
Write(chr(196));
end; end; end;

begin
write('Nasih 7 linija >>');
xyz;
readln;
end.

Ovde smo najpre definisali proceduru xyz koja crta 7 linija u duginim bojama. Zatim smo jednostavno pozvali xyz iz glavnog programa. Naravno, ovaj pristup ima smisla u koliko se radnja ponavlja vise puta. Primere namerno pravimo tako da budu jednostavni, da bi se lakse ilustrovali principi i metod rada.

Vise o procedurama procitajte ovde i ovde.

Telegram messenger

Telegram je relativno nov i jako efikasan instant messenger, sa funkcijama i karakteristikama koje ga izdvajaju i cine vrlo pozeljnim. Najpre podrzava sve mobilne i desktop operativne sisteme i na svima ima istu funkcionalnost. Verzija za Windows podrzava XP i poseduje portabilnu verziju. Visoka kompatibilnost dodatno je podrzana cloud tehnologijom, tako da je nalogu moguce pristupiti sa svih uredjaja. Svi podaci i komunikacija su visoko enkriptovani, a za one koji zele dodatnu sigurnost, moguce je ukljuciti i end user direktan enkriptovani chat. Takodje, u cilju poboljsanja sigurnosti, ponudjena je stalna nagrada od 300.000$ svakome ko uspe da desifruje poruke. Vise detalja ovde.

Od standardnih opcija, program podrzava chat, voice pozive, razmenu fajlova i slika, audio poruke, grupne razgovore, emotikone, stickere, programiranje botova i slicno. Klijent strana je open source pod GPL licencom, server strana je zatvorena i vlasnicka a dostupan je i API za developere. Jedina eventualna mana je vezivanje naloga za mobilni broj, bar iz mog ugla. On se medjutim moze sakriti postavljanjem username-a, koji dodatno setuje link za lakse povezivanje. Telegram se moze koristiti i iz browsera, nakon registracije. Na kraju bih dodao da je klijent izuzetno lagan po resurse, kad se uporedi sa konkurencijom, sto mu je mozda i najveca prednost.

Vise informacija, FAQ i download na Telegram sajtu i Wiki stranici.

Python http server u jednoj liniji u terminalu

Kao sto naslov kaze, uz pomoc Pythona, iz terminala mozete podici web, odnosno http server u samo jedno komandnoj liniji, bez potrebe za instaliranjem Appache web servera i slicnih komplikacija. Idealno, ako na brzinu zelite da podignete server da probate nesto ili da delite fajlove preko lokalne mreze.
Server ce biti podignut na portu 8000, ako zelite na portu 80 ili nekom drugom portu ispod 1024, treba da kucate sudo ispred komande.
Pokretanje servera sa sudo privilegijama nikako ne preporucujem.

U narednim primerima ce biti podignut http server. Dostupni fajlovi ce biti u trenutno aktivnom direktorijumu.
Za potrebe testiranja, napravite direktorium i udjite u taj direktorijum, u terminalu kucajte:
mkdir brzihttpserver
cd brzihttpserver

Radi potrebe testiranja iskopirajte fajlove u taj direktorijum. Ti fajlovi ce biti vidljivi u web pregledacu.
Ako se u direktorijumu nalazi fajl index.html, taj fajl ce biti automataski otvoren u web pregledacu.

Pokrenite terminal i kucajte sledece:
Primeri za Python 2.x:

Pokrece server na portu 8000:
python -m SimpleHTTPServer
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python -m SimpleHTTPServer 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

Primeri za Python 3.x:

Pokrece server na portu 8000:
python3 -m http.server
Sada u web pregledacu, u polje za adresu kucajte: 127.0.0.1:8000 ili ip_adresa_servera:8000 ako se server nalazi na drugom umrezenom kompjuteru.

Pokrece server na portu 80:
sudo python3 -m http.server 80
Ovde je dovoljno kucati 127.0.0.1 ili ip adresu umrezenog kompjutera, ako se server nalazi na drugom kompjuteru.

%d bloggers like this: