<?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>arif.suparlan.com &#187; Programming</title>
	<atom:link href="http://arif.suparlan.com/category/programming/feed" rel="self" type="application/rss+xml" />
	<link>http://arif.suparlan.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 16 May 2012 15:23:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Memisahkan folder htdocs dan MySQL data di XAMPP</title>
		<link>http://arif.suparlan.com/2012/05/15/memisahkan-folder-htdocs-dan-mysql-data-di-xampp?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=memisahkan-folder-htdocs-dan-mysql-data-di-xampp</link>
		<comments>http://arif.suparlan.com/2012/05/15/memisahkan-folder-htdocs-dan-mysql-data-di-xampp#comments</comments>
		<pubDate>Tue, 15 May 2012 09:55:08 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Free/Open Source]]></category>
		<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[alias]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[htdocs]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql-data]]></category>
		<category><![CDATA[path]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[xampp]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=596</guid>
		<description><![CDATA[Saya mengandalkan XAMPP sebagai webserver Apache, PHP dan MySQL. Dan tujuan saya untuk memisahkan folder htdocs dan MySQL data dari XAMPP adalah supaya mudah di-backup, tinggal meng-copy folder tersebut, dan untuk restore tinggal arahkan path-pathnya. Memang agak aneh, tapi saya &#8230; <a href="http://arif.suparlan.com/2012/05/15/memisahkan-folder-htdocs-dan-mysql-data-di-xampp">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Saya mengandalkan <a href="http://www.apachefriends.org" target="_blank">XAMPP</a> sebagai webserver Apache, PHP dan MySQL. Dan tujuan saya untuk memisahkan folder htdocs dan MySQL data dari XAMPP adalah supaya mudah di-backup, tinggal meng-<em>copy</em> folder tersebut, dan untuk <em>restore</em> tinggal arahkan <em>path-path</em>nya. Memang agak aneh, tapi saya suka setingan seperti ini.<span id="more-596"></span></p>
<p>Kalau dulu saya sering ber-repot-repot meng-install satu-satu Apache, PHP dan MySQL. Ya itu sekalian buat sambil belajar konfigurasi server, jadi lama-lama bisa tau seluk beluk webserver Apache juga. Tapi sekarang untuk <em>development</em>, saya perlu yang instant, maka saya pake XAMPP.</p>
<p>Pertama pastikan Apache &amp; MySQL dalam keadaan stop. Kemudian siapkan folder misalnya <code>D:/webdev/htdocs</code> untuk folder htdocs, dan <code>D:/webdev/mysql-data</code> untuk folder data MySQL.</p>
<p>Kedua, buka dan edit setingan Apache supaya folder htdocs tersebut dapat di akses melalui <code>http://localhost/webdev</code>. Buat alias untuk folder webdev. Buka file berikut <code>C:\xampp\apache\conf\extra\httpd-xampp.conf</code>. <em>Copy paste</em> setingan beritkut setelah/di dalam line ini.</p>
<pre>Alias /webdev "D:/webdev/htdocs/"
    &lt;Directory "D:/webdev/htdocs"&gt;
		Options Indexes FollowSymLinks Includes ExecCGI
		AllowOverride All
		Order allow,deny
		Allow from all
    &lt;/Directory&gt;</pre>
<p>Ketiga, untuk MySQL, copykan data dalam folder berikut <code>C:\xampp\mysql\data</code> ke <code>D:\webdev\mysql-data</code>. Kemudian buka dan edit file berikut <code>C:\xampp\mysql\bin\my.ini</code>, ganti nilai variable berikut datadir, innodb_data_home_dir, dan innodb_log_group_home_dir seperti berikut:</p>
<pre>datadir="D:/webdev/mysql-data"
innodb_data_home_dir = "D:/webdev/mysql-data"
innodb_log_group_home_dir = "D:/webdev/mysql-data"</pre>
<p>Keempat, buka di browser url <code>http://localhost/webdev</code>. Seharusnya dapat langsung diakses.</p>
<p>Perlu diperhatikan bahwa beberapa aplikasi web perlu di seting ulang untuk <em>path</em>nya. Yang perlu diubah di config misalnya path yang dulunya <code>C:\xampp\htdocs</code> menjadi <code>D:\webdev\htdocs</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2012/05/15/memisahkan-folder-htdocs-dan-mysql-data-di-xampp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yii: Cara buat CRUD di dalam Module menggunakan Gii</title>
		<link>http://arif.suparlan.com/2012/05/10/yii-cara-buat-crud-di-dalam-module-menggunakan-gii?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=yii-cara-buat-crud-di-dalam-module-menggunakan-gii</link>
		<comments>http://arif.suparlan.com/2012/05/10/yii-cara-buat-crud-di-dalam-module-menggunakan-gii#comments</comments>
		<pubDate>Thu, 10 May 2012 10:35:26 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[controller]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[module]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[yii]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=601</guid>
		<description><![CDATA[Saya baru coba-coba lagi framework PHP yang bernama Yii ini. Dokumentasi Yii memang tidak selengkap Codeigniter, tapi Yii punya Gii yang bisa generate Controller, Model, Form, CRUD, dan Module. Di Codeigniter, Module saja ga ada. Ternyata gampang men-generate Module di &#8230; <a href="http://arif.suparlan.com/2012/05/10/yii-cara-buat-crud-di-dalam-module-menggunakan-gii">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Saya baru coba-coba lagi framework PHP yang bernama Yii ini. Dokumentasi Yii memang tidak selengkap Codeigniter, tapi Yii punya Gii yang bisa generate Controller, Model, Form, CRUD, dan Module. Di Codeigniter, Module saja ga ada. Ternyata gampang men-<em>generate</em> Module di Gii, dan saya juga bisa buat CRUD di dalam Module tersebut. Caranya?<span id="more-601"></span></p>
<p>Sebelum melanjutkan setidaknya harus paham cara meng-<em>install</em> Yii di webserver. Itu bisa lihat <a href="http://www.yiiframework.com/doc/guide/" target="_blank">di sini</a>. Anggaplah webapp atau foldernya kita namai dengan &#8220;yiitest&#8221;, dan saya mau membuat module dengan nama &#8216;user_access&#8217;. Kemudian setelah installasi ikuti langkah-langkah berikut.</p>
<ol>
<li>Aktifkan Gii, dengan meng-<em>uncomment</em>  module bagian &#8220;Gii&#8221; di <code>protected\config\main.php</code>. Dan setting passwordnya seperti ini:
<pre>'modules'=&gt;array(
 // uncomment the following to enable the Gii tool
 /**/
 'gii'=&gt;array(
 'class'=&gt;'system.gii.GiiModule',
 'password'=&gt;'password',
 // If removed, Gii defaults to localhost only. Edit carefully to taste.
 'ipFilters'=&gt;array('127.0.0.1','::1'),
 ),</pre>
</li>
<li>Buka url berikut http://localhost/yiitest/index.php?r=gii, login dengan password yg diset tadi.</li>
<li>Buka link &#8220;Module Generator&#8221;. Isikan Module ID dengan &#8216;user_access&#8217;. Tekan tombol Preview. Akan menghasilkan seperti berikut. Kemudian tekan tombol Generate.
<pre>modules\user_access\User_accessModule.php
modules\user_access\components
modules\user_access\controllers\DefaultController.php
modules\user_access\messages
modules\user_access\models
modules\user_access\views\default\index.php
modules\user_access\views\layouts</pre>
<p>Buka folder ini protected\modules\user_access, module sudah di-generate.</li>
<li>Tambahkan module &#8216;user_access&#8217; yang telah dibuat tadi di config <code>protected\config\main.php</code>
<pre>'modules'=&gt;array(
 // uncomment the following to enable the Gii tool
 /**/
 'gii'=&gt;array(
 'class'=&gt;'system.gii.GiiModule',
 'password'=&gt;'qweasd',
 // If removed, Gii defaults to localhost only. Edit carefully to taste.
 'ipFilters'=&gt;array('127.0.0.1','::1'),
 ),
 <strong>'user_access', //&lt;--- ini jangan lupa, module harus didaftarkan di config</strong></pre>
</li>
<li>Buat Database MySQL sebagai berikut:
<pre> CREATE TABLE IF NOT EXISTS `tbl_user` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `username` varchar(20) NOT NULL,
 `password` varchar(128) NOT NULL,
 `created_when` datetime NOT NULL,
 `last_login` datetime NOT NULL,
 `status` int(1) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 UNIQUE KEY `username` (`username`),
 KEY `status` (`status`),
 KEY `superuser` (`superuser`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;</pre>
</li>
<li>Buka link &#8220;Model Generator.&#8221; Isikan form sebagai berikut:
<pre> Table Prefix: tbl_
 Table Name: tbl_user
 Model Class: User
 Model Path : application.modules.user_access.models</pre>
<p>Previewnya seperti berikut di bawah, setelah itu kemudian tekan tombol Generate</p>
<pre>modules\user_access\models\User.php</pre>
</li>
<li>Kemudian buka link &#8220;Crud Generator&#8221;. Isikan form sebagai berikut:
<pre> Model Class: user_access.models.User
 Controller ID: user_access/user</pre>
<pre>modules\user_access\controllers\UserController.php
modules\user_access\views\user\_form.php
modules\user_access\views\user\_search.php
modules\user_access\views\user\_view.php
modules\user_access\views\user\admin.php
modules\user_access\views\user\create.php
modules\user_access\views\user\index.php
modules\user_access\views\user\update.php
modules\user_access\views\user\view.php</pre>
<p>Perhatikan folder <code>protected\modules\user_access</code> sudah di-generate dengan Controller, Model, View, dsb.</li>
<li>CRUD dapat di akses dengan membuka url berikut http://localhost/yiitest/index.php?r=user_access</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2012/05/10/yii-cara-buat-crud-di-dalam-module-menggunakan-gii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fungsi PHP: Paging dengan Parameter Tambahan</title>
		<link>http://arif.suparlan.com/2012/04/01/fungsi-php-paging-dengan-parameter-tambahan?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fungsi-php-paging-dengan-parameter-tambahan</link>
		<comments>http://arif.suparlan.com/2012/04/01/fungsi-php-paging-dengan-parameter-tambahan#comments</comments>
		<pubDate>Sun, 01 Apr 2012 13:50:29 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[paging]]></category>
		<category><![CDATA[parameter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=578</guid>
		<description><![CDATA[Dulu sudah pernah buat helper paging atau pagination untuk Codeigniter, dengan fitur untuk ditambahkan parameter seperti filter, lengkap dengan menggunakan URI assoc atau Associative Array. Tapi kali ini rasanya perlu dibuat fungsi paging untuk versi PHP murni alias tanpa framework &#8230; <a href="http://arif.suparlan.com/2012/04/01/fungsi-php-paging-dengan-parameter-tambahan">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Dulu sudah pernah buat helper <a href="http://arif.suparlan.com/2011/11/13/codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan">paging atau pagination untuk Codeigniter</a>, dengan fitur untuk ditambahkan parameter seperti filter, lengkap dengan menggunakan URI assoc atau Associative Array. Tapi kali ini rasanya perlu dibuat fungsi paging untuk versi PHP murni alias tanpa framework (CI), karena kadang ini diperlukan juga untuk script-script pendek, atau yang perlu menggunakan fungsi ini untuk belajar.<span id="more-578"></span></p>
<p>Proses paging biasanya yang diperlukan adalah total record, offset, dan limit dari situ aja bisa didapat jumlah halaman yang kemudian diolah jadi link-link dari offset dan limit. Di sini ada tambahan parameter yaitu query string yang disertakan ke dalam link paging tadi, artinya parameter dari GET nantinya juga disertakan di link paging tersebut.</p>
<p>Langsung saja, bisa dilihat <a href="http://arif.suparlan.com/demo/paging/" title="Demo paging" target="_blank">demonya di sini</a>.<br />
Atau copas <a href="http://arif.suparlan.com/demo/paging/paging.php.txt" title="Fungsi paging" target="_blank">sourcenya di sini</a>.</p>
<p>Berikut fungsi pagingnya:</p>
<pre>function paging($varnm, $total, $offset, $limit, $qstr='')
{
	//query string
	$nqstr = '';
	foreach($qstr as $key =&gt; $value)
	{
		if ($varnm!=$key)
			$nqstr .= $key.'='.$value.'&amp;';
	}

	//offset top bot
	$p_str = $rt = '';
	if ($offset=='') $offset=0;
	$lim_bot = 4;
	$lim_top = 3;
	$bot = ($offset/$limit)-$lim_bot;
	$top = ($offset/$limit)+$lim_top;

	if ($bot$limit)
	{
		$offsetnum = floor($total/$limit);
		$offsetmod = $total%$limit;
		if ($offsetmod&gt;0)
			$offsetnum++;

		for($i=0;$i$i)
			{
				if($pp==$offset)
					$p_str .= ''.$j.' ';
				else
					$p_str .= '&lt;a href="?'.$nqstr.''.$varnm.'='.$pp.'"&gt;'.$j.'&lt;/a&gt; ';
			}
		}

		//prev next first last
		$prev = $next = '';
		$p_prev = $p_next = 0;
		if ($offset&gt;0)
			$p_prev = ($offset-$limit);
		if ($offset=0)
			$prev = '?'.$nqstr.$varnm.'='.$p_prev;
		if ($total&gt;=$p_next)
			$next = '?'.$nqstr.$varnm.'='.$p_next;

		$first = '?'.$nqstr.$varnm.'=0';
		$last = '?'.$nqstr.$varnm.'='.($total-1);

		$rt = sprintf("Showing %s of %s. &lt;a href="\&quot;%s\&quot;"&gt;First&lt;/a&gt; &lt;a href="\&quot;%s\&quot;"&gt;&lt;&lt;/a&gt; %s &lt;a href="\&quot;%s\&quot;"&gt;&gt;&lt;/a&gt; &lt;a href="\&quot;%s\&quot;"&gt;Last&lt;/a&gt; ", $limit, $total, $first, $prev, $p_str, $next, $last);
	}
	else if ($total > 0)
		$rt = sprintf("Showing %s of %s.", $total, $total);

	//if no record  found
	if ($rt=='') $rt = "No record found.";

	return $rt;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2012/04/01/fungsi-php-paging-dengan-parameter-tambahan/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fungsi PHP: Mengurai Daftar Angka</title>
		<link>http://arif.suparlan.com/2012/03/28/fungsi-php-mengurai-daftar-angka?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fungsi-php-mengurai-daftar-angka</link>
		<comments>http://arif.suparlan.com/2012/03/28/fungsi-php-mengurai-daftar-angka#comments</comments>
		<pubDate>Wed, 28 Mar 2012 06:54:58 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[angka]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[fungsi]]></category>
		<category><![CDATA[parse]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=566</guid>
		<description><![CDATA[Kebetulan saya lagi perlu fungsi PHP khusus untuk mengurai angka. Sudah pernah buat fungsi ini sebelumnya, tapi lagi-lagi ga tau di mana tuh fungsi harus dicari. Supaya gampang nyarinya, mending ditaruh di blog saja. Script ini sederhana aja, bisa ditulis &#8230; <a href="http://arif.suparlan.com/2012/03/28/fungsi-php-mengurai-daftar-angka">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Kebetulan saya lagi perlu fungsi PHP khusus untuk mengurai angka. Sudah pernah buat fungsi ini sebelumnya, tapi lagi-lagi ga tau di mana tuh fungsi harus dicari. Supaya gampang nyarinya, mending ditaruh di blog saja.<span id="more-566"></span></p>
<p>Script ini sederhana aja, bisa ditulis dalam 5 menit saja. Tapi kalo setiap kali harus buat fungsi yang sudah pernah dibuat, cape juga kali yah.</p>
<p>Parameter yg diinput dalam fungsi ini berupa string daftar angka-angka, contohnya: 1-4, 8, 10, 20-23. Output yang diharapkan adalah sebuah Array dengan daftar angka yang sudah tersortir, seperti berikut: 1,2,3,4,8,10,20,21,22,23</p>
<p>Berikut Scriptnya:</p>
<pre>function parse_number_list($numbers)
{
	$num_arr = array();
	$list_num = explode(',', $numbers);
	foreach($list_num as $key=>$value)
	{
		if (preg_match("/-/i", $value))
		{
			$x = explode('-', $value);
			if (isset($x[0]) AND isset($x[1]))
			{
				if (is_numeric($x[0]) AND is_numeric($x[1]))
				{
					for($i=$x[0]; $i<=$x[1]; $i++)
						if (!in_array($value, $num_arr)) array_push($num_arr, $i);
				}
			}
		}
		else
			if (!in_array($value, $num_arr)) array_push($num_arr, $value);
	}

	return asort($num_arr);
}

$num = '1-4, 8, 10, 20-23';
print_r(parse_number_list($num));
</pre>
<p>Hasilnya:</p>
<pre>
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 8
    [5] => 10
    [6] => 20
    [7] => 21
    [8] => 22
    [9] => 23
)
</pre>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2012/03/28/fungsi-php-mengurai-daftar-angka/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script untuk Tahun Copyright di Footer</title>
		<link>http://arif.suparlan.com/2011/12/07/script-untuk-tahun-copyright-di-footer?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=script-untuk-tahun-copyright-di-footer</link>
		<comments>http://arif.suparlan.com/2011/12/07/script-untuk-tahun-copyright-di-footer#comments</comments>
		<pubDate>Wed, 07 Dec 2011 04:03:12 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[copyright]]></category>
		<category><![CDATA[footer]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tahun]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=535</guid>
		<description><![CDATA[Hehehe, hal yang remeh banget nih. Ya, untuk catatan saya saja, supaya ga tiap tahun ngedit footer website, karena tahunnya sudah kelewat lawas. Kenapa ga dari dulu ya? Hehehe&#8230; sebenernya sudah kepikiran lama, cuman males aja ngubahnya. Langsung saja, di &#8230; <a href="http://arif.suparlan.com/2011/12/07/script-untuk-tahun-copyright-di-footer">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hehehe, hal yang remeh banget nih. Ya, untuk catatan saya saja, supaya ga tiap tahun ngedit footer website, karena tahunnya sudah kelewat lawas. Kenapa ga dari dulu ya? Hehehe&#8230; sebenernya sudah kepikiran lama, cuman males aja ngubahnya.<span id="more-535"></span></p>
<p>Langsung saja, di footer ada yang namanya Copyright notice. Di situlah ada yang disebut, misalnya -katakanlah tahun pembuatan. Kemudian supaya website seolah-olah sering diupdate, letakkan juga tahun saat ini. Kalo misalnya saya hanya tampilkan tahun pembuatan, misalnya 2005. Wah keliatannya website ini sudah sangat jadul. Seperti ini:</p>
<pre>Copyright © 2005-2009 <a href="http://www.suparlan.com/">Suparlan.com</a>, v.7. All rights reserved.</pre>
<p>Wah ini webmasternya pemalas banget ya&#8230; woi ini udah 2011 lahh&#8230; Siapa sih adminnya?</p>
<p>Ya ya yaa&#8230; Gini aja solusinya kita pake tahun dinamik, ngikutin tahun server. Gampang bukan? Banget!!! Mari pasang di footer WordPress dah.</p>
<pre>&lt;?php
$etdy = '2005';
echo sprintf('Copyright &amp;copy; %s &lt;a href="%s"&gt;%s&lt;/a&gt;, v.7.',
(date("Y")==$etdy) ? $etdy : $etdy.' - '.date("Y"),
'http://www.suparlan.com',
'Suparlan.com' );
?&gt; All rights reserved.</pre>
<p>Ya ya cupu abis. Hahaha&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/12/07/script-untuk-tahun-copyright-di-footer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codeigniter: Pagination Helper dengan URI Associative Array untuk Parameter Tambahan</title>
		<link>http://arif.suparlan.com/2011/11/13/codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan</link>
		<comments>http://arif.suparlan.com/2011/11/13/codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan#comments</comments>
		<pubDate>Sun, 13 Nov 2011 05:01:52 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[paging]]></category>
		<category><![CDATA[parameter]]></category>
		<category><![CDATA[query string]]></category>
		<category><![CDATA[segmented uri]]></category>
		<category><![CDATA[uri associative array]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=487</guid>
		<description><![CDATA[Pagination library dari Codeigniter sederhana dan sangat mudah digunakan. Tapi gimana caranya kalau kita mau nambah parameter tambahan lainnya seperti filter atau search di antara paging tersebut? Bisa pake query string! Gimana kalo pake URI bersegmennya CI biar rapi? Ga &#8230; <a href="http://arif.suparlan.com/2011/11/13/codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://codeigniter.com/user_guide/libraries/pagination.html" target="_blank">Pagination library dari Codeigniter</a> sederhana dan sangat mudah digunakan. Tapi gimana caranya kalau kita mau nambah parameter tambahan lainnya seperti filter atau search di antara paging tersebut? Bisa pake query string! Gimana kalo pake URI bersegmennya CI biar rapi? Ga dibahas di user_guide nya nih. Dan entah kenapa, saya lebih suka menyebutnya &#8220;Paging&#8221;.<span id="more-487"></span></p>
<p>Kita pake fitur <a href="http://codeigniter.com/user_guide/libraries/uri.html" target="_blank">URI dan Associative Array</a>, sudah pernah pake sebelumnya? Gampang, dengan &#8220;uri_to_assoc&#8221; kita bisa dapatkan parameter dalam bentuk array dari uri bersegmen dan &#8220;assoc_to_uri&#8221; untuk sebaliknya. Tinggal pelajari user_guide aja.</p>
<pre>index.php/user/search/name/joe/location/UK/gender/male</pre>
<pre>[array]
 (
 'name' =&gt; 'joe'
 'location' =&gt; 'UK'
 'gender' =&gt; 'male'
 )</pre>
<p>Cobain dulu <a href="http://arif.suparlan.com/demo/paging_assoc/" target="_blank">demonya di sini</a>.</p>
<p>Pertama, buat helper dengan nama paging_assoc_helper.php, trus simpan di folder helper. Bisa <a href="http://arif.suparlan.com/demo/paging_assoc/paging_assoc_helper.php.txt" target="_blank">copas di sini</a>.</p>
<pre>&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed.');

    function paging_assoc($varkey, $assoc_n=3)
    {
        $CI =&amp; get_instance();

        $qs_arr = $CI-&gt;uri-&gt;uri_to_assoc($assoc_n);
        $qs_tmp_arr=array();
        foreach($qs_arr as $key =&gt; $value)
            if ($key!=$varkey) $qs_tmp_arr[$key]=$value;

        foreach($CI-&gt;uri-&gt;segment_array() as $key =&gt; $value)
            if ($value=='p') $assoc_n = $key;

        $offset = (isset($qs_arr[$varkey])) ? $qs_arr[$varkey] : 0;
        $qs_uri = $CI-&gt;uri-&gt;assoc_to_uri($qs_tmp_arr).'/'.$varkey;

        return array(
            'offset' =&gt; $offset,
            'seg' =&gt; $assoc_n+1,
            'uri' =&gt; $qs_uri,
            );
    }</pre>
<p>Kemudian buat sebuah controller, atau untuk ngetes, replace saja welcome.php controller. Jangan lupa load library dan helper yang diperlukan. Cara penggunaannya kira-kira seperti ini:</p>
<pre>        //get paging settings, uri, segments, and offset
        //input param paging variable key, init segment
        $pg_arr = paging_assoc('p', 3);</pre>
<p>Tidak begitu rumit, helper ini sebenarnya hanya untuk mendapatkan URI tambahan, segmen untuk paging yang baru, dan offset untuk LIMIT. Scriptnya sudah dites beberapa kali, tapi tidak menutup ada bug. Silakan kalau ada yang mau diperbaiki.</p>
<pre>    public function index()
    {
        //$this-&gt;load-&gt;view('welcome_message');

        //load db, paging lib, some helpers
        $this-&gt;load-&gt;database();
        $this-&gt;load-&gt;library(array('pagination'));
        $this-&gt;load-&gt;helper(array('url', 'paging_assoc', 'form'));

        //get paging settings, uri, segments, and offset
        //input param paging variable key, init segment
        $pg_arr = paging_assoc('p', 3);
        if (isset($_POST['search']))
            redirect('/welcome/index/s/'.$_POST['search']);

        //other parameters
        $assoc_arr = $this-&gt;uri-&gt;uri_to_assoc(3);
        $s = (isset($assoc_arr['s'])) ? $assoc_arr['s'] : '';

        if ($s) $this-&gt;db-&gt;like('text', $s);
        $query = $this-&gt;db-&gt;get('test2');
        $num_rows = $query-&gt;num_rows();

        $paging['base_url'] = site_url().'/welcome/index/'.$pg_arr['uri'];
        $paging['total_rows'] = $num_rows;
        $paging['uri_segment'] = $pg_arr['seg'];
        $paging['per_page'] = 2;
        $this-&gt;pagination-&gt;initialize($paging);

        echo form_open('');
        echo 'Filter: '.form_input('search', (($s) ? $s : 'a'));
        echo form_submit('mysubmit', 'Submit');
        echo form_close();
        echo $this-&gt;pagination-&gt;create_links().'&lt;br&gt;';

        if ($s) $this-&gt;db-&gt;like('text', $s);
        $this-&gt;db-&gt;limit($paging['per_page'], $pg_arr['offset']);
        $query = $this-&gt;db-&gt;get('test2');

        foreach ($query-&gt;result() as $row)
        {
            echo $row-&gt;id.' '.$row-&gt;text.'&lt;br&gt;';
        }
    }</pre>
<p>Dan ini contoh data MySQL nya;</p>
<pre>CREATE TABLE IF NOT EXISTS `test2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `text` varchar(255) NOT NULL,
  `status` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=37 ;

INSERT INTO `test2` (`id`, `text`, `status`) VALUES
(1, 'croissant', 1),
(2, 'dessert', 0),
(3, 'gummi bears', 1),
(4, 'caramels', 1),
(5, 'candy canes', 0),
(6, 'fruitcake', 1),
(7, 'lollipop', 0),
(8, 'jelly-o macaroon', 1),
(9, 'fruitcake', 1),
(10, 'chocolate bar', 0),
(11, 'sesame snaps', 1),
(12, 'jelly beans', 1),
(13, 'jelly-o', 0),
(14, 'donut', 1),
(15, 'applicake', 0),
(16, 'chupa chups', 1),
(17, 'apple pie', 0),
(18, 'cheesecake', 0),
(19, 'pastry', 1),
(20, 'pudding', 1),
(21, 'marshmallow', 0),
(22, 'cookie', 0),
(23, 'croissant', 1),
(24, 'bonbon', 1),
(25, 'gingerbread', 0),
(26, 'tiramisu', 1),
(27, 'toffee', 0),
(28, 'caramels', 0),
(29, 'halvah', 1),
(30, 'sweet roll macaroon', 0),
(31, 'wafer', 1),
(32, 'brownie', 1),
(33, 'ice cream', 0),
(34, 'sugar plum', 1),
(35, 'jujubes', 0),
(36, 'biscuit', 1);</pre>
<p>Selamat mencoba.</p>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/11/13/codeigniter-pagination-helper-dengan-uri-associative-array-untuk-parameter-tambahan/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell Script untuk membackup database MySQL</title>
		<link>http://arif.suparlan.com/2011/04/05/shell-script-untuk-mem-backup-database-mysql?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=shell-script-untuk-mem-backup-database-mysql</link>
		<comments>http://arif.suparlan.com/2011/04/05/shell-script-untuk-mem-backup-database-mysql#comments</comments>
		<pubDate>Tue, 05 Apr 2011 16:15:32 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[backup]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=331</guid>
		<description><![CDATA[Menurut saya cara membackup MySQL yang paling baik yaitu dengan membuat mirrornya yang selalu di-sync. Tetapi ini bukan bahasan tentang itu kali ini. Cara yang lebih cepat adalah dengan menggunakan perintah mysqldump. Lalu bagaimana kalo membackup banyak database secara rutin? &#8230; <a href="http://arif.suparlan.com/2011/04/05/shell-script-untuk-mem-backup-database-mysql">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Menurut saya cara membackup MySQL yang paling baik yaitu dengan membuat mirrornya yang selalu di-sync. Tetapi ini bukan bahasan tentang itu kali ini. Cara yang lebih cepat adalah dengan menggunakan perintah mysqldump. Lalu bagaimana kalo membackup banyak database secara rutin? Gampang saja, buat shell scriptnya.<span id="more-331"></span></p>
<p>Sebagai catatan saya, shell script ini sangat membantu untuk membackup database MySQL. Selain praktis untuk di-cron, juga ada fitur untuk merotasi backup, contoh di bawah, menyimpan 7 backup yang terakhir, sehingga bisa menghemat space juga. Scriptnya cukup mudah untuk newbi seperti saya.</p>
<p>Sebelum membuat shell scriptnya, buat dulu satu user di MySQL yang nanti akan digunakan untuk membackup dari script shell ini. Privilegenya ga perlu dihantam semua, lebih baik dibatasi minimal seperti ini:</p>
<pre>SELECT, INDEX, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, SHOW VIEW</pre>
<p>Berikut contoh shell scriptnya:</p>
<pre>#!/bin/bash
#config
NOW=$(date +"%Y%m%d-%H%M%S")
#mysql
MYSQLUSER="user"
MYSQLPASS="password"
MYSQLHOST="localhost"
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
#local backup
FOLDER="/mysql"
DIRBAK="/home/backup/backup_files"$FOLDER
DIRBAKTEMP="/temp"
BAKFILENAME="backup_mysql.gz"
#compression
GZIP="$(which gzip)"
TAR="/bin/tar"

echo ""
echo "ROTATING FOLDERS..."
echo "--------------------------------------------------------"
rm -rf $DIRBAK/07_old
[ -d $DIRBAK/06 ] &amp;&amp; mv $DIRBAK/06 $DIRBAK/07_old
[ -d $DIRBAK/05 ] &amp;&amp; mv $DIRBAK/05 $DIRBAK/06
[ -d $DIRBAK/04 ] &amp;&amp; mv $DIRBAK/04 $DIRBAK/05
[ -d $DIRBAK/03 ] &amp;&amp; mv $DIRBAK/03 $DIRBAK/04
[ -d $DIRBAK/02 ] &amp;&amp; mv $DIRBAK/02 $DIRBAK/03
[ -d $DIRBAK/01 ] &amp;&amp; mv $DIRBAK/01 $DIRBAK/02
mkdir -p $DIRBAK/01/
mkdir -p $DIRBAK$DIRBAKTEMP/
echo "Done."

echo ""
echo "PERFORMING MYSQL BACKUP..."
echo "--------------------------------------------------------"
DBS="$($MYSQL -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASS -Bse 'show databases')"
SKIPDBS="test test01 "

for db in $DBS
do
	skipdb=-1
	if [ "$SKIPDBS" != "" ]; then
		for i in $SKIPDBS
		do
			[ "$db" == "$i" ] &amp;&amp; skipdb=1 || :
		done
	fi

	if [ "$skipdb" == "-1" ] ; then
		DIRMYSQL=$DIRBAK/01/$db.$NOW.gz
		echo "DB Backup:" $db $DIRMYSQL
		$MYSQLDUMP -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASS $db | $GZIP -9 &gt; $DIRMYSQL
	fi

	if [ "$skipdb" == "1" ] ; then
		echo "DB Backup Skipped:" $db
	fi
done
echo "Done."

echo ""
echo "PERFORMING COMPRESSION..."
echo "--------------------------------------------------------"
DIRS2="$DIRBAK/01/"
cd $DIRS2
DIRFILES2=$DIRBAK$DIRBAKTEMP/$BAKFILENAME
echo "Backup:" $DIRFILES2
$TAR cvf $DIRFILES2 *.*
echo "Done."
</pre>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/04/05/shell-script-untuk-mem-backup-database-mysql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Downgrade ke PHP 5.2 di CentOS 5.5</title>
		<link>http://arif.suparlan.com/2011/04/04/downgrade-ke-php-5-2-di-centos-5-5?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=downgrade-ke-php-5-2-di-centos-5-5</link>
		<comments>http://arif.suparlan.com/2011/04/04/downgrade-ke-php-5-2-di-centos-5-5#comments</comments>
		<pubDate>Mon, 04 Apr 2011 09:51:34 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Free/Open Source]]></category>
		<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[yum]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=375</guid>
		<description><![CDATA[Ada satu alasan yang jelas untuk tetap menggunakan PHP 5.2 dibandingkan dengan versi baru 5.3, yaitu karena beberapa fungsi telah ditiadakan di versi 5.3 sedangkan sistem-sistem lama masih banyak yang menggunakannya. Ini daftar fungsi-fungsi yang sudah dihilangkan, dan kebanyakannya masih &#8230; <a href="http://arif.suparlan.com/2011/04/04/downgrade-ke-php-5-2-di-centos-5-5">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ada satu alasan yang jelas untuk tetap menggunakan PHP 5.2 dibandingkan dengan versi baru 5.3, yaitu karena beberapa fungsi telah ditiadakan di versi 5.3 sedangkan sistem-sistem lama masih banyak yang menggunakannya. Ini daftar <a href="http://php.net/manual/en/migration53.deprecated.php" target="_blank">fungsi-fungsi yang sudah dihilangkan,</a> dan kebanyakannya masih sangat penting digunakan dibeberapa sistem.<span id="more-375"></span></p>
<p>Saya sendiri masih menggunakan/membangun sistem yang berdasarkan framework Codeigniter 1.7.2. yang kalau dijalankan di PHP 5.3 langsung ngadat. Selain itu kebanyakan hosting pun mau ga mau harus tetap dengan versi PHP 5.2. Jadi kalau membangun sebuah server ada baiknya untuk mempertimbangkan versi mana yang akan dipakai.</p>
<p>Kalau di server Debian/Ubuntu bisa dibilang mudah, mungkin karena sudah terbiasa dan di repositorinya, PHP versi 5.2 masih disupport, jadi instalasi bisa langsung lancar-lancar aja. Kebetulan server yang sekarang sedang digunakan adalah CentOS 5.5 jadi agak ribet, selain belum biasa, juga harus tau menggunakan command yum, dan harus ngecek repo yang masih ada PHP 5.2-nya.</p>
<p>Tapi ternyata ga susah-susah amat. Saya oprek-oprek sepertinya ini ada dua cara, atau tiga kalo mau lebih. Tulisan ini untuk catatan saya, silakan koreksi kalau ada yang salah.</p>
<p>Cara pertama dengan menggunakan repo dari Zend. Pertama-tama pastikan sudah tidak ada lagi instalasi PHP versi baru. Kalau masih ada dihilangkan saja.</p>
<pre>yum remove php*.*</pre>
<p>Kemudian buka yum.conf untuk meng-exclude-kan segala yang berbau php-5.3 di konfigurasi yum.</p>
<pre>vim /etc/yum.conf</pre>
<p>Tambahkan line berikut menghindari yum untuk menginstal atau me-list yang berkaitan dengan php-5.3.</p>
<pre>exclude=php-5.3*, mod-php-5.3*, zend-server-php-5.3*</pre>
<p>Kemudian buat file repo dengan nama <code>zend.repo</code></p>
<pre>vim /etc/yum.repos.d/zend.repo</pre>
<p>Isi dengan ini:</p>
<pre>[Zend]
name=Zend Server
baseurl=http://repos.zend.com/zend-server/rpm/$basearch
enabled=1
gpgcheck=0
[Zend_noarch]
name=Zend Server - noarch
baseurl=http://repos.zend.com/zend-server/rpm/noarch
enabled=1
gpgcheck=0</pre>
<p>Setelah itu langsung install saja dengan perintah berikut:</p>
<pre>yum install zend-server-php-5.2</pre>
<p>Saya pikir ini cara yang paling cepat dan sederhana, yum langsung menginstall semua yang berkaitan dengan php-5.2. Gampang kan? Ya mudah-mudahan dengan cara tadi langsung beres.</p>
<p>Cara kedua, sebenernya sama saja, cuma ini menggunakan <a href="http://www.jasonlitka.com/yum-repository/" target="_blank">repo yang lain lagi</a>. Tetap dengan meng-exclude-kan php-5.3, buat file repo seperti berikut:</p>
<pre>vim /etc/yum.repos.d/utterramblings.repo</pre>
<p>Isikan dengan ini:</p>
<pre>[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka</pre>
<p>Lihat list repo php yang ada, kemudian install paket yang ada beserta extension-extensionnya:</p>
<pre>yum list php

yum install php php-xmlrpc php-imap php-mhash php-mbstring php-mysql
php-xml php-gd php-openssl php-exif php-mcrypt php-soap</pre>
<p>Sedangkan cara yang ketiga, harus download dulu source php-5.2 di php.net, kemudian dikompil. Install dulu tools untuk mengompil sourcenya.</p>
<pre>yum install php-devel
yum install httpd-devel
yum install libxml2-devel
yum install mysql-devel</pre>
<p>Download source php-5.2</p>
<pre>wget http://id.php.net/distributions/php-5.2.17.tar.gz</pre>
<p>Extract file sourcenya, kemudian masuk ke foldernya:</p>
<pre>tar -zxvf php-5.2.17.tar.gz
cd php-5.2.17</pre>
<p>Jalankan proses kompil:</p>
<pre>./configure --with-apxs2=/usr/sbin/apxs --with-mysql=/usr/local
--with-zlib-dir=/usr --with-mysql=/usr/local --with-kerberos=/usr --enable-cli
--enable-exif --enable-mbstring --enable-mbregex --enable-sockets
--with-curl --with-openssl=/usr --with-xmlrpc --with-xsl=/usr --with-pear
--with-iconv --with-gd --with-jpeg-dir=/opt/local --with-png-dir=/opt/local
--with-freetype-dir=/opt/local

make install</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow: hidden;">menggunakannya</div>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/04/04/downgrade-ke-php-5-2-di-centos-5-5/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download Youtube Video dengan Shell Script V2</title>
		<link>http://arif.suparlan.com/2011/02/23/download-youtube-video-dengan-shell-script?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=download-youtube-video-dengan-shell-script</link>
		<comments>http://arif.suparlan.com/2011/02/23/download-youtube-video-dengan-shell-script#comments</comments>
		<pubDate>Wed, 23 Feb 2011 16:52:07 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Free/Open Source]]></category>
		<category><![CDATA[Iseng]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[sh]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[wget]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=344</guid>
		<description><![CDATA[Aplikasi yang dibuat mas Trio ini (You2Pup) ini adalah aplikasi di Puppy Linux untuk mendownload video dari Youtube. Beberapa hari lalu baru diupdate dengan menggunakan shell script yt-download.sh, padahal script itu lumayan cupu. Jadi ini yang ngebuat saya jadi iseng &#8230; <a href="http://arif.suparlan.com/2011/02/23/download-youtube-video-dengan-shell-script">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Aplikasi yang dibuat <a href="http://www.murga-linux.com/puppy/viewtopic.php?p=326803#326803" target="_blank">mas Trio ini (You2Pup)</a> ini adalah aplikasi di Puppy Linux untuk mendownload video dari Youtube. Beberapa hari lalu baru diupdate dengan menggunakan <a href="http://arif.suparlan.com/2010/07/30/download-youtube-video-dengan-shell-script-update" target="_blank">shell script yt-download.sh</a>, padahal script itu lumayan cupu. Jadi ini yang ngebuat saya jadi iseng ngoprek-ngoprek lagi.<span id="more-344"></span></p>
<p>Sama seperti aplikasi pendownload youtube yang lain, script yt-download yang lama masih bisa dijalankan mulus. Tapi, bedanya, dia hanya mendownload salah satu video saja (defaultnya), sementara di Youtube, satu video ada berbagai macam ukuran dan format. Ide dari mas Trio, di script yang baru, saya coba tambahkan beberapa fitur.</p>
<p>Shell ini masih sederhana seperti yang lama, hanya jauh lebih banyak barisnya. Ga jauh beda, cuma memanfaatkan fungsi-fungsi regular expression dan string manipulation untuk mendapatkan url video, format, dan ukuran. Variable tersebut ada di source html youtube dengan key &#8220;PLAYER_CONFIG&#8221; yang berupa array JSON. Dengan mendapatkan nilai &#8220;fmt_url_map&#8221; dan &#8220;fmt_map&#8221; sudah cukup menghasilkan url video, format, dan ukurannya. Kalo shell bisa ngebaca JSON, mungkin akan lebih mudah untuk parsingnya.</p>
<p>Script yt-download.sh bisa <a href="http://arif.suparlan.com/demo/yt-download/yt-download.sh.txt" target="_blank">didownload di sini</a>.</p>
<p><strong>Change log</strong></p>
<p>v2.32 &#8211; 2012-01-31</p>
<ul>
<li>Fixed: Youtube&#8217;s format changed, reported by Abdulla. PLAYER_CONFIG to playerConfig, line 54-55.</li>
<li>Changed: Added tmp file with timestamp, and deleted as soon as it is processed, to prevent write problems.</li>
</ul>
<p>v2.3 &#8211; 2011-08-29</p>
<ul>
<li>Fixed: Youtube&#8217;s format changed. url_encoded_fmt_stream_map &amp; fmt_list.</li>
<li>Fixed: Youtube&#8217;s url changed. Url decoded, remove some parameters, added &#8216;title&#8217; parameter.</li>
</ul>
<p>v2.2</p>
<ul>
<li>Fixed: Youtube&#8217;s url changed. Remove o-o.preferred.matrix-cgk1</li>
<li>Fixed: Youtube&#8217;s url changed. \u0026 replaced with &amp;.</li>
<li>Fixed: array sorting problem.</li>
</ul>
<p>v2.1</p>
<ul>
<li>Added: input for save directory, and some error handling if directory&#8217;s not found. (Thanks to Trio).</li>
<li>Added: abort option. (Thanks to Trio).</li>
<li>Added: wget parameter. (Thanks to Trio).</li>
<li>Added: new video format webm. Format list: flv, mp4, 3gp, and webm.</li>
<li>Changed: parsing algorithm based on Dougal&#8217;s Shell script. (Thanks to Dougal). But problem with array sorting.</li>
</ul>
<p>v2.0</p>
<ul>
<li>Added: automatic file naming based on page title.</li>
<li>Added: some error handling.</li>
<li>Added: allow user to choose available size and format. Format list: flv, mp4, and 3gp.</li>
<li>Changed: parsed portion. JSON array from youtube HTML source provides various video format. (Thanks to Trio).</li>
<li>Reported: problem with title and &#8220;/&#8221; character. Tested with Debian/Ubuntu &amp; Puppy, no problem.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/02/23/download-youtube-video-dengan-shell-script/feed</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Codeigniter Helper untuk Modular Extensions-HMVC</title>
		<link>http://arif.suparlan.com/2011/02/20/codeigniter-helper-untuk-modular-extensions-hmvc?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=codeigniter-helper-untuk-modular-extensions-hmvc</link>
		<comments>http://arif.suparlan.com/2011/02/20/codeigniter-helper-untuk-modular-extensions-hmvc#comments</comments>
		<pubDate>Sun, 20 Feb 2011 10:41:00 +0000</pubDate>
		<dc:creator>Arif</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[helper]]></category>
		<category><![CDATA[hmvc]]></category>
		<category><![CDATA[matchbox]]></category>
		<category><![CDATA[modular extentions]]></category>

		<guid isPermaLink="false">http://arif.suparlan.com/?p=335</guid>
		<description><![CDATA[Di Codeigniter 1.72 saya menggunakan Matchbox untuk modular extention. Dengan Matchbox, saya bisa mengatur applikasi yang saya buat menjadi komponen-komponen terpisah atau secara modular. Sekarang Codeigniter sudah versi 2, sementara Matchbox sudah tidak pernah disentuh lagi oleh pembuatnya. Akhirnya saya &#8230; <a href="http://arif.suparlan.com/2011/02/20/codeigniter-helper-untuk-modular-extensions-hmvc">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Di Codeigniter 1.72 saya menggunakan <a href="http://codeigniter.com/wiki/Matchbox/" target="_blank">Matchbox</a> untuk modular extention. Dengan Matchbox, saya bisa mengatur applikasi yang saya buat menjadi komponen-komponen terpisah atau secara modular. Sekarang <a href="http://codeigniter.com/" target="_blank">Codeigniter</a> sudah versi 2, sementara Matchbox sudah tidak pernah disentuh lagi oleh pembuatnya. Akhirnya saya pake <a href="http://codeigniter.com/wiki/Modular_Extensions_-_HMVC/">Modular Extensions &#8211; HMVC</a> atau ME-HMVC untuk Codeigniter.<span id="more-335"></span></p>
<p>Di bawah ini adalah helper untuk ME-HMVC, dibuat berdasarkan <a href="http://codeigniter.com/forums/viewthread/82622/" target="_blank">Philip Sturgeon&#8217;s Matchbox helper</a>,  dengan sedikit perubahan minor. Masih kasar, belum ditest semua, untuk catatan saja supaya ga lupa.</p>
<pre>
&lt;?php if (!defined('BASEPATH')) exit('No direct script access allowed.');

function module_directories() {
    return Modules::$locations;
}

function module_array() {
    $module_arr = array();

    foreach (module_directories() as $key=&gt;$value)
    {
        foreach(glob($key.'*', GLOB_ONLYDIR) as $module)
        {
            array_push($module_arr, array('module'=&gt;basename($module), 'path'=&gt;$key));
        }

    }

    return $module_arr;
}

function is_module($module) {
    if(!$module) return FALSE;
    foreach (module_directories() as $key=&gt;$value)
    {
        if (is_dir($key.basename($module))) {
            return TRUE;
        }
    }

    return FALSE;
}

?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://arif.suparlan.com/2011/02/20/codeigniter-helper-untuk-modular-extensions-hmvc/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

