Jump to content

cmiN

Active Members
  • Posts

    1609
  • Joined

  • Last visited

  • Days Won

    27

Everything posted by cmiN

  1. Hi guys, Blue Wire Software is looking for senior software engineers with experience in Python willing to collaborate remotely with top 🇺🇸 US clients on challenging projects. This is a long-term contract and you'll feel like in a real team with an accent on those ⛱ benefits that matter the most and support towards your growth. If you love designing and optimizing APIs with 🐍 Python in a microservice world, then definitely you should read more about the role here: https://jobs.smartrecruiters.com/BlueWireSoftware/743999718294605-python-software-engineer?fbclid=IwAR1gaWKdmuFB6RbHHjSPh7NTETybHf3aGjAPl7X9NV3yPnAlidCWM9vCt2U
  2. Incearca cu asta: (([\w.-]+\s*[.-]+\s*)+\w+|\w+)\s*@\s*([\w.-]+\s*[.-]+\s*)+\w+ Testat cu: http://sprunge.us/dGTb?py In grupurile inainte de "@" ce contin ".-", poti pune si alte caractere speciale gen: !#$%&'*+-/=?^_`{|}~ dar vezi sa le escapezi inainte. Mai multe detalii la https://en.wikipedia.org/wiki/Email_address -> local part.
  3. Vin si eu cu un patch cu rata mai mica de coliziune si cu argumente date frumos la rulare (+ ceva optimizari de cod si bug-uri rezolvate), doar de fun, ca teoretic cam trebuie rescris tot de acolo . Script: http://sprunge.us/LASd?py
  4. cmiN

    Fun stuff

    Albastru > Rosu > Mov
  5. masturbation or sex ?
  6. Eram curios cat ia un brute pe un charset decent si cu lungimea cuvantului nu prea mare, dar din alta perspectiva e destul de "costumizabil".
  7. http://www.phonebloks.com/ - worth a try
  8. Felicitari, facusem si eu ceva similar candva, dar era mai de liceu . @Nytro: - scriptul initial (ceva mai low level) - tutorial
  9. IronPython este varianta "Visual Studio" (.NET) a interpretorului pe windows, deci (nu am incercat) probabil iti permite sa faci in aceeasi maniera interfata si corelarea cu modelul, iar Kivy este un framework cross-platform bazat pe pygame ce iti permite sa faci natural user interfaces pe mai orice (multi)touch, asa ca nu vad cum cineva ti-ar putea recomanda ceva intre cele doua in timp ce ele sunt lucruri total diferite ce au in comun acelasi limbaj. Daca doar vrei sa faci o interfata simpla, ar fi bine s-o faci la mana si nu cred ca te-ar avantaja cu ceva daca ar fi windows dependent, deci Tkinter ar fi ok, s-a mai discutat ceva similar si mai in detaliu si aici: https://rstforums.com/forum/47899-material-de-studiu-python-gui-programming.rst .
  10. cmiN

    Fun stuff

    ^ "Si doctorul scosese manusa de cauciuc..."
  11. cmiN

    Fun stuff

    ^ dupa & reanimale made my day
  12. Ai noroc ca nu aveam somn azi-noapte. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/wait.h> #define SV 1 #define CL 2 #define BUFL 128 #define check(a, !strcmp(a, static inline int str_comp(const void * first, const void * second) { return strcmp(*((char * *)first), *((char * *)second)); } void process_file(char * fname, char * lines) { /* open the file, read and sort all lines, then write the first 3 of them to `lines` buffer */ int linesLen = 0; char * * linesVec = NULL; FILE * file = fopen(fname, "r"); while (1) { char line[BUFL]; fgets(line, BUFL, file); if (feof(file)) break; linesVec = realloc(linesVec, ++linesLen * sizeof(char *)); linesVec[linesLen - 1] = malloc((strlen(line) + 1) * sizeof(char)); strcpy(linesVec[linesLen - 1], line); } fclose(file); qsort(linesVec, linesLen, sizeof(char *), str_comp); strcpy(lines, linesVec[0]); strcat(lines, linesVec[1]); strcat(lines, linesVec[2]); for (int i = 0; i < linesLen; ++i) free(linesVec[i]); free(linesVec); } int main(int argc, char * argv[]) { if (argc < 3) { printf("Usage: %s OPTION (NAME...|NAME FILE)\n", argv[0]); puts("Open a server or client using named pipes communication for processing a file.\n\ \n\ Options:\n\ -s, --server open for serving\n\ -c, --client open for sending\n\ \n\ Parameters:\n\ NAME path name(s) for FIFO(s)\n\ FILE file path for lines reading"); return 1; } int whoami = 0; if (check(argv[1], "-s") || check(argv[1], "--server")) whoami = SV; else if (check(argv[1], "-c") || check(argv[1], "--client")) whoami = CL; if (whoami == SV) { // make FIFOs int fifoLen = argc - 2; // for input/output char * * fifoIn = malloc(sizeof(char *) * fifoLen); char * * fifoOut = malloc(sizeof(char *) * fifoLen); for (int i = 2; i < 2 + fifoLen; ++i) { int ind = i - 2; int len = sizeof(char) * (strlen(argv[i]) + 2); fifoIn[ind] = malloc(len); fifoOut[ind] = malloc(len); strcpy(fifoIn[ind], argv[i]); strcpy(fifoOut[ind], argv[i]); strcat(fifoIn[ind], "i"); strcat(fifoOut[ind], "o"); // rw-rw-rw- mkfifo(fifoIn[ind], 0666); mkfifo(fifoOut[ind], 0666); } // wait for messages, process them, then send the response for (int i = 0; i < fifoLen; ++i) { pid_t pid = fork(); if (pid == 0) { // the child // open the pipe for reading int fin = open(fifoIn[i], O_RDONLY); char fname[BUFL] = {0}; read(fin, fname, BUFL); close(fin); // read the filename, open and process it printf("Process %s on channel %s\n", fname, argv[i + 2]); char lines[3 * BUFL] = {0}; process_file(fname, lines); // send the lines back to client int fout = open(fifoOut[i], O_WRONLY); write(fout, lines, strlen(lines)); close(fout); return 0; } } // wait processes to finish for (int i = 0; i < fifoLen; ++i) wait(NULL); // free resources for (int i = 0; i < fifoLen; ++i) { unlink(fifoIn[i]); unlink(fifoOut[i]); free(fifoIn[i]); free(fifoOut[i]); } free(fifoIn); free(fifoOut); } else if (whoami == CL) { // prepare pipe names for i/o int len = sizeof(char) * (strlen(argv[2]) + 2); char * fifoIn = malloc(len); char * fifoOut = malloc(len); strcpy(fifoIn, argv[2]); strcat(fifoIn, "i"); strcpy(fifoOut, argv[2]); strcat(fifoOut, "o"); // open server's input for writing int fout = open(fifoIn, O_WRONLY); write(fout, argv[3], strlen(argv[3])); close(fout); // now receive the response int fin = open(fifoOut, O_RDONLY); char lines[3 * BUFL] = {0}; read(fin, lines, 3 * BUFL); close(fin); puts(lines); free(fifoIn); free(fifoOut); } else { fputs("Invalid or no option selected\n", stderr); return 2; } return 0; }
  13. cmiN

    .

    Sa nu uitam ca pana la matematica este mai intai algoritmica si complexitatea unui etaj inferior creste exponential in raport cu cel superior.
  14. Tehnic vorbind, ultima fraza nu are legatura cu restul textului, ci era doar o parere proprie cu referire la Richard Stallman. Si asa cum orice limbaj de programare este doar o unealta buna pe particica ei, acelasi lucru se aplica si la sistemele de operare, nu am spus ca linuxul e solutia potrivita pentru orice tip de task, ba chiar ar deveni ridicola in cazul .NET, ci am vorbit din perspectiva mea, afectata de experientele IT din viata de zi cu zi .
  15. Si daca am o firma cu sute de angajati ce furnizeaza aplicatii bazate pe interfata grafica in Qt repectiv kivy destinate atat desktopurilor cat si tabletelor/smartphoneurilor. Nu ma refer neaparat la faptul ca ar trebui sa cumpar cate o licenta pentru fiecare sistem in parte, dar o distributie linux vine mai cu tot ceea ce am nevoie preinstalat si restul necesitatilor se pot rezolva din cateva linii scrise in terminal, tot procesul de instalare, configurare si eventuale actualizarii, fiind in grija, de multe ori execelenta, a sistemului de operare. Crede-ma ca am avut probleme grave de mentenanta pe un windows cu unele sdkuri/frameworkuri, desi inca il folosesc in dual-boot cu un Ubuntu (inca prefer Sabayon, dar pe laptop am ramas la Ubuntu din motive de compatibilitate). Doi la mana, cand ajungi sa lucrezi cu APIurile sistemului de operare sau cu tot felul de lucruri low level, pe un linux iti vine mult mai usor si e mult mai clar, imiplicit si productivitatea creste in produsul/serviciul final. Un linux te tine departe de necesitatea unui antivirus, de instabilitatea programelor/actualizarilor, de programele destinate cleaningului/optimizarilor (cele ca registry booster, tune up ...) si nu o sa auzi niciodata pe cineva spunand: "Ba, trebuie sa reinstalez linuxul ca a inceput sa se miste cam greoi.". In momentul in care vrei sa-ti creezi un server, eventual sa stabilesti un protocol propriu sau sa folosesti unul deja existent (si cu siguranta open source) iti vine mult mai usor sa diseci problemele/bugurile bucata cu bucata si sa ajungi la radacina, ba chiar s-o fixezi. Ca programator, inveti mult mai multe lucruri si intr-o maniera mai clara, petrecandu-ti timpul pe linux, deoarece mai toate componentele sunt transparente si-ti hranesc de fiecare data curiozitatea de a afla ce e in spate, de a afla cum functioneaza si chiar de a le imbunatati. Majoritatea utilizatorilor windows, din diverse companii, folosesc utilitare ca Far Manager sau Total Commander si uneori tot nu e de ajuns, pe linux, terminalul insotit de suita GNU si ceva cunostinte de scripting reprezinta mai mult decat necesarul si mai toate softurile inclusiv sistemul in sine sunt cumva unificate si "colaboreaza" unele cu altele. E un sistem unitar, bazat pe o logica si o complexitate bine puse la punct cu aspect modular ce nu necesita modificari substantiale in detrimentul viitoarelor featureuri, un sistem cu "portile deschise" la care contribuie comunitati din intreaga lume, un sistem prin care implicit iei contanct cu diverse ideologii, iti modifica modul de gandire, te face mai ordonat si cu cat intri mai mult in detaliile lui de functionare cu atat intelegi mai bine computer scienceul. Cum spunea si pyth0n3, linuxul nu e pentru oricine si nici nu se recomanda unui utilizator superficial ce trateaza un sistem de calcul ca pe un sclav, ce doreste doar sa primeasca si sa culeaga roadele fara putin efort din partea acestuia, fara putina intelegere. De multe ori am nevoie, in timp ce lucrez pe windows, de aplicatii ce sunt disponibile doar pe linux (deja procentul de solutii cross-platform este in crestere) si rar gasesc alternative convenabile, dar daca sunt pe linux si *rar* am nevoie de ceva windows-only, gasesc pana la urma un workaround sau emulez cu usurinta si compatibilitate, iar un utilizator trecut prin linux se poate adapta cu usurinta la un windows, pe cand unul ce a stat numai pe windows simte ca-i fuge pamantul de sub picioare cand l-ai lasat pe linux si observa ca nu-i merg executabilele (MZ) si sufera de disconfort acut tocmai din cauza metodelor de utilizare specifice windows, indoctrinat fiind de catre acesta. Cand treci la un linux, nu e neaparat vorba de bani, geek life sau snobism, ci de principii si respect.
  16. cmiN

    Problema C.

    Banuiesc ca esti la FII si-ti trebuia pentru tema5, aici gasesti problema. Alte surse mai poti gasi in box.com/cmiN -> FII/L1/AP, oricum s-a terminat semestrul, da' cine stie, pe viitor poate o sa gasesti chestii interesante.
  17. S-a discutat si ceva mai cuprinzator: #1 #2
  18. Este destul de trist ca un semidoct s? aib? probleme cu româna. On: Cam multe "magic numbers" neexplicate, în rest e ok.
  19. Un amestec trippy de chill, lounge, beatblender si putin indie in 3 arhive a cate cca. 100mb, insumand 45 de melodii easy listening. Acesta este ultimul pack pe care il mai fac, daca vrea cineva sa asculte, sa inteleaga celelalte packuri si apoi sa stranga melodii, ii multumesc anticipat, dar eu am cam epuizat statiile si colturile ascunse ale Youtubeului si nu pot pune orice loop ambiental cu ceva vocal. Links: GE.TT / GF1, GF2, GF3 http://www.youtube.com/watch?v=m--lZP1c28g Spor si la celelalte.
  20. cmiN

    Premiile RST

    Hai s-o facem pe 13 (12) septembrie de ziua programatorului (2^8 zi din an). Eventual, votul sa fie facut de asa natura incat sa poata fi insotit de un comentariu ca argument.
×
×
  • Create New...