Dodatne teme (nastavak)

Ovo je nastavak prethodne lekcije, koju smo odvojili radi preglednosti i bolje organizacije. Danas pricamo o Setovima i upotrebi komentara. Na kraju cemo dodati i mali zadatak iz programiranja.

1) Setovi na neki nacin podsecaju na Rekorde i predstavljaju predefinisane skupove podataka istog tipa. Ovi tipovi mogu biti standardni za Pascal ili se mogu zasebno deklarisati. Manipulacije sa Setovima su dinamicnije i blize savremenom pristupu rada sa podacima. U tom smislu se moze reci da savremene baze podataka predstavljaju kombinaciju dinamike setova i mogucnosti rekorda, zarad vece efikasnosti u radu. Pogledajmo jedan moguci primer sa Setovima.

program Setovi;
uses Crt;

type
dan = (Po,Ut,Sr,Ce,Pe,Su,Ne);
dani = set of dan;
var
bla:dan;
a,b,c:dani;

begin
a := [Po,Ut,Sr,Ce,Pe,Su,Ne]; //definisemo sve dane
b := [Su,Ne]; //definisemo vikend
c := a - b; //racunamo radne dane
write ('Radni dani su: ');
for bla in c do begin
write(bla); write(', ');
end;
//brisemo poslednji zarez
GotoXY(WhereX-2,1); ClrEol;
writeln; readln;

end.

U ovom programu smo najpre definisali tipove dan, sa imenima dana u nedelji, i nakon toga dodali i set sa imenom dani. Zatim smo dodali varijable oba tipa i deklarisali ih. Nakon toga smo od cele nedelje oduzeli dane vikenda i dobili radne dane. Na kraju smo izveli mali kozmeticki trik, da bi obrisali poslednji zarez u izvestaju. Najpre smo pomerili kursor dva mesta u levo, i obrisali sve karaktere koji su u nastavku. Funkcije GotoXY i WhereX su deo Crt unita. Prva pomera kursor a druga ocitava njegovu X (horizontalnu) poziciju. Vise o setovima pogledajte ovde a o Crt funkcijama ovde, gde mozete naci detaljne nacine upotrebe u FPC kompajleru.

2) Upotreba komentara

Sada cemo se pozabaviti upotrebom komentara u procesu debagovanja i razvoja programa. O standardnoj upotrebi komentara je vec bilo reci, i do sada smo ih intenzivno koristili. Komentari u jednom redu se najcesce prave sa dve kose crte, iza kojih sledi komentar. On vazi od mesta na kome se kose crte nalaze, bilo na pocetku linije ili u nastavku koda. Drugi format je vezan za komentare u vise redova za koje u savremenom Pascalu koristimo viticaste zagrade. Naravno, potpuno je validno da ostavljate komentare mesajuci ove stilove. Oba primera smo vec demonstrirali u lekciji Hello World, u kome smo pomenuli i treci tip komentara izmedju zagrade i zvezdice, koji je danas u retkoj upotrebi, ali je ostao validan zbog povratne kompatibilnosti. Razne forme komentara sa primerima mozete videti ovde.

Postoji vise razloga za ostavljanje komentara. Najpre, narocito ako volite da optimizujete stvari, desava se da otvorite sopstveni kod nakon duzeg vremena i niste sasvim sigurno sta je pisac hteo da kaze pre deset godina. Onda je korisno da usput stoji i objasnjenje. Drugi razlog je svakako timski rad, jer tek tu je tesko ponekad odgonetnuti misli pisca obzirom da iskusni programeri imaju svoj stil. I na kraju ono sto se retko pominje, to je upotreba komentara tokom razvoja. Cesto zelimo da vidimo kako ce deo koda raditi u malo drugacijoj verziji ili bez dela programa. Umesto da brisemo i ponovo kucamo sve, jednostavno mozemo deo koda “zakomentirati” i videti sta se desava. Sada cemo za ilustraciju upotrebiti nas prethodni primer sa setovima.

Ucitajte program sa setovima i pokrenite ga, vec vam je poznat output. Sada zakomentarisite GotoXY liniju, tako da kraj programa izgleda ovako:

//brisemo poslednji zarez
//GotoXY(WhereX-2,1); ClrEol;
writeln; readln;

end.

