Izrada dijela programske potpore mreže
Pozdrav svima!
Stvar je slijedeća, u tijeku je izrada programske infrastrukture naše bežične mreže a kao što sami znate ili ne znate, to je malčice prevelik posao za jednog čovjeka (mene). S tim u vidu, a i stoga što smo već polako ali sigurno ušli u 2009.g. a sustav još nije u potpunosti razvijen, zanima me postoji li u ovoj našoj maloj udruzi ljudi s iskustvom i ljubavi prema programiranju.
Volio bih sastaviti tim od 3-5 ljudi pa da zajedničkim snagama, na našu radost i na radost svih ostalih članova, upotpunimo i poboljšamo programsku infrastrukturu mreže.
Uvjeti koje biste trebali zadovoljiti su:
- Želja za učenjem (trebat će vam, al' stvarno)
- Nešto slobodnog vremena
- Još malo slobodnog vremena
- Poznavanje osnova programiranja:
- rad s matricama (poljima)
- dinamičko alociranje memorije
- osnovni algoritmi sortiranja
- rad s datotekama (čitanje, brisanje, sortiranje)
- Poznavanje engleskog jezika (gotovo sva dokumentacija je na engleskom)
- Jesam li spomenuo slobodno vrijeme ?!
Programirat će se u programskim jezicima C i Java, i u ostalima prema potrebi. Tako npr. ako ste odlični u Pascalu a o C-u ne znate ništa nema problema. Za linux postoje odlični pascal compileri, kao u ostalom i za većinu drugih programskih jezika.
Kao što (ni)ste primijetili, spomenuo sam Linux. Naime kako je mreža bazirana na Linuxu, nužno je da nam naša programska potpora radi također na Linuxu (logično, zar ne?!). Svi programi koji će se vrtiti na serverima bit će komandnolinijski i pisat će se u prvenstveno C-u, po potrebi C++u, Pascal-u i sličnim jezicima. Sve što se da kompajlirati gcc-om, kompajlirat će se gcc-om. Ovo vam omogućuje da radite na windowsima, a kasnije vaše sourceove samo kompajlirate i testirate na Linuxu jer je ovaj kompajler dostupan na obje platforme.
Uz sve jezike spomenuo sam i Javu. Javu ćemo intenzivno koristiti. Po sintaksi je slična C-u, objektno je orjentirana i vrlo popularna. Nama je zanimljiva zbog vrlo dobre podrške, cijene (besplatna), jednostavnosti, brojnih primjera na netu, i najbitnije zbog svoje multiplatformnosti.
Što će se raditi u Javi?
- Web sučelje za manipulaciju korisnicima, pregled statistika, objavu obavijesti i slično. (Ovaj sustav je već napola dovršen! - famozni TUMARS)
- Klijentski softver koji će pokretati svi članovi mreže, a koji će omogućavati logiranje na mrežu i praćenje korisnika (u svrhu sprečavanja krađe podataka, mac adresa i sl.)
- Prema potrebi dodatni programi za olakšavanje administriranja mreže ili nekih njenih dijelova
Spomenuo sam Klijentski softver koji će pokretati svi članovi mreže. Pošto je to jedna od bitnijih karika u lancu kojeg sam zamislio, i prva na popisu za žuran dovršetak, evo nekih detalja oko toga.
Najprije sam htio izbjeći ovakvu aplikaciju i ponuditi ljudima login putem web sučelja, ali nakon dužeg razmišljanja došao sam do zaključka da ova metoda neće spriječiti zloupotrebu ukradenih mac adresa. Klijentska aplikacija hoće. Ova će aplikacija biti obavezno pisana pomoću Java Web Start tehnologije, što nam omogućuje lako pokretanje na svim platformama za koje je Java dostupna, lak update aplikacije i dodavanje novih mogućnosti i slično.
Mogućnosti aplikacije bi u početku trebale biti login na server (na TUMARS) putem https protokola, čime bismo onemogućili krađu lozinki. Kad login sustav proradi, u aplikaciju bismo ugradili chat klijent (baziran na Jabber ili IRC protokolu, prema dogovoru), tako da bi svi članovi udruge bili povezani i da bi se do svih moglo u trenutku doći i prenijeti im važne obavijesti. Ugradili bismo i čitač RSS feedova preko kojih bismo prenosili hitne obavijesti (vezano uz članarine, događanja i slično).
Ovo je bio ukratko opseg poslova koji nas očekuje, pa molim zainteresirane da se jave u ovom threadu i ukratko napišu s čime dobro barataju, a s čime baš i ne, pa da možemo složiti nekakav tim i raspodijeliti zadatke. Nemojte da vas nepoznavanje nečeg navedenog gore kao poželjnog zastraši, slobodno se javite jer i najmanja pomoć je dobrodošla.
Unaprijed hvala svima!


Rado bih se uključio u nešto kreativno. Ne mogu ništa posebno obećati ali znam ponešto programirati u javascriptu i php te rad s mysql-om. Napravio sam samo jedan programčić za maturalnu radnju tako da to možete vidjeti ovdje: http://f4m.890m.com/ , znam da nije ništa posebno ali eto. Usput znam osnove c-a, ali stvarno samo osnove, nisam napravio niti jedan približno kompliciran program u c-u. Eto ako budem mogao pomoći ću.

Odlično, evo ovako ćemo.
Stavit ću vam ovdje jedan tutorial: http://www.udruga-teng.org/marko/Srpski_skolski_C_tutrial.zip . Tutorijal sam pronašao na elitesecurity forumu, više o tome ovdje: http://www.elitesecurity.org/t219106-Srpski-skolski-tutorial .
Kad prođete kroz ovaj tutorial, postavit ću nekoliko probnih zadataka, da vidimo gdje što kome zapinje, i da iskristaliziramo bitne stvari. Nakon toga krećemo s poslom.
Ako netko ima nekakvih pitanja, slobodno pitajte ovdje!
Pozdrav i hvala na javljanju!

Pozdrav!
Nitko se ne javlja, zanima me u kojoj ste fazi, kako ide? Evo na slijedećoj stranici imate Editor i kompajler koji možete koristiti za pisanje programčića i vježbanje. Stvar je dakako besplatna i nalazi se ovdje: http://www.bloodshed.net/devcpp.html (skinite ovu verziju 5, najgornju na popisu). Kad spremate fajlove obavezno stavite nastavak .c, inače kompajler neće shvatiti da želite kompajlirati običan c kod, i pokušat će kompajlirati c++.
Uskoro ću stavit i 3 probna zadačića. Zapravo evo odmah jedan jednostavan za početak:
/**
* --+ Zadatak 1 +--
* Napisati program koji učitava ime i prezime osobe, te ispisuje poruku:
*
* Pozdrav Ime P., zelim vam ugodan dan!
*
* Ime predstavlja ime koje je korisnik unio a P inicijal prezimena.
*/
Oznake /* i */ su početak odnosno kraj komentara. Ovo sve skupa možete zalijepiti na početak zadatka da svi znamo o čemu se radi. Ako šta zapne pitajte, sutra stiže nešto mrvicu žešće.
Pozdrav!



Nisam stigao cijeli tutorijal proći pa ću još danas to učiti,a sada idem spavati...
Nema žurbe, treba spavat da sve to sjedne u glavu :) Ako ima kakvih problema, pitaj ovdje, to nije nešto što se može naučiti samo tako, jer učiš logiku programiranja. Sama sintaksa i naredbe će sjesti same od sebe, jer ako znaš na koji način riještit problem, tj. ako znaš napisati pseudokod onda u biti znaš programirati.


