Patiko? Prenumeruok el. paštu

Straipnsių kategorija: programavimas

Teisingas web projektų publikavimas 2

Kažkiek paeksperimentavęs su keletą publikavimo metodų, nusprendžiau, kad man vis dėlto pats priimtiniausias publikavimo metodas Capistrano. Nors jis labiau skirtas ruby tipo projektams publikuoti, bet jis pakankamai lengvai pritaikomas ir tarkim PHP projektams. Vienintelis minusas, kad jis skirtas publikuoti į serverį kuris turi ssh prisijungimą.

Gan neblogas pavyzdys galimybių pritaikytų PHP projektui yra symfony applikacijų deploymentas. Kitiems užtektų daug paprastesnio varianto. Pavyzdžiui aš naudoju tokio tipo scriptą. Uždėjau komentarų ką kai kurios eilutės reiškia.

# Projekto pavadinimas
set :application, “projektas.lt”

# Serverio adresas turintis ssh prisijugima
role :web, “server.zilionis.net:2222″

# Serverio vartotojas. Slatazodzio nenaudoju nes prisijungimas padarytas
# automatinis pasinaudojus rsa raktais
set :user, “zilionis”

set :use_sudo, false

# direktorija kur bus publikuojamas projektas
# document rootas bus tarkim /home/zilionis/domains/projektas.lt/web/current
set :deploy_to, “/home/zilionis/domains/#{application}/web/”
set :shared, “/home/zilionis/domains/#{application}/web/shared”

# SVN nustatumai
set :urlrepository, “http://svn.repo.server/repos/projektas_lt/trunk”
set :scm_username, “JusuSvnUseris”
set :scm_password, “JusuSvnSlaptazodis”

set :repository,  “–username #{scm_username} –password #{scm_password} –no-auth-cache #{urlrepository}”

set :checkout, “export”
set :keep_releases, 3

desc “This will deploy the app”
task :live do
# istraukiam is svn’o projekta
run “svn –quiet #{checkout} #{repository} #{release_path}”

# darom symbolik linkus dideliems libams kurie ne svn’e
run “ln -nfs #{shared}/lib/Zend #{release_path}/project/lib/Zend”
run “ln -nfs #{shared}/lib/ext #{release_path}/public_html/scripts/ext”

# uzchodiman reikiamus failus/direktorijas
run “chmod -R 777 #{release_path}/project/cache”

# paradom aktyvu releasa
run “ln -nfs #{release_path} #{current_path}”
end

Skanaus :)

Teisingas web projektų publikavimas

Dirbant su didesniais web projektais yra vienas žingsnis, kuris kartais kelia net galvos skausmą. Nors tai atrodytų elementaru – projekto publikavimas, atnaujinimas, bet tai yra dažnai sudėtingiau nei atrodo.  Su kokiomis problemomis dažniausiai galima susidurti?

Tarkim el. parduotuvei yra užsakytas didelis atnaujinimas, kuriame yra tiek dizaino atnaujinimai, tiek naujų funkcionalumų įdiegimas. Publikuojant visuomet reikia prisiminti, kad:

  • Įkelti visus reikalingus failus

Jei galvojate, kad protingas sprendimas viską projektą tiesiog įkelti negalvojant tai tinka ne visuomet. Tai tinka dažniausiai tik mažoms svetainėms. Geriausias sprendimas yra toks, kad atnaujinti tik, tai kas pasikeitė. Tai galėtų padėti dalinis svn exportavimas naudojant papildomus skriptus (tarkim naudoju kartais mofio šiek tiek modifikuotas mano), arba naudojantis servisais kurie suteikia automatinio deploymento galimybes tarkim springloops.com, beanstalkapp.com ir t.t. Kelti visą projektą rankiniu būdų yra blogai, nes tai pirma pakankamai ilgai užtrunka (nebent kopijuotume vieną suarchyvuotą failą ir jį vietoje išarchyvuotumėte), bet ir galimi dažni tarkim ftp sutrikimai.

  • Nustatyti teisingas direktorijos teises
  • Atnaujinti duombazes
  • Išvalyti (jei reikia) naudojamą cache

