CakePHP v1.2.5 ir v1.3.0 alpha greičio bei atminties palyginimas
Atlikau nedidelį testą, kaip skiriasi greitis bei atminties vartojimas CakePHP v1.2.5 ir v1.3.0 versijose:
Greitis, debug rėžimas:
v1.2.5 ~0.228s
v1.3.0 ~0.168s (35% greičiau)
Atmintis, debug rėžimas:
v1.2.5 ~8.4MB
v1.3.0 ~7.2MB (17% mažiau)
v1.2.5 ~7,1MB
v1.3.0 ~6,1MB (16% mažiau)
Rezultatai iš tiesų neblogi.
Eilutės skaldymas į žodžių masyvą pagal norimą simbolių ilgį (PHP)
Prireikė tokios funkcijos, kuri eilutę padalintų į žodžių masyvą pagal norimą simbolių skaičių, tačiau “nenukastų” žodžių. Tarkim jeigu 3 žodžiai viršija simbolių ribą, tokių atveju paimti tik tai du. taigi, šiuo atveju PHP funkcija chunk_split netinka.
Kodas:
-
function stringToWords($string, $chars) {
-
-
$words = explode(' ', $string);
-
$n = count($words);
-
$first = 0;
-
-
while($first <= $n) {
-
-
$new_str .= ' '.$words[$first];
-
$new_len = strlen($new_str);
-
-
if($new_len > $chars) {
-
$new[] = substr($tmp_str, 1);
-
$new_str = '';
-
} else {
-
if($first == $n) {
-
$new[] = substr($new_str,1);
-
}
-
$first++;
-
$tmp_str = $new_str;
-
}
-
}
-
return $new;
-
}
Pavyzdys:
-
<?php
-
$s = 'It is a long established fact that a reader will be distracted by the
-
readable content of a page when looking at its layout. ';
-
print_r(stringToWords($s, 25));
-
?>
-
Rezultatas:
-
Array
-
(
-
[0] => It is a long established
-
[1] => fact that a reader will
-
[2] => be distracted by the
-
[3] => readable content of a
-
[4] => page when looking at its
-
[5] => layout.
-
)
Wordpress temu antraštės CakePHP aplikacijoje
Jeigu kam prireiktų CakePHP aplikacijoje ištraukti iš Wordpress naujausias temas, sprendimas labai paprastas.
Sukuriam Modelį “Blog”:
/app/model/blog.php
-
<?php
-
class Blog extends AppModel {
-
-
var $name = 'Blog';
-
var $useDbConfig = 'blog';
-
var $useTable = 'wp_posts';
-
-
function getTitles() {
-
$filter = array(
-
'limit' => 2,
-
'conditions' => array(
-
'post_status' => 'publish',
-
'post_type' => 'post'
-
),
-
'order' => 'post_date desc'
-
);
-
return $this->find('all', $filter);
-
}
-
}
-
?>
bei duomenų bazių konfigūracijoje:
/app/config/database.php
-
var $blog = array(
-
'driver' => 'mysql',
-
'persistent' => false,
-
'encoding' => 'utf8',
-
'host' => 'localhost',
-
'login' => '',
-
'password' => '',
-
'database' => 'autoz_wp',
-
'prefix' => '',
-
);
ir belieka kontroleryje iškviesti:
-
$news = ClassRegistry::init('Blog')->getTitles();
Bandom kurti lietuvišką CakePHP bendruomenę
Senai jau norėjau kažką panašaus sukurti, bet pagalvojau, jog visai gražu kad ta bendruomenė kurtųsi CakePHP karkso pagalba. O būtent šiandien Miles Johnson pristatė forumo beta versiją Cupcake. tad nieko nelaukęs įdiegiau http://forum.webdunulis.lt adresu. Tiesa, iš karto susidūriau su keliomis klaidomis, tačiau pradėt naudot sistemą iš esmės galima.
Nežinau kiek tiksliai čia pas mus yra šio karkaso mėgėjų, bet visus kviečiu užsukti, spręsti iškilusius klausimus, ieškoti patarimų ir t.t. Manau pradžioj bendro forumo užteks, vėliau priklausomai nuo diskusijų skirstysim į atskiras kategorijas.
Nauja web aplikacija kodiniu pavadinimu – devCRM
Įmonėje atsiradus daugiau klientų, bei bendravimo su jais, atsirado poreikis visa tai kažkur užsirašinėti. Trumpai peržvelgus esamas nemokamas CRM sistemas, nei viena nepatiko. Sunkios, prigrūstos visko, grafinės sąsajos nemielos akiai.
Tuomet pagalvojau, gal ką pačiam greit pasirašyti ir tą mintį pavadinau devCRM. Po kelių valandų jau turėjau kliento, su juo susijusios veiklos bei komentarų įvedimą/redagavimą/trynimą. Iš pradžių be jokių prisijungimų, ACL taisyklių ir pan, kadangi naudosiuosi vienas darbo vietoje. Svarbiausia jau galima dirbi su klientais:
Sistema paprasta – įvedamas klientas, kuriam galima rašyti komentarus bei veiklą. Veikla – tai visas bendravimas su klientu, nutarimai ir t.t. Tai taip pat atlieka dalinai ir užduočių funkciją tiek sau, tiek klientui, kadangi turi 3 tipus:
- Laukiama
- Gauta
- Informacija
Imkim kaip pavyzdį – kuriate interneto svetainę klientui ir jis jums turi pateikti tam tikrą informaciją. Tokiu atveju prirašai jog lauki tekstų ir uždedi tipą “laukiama”, o gavus reikiama informacija pažymi “gauta”, taip aiškiai užfiksuojamas laiko tarpas. Tai padeda lengviau apskaičiuoti laiko terminus, kada laikas vilkinamas kliento kalte. Taip pat nuėjus į visų veiklų sąrašą, klientą galima paraginti, kad nėra gauta duomenų. Taip pat, kai įvedi informaciją apie sutarimus, visą bendravimą, tada nekyla klausimų po kiek laiko. Atsidarai klientą ir matai visą istoriją.
Dar kiek patobulinus ir patvarkius kodą, įdėsiu source’ą čia.
Geriausias IE6 png klaidos fix’as
Net neabejoju, kad kiekvienas dirbantis web kūrimo srityje susidūręs su IE6 png kaip fono rodymo klaida. Sprendimo būdų taip pat yra daug, tačiau ne visi tinka. Kai kurie numuša css stilius, kiti iš vis neveikia ir pan. Atradau bene geriausia sprendimą – DD_belatedPNG. Parsisiunčiam iš autoriaus JavaScript bylą ir įterpiam į html:
-
<!–[if IE 6]>
-
<script src="DD_belatedPNG.js"></script>
-
<script>
-
DD_belatedPNG.fix('.example_class');
-
</script>
-
<![endif]–>
DD_belatedPNG.fix(’.example_class’) dalyje vietoj “.example_class” nurodom reikiamą css klasę, kur yra img. Galimi ir keli variantai, pvz:
DD_belatedPNG.fix(’.example1, .example2, img’);
Interviu su Nate Abele apie laukiamą Cake3
Kadangi informacijos apie taip laukiamą Cake3 praktiškai nėra, šis interviu dar labiau sužadina smalsumą, kaip atrodys tas naujas, perrašytas karkasas.
Savo ruoštu aš pristatau tik keletą išsakytų teiginių:
- Cakephp 2.0 bus greitesnė ~25%
- Cake3 bus pilnai perrašytas kodas PHP 5.3 versijai
- Perėjimas nuo 1.x į 2.0 nebus skausmingas. Nebent bus kelios panaikintos funkcijos, tačiau apie tai bus parašytas perėjimo gidas.
- Cake3 eina link pilno ActiveRecord palaikymo
- Visas branduolys bus suskirstytas paketais. iš to išplaukia nemažai pliusų: jais bus galima panaudoti ir kituose karkasuose, “plugin” architektūra taps dar paprastesnė ir t.t.
- Cake3 panaudos: Closures, Namespaces
Jeigu domitės CakePHP, interviu nėra ilgas, perskaitykit. Daug ko čia dar nepaminėjau.
CakePHP karkaso ateitis trumpai

Ne per seniausiai užmačiau, kad jau išleistas viešai cake3 source’as. Kuriamas naujausios PHP v5.3 pagrindu. Iš trumpo aprašymo matyt kad bus praktiškai iš esmės perrašytas karkasas.
Bet anksčiau sulauksim CakePHP2, nuo šios versijos jau bus atsisakytas PHP4 palaikymas. Pagrindiniai uždaviniai:
- PHP 5/6 only support
- Change Model::tableId to Model::primaryKey
- Fix Bake and ACL CLI scripts, and let’s not forget to generate unit test files this time, too
- Inflector: support for custom rules
- Allow Cake apps to be independent of the Cake install directory
- Degradable Ajax, with support for Bookmarking and the Back button
- Planned ACL updates
- datasource: http://www.w3.org/TR/wsdl
- Add a PDO driver
- Change Models to return object instances instead of arrays
- Validation class, with auto length and type based on db field
- Enable field whitelist for Model::save( ) – http://groups.google.com/group/cake-php/browse_thread/thread/3ce2bc624d335b9/9ae1f14d5b74cce8?q=&rnum=6#9ae1f14d5b74cce8
- Session flashing needs some help, maybe the ability to specify layouts/parameters?
- Consider auto-generating hasMany and belongsTo relationships by comparing foreign keys to loaded models. This might also be the place to implement something db-specific, like reading InnoDB relationships.
- Query caching
- Change Component to a base class instead of a loader/singleton, and have components extend Component.
- Make Router a singleton
- Write an LDAP DataSource, and an ACL interface to it
- Create a formalized way to extend Cake at the bootstrap level, and a basics function for loading these extensions (Extensions?)
- Rewrite NeatArray and NeatString as Array and String, and actually add some handy methods/make it possible to call some stuff statically
- Enable global loading of JavaScript libraries in /cake_core/vendors/js
- Correct 2 files from Changeset [2643] (cake/config/tags.ini.php and cake/libs/view/helpers/html.php)
Žinoma, bus dar ir CakePHP v1.3, tačiau kiek teko girdėti, kažkokių kardinalių pakeitimų nebus. Tiesiog esamos 1.2 tobulinimas.
Paprastas grafikų formavimas naudojant lenteles bei HTML5 & JQuery
Iš tiesų labai paprastas būdas gražiai atvaizduoti grafikus, naudojant paprastą lentelę (Table):

Pačios lenteles pavyzdžio kodas bei jquery funkcija:
-
<table >
-
<caption>2009 Individual Sales by Category</caption>
-
<thead>
-
<tr>
-
<td></td>
-
<th>food</th>
-
<th>auto</th>
-
<th>household</th>
-
<th>furniture</th>
-
<th>kitchen</th>
-
<th>bath</th>
-
</tr>
-
</thead>
-
<tbody>
-
<tr>
-
<th>Mary</th>
-
<td>150</td>
-
<td>160</td>
-
<td>40</td>
-
<td>120</td>
-
<td>30</td>
-
<td>70</td>
-
</tr>
-
<tr>
-
<th>Tom</th>
-
<td>3</td>
-
<td>40</td>
-
<td>30</td>
-
<td>45</td>
-
<td>35</td>
-
<td>49</td>
-
</tr>
-
…repetitive rows removed for brevity.
-
</tbody>
-
</table>
-
-
$(function(){
-
//make some charts
-
$('table').visualize({type: 'pie', pieMargin: 10, title: '2009 Total Sales by Individual'});
-
$('table').visualize({type: 'line'});
-
$('table').visualize({type: 'area'});
-
$('table').visualize();
-
});
Ir viskas, belieka įterpti šias bylas: JQuery, visualize plugin (js), visualize stilius (css). Tiesa, IE nesupranta HTML5, todėl papildomai reikia įterpti konverterį (archyve rasite):
-
<!–[if IE]><script type="text/javascript" src="excanvas.compiled.js"></script><![endif]–>
Plačiau filamentgroup.com
webdunulis virtuvė – kokie naudojami įrankiai bei technologijos
Jau kuris laikas yra nusistovėję įrankiai bei technologijos, su kuriomis dirbu praktiškai kiekvieną dieną. Pasidalinu šia informacija su visais, galbūt kažkam pravers.
Programos:
- IDE #1: NetBeans
- IDE #2 (greitam redagavimui): Geany
- Versijų kontrolė: Git
- FTP klientas: FileZilla
- Darbas su kalbų vertimais: Poedit
- Darbas su DB: MySQL Workbench, MySQL Administrator, MySQL Query Browser, phpMyAdmin
Technologijos:
P.S. negarantuoju kad visos išvardintos programos turi visų platformų palaikymą. Aš naudoju Linux (Ubuntu).

2009.12.04





