<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sembang Programming &#187; open source</title>
	<atom:link href="http://sembangprogramming.com/category/open-source/feed/" rel="self" type="application/rss+xml" />
	<link>http://sembangprogramming.com</link>
	<description>Sembangan mengenai pengaturcaraan</description>
	<lastBuildDate>Mon, 22 Aug 2011 06:49:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Form Validation: jQuery + CodeIgniter (validation engine codeigniter)</title>
		<link>http://sembangprogramming.com/2011/02/form-validation-jquery-codeigniter-validation-engine-codeigniter/</link>
		<comments>http://sembangprogramming.com/2011/02/form-validation-jquery-codeigniter-validation-engine-codeigniter/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 19:52:58 +0000</pubDate>
		<dc:creator>mkhairul</dc:creator>
				<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Umum]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[validation engine]]></category>

		<guid isPermaLink="false">http://sembangprogramming.com/?p=522</guid>
		<description><![CDATA[Post kali ni nak kasi demo sikit, form validation guna jQuery dan juga CodeIgniter. Komponen untuk server side, jQuery jQuery Form jQuery Validation Engine Kali ni, kod overload. Kalau ada rasa loya-loya sikit bila tengok kod banyak sangat, sila undur ke belakang perlahan-lahan dan cari beg plastik sebagai persiapan untuk muntah, pastu teruskan membaca. Untuk [...]]]></description>
			<content:encoded><![CDATA[<p>Post kali ni nak kasi demo sikit, form validation guna jQuery dan juga CodeIgniter. Komponen untuk server side,</p>
<ul>
<li>jQuery</li>
<li><a href="http://jquery.malsup.com/form/">jQuery Form</a></li>
<li><a href="https://github.com/posabsolute/jQuery-Validation-Engine">jQuery Validation Engine</a></li>
</ul>
<p>Kali ni, kod overload. Kalau ada rasa loya-loya sikit bila tengok kod banyak sangat, sila undur ke belakang perlahan-lahan dan cari beg plastik sebagai persiapan untuk muntah, pastu teruskan membaca.</p>
<p>Untuk makluman semua, kod dibawah digunakan bersama dengan <a href="http://www.position-absolute.com/articles/jquery-form-validator-because-form-validation-is-a-mess/">Validation Engine 1.6.3</a>. Untuk <a href="https://github.com/posabsolute/jQuery-Validation-Engine">version 2.0</a> ni, tak berapa pasti, tapi mengikut firasat aku, takde beza kot (nanti la aku test).</p>
<p>So kalau nak tengok demo untuk validation engine tu, gi la ke <a href="http://www.position-relative.net/creation/formValidator/">demo page dia</a>.</p>
<p><strong>Validation Engine</strong><br />
Plugin ni ada client-side validation, tapi aku ni, malas sikit nak buat client side validation ni kerana server-side validation kena buat jugak. Oleh kerana aku lebih suka meluangkan masa di reddit daripada buat client-side validation, aku buat server-side je lah.</p>
<p>Kalau nak buat client-side validation, kat site dia ada cerita, dalam docs tu dan bila invalid data, dia keluar pop-up macam ni,</p>
<p><a href="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-2.32.14.jpg"><img src="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-2.32.14-288x300.jpg" alt="" title="Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-2.32.14" width="288" height="300" class="aligncenter size-medium wp-image-523" /></a></p>
<p>Amacam? Menarik? Hehehe.</p>
<p>Oh, benda ni bukan limit pada codeigniter je, kalau php biasa pun leh guna. Sebab aku guna codeigniter, aku kasi spotlight la kat CodeIgniter. Hehehe.</p>
<p>Ok, first sekali kena set jquery form plugin.</p>
<pre class="brush: jscript; title: ;">
var options = {
  beforeSubmit:  loading,  // pre-submit callback
  dataType: 'json',
  success: cleanup  // post-submit callback
};
$('#nama_form').ajaxForm(options);
</pre>
<p>Form dia, aku kasi contoh, gini la rupa dia</p>
<pre class="brush: php; title: ;">
&lt;?php echo form_open('register/create', array('id' =&gt; 'registration_form')); ?&gt;
	&lt;h3&gt;Account Info&lt;/h3&gt;
	&lt;div&gt;
		&lt;label&gt;Email Address&lt;span class=&quot;required&quot;&gt;*&lt;/span&gt;&lt;/label&gt;
		&lt;input type=&quot;text&quot; class=&quot;email-address text&quot; id=&quot;username&quot; name=&quot;username&quot; value=&quot;&quot; /&gt;
		&lt;span class=&quot;field_info&quot;&gt;Type in your email address, an email will be sent afterwards&lt;/span&gt;
	&lt;/div&gt;
&lt;/form&gt;
</pre>
<p>Ha, simple je. Pastukan, kita taruk ni pulak<br />
<span id="more-522"></span></p>
<pre class="brush: jscript; title: ;">
function cleanup(data)
{
	$('#submitbtn').removeAttr('disabled');
	if(data.status == 'success')
	{
		window.location = data.url
	}
	if(data.status == 'error')
	{
		$('#submitbtn').removeAttr('disabled');
		$('#submitbtn').val('Submit');
		$('#submitbtn').parent().prepend('&lt;span id=&quot;status_msg&quot;&gt;There was a slight problem with your submission (see above).&lt;/span&gt;')

		$('#status_msg').fadeOut(3000, function(){
			$(this).remove();
		});

		$.each(data.error, function(index, value){
			$.validationEngine.buildPrompt(value[0],value[1],value[2])
			$('.'+value[0].substr(1)+'formError').click(function(){
				$.validationEngine.closePrompt(value[0])
			})
		})
	}
}
</pre>
<p>Ape fungsi function diatas? Untuk paparkan popup yang memaparkan error pada validation. Haa.. function cleanup ni dipanggil bila form tu dah disubmit secara ajax pada nilai &#8220;action&#8221; form tersebut. Action ni url dimana form tu hantar data tu le.</p>
<p>Garu kepala sikit, apa benda kandungan fungsi function cleanup ni!? Argh! Kalo nak paham, kena pi tengok kod server-side. Jom&#8230;</p>
<pre class="brush: jscript; title: ;">
function create()
{
	$this-&gt;load-&gt;library('form_validation');
	$this-&gt;form_validation-&gt;set_rules('tnc', 'Terms and Conditions', 'trim|required|xss_clean');
	$this-&gt;form_validation-&gt;set_rules('username', 'username', 'trim|required|xss_clean|valid_email|callback__check_username');
	$this-&gt;form_validation-&gt;set_rules('fullname', 'fullname', 'trim|required|xss_clean');
	$this-&gt;form_validation-&gt;set_rules('password', 'Password', 'trim|required|xss_clean|min_length['.$this-&gt;config-&gt;item('password_min_length').']|max_length['.$this-&gt;config-&gt;item('password_max_length').']|alpha_dash');
	$this-&gt;form_validation-&gt;set_rules('verify_password', 'Confirm Password', 'trim|required|xss_clean|matches[password]');
	$this-&gt;form_validation-&gt;set_rules('captcha', 'Confirmation Code', 'trim|xss_clean|required|callback__check_captcha');

	if($this-&gt;form_validation-&gt;run() === FALSE)
	{
		$response['status'] = 'error';

		$errors = $this-&gt;form_validation-&gt;_error_array;
		$field_errors = array();
		$error_details = array();
		foreach($errors as $key =&gt; $data)
		{
			$error_details[] = &quot;#$key&quot;;
			$error_details[] = $data;
			$error_details[] = &quot;error&quot;;

			$field_errors[] = $error_details;
			$error_details = array();
		}
		$response['error'] = $field_errors;
		echo json_encode($response);
	}
	else
	{

		$response['status'] = 'success';
		$response['url'] = site_url('something/completed');
		echo json_encode($response);
	}
}
</pre>
<p>Ha.. yang lain tu kosmetik je. Yang penting bila form tu tak dapat validate, dia masuk dalam line 13. Apa dia buat kat sini, dia bagi create key dan value je. Key nya ialah id html element, value nya.. error tu la. Tak dapat bayangkan, jom kita tengok apa kata si serangga api (firebug).</p>
<p><a href="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.18.57.jpg"><img src="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.18.57-300x57.jpg" alt="" title="Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.18.57" width="300" height="57" class="aligncenter size-medium wp-image-530" /></a></p>
<p>Image tu kecik sikit, kena klik untuk tengok saiz penuh. Nampak? Dia iterate semua element dalam key &#8220;error&#8221;. Total ada 5 element. Setiap satu mewakili input field pada form. Click pada tab JSON kat firebug tu dia papar gini,</p>
<p><a href="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.25.43.jpg"><img src="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.25.43-300x95.jpg" alt="" title="Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.25.43" width="300" height="95" class="aligncenter size-medium wp-image-533" /></a></p>
<p>Bila nilai-nilai JSON ni dihantar kembali, jquery form tu dia laksanakan function cleanup. Cleanup to melalui semua element error dan generate popup untuk setiap satu element. Ha.. tapi aku lupa nak bagitau sesuatu, sebelum submit dia ada panggil function &#8220;loading&#8221;. Takde ape sangat pun, cuma nak reset submit button dan buang semua error popup.</p>
<pre class="brush: jscript; title: ;">
function loading()
{
	$('#status_msg').remove();
	$('#submitbtn').attr('disabled', 'true');
	$('#submitbtn').val('Processing..')
	$.validationEngine.closePrompt('.formError');
}
</pre>
<p>Ok settle. Setakat ni, kalau dah reti pakai jquery validation engine, pastu nak implement benda ni, takde masalah (bagi aku takde masalah, kalau ada mai la habaq sini). Nak tunjuk step-by-step sampai jadi, payah sikit la. So godek-godek la kod diatas bagi jadi.</p>
<p>Sebelum aku terlupa, kod-kod ni untuk tutup error popup tu kalau dia menganggu. Ye la, dah banyak sangat popup, mesti la dia lindung benda lain satgi.</p>
<pre class="brush: jscript; title: ;">
$('input').click(function(){
	$.validationEngine.closePrompt($(this))
})
$('input').focus(function(){
	$.validationEngine.closePrompt($(this))
})
</pre>
<p>Jadi, hasilnya lebih kurang macam ni,</p>
<p><a href="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.40.35.jpg"><img src="http://sembangprogramming.com/wp-content/uploads/2011/02/Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.40.35-300x212.jpg" alt="" title="Capture12-02-2011-23.38.3513-02-2011-1.14.2922-02-2011-3.40.35" width="300" height="212" class="aligncenter size-medium wp-image-538" /></a></p>
<p>Moga diberi masa untuk post lagi pada masa akan datang. Setakat tu je sembang untuk kali ni, masa untuk programming pulak!</p>
]]></content:encoded>
			<wfw:commentRss>http://sembangprogramming.com/2011/02/form-validation-jquery-codeigniter-validation-engine-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Framework &#8220;shootout&#8221; dengan CodeIgniter?</title>
		<link>http://sembangprogramming.com/2011/01/framework-shootout-dengan-codeigniter/</link>
		<comments>http://sembangprogramming.com/2011/01/framework-shootout-dengan-codeigniter/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 20:32:12 +0000</pubDate>
		<dc:creator>mkhairul</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://sembangprogramming.com/?p=419</guid>
		<description><![CDATA[PHP Meetup 2011 akan diadakan oleh ahli-ahli php.net.my, bertemakan framework &#8220;shootout&#8221;. Macam koboi la pulak. Tapi kalau aku jadi presenter, nak kena shootout dengan framework lain, memang aku surrender dulu la, bendera putihku akan berkibaran meluncur angkasa. Kenapa aku mengaku kalah? Kalau lawan CodeIgniter.. Dari segi features, Zend menang. Dari segi kepantasan menghasilkan suatu web [...]]]></description>
			<content:encoded><![CDATA[<div style="float:right; margin-left: 10px; margin-bottom: 10px;"><a href="http://sembangprogramming.com/wp-content/uploads/2011/01/shootout.jpg"><img src="http://sembangprogramming.com/wp-content/uploads/2011/01/shootout-207x300.jpg" alt="" title="shootout" width="207" height="300" class="aligncenter size-medium wp-image-424" /></a></div>
<p><a href="http://www.php.net.my/forum/php-meetup-2011-php-framework-shootout">PHP Meetup 2011</a> akan diadakan oleh ahli-ahli php.net.my, bertemakan framework &#8220;shootout&#8221;. Macam koboi la pulak. Tapi kalau aku jadi presenter, nak kena shootout dengan framework lain, memang aku surrender dulu la, bendera putihku akan berkibaran meluncur angkasa.</p>
<p>Kenapa aku mengaku kalah?</p>
<p>Kalau lawan CodeIgniter..<br />
Dari segi features, Zend menang. Dari segi kepantasan menghasilkan suatu web app, aku rasa CakePHP menang dari segi OO, Symfony la kot.. apa lagi.. entah lah. Apa yang CodeIgniter ada? Very small footprint (tapak kaki kecil lagi comel?), low barrier to entry, elegant toolset dan juga dokumentasi yang komprehensif! Sukar untuk diukur dan dipertandingkan! Takkan nak tayang dokumentasi atas pentas! </p>
<blockquote><p>Lihatlah kalian semua, betapa moleknya kod ni, dokumentasi ini, bacalah.. aku bagi masa 10 minit. Amacam? Komprehensif? </p></blockquote>
<p>Mampuih aku kena tendang keluar pentas. Akan tetapi, untuk meetup kali ni aku akan mengaku kalah, sebab tak bersedia (bak kata orang, <a href="http://en.wikipedia.org/wiki/Withdrawal_(military)">tactical retreat</a>). Tapi meetup seterusnya, aku akan bersedia (mungkin la) untuk memperlihatkan.. API MEMBARA YANG BAKAL MENYINARI DAN MEMBAKAR KOD! KOOOODDD IGNIIIITEEEE!!! TEBABOOO (sambil menyalakan lighter didepan skrin). </p>
<p>*ahem* Terlebih sound effect pulak. </p>
<p>Oleh kerana tarikh tak confirm lagi, aku pun takleh nak kata gerenti datang. So kita tunggu dan lihat, aku update kalau dah ada tarikh confirm, kita tengok macam mana ya.</p>
]]></content:encoded>
			<wfw:commentRss>http://sembangprogramming.com/2011/01/framework-shootout-dengan-codeigniter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSS &#8211; Burn CD/DVD</title>
		<link>http://sembangprogramming.com/2010/02/oss-burn-cddvd/</link>
		<comments>http://sembangprogramming.com/2010/02/oss-burn-cddvd/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 02:23:43 +0000</pubDate>
		<dc:creator>mkhairul</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[Tip]]></category>

		<guid isPermaLink="false">http://sembangprogramming.com/?p=282</guid>
		<description><![CDATA[Bagi mereka yang hanya hendak burn CD, tanpa segala benda lain (CD Label Designer, etc) yang tak diperlukan, saya cadang menggunakan Infra Recorder. Ianya percuma dan sumber terbuka (open source). Saiznya yang kecil (3.27MB) juga membuatkannya senang untuk digunakan di mana sahaja (download je bila nak guna).]]></description>
			<content:encoded><![CDATA[<p>Bagi mereka yang hanya hendak burn CD, tanpa segala benda lain (CD Label Designer, etc) yang tak diperlukan, saya cadang menggunakan <a href="http://infrarecorder.org/">Infra Recorder</a>. Ianya percuma dan sumber terbuka (open source).</p>
<p><a href="http://sembangprogramming.com/wp-content/uploads/2010/02/screenshot_main.png"><img class="aligncenter size-medium wp-image-283" title="screenshot_main" src="http://sembangprogramming.com/wp-content/uploads/2010/02/screenshot_main-300x214.png" alt="" width="300" height="214" /></a></p>
<p>Saiznya yang kecil (3.27MB) juga membuatkannya senang untuk digunakan di  mana sahaja (download je bila nak guna).</p>
]]></content:encoded>
			<wfw:commentRss>http://sembangprogramming.com/2010/02/oss-burn-cddvd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