Ja sam čitao tutorial ali pošto sam totalni početnik, tj. nikad se u životu nisam s time susreo, trebat će mi malo duže da to sve pokopčam.
To mi je jasno, zato ako ima bilo kakvih nejasnoća pitaj ovdje. I obavezno isprobaj sve primjere iz skripte, probaj ih malo mijenjati pa vidi što se događa i slično. Samo iz čitanja nećeš ništa uspjeti.
Pitanje za sve, kako ide rješavanje zadatka?
Imam problem, program mi se ruši na kada treba izvršiti printf("%s" variabla[0]). Neznam jeli zato što koristim betu kompajlera ili...? Evo cjelog programa
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char ime[50], prezime[50];
- char prez = prezime[0];
- printf("Unesi ime: ");
- scanf("%s", ime);
- printf("\nUnesi prezime:");
- scanf("%s", prezime);
- printf("\n Pozdrav ");
- printf(ime);
- printf("%s", prezime[0]);
- printf(" zelim vam ugodan dan!");
- scanf("%s");
- }
Našao sam grešku. To bi trebalo biti to.
- /**
- * --+ Zadatak 1 +--
- * Napisati program koji učitava ime i prezime osobe, te ispisuje poruku:
- *
- * Pozdrav Ime P., zelim vam ugodan dan!
- *
- * Ime predstavlja ime koje je korisnik unio a P inicijal prezimena.
- */
- #include <stdio.h>
- #include <string.h>
- /*conio.h
- getchr()*/
- int main()
- {
- char ime[50], prezime[50];
- char prez = prezime[1];
- printf("Unesi ime: ");
- scanf("%s", ime);
- printf("\nUnesi prezime:");
- scanf("%s", prezime);
- printf("\n Pozdrav ");
- printf(ime);
- printf(" ");
- printf("%c", prezime[0]);
- printf(". , zelim vam ugodan dan!");
- scanf("%s");
- return 0;
- }