Kiti darbai dažniausiai daromi rankiniu būdu, bet to galima išvengti. Tarkim įkėlus failus galima turėti savo deploymento skriptą, kuris atlieka vis reikalingus darbus už jus. Springloops turi galimybę “papinginti” nustatytą url, kai deploymentas yra užbaigtas. O ten pagal jūsų nustatys scenarijus atlieki veismai, tarkim

<?php Object::getCache()->clearCache();

$aDirsToChmod = array(‘path/dir1′,’path/dir1′);
foreach ($aDirsToChmod as $sDir) { chmod($sDir, 777);} ?>

Su duomebazių atnaujinimais, galimi įvairūs scenarijai, tiek rankinis, tiek per pagalbines priemos.

  • Galite pasidaryti savo duombazių atnaujinimo mecganizmą su pagalbine db lentele, kurioje saugomi versijuojami db atnaujinimai
  • naudoti SQL ORM tarkim Doctrine

Galima naudoti ir daugelį kitų priemonių tokių kaip Capistrano (padarytas su rubiu), Fredistrano (PHP, CakePHP), Phing

O kaip realizuojate jūs?

Pasveikink savo lankytojus su šventėmis individualiai

Įsivaizduokime situaciją naršote internete po kažkurią svetainę ir staiga pastebite reklamą su jūsų vardu. Manau į tokią reklamą galbūt labiau atkreiptumėte dėmesį. Jei tai būtų koks specialus sveikinimas jums turbūt ir nusišypsotumėte. Nežinančiam žmogui techninių detalių gali iškilti nevienas klausimas, jis gali net išsigąsti…. kas mane seka?

Galbūt jau matėte tokios reklamos panaudojimą zoom.lt akcijai. Tai lengva padaryti jei turite sistemą su prisiregistravusiais vartotojais. Blogų lankytojai, taip pat yra vartotojai, kurių duomenis kai kada galima turėti. Tarkim jei jūs pakomentavote wordpress sistemoje – lieka taip vadinamas sausainiukas su jūsų duomenimis kompiuteryje. Sekantį kartą atėjus, jums jau nebereikia nieko suvedinėti. Taigi tokius komentavusius vartotojus galima bandyti tiesiog pradžiuginti.

Štai kaip realizuota pas mane (wordpress). Tereikia patalpinti į savo šablono index.php failą:

<?php
$lankytojas = isset($_COOKIE['comment_author_'.COOKIEHASH]) ? trim($_COOKIE['comment_author_'.COOKIEHASH]) : ”;
if ($lankytojas ) {
echo “<div style=’background-image:url(/images/christmas.gif); background-repeat:norepeat; width: 515px;padding-top:135px’><div style=’padding:5px;font-size:14px;’><b>$lankytojas</b>, ar jau jauti artėjančias šventes?</div></div>”;
}
?>

Nežinau, kiek vartotojų matė šitą mano mažą išdaigą, bet tikiuosi šypseną jiems suteikiau…

Smarty pluginas: in array

Kai aš pradėjau programuoti tiek programinio kodo logiką, tiek atvaizdavimą dėjau į vieną vietą. Tai tikrai yra blogai, nes skaitomumas stipriai sumažėja. Šiektiek paaugus pradėjau naudoti paprastą šablonų sistemą phemplate. Viskas gerai, kol neprireikia šiek tiek paprastos logikos. Tada prade naudoti įvairiausius apgaulės būdus, kurie tikrai nėra patogūs. Žinoma galima pasirinkti šablonų sistemą kuri turi savyje logikos, kad ir smarty. Bet visuomet susiduriama su tokių šablonų trūkumais, nes atsiranda tikrinimo variantai, kurių pati sistema nepalaiko. Tada pagalvoji, kad geriausia šablonų sistema yra pati programavimo kalba. Tereikia atskirti failais logiką bei atvaizdavimą ir štai mes turime galingą šablonų sistemą. Bet vis dėl to jei esate pririštas prie smarty galima pasidžiaugti, kad galima kurti papildomas galimybes pačiam.

Visai neseniai man reikėjo susirasti paprastą sprendimą php komandai in_array. Smarty to nepalaiko. Pasinaudojus “insert” galimybę sukuriamas naujas pluginas.

