Jump to content

Cheater

Active Members
  • Posts

    1534
  • Joined

  • Last visited

  • Days Won

    17

Cheater last won the day on April 14 2022

Cheater had the most liked content!

Converted

  • Interests
    Security, smocking & drinking
  • Location
    Random Access Memory

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

Cheater's Achievements

Rookie

Rookie (2/14)

  • Conversation Starter Rare
  • Reacting Well Rare
  • First Post Rare
  • Collaborator Rare
  • Posting Machine Rare

Recent Badges

204

Reputation

  1. Cum n-am mai deschis un topic aici de multi ani, si am terminat serialele, si n-am somn, m-am gandit sa impartasesc cu voi optimizarile ce le folosesc pentru a imbunatati timpul de raspuns si viteza internetului. Este vorba de setari si configurari ce se aplica routerului, si este necesar ca routerul sa va permita conectarea prin ssh ca root pentru a le aplica. Eu folosesc https://www.synology.com/en-us/products/RT2600ac dar sunt convins ca ca sunt si alti producatori ce au routere cu linux destul de accesibil pentru a implementa optimizarile. Stiu nu e AX, luna viitoare scot cei de la Synology unul AX. Oricum tutorialul se aplica la fel si la AX si AC. Cand apare wifi 6e in Romania, poate fac o continuare. La routerele Synology parola setata la userul Admin, este parola de root. Valorile ce le gasiti in continuare au fost optimizate pentru o viteza maxima permisa de isp de 940Mbps, dar pana la 2.5Gbps nu ar trebui sa fie necesare modificari semnificative. De asemenea puteti aplica aceste setari si pe servere linux vor aduca imbunatatiri semnificative fata de default. 1. /etc/rc.local Este posibil sa nu functioneze configurarile exact asa cum le prezint eu aici pe routerul vostru, de aceeea inainte de a le scrie in fisiere pentru a deveni persistente, faceti setarile la run-time, si adaptatiile daca este necesar, sau omitetile daca nu se aplica la voi (nu aveti binarele respective/variabilele de kernel, ajustati caila catre ele) 2. /etc/sysctl.conf Ca sa aplicati configurarile fara reboot folositi sysctl -p, sau sysctl -w nume_variabila=valoare. Indepartati variabilele daca primiti eroare, unele pot sa lipseasca din versiunea de kernel pe care o aveti. 3. Wifi Alegem canalul: Primul pas este scanarea de spectru, sunt multe aplicatii pentru asta, scopul este sa identificati canalul cel mai putin folosit pe 2.4/5Ghz sau daca este folosit retelele ce emit pe acel canal sa aiba o putere cat mai mica. - pe 2.4Ghz sunt 3 canale ce nu se suprapun (non overlapping channels), 1, 6 si 11, ideal este sa alegem unul dintre acestea. Daca toate sunt libere, alegeti 11. - pe 5Ghz, cautam sa ne ferim de canalele cu DFS obligatoriu, astfel ne orientam catre benziile U-NII-1 si U-NII-3, daca avem noroc sa locuim in US/Canada (sau routerul crede asta), as recomanda canalul 161. Dar cum locuim in Romania si e 5000 lei amenda daca setezi alta tara si mergi pe un canal aiurea (in ideea in care avem vreo UM in apropiere, bruiem ceva, ei fac sesizare la ANCOM si ne bate ANCOM la usa, putin probabil), iar routerul nu ne lasa sa folosim 161 pe Romania, m-as uita la 40-44, daca este liber. Daca ai un router capabil, si intamplator locuiesti in Australia, routerul iti va permite 4W puterea in U-NII-3, cea mai mare din lume acceptata pe wifi, dar majoritatea routerelor suporta ±1W maxim. Channel width: Marimea canalului este importanta, cu cat este mai mare, cu atat incap mai multe date, deci avem viteza mai mare. - pe 2.4Ghz, eu merg pe width de 40Mhz - pe 5Ghz, routerul meu stie sa mearga pe un width de 80+80 Mhz, practic foloseste 2 canale, am ales un canal din U-NII-1 si unul U-NII-3 (cand locuiam in US), ambele cu un width de 80Mhz, bine si deviceurile din caza trebuie sa stie 80+80 Mhz, sau 160Mhz, cel mai probabil suporta doar 80Mhz, ceea ce e good enough oricum. Alte setari: DTIM 4 - mai mic scade viteza si timpul de raspuns, si se consuma mai multa baterie, mai mare e opusul, optimul este 4. Dar puteti face A/B testing si vedeti ce vi se potriveste mai bine. Multicast translation - on AMPDU - on EXTENDED NSS - on U-APSD - off MU-MIMO - on, ideal 4x4, dar si 2x2 ar trebui sa fie suficient. PMF support - off, apare un overhead ciudat si pare buggy, daca la voi se comporta la fel si on si off, e o idee buna sa ii dati on. La fel si WPA 3. IGMP Snooping - on Orice setare de power saving, off! Downgrade usb 3.0 device to reduce interference to 2.4 Ghz signal - on Allow auto-switch to DFS channels - off WPS - off (security) Daca routerul suporta guest, si nu folositi reteaua in mod curent, opriti guest. La criptarea retelei alegeti AES, pentru ca e hw accelerated. Alegeti pe 2.4Ghz N only, si 5Ghz AC/AX only, ca sa va asigurati ca fortati device-urile sa folosesca cele mai rapide protocoale de wifi, daca sunt device ce nu functioneza corect reveniti la o setare mai permisiva. Daca routerul suporta 802.11v aka Smart Connect, puteti, si recomand, sa folositi acelasi nume si la 2.4Ghz si la 5Ghz si routerul va negocia protocolul cel mai bun suportat de device, tinand cont si de calitatea semnalului pentru a avea cea mai buna acoperire si un plus de simplitate. + Folositi un doh dns, daca suporta routerul, sau macar un cloudflare dns, are datacenter si la otopeni si peers locale - https://1.1.1.1/dns/ . Firewall: Mtu probing se foloseste de icmp (ping), pentru a identifica valoarea optima, astfel este important sa acceptati icmp pe ipv4 si ipv6. Blocati orice port ce nu are ce cauta in afara, eu de exemplu, prefer sa folosesc un port non-default pentru vpn server, din care mai apoi sa am access la interfata routerului si alte chestii. Locatia fizica: Recomand sa identificati locul de unde, din pozitia routerului puteti vedea usile la toate camerele (sau cat mai multe), un hol, sa va asigurati ca nu sunt obstacole (pereti mai ales de beton, frigider, etc..) in jurul routerului, este ideal sa fie situat la o inaltime de 2m, prins pe perete (preferabil), daca folositi wifi cu precadere dintr-o anumita camera cautati o pozitie cat mai aproape de camera care sa respecte cele de mai sus. Daca pui routerul sub pat, de sub pat o sa ai putere maxima :))). Este adevarat ca semnalul ocoleste/trece prin obstacole doar ca fiecare obstacol scade semnificativ puterea, daca punem routerul pe jos, in mod automat va intalni semnificativ mai multe obstacole, si daca prin dreptul lui trec persoane, o sa apara spike-uri, nu ne dorim asta, de aceea inaltimea de 2m este optima. Performante obtinute: Inainte de a face aceste optimizari aveam 300-400 mbps, cu spike-uri mari. Dupa, am 650-666 pe orice device Apple mai nou de 2019 (testat cu: iPhone X, 12, MacBook Pro 16'' M1 pro/M1 max), si 800-900 Mbps pe deviceuri Apple 2017-2019 (chiar 2014) (testat cu: MacBook Pro 16'' 2014, 2019, Intel-based), au pus placi de retea mai slabe pe 5Ghz cu 2/mimo in loc de 3 cum era pana in 2019 pe device recente, probabil ca sa faca o economie de baterie/de cost de productie, naiba stie. https://support.apple.com/ro-ro/guide/deployment/dep2ac3e3b51/web Cert este ca routerul duce mai mult decat deviceurile ce le folosesc. Daca routerul este capabil AX la 2 mimo atat pe partea de router cat si de client estimez o viteza de 750-800Mbps, ceea ce e destul de bine. Update, screenshoot facut din qbittorrent, de pe un MBP M1 Pro, pe WIFI: Sper sa va fie de folos! Have fun! PS: daca am facut vreo greseala, o sa o corectez zilele urmatoare, am inceput sa scriu la 23 si e 03
  2. Cine m-o fi pus sa beau 1l+ de votka la poker... de nu mai vedeam bine cartiile
  3. Si eu mai intru cam o data pe luna, stau 3-5 min si aia e... since 2006
  4. Nu, API nu e scris de mine, l-am gasit gata scris, si am inceput de acolo. Poate il scriam eu daca nu exista, cand m-am lovit de bugul mentionat m-am gandit sa imi scriu singur api, apoi am zis ca e in afara scopului...voiam sa ajung repede la rezultat fara prea mare bataie de cap. Este un proiect de fun, nu vreau sa investesc in el sau sa il dezvolt mai mult.
  5. Vad ca te-ai documentat putin. Diferenta e ca pot sa iti descarc si flac-uri (prin link de app desktop/mobile) doar ca, sunt cum spui si tu criptate. Foloesc WidevineCDM. Iti dau multe fisiere prin web doar. Si calitate master ai doar pe Mac/Win cu aplicatia de desktop. Eu folosesc de cativa ani Tidal, si sunt fan, chiar face diferenta pe un sistem bun/casti bune, adica e asta si restul din punctul meu de vedere. (legat de valorile exacte le-am mentionat in primul post) Da asa este Spotify are un sistem de recomandari incredibil de bine pus la punct! Asta e motivul pentru care am si Spotify :)))).
  6. Nu intentionez sa postez jucaria in alta parte. Am facut-o pt mine si am zis sa o pun si aici, nu vreau sa o stie chiar tot netul dupa :))) Daca nu te descurci la ceva, scrie-mi PM si o sa incerc sa te ajut.
  7. Pentru android si ios, ai optiunea de a le descarca si asculta offline, diferenta intre ce gasesti pe torrent si asta, este calitatea. Daca te gandesti la piraterie, ma gandesc la compatibilitate, eu in continuare platesc abonamentul, si daca masina nu e compatibila si am placerea de a asculta melodiile in masina, gresesc cu ceva?
  8. Salutare Guys, Cum se mai intampla sa te plictisesti in concediu, am facut azi, un script in python cu care poti descarca melodii de pe Tidal (https://tidal.com). Tidal este un serviciu de streaming online asemanator Spotify, doar ca are o calitate net superioara: HI-FI - 44.1 kHz/16 bit flac si mp4 si Master - 96 kHz/24 bit (MQA) - flac . Daca ai niste scule decente (fie ca e vorba de casti sau un sistem) e must have! Povestea a inceput de la nevoia de a descarca niste melodii pentru a le asculta offline, si cum nu am gasit nimic functional, am decis sa scriu eu aceasta aplicatie. Si m-am gandit sa impartasesc cu voi! Dependinte (e posibil sa imi fi scapat cateva): pip install tidalapi Unidecode ffmpeg - trebuie sa fie in system path Testand jucaria am gasit un bug in tidalapi: in cazul in care o melodie nu are relese date, va crapa, este un caz extrem de rar, si se intampla inspecial la unele melodii vechi. Daca iti place doar muzica noua si foarte comerciala cu siguranta nu ai neaparat nevoie de acest fix. # fix in tidalapi: # edit __init__.py # from line 224 # change: # if 'releaseDate' in json_obj: # try: # kwargs['release_date'] = datetime.datetime(*map(int, json_obj['releaseDate'].split('-'))) # except ValueError: # pass # return Album(**kwargs) # with: # if 'releaseDate' in json_obj: # if json_obj['releaseDate'] is None: # json_obj['releaseDate'] = '2008-10-14' # try: # kwargs['release_date'] = datetime.datetime(*map(int, json_obj['releaseDate'].split('-'))) # except ValueError: # pass # return Album(**kwargs) Salvati codul intr-un fisier .py, si rulati-l. Apropo, caile catre fisierele salvate/creerea de directoare este hardcodata in format *nix, deci nu va asteptati sa va mearga pe windoza fara mici finisaje. Este scris si testat in Python 2,7 (defaultul la macOS Majave) dar am cautat sa il tin compatibil si cu Python 3.x (sper ca mi-a iesit). # -*- coding: utf-8 -*- # RST Tidal MP4 Downloader by Cheater v1.0 (https://rstforums.com) # All tracks will be download in PCM (MPEG AAC Audio coded, MP4A) at 44100 Hz/16 bits, 320 kbps and stored in MP4 container # requirements: # pip install tidalapi Unidecode # ffmpeg # tidalapi has a bug, so if some album/playlist contains one song with no date, it will exit, this is very rare, however, there is some workaround. # fix in tidalapi: # edit __init__.py # from line 224 # change: # if 'releaseDate' in json_obj: # try: # kwargs['release_date'] = datetime.datetime(*map(int, json_obj['releaseDate'].split('-'))) # except ValueError: # pass # return Album(**kwargs) # with: # if 'releaseDate' in json_obj: # if json_obj['releaseDate'] is None: # json_obj['releaseDate'] = '2008-10-14' # try: # kwargs['release_date'] = datetime.datetime(*map(int, json_obj['releaseDate'].split('-'))) # except ValueError: # pass # return Album(**kwargs) import tidalapi import os import subprocess import errno import shlex from aigpy.cmdHelper import myinput from subprocess import Popen, PIPE, STDOUT from random import randint from time import sleep import unidecode # compatibility workaround for py27/py3 try: from subprocess import DEVNULL # py3k except ImportError: import os DEVNULL = open(os.devnull, 'wb') # fill this with your tidal user and pass tidalUser = '' tidalPass = '' cwd = os.getcwd() config = tidalapi.Config() # using HIGH quality in order to get mp4's unencrypted url instead of enctyped flac config.quality = 'HIGH' session = tidalapi.Session(config) session.login(tidalUser, tidalPass) def getTidalTrackUrl(track_id): try: url = session.get_media_url(track_id) return url except: # in case we need to retry we add a random sleep, in order to worckaround bot detection sleep(randint(1,10)) print('Tidal responds with 401. Retrying track url discovery for track id: ' + str(track_id)) generatePlaylistTrackUrl(track_id) def downloadAlbum(): while True: print("----------------ALBUM------------------") sID = myinput("Enter AlbumID(Enter '0' go back) :") if sID == '0': return tracks = session.get_album_tracks(album_id=sID) queue = [] for track in tracks: trackNo = str(tracks.index(track) + 1) # don't try to download unavailable track, it will fail if track.available is False: continue # replace utf-8 diacritics with ascii equivalent, and cleanup " and ' from album/artist/track name trackName = unidecode.unidecode(track.name).replace('"', '').replace("'", "") artistName = unidecode.unidecode(track.artist.name).replace('"', '').replace("'", "") albumName = unidecode.unidecode(track.album.name).replace('"', '').replace("'", "") print('Adding to queue: ' + artistName + ' - ' + albumName + ' - ' + trackNo + '.' + trackName) # create dw directory and subdirs if it not exits if not os.path.exists(cwd + '/tidalDownloaded/' + albumName): os.makedirs(cwd + '/tidalDownloaded/' + albumName) cmd = 'ffmpeg -y -i "rtmp://' + getTidalTrackUrl(track.id) + '" -acodec copy "' + cwd + '/tidalDownloaded/' + albumName + '/' + trackNo + '.' + artistName + ' - ' + trackName + '.mp4"' queue.append(cmd) print('All track has been added to queue successfully. Download begins....') processes = [] for cmd in queue: p = subprocess.Popen(shlex.split(cmd), shell=False, universal_newlines=True, stdout=DEVNULL, stderr=subprocess.STDOUT) processes.append(p) print('All tracks download is in progress. Please wait....') # wait for all started ffmpeg processes to be finished for p in processes: if p.wait() != 0: print("There was an error") print("Finished. All tracks has been download successfully!") return True def downloadPlaylist(): while True: print("----------------PlayList------------------") sID = myinput("Enter PlayList(Enter '0' go back) :") if sID == '0': return playlist = session.get_playlist(playlist_id=sID) tracks = session.get_playlist_tracks(playlist_id=sID) queue = [] for track in tracks: trackNo = str(tracks.index(track) + 1) # don't try to download unavailable track, it will fail if track.available is False: continue # replace utf-8 diacritics with ascii equivalent, and cleanup " and ' from playlist/artist/track name playlistName = unidecode.unidecode(playlist.name).replace('"', '').replace("'", "") trackName = unidecode.unidecode(track.name).replace('"', '').replace("'", "") artistName = unidecode.unidecode(track.artist.name).replace('"', '').replace("'", "") print('Adding to queue: ' + playlistName + ' - ' + trackNo + '.' + artistName + ' - ' + trackName) # create dw directory and subdirs if it not exits if not os.path.exists(cwd + '/tidalDownloaded/' + playlistName): os.makedirs(cwd + '/tidalDownloaded/' + playlistName) cmd = 'ffmpeg -y -i "rtmp://' + getTidalTrackUrl(track.id) + '" -acodec copy "' + cwd + '/tidalDownloaded/' + playlistName + '/' + trackNo + '.' + artistName + ' - ' + trackName + '.mp4"' queue.append(cmd) print('All track has been added to queue successfully. Download begins....') processes = [] for cmd in queue: p = subprocess.Popen(shlex.split(cmd), shell=False, universal_newlines=True, stdout=DEVNULL, stderr=subprocess.STDOUT) processes.append(p) print('All tracks download is in progress. Please wait....') # wait for all started ffmpeg processes to be finished for p in processes: if p.wait() != 0: print("There was an error") print("Finished. All tracks has been download successfully!") return True while True: print(" RST Tidal MP4 Downloader by Cheater v1.0 (https://rstforums.com)") print("=====================Choice=========================") print(" Enter '0' : Exit") print(" Enter '1' : Download Album.") print(" Enter '2' : Download PlayList.") print("====================================================") print("All tracks will be download in PCM (MPEG AAC Audio coded, MP4A) at 44100 Hz/16 bits, 320 kbps and stored in MP4 container") choice = myinput("Choice:") if choice == '0': quit() elif choice == '1': downloadAlbum() elif choice == '2': downloadPlaylist() Ce stie sa faca? 1. Poti descarca un album 2. Poti descarca un playlist 3. Adauga melodiile intr-o coada, si le descarca simultan pentru a scurta timpul de asteptare semnificativ. Daca aveti intrebari sau nu va descurcati puteti scrie aici, si va voi ajuta in limita timpului disponibil (adica sper sa nu fie nevoie :))) ). PS: Fiti blanzi cu code review, sunt programator si python nu este specialitatea mea, este al 2-lea script scris in python si prima interactiune am avut-o in decembrie. PS2: Distractie si La multi ani! PS3: Feel free to improve it! Later: Am gasit un tool functional de download scris de altcineva (daca il gaseam mai repede probabil ca nu il mai scriam eu pe asta, deci nu e neaparat bine): https://github.com/redsudo/RedSea acest tool spre deosebire de ce am scris eu, stie de si decripteze flacurile, astfel poate descarca inclusiv MQA de 92k / 24bit (cea mai intalta calitate disponibila pe tidal), si flac 44.1k / 16bit cu un bitrate de 1.411 kbps. Decriptarea nu e rocket sience, dar cu siguranta a fost nevoie de un reverse engineering serios pentru aflarea algoritmului si key de criptare (AES cu key binara, tinuta in base64 in cod).
  9. Eu cred ca leak-ul a fost intentionat, ganditi-va ca din mai intra GDPR, si cum ei nu au anuntat nimic in primele 72h, daca s-ar fi aflat dupa aceasta data amenda ar fi fost giganta: Sanctions The following sanctions can be imposed: a warning in writing in cases of first and non-intentional noncompliance regular periodic data protection audits a fine up to €10 million or up to 2% of the annual worldwide turnover of the preceding financial year in case of an enterprise, whichever is greater, if there has been an infringement of the following provisions (Article 83, Paragraph 4[21]) the obligations of the controller and the processor pursuant to Articles 8, 11, 25 to 39, and 42 and 43 the obligations of the certification body pursuant to Articles 42 and 43 the obligations of the monitoring body pursuant to Article 41(4) a fine up to €20 million or up to 4% of the annual worldwide turnover of the preceding financial year in case of an enterprise, whichever is greater, if there has been an infringement of the following provisions: (Article 83, Paragraph 5 & 6[21]) the basic principles for processing, including conditions for consent, pursuant to Articles 5, 6, 7, and 9 the data subjects' rights pursuant to Articles 12 to 22 the transfers of personal data to a recipient in a third country or an international organisation pursuant to Articles 44 to 49 any obligations pursuant to member state law adopted under Chapter IX noncompliance with an order or a temporary or definitive limitation on processing or the suspension of data flows by the supervisory authority pursuant to Article 58(2) or failure to provide access in violation of Article 58(1) https://en.wikipedia.org/wiki/General_Data_Protection_Regulation#Sanctions
  10. Cheater

    Ariadne

    Subscriu, si mie mi-a dat teapa... Bine o sa zica ca am fost sa beau si daia nu eram acolo, dar nu recunosc nimic
  11. Eu am folosit si recomand pfsense, e bazat pe freebsd si merge excelent. Spor!
  12. Cred ca poti intreba si la telefon daca sunteti pe aceeasi pagina. via-a-vis de salariu. Plus serios, acum, daca esti programator sti preturile din piata, si in afara de cateva exceptii, si aici ma refer la firme mai ciudate unde cred ca sunt smecheri si platesc sub piata, salariile sunt tot pe acolo.
  13. @redcoder, pe tine te-a suparat cineva! Este doar un anunt de job, nu stiu cum ai vedea tu anuntul ideal pentru tine. Salariul in 99% din cazul este confidential si nu va fi discutat decat live, lucru ce este firesc. Iar pana la o astfel de discutie este mai putin relevant, ce credem despre, cum ni se pare.... viata bate filmult din mintea noastra Totusi nu cunosc programator senior ce sa ia doar 3000 ron. Iesirile la masa nu sunt obligatorii, si se intampla de obicei in pauza de masa, de la pranz. Eu inteleg ca vrei sa schimbi lumea joburilor, si cred ca nu postezi unde trebuie pt asta, te rog lasa loc si pentru cei cu adevarat interesati sa posteze. Multumesc,
  14. Am actualizat anuntul, si legat de salariu, pot spune ca se plateste fair, in rest mai multe detalii puteti vorbi cu colega de la HR dupa ce aplicati.
  15. Misiunea job-ului tau: Sa faci o diferenta prin valoarea pe care o poti aduce in cadrul echipei! Mai exact, sa contribui la dezvoltarea si imbunatatirea platformei software Co-Factor cu ajutorul careia generam un impact pozitiv asupra angajatilor si business-urilor clientilor nostri. Cine suntem noi, Co-Factor:O echipa tanara si motivata, cu ambitii care depasesc granitele Romaniei, pozitionandu-ne ca un creator de valoare si nu un provider de servicii de outsourcing. Ca si confirmare a inovativitatii noastre, solutia software dezvoltata de Co-Factor a fost premiata de industria de HR iar clientii nostri sunt companii de top precum Banca Transilvania, Regina Maria, Groupama, eMAG, Deloitte, Avon Cosmetics, Ernst & Young si altii.Biroul este pozitionat intr-o zona premium, pe Bulevardul Primaverii (langa Parcul Herastrau si in apropiere de Pta Charles de Gaulle) intr-o atmosfera fresh si relaxanta.Responsabilitati: • Dezvoltarea si perfectionarea solutiei software Co-Factor care integreaza procese de HR si business precum managementul performantei, inovare interna colaborativa, comunicare sociala, recunoastere si gamification etc • Colaborarea cu restul echipei, aducand valoare prin participarea la intalniri de planificare, organizare si strategie, intalniri de code review, precum si prin idei de imbunatatire continua a solutiei• Furnizarea de solutii creative si eficiente la probleme care par in munca de zi cu zi • Root-cause analysis si definirea de solutii tehnice• Oferirea de sugestii de imbunatatire a proceselor si tehnologiilor oferite • Definirea/ clarificarea task-urilor si estimarea corecta a nivelului de efort in proiecte• Colaborarea activa cu ceilalti colegi din cadrul Co-Factor, in vederea indeplinirii cu succes a misiunii job-ului. • Prioritizarea task-urilor si executia lor in timing-ul asumat pentru a livra conform promisiunilor• Contributia la definirea solutiilor impreuna cu echipa atat in ceea ce priveste proiectele noi cat si cele existente • Mentorat si inspiratie pentru colegii cu mai putina experienta • Nu in ultimul rand, apetit pentru inovare si o atitudine plina de energie pozitiva, ca factor motivator in munca de zi cu zi!Expertiza tehnica: 2-4 ani de experienta ca PHP developer.Experienta in PHP, MySql, OOP, MVC, javascript (jquery), versioning (git) si composer.Know-how in RESTful services si design patterns.In plus, ar fi “nice to have” daca ti-ai putea aduce aportul si la dezvoltarile in REACT, ES6 si scriind unit tests.Cum lucram noi: Probabil te-ai obisnuit sa lucrezi Agile, asta este si modul nostru de lucru.Ca tehnologie, suntem in proces de migrare spre Symfony 3 si React.Suntem fani linux, si aparatul nostru de cafea face cea mai buna cafea! Nu ne crezi? Te asteptam sa vezi!Ce-ti oferim?Salariu atractivAsigurare de sanatate premiumPosibilitatea de promovare si dezvoltare profesionala Locatie si atmosfera frumoasaTeam-buildinguri anuale, iesiri periodice la masa impreuna, work + fun! Poti aplica aici: https://www.bestjobs.ro/locuri-de-munca-php-developer/295456/5
×
×
  • Create New...