Tuesday, July 29, 2008

Reference Magic


Php-er,

Kali ini gw akan bahas ttg reference variable. Ok, mungkin udah byk yg tau dan gunain. Moga aja ini bisa refresh akan kegunaan dan kehandalannya. Heheheeh oke emg hebat nya dimana seh? Hebatnya reference variable value nya bukan hasil copy, jadi seperti alias saja, dan ngebantu banget utk nulis code yg rapi.


Contoh:

---------------------------------------------------------------------------
function testReference(&$refVar){

$refVar++;
}

function testNonReference($nonRefVar){

$refVar++;
}

$var1 = 0;
$var2 = 0;

testReference($var1);

testNonReference($var2);

echo $var1;
echo $var2;

---------------------------------------------------------------------------
Output:
1
0




Gimana ngerti? Fungsi testReference tidak mengembalikan value tetapi $var1 dari 0 menjadi 1. Mengapa $var1 brubah dan $var2 tidak? Begini utk testReference parameter nya adalah &$refVar dimana refVar hanyalah "alias" dari $var1 jadi mereka itu terletak di alamat memory yg sama, ini bahasa susah nya, gampang nya lain nama tapi 1 item. Jadi apapun perubahan $var1 begitu pula dgn $refVar wonk mereka 1.

Lain hal nya $var2 dgn $nonRefVar sbg paramater nya testNonReference. Value dair $var2 di copy ke variable baru yg namanya $nonRefVar, jadi mereka lain nama lain item juga. Bahasa susah nya $var2 memliki alamat memory yg berbeda dgn $nonRefVar.
Dan apapun perubahan yg terjadi di $var2 tidak langsung mngubah $nonRefVar, bgt pun sebaliknya.

Kalo masih juga ga ngerti hummm... mending merujuk ke manual nya php.net smoga lo lbh bs ngerti dari baca manual ketimbang artikel gw. Anyway gw blm kasih liat kehebataanya ok ini dia. Yang pertama adalah reference tidak mengcopy value source variable nya ke variable yg dituju, disini adl si "alias"nya. Jadi mengurangi waktu proses pastinya dan reference bisa bantu kita utk coding lbh rapi.


Donlod oracleDb.php di artikel sebelumnya. Dan ini perbaikan utk lbh jadi rapi dan pendek.

kalo dulu deklarasi sendQuery(string $query, boolean $isFetch, boolean $isDebug)
maka skg akan digantikan. Oleh execFetchQuery(string $query, integer &$nrows, array &$result, boolean $isDebug = _IS_DEBUG)
dgn $isDebug default. Penggunaan nya

$query = "SELECT * ".
"FROM MY_DB ";
execFetchQuery($query,
$nrowsMyQuery,
$resultMyQuery);

if($nrowsMyQuery > 0){

echo $resultMyQuery["MY_FIELD"][0];
}else{

/* Bla bla bla... */
}


Thats the magic work, pertama $nrowsMyQuery di passed by reference jadi proses yg terjadi di dlm fungsi execFetchQuery() akan mempengaruhi langsung $nrowsMyQuery.
Dan execFetchQuery sendiri proses nya adalah:


function execFetchQuery($query,
&$nrows,
&$result,
$isDbg = _IS_DEBUG){

/* Bla bla bla..*/

$s = OCIParse($this->conn, $query);
$r = @OCIExecute($s, OCI_DEFAULT);

/* Bla bla bla..*/

$nrows = oci_fetch_all($s, $result);

/* Bla bla bla..*/
}


Di dlm fungsi nya ga ada nama $nrowsMyQuery dan fungsi hanya return value true utk success dan false kalo failed. Lohh jadi hasil yg di passed ke $nrowsMyQuery dan $resultMyQuery dari mana??? Nah liat tuh parameter fungsi nya &$nrows dan &$result.
Jadi $nrows adl "alias"nya dari $nrowsMyQuery dan jg utk $result. Gimana? Mantap!!!

Sekiranya article ini bisa membantu. Gbu...

Coding for life, coding with ethic.

Monday, July 21, 2008

Harmonious Combination


Php-er,

Sorry article ttg simple spreadsheet kemarin terhapus dan gw ga ada pertinggalnya.
Anyway simple spreadsheet hasil perpaduan JS+PHP bisa di download simple_spreadsheet.v.0.8

Have fun, Gbu.

Coding for life, coding with ethic.

Stock Method


Php-er,

I've been working on severals stock reporting and processing. And i've tried many ways to achieve one. And finally i've came with final. This is it check it out.


Source code:


require_once 'classCol/misc.php';
require_once 'classCol/classStockCalc.php';

/**
* Example: Lets say we have 5 stock entry.
* We arrange them in this format
* DATE---QTY---PRICE---VALUE---REFERENCE
* where: "---" is delimiter.
* Dont worry if one of the value is negative
* since the filter will only take --- exactly.
*
*/
$isDbg = _IS_DEBUG;
$CStockCalc = new stockCalc;

$egTx = array("STOCK_DATE" => array("01-06-2008",
"02-06-2008",
"03-06-2008",
"04-06-2008",
"05-06-2008"),
"QTY" => array("1000",
"2000",
"1000",
"2000",
"1000"),
"PRICE" => array("200",
"400",
"300",
"400",
"250"),
"VALUE" => array("200000",
"800000",
"300000",
"800000",
"250000"),
"REFERENCE" => array("000001/STKOUT/06-2008",
"000002/STKOUT/06-2008",
"000003/STKOUT/06-2008",
"000004/STKOUT/06-2008",
"000005/STKOUT/06-2008",
"000006/STKOUT/06-2008"));

$szEgTx = sizeof($egTx["REFERENCE"]) - 1; //downtop loop, subs by one
for($iTx = $szEgTx; $iTx >= 0; $iTx--){ //where $iTx >= 0

$dataTx = $egTx["STOCK_DATE"][$iTx] ."---".
$egTx["QTY"][$iTx] ."---".
$egTx["PRICE"][$iTx] ."---".
$egTx["VALUE"][$iTx] ."---".
$egTx["REFERENCE"][$iTx];

$CStockCalc->addDetails($dataTx);
}

$qtyOut = 2500;

//calculate the FIFO
$CStockCalc->calcFifo($qtyOut);

$resQtyOut = $CStockCalc->getQtyOutDetails();

$resQtyBal = $CStockCalc->getQtyBalDetails();

dbgInfo("resQtyOut",$resQtyOut["QTY"],$isDbg);
dbgInfo("resQtyOut",$resQtyOut["VALUE"],$isDbg);
dbgInfo("resQtyBal",$resQtyBal["QTY"],$isDbg);
dbgInfo("resQtyBal",$resQtyBal["VALUE"],$isDbg);


Yup, itu aja. Silahkan method nya dipilih sendiri utk fifo, lifo ato average.
Full source code bisa di download disini stockCalc. Artikel selanjutanya akan bahas mengupas classStockCalc ini.

Gbu.

Coding for life, coding with ethic.

Monday, July 14, 2008

Less Design


Hello Php-er,

Hari ini abit out of topic, gw frustasi abis ama yg namanya CSS. Gw grogi kalo liat org lain bgt Hebat nya ngeramu CSS spy page nya jadi ciamik. Karena gw udah cuba utk yg kesekian kali nya gw gagal. Entah krn gw lack of artistic senses ato kurang ilmunya.

Anyway gw udah cuba pake editor Nvu. Huh... org lain hasilnya keren and jreng abess, tapi gw utk buat tampilan form login udah ampir 2 minggu ga jadi2

Walau gw merasa menyebalkan tapi gw ada belajar hal2 baru. Terutama utk Design.
Kadang gw berpikir, mungkin jg byk PHP-ers out there, kalo applikasi nya ciamik mestinya udah cukup. Hahahaha tetapi ternyata gw salah. Sapa yg mau mampir kalo page lo brantakan?? Walau sana sini nya canggih? Setidaknya design minimal harus ada.

Nah utk gw design minimal udah gw usahakan dengan keras, tapi ada aja yg komentar duhh mata gw "sakit" liat tampilan elo. Yup gw akuin aja emg gw tidak begitu bisa utk masalah design. Dan gw mau terus belajar. Gw obok inet punya CSS references dan cari template utk gw pelajarin dan modifikasi. Mohon doa restu nya .

Ok itu aja dolo. Gbu all.

Coding for life, Coding with ethic.

Sunday, July 13, 2008

Long Absent with simple framework


Guys sorry, it has been a while since the last entry yahhh...
Utk project search4Gold mungkin ga bisa dilanjutin, sorry for the inconsistency.
Karena gw lagi fokus abis2 an sama project ERP gw.

Gw ada sedikit cerita2 ini ttg pencarian framework yg sesuai dgn gw.
Ternyata dari QPhp, CakePhp dan trakir CodeIgniter, tak ada satupun dari
mereka yg buat gw jatuh hati.

Kenapa gw perlu waktu utk bljr dan waktu nya tidak sebentar. Gw perlu yg instant,
atau paling tidak yg waktu bljr nya minim. Sebenernya sempet mau pakai QPhp.
Karena utk framework nya sendiri bisa dicomot2 utk di taruh di class template yg sdg
gw gunakan. Alas itupun ga bisa dijalani krn ada bbrp yg menurut gw hummm...
it is too much. Alhasil gw modif sana sini jadi frustasi :(

Akhirnya gw putusin utk membuat framework sendiri. Tidak sepenuh nya scope framework.
Tetapi setidaknya gw uda ga perlu melakukan pengungalan thd code2 yg biasa nya gw harus
copy paste terus dan muncul nya berulang. Khusus nya utk melakukan koneksi dan
query ke database. Nanti gw akan kasih liat bagaimana gw buat nya.

Class yg gw buat tidak kompleks setidaknya memenuhi yg gw mau. Tidak jelimet,
byk config, bla bla... Gw lbh seneng dan gw rasa org lain yg baca dan gunakan juga lbh tidak
ribet. Tidak perlu meluangkan waktu terlalu banyak utk menggunakannya dan krn sifatnya
masih minimalis, kesempatan utk mengembang kan class nya lbh besar.

file nya bisa di download disini classOracleDB.php
Gw akan tunjukan bagaimana framework-like class ini bantu gw.
sebelumnya utk melakukan koneksi dan query gw pake:


if( $conn = OCILogon($userName, $userPwd, $userSid)){
$query = "select something".
"from here";
$s = OCIParse($conn,$query);
$r = OCIExecute($s, OCI_DEFAULT);
bla bla...

OCILogoff($conn);
}else{
echo "DB connection error";
OUT();
}

dan stl ada framework:

$COracleDb = new oracleDb;
$COracleDb->init($userName,
$userPwd,
$userSid,
_NO_COMMENT);

if($COracleDb->connect()){
$query = "select something".
"from here";
$COracleDb->sendQuery($query,
_IS_FETCH,
$isDbg);
bla.. bla..

$COracleDb->dc();
}


Ini quick brief dari simple framework gw. Kalo elo donlod and liat
isi dari class oracleDb nya masih ada bbrp fungsi yg didalam nya
seperti : debug_backtrace utk nunjukin query elo spy bisa lo test
di CLI ato client nya oracle ato DB server lainnya. Dan kelebihannya adalah
kalo elo mau tambah fungsionalitas dari method2 yg ada, fungsi2 class,
lo tinggal tambahin di class nya saja. Jadi elo ga perlu tambahin scr manual
ke t4 yg elo perlukan.

Gw bs seperti ini karen gw udah kerja dgn 200 files lbh utk project ERP gw.
Jadi kalo ada perubahan gila dolo nya gw udah kayak pejantan tangguh,
modifin tuhh file2 yg gunakan fungsi2 tertentu. Thx God akhir nya Dia
bisa kasih gw jalan keluar yg terbaik. Thx Jesus! You are AWESOME!!!

Ok guys sekian dolo. God bless you all and keep coding.

Coding for life, coding with ethic.