function smarty_insert_code_in_array($params, &amp;$smarty) { $bResult = false; if (isset($params['value']) &amp;&amp; isset($params['array']) &amp;&amp; is_array($params['array'])) { if (in_array($params['value'], $params['array'])) { $bResult = true; } } if (!isset($params['var'])) { $outvar = "rez_inarray"; } else { $outvar = $params['var']; } $smarty-&gt;assign($outvar, $bResult); }

Šį failą įrašome tarkim čia smarty/plugins/insert.code_in_array.php

O panaudoti gan paprasta:

{insert name="code_in_array" array=$manomasyvas value=$ieskomareiksme var="atsakymas"}

ir turėsime mes kintamąjį $atsakymas kurį jau galėsime panaudoti.

Magiškas windows hosts failas

Nesvarbu, kas jūs esate svetainių paprastas kompiuterio vartotojas ar web programuotojas  – šis tipsas tikrai turėtų jums padėti. Jį galima panaudoti tiek geriems tiek blogiems tikslams.
Šis failas slepiasi dažniausia c:\windows\system32\drivers\etc\ kataloge. Jame saugomi, kaip aš vadinu, virtualūs domenų sąrašai. Jame rasite ir įžymiąją svetainę localhostą.

Kaip tie domenai aprašomi? Pirmiausia nurodomas IP adresas ir po tarpo norimo domeno vardas. Tarkim, keletas pavyzdžių

127.0.0.1 localhost
127.0.0.1 www.zilionis.loc
127.0.0.1 www.one.lt
81.16.232.112 www2.delfi.lt

Panagrinėkime parodytus atvejus. Jei nežinote pagal nutylėjimą IP adresas 127.0.0.1 yra jūsų kompiuterio vidinis IP adresas. Vadinasi pateiktuose variantuose locahost, www.zilionis.net, www.one.lt nukreipiama į jūsų kompiuterį ir tai veiks tik jūsų kompiuteryje.

Taigi pagrindinė esmė ta, kad jūs sukurę kažkokį domeną, nukreipiate į jūsų pageidaujamą IP adresą. Nebūtinai tai gali būti jūsų kompiuteris, bet galite ir į draugo, ar kažkoks serveris.

PIRMAS PANAUDOJIMO BŪDAS: “WEB PROGRUOTOJUI”

Labiausiai (bent man) jis naudingas web sprendimų srityje. Aš tarkim nusirodau, kad domenas www.zilionis.loc yra virtualus domenas. Ir susitvarkęs loalaus apache nustatymus naudojusi it tikru domenu.

<VirtualHost *:80>
    DocumentRoot D:/!Projects/zilionis/
    ServerName zilionis.loc
    <directory />
        AllowOverride ALL
        Options Indexes FollowSymLinks
    </directory>
</VirtualHost>

ANTRAS PANAUDOJIMO BŪDAS: “PRODUKTYVUMO GERINIMAS”

Įsivaizduokite turite brolį, kuris be perstojo sėdi pažinčių portale one.lt. Galbūt jūs nepykstate, kad sėdi pažinčių portale, bet nepatinka, kad būtent one.lt. Greičiausia jūs pageidausite, kad jis naudotųsi kitu.

Arba norėdami būti produktyvesniais darbe jūs paprasčiausiai užbaninate kurį nors puslapį, na tarkim www.delfi.lt

Tokiu būdu įvedę adresą, jie nematys tikrojo puslapio. O tik tai ką jūs nurodysite. Deja tuo pasinaudoja ir virusų kenkėjai, nurodydami, kad antivirusinių atsinaujinimo adresai yra jūsų kompiuteryje.

TREČIAS BŪDAS: “Slaptasis projektas”

Jį naudotų gali tiek web programuotojai, tiek eiliniai mirtingieji. Įsivaizduokime, jūs norite pakeisti hostinimo serverį į naują. Jūs susideda informaciją ir telieka laukti kol jūsų domeno adresai atsinaujins. Bet jūs nesate įsitikinęs ar viskas tvarkingai atrodys kai DNS nusivaikščios.
Dar viena idėja šovė į galvą. Slaptas domenas (nebūtinai egzistuojantis) naudojamas tik tarp tikros grupės žmonių: tarkim intranetui. Ir nusistatę parametrus hosts faile, gali patekti į tą svetainę. Tarkim net bankai turi vidinius tinklus kur naudojami virtualūs domenai (ir žinoma neprieinami IP), bet ten jie jau tai susitvarkę per DNS serverius.