Mr.X., odlično! Drago mi je vidjeti da je netko shvatio tematiku, još će nešto biti od ovoga svega :)
Samo jedan komentar. Korištenje scanf funkcije za čitanje iz konzole (fajla ili bilo čega sličnog čiju duljinu ne znamo unaprijed) je jaaaako opasno! Korisnik može namjerno poslati više podataka nego što program očekuje i tako zloupotrijebiti sam program u svrhe koje nije namijenjen (dobivanje punog pristupa računalu i slično). Naime programski jezik C nema mehanizma zaštite od ovoga, pa je moguće slobodno pisati i brisati po memoriji programa bez ikakvih ograničenja.Više informacija: http://en.wikipedia.org/wiki/Buffer_overflow
Ovdje možete naći moje rješenje ovog zadatka, pa ga proučite, i ako nešto nije jasno, slobodno pitajte: http://www.udruga-teng.org/marko/zadatak1.c. Naša slova (čćžšđ)možda vam neće biti ispravno prikazana jer je datoteka u UTF-8 encodingu, a nisam siguran što se na windowsima i u dev-c++ koristi, u svakom slučaju, ako vam smeta konvertirajte :D
Dalje, došlo je vrijeme za zadatak br. 2
/*
* --+ Zadatak 2 +--
* Napisati program koji učitava dva broja (A i B), te u cjelobrojnoj aritmetici ispisuje rezultat
* operacija A-B, A+B, A*B, A/B, A mod B
*
* Primjer ispisa rjesenja za unesene brojeva 16 i 3
*
* 16-3=13
* 16+3=19
* 16*3=48
* 16/3=5
* 16 mod 3=1
*/
Ovaj je isto lagan, i očekujem da ćete ga riješiti bez štucanja.
Evo i treći:
/**
* --+ Zadatak 3 +--
* Napisati program koji ucitava POZITIVAN broj, te ga množi sa 2 i s 4, i dijeli s 2 i s 4, i ispisuje rezultat u obliku:
* X*2=Y
* X*4=Z
* X/2=Q
* X/4=R
*
* Primjer ispisa rjesenja za unesen broj 4
* 4*2=8
* 4*4=16
* 4/2=2
* 4/4=1
*
* NAPOMENA: Zabranjeno je koristenje operatora +, -, *, /, kao i petlji ili naprednih matematičkih funkcija!
*/
Ovaj je jako jednostavan ako shvatite u čemu je kvaka (HINT: Brojevni sustavi).
Mislim da je to to, ako mi još šta padne napamet, natipkat ću...
Poz!

Napomena uz 3. zadatak, riječ je o dakako cjelobrojnoj aritmetici, iako se to iz primjera ne vidi.
Edit:
Eh da, sjetio sam se, ako radite na windowsima postoji šansa da će vam se prozor zatvoriti čim pokrenete program. Da biste ovo spriječili, prije return tj. prije kraja programa upišite naredbu getchar();
Druga stvar, bez obzira što u skripti piše da se funkcija main piše kao void main(), obavezno ju pišite kao int main(). Naime funkcija main MORA vraćati (po c standardu) rezultat tipa int (dakle cijeli broj). Ovaj broj se proslijeđuje operacijskom sustavu, i služi mu kako bi znao da li je program završio normalno, ili s greškom. Dakle return 0 znači da je sve završilo u redu, dok brojevi različiti od 0 znače grešku.
Treća stvar, JAKO BITNA!!! Molim vas, pripazite na formatiranje evo vam u arhivi nekoliko datoteka. Sve su sintaksno ispravne, daju se kompajlirati i rade istu stvar. Kad ih proučite nadam se da ćete shvatiti da se isplati pisati lijepo :D http://www.udruga-teng.org/marko/primjeri-frmt.zip
- /*
- * --+ Zadatak 2 +--
- * Napisati program koji ucitava dva broja (A i B), te u cjelobrojnoj aritmetici ispisuje rezultat
- * operacija A-B, A+B, A*B, A/B, A mod B
- *
- * Primjer ispisa rjesenja za unesene brojeva 16 i 3
- *
- * 16-3=13
- * 16+3=19
- * 16*3=48
- * 16/3=5
- * 16 mod 3=1
- */
- #include <stdio.h>
- #include <math.h>
- #include <string.h>
- int main(){
- /*Generira dva nasumicna broja */
- char getusr[4];
- char getopr[0];
- int A = rand();
- int B = rand();
- int r;
- printf("\nUnesite matematicku operacij kojom zelite mjenjati ove brojeve (A%B). Dopustene operacije %,*,/,-,+.\n");
- printf("%i", A);
- printf("\n & \n");
- printf("%i", B);
- printf("\n Unesite matematicku operaciju:");
- scanf("%c", getopr);
- switch(getopr[0]){
- case '*':
- r = A*B;
- break;
- case '/':
- r = A/B;
- break;
- case '+':
- r = A+B;
- break;
- case '-':
- r = A-B;
- break;
- case '%':
- r = A-B;
- break;
- default:
- printf("\nNiste naveli tocnu vrijednost. Unesite %,*,/,+, ili -.");
- r = 0;
- }
- printf("%i", r);
- scanf("%s", getusr);
- return 0;
- }

Ne ne, krivo si shvatio. Jednostavno je trebalo unijeti dva broja s tipkovnice i ispisati rezultate svih operacija. Isto tako i za treći vrijedi. Ovo što si ti napravio je malo prekomplicirano da bude drugi zadatak nekome ko nikad nije vidio programiranje :D
Uglavnom, vidim da ti ide, istreniraj se još malo na ovome da ti c uđe u glavu, stavit ću još koji zadačić s pokazivačima, pa da možemo krenut bar nas dvojica, a ostali će nam se pridružit kad pohvataju ovo...
A kontam, vidim da ima zainteresiranih, možda preko praznika organizirati kakvu malu školu programiranja...

