Pastikan terma anda betul

Lama sungguh mengabaikan perkongsian ilmu di blog ini. Catatan kali ini ditujukan buat para bakal graduan/graduan/sesiapa yang ingin berkecimpung dalam bidang pengaturcaraan. Kenapa penggunaan terma yang betul perlu dititik-beratkan?

Bayangkan, anda memohon untuk bekerja sebagai Pengaturcara PHP. Bila penemuduga bertanyakan pada anda apa itu PHP dan anda menjawab “Pangkalan Data”, sudah pastinya anda tidak akan mendapatkan jawatan itu. Baiklah, mungkin anda akan tetap dapat jawatan tersebut, tetapi kalau penemuduga itu adalah saya, soalan-soalan seterusnya saya tidak akan tanya.

Kemudian anda ingin melakukan carian dilaman sesawang, Google misalnya. Pada saat ini anda ingin menyelesaikan permasalahan pengaturcaraan dan anda menemui jalan buntu.  Anda taip “Bagaimana mahu jana data menggunakan php dan phpmyadmin”.  Kalau anda bernasib baik, akan wujudlah jawapan kepada permasalahan yang awak cuba selesaikan (setelah tekan halaman yang paling belakang misalnya). Kita tolak ketepi sifat husnuzon dan membuat andaian anda tidak berjaya menemui jawapan yang diingini. Anda akan beralih bertanya di forum ataupun ‘group’ di Facebook.

Apabila anda bertanya di forum/’group’, anda masih menggunakan soalan yang sama, kemungkinan besar anda akan di’troll’ (oleh saya) atau akan dibetulkan terma yang diguna-pakai(kalau emosi saya stabil) atau ada insan lain yang bermurah hati untuk memahami masalah anda.

Sekarang sudah nampak kepentingannya?

1. Pelayan Web (Webserver).
– Diperlukan untuk melakukan penghantaran halaman sawang(web page) kepada pelayar(browser) melalui internet.
– Contoh pelayan web adalah Apache,Nginx,IIS dan GWS.

2. Pangkalan Data (Database)
– Satu koleksi data yang disimpan dengan teratur. Pangkalan data tidak semestinya dalam bentuk perisian.
– Contoh menyimpan rekod perbelanjaan bulanan. Susun cantik-cantik dalam kertas. Ini juga satu contoh pangkalan data.

3. Sistem Pengurusan Pangkalan Data (DBMS)
– Merupakan satu perisian menguruskan pangkalan data agar boleh berinteraksi dengan pengguna.
– Contoh MySQL, Oracle, MongoDB dan lain-lain

4. Bahasa pengaturcaraan (Programming Language)
– Benda yang anda kod untuk buat sistem, web dan lain-lain
– Contoh PHP, ASP.NET, JSP, JAVA,PHYTON dan lain lain

5. IDE (Kalau di melayukan buruk sangat bunyinya)
– Alat untuk pembangunan perisian. (Kalau takrifan sebenar lain dan panjang)
– Contoh Notepad++, Dreamweaver, Sublime, Zen Studio dan lain lain.

Jadi harapnya selepas ini tidaklah keluar soalan/jawapan “saya guna Xampp/Wamp sebagai database/server”.

Fungsi Tail pada Windows

Sekiranya anda menggunakan sistem pengoperasian *nix. Ada masa-masanya anda perlu membaca server log, fungsi tail sangat berguna. Malangnya fungsi tail tidak ada pada sistem pengoperasian windows. Sekurang-kurangnya tidak semudah dan sependek *nix.

Perkara pertama anda perlu pastikan Windows anda dilengkapi dengan Windows Powershell. Sekiranya anda menggunakan Windows 8, Windows 7 ataupun Windows Server, Windows Powershell sudah siap dipasang pada sistem pengoperasian anda. Sekiranya tiada, anda boleh baca http://technet.microsoft.com/en-us/library/hh847837.aspx arahan muat-turun dan cara pemasangannya.

Pada sistem pengoperasian Windows 8, anda cuma perlu tekan Win+q dan taip “Power” pada ruangan Search.

Win+q

Kemudian anda akan mendapat paparan seperti ini

Capture

Berikut merupakan arahan yang perlu anda masukkan


Get-Content <pathToFile> -Tail <bilanganBaris> -Wait

Contoh adalah seperti berikut :


Get-Content error.log -Tail 10 -Wait

-Wait merupakan arahan supaya Get-Content sentiasa mengawasi sebarang perubahan kepada fail error.log. Untuk tamatkan fungsi ini anda cuma perlu tekan Ctrl+c.

Selamat mencuba!

DRY – Don’t repeat yourself.

Dalam konteks pengaturcaraan, ini melibatkan proses perancangan dan juga proses perlaksanaan. Sebagai contoh, kita mahu memaparkan senarai peserta tadarus, apa yang perlu kita buat adalah buat satu fungsi untuk memanggil data dari pangkalan data. Fungsi ini sepatutnya boleh dikongsikan/digunapakai oleh fungsi-fungsi lain.

Jadi kita tidak perlu membuat pernyataan SQL yang sama berulang-ulang kali. Itu yang dimaksudkan dengan ‘Don’t Repeat Yourself’.

DRY tidak sama sekali bermaksud, kalau sudah buat validasi di bahagian PHP, kita tidak perlu buat validasi di JAVASCRIPT. Javascript untuk UI, pengguna tak perlu menunggu borang disubmit kemudian dapat respon, ‘Maklumat tidak berjaya disimpan, data A wajib diisikan’.