Videcete da ce iza poslednjeg dana stajati zarez. Ako vas zanima zasto smo pomerili kursor za dva, umesto za jedno mesto, zakomentirajte i writeln komandu na sledeci nacin:

//brisemo poslednji zarez
//GotoXY(WhereX-2,1); ClrEol;
//writeln;
readln;

end.

Postace jasno da iza zareza postoji jos jedan space kao posledica poslednjeg dela iz for petlje. Na ovaj nacin mozete menjati i popravljati vas kod i dovesti ga precizno gde zelite.

Za kraj smo ostavili mali zadatak koji ce vam mozda biti zanimljiv. U koliko imate volje i to vas zanima, napravite program koji ce najpre izabrati random broj od 1 do 70, a onda traziti od igraca da ga pogodi u seriji pokusaja. Mozete koristiti bilo koje tehnike, jer je u programiranju moguce doci do resenja na mnogo razlicitih nacina.

Vise o upotrebi komentara u debagovanju pogledajte ovde.

Advertisements

Python stil skidanja video materijala

Ovo je jedan zgodan, besplatan i open source nacin skidanja video materijala sa raznih izvora. Ono sto me je navelo da pisem o njemu, je mogucnost skidanja video lekcija sa Udemy MOOC platforme. Ta opcija obicno postoji samo ako je autor kursa dozvoli, sto se retko desava. Sa druge strane, cesto je korisno imati video podsetnik lekcija kurseva koje smo prosli. Za one koji ne znaju, Udemy je na neki nacin jedinstven po tome sto prakticno svako moze napraviti svoj kurs, dok je vecina drugih MOOC provajdera pre svega fokusirana na akreditovane obrazovne ustanove. Samim tim, izbor je jako raznovrstan uz bogatu ponudu kompjuterskih kurseva svake vrste. Medjutim, kako su brojni korisnici primetili, platforma je zahtevna po pitanju resursa (CPU) zbog specificnog pristupa. Zbog ovoga je mogucnost downloada video materijala dodatno korisna.

U pitanju je program youtube-dl, koji je napisan u pythonu, opensource i cross platformski. Lista sajtova sa koje moze da skida materijale zaista je impresivna. Windows verzija je izuzetno laka za upotrebu, jer vec sadrzi Python u sebi, dok je za ostale verzije potrebna instalacija neke verzije poput v2.6/2.7 ili v3.2 i novije. U vecini distroa je Python vec instaliran.

Adresa projekta je na github-u ovde, a lista sajtova koje podrzava ovde. Treba jos napomenuti da verzija za Windows, iako ima ugradjen Python, trazi Visual C++ Redist, koji se moze skinuti sa MS sajta, ako vec nije instaliran u okviru nekog paketa.

Pogledajmo ukratko kako da koristite ovaj program pod Win-om. Naravno, pojedine korake mozete da promenite tako da se uklope u vase potrebe. Najpre ako nemate podrsku za Visual C++ 2010, skinite Redist i instalirajte. U koliko vam program javi dll gresku, ovo je najcesci razlog.

Zatim u root-u C:\ particije napravite folder sa zgodnim imenom, na primer ‘bin’ i u njega stavite kompajlirani exe programa, koji mozete skinuti ovde. Pokrenite dos prompt sa Start > Run > cmd, i ukucajte: cd c:\bin; da bi usli u pomenuti folder. Zatim kucajte: youtube-dl -h; i ako dobijete listu komandi, znaci da sve radi kako treba. U suprotnom, moguce je da nemate instaliranu podrsku koju smo pomenuli.

Sada cemo experimentalno skinuti jedan video sa youtube. Pokrenite Dos prompt (Start > Run > cmd), zatim predjite u folder sa: cd c:\bin i kucajte jednostavnu komandu:

youtube-dl "https://www.youtube.com/watch?v=wmin5WkOuPw" -f mp4

Ova komanda ce skinuti video Firestarter u mp4 formatu, u folderu gde se nalazi exe fajl. U koliko se ne navede format, program ce skinuti native webm format koji je vecini ljudi neupotrebljiv. Za sva fina podesavanja, najbolje je pogledati dokumenta ili potraziti preko gugla, da bi dobili tacno ono sto zelite.

