Afişează mesaje
|
Pagini: [1]
|
1
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Idei proaste :)
|
: Martie 20, 2012, 01:58:29
|
Nici eu sunt de acord ca trebuie neaparat sa ai o idee folositoare. Daca o ai, e perfect. Daca nu, e mai bine sa codezi un proiect, oricare ar fi, sa il duci la capat si sa il prezinti, decat sa nu o faci deloc. E o experienta din care vei invata o gramada. Pur si simplu gandeste-te la ceva ce te pasioneaza pe tine (sport, muzica, fotografie etc) si codeaza ceva ce ti se pare interesant.
Un exemplu ar fi sa implementezi o copie Photoshop. Nu va folosi nimanui atata timp cat exista alternative comerciale sau open-source. Dar vei invata algoritmi pentru procesare de imagini.
Am participat o singura data la un astfel de concurs.
Proiectul a fost o lectie interactiva de fizica: "Miscarea in camp gravitational". Ca module mai interesante a avut un mic engine fizic in Action-Script pentru simularea experimentelor; un joculet bazat pe acest engine; si un un fel de compilator de formule LaTeX. Nu prea stiam cum se face un compilator la vremea aceea, dar in final si-a facut treaba.
Ideea proiectului nu a fost a mea; ci a unui prof, sau a altui membru al echipei, nu mai stiu. In final mi s-a parut interesant si chiar m-am implicat muncind la un moment dat o zi si o noapte aproape in continuu pentru a termina la timp.
A fost o experienta placuta, avand ocazia sa colaborez cu mai multi prieteni. Sunt mandru si acum de produsul software rezultat, desi nu stiu cat de folosit a fost.
|
|
|
3
|
infoarena - concursuri, probleme, evaluator, articole / Algoritmiada 2009 / Răspuns: Feedback Runda Finala
|
: Mai 05, 2009, 06:43:13
|
Organizarea a fost foarte reusita: cazarea a fost mult mai buna decat la multe concursuri la care am participat, mancarea excelenta iar setul de probleme interesant si cu un nivel de dificultate potrivit (la grupa studenti). Poate ca unele teste, sau limita de timp la o problema nu au fost foarte inspirate.
Programul din afara concursului a fost frumos, doamna directoare foarte de treaba, punandu-ne la dispozitie mese de ping-pong.
Pe mine nu m-a deranjat pauza de o zi intre concurs si evaluare live. La evaluarea live ar fi util daca ati avea doua ferestre care isi dau refresh, una cu monitorul si una cu clasamentul.
Promovarea concursului a fost ok: noi am primit mail la facultate cu algoritmiada
Ce mai, o organizare foarte reusita, felicitari echipei si celor care v-au ajutat. Algoritmiada e singurul concurs de algoritmi pentru studenti din tara de care stiu si sper sa urmeze si editii viitoare.
|
|
|
4
|
Comunitate - feedback, proiecte si distractie / Blog / Răspuns: Google Chrome
|
: Septembrie 03, 2008, 11:52:29
|
Interesant ce scrie in EULA la Google Chrome: 11. Licenţa de conţinut de la dvs.
11.1 Dvs. păstraţi drepturile de copiere şi orice alte drepturi pe care le deţineţi deja asupra Conţinutului pe care îl trimiteţi, postaţi sau afişaţi în cadrul sau prin intermediul Serviciilor. Prin trimiterea, postarea sau afişarea conţinutului, dvs. acordaţi Google o licenţă permanentă, irevocabilă, valabilă oriunde în lume, gratuită şi neexclusivă de a reproduce, adapta, modifica, traduce, publica, reprezenta public, expune public şi distribui orice Conţinut pe care îl trimiteţi, postaţi sau afişaţi în cadrul sau prin intermediul Serviciilor. Această licenţă este pentru singurul scop de a permite Google să expună, distribuie şi să promoveze Serviciile şi poate fi revocată pentru anumite Servicii, după cum este definit în Termenii adiţionali ai acelor Servicii.
11.2 Sunteţi de acord că această licenţă include un drept pentru Google de a pune astfel de Conţinut la dispoziţia altor companii, organizaţii sau persoane individuale cu care Google are relaţii pentru furnizarea de servicii de distribuţie şi de a utiliza astfel de Conţinut în legătură cu furnizarea acelor servicii.
|
|
|
20
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Raspuns: StEval
|
: Ianuarie 15, 2007, 21:04:47
|
Evaluatorul care-l folosesc eu. Nu e cine stie ce dar isi face treaba. Pentru instalare copiati codul de mai jos intr-un fisier numit jlaunch.cpp /* SAE ---------------------- jlaunch.cpp Cristian George Strat */
/** argv 1 binary file to execute 2 uid for impersonation 3 time limit (float, seconds) 4 directory to chroot()
:WARNING: Binaries must be statically compiled since chroot() denies access to shared libraries.
returns 0 execution successful 200 execution timed out 210 unknown run-time error 100-199 known run-time error (exitcode = 100 + WTERMSIG(status)) */
/* #define VERBOSE */ /* #define PROFILING */
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> #include <errno.h> #include <signal.h> #include <wait.h> #include <sys/resource.h>
#include <math.h>
#ifdef PROFILING #include <sys/time.h> #endif
#define MBM (1 << 20) /* #define LIMIT_STACK_SIZE */
double datalimit = 63., stacklimit = 1.;
void die(char *msg) { printf("%s\n", msg); exit(255); }
int main(int argc, char *argv[], char *envp[]) { #ifdef PROFILING rusage ru; #endif
pid_t child; /* child that loses privileges and executes argv[1] */ pid_t timer; /* child timer */ uid_t nuid; /* uid assigned to child */ pid_t who;
char cmd[250]; int exitcode = 0; int status;
/* failsafe */ if (5 > argc) die("not enough arguments\n");
/* -- spawn child ---------------------------------------- */ child = fork(); if (!child) { /* child process here */
rlimit rl;
/* limit number of processes */ rl.rlim_cur = rl.rlim_max = 2; setrlimit(RLIMIT_NPROC, &rl);
/* limit memory */ #ifdef LIMIT_STACK_SIZE rl.rlim_cur = rl.rlim_max = (int)ceil(datalimit * MBM); setrlimit(RLIMIT_DATA, &rl); rl.rlim_cur = rl.rlim_max = (int)ceil(stacklimit * MBM); setrlimit(RLIMIT_STACK, &rl); #endif rl.rlim_cur = rl.rlim_max = (int)ceil((stacklimit + datalimit) * MBM); setrlimit(RLIMIT_AS, &rl);
/* chroot */ chroot(argv[4]);
/* lose admin privileges */ #ifdef VERBOSE printf("child: renunt la permisiuni\n"); #endif nuid = strtol(argv[2], NULL, 10); setuid(nuid);
#ifdef VERBOSE printf("child: ma transform\n"); #endif execve(argv[1], argv, envp); }
/* -- spawn timer ----------------------------------------- */ timer = fork(); if (!timer) { #ifdef VERBOSE printf("timer: cronometrez %d\n", child); #endif /* :TODO: sleep could be done through a system call */ sprintf(cmd, "sleep %s", argv[3]); system(cmd);
#ifdef VERBOSE printf("timer: am terminat\n"); #endif
exit(200); }
/* -- main thread ----------------------------------------- */ #ifdef VERBOSE printf("tata: astept sa termine cineva...\n"); #endif
#ifdef PROFILING who = wait4(-1, &status, 0, &ru); printf("PROFILING: wait4 finished with. utime: %d s, %d us; stime: %d s, %d us\n", ru.ru_utime.tv_sec, ru.ru_utime.tv_usec, ru.ru_stime.tv_sec, ru.ru_stime.tv_usec); #else /* waits for a single child process (it doesn`t matter which one) */ who = wait4(-1, &status, 0, NULL); #endif
#ifdef VERBOSE printf("tata: am asteptat destul -> %d ...\n", who); #endif
if (!who) return 200; /* weird error, this shouldn`t happen */
if (timer == who) { #ifdef VERBOSE printf("tata: timer a terminat primul, omor child (%d)\n", child); #endif /* timer finished first -> execution timed out */ kill(child, SIGKILL);
return 200; } else { #ifdef VERBOSE printf("tata: child a terminat primul, omor timer (%d)\n", timer); #endif /* analyze why child terminated */ if (!WIFEXITED(status)) { if (WIFSIGNALED(status)) exitcode = (100 + WTERMSIG(status)); else exitcode = 210; } else exitcode = 0;
#ifdef VERBOSE printf("tata: exitcode = %d\n", exitcode); #endif
/* child process finished first -> execution is ok, kill timer */ kill(timer, SIGKILL);
return exitcode; } }
Si codul urmator intr-un fisier "eval.pl" $a1=@ARGV[0]; if ( ($a1 ne "help" && $a1 ne "config" && $a1 ne "c" && $a1 ne "pascal" && $a1 ne "setup") ) { print ("Mod de folosire:\n"); printf ("\tperl eval.pl setup : Compileaza fisierul jlaunch.cpp necesar la testare\n"); print ("\tperl eval.pl help : Afiseaza informatii referitoare la modul de folosire\n"); print ("\tperl eval.pl config : Configureaza evaluatoru\n"); print ("\tperl eval.pl p fisier.pas : Testeaza un program scris in Pascal\n"); print ("\tperl eval.pl c fisier.cpp : Testeaza un program scris in C++\n"); exit(); }
if ($a1 eq "setup") { if (!( -e "jlaunch.cpp") ) { print ("Fisierul jlaunch.cpp nu exista. Probabil l-ati sters sau nu l-ati descarcat. Daca nu il mai aveti\ntrimiteti un email la [email protected]"); exit(); } if (-e "run") { print ("Evaluatorul a mai fost instalat odata\n"); exit(); } exec ("g++ -o run jlaunch.cpp\n"); printf ("Evaluatorul a fost instalat cu succees\n"); exit(); }
if ($a1 eq "help") { printf ("======================================\n"); print ("Evaluator versiunea 1.0\n"); print ("Autor: Vlad Saveluc\nLicenta: GPL (http://www.gnu.org/copyleft/gpl.html)\n"); print ("=======================================\n"); print ("Instructiuni de utilizare:\n"); print ("1. Inainte de a testa surse programul trebuie configurat.\n"); print ("\taceasta se realizeaza prin comanda:\n\t\t'perl eval.pl config'\n"); printf ("\tProgramul va genera un fisier config.txt folosit mai tarziu la testare.\n"); printf ("\tVor trebui introduse date referitoare la numarul de teste, denumirea \n\tfisierelor de intrare/iesire etc.\n"); printf ("2. Testele se vor afla intr-un director cu teste definit la configurare\n"); printf ("\tFisierele vor fi denumite 0.in, 1.in ... respectiv 0.ok, 1.ok ...\n"); printf ("\tFisierele .ok sunt necesare doar in cazul in care validarea outputului\n"); printf ("\tse face print diferenta de fisiere\n"); printf ("3. Daca verificarea este realizata de un verificator acesta va trebui sa scrie intr-un fisier ver.ok\n"); printf ("\t1- daca rezultatul este corect, 0- daca este gresit. !!! ver.ok va avea o singura linie\n"); printf ("3.1 Utilizatorul sub care este rulat evaluatorul va trebui sa aiba drepturi de executare a verificatorului\n"); printf ("\tAceasta se face prin: 'chmod 700 nume_verificator'\n"); printf ("4. Dupa ce a fost configurat, programul poate testa programe scrise in C sau Pascal astfel\n"); printf ("\tperl eval.pl c nume_fisier - Pentru programe in C++\n"); printf ("\tperl eval.pl p nume_fisier - Pentru programe scrise in Pascal\n"); printf ("5. Rezultatele evaluarii se vor gasi intr-un fisier definit la configurare\n"); exit(); }
if ($a1 eq "config") { print ("Sunteti sigur ca doriti sa (re)configurati evalutorul (configuratia trecuta se va pierde) ? (DA/NU)\n"); $ans=<STDIN>; while ($ans ne "DA\n" && $ans ne "NU\n") { print ("Raspunsul nu este valid. Mai incercati (trebuie scris cu masjuscule)\n"); $ans=<STDIN>; } if ($ans eq "NU\n") {exit();} open (fout,">config.txt"); print ("Problema va avea verificator (daca nu, se va verifica print diferenta de fisiere? (DA/NU)\n"); $ans=<STDIN>; while ($ans ne "DA\n" && $ans ne "NU\n") { print ("Raspunsul nu este valid. Mai incercati (trebuie scris cu masjuscule)\n"); $ans=<STDIN>; } print fout ("$ans"); if ($ans eq "DA\n") { printf ("Dati denumirea executabilului verificatorului\n"); $ans=<STDIN>; chomp($ans); while ( !( -e $ans) ) { if ($ans eq "a.out") {printf ("a.out este fisier rezervat\n");} else {printf ("Acest fisier nu exista. Mai incercati (CTRL + C pentru a iesi)\n");} $ans=<STDIN>; chomp($ans); } print fout ("$ans\n"); } printf ("Directorul in care se gasesc testele este: \n"); $ans=<STDIN>; chomp($ans); while ( !(-d $ans) ) { printf ("Directorul $ans nu exista. Mai incercati (CTRL + C pentru iesi)\n"); $ans=<STDIN>; chomp($ans); } print fout ("$ans\n"); printf ("Numarul de teste (divizor de 100)"); $ans=<STDIN>; print fout ("$ans"); printf ("Denumirea fisierului de intrare:"); $ans=<STDIN>; print fout ("$ans"); printf ("Denumirea fisierului de iesire:"); $ans=<STDIN>; print fout ("$ans"); printf ("Timp de executie: "); $ans=<STDIN>; print fout ("$ans"); printf ("Comanda de compilare in C++ (recomandat 'g++') "); $ans=<STDIN>; chomp($ans); print fout ("$ans\n"); printf ("Comanda de compilare in pascal (recomandat 'fpc') "); $ans=<STDIN>; chomp($ans); print fout ("$ans\n"); printf ("Fisierul in care vor fi scrise rezultatele evaluarii (borderoul):"); $ans=<STDIN>; print fout ("$ans"); }
if ($a1 eq "c" || $a1 eq "p") { $file=@ARGV[1]; unless (-e "run") { printf ("Evaluatorul nu a fost instalat\n"); printf ("Rulati 'perl eval.pl setup'\n"); exit(); } unless (-e "config.txt") { printf ("Evaluatorul nu a fost configurat\n"); exit(); } if ($file eq "") { printf ("Trebuie sa specificati fisierul sursa ce va fi evaluat\n"); printf ("Rulati 'perl eval.pl' pentru mai multe detalii\n"); exit(); } unless (-e $file) { printf ("Fisierul $file nu exista\n"); exit(); }
$fin="config.txt"; open(fin); @data=<fin>; close(fin); foreach (@data) { chomp($_); } $type=@data[0]; my $ver,$tdir,$nt,$in,$out,$tl,$comp_c,$comp_p,$borderou; $tl=0.0; if ($type eq "DA") { $ver=@data[1]; $tdir=@data[2]; $nt=@data[3]; $in=@data[4]; $out=@data[5]; $tl=@data[6]; $comp_c=@data[7]; $comp_p=@data[8]; $borderou=@data[9]; } else { $tdir=@data[1]; $nt=@data[2]; $in=@data[3]; $out=@data[4]; $tl=@data[5]; $comp_c=@data[6]; $comp_p=@data[7]; $borderou=@data[8]; } open (fout,">$borderou"); $ppt=100/$nt; #Partea de compilare if ($a1 eq "c") { system ("$comp_c $file 2>eror.txt\n"); } else { system ("$comp_p $file 2>eror.txt\n"); }
unless (-e "a.out") { printf ("Eroare de compilare\n"); system ("cp -f eror.txt $borderou"); exit(); } system ("rm -f eror.txt"); $total=0; for ($i=0;$i<$nt;++$i) { printf fout ("Testul %2d ............ ",$i+1); chdir ("$tdir"); system ("cp -f $i.in ../$in"); if ($type eq "NU") { system ("cp -f $i.ok ../"); } else { system ("cp -f $i.ok ../$tdir.ok"); } chdir (".."); $mess=system ("./run a.out 0 $tl 0"); if ($mess==0) { if ($type eq "DA") { system ("./$ver"); $fin="ver.ok"; open(fin); @data=<fin>; if (@data[0] eq "1") { $total+= $ppt; printf fout ("OK\n"); } else { printf fout ("Raspuns gresit\n"); } } else { $mess2=system("diff -bq $out $i.ok >/dev/null"); if ($mess2 ==0) { printf fout ("OK\n"); $total += $ppt; } else { printf fout ("Raspuns gresit\n"); } } }
if ($mess==51200) {printf fout ("Limita de timp depasita\n");} if ($mess != 51200 && $mess!=0) {printf fout ("Eroare la executie\n");} system ("rm -f $in"); system ("rm -f $out"); system ("rm -f $i.ok"); } printf fout ("Total $total\n"); system ("rm -f a.out\n"); }
Pentru a executa "perl eval.pl".
|
|
|
|