Kokias idėjas jūs pasiūlytumėte?

EXT JS 2.0

Gan neseniai išėjo EXT JS bibliotekos antra versija. Ji leidžia kurti pasinaudojus bibiliotekas web aplikacijas, kurios panašios į desktopines.

extjs1 extjs2  extjs4 extjs5

Tai tikrai patogu, bent man jau tam tikriuose vidinėse svetainėse. Tarkim administravimo sistemai. Be to tikrai neblogai atrodo. Bet jei pabandytume tai realizuoti kuriai nors viešai svetainei, na gal blogui nežinau ar lankytojai būtų stipriai sužavėti. Beja tokia tema jau egzisuoja (Ext JS WordPress Theme Blog).

EXT bilbioletka leidžia gan lengvai (na įprasti reikia) susikurti įrankius, kurių nėra standartinėse HTML bibliotekose. Tai medžiai, tabai, gridai, custom alertai. comboboxai  ir t.t. Štai keletas pavyzdžių: dekstopo imitacija, foto galerija/albumas, RSS skaitytuvus. Kitus pavyzdžius galite pasižiūrėti svetainėje.

Hm.. gaila kad darbe šiuo metu man netenka dirbti su tokiom aplikacijoms. Heh patiktų…

Tiesa kažkada minėjau bindows biblioteką, kuris tikrai yra galingas tiek savybėmis tiek kaina. O Ext gali būti tiek komercinis, tiek open source.

Mažas PHP tipsas produktyvumui patobulinti

Turbūt, kaip ir daugeliui žmonių tenka dirbti ne su vienu projektu ir turiu keletą savo pamėgtų funkcijų skirtų testavimui / duomenų atvaizdavimui. Ne visuomet galima savo tas specifines funkcijas traukti į projektą, ypač jai jas naudoji tik pats. Arba ši situacija panaši ir į tą, kai serveryje reikia kažkokių bendrų pasirašytų mechanizmų, kuris paleidžiamas prieš pagrindines programas. Kokios jos gali būti, tai jūsų vaizduotės vaizdas. Ką reiktų daryti?

Ogi atsidarome php.ini failiuką susrandame eilutes ir šiektiek paredaguojam:

; Automatically add files before or after any PHP document. auto_prepend_file = "D:/!Server/PHP/autoopen.php"; #auto_append_file =

Pvz maniškiame sėdi viena dažniausių naudojamų mano specifinių (patobulintų) funkcijų. Kas gali būti pas jus… tai jūsų vaizduotės vaizdas.

[code lang="php"]
function print_r_($var , $title = "PRINT_R") {
$str = array();
$str[] = "

";
  $str[] = print_r($var ,1);
  $str[] = "

";
whyout(implode("\n", $str), $title);
}

function whyout($data, $title = "TITLE") {
$str = array();
$str[] = "

";
$str[] = "
";
$str[] = $title;
$str[] = "

";
$str[] = $data;
$str[] = "

";
echo implode("", $str);
}
[/code]

Kas nesuprato, tai paprasčiausias print_r. tik šiek tiek grafiškai apipavidalintas. Bent man jis daug produktyviau veikia, nei paprastas variantas.

Tu gali pakeisti pasaulį

Paauglystėje buvau labai didelis visuomenininkas – aktyvistas, dalyvavau keliuose organizacijų veiklose. Tik va susiradus darbą to visuomeniškumo liko mažai. Įstrigo vienas pasakymas, kurį sakydavo vienas amerikietis: “You can change the world”. Žmogus dirbdamas su kitais, daro didelę įtaką kitiems. Pats svarbiausias įvykis jei žmogaus darbai pakeičia kito žmogaus gyvenimą, mąstyseną į gerąją pusę.

Daugelis dabartinių kompiuterinių projektų taip – keičia pasaulį, bet iki tam tikro lygio. Jie padeda pagreitini įvairius procesus, palengvina bendravimą tarp įvairių bendruomenių, žmonių. Ar galim mes programeriai, dizaineriai na kitaip tariant web srityje dirbantys žmogeliukai padaryti kažką daugiau? Tai, kad ne tik žmogus galėtų greičiau kažką atlikti, o jį pakeistų?

Tiesa nereikia žvalgytis kažkur toli, tokių projektų yra ir Lietuvoje. Šį savaitgalį susitikau su keliais savo grupiokais. Na po pirtelės darėm mažą pratęsimą ir pas vieną kolegą. Kaip tik jis dirba su flash ir jis parodė keletą savo darbų. Vienas jų taip mane sužavėjo, kad negalėjau nepabloginti apie tai.

Štai kaip jį pristato Tautvydas Bargelis:

Mano kelias
Kalėjimų departamentui sukurtas simuliacinis žaidimas, kuris modeliuoja nuteistojo gyvenimą atlikus bausmę ir išėjus į laisvę.

Žaidimo tikslas – supažindinti žaidėją su realiu gyvenimu, pateikiant įvairias gyvenimo situacijas, suteikiant sprendimo laisvę.

Žaidime modeliuojamos ekspertų sukurtos gyvenimiškos socialinės-psichologinės situacijos. Žaidėjas netiesiogiai “auklėjamas” elgtis teisingai, skatinamas įsidarbinti, siekti karjeros, gerinti santykius su aplinkiniais. Kiekvieną savaitę ar savaitgalį žaidėjas turi susiplanuoti – skatinamas planavimas realiame gyvenime. ”

Žaidimo turi teisę rinktis ką sakyti, ką daryti ir kiekvienas, veiksmas turi atoveiksmį. Tai ir atskleidžiama žaidime. Dialogus bei situacijas ruošė psichologų grupė. Veikėjas gali bendrauti su įvairiausias žmonėmis žmona, tėvai, draugas blogietis/gerietis, draugė, darbdavys, bendradarbis… Žaidime, kaip ir gyvenime gali herojus rinktis darbą iš keleto sričių: statyba, pardavimai, paslaugos, gamyba, žemės ūkis.

O kad įsivaizduotumėte, kas tai per projektas – štai keletas vaizdų:
pradziapasirinkimaspasirinkimas2zmonavizitassusipazinimasplanavimasdraugedraugaidarbas

Su kokias projektais dar susidūrėte, kad galėtumėte pritaikyti frazę – tu gali pakeisti pasaulį?

Naujasis captcha mechanizmas

Didžiausia problema populiarėjant, bet kuriam blogui ar paprastai svetainei su komentarų sistema tai spamas. Kovoti galima įvairiai… :

  • tik registruoti vartotojai gali rašyti komentarus
  • pradedant blokavimu tam tikrų žodžių – jei yra komentaras ignoruojamas
  • dedant apsaugas, kad tam tikri IP neprisijungtų prie svetainės.labai jau dažnai reikės konfigūruoti
  • pasinaudojant kokios nors paslaugomis, tarkim akismet
  • įvairiausiais captcha sprendimais: skaičių aritmetika, žodžiais iš paveikslėlių

Labiausia, gal vartotojui nepatogus būdas – tai įvedinėti žodžius. Kai nori pakomentuoti, tai dantis sukandęs rašai.
Bet tai gali ir atbaidyti, jei iš kokio 5 karto tik pataikai, kai sunku suprasti, kas paveikslėlį pavaizduota. Gerai dar, kad būna trumpas žodis, bet įsivaizduokite, kas būtų jei reikėtų parašyti visą litaniją? Pamažu į tai auga, vienas veikėjas sumastė naują recaptcha mechanizmą, kurio esmė: suvesti du žodžius. Na jei jų dar išaugtų… daugelis jau turbūt ir tingėtų komentuoti.

recaptcha.png

Daugiau informacijos autoriaus bloge

PHP saugumas: Saugus programinis kodas. 1 dalis.

Vietoj įžangos

Šiuo pirmu įrašu norėčiau pradėti “paskaitų ciklą” apie teisingą programavimą. Informacija bus pateikiama ne tik iš mano asmeninės patirties, bet ir iš kitų šaltiniu. Tikrai nesakau, kad viską aš čia surašysiu, bet tai bus puiki pradžia. Reiktų atkreipti dėmesį į tai, kad su bet kuria programavimo kalba galima programuoti tiek saugiai, tiek ne. Kadangi PHP yra populiariausia programavimo kalba bei mano duona – mano kalba bus daug labiau pritaikyta PHP.
Skaityti toliau »