Pogledajmo sada ono od cega smo poceli, a to je skidanje kompletnih Udemy kurseva. Naravno, najpre je potrebno da imate nalog na Udemy-ju kao i da budete upisani na kurs. U tom slucaju, najbolje da proverite da li je autor kursa ostavio mogucnost downloada (tockic na videu dole desno). Ako nije onda vam ovaj Python program moze pomoci preko sledece sintaxe:

youtube-dl -u username -p sifra link-do-kursa

Recimo, pretpostavimo da nekog zanima Tarot i da je upisao trenutno besplatni kurs na ovoj adresi. Takodje, treba imati u vidu da je username na Udemy zapravo vasa email adresa, a link do kursa mora biti kompletan. U tom slucaju komanda bi izledala otprilike ovako:

youtube-dl -u bla@bla.net -p blabla.sifra "https://www.udemy.com/fun-easy-intro-to-all-78-tarot-cards-best-for-beginners"

Ovo ce bez greske skinuti sve video materijale sa kursa u mp4 formatu, pod uslovom da ste zaista i prijavljeni za taj kurs, bilo da je besplatan ili placen. Naravno, isti se princip moze primeniti i na ostale sajtove koji traze da budete ulogovani dok skidate materijale.

Obzirom na komplexnost programa, nemoguce je obraditi sve opcije. Ali je iscrpan tutorijal dostupan na sajtu developera, kao i prilikom pretrage na google, obzirom na sve siru bazu korisnika. Ovo je ujedno i odlicna demonstracija koliko Python moze biti mocan i koristan za konkretnu upotrebu.

Podesavanje rezolucije, kada je zakucana na minimalnu (640×480)

Malo nezgrapan naslov, ali eto, nisam smislio bolji. :)
Elem, pre neki dan sam instalirao Linux Mint 18 Mate na laptop Fujitsu Siemens Amilo La1703. U pitanju je stari laptop, sa 2 GB ram memorije, ekran je 15″ rezolucije 1280×800 piksela. Procesor je AMD Sempron 3500+, 1.8GHz. Graficka kartica je VIA Chrome9 HC.
Posle zavrsene instalacije sam imao problem, da je rezolucija ekrana bila zakucana na 640×480 piksela i nije bilo mogucnosti da se podesi bilo koja visa rezolucija.
Posle vise eksperimentisanja i isprobavanja, na kraju sam definisao xorg.conf fajl i posle toga je rezolucija ekrana uspesno namestena na 1280×800 piksela.

Pokrenuo sam terminal i ukucao:

gksudo xed /etc/X11/xorg.conf

Zatim sam u xorg.conf upisao sledece:

Section "Device"
	Identifier	"Device0"
	Driver	"vesa"
EndSection
Section "Monitor" Identifier "Configured Monitor" HorizSync 30.0-62.0 VertRefresh 50.0-70.0 EndSection
Section "Screen" Identifier "Default Screen" Device "Card0" Monitor "Configured Monitor" DefaultDepth 24 SubSection "Display" Modes "1280x800" "1024x768" "800x600" EndSubSection EndSection

Zatim sam restartovao kompjuter.

Instaliranje mreznog drajvera sa Ndiwsrapper-om

Ndiwsrapper je program, koji omogucava koriscenje Windows drajvera za mrezne uredjaje na Linux operativnim sistemima.

Drajveri za neke mrezne adaptere nisu dostupni na Linux-u. Ndiwsrapper omogucava korisccenje Windows drajvera koji su dostupni za, skoro sve, savremene PC mrezne adaptere.

Preuzmite Windows drajver za vas mrezni uređaj. U ovom primeru cu koristiti Fujitsu Siemens Computers WLAN 802.11b/g (SiS163u) drajver.

Pokrenite terminal

  • U terminalu kucajte:
    mkdir -p ~/wlan
  • Zatim, raspakujte arhivu sa drajverom u direktorijum: ~/wlan
  • Promenite aktivni direktorijum kucajuci:
    cd ~/wlan
  • Kucajte:
    sudo ndiswrapper -i sis163u.inf
    Ovim ste instalirali drajver. U ovom primeru koristim sis163u.inf drajver. Ako imate neki drugi mrezni uredjaj, onda morate kucati ime drajvera za taj uredjaj.
  • sudo ndiswrapper -l
    Ovom komandom listate ndiswrapper drajvere. Korisno da proverite da li ste uspesno instalirali drajver.
  • Zatim treba da se upise konfiguracija za modprob. To se radi komandom:
    sudo ndiswrapper -m
  • Posle toga, ukucajte:
    sudo ndiswrapper -ma
    Ovo upisuje modul alias konfiguracije za sve uredjaje.
  • Zatim kucajte:
    sudo depmod -a
    sudo modprobe ndiswrapper