Evo zadatak br. 4
Napisati funkciju koja generira binarnu datoteku popunjenu nasumičnim podacima. Prototip funkcije je slijedeći
int generate_keyfile(int fileSize, char *filePath)
Dakle funkcija treba primiti parametar fileSize koji predstavlja veličinu datoteke, te parametar filePath koji predstavlja putanju gdje datoteka treba biti stvorena. Funkcija vraća SUCCESS ako je sve obavljeno kako treba (datoteka je uspješno kreirana i popunjena), ili FAILURE ako postupak nije uspio.
Potrebno je na početak koda definirati slijedeće:
#define SUCCESS 0
#define FAILURE !SUCCESS
Eto, ovo je prvi zadatak koji će imati svrhu u našem projektu. Naime ovako generiranu datoteku koristit ćemo kao ključ za kriptiranje podataka koje šaljemo mrežom. Zato je bitno osigurati dobru randomizaciju. Molim funkciju lijepo napisati s dobrim formatiranjem, te iznad nje postaviti komentar o autoru, namjeni funkcije i verziji, po uzoru na rješenje prvog zadatka koji sam postavio gore.
evo sad gledam primjere i ne čine se teški pogotovo prva dva zadatka dok bi za treći trebao malo mozgati i prisjetiti se što sam radio...
zadatke vjerujem da bih mogao riješiti uz malo googlanja i razmišljanja ali vidim da radite u c-u, a sve što sam radio do sad iz programiranja radio sam u c++-u i neznam koliko bi to bilo korisno uopće...??

koliko bi to bilo korisno uopće...??



I ekipa, gdje je zapelo, ne vidim rješenje trećeg zadatka :)
Evo mali hint. Zamislite neki broj, i zapišite ga u binarnom brojevnom sustavu. Sad ga podijelite s 2 pa rezultat zapišite binarno opet. A onda ga pomnožite 2 pa ga opet zapišite binarno. Promotrite što se događa s bitovima, to vam je rješenje :)
/** * --+ Zadatak 3 +-- * Napisati program koji ucitava POZITIVAN broj, te ga množi sa 2 i s 4, i dijeli s 2 i s 4, i ispisuje rezultat u obliku: * X*2=Y * X*4=Z * X/2=Q * X/4=R * * Primjer ispisa rjesenja za unesen broj 4 * 4*2=8 * 4*4=16 * 4/2=2 * 4/4=1 * * NAPOMENA: Zabranjeno je koristenje operatora +, -, *, /, kao i petlji ili naprednih matematičkih funkcija! */ #include <conio.h>
- #include <stdio.h>
- int main()
- {
- int a,b,c,e,f,g;
- printf("Unesite broj:\n");
- scanf("%i", &a);
- c = a << 1;
- e = a >> 1;
- f = c << 1;
- g = e >> 1;
- printf("%s %i %s","\n", a ,"*2=");
- printf("%i", c);
- printf("%s %i %s","\n", a ,"*4=");
- printf("%i", f);
- printf("%s %i %s","\n", a ,"/2=");
- printf("%i", e);
- printf("%s %i %s","\n", a ,"/4=");
- printf("%i", g);
- getch();
- }
- /**
- * Generator nasumicnih podataka
- *
- * @author Igor Bemko
- * @version 1.0
- * @fileSize oznacava kolicinu ponavljanja rand(), ne stvarnu velicinu podataka
- */
- #include <conio.h>
- #include <stdio.h>
- #include <time.h>
- #define SUCCESS 0
- #define FAILURE !SUCCESS
- int generate_keyfile(int fileSize, char *filePath)
- {
- int i;
- srand ( time(NULL) );
- FILE *fp;
- fp = fopen(filePath, "wb");
- if(fp == NULL)
- {
- printf("\nNemogu otvoriti zadanu datoteku.");
- return FAILURE;
- }
- for(i=1; i<(fileSize-1); i++)
- {
- fprintf (fp,"%i",rand());
- }
- if(fclose(fp) == EOF)
- {
- printf("\nNemogu pisati u datoteku.");
- return FAILURE;
- }
- }
- int main(){
- int v, vm, vn;
- char ime[100];
- printf("Unesite velicinu podatka:\n");
- scanf("%d", &v);
- printf("Unesite ime podatka:\n");
- scanf("%s", &ime);
- vn = v*4.1;
- vm = v*4.9;
- ////////////////////////
- generate_keyfile(v, ime);
- ////////////////////////
- printf("%s", "\n Tjek programa izvrsen.\n");
- printf("%s", "\n Kolicina upisanih podataka:");
- printf("%i", vn);
- printf("%s", "-");
- printf("%i", vm);
- printf("%s", " u ");
- printf("%s", ime);
- printf("%s", ".\nPritisnite Enter.");
- getch();
- return SUCCESS;
- }
Što se tiče trećeg zadatka pošto nemogu editirati samo ću se ovdje ispraviti. Napravio sam grešku, tako da traženi broj može biti pozitivan i negativan. Ispod
- scanf("%i", &a); // treba dodati:
- a = abs(a);
ili cjeli zadatak:
- #include <conio.h>
- #include <stdio.h>
- int main()
- {
- int a,c,e,f,g;
- printf("Unesite broj:\n");
- scanf("%i", &a);
- a = abs(a);
- c = a << 1;
- e = a >> 1;
- f = c << 1;
- g = e >> 1;
- printf("%s %i %s","\n", a ,"*2=");
- printf("%i", c);
- printf("%s %i %s","\n", a ,"*4=");
- printf("%i", f);
- printf("%s %i %s","\n", a ,"/2=");
- printf("%i", e);
- printf("%s %i %s","\n", a ,"/4=");
- printf("%i", g);
- getch();
- }

Što se tiče trećeg zadatka, recimo da je ok. Malo si zakomplicirao s onim printf-ovima, ali nebitno...
Kao i uvijek imam nekoliko primjedbi:
- Koristiš biblioteku conio.h. Ovo je stara DOS biblioteka i nije dio C standarda, te ne postoji na linux, i prema tome ne može se ni kompajlirati. Ovo je u biti moja greška, jer sam rekao da koristite funkciju getch() za zaustavljanje programa. Ovim putem se ispravljam, trebate koristiti funkciju getchar() koja je podržana na oba sistema.
- Nisi pročitao sadržaj datoteke o formatiranju, molim da ga pročitaš. Za ove vježbe me nije briga, ali za funkcije koje pišemou svrhu ovog malog projekta želim: a) da se vitičasta zagrada otvara u redu u kome započinje funkcija, npr int main() { a ne u novom redu, i b) svaku novu razinu koda uvlačimo sa dva razmaka, dakle ne tabulator, ne četiri razmaka, ne jedan razmak već dva!
- Ova funkcija nije dobra jer fileSize treba biti veličina datoteke u bajtovima, kao što sam već i napisao. Kad ovo korigiram objavit ću datoteku sa do sad napisanim funkcijama, da se vidi što smo do sad postigli.
- Uploadao sam moja rješenja 2. i 3. zadatka: http://www.udruga-teng.org/marko/zadatak2.c i http://www.udruga-teng.org/marko/zadatak3.c
A sad još jedan zadatak.
Napisati program koji putem parametara komandne linije prima dva argumenta - ulaznu datoteku i izlaznu datoteku. U slučaju greške potrebno je ispisati poruku na stderr i terminirati program statusom FAILURE.
Program treba čitati ulaznu datoteku redak po redak te svaki red koji počinje s 1 ili više razmaka, potom broj, pa točka, pa jedan razmak i potom nepoznati tekst prepisati u izlaznu datoteku bez razmaka, broja, točke i još jednog razmaka na kraju, tj. prepisati samo tekst koji se nalazi iza ovog niza znakova.
Ako se linija sastoji samo od niza razmaka, broja i točke, u izlaznu datoteku ju je potrebno prepisati kao novi red.
Primjer izvođenja:
ulazna datoteka:
- 1. #include<stdio.h>
- 2. int main() {
- 3. printf("Hello world\n");
- 4. }
izlazna datoteka:
- #include<stdio.h>
- int main() {
- printf("Hello world\n");
- }
Na standardnom izlazu nije potrebno ništa ispisivati.





Registrirao se: 2007-10-24