Jadi apa perlunya validasi pada PHP sekiranya sudah ada validasi JAVASCRIPT. Jawapannya mudah, orang boleh off JAVASCRIPT pada pelayar bila-bila masa yang dia suka. Validasi pada PHP adalah bertujuan menjaga sistem kamu sendiri dari menerima data yang tidak lengkap dan juga kemungkinan di HACKED.

Konsep DRY yang boleh dipraktikkan dalam fungsi validasi adalah, kita buat satu fungsi validasi yang boleh digunakan oleh mana-mana form dalam html kita. Ya itu namanya DRY. Kita tak buat atau copy&paste kod JAVASCRIPT ke setiap form kita.

Dengan ini saya mengharapkan tiada lagi orang yang salah faham akan konsep DRY ini.

p/s : Itu sebab orang cipta framework, sebab nak elak buat code yang sama lebih dari sekali.

Mengira perbezaan hari

Apabila kita membangunkan sistem, seringkali kita berhadapan dengan mengira perbezaan hari. Terutamanya sistem yang melibatkan KPI ataupun ISO bagi sesuatu proses. Catatan kali ini akan menceritakan bagaimana kita boleh mendapatkan perbezaan hari dari 2 tarikh.

Bagi yang menggunakan PHP versi 5.2 dan kebawah bolehlah mencuba cara ini

<?php
$unix_time1 = mktime(0,0,0,3,1,2013);
$unix_time2 = mktime(0,0,0,5,1,2013);
	
echo $unix_balance = floor(($unix_time2 - $unix_time1) /(60 * 60 * 24));
?>

Format bagi fungsi mktime() adalah seperti ini mktime(jam,minit,saat,bulan,hari,tahun).  Kemudian kita perlu gunakan rumus ini bagi mendapatkan bilangan hari.

(Tarikh2 – Tarikh1) / (60saat x 60minit x 24jam)

Hasil dari pengiraan diatas, kita perlu melakukan proses pembundaran ke nilai yang lebih rendah. Dengan itu fungsi floor() diperlukan.

 

Cara yang kedua adalah dengan menggunakan Class Datetime yang terdapat didalam PHP 5.3 dan keatas. Menggunakan method diff. Bagi mendapat format yang boleh difahami, method format digunakan.

<?php
$Date1 = new Datetime('2013-03-01');
$Date2 = new Datetime('2013-05-01');
$interval = $Date1->diff($Date2);
	
echo $interval->format("%R%a days");
?>

Sekiranya kita perlu membuat perbandingan dengan data yang dipanggil dari pangkalan data, adalah lebih baik kita menggunakan sql. Ini bagi mengurangkan PHP perlu memprosesnya berulang-ulang kali. Caranya mudah. Pernyataan Sql dibawah menggunakan fungsi yang terdapat didalam MySQL.

 

Selamat mencuba!

SELECT DATEDIFF( tarikh_tamat, tarikh_mula )
FROM nama_jadual
WHERE syarat_anda
LIMIT 0 , 30

Invalid argument supplied for foreach() CORE\Cake\Utility\ObjectCollection.php, line 330


<a><b>Warning</b> (2)</a>: Invalid argument supplied for foreach() [<b>CORE\Cake\Utility\ObjectCollection.php</b>, line <b>330</b>]
Code Context
ObjectCollection::normalizeObjectArray() - CORE\Cake\Utility\ObjectCollection.php, line 330
BehaviorCollection::init() - CORE\Cake\Model\BehaviorCollection.php, line 66
Model::__construct() - CORE\Cake\Model\Model.php, line 748
ReflectionClass::newInstance() - [internal], line ??
ClassRegistry::init() - CORE\Cake\Utility\ClassRegistry.php, line 164
Model::_constructLinkedModel() - CORE\Cake\Model\Model.php, line 1031
Model::__isset() - CORE\Cake\Model\Model.php, line 857
Model::__get() - CORE\Cake\Model\Model.php, line 887
DboSource::read() - CORE\Cake\Model\Datasource\DboSource.php, line 1063
Model::find() - CORE\Cake\Model\Model.php, line 2674
Batch::count_enrolled() - APP\Plugin\course\Model\batch.php, line 73
CoursesController::index_admin() - APP\Plugin\course\Controller\CoursesController.php, line 55
ReflectionMethod::invokeArgs() - [internal], line ??
Controller::invokeAction() - CORE\Cake\Controller\Controller.php, line 485
Dispatcher::_invoke() - CORE\Cake\Routing\Dispatcher.php, line 186
Dispatcher::dispatch() - CORE\Cake\Routing\Dispatcher.php, line 161
[main] - APP\webroot\index.php, line 97

Selama 3 hari saya tersangkut dengan ralat ini. Sungguhpun ianya sekadar amaran(warning), tapi saya mahu menjadikan sistem saya bebas ralat. Kod yang pada asalnya menggunakan cakephp 1.3 kini dalam proses migrasi ke cakephp 2.3.

Hasil daripada apa yang saya kesan penggunaan fungsi $this->NamaModel->(‘count’) haruslah mempunyai parameter ‘contain’ => array(). Dimana kesemua hubungan model ini bersama model lain, haruslah diputuskan.


<?php

$params = array(

'conditions' => array('namaField' => $value),

'contain' => array()

);

$this->NamaModel->find('count',$params);

?>