Na kraju restartujte kompjuter.

Sada proverite da li mrezni adapter radi kako treba.

Gimp tutorijal 75 – Gimp 2.10.0

Pirkaz nove verzije Gimpa 2.10.0.

GIMP 2.10.0

Najzad, posle vise godina iscekivanja, pojavio se GIMP 2.10.0. Ima na tone noviteta.
– Obrada slika je skoro potpuno prebacena u GEGL. Omogucavajuci 16 i 32 bitnu obradu slika. Hardverski ubrzanu i “multi-threaded” obradu piksela,
– Nekoliko novih alata i poboljsani stari alati.
– Canvas preview za sve filtere koji su prebaceni u GEGL.
– Podrska za nekoliko novih formata slika (OpenEXR, RGBE, WebP, HGT), kao i poboljsana podrska za mnoge od starih formata slika.
– Mogucnost pregleda i izmene metadata podataka, Exif, XMP, IPTC i DICOM.
I jos dosta toga….

Kada se malo bolje upoznam sa novim Gimpom (i naravno kada nadjem vremena), bice i video prikaz nekih od novih opcija i alata u Gimpu.

Linux verziju Gimpa, mozete instalirati iz Flatpaka.
Pokrenite terminal i kucajte komandu:
flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref

Zvanicna web prezentacija je na adresi:
https://www.gimp.org/

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.

Linux tutorijal 27 – Steghide program za steganografiju

Prikaz programa Steghide za steganografiju.
Steghide mozete instalirati komandom iz terminala:
sudo apt install steghide

Linux tutorijal 26 – ClamAV

Prikaz ClamAV Open Source antivirusa.

ProtonMail

ProtonMail je bezbedan email servis. Bezbedan u smislu da su korisnicki emailovi enkriptovani. Zatim, bezbedan je i u smislu zastite privatnosti i podataka. ProtonMail je smesten u Svajcarskoj, takodje svi serveri su smesteni u Svajcarskoj i svi korisnicki podaci su zasticeni strogim svajcarskim zakonima o zastiti privatnosti.

ProtonMail razvija grupa iz MIT-a i CERN-a.

ProtonMail je osnovan 2013. godine od strane naucnika koji su se sastali u CERN-u i bili su vodjeni zajednickom vizijom sigurnijeg i privatnijeg interneta. Od tada, ProtonMail se razvio u globalni napor da zastiti gradjanske slobode i izgradi sigurniji internet.

Da bi ste otvorili nalog, nisu potrebni (skoro) nikakvi licni podaci. Jedino sto se trazi je email adresa ili mobilni broj telefona, gde ce da se posalje verifikacioni kod za registraciju. Po onome sto pise, ti podaci se ne cuvaju, vec se cuvaju samo hashevi. I ceo postupak otvaranja naloga kratko traje. Ovaj email servis je lak za upotrebu i moderno je dizajniran. Besplatan servis, koji pruza ProtonMail Vam je ogranicen na 500 mb prostora za Vase emailove i protok od 150 emailova dnevno, moze ga koristiti 1 korisnik i mozete imati jednu email adresu. Postoje i servisi koji nisu besplatni i pruzaju vece mogucnosti koriscenja, kao na primer vise prostora za email, vise korisnika, vise email adresa itd…

Pored, obicnih emailova, moguce je slati enkriptovane emailove i emailove, koji se cuvaju neko odredjeno vreme, posle se automatski brisu. Ovo funkcionise, cak i ako saljete nekome email na email adresu, koja nije na ProtonMailu, vec na primer na Yahoo Mailu, Hotmailu ili GMailu. U tom slucaju ce korisnik koji primi takav email dobiti link na server ProtonMaila, gde moze procitati poruku. Naravno, potrebno je znati i sifru za dekriptovanje takve poruke.

Web adresa za ProtonMail je: https://protonmail.com/

%d bloggers like this: