Jump to content
php.lv forumi

Venom

Moderatori
  • Posts

    1,918
  • Joined

  • Last visited

Posts posted by Venom

  1. Un tomeer varu pateikt, ka tas viss notiek pa iteraacijaam.

    Man šķiet, precīzāk būtu teikt - pa spirāli. Izejot no centra - plašāk un dziļāk, bet tomēr apkārt vienam punktam.

    Haosa teorija.

     

    Vienmēr esmu teicis, ka OOP ir saistīts ar filosofiju.

     

    Vēl baigi vajag laptopu, bet jāuzgaida, kamēr iedos no darba/sakrāšu pats (atkarībā no maģistrantūras maksas). Un vairāk brīva laika (kas, savukār, varētu atrisināt laptopa problēmu, jo neapūtušamies pie mājas datora sēdēt kaut kā negribās - tā jau 8 stundas uz dirsas nodeldētas :unsure:).

  2. 2AcidRain: sarunājam. Varbūt padomāt arī par Kylix... Šodien ap 18 sanāks? :ph34r: Kā nekā progress jābīda uz priekšu.

     

    Uz doto brīdi VenPad funkcionalitāte mani pati par sevīm apmierina, gribu ieviest UTF-8 un tabus + iespēju noredirektēt venpad.ini (piem uz %USERPROFILE%, lai VeA katram varētu no būt savs profils, kaut arī pads palaižās no abavas) un neizmantot preview (nelādēt IE kontroli, lai zem Linuxa Wine nemet ārā kļūdas paziņojumu). Diemžēl dēļ tā jāpārraksta viss no jauna. Kad būs vairāk vai mazāk gatavs, ir iedeja palaist padarīšanu uz OpenSource/CreativeCommons.

     

    Savukārt utf nesuports mani pieradināja viegli un ātri taisīt vairākvalodu interfeisus. Resp. viss teksta outputs balstās uz sekojošu fīču (VenLang koda izrāviens):

     

    //try to load dictionary

    @include_once('tr_'.$_SESSION['lng'].'.php');

     

    //processing loadoff

    if (isset($dict))

    {

    .function tr($tmp,$post='')

    .{

    .. //if no transl., return the same

    ..if (empty($tr[$tmp]))

    ...return $tmp;

    ..//if w/postfix

    ..if ($post && !empty($tr[$tmp.'/'.$post]))

    ...return $tr[$tmp.'/'.$post];

    ..return $tr[$tmp];

    .}

    }

    else

    {

    .function tr($tmp,$post='')

    .{

    ..return $tmp;

    .}

    }

     

    attiecīgi tr_lv.php satur

    $dict=array('cat'=>'kaķis','cat/small'=>'kaķēni',...);

    bet tr_ru:

    $dict=array('cat'=>'кот','cat/small'=>'котята',...);

     

    (jau UTF-8 vai citā vajadzīgā kodējumā)

     

    iekš index.php

    echo tr('cat').' & '.tr('cat','small');

  3. Ideja: aizvietot simbolu secību, kas netiek pārrauta ar atstarpi, ja tā ir garāka par 20 simboliem un aizvietot to ar 12simb.'...'.5simb:

     

    preg_replace(/([^\ ]*){20,}/,substr('\\1',0,12).'...'.substr('\\1',-5),$text);

     

    sakarā ar: <cut>

    8 line = $badword = trim($o[$i]);

    kas tur nav taa kaa vajag?</cut>

     

    tu laikam izmanto šo te <cut>

    for ($i=0;$i<=count($o);$i++) </cut> variantu,

    tad zini jēl, ka tur jābūt

    for ($i=0;$i<=sizeof($o)-1;$i++)

    vai pat labāk

     

    $tmp=sizeof($o)-1;

    for ($i=0;$i<=$tmp;++$i)

     

    bet, tā kā secībā kādā vārdi tiek nomainīti (no pirmā līdz pēdējam, vai no pēdējā līdz pirmam) nav svarīga, iesaku tomēr masīva indeksu mazināt, pie tam tieši ar pre-dekrementēšanu kāpēc:

    a) kad skaitītājs tiek palielināts (++$i,$i++), tiek pārbaudīts, vai tā tips nav jāpaplašina (piem no byte (līdz 255) uz int (255 ...65355; ja neņem vērā "-" vērtības)) - papildus operācija; ja tas tiek pazemināts (--$i,$i--), tad tipa maiņa notiek tikai šķērsojot 0.

    B) $i++ nozīmē - atgriezt $i vērtību lai to varētu palielināt to par 1, izdarīt to, atgriezt izteiksmē

    ++$i nozīmē palielināt $i vērtību par 1 (lai nu kāda tā būtu), atgriezt vērtību

     

    izmantojot a+b uz katra cikla tiek ietaupītas 2 zemākā līmeņa operācijas.

     

    of Mr.Venom's Best Practices

  4. mazliet paatrināts uz cikla rēķina, palēnināts pirmā un pēdejā slikā vārda burta izvadam (ķipa f**k, lai tiem, kam vajag, tomēr saprot).

     

    function strip_bad($teksts,$fails) {

    $o=file($fails);

    array_unshift($o,'empty');

    $i=sizeof($o);

    while(--$i)

    {

    $badword = trim($o[$i]);

    $teksts=str_replace($badword,$badword[0].str_repeat('*',strlen($badword)-2).$badword[strlen($badword)-1],$teksts);

    }

    return $teksts;

    }

     

    Problēma: neapstrādā vārdus ar MaINīGU reĢisTRu. Ja php5, tad str_ireplace. Citādi kā vienmēr palīdz regulārie izteikumi:

    $teksts=preg_replace('/('.$badword.')/i',str_repeat('*',strlen('\\1')),$teksts); turpat ciklā

  5. offtopics/

    Kādam nav aizķeries Delphi 7 vai nācies mocīties ar Scintilla? gribās VenPad uz UTF-8 draudzīgu komponenti pārrakstīt (Scintilla; izmanto kaut kādu tur JVCL, kuram vajadzīgs D6 updeits, bet kad uzlieku updeitu, tad vairs neiet Scintilla, bet varbūt gļukoju; gribu pamēģināt ar D7).

  6. full-OOP ieksh php jau nesanaak kaut vai tamdeelj, ka liidz 5ktajai versijai OOP iespeejas tomeer ir sameeraa ierobezhotas.

    Un arī pret tādu parādīšanos esmu noskaņots visai negatīvi. Tikai sarežģī visu fišku. Dēļ kā nemīlu Java ar saviem private etc. PHP jau tā pietiek global un static. VISS! Bet droši vien tas dēļ tā, ka php zem linušiem arvien biežāk sāk izmantot shell skriptu programmēšanai ar GTK, jo ērta valoda jau ir. Un es būtu priecīgs, ja būtu Delphi pielīdzināms IDE ar php valodu kā pamatu windows programmām (pagaidām tādām izvirtībām izmantoju phpBlender).

     

    Savās klases neko "nemantoju" jo, ja šie morfingi tiešām tiktu izmantoti, tad sanāk, ka katru reizi skriptam izpildoties tiek salikta jauns kods no esošā+klases, un tā pie katras ielādes. Prātīgi tomēr laikam sabāzt visu kopā.

    Dēļ tā man arī pēdējā laikā saiti pēc struktūras sanāk: index.php + ven.*.php klases/moduļi, kas pieslēdzami ne vienmēr - visi headeri, footeri u.c. pašā index.php kodā, lai katru reizi apacham nav "jāvāc drupatas" no vairākiem failiem. + Vajadzības gadījuma noupdeito index.php vai attiecīgo moduli un miers. Tik un tā es saviem kodiem tik plaši nedalos lai citiem ļautu headerus rediģēt ;)

  7. kad tev piemēram ir kādi 20 mainīgie, bet tu ne veinmēr tos izmanto, tad gan var rasties jautājums vai šī klase patiešām tev ir nepieciešama tāda, kāda tev viņa ir

    Tad jaasaak runa par klashu downgreidoshanu :ph34r:. Shobriid augstaakmineetaa mysql klase ir veel vairaak paplashinaata, bet nelieku www jaunu versiju, jo juutu, ka tieshi shii te pieeja vajadziiga (paaraak plashi un parastiem projektiem apgruutinoshi).

     

    Resp. tad klasei ir jaarada ancestors ar pamata funkcionalitaati, bet vajadziibas gadiijuma no vinja jaatmanto papildinaata klase.

     

    Att. uz < Venom, man tīri interese: cik OO ir Tavs ikdienas programmēšanas (ja tāda ir) rezultāts? tjipa - vai viss ir stingri OOP, vai kaut kur kombinē, vai OOP principus pielieto tikai īpašos gadījumos. >

     

    Ja nerunaajam par JS, Delphi utml, bet tiiri par PHP, tad esmu diezgan negatiivi noskanjots pret full-OOP pieeju, taapat kaa arii pret 99% visu template sisteemu, kas pashaa saakumaa nogjeneree visu kas vien iespeejams un peec tam, vajadziibas gadiijuma to saliek vajadziigaas vietaas.

     

    Mana pieeja liidziiga tai, ko esmu pieradis ieksh taa Delphi. Resp. izdalaam saita struktuuraa vizuaalos moduljus: izveelne, skaitiitaajs, balsoshana, utml. Nevizuaalie modulji darbiibaam, kuras biezhi jaatkaarto - mysql, file upload, image resize, translation. Shiim te lietaam respektiivi man arii ir klases (VenMySQL, VenMenu, utt). Viss paareejais "karkass" tomeer katram saitam ir atshkjiriigs un vajadziibas gadiijumaa tikai kopeeju kodu no viena uz otru un pamodificeeju. VenMySQL saaku rakstiit, jo a) piegriezaas 10iem reizhu katraa saitaa raxtiit mysql_connect/select_db utt. un vispaar tas mysql_* funkciju nosaukumi par garu (pat ar Ctrl+Space helpu) B) piegriezaas atkaartot vienas un taas pashas paarbaudes c) gribeeju paarskataamu MySQL log atskaiti, ar "debug" sleedzi, resp. lietotaajs kljuudas neredz, bet es redzu, ja skripta beigaas izsaucu full log ($m->fl();).

    Dazhi modulji taa arii "neizpelnaas" klashu statusu - VenCount, translators, aptauju gjenerators, pasta suutijumi caur soketiem utml.

     

    Pilniiga saita struktuura ieksh OOP AFAIC stipri "pieaudizna" funkcionalitaati struktuurai. Ja esi meegjinaajis kaut kur neparedzeetaa vietaa izvadiit kaut vai tekosho laiku ieksh kaada phpBB, tu mani sapratiisi. Resp. jaaizrokaas cauri manuaalim lai atrastu template/OOP funkciju, kas dublee php funckionaliaati un caur to kaut kaa jaizvada veelamais. Es savam kodam komentaarus un dokumentaaciju rakstu "postol'ku postol'ku", taapeec neviens peec tam manaa OOP neko nesapratiis - ieskaitot mani :blink: Taapeec es pieturos pie taa, ka ~90% koda iet tiiraa veidaa un jebkuraa vietaa es varu ar vinju izdariit jebko, ko veelos, arii veelaak.

     

    //sorry kaut kur lv apostrophe pazuda

  8. $izvads=file('dati.txt');

    array_unshift($izvads,'neskaitaas');

    $elementi=sizeof($izvads);

    $index=0;

    while(++$index<$elementi)

    echo $index.' '.$izvads[$index];

     

    NB:

    $masiivs[$i++] = 'aa';

    $masiivs[$i++] = 'bb';

    $masiivs[$i++] = 'cc';

     

    $masiivs[++$i] = 'aa';

    $masiivs[] = 'bb';

    $masiivs[] = 'cc';

  9. ..piemērs vai poh kaut ko...

     

    varbūt nebūs tas labākais piemērs, bet, mana mysql klase -> http://www.ofmy.info/ven.mysql.zip

     

    Es izmantoju klases tādām "loģikām/operācijām", kuras nākas rakstīt bieži, bet ar mazām izmaiņām. Augstāk pareizi pieminēts Object Pascal, jo tur "klases" tiek sauktas par "vizuālām komponentēm" (ok, ir arī nevizuālas). Tur, piemēram ir forma - programmas logs, ir poga. Vienkārši ņem un uzmet uz formas. Pogai atsevišķā lodziņā var pamainīt īpašības - krāsu, uzrakstu (caption), fontu, utml. Tai pogai pēc tam ir arī standratmetodes - onClick, onContextPopup, onDblClick utml. - kuros iekšā tu ieraksti to, kas ir jāiezpilda tālāk. Pēc būtības, ja rakstītu programmu no pašiem pirmsākumiem, tev būtu jāuzraksta zemā līmeņa draiveru bibliotēka, kas izzīmētu šo pogu kā taisnstūri, pa virsu izrakstītu tekstu, pēc tam pārtvertu peles kustējumus un pie klikšķa pārbaudītu, vai koordinātes atrodas pogas "iekšienē" utt. utt. Protams, katru reizi rakstīt šo padarīšanu no jauna ir visaid apgrūtinoši, tāpēc izdomāja tādas lietas kā klases.

     

    Klase ietver vispārēju loģiku (algoritmu), raksturīpašības un pamatmetodes

    Objekts - kases eksemplārs (instance), kurai piemīt visas vai dažas no mātes klases īpašībām, klases atvasināts atražojums

     

    Klase - cilvēks

    Objekts - Gacha

    Raksturīpašības - divas kājas, 1 galva, 2 rokas ar 5 pirkstiem, turās vertikāli utt

    Pamatmetodes - elpot, ēst, staigāt, runāt utml.

     

    Visi cilvēki radušies no vienas klases, bet katram piemīt atsevišķs īpašību kopums, metodes attīstītas dažādos līmeņos, tāpēc katrs cilvēks ir atšķirīgs, tomēr atpazīstams savas klases atvasinājums.

     

    šeit apstāšos (kaut kā panesās filosofija)

  10. ... modules/mod_rewrite.so

     

    Bet *.so gan domāti *n*xiem. Windowiem jābūt *.dll.

     

    NB> Un nav ko dzīt uz WinXP. Venīgais kas man negāja, MaxPayne (kaut kāds Fargus "uzlauztais", uz to arī lielākās aizdomas), bet tas darbam tiešām nav vajadzīgākais. Pārejos gadījumos iet pat tas, kam nebūtu jāiet (ja ņem vērā vēl 16mb Riva TNT2 un to, ka procu neātrinu).

  11. Of course, ja vajag dzēst "laiku pa laikam", tad izmantojam Alekseja metodi.

     

    Tikai zinātniskas pieejas pēc jābūt rand(1,100), citādi 101% sanāk (0,1...100=101 elements, ar varbūtību=5 izredzes "izkrist" ir [0,1...5] 6/101=5,9406%)

     

    Jāņem vērā arī saita apmeklējums. Ja apmeklētāju skaits ir 300 dienā, tad raksti laikam tiks dzēsti biežāk, nekā vēlētos. (jāpalielina 100, uz vismaz 300 iekš rand)

  12. ... trīs pieprasījumu/rinu vietā

     

     

    tālāk rakstu skaitu var izmantot lai izvadīt rakstus pa lapām, ķipa: 1...5 6...10 ...

     

    pieņemam, ka lapas nr. tiek nodots caur $_GET['page'], tad:

     

    /* nodefinējam lapas nr, ja nav uzstādīts (0), vai nolasām esošo pārvēršot to par integer (ja ņu kādam prātā ienāks adresslauciņā ar rociņām paspēlēties */

     

    $_GET['page']=(empty($_GET['page'])?0:(int)$_GET['page'];

     

    /* cik raksti vispār iraid

    ja raksti tiek pievienoti relatīvi reti, tad iesaku izmantot kešošanu sesijā (of course, ja ir saprašana un tiek izmantoti vēl citur projektā, piem.:

     

    if (empty($_SESSION['artcnt']))

    $_SESSION['artcnt']=...

     

    un tālāk $artcnt vietā izmantojām tieši šo variābli */

     

    $artcnt=mysql_num_rows(mysql_query("SELECT COUNT(*) FROM raksti"));

     

    $perpage=10;//cik rakstus rādīt lapā

    $pages=ceil($artcnt/$perpage);

     

     

    //izvadām to 1..10

    for ($tmp=0;$tmp<=$pages;++$tmp)

    echo ($_GET['page']==$tmp?'›':''). //iezīmējam tekošo lapu ar >

    ($tmp*perpage+1).' - '. //1,11,21...

    ( ($tmp+1)*perpage>$artcnt? $artcnt:($tmp+1)*perpage).' ';

    //10,20 vai, pēdejam - piem. 24

     

    if (empty($_GET['raksta_id']))

    - ja neskatāmies konkrētu rakstu, tad atlasām rakstu kopsavilkumus kā

    "SELECT * FROM raksti LIMIT ".($_GET['page']*$perpage).','.$perpage;

    //0,10 ; 10,10 ; 20,10 utt.

     

    universāli, vecīt

×
×
  • Create New...