Jump to content
php.lv forumi

des

Reģistrētie lietotāji
  • Posts

    307
  • Joined

  • Last visited

Everything posted by des

  1. Man šķiet diezgan jocīgi sagaidīt, ka kandidāts zinās jaunākās PHP versijas nr. ar precizitāti lidz minoram.
  2. A no kurienes datus ņem šitā funkcija (lgsl_query): $player_list = lgsl_query($get_ip, $get_port, $get_type, "players"); ?
  3. :) es pa zemi. Pirmie 3 tagi viņu lapā vienkārši iefascinē: <body> <html> <head>
  4. Interesanta diskusija jums te izvērtusies :) Par izglītību runājot. Nezinu, kā ir RTU, neesmu mācījies. Tomēr LU DatZ bakalaurus esmu nolauzis. Pēc gada droši vien, ja nekas ekstrēms negadīsies, būs arī maģistri tur pat pabeigti. Par programmēšanu. To tiešām iemāca. Reāli pat tādiem, kas nav pirms tam programmējuši, bet grib mācīties. Tiem, kas vidusskolas laikā ir jau kaut kādās olimpiādēs paprogrammējuši, tas viss, protams, relatīvi ir nieks. Lai gan par dinamiskajām datu struktūrām man bija jaunums. Krutākais, ko pirms tam Paskālā zināju, bija record un vairākdimensiju masīvi. Par matemātiku. Matanalīze, algebra, diskrētā matemātika - tas viss principā paceļ domāšanu vienu meta līmeni augstāk. (lol, vajadzētu jau pamatskolā mācīt, ka visa matemātika pēc būtības sastāv no jēdzieniem "kopa" un "funkcija" :D ). Tie, kas vēl paspēja izbaudīt Detlovu (R.I.P.) zina, ka viņa priekšmetus gluži laižot muļķi vis nokārtot nevarēja. Tālāk, protams, ūdenskrituma un citas populārākas programmatūras izstrādes metodikas tiek izmaltas diezgan pamatīgi un vairākos kursos. Būtiskākais - liek saprast, ka laba plānošana un projektēšana (nevis maniakāla kodēšana "no viena stūra") ir ļoti svarīgi procesi, kas pašu koda rakstīšanu padara daudz vienkāršāku. Par testēšanu. No specifiskajiem testēšanas kursiem, principā var izsprukt. Tomēr vismaz Arnicāna testēšanas kurss atklāj, ka testēšana nav vis gluži tas pats, kas atklāt, ka, zomg, draugos ar java script:void(blablaba...) var pamodificēt mass msg sūtīšanas formu klienta pusē tā, lai varētu nosūtīt ziņojumu patvaļīgam lietotāju lokam, pietam, patvaļīgu skaitu reižu katram. Viens no visa šī kvesta galvenajiem bosiem, protams, ir Strods. Tie, kas ir tikuši cauri, zina, par ko es runāju :) Atliek vienu reizi atnākt piecas minūtes vēlāk uz lekciju, kad ir mazais kontroldarbs, un babāc - pēc viņa maģiskajām formulām no galējā vērtējuma stabili kādas 1-1.5 balles nost :) Principā nekārtojot šo kursu ar maksimālu uzmanību, diezgan liela varbūtība, ka galējais rezultāts būs negatīvs (jā <0, nevis nesekmīgs, tobiš tikai <4) :) Protams daudzi praktiskie uzdevumi nebija pārāk interesanti. Tomēr iemācīja vienu: piespiesties izdarīt arī to, kas nav pārāk patīkams. Zināmas permanentā slinkuma zāles. Jā, kaut kad 1.-2. kursā man vēl bija doma, ka visu var nokārtot neko nedarot tāpat kā vidusskolā... Tā kā galīgi nepiekritīšu viedoklim, ka augstākā izglītība - tas ir pilnīgs fufelis. Turklāt pēdējā laikā vairāki pasniedzēji ir stipri advancējuši plaģiātu ķeršanas tehnoloģijas. Līdz ar to daudzi "gudrīši" dēļ sava bezdomu copy/paste darbu cepšanas tiešām nenokārto atsevišķus kursus. Visas šīs manas pārdomas, protams, neizslēdz arī pašapmācības spēku :) Principā jāmācās klāt kaut kas ir visu laiku. Nepastāv tāda lieta kā stāvēšana uz vietas. Ja Tu neprogresē, tātad regresē.
  5. Pieļauju, ka ar VB domāts VB. NET nevis VB 6. Jebkurā gadījumā ir gadījies no malas pavērot, kā keksi cep webprojektu .NET tehnoloģijā. Valoda gan C#, bet tas būtību īpaši nemaina. Lielāks murgs nav redzēts. Pie tam jamajiem ir prasības, ka jāiet uz visiem modernajiem browseriem, ne tikai IE :) Cik "skaisti" .NET kontroļi izskatās, piemēram, iekš FF :D
  6. Nu vispār jau jebkurā darba vietā ir svarīga ne tikai alga, bet arī vadības attieksme un atmosfēra vispār. Savu mūžu man nav vajadzīgs, pirmēram, ka mani kāds natūrā emocionāli terorizē, lai arī maksā lielu piķi. Vēl jau laiku pa laikam gadās redzēt sludinājumus, kur grib dabūt php/mysql/html/css/js + flash/photoshop utt. pārzinošu cilvēku pa 150-200 ls :D Tobiš vienu, kas gan kodē, gan taisa dizainu.
  7. des

    klase klasē

    Labi. Principā piekrītu, ka diezgan labs tas singletons. Vienīgais gari katru reizi raksīt "$db = DB->getInstance()". Uzraksīt "global $db" tomēr ir stipri ātrāk. Bet tas, protams, ir arguments "no slinkuma". Var jau visādus macrosus priekš biežāk rakstāmajām konstrukcijām lietot. Būtībā es jau arī fanoju par "raksti vienreiz, izmanto daudzreiz". Organiski ienīstu copy-paste & replace stila kodēšanu.
  8. des

    klase klasē

    Nu paga.. Arī ar visu singletonu tāpat var kļūdīties. Var kaut vai aizmirst to instanci paprasīt, un tad brīnīties, kapēc kveriji neiet. Ir visādi "frukti". Ir tādi, kuri uzliks pilnīgu pofigu uz OOP vispār un taisīs paši savas konekcijas, kā sagribēsies. Manuprāt, ka tādiem, kas pamanās saveidot vairākas konekcijas/neizveidot ne vienu vispār nav ko lielos php projektos darīt.
  9. des

    klase klasē

    Nu ja pamanās DB klasi inicializēt vairākkārtīgi, tad jau visa projekta arhitektūra ir kaut kāda stipri kreisa...
  10. des

    Par phpbb

    Tevi interesē 4 tabulas: posts, posts_text, topics, forums (sākumā prefikss, ja esi uzlicis) Aptuvenā ideja ir pie posts pieleftjoinot posts_text, tad topics un tad forums. Sīkāk pētīt man nav tagad laika. Paskaties taču forma db šo tabulu laukus, un sajointo pēc attiecīgajiem idiem...
  11. Es drīzāk clients_ind un clients_jur taisītu kā vienu tabulu un to pazīmi client_type liktu tajā tabulā. Bet vismaz priekš 5. mysql risinājums ir tāds: SELECT CASE r.client_type WHEN 1 THEN CONCAT(i.id, ci.name) WHEN 2 THEN CONCAT(i.id, cj.name) END Klienc FROM items_clients_rel r LEFT JOIN items i ON (i.id = r.items_id) LEFT JOIN clients_ind ci ON (ci.id = r.client_id) LEFT JOIN clients_jur cj ON (cj.id = r.client_id)
  12. doma aptuveni taada: ajax.js: //the requests reqs = new Array(); //single request function AjaxRequest(req, func, id) { this.req = req; this.func = func; this.id = id; } function execRequests() { for (var i = 0; i < reqs.length; i++) { if (reqs[i].req.readyState == 4 && (reqs[i].req.status == 200 || reqs[i].req.status == 304)) { reqs[i].func(reqs[i].req.responseText, reqs[i].id); reqs[i].req = null; reqs.splice(i,1); } } } //ajax constructor function Ajax() { } Ajax.prototype.createRequest = function() { try{ // Opera 8.0+, Firefox, Safari return new XMLHttpRequest(); } catch (e) { // Internet Explorer Browsers try{ return ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try{ return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { // Something went wrong alert("Your browser does not support Ajax. Get FireFox! www.mozilla.com"); return false; } } } } Ajax.prototype._rndsid = function(url) { if (url.indexOf('?') == -1) return url + "?___ajaxsid=" + Math.random(); return url + "&___ajaxsid=" + Math.random(); } Ajax.prototype.doreq = function(method, url, para, func, id, timer) { var request = this.createRequest(); if (!request) return false; request.onreadystatechange = execRequests; request.open(method, this._rndsid(url), true); if (method == "POST") { request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); request.setRequestHeader("Content-length", para.length); request.setRequestHeader("Connection", "close"); request.send(para); } else { request.send(null); } reqs.push(new AjaxRequest(request, func, id)); if (timer) { var _this = this; setTimeout(function(){_this.doreq(method, url, para, func, id, timer);}, timer); } } Ajax.prototype.get = function(url, func, id, timer) { this.doreq("GET", url, "", func, id, timer); } Ajax.prototype.post = function(url, para, func, id, timer) { this.doreq("POST", url, para, func, id, timer); } //fill Ajax.prototype.doFill = function(res, id) { document.getElementById(id).innerHTML = res; var js = new RegExp('(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', 'img'); var matches = res.match(js); if (matches) for (i in matches) eval(matches[i].replace(/<script.*?>/g, "").replace(/<\/script>/g, "")); } Ajax.prototype.getFill = function(url, id, timer) { this.get(url, this.doFill, id, timer); } Ajax.prototype.postFill = function(url, para, id, timer) { this.post(url, para, this.doFill, id, timer); } //eval Ajax.prototype.doEval = function(res) { eval(res); } Ajax.prototype.getEval = function(url) { this.get(url, this.doEval); } Ajax.prototype.postEval = function(url, para) { this.post(url, para, this.doEval); } ajax = new Ajax(); testmyajax.html (jā, ne tuvu nav valīds :D): <html> <head> <script language="javascript" type="text/javascript" src = "ajax.js"></script> </head> <div id = "res"> </div> <div id = "a"> </div> <div id = "b"> </div> <script language="javascript" type="text/javascript"> ajax.getFill("rnd.php", "res", 1000); </script> </body> </html> un rnd.php: <?php echo rand(1, 5000); ?> <script> document.getElementById("a").innerHTML = "aa"; </script> <script language="javascript" type="text/javascript"> document.getElementById("b").innerHTML = "bb"; </script> Ajax.doFill metode noevalo visus skriptus arī, ja tādi ir.
  13. Vēl varu piebilst, ka gadījumos, kur sagaidāmi veseli skaitļi (tipa visādi id), arī nokāstojam tos: $id = (int)$id;
  14. Kruta - 40kb webspace par Ls 0.02 meenesii :) Bet, ja nopietni, tad es neesmu lv saskaaries ar hostinga firmu, kurai viss riteetu bez jebkaadas aizkjershanaas. Ta jaa pashaa laikaa ar serveris.lv var daudz ko sarunaat, ja to dara mieriigi un paskaidrojot savu vajadziibu. Kaut vai, piemeeram, pieeju mysql no aarpuses no atsevishkjaam ip adreseem.
  15. exactly. Un ja maksaa Ls5 meen, tad galiigi nav ko iedomaaties, ka esi VIP.
  16. Nu jaa. Veel jau jamie kaadus 100+ klientus tur uz vienas kastes. Par to liideri - tie jau ir maarketinga pamati - da par jebkuru produktu taa razhotaajs saka "mees, labaakie un tie citi, parastie".
  17. Ideja par faktiem ir ljoti vienkaarsha. Es nedaudz ironizeeju. Tu vienkaarshi nevienam nepieraadiisi, ka tajaa un tajaa briidii VINJU deelj bija taads un taads gljuks shitaadaa un taadaa lapaa. KLIENTS vainos izstraadaataaju, nevis hosteetaaju. Hosteetaaju var vainot, piem, ja neatgriezeniski nobruuk db. Un tur arii veel jaapieraada, ka Tavos skriptos nebija visaadi drop table, gljukaini delete from, utt. Diezmheel hosteetaajam vienmeer ir priekshrociiba taadaa zinjaa, ka vinjsh ar servera logiem, Taviem skriptiem vajadziibas gadiijumaa var sadariit, ko vien grib. Par php3 drusku paarspiilee :) Bet par php5 taisniiba - tur ar backward compatibility ir galiigaa dirsaa. Nu principaa man tur dazhi seni projekti pie vinjiem griezhaas, kurus shad tad minimaali vajag pakorigjeet. Jaunus klientus vairaak pie vinjiem nesuutu. Dazhi jau ir aizvaakti citur. Mana attieksme ir, ka nobody is perfect. Kljuumes gadaas visiem. Downtime ir bijushi gan yahoo.com, gan goolei, taa kaa nav, ko satraukties. Aiziet no kaada servera var jebkuraa mirklii, neviens netur.
  18. Nu 3.x uz 4.0.x veel buutu pooh. Bet paareja notika uz 4.1.x, kuram ir taada niansiite, kaa stipri savaadaaka attieksme pret db, tabulu un kolonnu encodingiem. Liidz ar to dazhaam lapaam gadiijaas visaadi smuki blakusefekti. Bet katraa zinjaa to, ka vinji BEIDZOT to izdariija, arii var apsveikt. Arii phpmyadmina versija peec nezcik gadiem ir uzlikta jauna... Nu bet tur arii ir taa pati probleema - vecajaas tabulaas, kuraam ir latin1 encodings normaali never ar lv burtiem rakstiit, par cik viss tas phpmyadmins griezhas uz utf8. mysql konekcijas nomainiishana uz latin1 arii neliidz.
  19. Neredzēju kaut kā nevienu FAKTU :) Ā, nu jā, pārgāja jamie no mysql 3.whatever tur kaada uz 4.1.x bez īpaša brīdinājuma. Ir bijuši īslaicīgi downtime pa dienu, viens ilglaicīgāks pa nakti, ko esmu piedzīvojis. Bet taa ir OK. Un princpā katrs pats uzņemas atbildību, ja raksta standartiem neatbilstošus skriptus, html, utt.
  20. Pietiekoshi viegls un tajaa pashaa laikaa funkcionaals editors, kursh atbalsta utf8, ir notepad2. Taa kaa vinjsh aiznjem tikai 242kb, tad vinju vienmeer ir eerti ljoti aatri uzlikt pat pie ljoti leena interneta piesleeguma. Nu vismaz es to notepad2 diezgan biezhi izmantoju.
  21. Šim risinājumam ir viena problēma. Lietotājs ielogojās un aizver browseri. Šis lietotājs pēc tam visu laiku rādās online. Ir vajadzīgs vēl kaut kāds timestamps, kurš jāupdeito pie katra lietotāja klika. Un tad jāselektē lietotāji, kuri ir kaut ko darījuši pēdējās x minūtēs.
  22. Nu jā. Es pie tam aizmirsu piebilst, ka id pārupdeitošana jāveic visās saistītajās tabulās, ja tādas ir :DDD
  23. It seviskji tipa, ja ir tabula ar vairaakiem simtiem tuukstoshu ierakstu, tad kaads obligaati visus tos caurumus ieveeros :) Kas vinji tieshaam pie katras dzeeshanas taisa "update table set id=id-1 where id>$deleted"? :) Neenu labi, ja ir tabula ar liidz 10 ierakstiem un katru vakaru pirms guleetieshanas ieraksti tiek apskatiiti un apmiiljoti, un apchubinaati, tad, protams, tas caurums starp 5 un 7 ir ljoti nesmuks un traumeejoshs, un droshi vien tabulas iipashniekam nelabus sapnjus izraisoshs :D
  24. Nu parasti vairākas db es izmantoju tikai, ja ir jāsinhronizē kaut kas starp dažādām db. Bet tad jau arī pārsvarā tās bāzes atrodas uz dažādiem serveriem... Tad bez 2 konekcijām neizbēgt. Standarda webaplikācijām neredzu nopietnu iemeslu, kāpēc visas tabulas nevarētu glabāt vienā db, ja nu vienīgi, ja tiek izmantotas kaut kādas šārotās tabulas starp vairākām aplikācijām. Bet arī šārotās tabulas var glabāt tajā pašā db, attiecīgi, izmantojot prefiksus. Lai gan 100+ tabulas vienā db turēt nav īpaši ērti no pārskatāmības viedokļa.
  25. Atljaushos piebilst, ka eksistee gadiijumi, kad bez substr un citu funkciju izmantoshanas db pusee iztikt nevar (ja taadu gadiijumu nebuutu, tad attieciigaas dbps izstraadaataaji nebuutu puuleejushies taas funkcijas rakstiit). Bet taas gan paarsvaraa tiek izmantotas situaacijaas, kad tas querijs ir jaapilda ljoti reti, tipa reizi dienaa. Bet ja tas ir querijs, kuram jaaizpildaas pie katra lapas pieprasiijuma, tad, protams, ka ir jaacenshas izvairiities no liekaam fjaam sql pusee. Arii no visaadiem SELECT COUNT..... , protams.
×
×
  • Create New...