<?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>Denie&#039;s Tech Blog</title>
	<atom:link href="http://blog.nataprawira.com/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nataprawira.com/tech</link>
	<description>Information Technology for Life!</description>
	<lastBuildDate>Tue, 09 Mar 2010 15:28:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Setting up DomainKeys on Centos</title>
		<link>http://blog.nataprawira.com/tech/2010/03/09/setting-up-domainkeys-on-centos/</link>
		<comments>http://blog.nataprawira.com/tech/2010/03/09/setting-up-domainkeys-on-centos/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 14:30:22 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[CentOS]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sendmail]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[DomainKeys]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=140</guid>
		<description><![CDATA[

This is a quick walk through on how to set up domain keys on Centos 5 using sendmail. It should also be very similar for Redhat or Fedora.

Domainkeys is a method mostly used by yahoo to verify that the sender of an email is valid. I did notice that gmail changes the domainkeys header line [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F03%2F09%2Fsetting-up-domainkeys-on-centos%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F03%2F09%2Fsetting-up-domainkeys-on-centos%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<h2><span style="font-weight: normal;font-size: 13px">This is a quick walk through on how to set up domain keys on Centos 5 using sendmail. It should also be very similar for Redhat or Fedora.</span></h2>
<div>
<p>Domainkeys is a method mostly used by yahoo to verify that the sender of an email is valid. I did notice that gmail changes the domainkeys header line to a pass value but I don’t know if they block/accept mail based on that.<span id="more-140"></span></p>
<p>First install some dependencies.</p>
<blockquote><p><strong>yum install sendmail-devel openssl-devel</strong></p></blockquote>
<p>First download the latest version of dk-milter by going to http://sourceforge.net/projects/dk-milter/</p>
<blockquote><p><strong>cd /usr/src/<br />
wget http://downloads.sourceforge.net/dk-milter/dk-milter-1.0.0.tar.gz</strong></p></blockquote>
<p>Then extract it using the command</p>
<blockquote><p><strong>tar xzf dk-milter-1.0.0.tar.gz<br />
cd dk-milter-2.6.0</strong></p></blockquote>
<p>Start by copying the sample config file to the proper directory and the make/make installing</p>
<blockquote><p><strong>cp site.config.m4.dist devtools/Site/site.config.m4<br />
make; make install</strong></p>
<p><span> </span></p></blockquote>
<p>You may see a few errors during the install, as long as they are just about creating the man pages you should be alright. Now change back to a good working directory and create your new keys.</p>
<blockquote><p><strong>cd ~/ssl-gen<br />
openssl genrsa -out rsa.private 768<br />
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM</strong></p></blockquote>
<p>Make the directory and move the private key into it.</p>
<blockquote><p><strong>mkdir -p /var/db/domainkeys/<br />
cp rsa.private /var/db/domainkeys/mail.key.pem</strong></p></blockquote>
<p>Now we should set up our DNS TXT records with our public key. This is how it should look in a bind zone file. Put the public key only and not the “BEGIN RSA PRIVATE…” or “END RSA…” parts of the key with out parenthesis.</p>
<blockquote><p><strong>mail._domainkey.jkurtzman.com.         IN TXT  “k=rsa; t=y; p=(Paste the public key here)”<br />
_domainkey.jkurtzman.com.                 IN TXT  “t=y; o=~”</strong></p></blockquote>
<p>You can use the following command to verify that your TXT record was set up correctly.</p>
<blockquote><p><strong>dig +short mail._domainkey.jkurtzman.com TXT</strong></p></blockquote>
<p>Now we will need to make the init script so the it starts when the computer reboots. Put the following into a file called <strong>/etc/init.d/domainkeys</strong>. Of course be sure to change the domain to your own domain. Remember to fix any lines that have wrapped when copying. Especially the COMMAND line.</p>
<blockquote><p><strong>#!/bin/sh<br />
#<br />
# “/etc/rc.d/init.d/dk-filter”<br />
# Start/stop script for the dk-filter daemon on RedHat Linux<br />
#<br />
# chkconfig: – 79 31<br />
# description: Acts as the “dk-filter” InputMailFilter (milter) for the \<br />
# Sendmail MTA to provide DomainKeys service</strong></p>
<p><strong>############################################################<br />
#<br />
# Be sure to edit these values:<br />
#<br />
KEYFILE=”/var/db/domainkeys/mail.key.pem”<br />
DOMAIN=”jkurtzman.com”<br />
SELECTOR=”mail”<br />
USER=”domainkeys”<br />
#<br />
############################################################</strong></p>
<p><strong>PIDFILE=”/var/run/dk-milter/pid”<br />
SUBMISSION_DAEMON=”smtp”<br />
PORT=8891</strong></p>
<p><strong># Source function library. Provides the “status” option<br />
. /etc/init.d/functions</strong></p>
<p><strong>test -x `which dk-filter` || exit 0</strong></p>
<p><strong>RETVAL=0</strong></p>
<p><strong>start() {<br />
echo -n $”Starting dk-filter: ”<br />
COMMAND=”dk-filter -u $USER -b s -p inet:$PORT@localhost -l -P $PIDFILE -s $KEYFILE -d $DOMAIN -S $SELECTOR -m$SUBMISSION_DAEMON -c nofws”<br />
# echo -e “Now executing\n”$COMMAND”&#8221;<br />
daemon $COMMAND<br />
RETVAL=$?<br />
echo<br />
[ $RETVAL -eq 0 ] &amp;&amp; touch /var/lock/subsys/dk-filter<br />
return $RETVAL<br />
}</strong></p>
<p><strong>stop() {<br />
echo -n $”Stopping dk-filter: ”<br />
killproc dk-filter<br />
RETVAL=$?<br />
echo<br />
[ $RETVAL -eq 0 ] &amp;&amp; rm -f $PIDFILE /var/lock/subsys/dk-filter<br />
return $RETVAL<br />
}</strong></p>
<p><strong>restart() {<br />
stop<br />
start<br />
}</strong></p>
<p><strong>case “$1″ in<br />
start)<br />
start<br />
;;<br />
stop)<br />
stop<br />
;;<br />
status)<br />
status dk-filter<br />
;;<br />
restart)<br />
restart<br />
;;<br />
*)<br />
echo $”Usage: $0 {start|stop|status|restart}”<br />
exit 1<br />
esac</strong></p>
<p><strong>exit $?</strong></p></blockquote>
<p>Give your new file execute permisions, create a user for domain keys to run as, and start it</p>
<blockquote><p><strong>chmod +x /etc/init.d/domainkeys<br />
useradd domainkeys<br />
service domainkeys start</strong></p></blockquote>
<p>If everything work you should see that the dk-filter has started.<br />
Now run chkconfig so the service starts when you reboot.</p>
<blockquote><p><strong>chkconfig domainkeys on</strong></p></blockquote>
<p>Now add this to your /etc/mail/sendmail.mc file.</p>
<blockquote><p><strong>INPUT_MAIL_FILTER(`dk-filter’, `S=inet:8891@localhost’)</strong></p></blockquote>
<p>And make and restart sendmail.</p>
<blockquote><p><strong>cd /etc/mail<br />
make<br />
service sendmail restart</strong></p></blockquote>
<p>You should now be able to send email and be domainkey verified. If you are relaying mail through the mail server you will need to make sure you are using SMTP Authentication otherwise the  dk-filter will not add the header information.</p>
<p>Try sending an email to a yahoo account and see if you get secure icon.</p>
<p><span style="font-family: 'Trebuchet MS';font-size: x-small"> </span></p>
<h1><span style="font-family: 'Trebuchet MS'">Source:</span></h1>
<h1><span style="font-family: 'Trebuchet MS'"><a href="http://luxio.us/cMZ11e" target="_blank">http://luxio.us/cMZ11e </a></span></h1>
</div>

<div class="bitly_links">
<div class="bitly_linkstext">
Share this on : 
</div>
<ul>
	<li class="bitly_linksfirst"><a rel="nofollow" id="facebook" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.facebook.com%2Fshare.php%3Fu%3Dhttp%253A%252F%252Fbit.ly%252F9eRCUw%26amp%3Bt%3DSetting%2520up%2520DomainKeys%2520on%2520Centos';" title="Facebook">Facebook</a></li>
	<li><a rel="nofollow" id="friendfeed" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.friendfeed.com%2Fshare%3Ftitle%3DSetting%2520up%2520DomainKeys%2520on%2520Centos%26amp%3Blink%3Dhttp%253A%252F%252Fbit.ly%252F9eRCUw';" title="Friendfeed">Friendfeed</a></li>
	<li><a rel="nofollow" id="posterous" target="_blank" href="javascript:window.location='http%3A%2F%2Fposterous.com%2Fshare%3Flinkto%3Dhttp%253A%252F%252Fbit.ly%252F9eRCUw%26amp%3Btitle%3DSetting%2520up%2520DomainKeys%2520on%2520Centos%26amp%3Bselection%3D';" title="Posterous">Posterous</a></li>
	<li><a rel="nofollow" id="tumblr" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.tumblr.com%2Fshare%3Fv%3D3%26amp%3Bu%3Dhttp%253A%252F%252Fbit.ly%252F9eRCUw%26amp%3Bt%3DSetting%2520up%2520DomainKeys%2520on%2520Centos%26amp%3Bs%3D';" title="Tumblr">Tumblr</a></li>
	<li class="bitly_linkslast"><a rel="nofollow" id="twitter" target="_blank" href="javascript:window.location='http%3A%2F%2Ftwitter.com%2Fhome%3Fstatus%3DSetting%2520up%2520DomainKeys%2520on%2520Centos%2520-%2520http%253A%252F%252Fbit.ly%252F9eRCUw';" title="Twitter">Twitter</a></li>
</ul>
</div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2010/03/09/setting-up-domainkeys-on-centos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BlackBerry Bold 9700 (Onyx) Features</title>
		<link>http://blog.nataprawira.com/tech/2010/02/26/blackberry-bold-9700-onyx-features/</link>
		<comments>http://blog.nataprawira.com/tech/2010/02/26/blackberry-bold-9700-onyx-features/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 01:24:23 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[9700]]></category>
		<category><![CDATA[Bold]]></category>
		<category><![CDATA[Onyx]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/2010/02/26/blackberry-bold-9700-onyx-features/</guid>
		<description><![CDATA[

Features: Voice-Activated Dialing, MMS Enabled, Global Ready, Video Recording, Color Screen, Bluetooth Enabled, GPS, Calendar, Email Access, Internet Browser, Wi-Fi Capable, SMS-Text Messaging, 3G Data Capable, QWERTY Keyboard, Speakerphone
Camera: 3 Megapixels &#38; Up
Available Features
• Trackpad navigation
• Bright, hi-resolution screen
• Full QWERTY keyboard
• 3G technology
• Wi-Fi® and Bluetooth® enabled
• 256MB flash memory
• 3.2 MP digital camera with video camera
• Multimedia player
• Wireless email
• Organizer
• Browser
• Phone
• SMS/MMS 
Display
• High resolution 480&#215;360 [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F02%2F26%2Fblackberry-bold-9700-onyx-features%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F02%2F26%2Fblackberry-bold-9700-onyx-features%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Features: Voice-Activated Dialing, MMS Enabled, Global Ready, Video Recording, Color Screen, Bluetooth Enabled, GPS, Calendar, Email Access, Internet Browser, Wi-Fi Capable, SMS-Text Messaging, 3G Data Capable, QWERTY Keyboard, Speakerphone<br />
Camera: 3 Megapixels &amp; Up<br />
Available Features<br />
• Trackpad navigation<br />
• Bright, hi-resolution screen<br />
• Full QWERTY keyboard<br />
• 3G technology<br />
• Wi-Fi® and Bluetooth® enabled<br />
• 256MB flash memory<br />
• 3.2 MP digital camera with video camera<br />
• Multimedia player<br />
• Wireless email<br />
• Organizer<br />
• Browser<br />
• Phone<br />
• SMS/MMS <br />
Display<br />
• High resolution 480&#215;360 pixel<br />
color display<br />
• Transmissive TFT LCD<br />
• Supports over 65,000 colors<br />
• 2.44&#8243; (diagonally measured)</p>
<p>Camera &amp; Video Recording<br />
• 3.2 MP Camera<br />
• Auto Focus, Image Stabilization<br />
• Flash<br />
• 2X digital zoom </p>
<p>Video camera recording:<br />
Normal Mode (480 x 352 pixel),<br />
MMS Mode (176 x 144 pixel)<br />
Maps &amp; GPS<br />
• Includes BlackBerry Maps<br />
• Integrated GPS with A-GPS<br />
Data Input &amp; Navigation<br />
• 35 key backlit QWERTY keyboard<br />
• Dedicated Keys: Send, End, VAD (User Customizable), Camera (User Customizable), 2 x Volume/Zoom<br />
• Trackpad &#8211; Located on front face of device, ESC Key to the right, Menu to the left<br />
• Intuitive icons and menus<br />
Voice Input &amp; Output<br />
• Integrated speaker and microphone<br />
• Hands-free headset capable<br />
• Bluetooth headset capable<br />
• Integrated Hands-Free Speakerphone<br />
• Rating for hearing aids (PDF): M3, T3 (in cellular bands only)<br />
Media Player<br />
• Video format support: XviD partially supported, H.263, H.264, WMV3, MPEG4, Sorenson Spark &amp; On2 VP6 (Flash support)<br />
• Audio format support: .3gp, MP3, WMA9 (.wma/.asf), WMA9 Pro / WMA 10, MIDI, AMR-NB, Professional AAC/AAC+/eAAC+<br />
Ringtones &amp; Notifications<br />
• Tone, vibrate, on-screen or LED indicator<br />
• Notification options are user configurable<br />
• 32 Polyphonic Ringtones – MIDI, SP-MDI, MP3, WAV<br />
Bluetooth<br />
• Bluetooth® v2.1<br />
• Mono/Stereo Headset<br />
• Handsfree<br />
• Serial Port Profile<br />
• Bluetooth Stereo Audio (A2DP/AVCRP)<br />
• Bluetooth SIM Access Profile supported<br />
Security<br />
• Password protection<br />
• Screen lock<br />
• Sleep mode<br />
• Optional support for S/MIME<br />
Wi-Fi<br />
802.11 b/g<br />
• UMA support<br />
• Planned Wi-Fi Certifications: WPA, WPA2, WMM, WMM Power Save, Wi-Fi Protected Setup, Cisco CCX<br />
Wireless Networks<br />
3G (HSDPA) compatible<br />
UMTS: 2100/1900/850/800 MHz (Bands 1,2,5/6), 2100/1700/900 MHz (Bands 1,4,8)<br />
GSM: 1900/1800/900/850 MHz<br />
Quad-band support: GSM 850; GSM</p>

<div class="bitly_links">
<div class="bitly_linkstext">
Share this on : 
</div>
<ul>
	<li class="bitly_linksfirst"><a rel="nofollow" id="facebook" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.facebook.com%2Fshare.php%3Fu%3Dhttp%253A%252F%252Fbit.ly%252Fd0PICn%26amp%3Bt%3DBlackBerry%2520Bold%25209700%2520%2528Onyx%2529%2520Features';" title="Facebook">Facebook</a></li>
	<li><a rel="nofollow" id="friendfeed" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.friendfeed.com%2Fshare%3Ftitle%3DBlackBerry%2520Bold%25209700%2520%2528Onyx%2529%2520Features%26amp%3Blink%3Dhttp%253A%252F%252Fbit.ly%252Fd0PICn';" title="Friendfeed">Friendfeed</a></li>
	<li><a rel="nofollow" id="posterous" target="_blank" href="javascript:window.location='http%3A%2F%2Fposterous.com%2Fshare%3Flinkto%3Dhttp%253A%252F%252Fbit.ly%252Fd0PICn%26amp%3Btitle%3DBlackBerry%2520Bold%25209700%2520%2528Onyx%2529%2520Features%26amp%3Bselection%3D';" title="Posterous">Posterous</a></li>
	<li><a rel="nofollow" id="tumblr" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.tumblr.com%2Fshare%3Fv%3D3%26amp%3Bu%3Dhttp%253A%252F%252Fbit.ly%252Fd0PICn%26amp%3Bt%3DBlackBerry%2520Bold%25209700%2520%2528Onyx%2529%2520Features%26amp%3Bs%3D';" title="Tumblr">Tumblr</a></li>
	<li class="bitly_linkslast"><a rel="nofollow" id="twitter" target="_blank" href="javascript:window.location='http%3A%2F%2Ftwitter.com%2Fhome%3Fstatus%3DBlackBerry%2520Bold%25209700%2520%2528Onyx%2529%2520Features%2520-%2520http%253A%252F%252Fbit.ly%252Fd0PICn';" title="Twitter">Twitter</a></li>
</ul>
</div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2010/02/26/blackberry-bold-9700-onyx-features/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips: Hemat Biaya saat Roaming International</title>
		<link>http://blog.nataprawira.com/tech/2010/02/12/tips-hemat-biaya-saat-roaming-international/</link>
		<comments>http://blog.nataprawira.com/tech/2010/02/12/tips-hemat-biaya-saat-roaming-international/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 05:10:39 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Biaya]]></category>
		<category><![CDATA[Hemat]]></category>
		<category><![CDATA[Roaming]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=136</guid>
		<description><![CDATA[

Ada kekhawatiran para pengguna BlackBerry akan besarnya biaya roaming penggunaan GPRS saat berada di luar negeri, sehingga mereka tidak mengaktifkan layanan BlackBerry saat berada di luar negeri.
Tentunya solusi ini akhirnya malah merugikan karena aneh jika pengguna BlackBerry tidak update dengan informasi penting, dan sebaliknya karena ketidaktahuan akan biaya roaming seseorang selalu mengaktifkan layanan BlackBerry hampir [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F02%2F12%2Ftips-hemat-biaya-saat-roaming-international%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F02%2F12%2Ftips-hemat-biaya-saat-roaming-international%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Ada kekhawatiran para pengguna BlackBerry akan besarnya biaya roaming penggunaan GPRS saat berada di luar negeri, sehingga mereka tidak mengaktifkan layanan BlackBerry saat berada di luar negeri.</p>
<p>Tentunya solusi ini akhirnya malah merugikan karena aneh jika pengguna BlackBerry tidak update dengan informasi penting, dan sebaliknya karena ketidaktahuan akan biaya roaming seseorang selalu mengaktifkan layanan BlackBerry hampir tiap detik email, chatting, etc selalu masuk.</p>
<p>Kemudian yang terjadi setelah tiba di Indonesia kaget dengan tagihan bulanan yang fantastis, untuk menghindari 2 hal diatas. Berikut saat ketika kita melakukan perjalanan keluar negeri:</p>
<p>1. Ketika kita tiba di suatu negara namun tidak mendapatkan network roaming partner di area tersebut, maka segera lakukan change network secara manual / update location network dengan cara masuk ke menu Options &#8211; Mobile Network &#8211; Network Selection Mode &#8211; Change from Automatic ke Manual &#8211; Scan Available for Network &#8211; Pilih Roaming Partner Operator Anda &#8211; Save.</p>
<p>2. Matikan layanan pada saat yg tidak tepat (tidur, mandi, makan malam, meeting, etc) dengan masuk ke menu Options &#8211; Mobile Network &#8211; Data Service change from On to Off atau Off When Roaming, atau bisa juga dari Manage Connections -Mobile Network Options &#8211; Data Services set ke : Off When Roaming. Sebagai informasi dengan mematikan layanan data service kita tetap dapat menerima Call, SMS dan MMS.</p>
<p>3. Jika anda pengguna layanan BlackBerry Internet Service (BIS) dan anda ingin layanan data tetap aktif sementara email account yg dipush ke handheld lebih dari 1 bahkan sampai 10 email account (apalagi jika email account tersebut tergabung dalam mailing list seperti yahoogroups), maka untuk sementara email2 yg kurang penting sebaiknya di nonaktifkan dengan cara login di blackberry webclient [operator_anda].blackberry.com pada menu email account lakukan delete email tersebut, lakukan add email account ketika kembali di Indonesia.</p>
<p>4. Non aktifkan semua layanan instant messaging terutama FaceBook. aktifkan layanan tersebut pada saat dibutuhkan.</p>
<p>5. Aktifkan koneksi WiFi ketika anda berada di area Free WiFi, tentunya fasilitas ini dapat dinikmati pada handheld yg ada feature Wifi seperti 8320, 8810, 8820, 9000, 8900, 8220 etc. Caranya Manage Connections &#8211; Setup Wifi &#8211; ikuti step2 berikutnya.</p>
<h6><em>Source: Indosat Mobile</em></h6>

<div class="bitly_links">
<div class="bitly_linkstext">
Share this on : 
</div>
<ul>
	<li class="bitly_linksfirst"><a rel="nofollow" id="facebook" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.facebook.com%2Fshare.php%3Fu%3Dhttp%253A%252F%252Fbit.ly%252FavJQzD%26amp%3Bt%3DTips%253A%2520Hemat%2520Biaya%2520saat%2520Roaming%2520International';" title="Facebook">Facebook</a></li>
	<li><a rel="nofollow" id="friendfeed" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.friendfeed.com%2Fshare%3Ftitle%3DTips%253A%2520Hemat%2520Biaya%2520saat%2520Roaming%2520International%26amp%3Blink%3Dhttp%253A%252F%252Fbit.ly%252FavJQzD';" title="Friendfeed">Friendfeed</a></li>
	<li><a rel="nofollow" id="posterous" target="_blank" href="javascript:window.location='http%3A%2F%2Fposterous.com%2Fshare%3Flinkto%3Dhttp%253A%252F%252Fbit.ly%252FavJQzD%26amp%3Btitle%3DTips%253A%2520Hemat%2520Biaya%2520saat%2520Roaming%2520International%26amp%3Bselection%3D';" title="Posterous">Posterous</a></li>
	<li><a rel="nofollow" id="tumblr" target="_blank" href="javascript:window.location='http%3A%2F%2Fwww.tumblr.com%2Fshare%3Fv%3D3%26amp%3Bu%3Dhttp%253A%252F%252Fbit.ly%252FavJQzD%26amp%3Bt%3DTips%253A%2520Hemat%2520Biaya%2520saat%2520Roaming%2520International%26amp%3Bs%3D';" title="Tumblr">Tumblr</a></li>
	<li class="bitly_linkslast"><a rel="nofollow" id="twitter" target="_blank" href="javascript:window.location='http%3A%2F%2Ftwitter.com%2Fhome%3Fstatus%3DTips%253A%2520Hemat%2520Biaya%2520saat%2520Roaming%2520International%2520-%2520http%253A%252F%252Fbit.ly%252FavJQzD';" title="Twitter">Twitter</a></li>
</ul>
</div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2010/02/12/tips-hemat-biaya-saat-roaming-international/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook Emoticons (Key ALT usage)</title>
		<link>http://blog.nataprawira.com/tech/2010/01/29/facebook-emoticons-key-alt-usage/</link>
		<comments>http://blog.nataprawira.com/tech/2010/01/29/facebook-emoticons-key-alt-usage/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 03:54:23 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[Emoticons]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=131</guid>
		<description><![CDATA[

Facebook symbols are not part of facebook but can be inserted into your facebook name, chat window, messages, status, comments etc..
♪ = Musical note
♫ = Big musical note
♥ = Black heart
☺= Smile face
☻ = Black smile face
There are two ways for use this symbols.
1. Copy from here and paste in your facebook name, status or [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F01%2F29%2Ffacebook-emoticons-key-alt-usage%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2010%2F01%2F29%2Ffacebook-emoticons-key-alt-usage%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Facebook symbols are not part of facebook but can be inserted into your facebook name, chat window, messages, status, comments etc..</p>
<p>♪ = Musical note<br />
♫ = Big musical note<br />
♥ = Black heart<br />
☺= Smile face<br />
☻ = Black smile face<span id="more-131"></span></p>
<p>There are two ways for use this symbols.</p>
<p>1. Copy from here and paste in your facebook name, status or message.<br />
2. These characters can be typed on your keyboard using the ALT button.</p>
<p>Desktop computer instructions for ALT facebook symbols:<br />
• Press and hold left Alt key on your keyboard.<br />
• While holding Alt key enter one of the codes below to get the corresponding symbol.<br />
• Important note: You need to use numbers on the right side of the keyboard for entering code, not the numbers on top, otherwise they won’t work.</p>
<p>Laptop instructions for ALT facebook symbols:<br />
• Press and hold left Alt key on your keyboard.<br />
• While holding Alt key also press and hold Fn key.<br />
• While holding Alt and Fn key enter one of the codes below to get corresponding symbol.<br />
• Important note: You need to use numbers on the right side of the keyboard for entering code (they are usually written next to letters U, I, O… and in different color), not the numbers on top, otherwise they won’t work.</p>
<p>Alt + 1 ☺<br />
Alt + 2 ☻<br />
Alt + 3 ♥<br />
Alt + 4 ♦<br />
Alt + 5 ♣<br />
Alt + 6 ♠<br />
Alt + 7 •<br />
Alt + 8 ◘<br />
Alt + 9 ○<br />
Alt + 10 ◙<br />
Alt + 11 ♂<br />
Alt + 12 ♀<br />
Alt + 13 ♪<br />
Alt + 14 ♫<br />
Alt + 15 ☼<br />
Alt + 16 ►<br />
Alt + 17 ◄<br />
Alt + 18 ↕<br />
Alt + 19 ‼<br />
Alt + 20 ¶<br />
Alt + 21 §<br />
Alt + 22 ▬<br />
Alt + 23 ↨<br />
Alt + 24 ↑<br />
Alt + 25 ↓<br />
Alt + 26 →<br />
Alt + 27 ←<br />
Alt + 28 ∟<br />
Alt + 29 ↔<br />
Alt + 30 ▲<br />
Alt + 31 ▼</p>
<p>Here is the complete list of symbols Unicode. You can copy and paste these for use in your messages</p>
<p>♠ ♣ ♥<br />
♦ ♪ ♫ ■ □ ▪ ▫ ▬ ▲ ►<br />
▼ ◄ ◊ ○ ● ◘ ◙ ◦ ☺ ☻<br />
☼ ♀ ▪ ▫ ▬ ☻<br />
☺ ◙ ◘ ▀ € ♥<br />
♂ ▒</p>
<p>๏ ๐ ๑ ๒<br />
๓ ๔ ๕๖ ๗ ๘ ๙ ๚ ๛ Ẁ<br />
ẁ Ẃ ẃ Ẅ ẅ Ạ ạ Ả ả Ấ<br />
ấ Ầ ầẨ ẩ Ẫ ẫ Ậ ậ Ắ<br />
ắ Ằ ằ Ẳ ẳ Ẵ ẵ Ặ ặ Ẹ<br />
ẹ Ẻ ẻ Ẽ ẽ Ế ế Ề ề Ể<br />
ể Ễ ễ Ệ ệ Ỉ ỉ Ị ị Ọ<br />
Æ ¢ ™ Ð ¹ º ç Þ ß ÿ æ â ã ¥ ¤ £ ¦ ©<br />
ª « ¬ ­® ¯</p>
<p>Ì Í Î Ï Ð Ñ Ò Ó Ô<br />
Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é<br />
ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Āā<br />
Ăă Ąą Ć ć ĉ Ċ ċ ő Œ œ Ŕ<br />
ŕ Ŗ ŗ Ř ř Ś ś Ŝ ŝ Ş ş Š<br />
š Ţ ţ Ť ť Ŧ ŧ Ũ ũ Ū ū Ŭ<br />
ŭ Ů ů Ű ű Ų ų Ŵ ŵ Ŷ ŷ Ÿ<br />
Ź ź Ż ż Ž ž ſ ƒ Ǻ ǻ Ǽ ǽ<br />
Ǿ ǿ ˆ ˇ ˉ ˘˙ ˚ ˛ ˜ ˝ ;<br />
΄</p>
<p>₪ ₫ € ℅ l<br />
№ ™ Ω e ⅛ ⅜ ⅝ ⅞ ∂ ∆ ∏<br />
∑ &#8211; / · v 8 ∫ ˜ ≠ = = □ ▪ ▫ ◊<br />
● ◦       <br />
      ﬁ ﬂ ﬠ<br />
שׁ שׂ שּׁ שּׂ אַ אָ אּ בּ גּ<br />
דּהּ וּ זּ טּיּ ךּכּ לּ<br />
מּנּ סּ ףּ פּ צּ קּרּ שּ<br />
תּ וֹ בֿכֿ פֿ ﭏ ﭖ ﭗﭘ<br />
ﭙ ﭺﭻ ﭼ</p>
<p>ﭽ ﮊ ﮋ<br />
ﮎ ﮏ ﮐ ﮑ ﮒ ﮓ ﮔ ﮕ ﮤ<br />
ﮥ ﯼ ﯽ ﯾ ﱞ ﱟ ﱠ ﱡ ﱢ<br />
﴾ ﴿ ﷲ ﺀ ﺁ ﺂ ﺃ ﺄ ﺅ<br />
ﺆ ﺇ ﺈ ﺉ ﺊ ﺋ ﺌ ﺍ ﺎ<br />
ﺏﺐ ﺑ ﺒ ﺓ ﺔ ﺕ ﺖ ﺗ<br />
ﺘ ﺙ ﺚ ﺛﺜ</p>
<p>ﺝ ﺞ ﺟ<br />
ﺠ ﺡ ﺢ ﺣ ﺤ ﺥ ﺦ ﺧ ﺨ<br />
ﺩﺪ ﺫ ﺬ ﺭ ﺮ ﺯ ﺰ<br />
ﺱﺲ ﺳ ﺴ ﺵﺶ ﺷ ﺸﺹ<br />
ﺺ ﺻ ﺼ ﺽﺾ ﺿ ﻀ ﻁ</p>
<p>ﻂ ﻃ<br />
ﻄﻅ ﻆ ﻇ ﻈ ﻉﻊ ﻋ ﻌ<br />
ﻍ ﻎ ﻏﻐ ﻑ ﻒ ﻓ ﻔ ﻕ<br />
ﻖﻗ ﻘ ﻙ ﻚ ﻛ ﻜ ﻝﻞ<br />
ﻟ ﻠ ﻡ ﻢ ﻣﻤ ﻥ ﻦ ﻧ<br />
ﻨﻩ ﻪ ﻫ ﻬ ﻭ ﻮﻯ ﻰ<br />
ﻱ ﻲ ﻳ ﻴﻵ ﻶ ﻷ ﻸﻹ<br />
ﻺ ﻻ ﻼ</p>
<p>لم<br />
ن ه و ى يً ٌ ٍ َ ُ<br />
ِّ ْ % ٤ ٠ ١ ٢ ٣ ٥٦<br />
٧ ٨ ٩ ﾎ 么 ﾒ _ ｬ `<br />
ｦ _ ｶ ｼ ﾆ ♠ ♣<br />
◄ ▬ ☻ ▬ ► ♣ ♠<br />
Л п † ‡</p>
<p>█ ▌<br />
▐ ░░▒▓<br />
▓▒░░ ░░░▒▓<br />
▓▒░░░</p>
<p>░▒▓<br />
▓▒░ ▓▒░ ░▒▓<br />
░░<br />
▀▄▀▄▀▄▀▄▀▄<br />
▄▀▄▀▄▀</p>
<p>═ ╬ ╦ ╩ ╦<br />
╣╝╠ ╧ ╨ ╫ ╪<br />
╥ ╤ ╢╡╟╞ ╜</p>
<p>⌠⌡│┌<br />
┐└ ┘├ ┤┬ ┴ ┼<br />
╛╚╙╘╗╖╕╔╓╒║</p>
<p>╬ ╫ ╪ ╩<br />
╨ ╧ ╦ ╥ ╤ ╣ ╢ ╡ ╠ ╟<br />
╞ ╝ ╜ ╛ ╚ ╙ ╗ ╘ ╗ ╖<br />
╕ ╔ ╓ ╒ ║ ═</p>
<p>Enjoy them!</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2010/01/29/facebook-emoticons-key-alt-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setup a transparent proxy with 3 easy steps</title>
		<link>http://blog.nataprawira.com/tech/2009/12/18/setup-a-transparent-proxy-with-3-easy-steps/</link>
		<comments>http://blog.nataprawira.com/tech/2009/12/18/setup-a-transparent-proxy-with-3-easy-steps/#comments</comments>
		<pubDate>Fri, 18 Dec 2009 14:57:30 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Transparent Proxy]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=127</guid>
		<description><![CDATA[

First, Squid server installed (use up2date squid) and configured by adding following directives to file:
# vi /etc/squid/squid.conf


Modify or add following squid directives:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
acl lan src 192.168.1.1 192.168.2.0/24
http_access allow localhost
http_access allow lan
Where,

httpd_accel_host virtual: Squid as an httpd accelerator
httpd_accel_port 80: 80 is port you want to act as a proxy
httpd_accel_with_proxy on: Squid act as [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F12%2F18%2Fsetup-a-transparent-proxy-with-3-easy-steps%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F12%2F18%2Fsetup-a-transparent-proxy-with-3-easy-steps%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>First, Squid server installed (use up2date squid) and configured by adding following directives to file:<br />
<strong><code># vi /etc/squid/squid.conf</code></strong></p>
<p><strong><span id="more-127"></span><br />
</strong></p>
<p>Modify or add following squid directives:<br />
<strong><code>httpd_accel_host <span style="color: #ff0000">virtual</span><br />
httpd_accel_port <span style="color: #ff0000">80</span><br />
httpd_accel_with_proxy <span style="color: #ff0000">on</span><br />
httpd_accel_uses_host_header <span style="color: #ff0000">on</span><br />
acl lan src <span style="color: #ff0000">192.168.1.1 192.168.2.0/24</span><br />
http_access allow <span style="color: #ff0000">localhost</span><br />
http_access allow <span style="color: #ff0000">lan</span></code></strong></p>
<p>Where,</p>
<ul>
<li>httpd_accel_host <span style="color: #ff0000">virtual</span>: Squid as an httpd accelerator</li>
<li>httpd_accel_port <span style="color: #ff0000">80</span>: 80 is port you want to act as a proxy</li>
<li>httpd_accel_with_proxy <span style="color: #ff0000">on</span>: Squid act as both a local httpd accelerator and as a proxy.</li>
<li>httpd_accel_uses_host_header <span style="color: #ff0000">on</span>: Header is turned on which is the hostname from the URL.</li>
<li>acl lan src <span style="color: #ff0000">192.168.1.1 192.168.2.0/24</span>: Access control list, only allow LAN computers to use squid</li>
<li>http_access allow <span style="color: #ff0000">localhost</span>: Squid access to LAN and localhost ACL only</li>
<li>http_access allow <span style="color: #ff0000">lan</span>: &#8212; same as above &#8211;</li>
</ul>
<p>Here is the complete listing of squid.conf for your reference (grep will remove all comments and sed will remove all empty lines, thanks to David Klein for quick hint ):<br />
<strong><code># grep -v "^#" /etc/squid/squid.conf | sed -e '/^$/d'</code></strong></p>
<p>OR, try out sed (thanks to <a href="http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html#comment-144">kotnik</a> for small sed trick)<br />
<strong><code># cat /etc/squid/squid.conf | sed '/ *#/d; /^ *$/d'</code></strong></p>
<p>Output:<br />
<strong><code>hierarchy_stoplist cgi-bin ?<br />
acl QUERY urlpath_regex cgi-bin \?<br />
no_cache deny QUERY<br />
hosts_file /etc/hosts<br />
refresh_pattern ^ftp:           1440    20%     10080<br />
refresh_pattern ^gopher:        1440    0%      1440<br />
refresh_pattern .               0       20%     4320<br />
acl all src 0.0.0.0/0.0.0.0<br />
acl manager proto cache_object<br />
acl localhost src 127.0.0.1/255.255.255.255<br />
acl to_localhost dst 127.0.0.0/8<br />
acl purge method PURGE<br />
acl CONNECT method CONNECT<br />
cache_mem 1024 MB<br />
http_access allow manager localhost<br />
http_access deny manager<br />
http_access allow purge localhost<br />
http_access deny purge<br />
http_access deny !Safe_ports<br />
http_access deny CONNECT !SSL_ports<br />
acl lan src 192.168.1.1  192.168.2.0/24<br />
http_access allow localhost<br />
http_access allow lan<br />
http_access deny all<br />
http_reply_access allow all<br />
icp_access allow all<br />
visible_hostname myclient.hostname.com<br />
httpd_accel_host virtual<br />
httpd_accel_port 80<br />
httpd_accel_with_proxy on<br />
httpd_accel_uses_host_header on<br />
coredump_dir /var/spool/squid</code></strong></p>
<h3>Iptables configuration</h3>
<p>Next, I had added following rules to forward all http requests (coming to port 80) to the Squid server port 3128 :<br />
<strong><code>iptables -t nat -A PREROUTING -i  <span style="color: #ff0000">eth1</span> -p tcp --dport <span style="color: #ff0000">80</span> -j DNAT --to 192.168.1.1:3128<br />
iptables -t nat -A PREROUTING -i  <span style="color: #ff0000">eth0</span> -p tcp --dport  <span style="color: #ff0000">80 -j REDIRECT --to-port 3128</span></code></strong></p>
<p>Here is complete shell script. Script first configure Linux system as router and forwards all http request to port 3128 (Download the <a href="http://www.cyberciti.biz/tips/wp-content/uploads/2006/06/fw.proxy.txt">fw.proxy</a> shell script):<br />
<strong><code><em><span style="color: #9a1900">#!/bin/sh</span></em><br />
<em><span style="color: #9a1900"># squid server IP</span></em><br />
SQUID_SERVER<span style="color: #990000">=</span><span style="color: #ff0000">"192.168.1.1"</span><br />
<em><span style="color: #9a1900"># Interface connected to Internet</span></em><br />
INTERNET<span style="color: #990000">=</span><span style="color: #ff0000">"eth0"</span><br />
<em><span style="color: #9a1900"># Interface connected to LAN</span></em><br />
LAN_IN<span style="color: #990000">=</span><span style="color: #ff0000">"eth1"</span><br />
<em><span style="color: #9a1900"># Squid port</span></em><br />
SQUID_PORT<span style="color: #990000">=</span><span style="color: #ff0000">"3128"</span><br />
<em><span style="color: #9a1900"># DO NOT MODIFY BELOW</span></em><br />
<em><span style="color: #9a1900"># Clean old firewall</span></em><br />
iptables <span style="color: #990000">-</span>F<br />
iptables <span style="color: #990000">-</span>X<br />
iptables <span style="color: #990000">-</span>t nat <span style="color: #990000">-</span>F<br />
iptables <span style="color: #990000">-</span>t nat <span style="color: #990000">-</span>X<br />
iptables <span style="color: #990000">-</span>t mangle <span style="color: #990000">-</span>F<br />
iptables <span style="color: #990000">-</span>t mangle <span style="color: #990000">-</span>X<br />
<em><span style="color: #9a1900"># Load IPTABLES modules for NAT and IP conntrack support</span></em><br />
modprobe ip_conntrack<br />
modprobe ip_conntrack_ftp<br />
<em><span style="color: #9a1900"># For win xp ftp client</span></em><br />
<em><span style="color: #9a1900">#modprobe ip_nat_ftp</span></em><br />
echo <span style="color: #993399">1</span> <span style="color: #990000">&gt;</span> /proc/sys/net/ipv4/<span style="color: #0000ff">ip_forward</span><br />
<em><span style="color: #9a1900"># Setting default filter policy</span></em><br />
iptables <span style="color: #990000">-</span>P INPUT DROP<br />
iptables <span style="color: #990000">-</span>P OUTPUT ACCEPT<br />
<em><span style="color: #9a1900"># Unlimited access to loop back</span></em><br />
iptables <span style="color: #990000">-</span>A INPUT <span style="color: #990000">-</span>i lo <span style="color: #990000">-</span>j ACCEPT<br />
iptables <span style="color: #990000">-</span>A OUTPUT <span style="color: #990000">-</span>o lo <span style="color: #990000">-</span>j ACCEPT<br />
<em><span style="color: #9a1900"># Allow UDP, DNS and Passive FTP</span></em><br />
iptables <span style="color: #990000">-</span>A INPUT <span style="color: #990000">-</span>i <span style="color: #009900">$INTERNET</span> <span style="color: #990000">-</span><span style="color: #0000ff">m</span> state <span style="color: #990000">-</span><span style="color: #990000">-</span>state ESTABLISHED<span style="color: #990000">,</span>RELATED <span style="color: #990000">-</span>j ACCEPT<br />
<em><span style="color: #9a1900"># set this system as a router for Rest of LAN</span></em><br />
iptables <span style="color: #990000">-</span><span style="color: #990000">-</span>table nat <span style="color: #990000">-</span><span style="color: #990000">-</span>append POSTROUTING <span style="color: #990000">-</span><span style="color: #990000">-</span>out<span style="color: #990000">-</span>interface <span style="color: #009900">$INTERNET</span> <span style="color: #990000">-</span>j MASQUERADE<br />
iptables <span style="color: #990000">-</span><span style="color: #990000">-</span>append FORWARD <span style="color: #990000">-</span><span style="color: #990000">-</span>in<span style="color: #990000">-</span>interface <span style="color: #009900">$LAN_IN</span> <span style="color: #990000">-</span>j ACCEPT<br />
<em><span style="color: #9a1900"># unlimited access to LAN</span></em><br />
iptables <span style="color: #990000">-</span>A INPUT <span style="color: #990000">-</span>i <span style="color: #009900">$LAN_IN</span> <span style="color: #990000">-</span>j ACCEPT<br />
iptables <span style="color: #990000">-</span>A OUTPUT <span style="color: #990000">-</span>o <span style="color: #009900">$LAN_IN</span> <span style="color: #990000">-</span>j ACCEPT<br />
<em><span style="color: #9a1900"># DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy</span></em><br />
iptables <span style="color: #990000">-</span>t nat <span style="color: #990000">-</span>A PREROUTING <span style="color: #990000">-</span>i <span style="color: #009900">$LAN_IN</span> <span style="color: #990000">-</span>p tcp <span style="color: #990000">-</span><span style="color: #990000">-</span>dport <span style="color: #993399">80</span> <span style="color: #990000">-</span>j DNAT <span style="color: #990000">-</span><span style="color: #990000">-</span>to <span style="color: #009900">$SQUID_SERVER</span><span style="color: #990000">:</span><span style="color: #009900">$SQUID_PORT</span><br />
<em><span style="color: #9a1900"># if it is same system</span></em><br />
iptables <span style="color: #990000">-</span>t nat <span style="color: #990000">-</span>A PREROUTING <span style="color: #990000">-</span>i <span style="color: #009900">$INTERNET</span> <span style="color: #990000">-</span>p tcp <span style="color: #990000">-</span><span style="color: #990000">-</span>dport <span style="color: #993399">80</span> <span style="color: #990000">-</span>j REDIRECT <span style="color: #990000">-</span><span style="color: #990000">-</span>to<span style="color: #990000">-</span>port <span style="color: #009900">$SQUID_PORT</span><br />
<em><span style="color: #9a1900"># DROP everything and Log it</span></em><br />
iptables <span style="color: #990000">-</span>A INPUT <span style="color: #990000">-</span>j LOG<br />
iptables <span style="color: #990000">-</span>A INPUT <span style="color: #990000">-</span>j DROP</code></strong></p>
<p>Save shell script. Execute script so that system will act as a router and forward the ports:<br />
<strong><code># chmod +x /etc/fw.proxy<br />
# /etc/fw.proxy<br />
# service iptables save<br />
# chkconfig iptables on</code></strong></p>
<p>Start or Restart the squid:<br />
<strong><code># /etc/init.d/squid restart<br />
# chkconfig squid on</code></strong></p>
<h3>Desktop / Client computer configuration</h3>
<p>Point all desktop clients to your eth1 IP address (192.168.2.1) as Router/Gateway (use DHCP to distribute this information). You do not have to setup up individual browsers to work with proxies.</p>
<h3>How do I test my squid proxy is working correctly?</h3>
<p>See access log file /var/log/squid/access.log:<br />
<strong><code># tail -f /var/log/squid/access.log</code></strong></p>
<p>Above command will monitor all incoming request and log them to /var/log/squid/access_log file. Now if somebody accessing a website through browser, squid will log information.</p>
<h3>Problems and solutions</h3>
<h4>(a) Windows XP FTP Client</h4>
<p>All Desktop client FTP session request ended with an error:<br />
Illegal PORT command.</p>
<p>I had loaded the ip_nat_ftp kernel module. Just type the following command press Enter and voila!<br />
<strong><code># modprobe ip_nat_ftp</code></strong></p>
<p>Please note that modprobe command is already added to a shell script (above).</p>
<h4>(b) Port 443 redirection</h4>
<p>I had block out all connection request from our router settings except for our proxy (192.168.1.1) server. So all ports including 443 (https/ssl) request denied. You cannot redirect port 443, from <a href="http://lists.debian.org/debian-user/2004/05/msg01434.html">debian mailing list</a>, &#8220;<em>Long answer: SSL is specifically designed to prevent &#8220;man in the middle&#8221; attacks, and setting up squid in such a way would be the same as such a &#8220;man in the middle&#8221; attack. You might be able to successfully achive this, but not without breaking the encryption and certification that is the point behind SSL</em>&#8220;.</p>
<p>Therefore, I had quickly reopen port 443 (router firewall) for all my LAN computers and problem was solved.</p>
<h4>(c) Squid Proxy authentication in a transparent mode</h4>
<p>You cannot use Squid authentication with a transparently intercepting proxy.</p>
<h3>Further reading:</h3>
<ul>
<li><a href="http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/10/how-do-i-use-iptables-connection.html">How do I use Iptables connection tracking feature? </a></li>
<li><a href="http://www.cyberciti.biz/nixcraft/vivek/blogger/2005/10/how-do-i-build-simple-linux-firewall.html">How do I build a Simple Linux Firewall for DSL/Dial-up connection? </a></li>
<li><strong>Update:</strong> <a href="http://www.cyberciti.biz/nixcraft/forum/viewtopic.php?t=457">Forum topic discussion: Setting up a transparent proxy with Squid peering to ISP squid server</a></li>
<li><a href="http://squid-docs.sourceforge.net/latest/html/book1.html">Squid, a user&#8217;s guide</a></li>
<li><a href="http://www.squid-cache.org/Doc/FAQ/">Squid FAQ</a></li>
<li><a href="http://tldp.org/HOWTO/TransparentProxy.html">Transparent Proxy with Linux and Squid mini-HOWTO</a></li>
</ul>
<p><a title="http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html" href="http://www.cyberciti.biz/tips/linux-setup-transparent-proxy-squid-howto.html" target="_blank"><strong>Source</strong></a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/12/18/setup-a-transparent-proxy-with-3-easy-steps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing Sendmail</title>
		<link>http://blog.nataprawira.com/tech/2009/12/09/optimizing-sendmail/</link>
		<comments>http://blog.nataprawira.com/tech/2009/12/09/optimizing-sendmail/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 15:14:12 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sendmail]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[optimize]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=125</guid>
		<description><![CDATA[

Most of them involve changing the daemon&#8217;s configuration in /etc/sendmail.mc and rebuilding sendmail.cf
Specific things that can affect performance:
dnl # Sendmail, Chap 24.9.13, Page 955
dnl # Disable re-write of queue control file (will result in duplicates
dnl #   if the daemon is interrupted during a delivery)
define(`confCHECKPOINTINTERVAL&#8217;,`0&#8242;)dnl
dnl # Sendmail, Chap 24.9.21, Page 960
dnl # Disable throttling the acceptance [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F12%2F09%2Foptimizing-sendmail%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F12%2F09%2Foptimizing-sendmail%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Most of them involve changing the daemon&#8217;s configuration in <strong>/etc/sendmail.mc</strong> and <span style="text-decoration: underline">rebuilding</span> <strong>sendmail.cf</strong></p>
<p><span style="text-decoration: underline">Specific things that can affect performance</span>:</p>
<p>dnl # Sendmail, Chap 24.9.13, Page 955<br />
dnl # Disable re-write of queue control file (will result in duplicates<br />
dnl #   if the daemon is interrupted during a delivery)<br />
<strong>define(`confCHECKPOINTINTERVAL&#8217;,`0&#8242;)dnl<span id="more-125"></span></strong></p>
<p>dnl # Sendmail, Chap 24.9.21, Page 960<br />
dnl # Disable throttling the acceptance of new connections<br />
<strong>define(`confCONNECTION_RATE_THROTTLE&#8217;,`0&#8242;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.25, Page 967<br />
dnl # Specify the maximum size, in bytes, of buffered df* files (default is<br />
dnl #   4096 bytes; 0 turns this off and is not recommended)<br />
<strong>define(`confDF_BUFFER_SIZE&#8217;,`16384&#8242;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.60, Page 1011<br />
dnl # Disable limit on the daemon spawning new children<br />
<strong>define(`confMAX_DAEMON_CHILDREN&#8217;,`0&#8242;)dnl </strong></p>
<p>dnl # Sendmail, Chap 24.9.66, Page 1016<br />
dnl # Disbale limit on the number of messages that may be processed<br />
dnl #  during any one queue run<br />
<strong>define(`confMAX_QUEUE_RUN_SIZE&#8217;,`0&#8242;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.19, Page 959<br />
dnl # Turn on connection caching and set maximum number of simultaneous<br />
dnl #  outbound connections kept open to 4; default is 2; this option also<br />
dnl #  depends on MCI_CACHE_TIMEOUT (below)<br />
<strong>define(`confMCI_CACHE_SIZE&#8217;,`4&#8242;)dnl </strong></p>
<p>dnl # Sendmail, Chap 24.9.19, Page 959<br />
dnl # Set time limit on how long a cached outbound connection may be<br />
dnl #  kept open to 120 seconds (2 minutes) &#8211; see MCI_CACHE_SIZE above<br />
<strong>define(`confMCI_CACHE_TIMEOUT&#8217;,`120s&#8217;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.72, Page 1022<br />
dnl # Disable time delay for queued messages not delivered on the first try<br />
<strong>define(`confMIN_QUEUE_AGE&#8217;,`0&#8242;)dnl </strong></p>
<p>dnl # Sendmail, Chapter 24.9.107, Page 1057<br />
dnl # Disable MTA setting that forces MTA to queue each message and to sync<br />
dnl #   to disk before forking (a system crash may result in lost mail)<br />
<strong>define(`confSAFE_QUEUE&#8217;,`false&#8217;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.109.13, Page 1065<br />
dnl # Disable IDENT (RFC 1413) calls/turn off sending user-host verification<br />
<strong>define(`confTO_IDENT&#8217;,`0&#8242;)dnl</strong></p>
<p>dnl # Sendmail, Chap 24.9.120, Page 1077<br />
dnl # Specify the maximum size, in bytes, of buffered xf* files (default is<br />
dnl #   4096 bytes; 0 turns this off and is not recommended)<br />
<strong>define(`confXF_BUFFER_SIZE&#8217;,`16384&#8242;)dnl</strong></p>
<p>dnl # Sendmail, Chap 4.8.28, Page 192<br />
dnl # Turn off E-Mail canonization (should be done by MSA, and this<br />
dnl #     is a mail relay with no local users)<br />
<strong>FEATURE(`nocanonify&#8217;)dnl</strong></p>
<p>I&#8217;m assuming you&#8217;re using a modern version of sendmail &#8211; v8.12.10 or later. These settings may be different, or not exist at all, for older versions.</p>
<p><em><strong><a title="http://www.experts-exchange.com/Software/Server_Software/Email_Servers/SendMail/Q_21598211.html" href="http://www.experts-exchange.com/Software/Server_Software/Email_Servers/SendMail/Q_21598211.html" target="_blank">Source</a></strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/12/09/optimizing-sendmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTPasswd Tutorial</title>
		<link>http://blog.nataprawira.com/tech/2009/11/24/htpasswd-tutorial/</link>
		<comments>http://blog.nataprawira.com/tech/2009/11/24/htpasswd-tutorial/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 02:35:18 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[HTaccess]]></category>
		<category><![CDATA[htpassword]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=119</guid>
		<description><![CDATA[

If you would like to have a set of web pages that are protected, requiring a username/password to gain access, this tutorial will show you how to set it up. This is geared towards the Unix Apache httpd servers used on holly, lamar, and www.colostate.edu. If you are using another web server, you&#8217;ll need to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F24%2Fhtpasswd-tutorial%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F24%2Fhtpasswd-tutorial%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<h1><span style="font-weight: normal;font-size: 13px">If you would like to have a set of web pages that are protected, requiring a username/password to gain access, this tutorial will show you how to set it up. This is geared towards the Unix Apache httpd servers used on holly, lamar, and www.colostate.edu. If you are using another web server, you&#8217;ll need to check that server&#8217;s documentation to see how to do this.</span></h1>
<p><span style="font-weight: normal;font-size: 13px"><span id="more-119"></span></span></p>
<p><span style="font-weight: normal;font-size: 13px"><strong>Steps to Password-protect a Directory</strong></span></p>
<p><span style="font-weight: normal;font-size: 13px"><strong><span style="font-weight: normal;font-size: 13px">First, create a subdirectory in your web area. For the sake of this tutorial, I have created the &#8220;protect&#8221; directory. Set the permissions on the directory so that the server has read/execute. I do this by using the local command chgrp-www to set the group to the www group. This is the group that the server runs under at Colorado State University for the lamar, holly and www servers. I have used the -sd flag which sets &#8220;set group id&#8221; for a directory. This will then force any files you create within the protect directory to the www group, so if you ftp files to this directory they will be automatically readable by the server but not by any other user on the system. I then cd into the protect directory. </span></strong></span></p>
<blockquote>
<pre><strong>cd ~ric/public_html
mkdir protect
chmod g+r,g+x,o-r,o-x protect
chgrp-www -sd protect
cd protect</strong></pre>
</blockquote>
<p>Next you must create a .htaccess file inside the directory you want protected. You can use either the vi or pico editors on the supported systems mentioned above or ftp the file to this directory. If you are new to unix or know little about vi then I suggest you use the pico editor or ftp the .htaccess file. The command to edit with pico is &#8220;pico .htaccess&#8221;. The .htaccess file should contain the following lines. The items in <strong>bold</strong> are things you will want to change depending on the location of the AuthUserFile and content of AuthName.</p>
<blockquote>
<pre><strong>AuthUserFile /z/ric/secret/.htpasswd
AuthGroupFile /dev/null
AuthName "Ric's protected files"
AuthType Basic

&lt;Limit GET&gt;
require valid-user
&lt;/Limit&gt;</strong></pre>
</blockquote>
<p>The <strong>AuthName</strong> is what the user will see when they&#8217;re prompted for a password &#8211; something to the effect of &#8220;Enter the username for Ric&#8217;s Protected files&#8221;. The <strong>AuthUserFile</strong> is location of the password file and should be not accessible with a url on the server for security reasons. This is a full unix path and the permissions should be set up like the &#8220;protect&#8221; directory using the chmod and chgrp-www commands above so the only one that can read this file is the owner and the server. To get the full path of a directory, cd to that directory and enter the command &#8220;pwd&#8221; to print the working directory path.</p>
<p>Now you&#8217;ll have to set up the password file. You&#8217;ll need to use the <strong>htpasswd</strong> program. It is included with the Apache httpd server.</p>
<p>First cd to the directory that contains the password file. In this example the password file is called .htpasswd and is in the directory /z/ric/secret/ as indicated by the AuthUserFile file entry in the .htaccess file. For every username you want to add to the password file, enter the following. (the -c is only required the first time; it indicates that you want to create the .htpasswd file).</p>
<blockquote>
<pre><strong>
$~ cd
$~ mkdir secret
$~ cd secret
$~ htpasswd -c .htpasswd pumpkin
<span style="font-weight: normal"><span style="color: #333399">
[ you're prompted for the password for pumpkin]
[ if you have other users enter the following. Don't use the -c]
</span></span>
$~ htpasswd .htpasswd user2
$~ htpasswd .htpasswd user3
</strong></pre>
</blockquote>
<p>Again, make sure the permissions are set up like the &#8220;protect&#8221; directory using the chmod and chgrp-www commands above so the only one that can read files in the &#8220;secret&#8221; directory is the owner and the server.</p>
<p>Here is the <a href="http://www.colostate.edu/~ric/protect/your.html" target="_blank">protected page</a> using the above setup to password protect this page. The username is &#8220;pumpkin&#8221; and password is &#8220;pie&#8221;.</p>
<p>[<a href="http://www.colostate.edu/~ric/htpass.html" target="_blank">source</a>]</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/11/24/htpasswd-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Ensure Maximum Uptime For Your High-Traffic Business Website?</title>
		<link>http://blog.nataprawira.com/tech/2009/11/18/how-to-ensure-maximum-uptime-for-your-high-traffic-business-website/</link>
		<comments>http://blog.nataprawira.com/tech/2009/11/18/how-to-ensure-maximum-uptime-for-your-high-traffic-business-website/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 14:08:21 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[High-Traffic]]></category>
		<category><![CDATA[Website]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=117</guid>
		<description><![CDATA[

The word “catastrophic success” holds a lot of meaning here. It means an unusual surge in traffic that can bring a website to a complete halt. You have been successful at bringing traffic to your website but it proved to be catastrophic.

This happens due to unanticipated levels of interest when thousands of users visit the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F18%2Fhow-to-ensure-maximum-uptime-for-your-high-traffic-business-website%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F18%2Fhow-to-ensure-maximum-uptime-for-your-high-traffic-business-website%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>The word “catastrophic success” holds a lot of meaning here. It means an unusual surge in traffic that can bring a website to a complete halt. You have been successful at bringing traffic to your website but it proved to be catastrophic.</p>
<p><span id="more-117"></span></p>
<p>This happens due to unanticipated levels of interest when thousands of users visit the website, but the webmaster is unable to cope with them. Sometimes, the service may not go down but gets so slow that it becomes non-responsive. Such problems can be overcome.</p>
<p>Other causes of website failure include DoS attack (denial of service), which can also cause congestion and overload; poorly configured system components and out-of-date updates and patches on web servers.</p>
<p>The occasional outage is understandable and happens to all, but frequent downtime can cause delays in business. As we begin relying more on Web applications, Internet uptime is becoming more critical.</p>
<p>But there are things you can take care of to ensure you pave a smooth superhighway to your company’s website.</p>
<p><strong>Content delivery networks (CDNs)</strong></p>
<p>The public internet depends on content delivery networks to handle large amounts of media on huge sites like Amazon.com. Microsoft recently launched a free CDN to improve website performance. CDNs are made to route traffic onto private networks, thus removing the burden from the public website. In the absence of a CDN, sites with massive media files will be down immediately.</p>
<p><strong>Better caching</strong></p>
<p>One of the best and most popular ways of dealing with internet problems is to cache data that is frequently accessed. You can use Memcache or anything else and you will find several CMS packages that support this. But you must ensure you are careful with dynamic data.</p>
<p>Internet caching is similar to your computer memory caching, which holds the most popular content in a cached storage on the server to provide faster access. There are tier-caching products that help cache content within the website by making sure the content from the database is available even with there is a huge surge of traffic. This is one of the ways Twitter and Facebook deal with traffic surges.</p>
<p><strong>Better programming</strong></p>
<p>One of the new methods of dealing with traffic is to use better programming to withstand the sudden traffic spikes. Experts say that most websites cannot withstand any unanticipated traffic due to poor programming.</p>
<p><strong>Using HTML5</strong></p>
<p>Your website downtime is not always related to the hardware. HTML5 and other new standards have built-in mechanisms for increasing the reliability of websites. These involve advanced programming techniques. HTML5 is considered to be an important advance in browser capabilities.</p>
<p><strong>Content optimization</strong></p>
<p>You can optimize your static content by compressing images in order to make use of every kilobyte, but all the while making sure the visual quality does not get affected. You can also compress the content delivered by your web server. You can optimize your content management system by reducing the number of database calls you need to make for each page request. In Drupal, this is very simply done by disabling some of the modules. It is also advisable to separate the read and write databases.</p>
<p><strong>Expires</strong></p>
<p>One of the most important things is to add “expires” headers to content to ensure the same files are not downloaded continually as a user browses your website.</p>
<p>There is certainly no guarantee that your site will never go down. You will just have to find the right balance and implement what is necessary to ensure it has a high percentage of uptime.<br />
<a href="http://www.alreadyhosting.com/blog/2009/11/ensure-maximum-uptime/" target="_blank">Source</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/11/18/how-to-ensure-maximum-uptime-for-your-high-traffic-business-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>10 ways to market your website!</title>
		<link>http://blog.nataprawira.com/tech/2009/11/17/10-ways-to-market-your-website/</link>
		<comments>http://blog.nataprawira.com/tech/2009/11/17/10-ways-to-market-your-website/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 15:40:32 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Marketing]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=112</guid>
		<description><![CDATA[

1. Advertise on the internet!
There is an ocean of opportunities through internet marketing, find what works for you.
- Pay Per Click advertising (Download and read the previous document in this section “What are pay per click search engines” ) is very popular and is becoming easier to use everyday. Here are the top 2 Pay [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F17%2F10-ways-to-market-your-website%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F11%2F17%2F10-ways-to-market-your-website%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>1. Advertise on the internet!</strong></p>
<p>There is an ocean of opportunities through internet marketing, find what works for you.</p>
<p>- Pay Per Click advertising (Download and read the previous document in this section “What are pay per click search engines” ) is very popular and is becoming easier to use everyday. Here are the top 2 Pay Per Click Pages that you can use to advertise your web page.</p>
<p>Make sure to set a budget limit so that you don’t spend more then you can afford.</p>
<p><span id="more-112"></span></p>
<ul>
<li>Google AdWords</li>
<li>Yahoo! Search Marketing</li>
<li>Microsoft adCenter</li>
</ul>
<p>- Online News Papers. Simply search for your country/citys local news paper and call them for information if you can’t learn how to place your advert from their web page.</p>
<p>-Job search companies</p>
<p><strong>2. Classified Ads, Traditional Phone Number Marketing, Ad your Web Address on all your flyers, advert, posters.</strong></p>
<p>You can choose to have a phone number and your web address or Just the Web Address. I recommend that you do both, many people are still not using computers and we do not want our advertising miss valuable prospect.<strong></strong></p>
<p><strong>3. Signatures, </strong>Place your web address on all of your marketing materials &#8211; including business cards, stationary, your e-mail signature, SMS signature, SKYPE, MSN, Yahoo and other chat programs signature &#8211; any way that you contact potential recruits and customers!</p>
<p><strong>4. Banners,</strong> Trading banners and banner exchanges are very popular. Most banners get horrible click thorough rates. Banners at the top of a page are more effective. Additionally, it is recommended to create a banner that says &#8220;click here&#8221; and is animated. If possible, use a program that allows only one banner ad per page.</p>
<p><strong>5. Ask your friends,</strong> If they want to Link to your page via their page. (ask and you will know, they might say sure why not and a link to your page will appear on their page…. Maybe even for free!</p>
<p><strong>6. Bulletin Boards (Forums)</strong>, If you are active on various bulletin boards, your site will become better known. Offer your service. A standard way is to always end your notes with your Web site name and URL.</p>
<p><strong>7. SMS and Email,</strong> send SMS and Emails to your hot and cold market with a note for them to become interested to look up your web page.</p>
<p>Example:</p>
<blockquote><p>Own a PC? Put it To Work!<br />
Go to www.YourDomainName.com</p></blockquote>
<p><strong>8. Go to a Local Email Café and ask the owner</strong>, if you can have post a note on each PC or if you can change so each PC start up with your Domain Name.</p>
<p><strong>9. Hang a banner from your balcony</strong> with your Domain Name and advert on it (ask the house owner first </p>
<p><strong>10. Advertise on your car</strong>, that is for free.</p>
<p><em>11. <span style="text-decoration: underline">Bonus</span>: <strong>Be Creative!!!!!</strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/11/17/10-ways-to-market-your-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Web/Linux IP Address Lookup</title>
		<link>http://blog.nataprawira.com/tech/2009/10/22/ip-address-lookup/</link>
		<comments>http://blog.nataprawira.com/tech/2009/10/22/ip-address-lookup/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 17:58:01 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[IP Address]]></category>
		<category><![CDATA[Lookup]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=106</guid>
		<description><![CDATA[

If you&#8217;re going to be doing a lot of Geotargeting or IP Address  Lookups, please take a feed instead which will preserve both our bandwidth and  your bandwidth.
Simple GET
That said, there is an easy HTTP oriented API to locate IP  addresses and Geocode them. If you don&#8217;t supply the &#8220;?ip=aa.bb.cc.dd&#8221;  bit, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F10%2F22%2Fip-address-lookup%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F10%2F22%2Fip-address-lookup%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>If you&#8217;re going to be doing a lot of Geotargeting or IP Address  Lookups, please take a feed instead which will preserve both our bandwidth and  your bandwidth.</p>
<h1>Simple GET</h1>
<p>That said, there is an easy HTTP oriented API to locate <strong>IP  addresses</strong> and <strong>Geocode</strong> them. If you don&#8217;t supply the &#8220;?ip=aa.bb.cc.dd&#8221;  bit, then the ip address lookup of the calling machine will be located instead  (here, the aa,bb,cc,dd are decimal digits). If you add &amp;position=true to the  end of the URL then latitude and longitude will be returned also. Both HTML and  XML formats are supplied for your convenience.</p>
<blockquote><p><strong>http://api.hostip.info/country.php</strong><br />
US</p>
<p><strong>http://api.hostip.info/get_html.php?ip=12.215.42.19</strong><br />
Country: UNITED STATES (US)<br />
City: Sugar Grove, IL</p>
<p><strong>http://api.hostip.info/get_html.php?ip=12.215.42.19&amp;position=true</strong><br />
Country: UNITED STATES (US)<br />
City: Sugar Grove, IL<br />
Latitude: 41.7696<br />
Longitude: -88.4588</p>
<p><strong>http://api.hostip.info/?ip=12.215.42.19</strong><br />
[use the URL above for an example - XML too long to paste below]</p></blockquote>
<h1><span id="more-106"></span>Country Flag</h1>
<p>Paste the following code into your HTML to get a country  flag of the ip address. The database is significantly more accurate (it ought to  be 100%) for countries than for cities. It would be nice if y&#8217;all would make the  flag a link to the www.hostip.info home page (http://www.hostip.info/) so they  can come by if they&#8217;re interested &#8211; it&#8217;ll only benefit you in the long run.  After all, the results get more accurate as more visitors submit their IP  addresses!<br />
Flag of visitor&#8217;s location:</p>
<blockquote><p><strong>&lt;A HREF=&#8221;http://www.hostip.info&#8221;&gt;<br />
&lt;IMG SRC=&#8221;http://api.hostip.info/flag.php&#8221; BORDER=&#8221;0&#8243; ALT=&#8221;IP Address Lookup&#8221;&gt;<br />
&lt;/A&gt;</strong></p></blockquote>
<p>Flag of any IP address:</p>
<blockquote><p><strong>&lt;A HREF=&#8221;http://www.hostip.info&#8221;&gt;<br />
&lt;IMG SRC=&#8221;http://api.hostip.info/flag.php?ip=12.215.42.19&#8243; ALT=&#8221;IP Address Lookup&#8221;&gt;<br />
&lt;/A&gt;</strong></p></blockquote>
<h1>Embedded Applet</h1>
<p>The following is designed to be embedded within another HTML page using the OBJECT tag. This will reproduce the zoom-in applet, (or an explanatory message with a link to fix, if the IP address lookup is unknown). Which means you can embed the applet in your own site without needing to have the local database and map data (which runs to a few gigabytes&#8230;)</p>
<p>All you need do is include the OBJECT block below in your HTML.  Note, you can also add &#8220;?ip=aaa.bbb.ccc.ddd&#8221; to the frame.html url below to map a specific IP address.</p>
<blockquote>
<pre>&lt;OBJECT DATA='http://www.hostip.info/map/frame.html'

  TYPE='text/html' BORDER=0

  WIDTH=610 HEIGHT=330 HSPACE=0 VSPACE=0&gt;

&lt;/OBJECT&gt;</pre>
</blockquote>
<h1>*NIX Shell Script</h1>
<p>You can use the following shell script to call in your  favorite *NIX environment.</p>
<blockquote><p><strong>#!/bin/bash<br />
lynx -dump &#8220;http://api.hostip.info/get_html.php?ip=$1&#8243;</strong></p></blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/10/22/ip-address-lookup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Samsung Star &#8211; Admin Code &amp; Configuration (Tested on GT-S5233S)</title>
		<link>http://blog.nataprawira.com/tech/2009/08/21/samsung-star-admin-code-configuration-tested-on-gt-s5233s/</link>
		<comments>http://blog.nataprawira.com/tech/2009/08/21/samsung-star-admin-code-configuration-tested-on-gt-s5233s/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 17:03:54 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Samsung]]></category>
		<category><![CDATA[GT-S5233S]]></category>
		<category><![CDATA[Star]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=93</guid>
		<description><![CDATA[

Source: http://www.kaskus.us/showpost.php?p=103189003&#38;postcount=548
Silahkan disimak..


Quote:




Originally Posted by Abu Zahri 
Bedanya Apa Ya antara star 5230, 5233A dan 5233S ?
Bukannya hanya perbedaan penamaan aja..?
5230 untuk pasar amerika, eropa,
5233A untuk pasar Asia
5233S untuk pasar mana lagi..?
CMIIW




Saya ga bisa memastikan jawaban untuk pertanyaan yang diajukan.. Mungkin yang S5233S itu untuk kawasan Asia Tenggara.. Tapi, kita bisa melihat dari firmware yang [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F21%2Fsamsung-star-admin-code-configuration-tested-on-gt-s5233s%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F21%2Fsamsung-star-admin-code-configuration-tested-on-gt-s5233s%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div id="post_message_103189003"><em><strong>Source: <a href="http://www.kaskus.us/showpost.php?p=103189003&amp;postcount=548">http://www.kaskus.us/showpost.php?p=103189003&amp;postcount=548</a></strong></em></div>
<div>Silahkan disimak..</div>
<div id="post_message_103189003">
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">
<div>Originally Posted by <strong>Abu Zahri</strong> <a rel="nofollow" href="http://www.kaskus.us/showthread.php?p=103014916#post103014916"><img src="http://www.kaskus.us/images/buttons/viewpost.gif" border="0" alt="View Post" /></a></div>
<div style="font-style: italic"><span style="color: magenta">Bedanya Apa Ya antara star 5230, 5233A dan 5233S ?</span></div>
<p>Bukannya hanya perbedaan penamaan aja..?</p>
<p>5230 untuk pasar amerika, eropa,</p>
<p>5233A untuk pasar Asia</p>
<p>5233S untuk pasar mana lagi..?</p>
<p>CMIIW</td>
</tr>
</tbody>
</table>
</div>
<p><span id="more-93"></span>Saya ga bisa memastikan jawaban untuk pertanyaan yang diajukan.. Mungkin yang S5233S itu untuk kawasan <strong>Asia Tenggara</strong>.. Tapi, kita bisa melihat dari firmware yang ada pada Samsung Star kita..</p>
<p>Berikut akan saya lampirkan arti dari kode yang terdapat dalam firmware Samsung itu sendiri..</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>Arti Dari Kode Firmware Samsung</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div><strong>Contoh</strong> : firmware &#8216;<strong><span style="color: darkorchid"><span style="font-size: x-small">S5233SDXIE5</span></span></strong>&#8216;..</div>
<p>1.) <strong><span style="color: darkred">S5233S</span></strong> = <strong>Model / Tipe HP</strong>.. (Bisa juga menandakan kawasan pemasaran penjualan HP tersebut, ex. <strong>S5230</strong>, <strong>S5233</strong>, <strong>S5233A</strong>, <strong>S5233S</strong>.. <strong><span style="color: red">Sumber</span></strong> : <a href="http://share4gsm.com/index.php?strona=files&amp;act=/Samsung" target="_blank"><span style="color: blue"><span style="font-size: small"><strong>SINI</strong></span></span></a>.. Ada 4 tipe yang berbeda untuk sebutan Samsung Star.. Dan sebenarnya kita bisa mendapatkan juga versi firmware dari yang <strong>lama</strong> sampai yang <strong>baru</strong>, cuman sangat disayangkan <strong>harus bayar</strong>.. Ada versi firmware untuk <strong>S5233S</strong> juga.. )</p>
<p>2.) <strong><span style="color: darkred">DX</span></strong> = <strong>Kode Area Wilayah</strong>.. (Meliputi : <strong>Africa</strong> | <strong>Asia</strong> | <strong>Eropa</strong>)</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>Africa | Asia | Eropa</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div><span style="color: black"><span style="text-decoration: underline"><strong>Kode Area Wilayah</strong></span></span> :</div>
<p><strong>BD</strong> = Cyprus &amp; Greece.</p>
<p><strong>BH</strong> = Central European.</p>
<p><strong>CP</strong> = Finland.</p>
<p><strong>DB</strong> = Vietnam.</p>
<p><strong>DC</strong> = Thailand.</p>
<p><strong>DD</strong> = India.</p>
<p><strong>DT</strong> = Australia.</p>
<p><strong>DX</strong> = Indonesia ; Malaysia ; Philippines ; Singapore ; Thailand ; Vietnam.</p>
<p><strong>DZ</strong> = Malaysia ; Singapore.</p>
<p><strong>JA</strong> = South Africa.</p>
<p><strong>JC</strong> = Algeria ; Morocco ; Nigeria ; South Africa ; Tunisia.</p>
<p><strong>JP</strong> = Algeria ; Egypt ; Iran ; Iraq ; Kuwait ; Morocco ; Nigeria ; Oman ; Pakistan ; Saudi Arabia ; South Africa ; Syria ; Tunisia ; Turkey.</p>
<p><strong>JR</strong> = Saudi Arabia.</p>
<p><strong>JV</strong> = Algeria ; Egypt ; Iran ; Iraq ; Kuwait ; Morocco ; Nigeria ; Oman ; Pakistan ; Saudi Arabia ; South Africa ; Syria ; Tunisia ; Turkey.</p>
<p><strong>MT</strong> = Switzerland.</p>
<p><strong>XA</strong> = Austria ; France ; Germany ; Italy ; Netherlands ; Switzerland ; United Kingdom.</p>
<p><strong>XB</strong> = Denmark ; Norway ; Sweden.</p>
<p><strong>XC</strong> = Portugal ; Spain.</p>
<p><strong>XD</strong> = Croatia, Czech, Hungary, Slovakia.</p>
<p><strong>XE</strong> = Bulgaria ; Estonia ; Kazakhstan ; Latvia ; Lithuania ; Russia ; Ukraine ; Germany.</p>
<p><strong>XF</strong> = Bulgaria ; Croatia ; Romania.</p>
<p><strong>XG</strong> = Germany.</p>
<p><strong>XX</strong> = Austria ; Belgium ; France ; Germany ; Hungary ; Italy ; Spain ; United Kingdom.</p>
<p><strong>ZC</strong> = China ; Hong Kong.</p>
<p><strong>ZH</strong> = Hong Kong.</p>
<p><strong>ZT</strong> = Taiwan.</div>
</div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset"><strong><span style="color: red">NB</span></strong> : Perbedaan yang mendasar dari kode area wilayah adalah <strong>paket bahasa</strong> yang tersedia dalam HP itu sendiri.. Antara 1 kode area wilayah dengan yang lain belum tentu sama..</td>
</tr>
</tbody>
</table>
</div>
<p>3.) <strong><span style="color: darkred">I</span></strong> = <strong>Tahun</strong>..</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>Tahun</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div><span style="color: black"><span style="text-decoration: underline"><strong>Kode Tahun</strong></span></span> :</div>
<p><strong>A</strong> = 2001.</p>
<p><strong>B</strong> = 2002.</p>
<p><strong>C</strong> = 2003.</p>
<p><strong>D</strong> = 2004.</p>
<p><strong>E</strong> = 2005.</p>
<p><strong>F</strong> = 2006.</p>
<p><strong>G</strong> = 2007.</p>
<p><strong>H</strong> = 2008.</p>
<p><strong>I</strong> = 2009.</p>
<p><strong>J</strong> = 2010.</div>
</div>
<p>4.) <strong><span style="color: darkred">E</span></strong> = <strong>Bulan</strong>..</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>Bulan</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div><span style="color: black"><span style="text-decoration: underline"><strong>Kode Bulan</strong></span></span> :</div>
<p><strong>A</strong> = January.</p>
<p><strong>B</strong> = February.</p>
<p><strong>C</strong> = March.</p>
<p><strong>D</strong> = April.</p>
<p><strong>E</strong> = May.</p>
<p><strong>F</strong> = June.</p>
<p><strong>G</strong> = July.</p>
<p><strong>H</strong> = August.</p>
<p><strong>I</strong> = September.</p>
<p><strong>J</strong> = October.</p>
<p><strong>K</strong> = November.</p>
<p><strong>L</strong> = December.</div>
</div>
<p>5.) <strong><span style="color: darkred">5</span></strong> = <strong>Revisi / Perbaikan</strong>.. (Biasanya setiap bulan ada beberapa kali &#8220;<strong>revisi / perbaikan</strong>&#8221; untuk perbaikan kecil dari bug firmware dengan <strong>versi</strong> yang <strong>sama</strong> dalam 1 bulan tersebut)</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">Dimulai dari angka 1.. Semakin besar angka tersebut, maka versi firmware tersebut akan semakin baru.. (Bulan yang sama)</td>
</tr>
</tbody>
</table>
</div>
<p>6.) Ada kalanya dalam sebuah versi firmware dari beberapa HP Samsung, ada sebuah <strong>huruf</strong> yang berada di <strong>depan kode area wilayah</strong>.. Berikut ini merupakan sedikit penjelasan yang bersangkutan..</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">Ex. <span style="color: darkorchid"><strong><span style="font-size: x-small">S830<span style="font-size: small"><span style="color: darkorchid"><strong>N</strong></span></span>XXIC1</span></strong></span>Arti dari versi firmware tersebut, yaitu :</p>
<p><strong>S830</strong> = Samsung S8300.</p>
<p><strong>N</strong> = Navigation Edition. (Usually includes Route66)</p>
<p><strong>F</strong> = Pink Edition. (Firmware is the color of the device adapted, usually an extra theme and some other little goodies)</p>
<p><strong>G</strong> = Gray Edition. (includes mostly no significant changes)</p>
<p><strong>K</strong> = ?.</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<p><strong><span style="color: red">Sumber</span></strong> : <span style="color: blue"><strong><span style="font-size: small"><a href="http://darkforestgroup.com/forum/index.php?topic=14.0" target="_blank">1</a></span></strong></span> | <strong><span style="color: blue"><span style="font-size: small"><a href="http://translate.google.com/translate?js=y&amp;prev=_t&amp;hl=en&amp;ie=UTF-8&amp;u=http://www.mobilfunk-faq.info/samsung-tipps-tricks/19134-howto-erklaerung-der-firmwarecodes-bei-samsung.html&amp;sl=auto&amp;tl=en&amp;history_state0=" target="_blank">2</a></span></span></strong></p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">
<div>Originally Posted by <strong>KenDoank</strong> <a rel="nofollow" href="http://www.kaskus.us/showthread.php?p=102871907#post102871907"><img src="http://www.kaskus.us/images/buttons/viewpost.gif" border="0" alt="View Post" /></a></div>
<div style="font-style: italic">agan agan sekalian numpang tanya dunk&#8230;</p>
<p>gw kan abis download aplikasi bolt.jar sama ebuddy.jar n dah gw transfer ke hpnya, nah pas mw diinstall itu kuar tulisan content not signed n akhirnya ga bisa keinstall deh&#8230;, itu gara&#8221; apa yah ??</p></div>
</td>
</tr>
</tbody>
</table>
</div>
<p>Saya langsung saja memberikan <strong>beberapa cara</strong> yang berkaitan dengan <strong>JAVA</strong>..</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>JAVA</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div><strong>Cara 1</strong> : <a href="http://darkforestgroup.com/blog/?p=130" target="_blank"><span style="color: blue"><strong><span style="font-size: small">A</span></strong></span></a> | <a href="http://darkforestgroup.com/forum/index.php?topic=76.0" target="_blank"><strong><span style="color: blue"><span style="font-size: small">B</span></span></strong></a> | <strong><span style="color: blue"><span style="font-size: small"><a href="http://darkforestgroup.com/forum/index.php?topic=424.0" target="_blank">C</a></span></span></strong>.. Harap 1 halaman tersebut dibaca sampai selesai, biar jelas..</p>
<p><strong>Cara 2</strong> :</div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">- Download via wap (<a href="http://m.getjar.com/" target="_blank">http://m.getjar.com</a>) application LITE FTP (<strong>Bluetooth File Transfer LITE</strong>) to your S5230 / S5233. Bagi yang mau via <strong>PC</strong>, silahkan ke<a href="http://www.getjar.com/products/25405/BluetoothFileTransferLITE" target="_blank"><strong><span style="color: blue"><span style="font-size: small">SINI</span></span></strong></a>..</p>
<p>- Browse down and you will see &#8220;<strong>Quick Download</strong>&#8220;.</p>
<p>- Click it. Then enter quick download code as <strong>51799</strong>.</p>
<p>- Download and install it. Exit from browse.</p>
<p>- Open <strong>Samsung PC studio</strong>.</p>
<p>- Browse to memory card.</p>
<p>- Create new folder for game.</p>
<p>- Copy-paste .jad and .jar to that folder.</p>
<p>- Kalo ga ada file <strong>.jad</strong>.. Coba dibuat memakai <strong>JADMaker</strong>.. Silahkan berkunjung ke<strong><span style="color: blue"><span style="font-size: small"><a href="http://www.4shared.com/file/96027662/76ab7da5/JADmaker.html" target="_blank">SINI</a></span></span></strong>..</p>
<p>- Close PC studio.</p>
<p>- Disconect usb.</p>
<p>- Open LITE FTP on your phone.</p>
<p>- Browse to memory card and find your game in folder you created earlier.</p>
<p>- Copy that folder.</p>
<p>- Browse to filesystem of your phone.</p>
<p>- Its empty, because files are hidden.</p>
<p>- Paste game here.</p>
<p>- Exit from FTP lite.</p>
<p>- *#6984125*# (Admin Setting)</p>
<p>- Pilih No. 4. Internals.</p>
<p>- *#9072641*#</p>
<p>- Storage settings</p>
<p>- Update media database</p>
<p>- Update Java DB</p>
<p>- Create AX Dat File</p>
<p>- Exit</p>
<p>- Open your GAMES folder.Rename yor folder game as you wish.</p>
<p>- AND PLAY.<strong><span style="color: red">Sumber</span></strong> : <strong><span style="color: blue"><span style="font-size: small"><a href="http://www.gsmarena.com/samsung_s5230_star-reviews-2739p5.php" target="_blank">SINI</a></span></span></strong>..</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p><strong>Tip&#8217;s &amp; Trick</strong> yang ada untuk Samsung S5233S, yaitu :</p>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset"><a href="http://darkforestgroup.com/forum/index.php?topic=195.0" target="_blank"><strong><span style="color: blue"><span style="font-size: small">HOW TO : Increasing Sound of Speaker (Calls &amp; MP3)</span></span></strong></a>..<strong><span style="color: red">NB</span></strong> : Silahkan dicoba terlebih dahulu..</td>
</tr>
</tbody>
</table>
</div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>Factory Code for Samsung</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset"><strong><span style="color: indigo"><span style="text-decoration: underline">Some basic Factory Code for Samsung</span></span></strong> :</p>
<p>Admin Setting : <strong>*#6984125*#</strong></p>
<p>No. 2. Pre-configuration &#8211; Operator Code : <strong>*#73561*#</strong></p>
<p>No. 4. Internals &#8211; Master Code : <strong>*#9072641*#</strong> (Use at your own risk, don&#8217;t simply change)Check IMEI : <strong>*#06#</strong></p>
<p>Check SW Version : <strong>*#1234#</strong></p>
<p>Check FTA SW Version : <strong>*#1111#</strong></p>
<p>Check FTA HW Version : <strong>*#2222#</strong></p>
<p>Check SW|Tune|HW-Version, RF Cal Date &amp; D/L Date : <strong>*#0206*8376263#</strong></p>
<p>Check Battery Status : <strong>*#0228#</strong></p>
<p>Check Bluetooth Device Address : <strong>*#232337#</strong> (Need to power off once access this)</p>
<p>Test Mode : <strong>*#0*#</strong></p>
<p>HSDPA|3G|EDGE|GPRS Power On Attach : <strong>*#4777*8665#</strong></p>
<p>Factory / Hard Reset : <strong>*2767*3855#</strong> (All data &amp; setting in phone erase &amp; reset to factory default automatically without warning)</p>
<p>This code has something to do with phone locking : <strong>*#7465625#</strong></p>
<p>This code <strong>*#0002*28346#</strong> has</p>
<p>[1] Debug Screen</p>
<p>[2] Version Information</p>
<p>[3] RF test</p>
<p>[4] UMTS rf nv</p>
<p>[5] Read gsm rf nv</p>
<p>[6] Write gsm rf nv</p>
<p>[7] Base Band</p>
<p>[8] Audio</p>
<p>[9] Common</td>
</tr>
</tbody>
</table>
</div>
<p><strong><span style="color: red">Sumber</span></strong> : <span style="color: blue"><strong><span style="font-size: small"><a href="http://darkforestgroup.com/forum/index.php?topic=187.0" target="_blank">SINI</a></span></strong></span>..</div>
</div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px"><strong>Spoiler</strong> for <em>EDGE Icon</em>:</div>
<div style="border: 1px inset;margin: 0px;padding: 6px">
<div>Bagi yang mengalami masalah / keluhan dengan lambang &#8220;<strong>EDGE</strong>&#8221; yang selalu muncul ketika <strong>selesai upgrade firmware</strong> ke versi [<strong><span style="color: sienna">S5230XEIG2</span></strong>], bisa mengikuti <strong>tip&#8217;s</strong> berikut ini untuk mengatasinya..</div>
<div style="margin: 5px 20px 20px">
<div style="margin-bottom: 2px">Quote:</div>
<table border="0" cellspacing="0" cellpadding="6" width="100%">
<tbody>
<tr>
<td style="border: 1px inset">- Buka keypad &amp; ketik di keypad : <strong>*#4777*8665#</strong></p>
<p>- Hilangkan tanda &#8216;<strong>contreng</strong>&#8216; pada pilihan &#8220;<strong>Power On Attach</strong>&#8220;..</p>
<p>- Restart HP Anda &amp; tanda (E) &#8220;<strong>EDGE</strong>&#8221; Icon akan hilang..<strong><span style="color: red">NB</span></strong> : Apabila Anda mengikuti cara ini, maka tanda (E) &#8220;<strong>EDGE</strong>&#8221; Icon hanya akan muncul pada waktu Anda memerlukannya..</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<p>Selamat mencoba..</p>
<p>Trim&#8217;s..</p>
<p>*<strong>MeTaNoIa</strong>*</p>
<p><!-- / message --><!-- edit note --></p>
<div>
<hr size="1" /><em>Last edited by Meta_noia; 02-08-2009 at <span>12:11 AM</span>.. Reason: Info Tambahan !!! </em></div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/08/21/samsung-star-admin-code-configuration-tested-on-gt-s5233s/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to manually install DKIM-Filter with Sendmail</title>
		<link>http://blog.nataprawira.com/tech/2009/08/15/how-to-manually-install-dkim-filter-with-sendmail/</link>
		<comments>http://blog.nataprawira.com/tech/2009/08/15/how-to-manually-install-dkim-filter-with-sendmail/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 19:32:32 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sendmail]]></category>
		<category><![CDATA[DKIM]]></category>
		<category><![CDATA[Filter]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=89</guid>
		<description><![CDATA[

Source: [click here]

Max 30 mins work.

However, life is rarely so simple.
yum search dkim didn't find anything.

So, based on what I could find, I ended up here. Downloaded dkim-filter
2.4.1 and went on an epic voyage of discovery into the RFCs and other stuff.
I just want to install, configure and run the thing!

Anyway. I thought compilation would [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F15%2Fhow-to-manually-install-dkim-filter-with-sendmail%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F15%2Fhow-to-manually-install-dkim-filter-with-sendmail%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<pre>Source: [<a href="http://www.mail-archive.com/dkim-milter-discuss@lists.sourceforge.net/msg00535.html" target="_blank">click here</a>]

Max 30 mins work.

However, life is rarely so simple.
yum search dkim didn't find anything.

So, based on what I could find, I ended up here. Downloaded dkim-filter
2.4.1 and went on an epic voyage of discovery into the RFCs and other stuff.
I just want to install, configure and run the thing!
<span id="more-89"></span>
Anyway. I thought compilation would be straightforward, but no. More
unfamiliar stuff to read. I dutifully read the site.config.m4.dist, copied
to devtools/Site/site.config.m4 and hoped to make some intelligent decisions
on what options to enable.

 # ./Build
...
&gt;Making all in:
&gt;/etc/mail/dkim/dkim-milter-2.4.1/dkim-filter
&gt;Configuration: pfx=, os=Linux, rel=2.6.23.1-10.fc7, rbase=2,
&gt;rroot=2.6.23.1-10, arch=x86_64, sfx=, variant=optimized
&gt;Using M4=/usr/bin/m4
&gt;Creating
&gt;/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter
&gt;using /etc/mail/dkim/dkim-milter-2.4.1/devtools/OS/Linux
&gt;Making dependencies in
&gt;/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter
&gt;make[1]: Entering directory
&gt;`/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter'
&gt;rm -f sm_os.h
&gt;ln -f -s ../../include/sm/os/sm_os_linux.h sm_os.h
&gt;cc -M -I. -I../../include  -I../libdkim/   -D_REENTRANT config.c dkim-ar.c
&gt;dkim-filter.c stats.c test.c util.c   dkim-testkey.c   dkim-testssp.c    &gt;&gt;
&gt;Makefile
&gt;In file included from config.h:23,
&gt;                 from config.c:20:
&gt;dkim-filter.h:22:29: error: libmilter/mfapi.h: No such file or directory
&gt;In file included from dkim-ar.h:19,
&gt;                 from dkim-ar.c:23:
&gt;dkim-filter.h:22:29: error: libmilter/mfapi.h: No such file or directory
&gt;dkim-filter.c:59:29: error: libmilter/mfapi.h: No such file or directory
&gt;In file included from config.h:23,
&gt;                 from dkim-filter.c:78:
&gt;dkim-filter.h:22:29: error: libmilter/mfapi.h: No such file or directory
&gt;In file included from test.c:31:
&gt;test.h:24:29: error: libmilter/mfapi.h: No such file or directory
&gt;In file included from util.c:49:
&gt;dkim-filter.h:22:29: error: libmilter/mfapi.h: No such file or directory
&gt;make[1]: *** [depend] Error 1
&gt;make[1]: Leaving directory
&gt;`/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter'
&gt;Making in
&gt;/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter
&gt;make[1]: Entering directory
&gt;`/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter'
&gt;cc -O2 -I. -I../../include  -I../libdkim/   -D_REENTRANT -DXP_MT   -c -o
&gt;config.o config.c
&gt;In file included from config.h:23,
&gt;                 from config.c:20:
&gt;dkim-filter.h:22:29: error: libmilter/mfapi.h: No such file or directory
&gt;In file included from config.h:23,
&gt;                 from config.c:20:
&gt;dkim-filter.h:86: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_connect’
&gt;dkim-filter.h:87: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_envfrom’
&gt;dkim-filter.h:88: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_header’
&gt;dkim-filter.h:89: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_eoh’
&gt;dkim-filter.h:90: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_body’
&gt;dkim-filter.h:91: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_eom’
&gt;dkim-filter.h:92: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_abort’
&gt;dkim-filter.h:93: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’
&gt;before ‘mlfi_close’
&gt;make[1]: *** [config.o] Error 1
&gt;make[1]: Leaving directory
&gt;`/etc/mail/dkim/dkim-milter-2.4.1/obj.Linux.2.6.23.1-10.fc7.x86_64/dkim-filter'
&gt;make: *** [all] Error 2

After some googling, a "yum install sendmail-devel" fixed this problem, and
a ./Build -c completed successfully.
I copied /devtools/OS/Linux to /devtools/Site/site.Linux.m4

./Build install was successful after manually creating dirs /usr/man/man15
and /usr/man/man18
Fedora manuals are in /usr/share/man
The files /usr/bin/dk* should have ownership root:root instead of bin.

Sendmail of Fedora 7 is currently 8.14.1:
# sendmail -d0.1
Version 8.14.1
Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
 MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
 NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
 TCPWRAPPERS USERDB USE_LDAP_INIT

I created the keys, updated the dns zone files and decided to use user smmsp
instead of creating yet another user.

I created:
/var/db/dkim :
-rw-r----- 1 smmsp smmsp 887 2008-01-01 08:30 jan2008.admin.key.pem
-rw-r--r-- 1 smmsp smmsp 272 2008-01-01 08:30 jan2008.admin.public.pem

/var/run :
drwxr-xr-x 2 smmsp   smmsp   4096 2008-01-04 09:23 milter

and created this basic start/stop init script:
/etc/init.d/dkim-filter
then:
chkconfig --add dkim-filter
chkconfig dkim-filter on

contents:
&gt;#
&gt;# dkim-filter        Starts /usr/bin/dkim-filter
&gt;#
&gt;# chkconfig: 2345 67 33
&gt;#
&gt;# description: Domain Keys Milter
&gt;# processname: dkim-filter
&gt;#
&gt;# Source function library.
&gt;. /etc/init.d/functions
&gt;
&gt;[ -f /usr/bin/dkim-filter ] || exit 0
&gt;RETVAL=0
&gt;
&gt;umask 077
&gt;
&gt;start() {
&gt;        echo -n $"Starting dkim-filter: "
&gt;        /usr/bin/dkim-filter -x /etc/mail/dkim.conf
&gt;        RETVAL=$?
&gt;        if [ $RETVAL -eq 0 ]
&gt;        then
&gt;                echo_success
&gt;                touch /var/lock/subsys/dkim-filter
&gt;        else
&gt;                echo_failure
&gt;        fi
&gt;        echo
&gt;}
&gt;stop() {
&gt;        echo -n $"Shutting down dkim-filter: "
&gt;        /bin/kill `cat /var/run/milter/dkim-filter.pid 2&gt; /dev/null ` &gt;
&gt; /dev/null 2&gt;&amp;1
&gt;        RETVAL=$?
&gt;        sleep 3
&gt;        if [ $RETVAL -eq 0 ]
&gt;        then
&gt;                echo_success
&gt;                rm -f /var/lock/subsys/dkim-filter
&gt;                rm -f /var/run/milter/dkim-filter.pid
&gt;        else
&gt;                echo_failure
&gt;        fi
&gt;        echo
&gt;}
&gt;rhstatus() {
&gt;        status dkim-filter
&gt;}
&gt;restart() {
&gt;        stop
&gt;        start
&gt;}
&gt;
&gt;case "$1" in
&gt;  start)
&gt;        start
&gt;        ;;
&gt;  stop)
&gt;        stop
&gt;        ;;
&gt;  status)
&gt;        rhstatus
&gt;        ;;
&gt;  restart|reload)
&gt;        restart
&gt;        ;;
&gt;  condrestart)
&gt;        [ -f /var/lock/subsys/dkim-filter ] &amp;&amp; restart || :
&gt;        ;;
&gt;  *)
&gt;        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
&gt;        exit 1
&gt;esac
&gt;
&gt;exit $?

Now for configuration files:

/etc/mail/dkim.conf :
Canonicalization        relaxed/simple
Domain                  /etc/mail/domains
KeyFile                 /var/db/dkim/jan2008.admin.key.pem
#MTA                    MTA
Selector                jan2008.admin
SignatureAlgorithm      rsa-sha256
Socket                  inet:[EMAIL PROTECTED]
#Socket                 /var/run/milter/dkim-filter.sock
Syslog                  Yes
SyslogSuccess           Yes
Userid                  smmsp
PidFile                 /var/run/milter/dkim-filter.pid
SubDomains              Yes
X-Header                No
SendReports             No

/etc/mail/domains contains just one domain on one line.

and added to sendmail.rc:
INPUT_MAIL_FILTER(`dkim-filter', `S=inet:[EMAIL PROTECTED]')

I started the script with
/etc/init.d/dkim-filter start
and it worked, eg:
&gt;Jan  4 10:58:10 gaia dkim-filter[6033]: Sendmail DKIM Filter v2.4.1 starting
&gt;(args: -x /etc/mail/dkim.conf)

It even adds signatures to my messages (hopefully to this one), but silently
crashes regularly without any indication on processing a simple locally
generated mail from a perl script and/or/exor from logwatch or virus
notification from MailScanner. eg:

DKIMDEBUG=ct :
&gt;Jan  3 02:57:18 gaia sendmail[12260]: m031vIL6012260: from=&lt;[EMAIL
&gt;PROTECTED]&gt;, size=1780,, nrcpts=1, msgid=&lt;[EMAIL PROTECTED]&gt;,
&gt;proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
&gt;Jan  3 02:57:18 gaia dkim-filter[6926]: thread 0x41e02950 header
&gt;Jan  3 02:57:18 gaia last message repeated 6 times
&gt;Jan  3 02:57:18 gaia dkim-filter[6926]: thread 0x41e02950 eoh
&gt;Jan  3 02:57:18 gaia sendmail[12260]: m031vIL6012260:
&gt;milter_sys_read(dkim-filter): cmd read returned 0, expecting 5
&gt;Jan  3 02:57:18 gaia sendmail[12260]: m031vIL6012260: Milter (dkim-filter): to
&gt;error state
&gt;Jan  3 02:57:18 gaia sendmail[12260]: m031vIL6012260: to=&lt;[EMAIL PROTECTED]&gt;,
&gt;delay=00:00:00, mailer=esmtp, pri=31780, stat=queued

I have spent the last couple of days trying to solve this
The only relevant information I found was Jim Hermann's useful message and
thread last month
<a rel="nofollow" href="http://www.mail-archive.com/dkim-milter-discuss@lists.sourceforge.net/msg00409.html">http://www.mail-archive.com/dkim-milter-discuss@lists.sourceforge.net/msg00409.html</a>

I'm disappointed, disillusioned and frustrated in trying to nail jelly to a
wall... This doesn't say anything useful at all!
&gt;milter_sys_read(dkim-filter): cmd read returned 0, expecting 5

It only seems to happen by locally generated mail, sometimes it even seemed
as if having a Reply-To: field influenced its crash frequency, but without
real diagnostic tools, skills and a lot of time, I can't solve it. I'm an
experienced sysadmin, not a C programmer! Programmers should try to make all
our lives easier! <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 

I want to get this working reliably and dependably on a few production
systems, and know what options to compile with and what settings to use for
Fedora, but I'm now stumped.

When it does work, another gripe is this padding too short error, which may
or may not be a reason for the verification failure:
&gt;Jan  4 08:14:35 gaia dkim-filter[8389]: m047EY6O010080 SSL error:04067069:rsa
&gt;routines:RSA_EAY_PUBLIC_DECRYPT:pkcs1 padding too short; error:04077068:rsa
&gt;routines:RSA_verify:bad signature
&gt;Jan  4 08:14:35 gaia dkim-filter[8389]: m047EY6O010080: bad signature data
&gt;Jan  4 08:14:35 gaia sendmail[10080]: m047EY6O010080: Milter insert (1):
&gt;header: Authentication-Results:  gaia.haveland.com; dkim=neutral (verification
&gt;failed) [EMAIL PROTECTED]

How can a gmail signature fail verification? What did it fail on? What is
the "i" in  "header.i" ?
It was a mysql mailing list, so perhaps other headers got in the way, but
this isn't what I would call a robust solution! Omitheaders command in
dkim.conf seems to be a blanket fudge.

If we are to stand a chance of defeating spammers, then we have to make DKIM
easier to install and configure so mere mortals can install and use it, and
encourage adoption.  I'm sure many would like to see dkim-filter available
in rpm for various distros.

However, Network Solutions, amongst others need to wake up and allow people
to modify their DNS TXT attributes... Here's what their completely
ridiculous FAQ says on the subject:
<a rel="nofollow" href="http://customersupport.networksolutions.com/article.php?id=369">http://customersupport.networksolutions.com/article.php?id=369</a>

&gt;"Can I Make Changes To The TXT Record
&gt;
&gt; Network Solutions does not currently support changes to the
&gt; TXT record for a domain name registration.
&gt;
&gt; The TXT Record is strictly informational, not functional."

What planet are they living on?

Cheers,
Andy.</pre>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/08/15/how-to-manually-install-dkim-filter-with-sendmail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Hotmail Delivery Tips for Sender ID and SPF</title>
		<link>http://blog.nataprawira.com/tech/2009/08/11/hotmail-delivery-tips-for-sender-id-and-spf/</link>
		<comments>http://blog.nataprawira.com/tech/2009/08/11/hotmail-delivery-tips-for-sender-id-and-spf/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 18:12:55 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Notes]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=86</guid>
		<description><![CDATA[



Original Post: http://www.clickz.com/3627253
By Stefan Pollard, ClickZ, Oct 10, 2007


With authentication quickly gaining acceptance among both e-mail receivers, like ISPs, and senders, like marketers and publishers, now&#8217;s a good time to examine how changes at Hotmail might affect your use of Sender ID and SPF records.
Authentication is the process by which you identify yourself to an e-mail [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F11%2Fhotmail-delivery-tips-for-sender-id-and-spf%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F08%2F11%2Fhotmail-delivery-tips-for-sender-id-and-spf%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div id="article_header">
<div id="article_details" style="width: 620px">
<p>Original Post: <a href="http://www.clickz.com/3627253" target="_blank">http://www.clickz.com/3627253</a></p>
<p>By <a href="/3622928">Stefan Pollard</a>, ClickZ, <span>Oct 10, 2007</span></p>
<p><!--   OAS AD 'Position3' begin   --><a href="http://oasc05024.247realmedia.com/RealMedia/ads/click_lx.ads/clickz.com/experts/em_mkt/email_delivery/L40/1972851120/Position3/Incisive/Goodmail_EMD_text_July09/Goodmail_EMD_text.html/6661484f62307141594c5141436e486c?" target="_top"></a><!--   OAS AD 'Position3' end   --></div>
</div>
<p>With authentication quickly gaining acceptance among both e-mail receivers, like ISPs, and senders, like marketers and publishers, now&#8217;s a good time to examine how changes at Hotmail might affect your use of <a href="http://www.clickz.com/3482506">Sender ID</a> and <a href="http://clickz.com/3465711">SPF</a> records.<span id="more-86"></span></p>
<p>Authentication is the process by which you identify yourself to an e-mail receiver, such as an ISP, and verify which IP addresses are allowed to send e-mail from your domains. You can do this multiple ways, but I&#8217;ll focus here on how to make it easier for an ISP to look up your authentication record and to improve your chances of being properly identified as a legitimate sender. In fact, last week, Yahoo and eBay <a href="http://clickz.com/3627236">announced a partnership</a> to use e-mail authentication measures to block phishing (define) attempts.</p>
<p>You may think: &#8220;Why do I need to know this geek stuff? That&#8217;s my IT department&#8217;s issue, not mine.&#8221; It&#8217;s like comprehending what goes on under your car&#8217;s hood. You can drive without knowing the sparkplug-firing pattern or the piston-compression rate, but when something goes wrong, you can help your mechanic find the problem faster if you have a clue about where to look first.</p>
<p>Same thing goes for e-mail authentication. If an increasing number of messages are blocked by an ISP, check your authentication records before tearing down your entire program.</p>
<p>Today, I&#8217;ll outline how Hotmail implements Sender ID and SPF, because this e-mail service has made a high-profile effort to help senders understand what it looks for and what it checks when authenticating a sender. Knowing this information might help you deliver more e-mail messages to Hotmail addresses, which is important for consumer marketers.</p>
<p><strong>Sender ID vs. SPF: What&#8217;s the Difference?</strong></p>
<p>These two methods, called protocols, are almost identical in syntax. They differ in how the receiver domain looks up your authentication record, which is a line of code inserted in your DNS (<a href="http://www.webopedia.com/TERM/D/DNS.html" target="_new">define</a>) record that appears in your e-mail message headers.</p>
<p>SPF checks are performed against the domain from the envelope&#8217;s return-path address, typically called the bounce address. Sender ID checks are performed against the purported responsible address (PRA), that is, the visible sender address in the message.</p>
<p>Let&#8217;s say the domains in those addresses are the same. Then you as the sender can pass a Sender ID check with only an SPF record. If the domains are different, you should create both records and place them in the corresponding domains.</p>
<p>When in doubt, place your SPF record in all domains you have control over. This increases the chance the record will be placed where the receiver is checking. That&#8217;s what I mean by making it easy for your receiver.</p>
<p>Here&#8217;s a shorthand way to see the difference:</p>
<p><a title="table" name="table"></a></p>
<table border="0" cellspacing="1" cellpadding="3" width="420" bgcolor="#5a739c">
<tbody>
<tr bgcolor="#ffe084">
<th align="center" valign="top"><span style="color: #000000;font-size: x-small"> </span></th>
<th align="center" valign="top"><span style="color: #000000;font-size: x-small">Sender ID</span></th>
<th align="center" valign="top"><span style="color: #000000;font-size: x-small">SPF</span></th>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">Address checked</span></td>
<td align="center" valign="top"><span style="font-size: x-small">PRA</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Envelope domain (return-path address)</span></td>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">Where check&#8217;s made</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Visible message-body header in sender line</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Root and subdomains</span></td>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">Example</span></td>
<td align="center" valign="top"><span style="font-size: x-small">example.com (as in firstname.lastname@example.com)</span></td>
<td align="center" valign="top"><span style="font-size: x-small">mail.example.com (subdomain) and example.com (root domain)</span></td>
</tr>
</tbody>
</table>
<p><a title="table" name="table"></a>Sender ID&#8217;s and SPF&#8217;s syntax differs only slightly. SPF records begin with &#8220;v=spf1,&#8221; while typical Sender ID records begin &#8220;SPF2.0/PRA.&#8221; The rest of the records are identical. The basic, most ISP-friendly SPF entry is &#8220;v=spf1 a mx IP4:XXX.XXX.XX.XX –all.&#8221; For Sender ID, it would be &#8220;spf2.0/pra a mx IP4:XXX.XXX.XX.XX -all.&#8221;</p>
<p><a title="table" name="table"></a><strong>Hotmail: Getting Authenticated</strong></p>
<p><a title="table" name="table"></a>Hotmail has been the most vocal Sender ID advocate. Recently, it issued <a href="http://postmaster.msn.com/Guidelines.aspx" target="_new">guidelines</a> for creating a record and the mechanisms to avoid. Hotmail has specifically requested senders not to use the PTR (<a href="http://en.wikipedia.org/wiki/PTR_record#Types_of_DNS_records" target="_new">define</a>) mechanism. It also recently asked senders to use a hard fail &#8221; -all&#8221; at the end of their records to indicate their e-mail infrastructure is secure.</p>
<p>The syntax your record should use to indicate your level of e-mail security:</p>
<p><a title="table" name="table"></a></p>
<table border="0" cellspacing="1" cellpadding="3" width="420" bgcolor="#5a739c">
<tbody>
<tr bgcolor="#ffe084">
<th align="center" valign="top"><span style="color: #000000;font-size: x-small">Syntax</span></th>
<th align="center" valign="top"><span style="color: #000000;font-size: x-small">Type</span></th>
<th align="center" valign="top"><span style="color: #000000;font-size: x-small">Meaning</span></th>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">-all</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Fail</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Fail all servers not listed here (recommended option)</span></td>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">~all</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Soft fail</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Give extra scrutiny to servers not listed here</span></td>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">?all</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Neutral</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Unsure whether e-mail infrastructure is secure</span></td>
</tr>
<tr bgcolor="#ffffff">
<td align="center" valign="top"><span style="font-size: x-small">+all</span></td>
<td align="center" valign="top"><span style="font-size: x-small">Pass</span></td>
<td align="center" valign="top"><span style="font-size: x-small">There&#8217;s no infrastructure security at all</span></td>
</tr>
</tbody>
</table>
<p><a title="table" name="table"></a>One last note on implementing Sender ID and SPF: It&#8217;s not uncommon for a sender to change IP addresses or providers. Most ISPs will perform authentication checks on inbound e-mail by directly querying your DNS zone.</p>
<p><a title="table" name="table"></a>Hotmail asks senders to notify it when they make changes, allowing it to cache the records. This makes authenticating senders and applying reputation scoring easier for Hotmail.</p>
<p><a title="table" name="table"></a>If you&#8217;ve changed your Sender ID and SPF records recently, use the following URL to update Hotmail: <a href="http://support.msn.com/default.aspx?productKey=senderid&amp;mkt=en-us" target="_new">http://support.msn.com/default.aspx?productKey=senderid&amp;mkt=en-us</a>.</p>
<p>In some cases, if the Sender ID/SPF record contains syntax errors, Hotmail will even send an e-mail to alert you of the problem so you can make corrections before you have delivery problems.</p>
<p><strong>Test Your Record Setup First</strong></p>
<p>You can use free tools to test your authentication record, but I often prefer to view results that come directly from the receivers by checking the posted results in the e-mail headers.</p>
<p>Both Gmail and Hotmail provide this detail and are easy to test for compliance. You always want to see &#8220;pass&#8221; as your result, never &#8220;fail&#8221; or &#8220;neutral.&#8221; In some e-mail services, a &#8220;neutral&#8221; result might mean your e-mail gets rerouted to the bulk folder or blocked; a &#8220;fail&#8221; result always denies entry to your e-mail.</p>
<p>For example, an SPF Gmail headers might look like this:</p>
<blockquote><p>Authentication-Results: mx.google.com; spf=pass (google.com: domain of postmaster@policycircle.com designates XX.XX.XX.XXX as permitted sender)</p></blockquote>
<p>A Sender ID Hotmail header might look like this:</p>
<blockquote><p>X-SID-PRA: FirstName LastName</p>
<p>X-SID-Result: Pass</p></blockquote>
<p>Until next time, keep on deliverin&#8217;!</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/08/11/hotmail-delivery-tips-for-sender-id-and-spf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to tune Apache and Mysql</title>
		<link>http://blog.nataprawira.com/tech/2009/07/25/how-to-tune-apache-and-mysql/</link>
		<comments>http://blog.nataprawira.com/tech/2009/07/25/how-to-tune-apache-and-mysql/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 17:29:43 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[tune]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=66</guid>
		<description><![CDATA[

By default, Apache comes preconfigured to serve a maximum of 256 clients simultaneously. This particular configuration setting can be found in the file /etc/httpd/conf/httpd.conf
If your server has 2 GB of RAM, and you’re sharing your server with MySQL(true in my case), you’ll want to reserve about half of it for Apache (1 GB)

MaxClients: here is [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F07%2F25%2Fhow-to-tune-apache-and-mysql%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F07%2F25%2Fhow-to-tune-apache-and-mysql%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>By default, Apache comes preconfigured to serve a maximum of 256 clients simultaneously. This particular configuration setting can be found in the file <strong>/etc/httpd/conf/httpd.conf</strong></p>
<p>If your server has 2 GB of RAM, and you’re sharing your server with MySQL(true in my case), you’ll want to reserve about half of it for Apache (1 GB)</p>
<p><span id="more-66"></span></p>
<p>MaxClients: here is the process of determining MaxClients. type<strong> </strong></p>
<p style="padding-left: 30px"><strong>ps -U apache -u apache u</strong></p>
<p>See the number of apache process running in you command prompt.<strong></strong></p>
<p style="padding-left: 30px"><strong>USER       PID %CPU %MEM    VSZ     RSS  TTY    STAT START   TIME COMMAND<br />
apache     7694     0.0     0.3       42704  6680    ?        S       18:30   0:00 /usr/sbin/httpd</strong></p>
<p>The above indicates that a single httpd process is using 6.6 MB of RSS (Resident Set Size) memory (or non-swapped physical memory) and that it is using 42 MB of VSZ (Virtual Size) memory. This depends on the number of modules you have loaded and running in Apache.</p>
<p>As shared libraries are included in this number, it’s not 100 percent accurate. We can assume that half the RSS number is “real” memory. Let’s assume that each httpd process is using (6.6/2=3.3) 4 MB of memory. So if you have 1 GB ram then divide it with 4 MB of memory, which leaves room for around 256 concurrent httpd processes.</p>
<p style="padding-left: 30px"><strong>Set MaxClients 256</strong></p>
<p>Or</p>
<p>Somebody prefers to set MaxClients using following rule<strong></strong></p>
<p style="padding-left: 30px"><strong>MaxClients = 150 x RAM (GB) </strong></p>
<p>So for example if you have 2 GB RAM (dedicated for apache) set this value to 300. In my case IT WILL BE 150</p>
<p>Or</p>
<p>Some individuals maintain that each httpd thread uses about 5 MB of “real” memory. So they determine by the following way..</p>
<p>Or</p>
<p style="padding-left: 30px"><code>MaxClients = RAM(MB)/5</code></p>
<p><code>So for example if you have 2 GB RAM (dedicated for apache) set this value to 409. In my case IT WILL BE 204(1 GB for apache)</code><em></em></p>
<p><em>Note:</em> There is no reason for you to set it any higher unless you have a specific problem with this value. A high value can lead to a complete server hang in case of a DOS attack. A value too low can create timeout problems for your clients if the limit is reached</p>
<p><strong>StartServers</strong> &#8211; Sets the number of child server processes created on startup. This setting depends greatly on the type of webserver you run. If you run low traffic websites on that server set it low to something like 5. If you have resource intensive websites on that server you should set it close to MaxClients.</p>
<p><strong>MaxRequestsPerChild</strong> &#8211; Controls the number of request the a child serves before the child is killed. This should not be set too low as it will put an unnecessary load on the apache server to recreate the child. I suggest setting it to 1000.</p>
<p>But we are going to use 2000 for handling heavy traffic load properly.</p>
<p><strong>MinSpareServers and MaxSpareServers</strong> &#8211; MaxSpareServers and MinSpareServers control how many spare (unused) child-processes Apache will keep alive while waiting for more requests to put them to use. Each child-process consumes resources, so having MaxSpareServers set too high can cause resource problems. On the other hand, if the number of unused servers drops below MinSpareServers, Apache will fork. Leave those values to: MinSpareServers 5 MaxSpareServers 10</p>
<p><strong>ServerLimit</strong>: Its better to keep Server limit same as the value of MaxClients.<strong></strong></p>
<p><strong>MaxRequestsPerChild</strong>: I’ve Kept default apache value for this one.</p>
<p>So few changes need to be made in httpd.conf file which is located in /etc/httpd/conf/ directory<strong></strong></p>
<p style="padding-left: 30px"><strong>&lt;IfModule prefork.c&gt;<br />
StartServers     140<br />
MinSpareServers    5<br />
MaxSpareServers   10<br />
ServerLimit      150<br />
MaxClients       150<br />
MaxRequestsPerChild  4000<br />
&lt;/IfModule&gt;</strong></p>
<p>[Note]: Response time depends on MaxClients. If you increase the MaxClients number, server will response more quickly for each request but  a high value can lead to a complete server hang.</p>
<p>Ab is a tool for benchmarking the performance of your Apache HyperText Transfer Protocol (HTTP) server. It does this by giving you an indication of how many requests per second your Apache installation can serve.</p>
<p>uptime command in your root login should not yield a load average above 1, and the server should respond to commands quickly<strong></strong></p>
<p style="padding-left: 30px"><strong>ab -n 10000 -c 200 -k http://your_url<br />
-c = concurrent connections<br />
-t = time limit<br />
-n = # of requests</strong></p>
<p>Keep tuning until you hit your maximum desired load average. For servers used interactively often, having a load above 3 is way too much to use the server comfortably. For servers used mostly as real servers, a maximum load average of 10 should be acceptable. More than that, and you’ll find yourself needing to reboot the server when experiencing heavy traffic conditions, because no terminal or remote console will respond quickly to commands, and managing the server will be impossible.</p>
<p><strong>How to configure few things in php.ini file for supporting huge traffic</strong></p>
<p>* Enable the compression of HTML by putting in your php.ini:<strong></strong></p>
<p style="padding-left: 30px"><strong>output_handler = ob_gzhandler</strong></p>
<p>** Switch from file based sessions to shared memory sessions. Compile PHP with the –with-mm option and<strong></strong></p>
<p style="padding-left: 30px"><strong>set session.save_handler=mm</strong></p>
<p><strong>Configure mysql. Change my.cnf file for better performance.</strong></p>
<p>The database parameters are tuned for systems with 1 GB RAM (for ISO CD images). If you have higher RAM, please change the following in the “my.cnf” MySQL configuration file under /etc/mysql or /etc directory.<strong></strong></p>
<p><strong>For a machine running with 512 MB of RAM, you can set these to:</strong></p>
<p style="padding-left: 30px"><strong>key_buffer=128M table_cache=1024 sort_buffer=64M read_buffer=2M record_buffer=4M</strong></p>
<p><strong>For a machine running with 1 GB of RAM, you can set these to:</strong></p>
<p style="padding-left: 30px"><strong>key_buffer=256M table_cache=2048 sort_buffer=128M read_buffer=2M record_buffer=8M</strong></p>
<p><strong>For a machine running with 2 GB of RAM, you can set these to:</strong></p>
<p style="padding-left: 30px"><strong>key_buffer=512M table_cache=3072 sort_buffer=256M read_buffer=2M record_buffer=8M</strong></p>
<p><strong>For a machine running with 4 GB of RAM, you can set these to:</strong></p>
<p style="padding-left: 30px"><strong>key_buffer=1G table_cache=4096 sort_buffer=512M read_buffer=2M record_buffer=8M</strong></p>
<p><strong><a title="http://blog.shabuz.com/?p=54" href="http://blog.shabuz.com/?p=54" target="_blank">Original Post</a><br />
</strong></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/07/25/how-to-tune-apache-and-mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Necessary commands (tips) to tune apache</title>
		<link>http://blog.nataprawira.com/tech/2009/07/25/necessary-commands-tips-to-tune-apache/</link>
		<comments>http://blog.nataprawira.com/tech/2009/07/25/necessary-commands-tips-to-tune-apache/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 17:24:26 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=64</guid>
		<description><![CDATA[

To search in the current directory and all sub directories for a file named httpd.conf
find . -name “httpd.conf” -print
To find some string or text, type
find . -exec grep “MaxClients” ‘{}’ \; -print
This command will search in the current directory and all sub directories. All files that contain the string with the path.
If you want to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F07%2F25%2Fnecessary-commands-tips-to-tune-apache%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F07%2F25%2Fnecessary-commands-tips-to-tune-apache%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>To search in the current directory and all sub directories for a file named httpd.conf</p>
<p style="padding-left: 30px"><strong>find . -name “httpd.conf” -print</strong></p>
<p>To find some string or text, type</p>
<p style="padding-left: 30px"><strong>find . -exec grep “MaxClients” ‘{}’ \; -print</strong></p>
<p><span id="more-64"></span>This command will search in the current directory and all sub directories. All files that contain the string with the path.</p>
<p>If you want to just find each file then pass it on for processing use the -q grep option. This finds the first occurrance of the search string. It then signals success to find and find continues searching for more files.</p>
<p style="padding-left: 30px"><strong>find . -exec grep -q “www.athabasca” ‘{}’ \; -print</strong></p>
<p>Send 1000 Request to apache using apache benchmark</p>
<p style="padding-left: 30px"><strong>ab -n 1000 -c 200 -k YOUR_URL</strong></p>
<p>To view error log of httpd. type</p>
<p style="padding-left: 30px"><strong>grep -i maxclient /var/log/httpd/error_log*</strong></p>
<p>To view Process status type and load average type top and uptime respectively.</p>
<p>To open a file and search something(Here Example is: MaxClients) from there type</p>
<p style="padding-left: 30px"><strong>vi +/MaxClients /etc/httpd/conf/httpd.conf</strong></p>
<p>To view total memory used by httpd, type</p>
<p style="padding-left: 30px"><strong>ps -ylC httpd –sort:rss</strong></p>
<p><strong><a title="http://blog.shabuz.com/?p=55" href="http://blog.shabuz.com/?p=55" target="_blank">Original Post</a></p>
<p></strong></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/07/25/necessary-commands-tips-to-tune-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How To Create SVN Repository</title>
		<link>http://blog.nataprawira.com/tech/2009/06/30/how-to-create-svn-repository/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/30/how-to-create-svn-repository/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 11:52:42 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[Repository]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=58</guid>
		<description><![CDATA[

How to get help with svn?
If you are looking for svn reference in man pages, you have gone to the wrong place. To check the references of svn commands, simple do this:
svn help

This will make svn list all the available functions, to get the function reference, let say checkout
svn help checkout
The same thing goes to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F30%2Fhow-to-create-svn-repository%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F30%2Fhow-to-create-svn-repository%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>How to get help with svn?</strong></p>
<p>If you are looking for svn reference in man pages, you have gone to the wrong place. To check the references of svn commands, simple do this:</p>
<p style="padding-left: 30px"><strong>svn help</strong></p>
<p><span id="more-58"></span></p>
<p>This will make svn list all the available functions, to get the function reference, let say checkout</p>
<p style="padding-left: 30px"><strong>svn help checkout</strong></p>
<p>The same thing goes to other svn related commands, such as svnadmin<strong></strong></p>
<p style="padding-left: 30px"><strong>svnadmin help</strong><strong></strong></p>
<p><strong>How to create a svn repository?</strong></p>
<p>First of all what is repository? It is a core file for svn, or you can call it a centralized svn backup database. After created it, it is just a directory with its files. IMPORTANT! Do NOT try to modify or add something into the repository, unless you know what are you doing.</p>
<p>To create a svn repo, let say I wanna create a repo to store all my programming codes, I do this<strong></strong></p>
<p style="padding-left: 30px"><strong>svnadmin create /home/mysurface/repo/programming_repo</strong></p>
<p>Remember try to use absolute path for everything, sometimes the relative path is not going to work.</p>
<p><strong>How to import my existing directories into the new repo?</strong><strong></strong></p>
<p style="padding-left: 30px"><strong>svn import /home/mysurface/programming file:///home/mysurface/repo/programming_repo -m &#8220;Initial import&#8221;</strong></p>
<p>-m stand for log message, the first revision was created with log as “Initial import”. You need to specified URL for the repo, URL is the standard argument for svn. Therefore for local file, you need to specified with file://</p>
<p><strong>How to see what is inside the repo?</strong></p>
<p style="padding-left: 30px"><strong>svn list file:///home/mysurface/repo/programming_repo</strong></p>
<p>Another way of listing all the files and folder in the tree view, I use svnlook</p>
<p style="padding-left: 30px"><strong>svnlook tree programming_repo </strong></p>
<p>The difference between svn list and svnlook tree is one expect URL another one do not.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/30/how-to-create-svn-repository/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Howto: HTACCESS Authentication restriction, but allow some IPs to get thru</title>
		<link>http://blog.nataprawira.com/tech/2009/06/22/howto-htaccess-authentication-restriction-but-allow-some-ips-to-get-thru/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/22/howto-htaccess-authentication-restriction-but-allow-some-ips-to-get-thru/#comments</comments>
		<pubDate>Mon, 22 Jun 2009 11:29:55 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[HTaccess]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=57</guid>
		<description><![CDATA[

Easy part, just create like below .htaccess file on your web folder :
AuthName &#8220;My Protected Site&#8221;
AuthUserFile /home/apache/.htpasswd
AuthType basic
Require valid-user
Order Deny,Allow
Deny from all
Allow from 192.168.1. 192.168.2.
Satisfy Any
Good luck!
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F22%2Fhowto-htaccess-authentication-restriction-but-allow-some-ips-to-get-thru%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F22%2Fhowto-htaccess-authentication-restriction-but-allow-some-ips-to-get-thru%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Easy part, just create like below .htaccess file on your web folder :</p>
<p style="padding-left: 30px">AuthName &#8220;My Protected Site&#8221;<br />
AuthUserFile /home/apache/.htpasswd<br />
AuthType basic<br />
Require valid-user<br />
Order Deny,Allow<br />
Deny from all<br />
Allow from 192.168.1. 192.168.2.<br />
Satisfy Any</p>
<p>Good luck!</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/22/howto-htaccess-authentication-restriction-but-allow-some-ips-to-get-thru/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple Check IP with PHP</title>
		<link>http://blog.nataprawira.com/tech/2009/06/16/simple-check-ip-with-php/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/16/simple-check-ip-with-php/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 18:37:27 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Internet Protocol]]></category>
		<category><![CDATA[IP]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=56</guid>
		<description><![CDATA[

You can use below simple PHP scripting to check IP address
&#60;?php
if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
echo &#8220;&#60;title&#62;&#8221;.$_SERVER["HTTP_X_FORWARDED_FOR"].&#8221; via &#8220;.$_SERVER["REMOTE_ADDR"].&#8221;&#60;/title&#62;\n\n&#8221;;
echo &#8220;Your IP: &#8220;.$_SERVER["HTTP_X_FORWARDED_FOR"] . &#8220;&#60;br /&#62;\n&#8221;;
echo &#8220;Proxy IP: &#8220;.$_SERVER["REMOTE_ADDR"] . &#8220;&#60;br /&#62;\n&#8221;;
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}else{
echo &#8220;&#60;title&#62;&#8221;.$_SERVER["REMOTE_ADDR"].&#8221;&#60;/title&#62;\n\n&#8221;;
echo &#8220;Your IP: &#8220;.$_SERVER["REMOTE_ADDR"] . &#8220;&#60;br /&#62;\n&#8221;;
$ip = $_SERVER["REMOTE_ADDR"];
}
echo &#8220;Date Time: &#8221; . date(&#8221;Y-m-d H:i:s&#8221;) . &#8220;&#60;br /&#62;\n&#8221;;
?&#62;
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F16%2Fsimple-check-ip-with-php%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F16%2Fsimple-check-ip-with-php%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>You can use below simple PHP scripting to check IP address</strong></p>
<p>&lt;?php<br />
if(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){<br />
echo &#8220;&lt;title&gt;&#8221;.$_SERVER["HTTP_X_FORWARDED_FOR"].&#8221; via &#8220;.$_SERVER["REMOTE_ADDR"].&#8221;&lt;/title&gt;\n\n&#8221;;<br />
echo &#8220;Your IP: &#8220;.$_SERVER["HTTP_X_FORWARDED_FOR"] . &#8220;&lt;br /&gt;\n&#8221;;<br />
echo &#8220;Proxy IP: &#8220;.$_SERVER["REMOTE_ADDR"] . &#8220;&lt;br /&gt;\n&#8221;;<br />
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];<br />
}else{<br />
echo &#8220;&lt;title&gt;&#8221;.$_SERVER["REMOTE_ADDR"].&#8221;&lt;/title&gt;\n\n&#8221;;<br />
echo &#8220;Your IP: &#8220;.$_SERVER["REMOTE_ADDR"] . &#8220;&lt;br /&gt;\n&#8221;;<br />
$ip = $_SERVER["REMOTE_ADDR"];<br />
}<br />
echo &#8220;Date Time: &#8221; . date(&#8221;Y-m-d H:i:s&#8221;) . &#8220;&lt;br /&gt;\n&#8221;;<br />
?&gt;</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/16/simple-check-ip-with-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This is what you called, (Telkom) SPEEDY?!</title>
		<link>http://blog.nataprawira.com/tech/2009/06/09/this-is-what-you-called-telkom-speedy/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/09/this-is-what-you-called-telkom-speedy/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 04:18:56 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[RTO]]></category>
		<category><![CDATA[Speedy]]></category>
		<category><![CDATA[Telkom]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=55</guid>
		<description><![CDATA[

Hello TELKOM SPEEDY!
Its been (almost) 1 month, the connections were like this.
I NEED MY FAST CONNECTION BACK!!!!!!

Here are my ping result:
Reply from 209.131.36.158: bytes=32 time=914ms TTL=52
Reply from 209.131.36.158: bytes=32 time=1051ms TTL=52
Reply from 209.131.36.158: bytes=32 time=993ms TTL=52
Reply from 209.131.36.158: bytes=32 time=939ms TTL=52
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Reply from 209.131.36.158: bytes=32 time=763ms TTL=52
Reply from [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F09%2Fthis-is-what-you-called-telkom-speedy%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F09%2Fthis-is-what-you-called-telkom-speedy%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>Hello <a href="http://www.telkomspeedy.com/" target="_blank">TELKOM SPEEDY</a>!</strong></p>
<p>Its been (almost) 1 month, the connections were like this.</p>
<p><strong>I NEED MY FAST CONNECTION BACK!!!!!!</strong></p>
<p><span id="more-55"></span></p>
<p><span style="text-decoration: underline"><strong>Here are my ping result:</strong></span><br />
Reply from 209.131.36.158: bytes=32 time=914ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=1051ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=993ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=939ms TTL=52<br />
<strong>Request timed out.<br />
Request timed out.<br />
Request timed out.<br />
Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=763ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=1280ms TTL=52<br />
<strong>Request timed out.<br />
Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=1386ms TTL=52<br />
<strong>Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=772ms TTL=52<br />
<strong>Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=936ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=627ms TTL=52<br />
<strong>Request timed out.<br />
Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=881ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=923ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=990ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=746ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=819ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=1006ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=642ms TTL=52<br />
<strong>Request timed out.<br />
Request timed out.<br />
Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=923ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=917ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=861ms TTL=52<br />
<strong>Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=985ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=787ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=1057ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=746ms TTL=52<br />
<strong>Request timed out.<br />
Request timed out.</strong><br />
Reply from 209.131.36.158: bytes=32 time=789ms TTL=52<br />
Reply from 209.131.36.158: bytes=32 time=708ms TTL=52</p>
<p><strong>Ping statistics for 209.131.36.158:<br />
Packets: Sent = 3713, Received = 3498, Lost = 215 (5% loss),<br />
Approximate round trip times in milli-seconds:<br />
Minimum = 275ms, Maximum = 2174ms, Average = 557ms</strong></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/09/this-is-what-you-called-telkom-speedy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Master-Slave Replication</title>
		<link>http://blog.nataprawira.com/tech/2009/06/08/mysql-master-slave-replication/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/08/mysql-master-slave-replication/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 16:20:43 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Master-Slave]]></category>
		<category><![CDATA[Replication]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=53</guid>
		<description><![CDATA[

To setup Master-Slave Replication the first thing you need to do is create a user on the Master server that allows replication.

 # mysql -u root -p
mysql&#62; grant replication slave on *.* TO repl@&#8221;%&#8221; identified by &#8216;[repl password]&#8216;;
mysql&#62; quit

Be sure to replace [repl password] with the actual password you want to use. Also, you must [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F08%2Fmysql-master-slave-replication%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F08%2Fmysql-master-slave-replication%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>To setup Master-Slave Replication the first thing you need to do is create a user on the Master server that allows replication.</p>
<p><span id="more-53"></span></p>
<p><strong> # mysql -u root -p<br />
mysql&gt; grant replication slave on *.* TO repl@&#8221;%&#8221; identified by &#8216;[repl password]&#8216;;<br />
mysql&gt; quit<br />
</strong><br />
Be sure to replace [repl password] with the actual password you want to use. Also, you must ensure that your firewall has port 3306:tcp open, the default port for the mysql server service.</p>
<p>Next, exit your ini file (typically /etc/my.cnf on Linux servers) to start binary logging of the Master server. You may or may not want to use the last line to ignore changes to the mysql database since that is the database used for mysql configuration and permissions.</p>
<p>Under the [mysqld] heading add the following lines:</p>
<p><strong> log-bin=mysql-bin<br />
server-id=1<br />
binlog-ignore-db=&#8221;mysql&#8221;<br />
</strong><br />
<em>Restart your mysql server service.</em></p>
<p>Before we start copying changes, we want to make sure the data on each server is the same, so dump the data from the Master server and add it to the Slave server. This can easily be performed using mysqldump as follows:</p>
<p><strong> # mysqldump -u root -p[password] [database]&gt;/home/[user]/[database].sql<br />
</strong><br />
Be sure again to replace [password] with the actual password, [database] with the actual name of each database, one at a time.</p>
<p>Now that you have a snapshot of the data, get the binary position of the log file.</p>
<p><strong> # mysql -u root -p[plain-text password]<br />
mysql&gt; SHOW MASTER STATUS;<br />
</strong><br />
The output should look something like this:</p>
<p><strong> +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
| mysql-bin.000112 |        79 |              | mysql            |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<br />
1 row in set (0.00 sec)<br />
</strong><br />
Write down the filename and log position for use on the Slave server.</p>
<p>Next, copy the databases to your Slave server.</p>
<p><strong> # scp /home/[user]/*.sql [Slave IP]:/home/[user]/<br />
</strong><br />
At this point we are done with the Master server. Now for the Slave.</p>
<p>Edit the Slave server&#8217;s mysql configuation file (typically /etc/my.cnf on Linux servers) to identify its server number, master host and user.</p>
<p>Under the [mysqld] heading add the following lines:</p>
<p><strong> server-id=2<br />
master-host = [IP of Master Server]<br />
master-user = repl<br />
master-password = [repl password]<br />
master-port = 3306<br />
</strong><br />
Again, ensure you replace [repl password] with the actual repl user password, and [IP of Master Server] with the IP address of the Master server.</p>
<p>Insert the data from the Master server into the Slave server databases for each of the databases.</p>
<p><strong> # mysql -p[password] [database] &lt; /home/[user]/[database].sql<br />
</strong><br />
Be sure to replace [password] with the root users password, and [database] with each database&#8217;s name, one at a time.</p>
<p><em>Restart the mysql server service.<br />
</em><br />
Now log in to Mysql and configure the Slave replication.</p>
<p><strong> # mysql -u root -p<br />
mysql&gt; CHANGE MASTER TO MASTER_LOG_FILE=&#8217;[Filename written down]&#8216;,<br />
MASTER_LOG_POS=[Position written down];<br />
mysql&gt; START SLAVE;<br />
mysql&gt; SHOW SLAVE STATUS\G<br />
</strong><br />
Slave_IO_State status information should identify &#8220;Waiting for master to send event&#8221;. If it stops at &#8220;Connecting to Master&#8221; check your log file.</p>
<p>By default it is located in /var/log/mysqld.log but may be different on your system. Check your my.cnf file for the exact location of your log file.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/08/mysql-master-slave-replication/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To Add Godaddy SSL Site Seal Image</title>
		<link>http://blog.nataprawira.com/tech/2009/06/01/how-to-add-godaddy-ssl-site-seal-image/</link>
		<comments>http://blog.nataprawira.com/tech/2009/06/01/how-to-add-godaddy-ssl-site-seal-image/#comments</comments>
		<pubDate>Sun, 31 May 2009 17:26:40 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Godaddy]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[Site Seal]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=52</guid>
		<description><![CDATA[

We have 2 ways, to get this done. You just need to choose, which way is suitable for you  

Long Way:
1. Log in to your Account Manager.
2. Visit: https://certs.godaddy.com/ManageProducts.do
3. On &#8220;Manage SSL Certificates&#8221;, click on your domain name.
4. Click on &#8220;SITE SEAL&#8221; tab to manage your site seal
5. Choose &#8220;Site Seal Image Size&#8221;
6. Click [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F01%2Fhow-to-add-godaddy-ssl-site-seal-image%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F06%2F01%2Fhow-to-add-godaddy-ssl-site-seal-image%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>We have 2 ways, to get this done. You just need to choose, which way is suitable for you <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-52"></span></p>
<p><span style="text-decoration: underline"><strong>Long Way:</strong></span></p>
<p>1. Log in to your Account Manager.</p>
<p>2. Visit: <a href="https://certs.godaddy.com/ManageProducts.do" target="_blank"><strong>https://certs.godaddy.com/ManageProducts.do</strong></a></p>
<p>3. On &#8220;Manage SSL Certificates&#8221;, click on your domain name.</p>
<p>4. Click on &#8220;SITE SEAL&#8221; tab to manage your site seal</p>
<p>5. Choose &#8220;Site Seal Image Size&#8221;</p>
<p>6. Click on Submit button.</p>
<p>7. On the right side box, copy-paste the javascript provided, into your sidebar website.</p>
<p>8. Done.</p>
<p><span style="text-decoration: underline"><strong>Easy way:</strong></span></p>
<p>1. Log in to your Account Manager.</p>
<p>2. Visit Manage Site Seal page: <a href="https://certs.godaddy.com/ManageSiteSeal.do" target="_blank"><strong>https://certs.godaddy.com/ManageSiteSeal.do</strong></a></p>
<p>3. Choose &#8220;Site Seal Image Size&#8221;</p>
<p>4. Click on Submit button.</p>
<p>5. On the right side box, copy-paste the javascript provided, into your sidebar website.</p>
<p>6. Done.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/06/01/how-to-add-godaddy-ssl-site-seal-image/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to configure YUM/WGET to get through using PROXY ?</title>
		<link>http://blog.nataprawira.com/tech/2009/05/26/how-to-configure-yumwget-to-get-through-using-proxy/</link>
		<comments>http://blog.nataprawira.com/tech/2009/05/26/how-to-configure-yumwget-to-get-through-using-proxy/#comments</comments>
		<pubDate>Tue, 26 May 2009 10:01:43 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[wget]]></category>
		<category><![CDATA[Yum]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=51</guid>
		<description><![CDATA[


Better answer &#8211; use /etc/profile.d/proxy.[csh,sh]


You just need to create the following files in /etc/profile.d, and then this will work in *any* shell for *any* user of the system:
#proxy.sh
export http_proxy=http://host.com:port/
export ftp_proxy=http://host.com:port/
export no_proxy=.domain.com
export HTTP_PROXY=http://host.com:port/
export FTP_PROXY=http://host.com:port/
#proxy.csh
setenv http_proxy http://host.com:port/
setenv ftp_proxy http://host.com:port/
setenv no_proxy .domain.com
setenv HTTP_PROXY http://host.com:port/
setenv FTP_PROXY http://host.com:port/




After that, you can run YUM/WGET  
 
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F05%2F26%2Fhow-to-configure-yumwget-to-get-through-using-proxy%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F05%2F26%2Fhow-to-configure-yumwget-to-get-through-using-proxy%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div id="post_message_4089">
<div class="smallfont"><strong>Better answer &#8211; use /etc/profile.d/proxy.[csh,sh]</strong></div>
<div class="smallfont">
</div>
<div id="post_message_4089">You just need to create the following files in /etc/profile.d, and then this will work in *any* shell for *any* user of the system:</div>
<p>#proxy.sh<br />
export http_proxy=http://host.com:port/<br />
export ftp_proxy=http://host.com:port/<br />
export no_proxy=.domain.com<br />
export HTTP_PROXY=http://host.com:port/<br />
export FTP_PROXY=http://host.com:port/</p>
<p>#proxy.csh<br />
setenv http_proxy <a href="http://host.com/" target="_blank">http://host.com:port/</a><br />
setenv ftp_proxy <a href="http://host.com/" target="_blank">http://host.com:port/</a><br />
setenv no_proxy .domain.com<br />
setenv HTTP_PROXY <a href="http://host.com/" target="_blank">http://host.com:port/</a><br />
setenv FTP_PROXY <a href="http://host.com/" target="_blank">http://host.com:port/</a></p>
</div>
<div></div>
<div>
</div>
<div>After that, you can run YUM/WGET <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </div>
<p><!-- / message --> <!-- edit note --></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/05/26/how-to-configure-yumwget-to-get-through-using-proxy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO Warning for DEVELOPERS &amp; WEBMASTERS</title>
		<link>http://blog.nataprawira.com/tech/2009/05/08/seo-warning-for-developers-webmasters/</link>
		<comments>http://blog.nataprawira.com/tech/2009/05/08/seo-warning-for-developers-webmasters/#comments</comments>
		<pubDate>Fri, 08 May 2009 03:36:57 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tech News]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Webmaster]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=50</guid>
		<description><![CDATA[

Avoiding Top SEO Mistakes
Following are the 9 Biggest SEO Mistakes which Web Designers &#38; Web Developers should avoid.
Splash Page
I&#8217;ve seen this mistake many times where people put up just a big banner image and a link &#8220;Click here to enter&#8221; on their homepage. The worst case &#8212; the &#8220;enter&#8221; link is embedded in the Flash [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F05%2F08%2Fseo-warning-for-developers-webmasters%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F05%2F08%2Fseo-warning-for-developers-webmasters%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>Avoiding Top SEO Mistakes</strong></p>
<p>Following are the 9 Biggest SEO Mistakes which Web Designers &amp; Web Developers should avoid.</p>
<p><strong>Splash Page</strong></p>
<p>I&#8217;ve seen this mistake many times where people put up just a big banner image and a link &#8220;Click here to enter&#8221; on their homepage. The worst case &#8212; the &#8220;enter&#8221; link is embedded in the Flash object, which makes it impossible for the spiders to follow the link.</p>
<p>This is fine if you don&#8217;t care about what a search engine knows about your site; otherwise, you&#8217;re making a BIG mistake. Your homepage is probably your website&#8217;s highest ranking page and gets crawled frequently by web spiders. Your internal pages will not appear in the search engine index without the proper linking structure to internal pages for the spider to follow.</p>
<p>Your homepage should include (at minimum) target keywords and links to important pages.</p>
<p><span id="more-50"></span></p>
<p><strong>Non-spiderable Flash Menus</strong></p>
<p>Many designers make this mistake by using Flash menus such as those fade-in and animated menus. They might look cool to you but they can&#8217;t be seen by the search engines; and thus the links in the Flash menu will not be followed.<strong></strong></p>
<p><strong>Image and Flash Content</strong></p>
<p>Web spiders are like a text-based browser, they can&#8217;t read the text embedded in the graphic image or Flash. Most designers make this mistake by embedding the important content (such as target keywords) in Flash and image.<strong></strong></p>
<p><strong>Overuse of Ajax</strong></p>
<p>A lot of developers are trying to impress their visitor by implementing massive Ajax features (particularly for navigation purposes), but did you know that it is a big SEO mistake? Because, ajax content is loaded dynamically, so it is not spiderable or indexable by search engines.</p>
<p>Another disadvantage of Ajax &#8212; since the address URL doesn&#8217;t reload, your visitor can not send the current page to their friends.<strong></strong></p>
<p><strong>Versioning of Theme Design</strong></p>
<p>For some reason, some designers love to version their theme design into sub level folders (i.e. domain.com/v2, v3, v4) and redirect to the new folder. Constantly changing the main root location may cause you to lose backlink counts and ranking.<strong></strong></p>
<p><strong>&#8220;Click Here&#8221; Link Anchor Text</strong></p>
<p>You probably see this a lot where people use &#8220;Click here&#8221; or &#8220;Learn more&#8221; as the linking text. This is great if you want to be ranked high for &#8220;Click Here&#8221;. But, if you want to tell the search engine that your page is important for a topic, than use, that topic/keyword in your link anchor text. It&#8217;s much more descriptive (and relevant) to say &#8220;learn more about {keyword topic}&#8221;</p>
<p>Warning: Don&#8217;t use the EXACT same anchor text everywhere on your website. This can sometimes be seen as search engine spam too.<strong></strong></p>
<p><strong>Common Title Tag Mistakes</strong><strong><em></em></strong></p>
<p><strong><em>Same or similar title text:</em></strong><br />
Every page on your site should have a unique &lt;title&gt; tag with the target keywords in it. Many developers make the mistake of having the same or similar title tags throughout the entire site. That&#8217;s like telling the search engine that EVERY page on your site refers to the same topic and one isn&#8217;t any more unique than the other.</p>
<p>One good example of bad Title Tag use would be the default WordPress theme. In case you didn&#8217;t know, the title tag of the default WordPress theme isn&#8217;t that useful: Site Name &gt; Blog Archive &gt; Post Title. Why isn&#8217;t this search engine friendly? Because, every single blog post will have the same text &#8220;Site Name &gt; Blog Archive &gt;&#8221; at the beginning of the Title Tag. If you really want to include the site name in the title tag, it should be at the end: Post Title | Site Name.<em><strong></strong></em></p>
<p><em><strong>Exceeding the 65 character limit:</strong></em><br />
Many bloggers write very long post titles. So what? In search engine result pages, your title tag is used as the link heading. You have about 65 characters (including spaces) to get your message across or risk it getting cutoff.<em><strong></strong></em></p>
<p><em><strong>Keyword stuffing the title:</strong></em><br />
Another common mistake people tend to make is overfilling the title tag with keywords. Saying the same thing 3 times doesn&#8217;t make you more relevant. Keyword stuffing in the Title Tag is looked at as search engine spam (not good). But it might be smart to repeat the same word in different ways:</p>
<p>&#8220;Photo Tips &amp; Photography Techniques for Great Pictures&#8221; &#8220;Photo&#8221; and &#8220;Photography&#8221; are the same word repeated twice but in different ways because your audience might use either one when performing a search query.<strong></strong></p>
<p><strong>Empty Image Alt Attribute</strong></p>
<p>You should always describe your image in the alt attribute. The alt attribute is what describes your image to a blind web user. Guess what? Search engines can&#8217;t see images so your alt attribute is a factor in illustrating what your page is relevant for.</p>
<p><em>Hint: Properly describing your images can help your ranking in the image search results. For example, Google image search brings me hundreds of referrals everyday for the search terms &#8220;abstract&#8221; and &#8220;dj&#8221;.</em><strong></strong></p>
<p><strong>Unfriendly URLs</strong></p>
<p>Most blog or CMS platforms have a friendly URL feature built-in, however, not every blogger is taking advantage of this. Friendly URL&#8217;s are good for both your human audience and the search engines. The URL is also an important spot where your keywords should appear.</p>
<p>Example of Friendly URL: domain.com/page-title<br />
Example of Dynamic URL: domain.com/?p=12356</p>
<p>These things are the pillars of Search Engine Optimization and so to your web site&#8217;s success path.</p>
<p><em>About the Author: Robin Dale is the publisher for www.teeky.org, we offer useful &amp; quality articles and news about Search Engine Optimization, Internet Marketing, Dedicated Server Hosting, Windows VPS Hosting UK, Linux VPS Hosting UK, e-commerce hosting, cPanel Hosting, hosting tips &amp; UK Web Hosting.</em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/05/08/seo-warning-for-developers-webmasters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Blackberry Pearl 8100 as a bluetooth modem under Vista RTM (explained)</title>
		<link>http://blog.nataprawira.com/tech/2009/04/23/using-blackberry-pearl-8100-as-a-bluetooth-modem-under-vista-rtm-explained/</link>
		<comments>http://blog.nataprawira.com/tech/2009/04/23/using-blackberry-pearl-8100-as-a-bluetooth-modem-under-vista-rtm-explained/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 01:02:14 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Blackberry]]></category>
		<category><![CDATA[8100]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[Modem]]></category>
		<category><![CDATA[Pearl]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=49</guid>
		<description><![CDATA[

Originally Posted by antineutrino  View Post
1. First, set up pairing between your PC (or laptop) and your BB:
Right-click on the bluetooth icon on the taskbar-&#62;Open Bluetooth settings-&#62;Add&#8230;-&#62;read instructions and set up a password if you want. Then look at your phone, it should ask you if you allow this connections, (and for the password.)
2. Make [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F23%2Fusing-blackberry-pearl-8100-as-a-bluetooth-modem-under-vista-rtm-explained%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F23%2Fusing-blackberry-pearl-8100-as-a-bluetooth-modem-under-vista-rtm-explained%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong><em>Originally Posted by antineutrino  <a href="http://www.blackberryforums.com/bluetooth-connection/73455-using-blackberry-pearl-8100-bluetooth-modem-under-vista-explained-post513740.html#post513740" target="_blank">View Post</a></em></strong></p>
<p><strong>1. First, set up pairing between your PC (or laptop) and your BB:</strong></p>
<p>Right-click on the bluetooth icon on the taskbar-&gt;Open Bluetooth settings-&gt;Add&#8230;-&gt;read instructions and set up a password if you want. Then look at your phone, it should ask you if you allow this connections, (and for the password.)</p>
<p><strong>2. Make sure you have the latest BlackBerry Desktop Manager (4.2 SP1 as of the time this was written.)</strong></p>
<p>Start it up, go to options -&gt; connection settings, check &#8220;Enable bluetooth support,&#8221; click on configure bluetooth -&gt; add&#8230; and add your device.</p>
<p>Then click ok, make sure your phone has bluetooth on. Your desktop manager should be now &#8220;connected&#8221; with the BB.</p>
<p><span id="more-49"></span></p>
<p><strong>3. Go back to the windows bluetooth settings (step 1.)</strong></p>
<p>Select the device, click Properties -&gt; Services and put a checkmark on &#8220;Dial-Up Networking.&#8221; Windows should be installing the drivers for the BT modem now automatically.</p>
<p><strong>4. Go to Control Panel -&gt; Hardware and Sound -&gt; Phone and Modem options -&gt; Modems</strong></p>
<p>select the Bluetooth modem, click on Properties, then click on &#8220;Change settings&#8221;, wait for the annoying popup, click Allow. Go to Advanced and put this in the field:</p>
<p><em><strong>** Provider specific from here on ***</strong></em></p>
<blockquote><p><em><strong></strong></em><strong>+cgdcont=1,&#8221;IP&#8221;,&#8221;wap.voicestream.com&#8221;</strong><br />
<em>(for T-Mobile. Please search other threads for different providers)</em></p></blockquote>
<p><strong>5. Set up a Dial-up connection. Go to Control Panel -&gt; Network and Internet -&gt; Network and Sharing Center -&gt; Set up a connection or a network &#8211; &gt; Set up a dial-up connection.</strong></p>
<p>Use &#8220;Standard modem over Bluetooth link.&#8221;<br />
Phone # <strong>*99#</strong><br />
Username/password are <strong>empty</strong>.</p>
<p><strong>6. Go back to Control panel -&gt; network and sharing center.</strong></p>
<p>Click on &#8220;Manage network connections&#8221; and right-click-&gt;properties on the one that you just created. Click on the modem -&gt; Configure -&gt; Uncheck &#8220;Enable hardware flow control&#8221; and uncheck &#8220;Enable speaker.&#8221; Click ok.</p>
<p>Go to &#8220;Networking Tab&#8221;, select Internet Protocol Version 4 and click on Properties-&gt;Advanced and uncheck &#8220;Use IP Header Compression&#8221;</p>
<p><strong>7. Dial and it should work.</strong></p>
<blockquote><p>If you have any questions, <strong><a href="http://www.blackberryforums.com/bluetooth-connection/73455-using-blackberry-pearl-8100-bluetooth-modem-under-vista-explained-2.html" target="_blank">reply to this thread</a></strong>.</p></blockquote>
<blockquote><p><em><strong>* Original Post : <a href="http://www.blackberryforums.com/bluetooth-connection/73455-using-blackberry-pearl-8100-bluetooth-modem-under-vista-explained-2.html" target="_blank">CLICK HERE</a><br />
* Relatively Post : <a href="http://www.blackberryforums.com/blackberry-guides/2019-user-howto-use-blackberry-modem-laptop.html" target="_blank">CLICK HERE</a></strong></em></p>
<p><em><strong>* More to Seach : <a href="http://www.google.com/search?q=blackberry+8100+bluetooth+drivers" target="_blank">GOOGLE</a></strong></em></p></blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/04/23/using-blackberry-pearl-8100-as-a-bluetooth-modem-under-vista-rtm-explained/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Securing Linux</title>
		<link>http://blog.nataprawira.com/tech/2009/04/12/securing-linux/</link>
		<comments>http://blog.nataprawira.com/tech/2009/04/12/securing-linux/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 00:49:07 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Secure]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=48</guid>
		<description><![CDATA[



Mod_security(ModSecurity is an open source intrusion detection and prevention engine for web applications)
Features 
•	filtering POST and GET requests (including hearders)
•	filters inheritance and ability to add filters in each vhosts configuration file, and    per directory
•	include a way to chroot apache in an easiest way
•	ability to fake apache output (like telling &#8220;Microsoft IIS&#8221; on error page or [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F12%2Fsecuring-linux%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F12%2Fsecuring-linux%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div id="matter_container">
<div class="matter_matter">
<h1 class="title">Mod_security(ModSecurity is an open source intrusion detection and prevention engine for web applications)</h1>
<h2><span class="content_title_blue">Features </span></h2>
<p><span class="content_text">•	filtering POST and GET requests (including hearders)<br />
•	filters inheritance and ability to add filters in each vhosts configuration file, and    per directory<br />
•	include a way to chroot apache in an easiest way<br />
•	ability to fake apache output (like telling &#8220;Microsoft IIS&#8221; on error page or whatever    you want to display)<br />
•	can store uploaded files in a tmp directory and call an anti-virus scan like clamav on     these files </span></p>
<p><span id="more-48"></span></p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.modsecurity.org/download/modsecurity-apache_1.9.4.tar.gz<br />
tar zxvf modsecurity-apache_1.9.4.tar.gz<br />
cd modsecurity-apache_1.9.4<br />
/usr/local/apache/bin/apxs -cia mod_security.c<br />
/usr/local/apache/bin/apachectl stop<br />
/usr/local/apache/bin/apachectl start</p>
<p class="content_text">Add required modsecurity directives in httpd.conf</p>
<h1 class="title">Mod_evasive( mod_evasive is intended to avoid DDOS attacks by baning IPs that have reached a configured limit of requests during a laps of time)</h1>
<h2><span class="content_title_blue">Features </span></h2>
<p><span class="content_text">•	Its quite easy to deploy on a webserver and can be very usefull.<br />
•	IP addresses of trusted clients can be whitelisted to insure they are never denied<br />
• This tool is excellent at fending off request-based DoS attacks or scripted<br />
attacks, and brute force attack </span></p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.zdziarski.com/projects/mod_evasive/mod_evasive_1.10.1.tar.gz<br />
1. Extract this archive into src/modules in the Apache source tree<br />
2. Run ./configure &#8211;add-module=src/modules/evasive/mod_evasive.c<br />
3. make, install<br />
4. Restart Apache<br />
With DSO Support, Ensim, or CPanel:<br />
1. /usr/local/apache/bin/apxs -iac mod_evasive.c<br />
2. Restart Apache</p>
<p class="content_text">Add required directive in httpd.conf</p>
<h1 class="title">Mod_limitipconn(mod_limitipconn allows web server administrators to limit the number of simultaneous downloads permitted from a single IP address)</h1>
<h2><span class="content_title_blue">Features </span></h2>
<p class="content_text">•	Allows inclusion and exclusion of files based on MIME type.<br />
•	Partially fixes the problem of dangling browser connections counting towards the    download limit</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget<br />
http://dominia.org/djao/limit/mod_limitipctar xzvf mod_limitipconn-0.04.tar.gz<br />
tar xzvf mod_limitipconn-0.04.tar.gz<br />
cd apache_1.3.27<br />
patch -p1 &lt; /root/mod_limitipconn-0.04/apachesrc.diff<br />
cp /root/mod_limitipconn-0.04/mod_limitipconn.c src/modules/extra/<br />
./configure &#8211;activate-module=src/modules/extra/mod_limitipconn.c &#8211;with-forward<br />
make ,install</p>
<p class="content_text"><strong>With DSO Support, Ensim, or CPanel:</strong><br />
1.cd mod_limitipconn-0.04<br />
2.make<br />
3.make install</p>
<p class="content_text">add required directives in httpd.conf</p>
<h1 class="title">APF (Advanced Policy Firewall is a policy based iptables firewall system designed for ease of use and configuration)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">- detailed and well commented configuration file<br />
- granular inbound and outbound network filtering<br />
- user id based outbound network filtering<br />
- application based network filtering<br />
- trust based rule files with an optional advanced syntax<br />
- global trust system where rules can be downloaded from a central management<br />
server<br />
- debug mode provided for testing new features and configuration setups<br />
- fast load feature that allows for 1000+ rules to load in under 1 second<br />
- inbound and outbound network interfaces can be independently configured<br />
- global tcp/udp port &amp; icmp type filtering with multiple methods of excuting<br />
filters (drop, reject, prohibit)<br />
- configurable policies for each ip on the system with convenience variables to<br />
import settings<br />
- packet flow rate limiting that prevents abuse on the most widely abused<br />
protocol, icmp<br />
- prerouting and postrouting rules for optimal network performance<br />
- dshield.org block list support to ban networks exhibiting suspicious activity<br />
- spamhaus Don&#8217;t Route Or Peer List support to ban known &#8220;hijacked zombie&#8221; IP<br />
blocks<br />
- antidos subsystem to stop attacks before they become a significant threat<br />
- any number of additional interfaces may be configured as firewalled<br />
(untrusted) or trusted (not firewalled)<br />
- additional firewalled interfaces can have there own unique firewall policies<br />
applied<br />
- intelligent route verification to prevent embarrassing configuration errors<br />
- advanced packet sanity checks to make sure traffic coming and going meets<br />
- filter attacks such as fragmented UDP, port zero floods, stuffed routing,<br />
arp poisoning and more<br />
- configurable type of service options to dictate the priority of different types<br />
of network traffic<br />
- intelligent default settings to meet every day server setups<br />
- dynamic configuration of your servers local DNS revolvers into the firewall<br />
- optional filtering of common p2p applications<br />
- optional filtering of private &amp; reserved IP address space<br />
- optional implicit blocks of the ident service<br />
- configurable connection tracking settings to scale the firewall to the size of<br />
your network<br />
- configurable kernel hooks (ties) to harden the system further to syn-flood<br />
attacks &amp; routing abuses<br />
- advanced network control such as explicit congestion notification and overflow<br />
control<br />
- special chains that are aware of the state of FTP DATA and SSH connections to<br />
prevent client side issues<br />
- control over the rate of logged events, want only 30 filter events a minute?<br />
300 a minute? &#8211; you are the boss<br />
- logging subsystem that allows for logging data to user space programs or<br />
standard syslog files<br />
- logging that details every rule added and a comprehensive set of error checks<br />
to prevent config errors<br />
- if you are familiar with netfilter you can create your own rules in any of<br />
the policy files<br />
- pluggable and ready advanced use of QoS algorithms provided by the Linux</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.rfxnetworks.com/downloads/apf-current.tar.gz<br />
tar -xvzf apf-current.tar.gz<br />
cd apf-0.9.6-2/<br />
./install.sh</p>
<p class="content_text">configure apf(/etc/apf/conf.apf) upon requrements</p>
<p class="content_text">then  start apf<br />
/usr/local/sbin/apf -s</p>
<h1 class="title">BFD( Brute Force Detection is a modular shell script for parsing applicable logs and checking for authentication</h1>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.rfxnetworks.com/downloads/bfd-current.tar.gz<br />
tar -xvzf bfd-current.tar.gz<br />
cd bfd-0.7<br />
./install.sh</p>
<p>configure bfd (/usr/local/bfd/conf.bfd ) upon requirements</p>
<p>to start bdf running<br />
/usr/local/sbin/bfd -s</p>
<h1 class="title">SIM (System Integrity Monitor is a system and services monitor for ‘SysVinit’ systems. It is designed to be intuitive and modular in nature)</h1>
<h2><span class="content_title_blue">Features </span></h2>
<p><span class="content_text">- Service monitoring of HTTP, FTP, DNS, SSH, MYSQL &amp; more<br />
- Event tracking and alert system<br />
- Auto restart ability for downed services<br />
- Checks against network sockets &amp; process list to ensure services are online<br />
- HTTP log size monitor, to avoid segfaults from apache due to large logs<br />
- URL Aware monitoring, to ensure HTTP does not &#8216;lockup&#8217;<br />
- System load monitor with customizable warning levels, actions, and more&#8230;<br />
- Informative command line status display<br />
- Easily customizable configuration file<br />
- Auto configuration script<br />
- Auto cronjob setup feature<br />
- Caching feature for ps/netstat output, to ease on runtime load<br />
- Simple &amp; Informative installation script<br />
- Integrated auto-update feature</span></p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.r-fx.org/downloads/sim-current.tar.gz<br />
tar -xzvf sim-current.tar.gz<br />
cd sim-2.5-4/<br />
./setup -i<br />
Then press &#8220;Enter&#8221;<br />
Then when it says MORE press the &#8220;space bar&#8221;<br />
Then press &#8220;Enter&#8221;<br />
Then when it says MORE press the &#8220;space bar&#8221;<br />
Now you will press ENTER one more time to do the auto-configuration script for SIM</p>
<p class="content_text">To add a cron.<br />
Type: ./setup -c<br />
If it says &#8220;Removed SIM cronjob.&#8221; then you must type it again.<br />
Type: ./setup -c</p>
<h1 class="title">Portsentry(  PortSentry is a tcpwrapper that listens for port scans, which can be used to send back fake ping replys)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">-help us to protect our network from unsolicited intrusions<br />
-we can choose which ports we want to be open and which one&#8217;s we dont</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.macosxunleashed.com/downloads/portsentry-1.0.tar.gz<br />
tar zxvfx portsentry-1.0.tar.gz<br />
cd  portsentry-1.0<br />
make linux<br />
make install</p>
<p class="content_text">conf file( /usr/local/psionic/portsentry/portsentry.conf)make relevant changes</p>
<h1 class="title">chkrootkit (it is a tool to locally check for signs of a rootkit)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text"><strong>*</strong> chkrootkit: shell script that checks system binaries for rootkit modification.<br />
<strong>*</strong> ifpromisc.c: checks if the interface is in promiscuous mode.<br />
<strong>*</strong> chklastlog.c: checks for lastlog deletions.<br />
<strong>*</strong> chkwtmp.c: checks for wtmp deletions.<br />
<strong>*</strong> check_wtmpx.c: checks for wtmpx deletions. (Solaris only)<br />
<strong>* </strong>chkproc.c: checks for signs of LKM trojans.<br />
<strong>*</strong> chkdirs.c: checks for signs of LKM trojans.<br />
<strong>*</strong> strings.c: quick and dirty strings replacement.<br />
<strong>*</strong> chkutmp.c: checks for utmp deletions.</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz<br />
tar zxvf chkrootkit.tar.gz<br />
cd chkrootkit-0.47/<br />
make sense<br />
./chkrootkit</p>
<p class="content_text">configure reporting cronjob:-</p>
<p class="content_text">cd /etc/cron.daily<br />
vi chkrootkit.cron<br />
#!/bin/bash<br />
cd /root/chkrootkit-0.47/<br />
./chkrootkit 2&gt;&amp;1 | mail –s “chkrootkit daily report” ndztest@gmail.com</p>
<p class="content_text">Save &amp; exit<br />
chmod +x chkrootkit.cron</p>
<h1 class="title">RKHunter (RootKit Hunter Is a security scanning tool which will scan for rootkits, backdoors, and local exploits)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">It runs many tests, including MD5 hash comparisons, default filenames used by rootkits, wrong file permissions for binaries, and suspicious strings in LKM and KLD modules</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://downloads.rootkit.nl/rkhunter-1.1.4.tar.gz<br />
tar -xzvf rkhunter-1.1.4.tar.gz<br />
cd rkhunter<br />
./installer.sh</p>
<p class="content_text">configure reporting cronjob:-<br />
cd /etc/cron.daily<br />
vi rkhunter.cron<br />
#!/bin/bash<br />
/usr/local/bin/rkhunter -c &#8211;cronjob 2&gt;&amp;1 | mail -s &#8220;RKhunter Scan Details&#8221; ndztest@gmail.com</p>
<p class="content_text">Save  &amp; exit<br />
chmod +x rkhunter.cron</p>
<h1 class="title">Snort(Snort is an open source network intrusion detection and prevention system)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">* capable of performing real-time traffic analysis, alerting, blocking and packet    logging on IP networks<br />
* Protocol Analysis<br />
* Content searching / matching<br />
* Real-time alerting capability<br />
* Can read in a TCPDump trace and run against a rule set<br />
* Flexible rules language to describe traffic that it should collect or pass</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.snort.org/dl/current/snort-2.6.1.5.tar.gz<br />
tar zxvf snort-2.6.1.5.tar.gz<br />
cd snort-2.6.1.5<br />
./configure<br />
make<br />
make install</p>
<p class="content_text">mkdir /etc/snort<br />
cp -rf etc/* /etc/snort</p>
<p class="content_text">change /etc/snort/snort.conf according to your requirements</p>
<h1 class="title">Tripwire(Tripwire data integrity assurance software monitors the reliability of critical system files and directories by identifying changes made to them)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">*  Centralized management console with web interface<br />
*  Centralized database that stores historical changes<br />
*  Tailorable reports and dashboards<br />
*  Customizable roles and permissions to ensure a secure audit trail<br />
*  Integration with change management systems, providing automated change     reconciliation</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">yum install tripwire</p>
<p class="content_text">/usr/sbin/tripwire-setup-keyfiles</p>
<p class="content_text">To generate database<br />
/usr/sbin/tripwire &#8211;init</p>
<p class="content_text">To view Tripwire database<br />
/usr/sbin/twprint -m d &#8211;print-dbfile | less</p>
<h1 class="title">libsafe(Libsafe is a library that try to prevent buffer overflow attack)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">* Detection and protection against stack smashing attacks</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://fresh.t-systems-sfr.com/linux/src/libsafe-2.0-16.tgz<br />
tar zxvfp libsafe-2.0-16.tgz<br />
cd libsafe-2.0-16<br />
make<br />
make install<br />
cd exploits<br />
make<br />
./int.sh t1<br />
- hit carraige return  and watch</p>
<p class="content_text">./int.sh t3<br />
- hit carraige return  and watch</p>
<p class="content_text">./int.sh t4<br />
- hit carraige return  and watch</p>
<p class="content_text">./xlock -nolock</p>
<p class="content_text">./canary-exploit</p>
<p class="content_text">./exploit-non-exec-stack</p>
<p class="content_text">Enable libsafe</p>
<p class="content_text">export LD_PRELOAD=/lib/libsafe.so.2</p>
<p class="content_text">Permanently install libsafe</p>
<p class="content_text">vi  /etc/profile<br />
export LD_PRELOAD=/lib/libsafe.so.2</p>
<h1 class="title">PHP mail() header patch(This patch attempts to address this weakness by inserting an informational header to messages sent from PHP via the mail() function)</h1>
<h2><span class="content_title_blue">Features</span></h2>
<p class="content_text">* The header identifies both the script and the apparent IP address that called it<br />
* This can make it difficult to trace misuse, even if you have comprehensive mail and    webserver logs</p>
<h2><span class="content_title_blue">Installation</span></h2>
<p class="content_text">wget http://www.lancs.ac.uk/~steveb/patches/php-mail-header-patch/php5-mail-header.patch</p>
<p class="content_text">cd /root/php-5.2.1<br />
patch -p1 &lt; ../php5-mail-header.patch</p>
<p class="content_text">Recompile Php</p>
<h1 class="title">Limit compiler and fetch utilities access to root only</h1>
<p class="content_text">chmod 700 /usr/bin/gcc<br />
chmod 700 /usr/bin/wget</p>
<h1 class="title">Ensure OpenSSH protocol is only using protocol 2</h1>
<p class="content_text">vi /etc/ssh/ssh_config<br />
Find the line #Protocol 2, 1 and change it to Protocol 2</p>
<h1 class="title">Disable DNS recursion</h1>
<p class="content_text">vi /etc/named.conf<br />
Give &#8220;recursion no;&#8221; in the &#8220;options&#8221; clause</p>
<p class="content_text">If you need to enable recursion for your local network<br />
give  allow-recursion { 192.168.1.1;192.168.1.20;192.168.1.21;192.168.1.59;192.168.1.22; } in &#8220;options&#8221; section</p>
<h1 class="title">Disable used services(eg:telnet)</h1>
<p class="content_text">vi /etc/xinetd.d/telnet<br />
replace &#8220;disable = no&#8221; and with &#8220;disable = yes&#8221;<br />
/etc/init.d/xinetd restart<br />
chkconfig telnet off<br />
chkconfig &#8211;del telnet<br />
Scan server to ensure port 23 is closed<br />
nmap -sT -O localhost</p>
<h1 class="title">Disable IP source routing</h1>
<p class="content_text">vi /etc/sysctl.conf</p>
<p class="content_text">net.ipv4.conf.default.accept_source_route = 0</p>
<h1 class="title">Ensure cannot SSH directly to root. Must SSH to admin first</h1>
<p class="content_text">For cPanel make sure you add your admin user to the ‘wheel’ group so that you will be able to ’su -’ to root<br />
After that<br />
vi /etc/ssh/sshd_config<br />
PermitRootLogin no</p>
<h1 class="title">Disable ICMP Redirect Acceptance  <span class="content_title_hash">(When hosts use a non-optimal or defunct route to a particular destination, an ICMP redirect packet is used by routers to inform the hosts what the correct route should be. If an attacker is able to forge ICMP redirect packets, he or she can alter the routing tables on the host and possibly subvert the security of the host by causing traffic to flow via a path you didn&#8217;t intend. It&#8217;s strongly recommended to disable ICMP Redirect Acceptance to protect your server from this hole.)</span></h1>
<p class="content_text">vi /etc/sysctl.conf<br />
net.ipv4.conf.all.accept_redirects = 0<br />
/etc/init.d/network restart</p>
<h1 class="title">Enforce noexec &amp; nosuid on temporary directories /tmp and /var/tmp</h1>
<p class="content_text">vi /etc/fstab<br />
LABEL=/tmp /tmp ext3 noexec,nosuid,rw 0 0<br />
/dev/shm /dev/shm tmpfs   noexec,nosuid defaults 0 0</p>
<p class="content_text">chmod 0777 /tmp</p>
<p class="content_text">umount /dev/shm<br />
mount /dev/shm<br />
rm -rf /var/tmp/<br />
ln -s /tmp/ /var/</p>
<h1 class="title">Enable IP spoofing protection( The spoofing protection prevents your network from being the source of spoofed i.e. forged communications that are often used in DoS attacks)</h1>
<p class="content_text">vi /etc/sysctl.conf<br />
net.ipv4.conf.all.rp_filter = 1<br />
/etc/init.d/network restart</p>
<h1 class="title">Enable syncookie protection</h1>
<p class="content_text">vi /etc/sysctl.conf<br />
net.ipv4.tcp_syncookies = 1<br />
/etc/init.d/network restart</p>
<h1 class="title">Disable certain php functions (system, exec, shell_exec)</h1>
<p class="content_text">vi /usr/local/lib/php.ini<br />
disable_functions = system, exec, shell_exec</p>
<h1 class="title">Harden host.conf</h1>
<p class="content_text">vi /etc/host.conf<br />
order hosts,bind<br />
nospoof on<br />
/etc/init.d/network restart</p>
<h1 class="title">Email spoofing prevention ( Email spoofing is the practice of changing your name in email so that it looks like the email came from somewhere or someone else.)</h1>
<p class="content_text"><strong>Router filtering</strong><br />
Putting a filter on your router is the first preventive step. By using an Access Control List, you can block private IP addresses.</p>
<p class="content_text"><strong>Encryption and authentication</strong><br />
By using encryption and authentication, you can reduce spoofing attacks. Ensuring the right authentication procedures are in place with a secure network will make it much more difficult for an attack to take place.</p>
<h1 class="title">Upgrade kernal to latest OS release</h1>
<p class="content_text">wget http://download.openvz.org/kernel/branches/2.6.20/2.6.20-ovz005.1<br />
//kernel-2.6.20-ovz005.1.i686.rpm<br />
rpm -ivh kernel-2.6.20-ovz005.1.i686.rpm</p>
</div>
</div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/04/12/securing-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Syntax to block an IP address under Linux</title>
		<link>http://blog.nataprawira.com/tech/2009/04/03/syntax-to-block-an-ip-address-under-linux/</link>
		<comments>http://blog.nataprawira.com/tech/2009/04/03/syntax-to-block-an-ip-address-under-linux/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 12:44:13 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Notes]]></category>
		<category><![CDATA[Block IP]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=47</guid>
		<description><![CDATA[



iptables -A INPUT -s IP-ADDRESS -j DROP

Replace IP-ADDRESS with actual IP address. For example if you wish to block ip address 65.55.44.100 for whatever reason then type command as follows:
iptables -A INPUT -s 65.55.44.100  -j DROP
If you have IP tables firewall script, add above rule to your script.
If you just want to block access [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F03%2Fsyntax-to-block-an-ip-address-under-linux%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F03%2Fsyntax-to-block-an-ip-address-under-linux%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<h2></h2>
<blockquote>
<pre><strong>iptables -A INPUT -s IP-ADDRESS -j DROP</strong></pre>
</blockquote>
<p>Replace IP-ADDRESS with actual IP address. For example if you wish to block ip address 65.55.44.100 for whatever reason then type command as follows:</p>
<blockquote><p><strong><code>iptables -A INPUT -s 65.55.44.100  -j DROP</code></strong></p></blockquote>
<p>If you have IP tables firewall script, add above rule to your script.</p>
<p>If you just want to block access to one port from an ip 65.55.44.100 to port 25 then type command:</p>
<blockquote><p><strong><code>iptables -A INPUT -s 65.55.44.100 -p tcp --destination-port 25 -j DROP</code></strong></p></blockquote>
<p>The above rule will drop all packets coming from IP  65.55.44.100 to port mail server port 25.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/04/03/syntax-to-block-an-ip-address-under-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An IDIOT trying to hack wordpress</title>
		<link>http://blog.nataprawira.com/tech/2009/04/03/an-idiot-trying-to-hack-wordpress/</link>
		<comments>http://blog.nataprawira.com/tech/2009/04/03/an-idiot-trying-to-hack-wordpress/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 12:35:08 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Notes]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=46</guid>
		<description><![CDATA[

[Fri Apr 03 20:31:30 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog
71.205.176.113 &#8211; - [03/Apr/2009:20:31:30 +0800] &#8220;POST /blog/alton4533734/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;
[Fri Apr 03 20:31:31 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog
71.205.176.113 &#8211; - [03/Apr/2009:20:31:31 +0800] &#8220;GET /blog/calandra8457410/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F03%2Fan-idiot-trying-to-hack-wordpress%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F04%2F03%2Fan-idiot-trying-to-hack-wordpress%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>[Fri Apr 03 20:31:30 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:30 +0800] &#8220;POST /blog/alton4533734/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:31 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:31 +0800] &#8220;GET /blog/calandra8457410/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;<br />
[Fri Apr 03 20:31:31 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:31 +0800] &#8220;GET /blog/alton4533734/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;</p>
<p><span id="more-46"></span><br />
[Fri Apr 03 20:31:32 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:32 +0800] &#8220;POST /blog/calandra8457410/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:32 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:32 +0800] &#8220;POST /blog/alton4533734/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:33 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:33 +0800] &#8220;POST /blog/quyen3136999/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:33 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:33 +0800] &#8220;GET /blog/quyen3136999/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;<br />
[Fri Apr 03 20:31:34 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:34 +0800] &#8220;POST /blog/quyen3136999/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:44 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:44 +0800] &#8220;POST /blog/williams1444475/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:45 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:45 +0800] &#8220;GET /blog/williams1444475/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;<br />
[Fri Apr 03 20:31:45 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:45 +0800] &#8220;POST /blog/williams1444475/wp-signup.php HTTP/1.1&#8243; 403 236 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:58 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:58 +0800] &#8220;POST /blog/huey9479157/wp-signup.php HTTP/1.1&#8243; 403 232 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:31:59 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:59 +0800] &#8220;GET /blog/huey9479157/wp-signup.php HTTP/1.1&#8243; 403 232 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;<br />
[Fri Apr 03 20:31:59 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:31:59 +0800] &#8220;POST /blog/huey9479157/wp-signup.php HTTP/1.1&#8243; 403 232 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:32:01 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:32:01 +0800] &#8220;POST /blog/cliff4256743/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:32:01 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:32:01 +0800] &#8220;GET /blog/cliff4256743/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;<br />
[Fri Apr 03 20:32:02 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:32:02 +0800] &#8220;POST /blog/cliff4256743/wp-signup.php HTTP/1.1&#8243; 403 233 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:32:03 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:32:03 +0800] &#8220;POST /blog/karlene8971285/wp-signup.php HTTP/1.1&#8243; 403 235 &#8220;-&#8221; &#8220;curl/7.18.2 (i386-pc-win32) libcurl/7.18.2 zlib/1.2.3&#8243;<br />
[Fri Apr 03 20:32:03 2009] [error] [client 71.205.176.113] client denied by server configuration: /home/yeo/public_html/blog<br />
71.205.176.113 &#8211; - [03/Apr/2009:20:32:03 +0800] &#8220;GET /blog/karlene8971285/wp-signup.php HTTP/1.1&#8243; 403 235 &#8220;-&#8221; &#8220;Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)&#8221;</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/04/03/an-idiot-trying-to-hack-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mixing PHP and SSI</title>
		<link>http://blog.nataprawira.com/tech/2009/03/24/mixing-php-and-ssi/</link>
		<comments>http://blog.nataprawira.com/tech/2009/03/24/mixing-php-and-ssi/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 03:54:53 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[SSI]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Mixing PHP and SSI]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=45</guid>
		<description><![CDATA[

This information is ONLY relevant to PHP4 and Apache 1.3. (BUT possible can be work also in PHP 5.x and Apache 2.x ) We historically used PHP for all our web work. We have decided to migrate to ruby for lots of reasons for all our new web development but we still have lots of [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F24%2Fmixing-php-and-ssi%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F24%2Fmixing-php-and-ssi%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>This information is ONLY relevant to PHP4 and Apache 1.3</strong>. <em><strong>(BUT possible can be work also in PHP 5.x and Apache 2.x )</strong></em> We historically used PHP for all our web work. We have decided to migrate to <a href="http://www.zytrax.com/tech/lang/ruby/" target="_blank">ruby</a> for lots of reasons for all our new web development but we still have lots of PHP stuff hanging around.</p>
<h3>Background</h3>
<p>We regularly mix PHP and SSIs for the following reasons:</p>
<ul>
<li>Laziness &#8211; we have a lot of historic SSI stuff lying around and do not want to change it. We prefer evolution to revolution.</li>
<li>Appropriateness. Not all systems are good at everything. We find that conditionally selecting &#8216;lumps&#8217; of code to deliver browser specific pages (see <a href="http://www.zytrax.com/tech/web/browser_sniffing.html" target="_blank">server side browser sniffing</a>) is a lot cleaner and easier with SSI. That does not take away from either technology.</li>
</ul>
<h3>Nesting PHP and SSI</h3>
<p>The rules go like this (PHP4 and Apache 1.3 &#8211; we understand that Apache 2 is more flexible but have not yet made the transition):</p>
<ol>
<li>You can invoke SSI files from within PHP but must use the PHP <strong>virtual()</strong> function not <strong>include()</strong>. Variables set within PHP are NOT available to SSI so our favorite &#8216;wheeze&#8217; of supplying last modified dates to a standard footer do not work.</li>
<li>You can include SSI files using the <a href="http://www.zytrax.com/tech/web/ssi.htm#include" target="_blank">include virtual</a> SSI directive but the SSI filename must have a .shtml extension even if the XBitHack is being used.</li>
<li>You cannot include PHP files using the <a href="http://www.zytrax.com/tech/web/ssi.htm#include" target="_blank">include virtual</a> SSI directive.</li>
<li>Variables set within the General Apache section (we use this <a href="http://www.zytrax.com/tech/web/browser_sniffing.html" target="_blank">technique for server side bowser sniffing</a>) are available to both .php and .shtml files no matter how they are called.</li>
</ol>
<p><strong>Note:</strong> We would guess that the Apache environment for each type of file (.php and .shtml) is initialised to the same state as when the page is first called, whereas a nested .php files uses the same php environment and therefore reflects any dynamic changes.</p>
<p><span id="more-45"></span></p>
<h2>Examples</h2>
<p>The following is our standard level 1 template implemented in SSI first and then PHP.</p>
<h3>SSI Version</h3>
<pre>&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Language" content="en-us"&gt;
&lt;meta http-equiv="Content-Type" content="text/html"&gt;
&lt;meta name="GENERATOR" content="company"&gt;
&lt;!--#include virtual="/templates/meta.html" --&gt;
&lt;title&gt;Level 1 template&lt;/title&gt;
&lt;!-- conditionally generated style sheet --&gt;
&lt;!--#include virtual="/templates/styles.shtml" --&gt;
&lt;!-- conditionally generated javascript code --&gt;
&lt;!--#include virtual="/scripts/javascript.shtml" --&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;!-- banner/page headings --&gt;
&lt;!--#include virtual="/templates/level_1.shtml" --&gt;
&lt;div class="page-content"&gt;

&lt;!-- unique page contents go here --&gt;

&lt;/div&gt;
&lt;!--#config timefmt="%B %d %Y" --&gt;
&lt;!--#set var="real_date" value="$LAST_MODIFIED" --&gt;
&lt;!--#include virtual="/templates/footer.shtml" --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h3>PHP Version</h3>
<pre>&lt;!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Language" content="en-us"&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=windows-1252"&gt;
&lt;meta name="GENERATOR" content="company"&gt;
&lt;meta name="keywords" content="blah, blah"&gt;
&lt;title&gt;Cool Tools&lt;/title&gt;
&lt;?php
&lt;!-- conditionally generated style sheet --&gt;
  virtual ("/templates/styles.shtml");
&lt;!-- conditionally generated javascript code --&gt;
  virtual ("/scripts/javascript.shtml");
?&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
&lt;!-- banner/page headings --&gt;
  virtual ("/templates/level_1.shtml");
?&gt;
&lt;div class="page-content"&gt;

&lt;!-- unique page contents go here --&gt;

&lt;/div&gt;
&lt;?php
  $real_date = date("F d, Y.", getlastmod());
  include ("../templates/footer.php");
?&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><strong>Notes:</strong></p>
<ol>
<li>You will notice that the styles, javascript and standard page navigation header use the PHP <strong>virtual()</strong> function because they contain SSI directives but the files are otherwise unchanged.</li>
<li>Our SSI &#8216;last modified&#8217; date &#8216;wheeze&#8217; for the footer does not work in a mixed PHP/SSI environment (because you cannot pass variables between PHP and SSI). Instead we have to create a &#8220;footer.php&#8221; file and set the variable &#8216;real_date&#8217; using the PHP <strong>date()</strong> and  <strong>getlastmod()</strong> functions. This file is invoked with the <strong>include()</strong> function because it is a standard PHP file. In &#8216;footer.php&#8217; we just use &#8216;echo $real_date&#8217; to place our last modified date in the output stream. Yes its simpler in PHP but now we have to maintain two versions of our standard footer.</li>
</ol>
<p><strong><a title="http://www.zytrax.com/tech/php/php_ssi.htm" href="http://www.zytrax.com/tech/php/php_ssi.htm" target="_blank">Original</a></strong></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/03/24/mixing-php-and-ssi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Use .htaccess to block a range of IP</title>
		<link>http://blog.nataprawira.com/tech/2009/03/21/use-htaccess-to-block-a-range-of-ip/</link>
		<comments>http://blog.nataprawira.com/tech/2009/03/21/use-htaccess-to-block-a-range-of-ip/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 10:05:46 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Block IP]]></category>
		<category><![CDATA[HTaccess]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=44</guid>
		<description><![CDATA[

Question:
I am having troubles with serverpronto bots attacking my site in droves.
How would I block this range of ip address in .htaccess using deny:
69.60.114.0 &#8211; 69.60.125.255
for example, to block one ip I would have:
Deny from 64.251.14.99
But how would I block the whole range given?
Thank you in advance
jdMorgan
Answer:

Denying 69.60.114.0 &#8211; 69.60.125.255
Any of the following:
Deny from 64.251.114
Deny [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F21%2Fuse-htaccess-to-block-a-range-of-ip%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F21%2Fuse-htaccess-to-block-a-range-of-ip%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>Question:</strong></p>
<blockquote><p>I am having troubles with serverpronto bots attacking my site in droves.</p>
<p>How would I block this range of ip address in .htaccess using deny:</p>
<p>69.60.114.0 &#8211; 69.60.125.255</p>
<p>for example, to block one ip I would have:<br />
Deny from 64.251.14.99</p>
<p>But how would I block the whole range given?</p>
<p>Thank you in advance<br />
jdMorgan</p></blockquote>
<p><strong>Answer:</strong></p>
<p><span id="more-44"></span></p>
<p>Denying 69.60.114.0 &#8211; 69.60.125.255</p>
<p>Any of the following:</p>
<blockquote><p>Deny from 64.251.114<br />
Deny from 64.251.115<br />
Deny from 64.251.116<br />
Deny from 64.251.117<br />
Deny from 64.251.118<br />
Deny from 64.251.119<br />
Deny from 64.251.120<br />
Deny from 64.251.121<br />
Deny from 64.251.122<br />
Deny from 64.251.123<br />
Deny from 64.251.124<br />
Deny from 64.251.125</p></blockquote>
<p>-or-</p>
<blockquote><p># Deny 69.60.114.0 &#8211; 69.60.115.255 (512 addresses)<br />
Deny from 69.60.114.0/23<br />
# Deny 69.60.116.0 &#8211; 69.60.119.255 (1024 addresses)<br />
Deny from 69.60.116.0/22<br />
# Deny 69.60.120.0 &#8211; 69.60.123.255 (1024 addresses)<br />
Deny From 69.60.120.0/22<br />
# Deny 69.60.124.0 &#8211; 69.60.125.255 (512 addresses)<br />
Deny from 69.60.124.0/23</p></blockquote>
<p>-or-</p>
<blockquote><p># Deny 69.60.114.0 &#8211; 69.60.115.255 (512 addresses)<br />
Deny from 69.60.114.0/255.255.254.0<br />
# Deny 69.60.116.0 &#8211; 69.60.119.255 (1024 addresses)<br />
Deny from 69.60.116.0/255.255.252.0<br />
# Deny 69.60.120.0 &#8211; 69.60.123.255 (1024 addresses)<br />
Deny From 69.60.120.0/255.255.252.0<br />
# Deny 69.60.124.0 &#8211; 69.60.125.255 (512 addresses)<br />
Deny from 69.60.124.0/255.255.254.0</p></blockquote>
<p>-or-</p>
<blockquote><p>Setenvif Remote-Addr &#8220;^69\.60\.1(1[4-9]¦2[0-5])\.&#8221; getout<br />
Deny from getout</p></blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/03/21/use-htaccess-to-block-a-range-of-ip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP configuration inside httpd.conf</title>
		<link>http://blog.nataprawira.com/tech/2009/03/13/php-configuration-inside-httpdconf/</link>
		<comments>http://blog.nataprawira.com/tech/2009/03/13/php-configuration-inside-httpdconf/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 13:53:34 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[httpd.conf]]></category>
		<category><![CDATA[PHP Configuration]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=43</guid>
		<description><![CDATA[

How to set PHP error notice hidden in httpd.conf (vhost):

&#60;VirtualHost *:80&#62;
  ...
  php_flag display_startup_errors off
  php_flag display_errors off
  php_flag html_errors off
  ...
&#60;/VirtualHost&#62;

How to set individual php.ini in httpd.conf (vhost):

&#60;VirtualHost *:80&#62;
  ...
  PHPIniDir '/path/to/php/conf/php-foo.ini'
  ...
&#60;/VirtualHost&#62;

How to set individual PHPError.log in httpd.conf (vhost):

&#60;VirtualHost *:80&#62;
  ...
  php_flag  [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F13%2Fphp-configuration-inside-httpdconf%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F03%2F13%2Fphp-configuration-inside-httpdconf%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>How to set PHP error notice hidden in httpd.conf (vhost):</strong></p>
<blockquote>
<pre>&lt;VirtualHost *:80&gt;
  ...
  php_flag display_startup_errors off
  php_flag display_errors off
  php_flag html_errors off
  ...
&lt;/VirtualHost&gt;</pre>
</blockquote>
<p><strong>How to set individual php.ini in httpd.conf (vhost):</strong></p>
<blockquote>
<pre>&lt;VirtualHost *:80&gt;
  ...
  PHPIniDir '/path/to/php/conf/php-foo.ini'
  ...
&lt;/VirtualHost&gt;</pre>
</blockquote>
<p><strong>How to set individual PHPError.log in httpd.conf (vhost):</strong></p>
<blockquote>
<pre>&lt;VirtualHost *:80&gt;
  ...
  php_flag  log_errors on
  php_value error_log  /path/to/site/PHPerror.log
  ...
&lt;/VirtualHost&gt;</pre>
</blockquote>
<p><a title="http://perishablepress.com/press/2007/12/17/how-to-enable-php-error-logging-via-htaccess/" rel="nofollow" href="http://perishablepress.com/press/2007/12/17/how-to-enable-php-error-logging-via-htaccess/" target="_blank">Complete Information</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/03/13/php-configuration-inside-httpdconf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install FFmpeg in Linux (RPM Version)</title>
		<link>http://blog.nataprawira.com/tech/2009/02/27/install-ffmpeg-in-linux-rpm-version/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/27/install-ffmpeg-in-linux-rpm-version/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 10:57:06 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[RPM]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[DAG]]></category>
		<category><![CDATA[FFMPEG]]></category>
		<category><![CDATA[FFMPEG-PHP]]></category>
		<category><![CDATA[FlvTool2]]></category>
		<category><![CDATA[GLIBC]]></category>
		<category><![CDATA[Mencoder]]></category>
		<category><![CDATA[Mplayer]]></category>
		<category><![CDATA[Repo]]></category>
		<category><![CDATA[RPM Installation]]></category>
		<category><![CDATA[RPMFORGE]]></category>
		<category><![CDATA[RUBY]]></category>
		<category><![CDATA[Yum]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=42</guid>
		<description><![CDATA[

How to Install FFmpeg in Linux ~The Easy Way~
Original Post
FFmpeg is so important    if you are planning to run a video website with streaming with conversion of    video files to different video formats. This tutorial is intended for Centos/Redhat    versions of Linux where any novice user [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F27%2Finstall-ffmpeg-in-linux-rpm-version%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F27%2Finstall-ffmpeg-in-linux-rpm-version%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<h1>How to Install FFmpeg in Linux ~The Easy Way~</h1>
<p><strong><a title="http://www.mysql-apache-php.com/ffmpeg-install.htm" href="http://www.mysql-apache-php.com/ffmpeg-install.htm" target="_blank"><em>Original Post</em></a></strong></p>
<p><a href="http://ffmpeg.mplayerhq.hu/" target="_blank">FFmpeg</a> is so important    if you are planning to run a video website with streaming with conversion of    video files to different video formats. This tutorial is intended for Centos/Redhat    versions of Linux where any novice user can install ffmpeg without compiling    the source which is a more traditional way of installing the FFmpeg software    on linux servers. In this tutorial i will show you the easy way to install ffmpeg    and ffmpeg-php (php extension) with just yum rather than compiling ffmpeg from    source files.</p>
<blockquote><p>FFmpeg (<a href="http://ffmpeg.mplayerhq.hu/" target="_blank">http://ffmpeg.mplayerhq.hu</a>)<br />
Mplayer + Mencoder (<a href="http://www.mplayerhq.hu/design7/dload.html" target="_blank">http://www.mplayerhq.hu/design7/dload.html</a>)<br />
Flv2tool (<a href="http://inlet-media.de/flvtool2" target="_blank">http://inlet-media.de/flvtool2</a>)<br />
Libogg + Libvorbis (<a href="http://www.xiph.org/downloads" target="_blank">http://www.xiph.org/downloads</a>)<br />
LAME MP3 Encoder (<a href="http://lame.sourceforge.net/" target="_blank">http://lame.sourceforge.net</a>)<br />
FlowPlayer &#8211; A Free Flash Video Player &#8211; <a href="http://flowplayer.org/" target="_blank">http://flowplayer.org/</a></p></blockquote>
<h1>Installing FFMpeg</h1>
<p><span id="more-42"></span></p>
<blockquote><p><strong>yum install ffmpeg ffmpeg-devel</strong></p></blockquote>
<p>If you get <strong>package not found, </strong>then you will need to add few    lines in the yum repository for dag packages installation. Create a file named    <strong>dag.repo</strong> in <strong>/etc/yum.repos.d</strong> with the following    contents on it</p>
<blockquote><p><strong>[dag]<br />
name=Dag RPM Repository for Red Hat Enterprise Linux<br />
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag<br />
gpgcheck=1<br />
enabled=1</strong></p></blockquote>
<p>then</p>
<blockquote><p><strong>yum install ffmpeg ffmpeg-devel</strong></p></blockquote>
<p>If everything is fine, then the installation should proceed smoothly. If not    you will get something like warning GPG public key missing .</p>
<h2>Common Errors</h2>
<p><strong>To fix rpmforge GPG key warning: </strong></p>
<blockquote><p><strong>rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm</strong></p></blockquote>
<p>For more information refer to <a href="http://dag.wieers.com/rpm/FAQ.php#B4" target="_blank"><strong>this    faq </strong></a>depending on Centos version</p>
<p><strong>Missing Dependency Error:</strong></p>
<p>If you get missing dependency error like shown below, in the middle of ffmpeg    installation</p>
<blockquote><p><strong><span class="box">Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed    by package ffmpeg<br />
Error: Missing Dependency: libtheora.so.0(libtheora.so.1.0) is needed by package    ffmpeg<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package ffmpeg<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package imlib2<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package a52dec<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package imlib2<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package gsm<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package x264<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package xvidcore<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package lame<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package a52dec<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package faad2<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package x264<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package lame<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package xvidcore<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package faac<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package faad2<br />
Error: Missing Dependency: libgif.so.4 is needed by package imlib2<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package faac<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package gsm<br />
Error: Missing Dependency: libpng12.so.0(PNG12_0) is needed by package imlib2<br />
Error: Missing Dependency: rtld(GNU_HASH) is needed by package libmp4v2<br />
Error: Missing Dependency: libc.so.6(GLIBC_2.4) is needed by package libmp4v2</span></strong></p></blockquote>
<p>then most commonly you have GLIB 2.3 installed instead of GLIB 2.4 version.    To check the current GLIB version installed on your server. just use:</p>
<blockquote><p><strong>yum list glib*</strong></p></blockquote>
<p>and it should list the latest GLIB package version.</p>
<p>The reason i was getting this error was my rpmforge packages was pointed to    centos 5 versions instead of centos 4.6.</p>
<p><strong>To fix dependency error:</strong></p>
<p>To fix this error, you might need to check your rpmforge packages compatible    to the release of your existing CentOS version.<br />
Check the file <strong>/etc/yum.repos.d/rpmforge.repo </strong>and it should    look like for Centos 4.6(Final). If you have lines like <strong>http://apt.sw.be/redhat/<span style="color: #0000ff">el5</span>/en/mirrors-rpmforge </strong> you might need to make changes to the <strong>rpmforge.repos</strong> like shown below</p>
<blockquote><p><strong>Note:</strong> Backup the original<strong> rpmforge.repo</strong> file    before you edit its content.</p></blockquote>
<blockquote><p><strong><span class="box">[rpmforge]<br />
name = Red Hat Enterprise $releasever &#8211; RPMforge.net &#8211; dag<br />
#baseurl = http://apt.sw.be/redhat/<span style="color: #0000ff">el4</span>/en/$basearch/dag<br />
mirrorlist = http://apt.sw.be/redhat/<span style="color: #0000ff">el4</span>/en/mirrors-rpmforge<br />
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge<br />
enabled = 1<br />
protect = 0<br />
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag<br />
gpgcheck = 1</span></strong></p></blockquote>
<p><strong>To know what linux type and version you are running </strong></p>
<blockquote><p><strong>cat /etc/redhat-release</strong></p></blockquote>
<p>Once this is done, do again:  <strong>yum install ffmpeg. </strong></p>
<p>This trick resolved the problem in my linux box running Centos 4.6 and this    is the <em>only way</em> i found to install ffmpeg using yum.</p>
<h2>To check the FFmpeg working:</h2>
<p>Finally, check the ffmpeg whether it is working or not.</p>
<blockquote><p><strong>&gt; ffmpeg<br />
&gt; ffmpeg -formats<br />
&gt; ffmpeg &#8211;help<br />
</strong>// This lists path of mpeg, its modules and other path information</p></blockquote>
<blockquote><p><strong> ffmpeg -i Input.file Output.file</strong></p></blockquote>
<h2>To check what audi/video formats are supported</h2>
<blockquote><p><strong>ffmpeg -formats &gt; ffmpeg-format.txt</strong></p></blockquote>
<p>Open the <strong>ffmpeg-formats.txt</strong> to see the ooutput</p>
<blockquote><p><strong>D means decode<br />
E means encode<br />
V means video<br />
A means audio<br />
T = Truncated</strong></p></blockquote>
<h1>Install FFMPEG-PHP Extension</h1>
<p><a href="http://ffmpeg-php.sourceforge.net/" target="_blank">FFmpeg-php</a> is a very good extension and wrapper for PHP which can pull useful information    about video through API interface. Inorder to install it you will need to download    the source file and then compile and install extension in your server. You can    download the source tarball : <a href="http://ffmpeg-php.sourceforge.net/" target="_blank">http://ffmpeg-php.sourceforge.net/</a></p>
<blockquote><p><strong>wget /path/to/this/file/ffmpeg-php-0.5.2.1.tbz2</strong></p>
<p><strong>tar -xjf ffmpeg-0.5.2.1.tbz2</strong></p>
<p><strong>phpize</strong></p>
<p><strong>./configure<br />
make<br />
make install</strong></p></blockquote>
<p><strong>Common Errors</strong></p>
<p><strong>1.</strong> If you get <strong>command not found error</strong> for    phpize, then you will need to do <strong>yum install php-devel</strong></p>
<p><strong>2.</strong> If you get error like <strong>&#8220;ffmpeg headers not    found&#8221;</strong> while configuring the source.</p>
<blockquote><p><strong>configure: error: ffmpeg headers not found. Make sure ffmpeg is    compiled as shared libraries using the &#8211;enable-shared option</strong></p></blockquote>
<p>then it means you have not installed<strong> ffmpeg-devel</strong> packages.</p>
<p><strong>To Fix:</strong> Just install <strong>ffmpeg-devel</strong> using</p>
<blockquote><p><strong>yum install ffmpeg-devel</strong></p></blockquote>
<p><strong>3. </strong>If you get an error like shared libraries not found problem    and the program halts in the middle, then you must specify the ffmpeg installed    path explicitly to the ./configure.</p>
<blockquote><p><strong>configure: error: ffmpeg shared libraries not found. Make sure    ffmpeg is compiled as shared libraries using the &#8211;enable-shared option</strong></p></blockquote>
<p><strong>To Fix:</strong></p>
<p>1. First find out the ffmpeg path with <strong>ffmpeg &#8211;help</strong> command.    The prefix default path should be like <strong>/usr/local/cpffmpeg</strong><br />
2. Configure the FFmpeg-php with &#8211;with-ffmpeg option</p>
<blockquote><p><strong>./configure &#8211;with-ffmpeg=/usr/local/cpffmpeg</strong></p></blockquote>
<p>That should resolve the problem!</p>
<h2>Editing PHP.INI</h2>
<p>Once you have done that without any problems then you will see the php extension    file <strong>/usr/local/lib/php/extensions/no-debug-non-zts-20060613/ffmpeg.so</strong> and you will need mention that extension in php.ini file</p>
<blockquote><p><strong>nano /usr/local/lib/php.ini</strong></p></blockquote>
<p>Put the below two lines at the end of the <strong>php.ini</strong> file</p>
<blockquote><p><strong>[ffmpeg]<br />
extension=ffmpeg.so</strong></p></blockquote>
<p>Then restart the server <strong>service httpd restart</strong></p>
<p>To check whether <strong>ffmpeg enabled with php</strong>, point your browser    to <strong>test.php</strong> file. It should show the confirmation of installed    ffmpeg php extension</p>
<blockquote><p><strong>// #test.php</strong></p>
<p><strong> &lt;?php</strong></p>
<p><strong>phpinfo()</strong></p>
<p><strong>?&gt;</strong></p></blockquote>
<p>If any case the ffmpeg does not show in the phpinfo() test make sure that php.ini    path to ffmpeg.so is correct. Still the problem occurs, the reason could be    you might be using older versions of ffmpeg-php which is buggy. Just download    the latest version of ffmpeg-php source then compile it.</p>
<h1>Installing Mplayer + Mencoder</h1>
<p>Just issue the following yum commands to install the rest of the packages.</p>
<blockquote><p><strong>yum install mplayer mencoder</strong></p></blockquote>
<h1>Installing FlvTool2</h1>
<p>Flvtool2 is a flash video file manipulation tool. It can calculate metadata    and can cut and edit cue points for flv files.</p>
<p>If you are on Centos 5 try <strong>yum install flvtool2</strong> with dag    repository and if you get package not found you will need to manually download    and compile the flvtool2. You can download latest version of flvtool2 here:    <a href="http://rubyforge.org/projects/flvtool2/" target="_blank">http://rubyforge.org/projects/flvtool2/</a></p>
<blockquote><p><strong>wget &lt;url-link&gt;</strong></p>
<p><strong>ruby setup.rb config<br />
ruby setup.rb setup<br />
sudo ruby setup.rb install</strong></p></blockquote>
<p>If you get <strong>command not found</strong> error, it probably means that    you dont have ruby installed.</p>
<blockquote><p><strong>yum install ruby</strong></p></blockquote>
<p>Thats it! Once ffmpeg works fine with php extension, download a sample video,    convert to .flv format in the command line and plug it to <strong><a href="http://flowplayer.org/" target="_blank">flowplayer</a></strong> to see it work on your web browser. Try also to download the video file offline    and see whether the converted flv file works well with both audio and video.</p>
<h2>Useful Links</h2>
<ul>
<li>FFmpeg (<a href="http://ffmpeg.mplayerhq.hu/" target="_blank">http://ffmpeg.mplayerhq.hu</a>)</li>
<li>Mplayer + Mencoder (<a href="http://www.mplayerhq.hu/design7/dload.html" target="_blank">http://www.mplayerhq.hu/design7/dload.html</a>)</li>
<li>Flv2tool (<a href="http://inlet-media.de/flvtool2" target="_blank">http://inlet-media.de/flvtool2</a>)</li>
<li>Libogg + Libvorbis (<a href="http://www.xiph.org/downloads" target="_blank">http://www.xiph.org/downloads</a>)</li>
<li>LAME MP3 Encoder (<a href="http://lame.sourceforge.net/" target="_blank">http://lame.sourceforge.net</a>)</li>
<li>FlowPlayer &#8211; A Free Flash Video Player &#8211; <a href="http://flowplayer.org/" target="_blank">http://flowplayer.org/</a></li>
<li>Install FFmpeg from Compiling Source (<a href="http://rshagrawal.blogspot.com/2007/12/howt-o-for-installing-ffmpeg.html" target="_blank">Tutorial    Link</a>)</li>
<li>Nice FFmpeg Installation Tutorial (<a href="http://forums.theplanet.com/index.php?showtopic=64541" target="_blank">click    here</a>)</li>
<li>Important Audio Codecs (<a href="http://www.mplayerhq.hu/DOCS/HTML/en/audio-codecs.html" target="_blank">http://www.mplayerhq.hu/DOCS/HTML/en/audio-codecs.html</a>)</li>
<li>Common Errors &amp; Fixes while Installing FFmpeg (<a href="http://www.webmasterpals.com/forumdisplay.php?f=6" target="_blank">click    here</a>)</li>
</ul>
<p><!-- Kontera ContentLink(TM);--></p>
<p><!-- Kontera ContentLink(TM) --></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/27/install-ffmpeg-in-linux-rpm-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compiling PHP 5.2.x / cannot find -lltdl</title>
		<link>http://blog.nataprawira.com/tech/2009/02/26/compiling-php-52x-cannot-find-lltdl/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/26/compiling-php-52x-cannot-find-lltdl/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 10:35:11 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[BASH]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[cannot find -lltdl]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=41</guid>
		<description><![CDATA[

 When compiling PHP from source, some of the CentOS users reported that they getting errors like below:

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status

What you need to do, is just follow the below steps.

Verify that the libtool and libtool-ltdl packages are installed.
Symlink libltdl.so to libltdl.so.x.x.x

If libtool and libtool-ltdl already exist, you may go [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F26%2Fcompiling-php-52x-cannot-find-lltdl%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F26%2Fcompiling-php-52x-cannot-find-lltdl%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<hr size="1" /><!-- / icon and title --> <!-- message -->When compiling PHP from source, some of the CentOS users reported that they getting errors like below:</p>
<div style="margin: 5px 20px 20px">
<pre style="border: 1px inset;margin: 0px;padding: 6px;width: 640px;height: 50px;text-align: left"><strong>/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status</strong></pre>
</div>
<p>What you need to do, is just follow the below steps.</p>
<ol>
<li><strong>Verify that the libtool and libtool-ltdl packages are installed.</strong></li>
<li><strong>Symlink libltdl.so to libltdl.so.x.x.x</strong></li>
</ol>
<p>If libtool and libtool-ltdl already exist, you may go to Step Two.<br />
<strong> Step One</strong></p>
<div style="margin: 5px 20px 20px">
<pre style="border: 1px inset;margin: 0px;padding: 6px;width: 640px;height: 34px;text-align: left">[root@banzaibill ~]# <strong>yum install libtool-ltdl libtool</strong></pre>
</div>
<p>Now you have <strong>libtool</strong> installed. To check it out, do:</p>
<div style="margin: 5px 20px 20px">
<pre style="border: 1px inset;margin: 0px;padding: 6px;width: 640px;height: 34px;text-align: left">[root@banzaibill ~]# <strong>yum info libtool*</strong></pre>
</div>
<p><strong> Step Two</strong></p>
<p>PHP looks for the libltdl library only at <strong>/usr/lib/libltdl.so</strong></p>
<p>The symlink to this file is not included in the libtool packages. Do below commands:</p>
<div style="margin: 5px 20px 20px">
<pre style="border: 1px inset;margin: 0px;padding: 6px;width: 640px;height: 50px;text-align: left">[root@banzaibill ~]# <strong>cd /usr/lib</strong>
[root@banzaibill lib]# <strong>ln -s libltdl.so.3.1.4 libltdl.so</strong></pre>
</div>
<p>And that&#8217;s it. PHP should configure and compile without error.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/26/compiling-php-52x-cannot-find-lltdl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Firewalls with IPTABLES (Good Tutorials)</title>
		<link>http://blog.nataprawira.com/tech/2009/02/23/linux-firewalls-with-iptables-good-tutorials/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/23/linux-firewalls-with-iptables-good-tutorials/#comments</comments>
		<pubDate>Mon, 23 Feb 2009 14:39:06 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Firewall]]></category>
		<category><![CDATA[IPTables]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=38</guid>
		<description><![CDATA[

I found good examples for this.
- Quick HOWTO (from LinuxHomeNetworking.com) &#8211; download
- Sample IPTABLES Configuration (RedHat/CentOS) &#8211; download
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F23%2Flinux-firewalls-with-iptables-good-tutorials%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F23%2Flinux-firewalls-with-iptables-good-tutorials%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>I found good examples for this.</p>
<p>- <strong><a title="Quick HOWTO" href="http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables" target="_blank">Quick HOWTO</a></strong> (from LinuxHomeNetworking.com) &#8211; <a title="DOWNLOAD" href="http://blog.nataprawira.com/tech/files/2009/02/linux-firewalls-using-iptables.pdf" target="_blank">download</a></p>
<p>- <strong><a title="Sample IPTables Configuration" href="http://www.liniac.upenn.edu/sysadmin/security/iptables.html" target="_blank">Sample IPTABLES Configuration</a></strong> (RedHat/CentOS) &#8211; <a title="DOWNLOAD" href="http://blog.nataprawira.com/tech/files/2009/02/sample-iptables-configuration-redhat.pdf" target="_blank">download</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/23/linux-firewalls-with-iptables-good-tutorials/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RPM failed to start</title>
		<link>http://blog.nataprawira.com/tech/2009/02/20/rpm-failed-to-start/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/20/rpm-failed-to-start/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 08:49:34 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[RPM]]></category>
		<category><![CDATA[Failed]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=37</guid>
		<description><![CDATA[

When you&#8217;re running REDHAT/CENTOS platform for your server, sometimes the RPM wont run normally or become stuck. This caused by the RPM database not properly builded or been corrupted.
Errors would be like : 
rpmdb: Program version 4.3 doesn&#8217;t match environment version
error: db4 error(-30974) from dbenv-&#62;open: DB_VERSION_MISMATCH: Database environment version mismatch
error: cannot open Packages index using [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F20%2Frpm-failed-to-start%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F20%2Frpm-failed-to-start%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>When you&#8217;re running REDHAT/CENTOS platform for your server, sometimes the RPM wont run normally or become stuck. This caused by the RPM database not properly builded or been corrupted.</p>
<p>Errors would be like :<strong> </strong></p>
<blockquote><p><strong>rpmdb: Program version 4.3 doesn&#8217;t match environment version<br />
error: db4 error(-30974) from dbenv-&gt;open: DB_VERSION_MISMATCH: Database environment version mismatch<br />
error: cannot open Packages index using db3 &#8211; (-30974)<br />
error: cannot open Packages database in /var/lib/rpm</strong></p>
<p><strong>rpmdb: Program version 4.3 doesn&#8217;t match environment version<br />
error: db4 error(-30974) from dbenv-&gt;open: DB_VERSION_MISMATCH: Database environment version mismatch<br />
error: cannot open Packages database in /var/lib/rpm</strong></p></blockquote>
<p>So, to solve those issues,<br />
you can run these commands from <strong>ROOT </strong>access:</p>
<blockquote><p><strong>rm -f /var/lib/rpm/__db*<br />
rpm -vv &#8211;rebuilddb</strong></p></blockquote>
<p><em>The &#8216;-vv&#8217; parameter on rpm, will STDOUT.</em></p>
<p>To run it as background process, do:</p>
<blockquote><p><strong>rpm &#8211;rebuilddb &amp;</strong></p></blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/20/rpm-failed-to-start/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to protect your website using simple PHP scripts</title>
		<link>http://blog.nataprawira.com/tech/2009/02/20/how-to-protect-your-website-using-simple-php-scripts/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/20/how-to-protect-your-website-using-simple-php-scripts/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 04:51:10 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Protection]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=36</guid>
		<description><![CDATA[

Just put below on your top line of the scripts :
$ips = array(&#8221;127.0.0.1&#8243;,&#8221;aaa.bbb.ccc&#8221;,&#8221;xxx.yyy.zzz&#8221;);
$userip = $_SERVER['REMOTE_ADDR'];
foreach ($ips as $ip) {
if (!preg_match(&#8221;/$ip/i&#8221;, $userip)) {
echo &#8220;Access Denied!&#8221;;
exit;
}
}
Notes:
$ips is the allowed IP address range
Other way, you can use .htaccess to protect directories/files.
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F20%2Fhow-to-protect-your-website-using-simple-php-scripts%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F20%2Fhow-to-protect-your-website-using-simple-php-scripts%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Just put below on your top line of the scripts :</p>
<p><strong>$ips = array(&#8221;127.0.0.1&#8243;,&#8221;aaa.bbb.ccc&#8221;,&#8221;xxx.yyy.zzz&#8221;);<br />
$userip = $_SERVER['REMOTE_ADDR'];<br />
foreach ($ips as $ip) {<br />
if (!preg_match(&#8221;/$ip/i&#8221;, $userip)) {<br />
echo &#8220;Access Denied!&#8221;;<br />
exit;<br />
}<br />
}</strong></p>
<p><span style="text-decoration: underline">Notes</span>:<br />
$ips is the allowed IP address range</p>
<p>Other way, you can use .htaccess to protect directories/files.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/20/how-to-protect-your-website-using-simple-php-scripts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTML Color Codes (Charts)</title>
		<link>http://blog.nataprawira.com/tech/2009/02/19/html-color-codes-charts/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/19/html-color-codes-charts/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 08:08:14 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Charts]]></category>
		<category><![CDATA[Color Code]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=35</guid>
		<description><![CDATA[

Major hexadecimal color codes



Color
Color Code
Color
Color Code


Red
#FF0000
White
#FFFFFF


Turquoise
#00FFFF
Light Grey
#C0C0C0


Light Blue
#0000FF
Dark Grey
#808080


Dark Blue
#0000A0
Black
#000000


Light Purple
#FF0080
Orange
#FF8040


Dark Purple
#800080
Brown
#804000


Yellow
#FFFF00
Burgundy
#800000


Pastel Green
#00FF00
Forest Green
#808000


Pink
#FF00FF
Grass Green
#408080



Color code chart




COLOR NAME
CODE
COLOR


Black
#000000
Black


Gray0
#150517
Gray0


Gray18
#250517
Gray18


Gray21
#2B1B17
Gray21


Gray23
#302217
Gray23


Gray24
#302226
Gray24


Gray25
#342826
Gray25


Gray26
#34282C
Gray26


Gray27
#382D2C
Gray27


Gray28
#3b3131
Gray28


Gray29
#3E3535
Gray29


Gray30
#413839
Gray30


Gray31
#41383C
Gray31


Gray32
#463E3F
Gray32


Gray34
#4A4344
Gray34


Gray35
#4C4646
Gray35


Gray36
#4E4848
Gray36


Gray37
#504A4B
Gray37


Gray38
#544E4F
Gray38


Gray39
#565051
Gray39


Gray40
#595454
Gray40


Gray41
#5C5858
Gray41


Gray42
#5F5A59
Gray42


Gray43
#625D5D
Gray43


Gray44
#646060
Gray44


Gray45
#666362
Gray45


Gray46
#696565
Gray46


Gray47
#6D6968
Gray47


Gray48
#6E6A6B
Gray48


Gray49
#726E6D
Gray49


Gray50
#747170
Gray50


Gray
#736F6E
Gray


Slate Gray4
#616D7E
Slate Gray4


Slate Gray
#657383
Slate Gray


Light Steel Blue4
#646D7E
Light Steel Blue4


Light Slate Gray
#6D7B8D
Light Slate Gray


Cadet Blue4
#4C787E
Cadet Blue4


Dark Slate Gray4
#4C7D7E
Dark Slate Gray4


Thistle4
#806D7E
Thistle4


Medium Slate Blue
#5E5A80
Medium Slate Blue


Medium Purple4
#4E387E
Medium Purple4


Midnight Blue
#151B54
Midnight Blue


Dark Slate Blue
#2B3856
Dark Slate Blue


Dark Slate Gray
#25383C
Dark Slate Gray


Dim Gray
#463E41
Dim Gray


Cornflower Blue
#151B8D
Cornflower [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F19%2Fhtml-color-codes-charts%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F19%2Fhtml-color-codes-charts%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>Major hexadecimal color codes</strong></p>
<table class="mtable" style="width: 100%" border="0" cellspacing="1" cellpadding="5">
<tbody>
<tr class="tcb wt">
<td>Color</td>
<td>Color Code</td>
<td>Color</td>
<td>Color Code</td>
</tr>
<tr class="tcw">
<td><span style="color: #ff0000">Red</span></td>
<td>#FF0000</td>
<td>White</td>
<td>#FFFFFF</td>
</tr>
<tr class="tcw">
<td><span style="color: #00ffff">Turquoise</span></td>
<td>#00FFFF</td>
<td><span class="rg">Light Grey</span></td>
<td>#C0C0C0</td>
</tr>
<tr class="tcw">
<td><span style="color: #0000ff">Light Blue</span></td>
<td>#0000FF</td>
<td><span style="color: #808080">Dark Grey</span></td>
<td>#808080</td>
</tr>
<tr class="tcw">
<td><span style="color: #0000a0">Dark Blue</span></td>
<td>#0000A0</td>
<td>Black</td>
<td>#000000</td>
</tr>
<tr class="tcw">
<td><span style="color: #ff0080">Light Purple</span></td>
<td>#FF0080</td>
<td><span style="color: #ff8040">Orange</span></td>
<td>#FF8040</td>
</tr>
<tr class="tcw">
<td><span style="color: #800080">Dark Purple</span></td>
<td>#800080</td>
<td><span style="color: #804000">Brown</span></td>
<td>#804000</td>
</tr>
<tr class="tcw">
<td><span style="color: #ffff00">Yellow</span></td>
<td>#FFFF00</td>
<td><span style="color: #800000">Burgundy</span></td>
<td>#800000</td>
</tr>
<tr class="tcw">
<td><span style="color: #00ff00">Pastel Green</span></td>
<td>#00FF00</td>
<td><span style="color: #808000">Forest Green</span></td>
<td>#808000</td>
</tr>
<tr class="tcw">
<td><span style="color: #ff00ff">Pink</span></td>
<td>#FF00FF</td>
<td><span style="color: #408080">Grass Green</span></td>
<td>#408080</td>
</tr>
</tbody>
</table>
<p><strong><span class="nb"><a name="03"></a>Color code chart</span></strong></p>
<p><span id="more-35"></span></p>
<table class="mtable" border="0" cellspacing="1" cellpadding="5" width="100%">
<tbody>
<tr class="tcb wt">
<td width="25%">COLOR NAME</td>
<td width="25%">CODE</td>
<td class="wt" width="25%">COLOR</td>
</tr>
<tr>
<td class="tcw" width="25%">Black</td>
<td class="tcw" width="25%">#000000</td>
<td class="tcbl" width="25%"><strong>Black</strong></td>
</tr>
<tr>
<td class="tcw">Gray0</td>
<td class="tcw">#150517</td>
<td class="wt" bgcolor="#150517"><strong>Gray0</strong></td>
</tr>
<tr>
<td class="tcw">Gray18</td>
<td class="tcw">#250517</td>
<td class="wt" bgcolor="#250517"><strong>Gray18</strong></td>
</tr>
<tr>
<td class="tcw">Gray21</td>
<td class="tcw">#2B1B17</td>
<td class="wt" bgcolor="#2b1b17"><strong>Gray21</strong></td>
</tr>
<tr>
<td class="tcw">Gray23</td>
<td class="tcw">#302217</td>
<td class="wt" bgcolor="#302217"><strong>Gray23</strong></td>
</tr>
<tr>
<td class="tcw">Gray24</td>
<td class="tcw">#302226</td>
<td class="wt" bgcolor="#302226"><strong>Gray24</strong></td>
</tr>
<tr>
<td class="tcw">Gray25</td>
<td class="tcw">#342826</td>
<td class="wt" bgcolor="#342826"><strong>Gray25</strong></td>
</tr>
<tr>
<td class="tcw">Gray26</td>
<td class="tcw">#34282C</td>
<td class="wt" bgcolor="#34282c"><strong>Gray26</strong></td>
</tr>
<tr>
<td class="tcw">Gray27</td>
<td class="tcw">#382D2C</td>
<td class="wt" bgcolor="#382d2c"><strong>Gray27</strong></td>
</tr>
<tr>
<td class="tcw">Gray28</td>
<td class="tcw">#3b3131</td>
<td class="wt" bgcolor="#3b3131"><strong>Gray28</strong></td>
</tr>
<tr>
<td class="tcw">Gray29</td>
<td class="tcw">#3E3535</td>
<td class="wt" bgcolor="#3e3535"><strong>Gray29</strong></td>
</tr>
<tr>
<td class="tcw">Gray30</td>
<td class="tcw">#413839</td>
<td class="wt" bgcolor="#413839"><strong>Gray30</strong></td>
</tr>
<tr>
<td class="tcw">Gray31</td>
<td class="tcw">#41383C</td>
<td class="wt" bgcolor="#41383c"><strong>Gray31</strong></td>
</tr>
<tr>
<td class="tcw">Gray32</td>
<td class="tcw">#463E3F</td>
<td class="wt" bgcolor="#463e3f"><strong>Gray32</strong></td>
</tr>
<tr>
<td class="tcw">Gray34</td>
<td class="tcw">#4A4344</td>
<td class="wt" bgcolor="#4a4344"><strong>Gray34</strong></td>
</tr>
<tr>
<td class="tcw">Gray35</td>
<td class="tcw">#4C4646</td>
<td class="wt" bgcolor="#4c4646"><strong>Gray35</strong></td>
</tr>
<tr>
<td class="tcw">Gray36</td>
<td class="tcw">#4E4848</td>
<td class="wt" bgcolor="#4e4848"><strong>Gray36</strong></td>
</tr>
<tr>
<td class="tcw">Gray37</td>
<td class="tcw">#504A4B</td>
<td class="wt" bgcolor="#504a4b"><strong>Gray37</strong></td>
</tr>
<tr>
<td class="tcw">Gray38</td>
<td class="tcw">#544E4F</td>
<td class="wt" bgcolor="#544e4f"><strong>Gray38</strong></td>
</tr>
<tr>
<td class="tcw">Gray39</td>
<td class="tcw">#565051</td>
<td class="wt" bgcolor="#565051"><strong>Gray39</strong></td>
</tr>
<tr>
<td class="tcw">Gray40</td>
<td class="tcw">#595454</td>
<td class="wt" bgcolor="#595454"><strong>Gray40</strong></td>
</tr>
<tr>
<td class="tcw">Gray41</td>
<td class="tcw">#5C5858</td>
<td class="wt" bgcolor="#5c5858"><strong>Gray41</strong></td>
</tr>
<tr>
<td class="tcw">Gray42</td>
<td class="tcw">#5F5A59</td>
<td class="wt" bgcolor="#5f5a59"><strong>Gray42</strong></td>
</tr>
<tr>
<td class="tcw">Gray43</td>
<td class="tcw">#625D5D</td>
<td class="wt" bgcolor="#625d5d"><strong>Gray43</strong></td>
</tr>
<tr>
<td class="tcw">Gray44</td>
<td class="tcw">#646060</td>
<td class="wt" bgcolor="#646060"><strong>Gray44</strong></td>
</tr>
<tr>
<td class="tcw">Gray45</td>
<td class="tcw">#666362</td>
<td class="wt" bgcolor="#666362"><strong>Gray45</strong></td>
</tr>
<tr>
<td class="tcw">Gray46</td>
<td class="tcw">#696565</td>
<td class="wt" bgcolor="#696565"><strong>Gray46</strong></td>
</tr>
<tr>
<td class="tcw">Gray47</td>
<td class="tcw">#6D6968</td>
<td class="wt" bgcolor="#6d6968"><strong>Gray47</strong></td>
</tr>
<tr>
<td class="tcw">Gray48</td>
<td class="tcw">#6E6A6B</td>
<td class="wt" bgcolor="#6e6a6b"><strong>Gray48</strong></td>
</tr>
<tr>
<td class="tcw">Gray49</td>
<td class="tcw">#726E6D</td>
<td class="wt" bgcolor="#726e6d"><strong>Gray49</strong></td>
</tr>
<tr>
<td class="tcw">Gray50</td>
<td class="tcw">#747170</td>
<td class="wt" bgcolor="#747170"><strong>Gray50</strong></td>
</tr>
<tr>
<td class="tcw">Gray</td>
<td class="tcw">#736F6E</td>
<td class="wt" bgcolor="#736f6e"><strong>Gray</strong></td>
</tr>
<tr>
<td class="tcw">Slate Gray4</td>
<td class="tcw">#616D7E</td>
<td class="wt" bgcolor="#616d7e"><strong>Slate Gray4</strong></td>
</tr>
<tr>
<td class="tcw">Slate Gray</td>
<td class="tcw">#657383</td>
<td class="wt" bgcolor="#657383"><strong>Slate Gray</strong></td>
</tr>
<tr>
<td class="tcw">Light Steel Blue4</td>
<td class="tcw">#646D7E</td>
<td class="wt" bgcolor="#646d7e"><strong>Light Steel Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Light Slate Gray</td>
<td class="tcw">#6D7B8D</td>
<td class="wt" bgcolor="#6d7b8d"><strong>Light Slate Gray</strong></td>
</tr>
<tr>
<td class="tcw">Cadet Blue4</td>
<td class="tcw">#4C787E</td>
<td class="wt" bgcolor="#4c787e"><strong>Cadet Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Gray4</td>
<td class="tcw">#4C7D7E</td>
<td class="wt" bgcolor="#4c7d7e"><strong>Dark Slate Gray4</strong></td>
</tr>
<tr>
<td class="tcw">Thistle4</td>
<td class="tcw">#806D7E</td>
<td class="wt" bgcolor="#806d7e"><strong>Thistle4</strong></td>
</tr>
<tr>
<td class="tcw">Medium Slate Blue</td>
<td class="tcw">#5E5A80</td>
<td class="wt" bgcolor="#5e5a80"><strong>Medium Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Medium Purple4</td>
<td class="tcw">#4E387E</td>
<td class="wt" bgcolor="#4e387e"><strong>Medium Purple4</strong></td>
</tr>
<tr>
<td class="tcw">Midnight Blue</td>
<td class="tcw">#151B54</td>
<td class="wt" bgcolor="#151b54"><strong>Midnight Blue</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Blue</td>
<td class="tcw">#2B3856</td>
<td class="wt" bgcolor="#2b3856"><strong>Dark Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Gray</td>
<td class="tcw">#25383C</td>
<td class="wt" bgcolor="#25383c"><strong>Dark Slate Gray</strong></td>
</tr>
<tr>
<td class="tcw">Dim Gray</td>
<td class="tcw">#463E41</td>
<td class="wt" bgcolor="#463e41"><strong>Dim Gray</strong></td>
</tr>
<tr>
<td class="tcw">Cornflower Blue</td>
<td class="tcw">#151B8D</td>
<td class="wt" bgcolor="#151b8d"><strong>Cornflower Blue</strong></td>
</tr>
<tr>
<td class="tcw">Royal Blue4</td>
<td class="tcw">#15317E</td>
<td class="wt" bgcolor="#15317e"><strong>Royal Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Slate Blue4</td>
<td class="tcw">#342D7E</td>
<td class="wt" bgcolor="#342d7e"><strong>Slate Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Royal Blue</td>
<td class="tcw">#2B60DE</td>
<td class="wt" bgcolor="#2b60de"><strong>Royal Blue</strong></td>
</tr>
<tr>
<td class="tcw">Royal Blue1</td>
<td class="tcw">#306EFF</td>
<td class="wt" bgcolor="#306eff"><strong>Royal Blue1</strong></td>
</tr>
<tr>
<td class="tcw">Royal Blue2</td>
<td class="tcw">#2B65EC</td>
<td class="wt" bgcolor="#2b65ec"><strong>Royal Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Royal Blue3</td>
<td class="tcw">#2554C7</td>
<td class="wt" bgcolor="#2554c7"><strong>Royal Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Deep Sky Blue</td>
<td class="tcw">#3BB9FF</td>
<td class="wt" bgcolor="#3bb9ff"><strong>Deep Sky Blue</strong></td>
</tr>
<tr>
<td class="tcw">Deep Sky Blue2</td>
<td class="tcw">#38ACEC</td>
<td class="wt" bgcolor="#38acec"><strong>Deep Sky Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Slate Blue</td>
<td class="tcw">#3574EC7</td>
<td class="wt" bgcolor="#357ec7"><strong>Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Deep Sky Blue3</td>
<td class="tcw">#3090C7</td>
<td class="wt" bgcolor="#3090c7"><strong>Deep Sky Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Deep Sky Blue4</td>
<td class="tcw">#25587E</td>
<td class="wt" bgcolor="#25587e"><strong>Deep Sky Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Dodger Blue</td>
<td class="tcw">#1589FF</td>
<td class="wt" bgcolor="#1589ff"><strong>Dodger Blue</strong></td>
</tr>
<tr>
<td class="tcw">Dodger Blue2</td>
<td class="tcw">#157DEC</td>
<td class="wt" bgcolor="#157dec"><strong>Dodger Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Dodger Blue3</td>
<td class="tcw">#1569C7</td>
<td class="wt" bgcolor="#1569c7"><strong>Dodger Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Dodger Blue4</td>
<td class="tcw">#153E7E</td>
<td class="wt" bgcolor="#153e7e"><strong>Dodger Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Steel Blue4</td>
<td class="tcw">#2B547E</td>
<td class="wt" bgcolor="#2b547e"><strong>Steel Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Steel Blue</td>
<td class="tcw">#4863A0</td>
<td class="wt" bgcolor="#4863a0"><strong>Steel Blue</strong></td>
</tr>
<tr>
<td class="tcw">Slate Blue2</td>
<td class="tcw">#6960EC</td>
<td class="wt" bgcolor="#6960ec"><strong>Slate Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Violet</td>
<td class="tcw">#8D38C9</td>
<td class="wt" bgcolor="#8d38c9"><strong>Violet</strong></td>
</tr>
<tr>
<td class="tcw">Medium Purple3</td>
<td class="tcw">#7A5DC7</td>
<td class="wt" bgcolor="#7a5dc7"><strong>Medium Purple3</strong></td>
</tr>
<tr>
<td class="tcw">Medium Purple</td>
<td class="tcw">#8467D7</td>
<td class="wt" bgcolor="#8467d7"><strong>Medium Purple</strong></td>
</tr>
<tr>
<td class="tcw">Medium Purple2</td>
<td class="tcw">#9172EC</td>
<td class="wt" bgcolor="#9172ec"><strong>Medium Purple2</strong></td>
</tr>
<tr>
<td class="tcw">Medium Purple1</td>
<td class="tcw">#9E7BFF</td>
<td class="wt" bgcolor="#9e7bff"><strong>Medium Purple1</strong></td>
</tr>
<tr>
<td class="tcw">Light Steel Blue</td>
<td class="tcw">#728FCE</td>
<td class="wt" bgcolor="#728fce"><strong>Light Steel Blue</strong></td>
</tr>
<tr>
<td class="tcw">Steel Blue3</td>
<td class="tcw">#488AC7</td>
<td class="wt" bgcolor="#488ac7"><strong>Steel Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Steel Blue2</td>
<td class="tcw">#56A5EC</td>
<td class="wt" bgcolor="#56a5ec"><strong>Steel Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Steel Blue1</td>
<td class="tcw">#5CB3FF</td>
<td class="wt" bgcolor="#5cb3ff"><strong>Steel Blue1</strong></td>
</tr>
<tr>
<td class="tcw">Sky Blue3</td>
<td class="tcw">#659EC7</td>
<td class="wt" bgcolor="#659ec7"><strong>Sky Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Sky Blue4</td>
<td class="tcw">#41627E</td>
<td class="wt" bgcolor="#41627e"><strong>Sky Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Slate Blue</td>
<td class="tcw">#737CA1</td>
<td class="wt" bgcolor="#737ca1"><strong>Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Slate Blue</td>
<td class="tcw">#737CA1</td>
<td class="wt" bgcolor="#737ca1"><strong>Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Slate Gray3</td>
<td class="tcw">#98AFC7</td>
<td class="wt" bgcolor="#98afc7"><strong>Slate Gray3</strong></td>
</tr>
<tr>
<td class="tcw">Violet Red</td>
<td class="tcw">#F6358A</td>
<td class="wt" bgcolor="#f6358a"><strong>Violet Red</strong></td>
</tr>
<tr>
<td class="tcw">Violet Red1</td>
<td class="tcw">#F6358A</td>
<td class="wt" bgcolor="#f6358a"><strong>Violet Red1</strong></td>
</tr>
<tr>
<td class="tcw">Violet Red2</td>
<td class="tcw">#E4317F</td>
<td class="wt" bgcolor="#e4317f"><strong>Violet Red2</strong></td>
</tr>
<tr>
<td class="tcw">Deep Pink</td>
<td class="tcw">#F52887</td>
<td class="wt" bgcolor="#f52887"><strong>Deep Pink</strong></td>
</tr>
<tr>
<td class="tcw">Deep Pink2</td>
<td class="tcw">#E4287C</td>
<td class="wt" bgcolor="#e4287c"><strong>Deep Pink2</strong></td>
</tr>
<tr>
<td class="tcw">Deep Pink3</td>
<td class="tcw">#C12267</td>
<td class="wt" bgcolor="#c12267"><strong>Deep Pink3</strong></td>
</tr>
<tr>
<td class="tcw">Deep Pink4</td>
<td class="tcw">#7D053F</td>
<td class="wt" bgcolor="#7d053f"><strong>Deep Pink4</strong></td>
</tr>
<tr>
<td class="tcw">Medium Violet Red</td>
<td class="tcw">#CA226B</td>
<td class="wt" bgcolor="#ca226b"><strong>Medium Violet Red</strong></td>
</tr>
<tr>
<td class="tcw">Violet Red3</td>
<td class="tcw">#C12869</td>
<td class="wt" bgcolor="#c12869"><strong>Violet Red3</strong></td>
</tr>
<tr>
<td class="tcw">Firebrick</td>
<td class="tcw">#800517</td>
<td class="wt" bgcolor="#800517"><strong>Firebrick</strong></td>
</tr>
<tr>
<td class="tcw">Violet Red4</td>
<td class="tcw">#7D0541</td>
<td class="wt" bgcolor="#7d0541"><strong>Violet Red4</strong></td>
</tr>
<tr>
<td class="tcw">Maroon4</td>
<td class="tcw">#7D0552</td>
<td class="wt" bgcolor="#7d0552"><strong>Maroon4</strong></td>
</tr>
<tr>
<td class="tcw">Maroon</td>
<td class="tcw">#810541</td>
<td class="wt" bgcolor="#810541"><strong>Maroon</strong></td>
</tr>
<tr>
<td class="tcw">Maroon3</td>
<td class="tcw">#C12283</td>
<td class="wt" bgcolor="#c12283"><strong>Maroon3</strong></td>
</tr>
<tr>
<td class="tcw">Maroon2</td>
<td class="tcw">#E3319D</td>
<td class="wt" bgcolor="#e3319d"><strong>Maroon2</strong></td>
</tr>
<tr>
<td class="tcw">Maroon1</td>
<td class="tcw">#F535AA</td>
<td class="wt" bgcolor="#f535aa"><strong>Maroon1</strong></td>
</tr>
<tr>
<td class="tcw">Magenta</td>
<td class="tcw">#FF00FF</td>
<td class="wt" bgcolor="#ff00ff"><strong>Magenta</strong></td>
</tr>
<tr>
<td class="tcw">Magenta1</td>
<td class="tcw">#F433FF</td>
<td class="wt" bgcolor="#f433ff"><strong>Magenta1</strong></td>
</tr>
<tr>
<td class="tcw">Magenta2</td>
<td class="tcw">#E238EC</td>
<td class="wt" bgcolor="#e238ec"><strong>Magenta2</strong></td>
</tr>
<tr>
<td class="tcw">Magenta3</td>
<td class="tcw">#C031C7</td>
<td class="wt" bgcolor="#c031c7"><strong>Magenta3</strong></td>
</tr>
<tr>
<td class="tcw">Medium Orchid</td>
<td class="tcw">#B048B5</td>
<td class="wt" bgcolor="#b048b5"><strong>Medium Orchid</strong></td>
</tr>
<tr>
<td class="tcw">Medium Orchid1</td>
<td class="tcw">#D462FF</td>
<td class="wt" bgcolor="#d462ff"><strong>Medium Orchid1</strong></td>
</tr>
<tr>
<td class="tcw">Medium Orchid2</td>
<td class="tcw">#C45AEC</td>
<td class="wt" bgcolor="#c45aec"><strong>Medium Orchid2</strong></td>
</tr>
<tr>
<td class="tcw">Medium Orchid3</td>
<td class="tcw">#A74AC7</td>
<td class="wt" bgcolor="#a74ac7"><strong>Medium Orchid3</strong></td>
</tr>
<tr>
<td class="tcw">Medium Orchid4</td>
<td class="tcw">#6A287E</td>
<td class="wt" bgcolor="#6a287e"><strong>Medium Orchid4</strong></td>
</tr>
<tr>
<td class="tcw">Purple</td>
<td class="tcw">#8E35EF</td>
<td class="wt" bgcolor="#8e35ef"><strong>Purple</strong></td>
</tr>
<tr>
<td class="tcw">Purple1</td>
<td class="tcw">#893BFF</td>
<td class="wt" bgcolor="#893bff"><strong>Purple1</strong></td>
</tr>
<tr>
<td class="tcw">Purple2</td>
<td class="tcw">#7F38EC</td>
<td class="wt" bgcolor="#7f38ec"><strong>Purple2</strong></td>
</tr>
<tr>
<td class="tcw">Purple3</td>
<td class="tcw">#6C2DC7</td>
<td class="wt" bgcolor="#6c2dc7"><strong>Purple3</strong></td>
</tr>
<tr>
<td class="tcw">Purple4</td>
<td class="tcw">#461B7E</td>
<td class="wt" bgcolor="#461b7e"><strong>Purple4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orchid4</td>
<td class="tcw">#571B7e</td>
<td class="wt" bgcolor="#571b7e"><strong>Dark Orchid4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orchid</td>
<td class="tcw">#7D1B7E</td>
<td class="wt" bgcolor="#7d1b7e"><strong>Dark Orchid</strong></td>
</tr>
<tr>
<td class="tcw">Dark Violet</td>
<td class="tcw">#842DCE</td>
<td class="wt" bgcolor="#842dce"><strong>Dark Violet</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orchid3</td>
<td class="tcw">#8B31C7</td>
<td class="wt" bgcolor="#8b31c7"><strong>Dark Orchid3</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orchid2</td>
<td class="tcw">#A23BEC</td>
<td class="wt" bgcolor="#a23bec"><strong>Dark Orchid2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orchid1</td>
<td class="tcw">#B041FF</td>
<td class="wt" bgcolor="#b041ff"><strong>Dark Orchid1</strong></td>
</tr>
<tr>
<td class="tcw">Plum4</td>
<td class="tcw">#7E587E</td>
<td class="wt" bgcolor="#7e587e"><strong>Plum4</strong></td>
</tr>
<tr>
<td class="tcw">Pale Violet Red</td>
<td class="tcw">#D16587</td>
<td class="wt" bgcolor="#d16587"><strong>Pale Violet Red</strong></td>
</tr>
<tr>
<td class="tcw">Pale Violet Red1</td>
<td class="tcw">#F778A1</td>
<td class="wt" bgcolor="#f778a1"><strong>Pale Violet Red1</strong></td>
</tr>
<tr>
<td class="tcw">Pale Violet Red2</td>
<td class="tcw">#E56E94</td>
<td class="wt" bgcolor="#e56e94"><strong>Pale Violet Red2</strong></td>
</tr>
<tr>
<td class="tcw">Pale Violet Red3</td>
<td class="tcw">#C25A7C</td>
<td class="wt" bgcolor="#c25a7c"><strong>Pale Violet Red3</strong></td>
</tr>
<tr>
<td class="tcw">Pale Violet Red4</td>
<td class="tcw">#7E354D</td>
<td class="wt" bgcolor="#7e354d"><strong>Pale Violet Red4</strong></td>
</tr>
<tr>
<td class="tcw">Plum</td>
<td class="tcw">#B93B8F</td>
<td class="wt" bgcolor="#b93b8f"><strong>Plum</strong></td>
</tr>
<tr>
<td class="tcw">Plum1</td>
<td class="tcw">#F9B7FF</td>
<td class="wt" bgcolor="#f9b7ff"><strong>Plum1</strong></td>
</tr>
<tr>
<td class="tcw">Plum2</td>
<td class="tcw">#E6A9EC</td>
<td class="wt" bgcolor="#e6a9ec"><strong>Plum2</strong></td>
</tr>
<tr>
<td class="tcw">Plum3</td>
<td class="tcw">#C38EC7</td>
<td class="wt" bgcolor="#c38ec7"><strong>Plum3</strong></td>
</tr>
<tr>
<td class="tcw">Thistle</td>
<td class="tcw">#D2B9D3</td>
<td class="wt" bgcolor="#d2b9d3"><strong>Thistle</strong></td>
</tr>
<tr>
<td class="tcw">Thistle3</td>
<td class="tcw">#C6AEC7</td>
<td class="wt" bgcolor="#c6aec7"><strong>Thistle3</strong></td>
</tr>
<tr>
<td class="tcw">Lavendar Blush2</td>
<td class="tcw">#EBDDE2</td>
<td class="wt" bgcolor="#ebdde2"><strong>Lavender Blush2</strong></td>
</tr>
<tr>
<td class="tcw">Lavendar Blush3</td>
<td class="tcw">#C8BBBE</td>
<td class="wt" bgcolor="#c8bbbe"><strong>Lavender Blush3</strong></td>
</tr>
<tr>
<td class="tcw">Thistle2</td>
<td class="tcw">#E9CFEC</td>
<td class="wt" bgcolor="#d9cfec"><strong>Thistle2</strong></td>
</tr>
<tr>
<td class="tcw">Thistle1</td>
<td class="tcw">#FCDFFF</td>
<td class="wt" bgcolor="#fcdfff"><strong>Thistle1</strong></td>
</tr>
<tr>
<td class="tcw">Lavendar</td>
<td class="tcw">#E3E4FA</td>
<td class="wt" bgcolor="#e3e4fa"><strong>Lavender</strong></td>
</tr>
<tr>
<td class="tcw">Lavendar Blush</td>
<td class="tcw">#FDEEF4</td>
<td class="wt" bgcolor="#fdeef4"><strong>Lavender Blush</strong></td>
</tr>
<tr>
<td class="tcw">Light Steel Blue1</td>
<td class="tcw">#C6DEFF</td>
<td class="wt" bgcolor="#c6deff"><strong>Light Steel Blue1</strong></td>
</tr>
<tr>
<td class="tcw">Light Blue</td>
<td class="tcw">#ADDFFF</td>
<td class="wt" bgcolor="#addfff"><strong>Light Blue</strong></td>
</tr>
<tr>
<td class="tcw">Light Blue1</td>
<td class="tcw">#BDEDFF</td>
<td class="wt" bgcolor="#bdedff"><strong>Light Blue1</strong></td>
</tr>
<tr>
<td class="tcw">Light Cyan</td>
<td class="tcw">#E0FFFF</td>
<td bgcolor="#e0ffff"><strong>Light Cyan</strong></td>
</tr>
<tr>
<td class="tcw">Slate Gray1</td>
<td class="tcw">#C2DFFF</td>
<td class="wt" bgcolor="#c2dfff"><strong>Slate Gray1</strong></td>
</tr>
<tr>
<td class="tcw">Slate Gray2</td>
<td class="tcw">#B4CFEC</td>
<td class="wt" bgcolor="#b4cfec"><strong>Slate Gray2</strong></td>
</tr>
<tr>
<td class="tcw">Light Steel Blue2</td>
<td class="tcw">#B7CEEC</td>
<td class="wt" bgcolor="#b7ceec"><strong>Light Steel Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Turquoise1</td>
<td class="tcw">#52F3FF</td>
<td class="wt" bgcolor="#52f3ff"><strong>Turquoise1</strong></td>
</tr>
<tr>
<td class="tcw">Cyan</td>
<td class="tcw">#00FFFF</td>
<td class="wt" bgcolor="#00ffff"><strong>Cyan</strong></td>
</tr>
<tr>
<td class="tcw">Cyan1</td>
<td class="tcw">#57FEFF</td>
<td class="wt" bgcolor="#57feff"><strong>Cyan1</strong></td>
</tr>
<tr>
<td class="tcw">Cyan2</td>
<td class="tcw">#50EBEC</td>
<td class="wt" bgcolor="#50ebec"><strong>Cyan2</strong></td>
</tr>
<tr>
<td class="tcw">Turquoise2</td>
<td class="tcw">#4EE2EC</td>
<td class="wt" bgcolor="#4ee2ec"><strong>Turquoise2</strong></td>
</tr>
<tr>
<td class="tcw">Medium Turquoise</td>
<td class="tcw">#48CCCD</td>
<td class="wt" bgcolor="#48cccd"><strong>Medium Turquoise</strong></td>
</tr>
<tr>
<td class="tcw">Turquoise</td>
<td class="tcw">#43C6DB</td>
<td class="wt" bgcolor="#43c6db"><strong>Turquoise</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Gray1</td>
<td class="tcw">#9AFEFF</td>
<td class="wt" bgcolor="#9afeff"><strong>Dark Slate Gray1</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Gray2</td>
<td class="tcw">#8EEBEC</td>
<td class="wt" bgcolor="#8eebec"><strong>Dark slate Gray2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Slate Gray3</td>
<td class="tcw">#78c7c7</td>
<td class="wt" bgcolor="#78c7c7"><strong>Dark Slate Gray3</strong></td>
</tr>
<tr>
<td class="tcw">Cyan3</td>
<td class="tcw">#46C7C7</td>
<td class="wt" bgcolor="#46c7c7"><strong>Cyan3</strong></td>
</tr>
<tr>
<td class="tcw">Turquoise3</td>
<td class="tcw">#43BFC7</td>
<td class="wt" bgcolor="#43bfc7"><strong>Turquoise3</strong></td>
</tr>
<tr>
<td class="tcw">Cadet Blue3</td>
<td class="tcw">#77BFC7</td>
<td class="wt" bgcolor="#77bfc7"><strong>Cadet Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Pale Turquoise3</td>
<td class="tcw">#92C7C7</td>
<td class="wt" bgcolor="#92c7c7"><strong>Pale Turquoise3</strong></td>
</tr>
<tr>
<td class="tcw">Light Blue2</td>
<td class="tcw">#AFDCEC</td>
<td class="wt" bgcolor="#afdcec"><strong>Light Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Turquoise</td>
<td class="tcw">#3B9C9C</td>
<td class="wt" bgcolor="#3b9c9c"><strong>Dark Turquoise</strong></td>
</tr>
<tr>
<td class="tcw">Cyan4</td>
<td class="tcw">#307D7E</td>
<td class="wt" bgcolor="#307d7e"><strong>Cyan4</strong></td>
</tr>
<tr>
<td class="tcw">Light Sea Green</td>
<td class="tcw">#3EA99F</td>
<td class="wt" bgcolor="#3ea99f"><strong>Light Sea Green</strong></td>
</tr>
<tr>
<td class="tcw">Light Sky Blue</td>
<td class="tcw">#82CAFA</td>
<td class="wt" bgcolor="#82cafa"><strong>Light Sky Blue</strong></td>
</tr>
<tr>
<td class="tcw">Light Sky Blue2</td>
<td class="tcw">#A0CFEC</td>
<td class="wt" bgcolor="#a0cfec"><strong>Light Sky Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Light Sky Blue3</td>
<td class="tcw">#87AFC7</td>
<td class="wt" bgcolor="#87afc7"><strong>Light Sky Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Sky Blue</td>
<td class="tcw">#82CAFF</td>
<td class="wt" bgcolor="#82caff"><strong>Sky Blue</strong></td>
</tr>
<tr>
<td class="tcw">Sky Blue2</td>
<td class="tcw">#79BAEC</td>
<td class="wt" bgcolor="#79baec"><strong>Sky Blue2</strong></td>
</tr>
<tr>
<td class="tcw">Light Sky Blue4</td>
<td class="tcw">#566D7E</td>
<td class="wt" bgcolor="#566d7e"><strong>Light Sky Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Sky Blue</td>
<td class="tcw">#6698FF</td>
<td class="wt" bgcolor="#6698ff"><strong>Sky Blue</strong></td>
</tr>
<tr>
<td class="tcw">Light Slate Blue</td>
<td class="tcw">#736AFF</td>
<td class="wt" bgcolor="#736aff"><strong>Light Slate Blue</strong></td>
</tr>
<tr>
<td class="tcw">Light Cyan2</td>
<td class="tcw">#CFECEC</td>
<td bgcolor="#cfecec"><strong>Light Cyan2</strong></td>
</tr>
<tr>
<td class="tcw">Light Cyan3</td>
<td class="tcw">#AFC7C7</td>
<td class="wt" bgcolor="#afc7c7"><strong>Light Cyan3</strong></td>
</tr>
<tr>
<td class="tcw">Light Cyan4</td>
<td class="tcw">#717D7D</td>
<td class="wt" bgcolor="#717d7d"><strong>Light Cyan4</strong></td>
</tr>
<tr>
<td class="tcw">Light Blue3</td>
<td class="tcw">#95B9C7</td>
<td class="wt" bgcolor="#95b9c7"><strong>Light Blue3</strong></td>
</tr>
<tr>
<td class="tcw">Light Blue4</td>
<td class="tcw">#5E767E</td>
<td class="wt" bgcolor="#5e767e"><strong>Light Blue4</strong></td>
</tr>
<tr>
<td class="tcw">Pale Turquoise4</td>
<td class="tcw">#5E7D7E</td>
<td class="wt" bgcolor="#5e7d7e"><strong>Pale Turquoise4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Sea Green4</td>
<td class="tcw">#617C58</td>
<td class="wt" bgcolor="#617c58"><strong>Dark Sea Green4</strong></td>
</tr>
<tr>
<td class="tcw">Medium Aquamarine</td>
<td class="tcw">#348781</td>
<td class="wt" bgcolor="#348781"><strong>Medium Aquamarine</strong></td>
</tr>
<tr>
<td class="tcw">Medium Sea Green</td>
<td class="tcw">#306754</td>
<td class="wt" bgcolor="#306754"><strong>Medium Sea Green</strong></td>
</tr>
<tr>
<td class="tcw">Sea Green</td>
<td class="tcw">#4E8975</td>
<td class="wt" bgcolor="#4e8975"><strong>Sea Green</strong></td>
</tr>
<tr>
<td class="tcw">Dark Green</td>
<td class="tcw">#254117</td>
<td class="wt" bgcolor="#254117"><strong>Dark Green</strong></td>
</tr>
<tr>
<td class="tcw">Sea Green4</td>
<td class="tcw">#387C44</td>
<td class="wt" bgcolor="#387c44"><strong>Sea Green4</strong></td>
</tr>
<tr>
<td class="tcw">Forest Green</td>
<td class="tcw">#4E9258</td>
<td class="wt" bgcolor="#4e9258"><strong>Forest Green</strong></td>
</tr>
<tr>
<td class="tcw">Medium Forest Green</td>
<td class="tcw">#347235</td>
<td class="wt" bgcolor="#347235"><strong>Medium Forest Green</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green4</td>
<td class="tcw">#347C2C</td>
<td class="wt" bgcolor="#347c2c"><strong>Spring Green4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Olive Green4</td>
<td class="tcw">#667C26</td>
<td class="wt" bgcolor="#667c26"><strong>Dark Olive Green4</strong></td>
</tr>
<tr>
<td class="tcw">Chartreuse4</td>
<td class="tcw">#437C17</td>
<td class="wt" bgcolor="#437c17"><strong>Chartreuse4</strong></td>
</tr>
<tr>
<td class="tcw">Green4</td>
<td class="tcw">#347C17</td>
<td class="wt" bgcolor="#347c17"><strong>Green4</strong></td>
</tr>
<tr>
<td class="tcw">Medium Spring Green</td>
<td class="tcw">#348017</td>
<td class="wt" bgcolor="#348017"><strong>Medium Spring Green</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green</td>
<td class="tcw">#4AA02C</td>
<td class="wt" bgcolor="#4aa02c"><strong>Spring Green</strong></td>
</tr>
<tr>
<td class="tcw">Lime Green</td>
<td class="tcw">#41A317</td>
<td class="wt" bgcolor="#41a317"><strong>Lime Green</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green</td>
<td class="tcw">#4AA02C</td>
<td class="wt" bgcolor="#4aa02c"><strong>Spring Green</strong></td>
</tr>
<tr>
<td class="tcw">Dark Sea Green</td>
<td class="tcw">#8BB381</td>
<td class="wt" bgcolor="#8bb381"><strong>Dark Sea Green</strong></td>
</tr>
<tr>
<td class="tcw">Dark Sea Green3</td>
<td class="tcw">#99C68E</td>
<td class="wt" bgcolor="#99c68e"><strong>Dark Sea Green3</strong></td>
</tr>
<tr>
<td class="tcw">Green3</td>
<td class="tcw">#4CC417</td>
<td class="wt" bgcolor="#4cc417"><strong>Green3</strong></td>
</tr>
<tr>
<td class="tcw">Chartreuse3</td>
<td class="tcw">#6CC417</td>
<td class="wt" bgcolor="#6cc417"><strong>Chartreuse3</strong></td>
</tr>
<tr>
<td class="tcw">Yellow Green</td>
<td class="tcw">#52D017</td>
<td class="wt" bgcolor="#52d017"><strong>Yellow Green</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green3</td>
<td class="tcw">#4CC552</td>
<td class="wt" bgcolor="#4cc552"><strong>Spring Green3</strong></td>
</tr>
<tr>
<td class="tcw">Sea Green3</td>
<td class="tcw">#54C571</td>
<td class="wt" bgcolor="#54c571"><strong>Sea Green3</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green2</td>
<td class="tcw">#57E964</td>
<td class="wt" bgcolor="#57e964"><strong>Spring Green2</strong></td>
</tr>
<tr>
<td class="tcw">Spring Green1</td>
<td class="tcw">#5EFB6E</td>
<td class="wt" bgcolor="#5efb6e"><strong>Spring Green1</strong></td>
</tr>
<tr>
<td class="tcw">Sea Green2</td>
<td class="tcw">#64E986</td>
<td class="wt" bgcolor="#64e986"><strong>Sea Green2</strong></td>
</tr>
<tr>
<td class="tcw">Sea Green1</td>
<td class="tcw">#6AFB92</td>
<td class="wt" bgcolor="#6afb92"><strong>Sea Green1</strong></td>
</tr>
<tr>
<td class="tcw">Dark Sea Green2</td>
<td class="tcw">#B5EAAA</td>
<td class="wt" bgcolor="#b5eaaa"><strong>Dark Sea Green2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Sea Green1</td>
<td class="tcw">#C3FDB8</td>
<td class="wt" bgcolor="#c3fdb8"><strong>Dark Sea Green1</strong></td>
</tr>
<tr>
<td class="tcw">Green</td>
<td class="tcw">#00FF00</td>
<td class="wt" bgcolor="#00ff00"><strong>Green</strong></td>
</tr>
<tr>
<td class="tcw">Lawn Green</td>
<td class="tcw">#87F717</td>
<td class="wt" bgcolor="#87f717"><strong>Lawn Green</strong></td>
</tr>
<tr>
<td class="tcw">Green1</td>
<td class="tcw">#5FFB17</td>
<td class="wt" bgcolor="#5ffb17"><strong>Green1</strong></td>
</tr>
<tr>
<td class="tcw">Green2</td>
<td class="tcw">#59E817</td>
<td class="wt" bgcolor="#59e817"><strong>Green2</strong></td>
</tr>
<tr>
<td class="tcw">Chartreuse2</td>
<td class="tcw">#7FE817</td>
<td class="wt" bgcolor="#7fe817"><strong>Chartreuse2</strong></td>
</tr>
<tr>
<td class="tcw">Chartreuse</td>
<td class="tcw">#8AFB17</td>
<td class="wt" bgcolor="#8afb17"><strong>Chartreuse</strong></td>
</tr>
<tr>
<td class="tcw">Green Yellow</td>
<td class="tcw">#B1FB17</td>
<td class="wt" bgcolor="#b1fb17"><strong>Green Yellow</strong></td>
</tr>
<tr>
<td class="tcw">Dark Olive Green1</td>
<td class="tcw">#CCFB5D</td>
<td class="wt" bgcolor="#ccfb5d"><strong>Dark Olive Green1</strong></td>
</tr>
<tr>
<td class="tcw">Dark Olive Green2</td>
<td class="tcw">#BCE954</td>
<td class="wt" bgcolor="#bce954"><strong>Dark Olive Green2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Olive Green3</td>
<td class="tcw">#A0C544</td>
<td class="wt" bgcolor="#a0c544"><strong>Dark Olive Green3</strong></td>
</tr>
<tr>
<td class="tcw">Yellow</td>
<td class="tcw">#FFFF00</td>
<td class="wt" bgcolor="#ffff00"><strong>Yellow</strong></td>
</tr>
<tr>
<td class="tcw">Yellow1</td>
<td class="tcw">#FFFC17</td>
<td class="wt" bgcolor="#fffc17"><strong>Yellow1</strong></td>
</tr>
<tr>
<td class="tcw">Khaki1</td>
<td class="tcw">#FFF380</td>
<td class="wt" bgcolor="#fff380"><strong>Khaki1</strong></td>
</tr>
<tr>
<td class="tcw">Khaki2</td>
<td class="tcw">#EDE275</td>
<td class="wt" bgcolor="#ede275"><strong>Khaki2</strong></td>
</tr>
<tr>
<td class="tcw">Goldenrod</td>
<td class="tcw">#EDDA74</td>
<td class="wt" bgcolor="#edda74"><strong>Goldenrod</strong></td>
</tr>
<tr>
<td class="tcw">Gold2</td>
<td class="tcw">#EAC117</td>
<td class="wt" bgcolor="#eac117"><strong>Gold2</strong></td>
</tr>
<tr>
<td class="tcw">Gold1</td>
<td class="tcw">#FDD017</td>
<td class="wt" bgcolor="#fdd017"><strong>Gold1</strong></td>
</tr>
<tr>
<td class="tcw">Goldenrod1</td>
<td class="tcw">#FBB917</td>
<td class="wt" bgcolor="#fbb917"><strong>Goldenrod1</strong></td>
</tr>
<tr>
<td class="tcw">Goldenrod2</td>
<td class="tcw">#E9AB17</td>
<td class="wt" bgcolor="#e9ab17"><strong>Goldenrod2</strong></td>
</tr>
<tr>
<td class="tcw">Gold</td>
<td class="tcw">#D4A017</td>
<td class="wt" bgcolor="#d4a017"><strong>Gold</strong></td>
</tr>
<tr>
<td class="tcw">Gold3</td>
<td class="tcw">#C7A317</td>
<td class="wt" bgcolor="#c7a317"><strong>Gold3</strong></td>
</tr>
<tr>
<td class="tcw">Goldenrod3</td>
<td class="tcw">#C68E17</td>
<td class="wt" bgcolor="#c68e17"><strong>Goldenrod3</strong></td>
</tr>
<tr>
<td class="tcw">Dark Goldenrod</td>
<td class="tcw">#AF7817</td>
<td class="wt" bgcolor="#af7817"><strong>Dark Goldenrod</strong></td>
</tr>
<tr>
<td class="tcw">Khaki</td>
<td class="tcw">#ADA96E</td>
<td class="wt" bgcolor="#ada96e"><strong>Khaki</strong></td>
</tr>
<tr>
<td class="tcw">Khaki3</td>
<td class="tcw">#C9BE62</td>
<td class="wt" bgcolor="#c9be62"><strong>Khaki3</strong></td>
</tr>
<tr>
<td class="tcw">Khaki4</td>
<td class="tcw">#827839</td>
<td class="wt" bgcolor="#827839"><strong>Khaki4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Goldenrod1</td>
<td class="tcw">#FBB117</td>
<td class="wt" bgcolor="#fbb117"><strong>Dark Goldenrod1</strong></td>
</tr>
<tr>
<td class="tcw">Dark Goldenrod2</td>
<td class="tcw">#E8A317</td>
<td class="wt" bgcolor="#e8a317"><strong>Dark Goldenrod2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Goldenrod3</td>
<td class="tcw">#C58917</td>
<td class="wt" bgcolor="#c58917"><strong>Dark Goldenrod3</strong></td>
</tr>
<tr>
<td class="tcw">Sienna1</td>
<td class="tcw">#F87431</td>
<td class="wt" bgcolor="#f87431"><strong>Sienna1</strong></td>
</tr>
<tr>
<td class="tcw">Sienna2</td>
<td class="tcw">#E66C2C</td>
<td class="wt" bgcolor="#e66c2c"><strong>Sienna2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orange</td>
<td class="tcw">#F88017</td>
<td class="wt" bgcolor="#f88017"><strong>Dark Orange</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orange1</td>
<td class="tcw">#F87217</td>
<td class="wt" bgcolor="#f87217"><strong>Dark Orange1</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orange2</td>
<td class="tcw">#E56717</td>
<td class="wt" bgcolor="#e56717"><strong>Dark Orange2</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orange3</td>
<td class="tcw">#C35617</td>
<td class="wt" bgcolor="#c35617"><strong>Dark Orange3</strong></td>
</tr>
<tr>
<td class="tcw">Sienna3</td>
<td class="tcw">#C35817</td>
<td class="wt" bgcolor="#c35817"><strong>Sienna3</strong></td>
</tr>
<tr>
<td class="tcw">Sienna</td>
<td class="tcw">#8A4117</td>
<td class="wt" bgcolor="#8a4117"><strong>Sienna</strong></td>
</tr>
<tr>
<td class="tcw">Sienna4</td>
<td class="tcw">#7E3517</td>
<td class="wt" bgcolor="#7e3517"><strong>Sienna4</strong></td>
</tr>
<tr>
<td class="tcw">Indian Red4</td>
<td class="tcw">#7E2217</td>
<td class="wt" bgcolor="#7e2217"><strong>Indian Red4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Orange3</td>
<td class="tcw">#7E3117</td>
<td class="wt" bgcolor="#7e3117"><strong>Dark Orange3</strong></td>
</tr>
<tr>
<td class="tcw">Salmon4</td>
<td class="tcw">#7E3817</td>
<td class="wt" bgcolor="#7e3817"><strong>Salmon4</strong></td>
</tr>
<tr>
<td class="tcw">Dark Goldenrod4</td>
<td class="tcw">#7F5217</td>
<td class="wt" bgcolor="#7f5217"><strong>Dark Goldenrod4</strong></td>
</tr>
<tr>
<td class="tcw">Gold4</td>
<td class="tcw">#806517</td>
<td class="wt" bgcolor="#806517"><strong>Gold4</strong></td>
</tr>
<tr>
<td class="tcw">Goldenrod4</td>
<td class="tcw">#805817</td>
<td class="wt" bgcolor="#805817"><strong>Goldenrod4</strong></td>
</tr>
<tr>
<td class="tcw">Light Salmon4</td>
<td class="tcw">#7F462C</td>
<td class="wt" bgcolor="#7f462c"><strong>Light Salmon4</strong></td>
</tr>
<tr>
<td class="tcw">Chocolate</td>
<td class="tcw">#C85A17</td>
<td class="wt" bgcolor="#c85a17"><strong>Chocolate</strong></td>
</tr>
<tr>
<td class="tcw">Coral3</td>
<td class="tcw">#C34A2C</td>
<td class="wt" bgcolor="#c34a2c"><strong>Coral3</strong></td>
</tr>
<tr>
<td class="tcw">Coral2</td>
<td class="tcw">#E55B3C</td>
<td class="wt" bgcolor="#e55b3c"><strong>Coral2</strong></td>
</tr>
<tr>
<td class="tcw">Coral</td>
<td class="tcw">#F76541</td>
<td class="wt" bgcolor="#f76541"><strong>Coral</strong></td>
</tr>
<tr>
<td class="tcw">Dark Salmon</td>
<td class="tcw">#E18B6B</td>
<td class="wt" bgcolor="#e18b6b"><strong>Dark Salmon</strong></td>
</tr>
<tr>
<td class="tcw">Salmon1</td>
<td class="tcw">#F88158</td>
<td class="wt" bgcolor="#f88158"><strong>Pale Turquoise4</strong></td>
</tr>
<tr>
<td class="tcw">Salmon2</td>
<td class="tcw">#E67451</td>
<td class="wt" bgcolor="#e67451"><strong>Salmon2</strong></td>
</tr>
<tr>
<td class="tcw">Salmon3</td>
<td class="tcw">#C36241</td>
<td class="wt" bgcolor="#c36241"><strong>Salmon3</strong></td>
</tr>
<tr>
<td class="tcw">Light Salmon3</td>
<td class="tcw">#C47451</td>
<td class="wt" bgcolor="#c47451"><strong>Light Salmon3</strong></td>
</tr>
<tr>
<td class="tcw">Light Salmon2</td>
<td class="tcw">#E78A61</td>
<td class="wt" bgcolor="#e78a61"><strong>Light Salmon2</strong></td>
</tr>
<tr>
<td class="tcw">Light Salmon</td>
<td class="tcw">#F9966B</td>
<td class="wt" bgcolor="#f9966b"><strong>Light Salmon</strong></td>
</tr>
<tr>
<td class="tcw">Sandy Brown</td>
<td class="tcw">#EE9A4D</td>
<td class="wt" bgcolor="#ee9a4d"><strong>Sandy Brown</strong></td>
</tr>
<tr>
<td class="tcw">Hot Pink</td>
<td class="tcw">#F660AB</td>
<td class="wt" bgcolor="#f660ab"><strong>Hot Pink</strong></td>
</tr>
<tr>
<td class="tcw">Hot Pink1</td>
<td class="tcw">#F665AB</td>
<td class="wt" bgcolor="#f665ab"><strong>Hot Pink1</strong></td>
</tr>
<tr>
<td class="tcw">Hot Pink2</td>
<td class="tcw">#E45E9D</td>
<td class="wt" bgcolor="#e45e9d"><strong>Hot Pink2</strong></td>
</tr>
<tr>
<td class="tcw">Hot Pink3</td>
<td class="tcw">#C25283</td>
<td class="wt" bgcolor="#c25283"><strong>Hot Pink3</strong></td>
</tr>
<tr>
<td class="tcw">Hot Pink4</td>
<td class="tcw">#7D2252</td>
<td class="wt" bgcolor="#7d2252"><strong>Hot Pink4</strong></td>
</tr>
<tr>
<td class="tcw">Light Coral</td>
<td class="tcw">#E77471</td>
<td class="wt" bgcolor="#e77471"><strong>Light Coral</strong></td>
</tr>
<tr>
<td class="tcw">Indian Red1</td>
<td class="tcw">#F75D59</td>
<td class="wt" bgcolor="#f75d59"><strong>Indian Red1</strong></td>
</tr>
<tr>
<td class="tcw">Indian Red2</td>
<td class="tcw">#E55451</td>
<td class="wt" bgcolor="#e55451"><strong>Indian Red2</strong></td>
</tr>
<tr>
<td class="tcw">Indian Red3</td>
<td class="tcw">#C24641</td>
<td class="wt" bgcolor="#c24641"><strong>Indian Red3</strong></td>
</tr>
<tr>
<td class="tcw">Red</td>
<td class="tcw">#FF0000</td>
<td class="wt" bgcolor="#ff0000"><strong>Red</strong></td>
</tr>
<tr>
<td class="tcw">Red1</td>
<td class="tcw">#F62217</td>
<td class="wt" bgcolor="#f62217"><strong>Red1</strong></td>
</tr>
<tr>
<td class="tcw">Red2</td>
<td class="tcw">#E41B17</td>
<td class="wt" bgcolor="#e41b17"><strong>Red2</strong></td>
</tr>
<tr>
<td class="tcw">Firebrick1</td>
<td class="tcw">#F62817</td>
<td class="wt" bgcolor="#f62817"><strong>Firebrick1</strong></td>
</tr>
<tr>
<td class="tcw">Firebrick2</td>
<td class="tcw">#E42217</td>
<td class="wt" bgcolor="#e42217"><strong>Firebrick2</strong></td>
</tr>
<tr>
<td class="tcw">Firebrick3</td>
<td class="tcw">#C11B17</td>
<td class="wt" bgcolor="#c11b17"><strong>Firebrick3</strong></td>
</tr>
<tr>
<td class="tcw">Pink</td>
<td class="tcw">#FAAFBE</td>
<td class="wt" bgcolor="#faafbe"><strong>Pink</strong></td>
</tr>
<tr>
<td class="tcw">Rosy Brown1</td>
<td class="tcw">#FBBBB9</td>
<td class="wt" bgcolor="#fbbbb9"><strong>Rosy Brown1</strong></td>
</tr>
<tr>
<td class="tcw">Rosy Brown2</td>
<td class="tcw">#E8ADAA</td>
<td class="wt" bgcolor="#e8adaa"><strong>Rosy Brown2</strong></td>
</tr>
<tr>
<td class="tcw">Pink2</td>
<td class="tcw">#E7A1B0</td>
<td class="wt" bgcolor="#e7a1b0"><strong>Pink2</strong></td>
</tr>
<tr>
<td class="tcw">Light Pink</td>
<td class="tcw">#FAAFBA</td>
<td class="wt" bgcolor="#faafba"><strong>Light Pink</strong></td>
</tr>
<tr>
<td class="tcw">Light Pink1</td>
<td class="tcw">#F9A7B0</td>
<td class="wt" bgcolor="#f9a7b0"><strong>Light Pink1</strong></td>
</tr>
<tr>
<td class="tcw">Light Pink2</td>
<td class="tcw">#E799A3</td>
<td class="wt" bgcolor="#e799a3"><strong>Light Pink2</strong></td>
</tr>
<tr>
<td class="tcw">Pink3</td>
<td class="tcw">#C48793</td>
<td class="wt" bgcolor="#c48793"><strong>Pink3</strong></td>
</tr>
<tr>
<td class="tcw">Rosy Brown3</td>
<td class="tcw">#C5908E</td>
<td class="wt" bgcolor="#c5908e"><strong>Rosy Brown3</strong></td>
</tr>
<tr>
<td class="tcw">Rosy Brown</td>
<td class="tcw">#B38481</td>
<td class="wt" bgcolor="#b38481"><strong>Rosy Brown</strong></td>
</tr>
<tr>
<td class="tcw">Light Pink3</td>
<td class="tcw">#C48189</td>
<td class="wt" bgcolor="#c48189"><strong>Light Pink3</strong></td>
</tr>
<tr>
<td class="tcw">Rosy Brown4</td>
<td class="tcw">#7F5A58</td>
<td class="wt" bgcolor="#7f5a58"><strong>Rosy Brown4</strong></td>
</tr>
<tr>
<td class="tcw">Light Pink4</td>
<td class="tcw">#7F4E52</td>
<td class="wt" bgcolor="#7f4e52"><strong>Light Pink4</strong></td>
</tr>
<tr>
<td class="tcw">Pink4</td>
<td class="tcw">#7F525D</td>
<td class="wt" bgcolor="#7f525d"><strong>Pink4</strong></td>
</tr>
<tr>
<td class="tcw">Lavender Blush4</td>
<td class="tcw">#817679</td>
<td class="wt" bgcolor="#817679"><strong>Lavendar Blush4</strong></td>
</tr>
<tr>
<td class="tcw">Light Goldenrod4</td>
<td class="tcw">#817339</td>
<td class="wt" bgcolor="#817339"><strong>Light Goldenrod4</strong></td>
</tr>
<tr>
<td class="tcw">Lemon Chiffon4</td>
<td class="tcw">#827B60</td>
<td class="wt" bgcolor="#827b60"><strong>Lemon Chiffon4</strong></td>
</tr>
<tr>
<td class="tcw">Lemon Chiffon3</td>
<td class="tcw">#C9C299</td>
<td class="wt" bgcolor="#c9c299"><strong>Lemon Chiffon3</strong></td>
</tr>
<tr>
<td class="tcw">Light Goldenrod3</td>
<td class="tcw">#C8B560</td>
<td class="wt" bgcolor="#c8b560"><strong>Light Goldenrod3</strong></td>
</tr>
<tr>
<td class="tcw">Light Golden2</td>
<td class="tcw">#ECD672</td>
<td class="wt" bgcolor="#ecd672"><strong>Light Golden2</strong></td>
</tr>
<tr>
<td class="tcw">Light Goldenrod</td>
<td class="tcw">#ECD872</td>
<td class="wt" bgcolor="#ecd872"><strong>Light Goldenrod</strong></td>
</tr>
<tr>
<td class="tcw">Light Goldenrod1</td>
<td class="tcw">#FFE87C</td>
<td class="wt" bgcolor="#ffe87c"><strong>Light Goldenrod1</strong></td>
</tr>
<tr>
<td class="tcw">Lemon Chiffon2</td>
<td class="tcw">#ECE5B6</td>
<td class="wt" bgcolor="#ece5b6"><strong>Lemon Chiffon2</strong></td>
</tr>
<tr>
<td class="tcw">Lemon Chiffon</td>
<td class="tcw">#FFF8C6</td>
<td bgcolor="#fff8c6"><strong>Lemon Chiffon</strong></td>
</tr>
<tr>
<td class="tcw">Light Goldenrod Yellow</td>
<td class="tcw">#FAF8CC</td>
<td bgcolor="#faf8cc"><strong>Light Goldenrod Yellow</strong></td>
</tr>
</tbody>
</table>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/19/html-color-codes-charts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Be your own Certificate Authority (CA)</title>
		<link>http://blog.nataprawira.com/tech/2009/02/18/be-your-own-certificate-authority-ca/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/18/be-your-own-certificate-authority-ca/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 05:04:10 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CA]]></category>
		<category><![CDATA[Certificate Authority]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=34</guid>
		<description><![CDATA[

I declare from the beginning that I am no authority on digital certificates.
This document is a summary of all the articles I have read about openssl. It describes in short how to become your own Certificate Authority (CA) and how to create and sign your own certificate requests. Make no mistake, these certificates are good [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F18%2Fbe-your-own-certificate-authority-ca%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F18%2Fbe-your-own-certificate-authority-ca%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><a title="ORIGINAL POST" href="http://www.g-loaded.eu/2005/11/10/be-your-own-ca/" target="_blank">I declare from the beginning that I am no authority on digital <strong>certificates</strong>.</a></p>
<blockquote><p>This document is a summary of all the articles I have read about <strong>openssl</strong>. It describes in short how to become your own <strong>Certificate Authority</strong> (CA) and how to create and sign your own <strong>certificate requests</strong>. Make no mistake, these certificates are good only for personal use or for use in your intranet in order to provide a secure way to login or communicate with your services, so that passwords or other data is not transmitted in the clear. Noone else will or should trust these certificates.</p></blockquote>
<h4>Prerequisites</h4>
<p>The package <strong>openssl</strong> should be installed in the machine you will use to manage your certificates or create the certificate requests.</p>
<h4>First things first…</h4>
<p><span id="more-34"></span></p>
<p>The <strong>openssl</strong> package comes with some scripts that can help you create your server certificates fast, but here I will describe how to set things up from scratch in a new directory, so that you can customize things later if you like or delete everything without touching openssl’s or the system’s default files. This article is based on a Fedora installation, but will do for all distributions.</p>
<h5>Creating the necessary directories</h5>
<p>First of all we will create a directory tree where all certificate stuff will be kept. Fedora’s default directory is <strong>/etc/pki/tls/</strong>. So, as root, we create our own directories:</p>
<pre># mkdir -m 0755 /etc/pki_jungle</pre>
<p>And then we create our CA’s directory tree:</p>
<pre># mkdir -m 0755 \
     /etc/pki_jungle/myCA \
     /etc/pki_jungle/myCA/private \
     /etc/pki_jungle/myCA/certs \
     /etc/pki_jungle/myCA/newcerts \
     /etc/pki_jungle/myCA/crl</pre>
<ul>
<li><strong>myCA</strong> is our Certificate Authority’s directory.</li>
<li><strong>myCA/certs</strong> directory is where our server certificates will be placed.</li>
<li><strong>myCA/newcerts</strong> directory is where openssl puts the created certificates in PEM (unencrypted) format and in the form <em>cert_serial_number.pem</em> (eg 07.pem). Openssl needs this directory, so we create it.</li>
<li><strong>myCA/crl</strong> is where our certificate revokation list is placed.</li>
<li><strong>myCA/private</strong> is the directory where our private keys are placed. Be sure that you set restrictive permissions to all your private keys so that they can be read only by root, or the user with whose priviledges a server runs. If anyone steals your private keys, then things get really bad.</li>
</ul>
<h5>Initial openssl configuration</h5>
<p>We are going to copy the default openssl configuration file (<strong>openssl.cnf</strong>) to our CA’s directory. In Fedora, this file exists in <strong>/etc/pki/tls</strong>. So, we copy it to our CA’s dir and name it <strong>openssl.my.cnf</strong>. As root:</p>
<pre># cp /etc/pki/tls/openssl.cnf /etc/pki_jungle/myCA/openssl.my.cnf</pre>
<p>This file does not need to be world readable, so we change its attributes:</p>
<pre># chmod 0600 /etc/pki_jungle/myCA/openssl.my.cnf</pre>
<p>We also need to create two other files. This file serves as a database for openssl:</p>
<pre># touch /etc/pki_jungle/myCA/index.txt</pre>
<p>The following file contains the next certificate’s serial number. Since we have not created any certificates yet, we set it to &#8220;<strong>01</strong>&#8220;:</p>
<pre># echo '01' &gt; /etc/pki_jungle/myCA/serial</pre>
<h4>Things to remember</h4>
<p>Here is a small legend with <strong>file extensions</strong> we will use for the created files and their meaning. All files that will be created will have one of these extensions:</p>
<ul>
<li><strong>KEY</strong> &#8211; Private key (Restrictive permissions should be set on this)</li>
<li><strong>CSR</strong> &#8211; Certificate Request (This will be signed by our CA in order to create the server certificates. Afterwards it is not needed and can be deleted)</li>
<li><strong>CRT</strong> &#8211; Certificate (This can be publicly distributed)</li>
<li><strong>PEM</strong> &#8211; We will use this extension for files that contain both the Key and the server Certificate (Some servers need this). Permissions should be restrictive on these files.</li>
<li><strong>CRL</strong> &#8211; Certificate Revokation List (This can be publicly distributed)</li>
</ul>
<h4>Create the CA Certificate and Key</h4>
<p>Now, that all initial configuration is done, we may create a self-signed certificate, that will be used as our CA’s certificate. In other words, we will use this to sign other certificate requests.</p>
<p>Change to our CA’s directory. <span style="text-decoration: underline">This is where we should issue all the openssl commands because here is our openssl’s configuration file (openssl.my.cnf).</span> As root:</p>
<pre># cd /etc/pki_jungle/myCA/</pre>
<p>And then create your CA’s Certificate and Private Key. As root:</p>
<pre># openssl req -config openssl.my.cnf -new -x509 -extensions v3_ca -keyout private/myca.key -out certs/myca.crt -days 1825</pre>
<p>This creates a self-signed certificate with the default CA extensions which is valid for 5 years. You will be prompted for a <strong>passphrase</strong> for your CA’s private key. <span style="text-decoration: underline">Be sure that you set a strong passphrase.</span> Then you will need to provide some info about your CA. Fill in whatever you like. Here is an example:</p>
<pre>Country Name (2 letter code) [GB]:GR
State or Province Name (full name) [Berkshire]:Greece
Locality Name (eg, city) [Newbury]:Thessaloniki
Organization Name (eg, company) [My Company Ltd]:My Network
Organizational Unit Name (eg, section) []:My Certificate Authority
Common Name (eg, your name or your server's hostname) []:server.example.com
Email Address []:whatever@server.example.com</pre>
<p>Two files are created:</p>
<ul>
<li><strong>certs/myca.crt</strong> &#8211; This is your CA’s certificate and can be publicly available and of course world readable.</li>
<li><strong>private/myca.key</strong> &#8211; This is your CA’s private key. Although it is protected with a passphrase you should restrict access to it, so that only root can read it:
<pre># chmod 0400 /etc/pki_jungle/myCA/private/myca.key</pre>
</li>
</ul>
<h4>More openssl configuration (mandatory)</h4>
<p>Because we use a custom directory for our certificates’ management, some modifications to <strong>/etc/pki_jungle/myCA/openssl.my.cnf</strong> are necessary. Open it in your favourite text editor as root and find the following part (around line 35):</p>
<pre>[ CA_default ]

dir     = ../../CA      # Where everything is kept
certs       = $dir/certs        # Where the issued certs are kept
crl_dir     = $dir/crl      # Where the issued crl are kept
database    = $dir/index.txt    # database index file.
#unique_subject = no            # Set to 'no' to allow creation of
                    # several ctificates with same subject.
new_certs_dir   = $dir/newcerts     # default place for new certs.

certificate = $dir/cacert.pem   # The CA certificate
serial      = $dir/serial       # The current serial number
#crlnumber  = $dir/crlnumber    # the current crl number must be
                    # commented out to leave a V1 CRL
crl     = $dir/crl.pem      # The current CRL
private_key = $dir/private/cakey.pem    # The private key
RANDFILE    = $dir/private/.rand    # private random number file

x509_extensions = usr_cert      # The extentions to add to the cert</pre>
<p>You should modify the following settings in order to coform to our custom directory and our custom CA key and certificate:</p>
<pre>[ CA_default ]

dir     = <strong>.</strong>                # <strong>&lt;--CHANGE THIS</strong>
certs       = $dir/certs
crl_dir     = $dir/crl
database    = $dir/index.txt
#unique_subject = no

new_certs_dir   = $dir/newcerts

certificate = $dir/<strong>certs/myca.crt</strong>   # <strong>&lt;--CHANGE THIS</strong>
serial      = $dir/serial
#crlnumber  = $dir/crlnumber

crl     = $dir/crl.pem
private_key = $dir/private/<strong>myca.key</strong>    # <strong>&lt;--CHANGE THIS</strong>
RANDFILE    = $dir/private/.rand

x509_extensions = usr_cert</pre>
<h4>Create a Server certificate</h4>
<p>Further openssl.my.cnf file’s customization is possible, so that we define our policy for certificate creation and signing or define our desired extensions for the new certificates. I may add this info to a future version of this document. It’s easy though, just try to familiarize yourself with the openssl.cnf’s structure and you’ll figure it out.</p>
<p>Anyway, the certificates we are going to create, without customizing openssl.my.cnf any further, are <strong>general purpose certificates</strong> and their usage in not restricted to server authentication only. One thing that you should take a note of is that <strong>the private keys will not be protected by a passphrase</strong>, so that when the services are restarted they do not ask for a passphrase. This means that you should <strong>set restrictive permissions on the private keys</strong>, so that only root or the user under whose priviledges a server runs can read these files.</p>
<h5>Generate a Certificate Request</h5>
<p>First, we change to our CA’s directory:</p>
<pre># cd /etc/pki_jungle/myCA/</pre>
<p>Then we create the certificate request:</p>
<pre># openssl req -config openssl.my.cnf -new -nodes -keyout private/server.key -out server.csr -days 365</pre>
<p>The <strong>-nodes</strong> option is needed so that the private key is not protected with a passphrase. If you do not intend to use the certificate for server authentication, you should not include it in the above command.<br />
You can customize the number of days you want this certificate to be valid for.</p>
<p>You will be prompted for the certificate’s info. Here is an example:</p>
<pre>Country Name (2 letter code) [GB]:GR
State or Province Name (full name) [Berkshire]:Greece
Locality Name (eg, city) [Newbury]:Thessaloniki
Organization Name (eg, company) [My Company Ltd]:My Network
Organizational Unit Name (eg, section) []:My Web Server
Common Name (eg, your name or your server's hostname) []:www.server.example.com
Email Address []:whatever@server.example.com</pre>
<p>The <strong>Common Name (CN)</strong> is the info that uniquely distinguishes your service, so be sure that you type it correctly.</p>
<p>When prompted for some extra attributes (challenge password, optional company name) just hit the [Enter] key.<br />
Two files are created:</p>
<ul>
<li><strong>server.csr</strong> &#8211; this is the certificate request.</li>
<li><strong>private/server.key</strong> &#8211; this is the private key, which is not protected with a passphrase.</li>
</ul>
<p>Set restrictive permissions on the private key. Only root or the user that is used to run the server should be able to read it. For example:</p>
<pre># chown root.root /etc/pki_jungle/myCA/private/server.key
# chmod 0400 /etc/pki_jungle/myCA/private/server.key</pre>
<p>Or:</p>
<pre># chown root.apache /etc/pki_jungle/myCA/private/server.key
# chmod 0440 /etc/pki_jungle/myCA/private/server.key</pre>
<h5>Sign the Certificate Request</h5>
<p>Now we are going to sign the certificate request and generate the server’s certificate.</p>
<p>First, we change to our CA’s directory:</p>
<pre># cd /etc/pki_jungle/myCA/</pre>
<p>Then we sign the certificate request:</p>
<pre># openssl ca -config openssl.my.cnf -policy policy_anything -out certs/server.crt -infiles server.csr</pre>
<p>You will need to supply the CA’s private key in order to sign the request. You can check the openssl.my.cnf file about what <strong>policy_anything</strong> means. In short, the fields about the Country, State or City is not required to match those of your CA’s certificate.</p>
<p>After all this is done two new files are created:</p>
<ul>
<li><strong>certs/server.crt</strong> &#8211; this is the server’s certificate, which can be made available publicly.</li>
<li><strong>newcerts/01.pem</strong> &#8211; This is exactly the same certificate, but with the certificate’s serial number as a filename. It is not needed.</li>
</ul>
<p>You can now delete the certificate request (server.csr). It’s no longer needed:</p>
<pre># rm -f /etc/pki_jungle/myCA/server.csr</pre>
<h5>Verify the certificate</h5>
<p>You can see the certificate’s info with the following:</p>
<pre># openssl x509 -subject -issuer -enddate -noout -in /etc/pki_jungle/myCA/certs/server.crt</pre>
<p>Or the following:</p>
<pre># openssl x509 -in certs/server.crt -noout -text</pre>
<p>And verify that the certificate is valid for server authentication with the following:</p>
<pre># openssl verify -purpose sslserver -CAfile /etc/pki_jungle/myCA/certs/myca.crt /etc/pki_jungle/myCA/certs/server.crt</pre>
<h5>Server certificate and key in one file</h5>
<p>Some servers, for example vsftpd, require that both the private key and the certificate exist in the same file. In a situation like that just do the following:</p>
<pre># cat certs/server.crt private/server.key &gt; private/server-key-cert.pem</pre>
<p>You should restrict access to the final file and delete server.crt and server.key since thay are no longer needed.</p>
<pre># chown root.root private/server-key-cert.pem
# chmod 0400 private/server-key-cert.pem
# rm -f certs/server.crt
# rm -f private/server.key</pre>
<h4>Revoke a Server Certificate</h4>
<p>If you do not want a certificate to be valid any more, you have to revoke it. This is done with the command:</p>
<pre># openssl ca -config openssl.my.cnf -revoke certs/server.crt</pre>
<p>Then you should generate a new CRL (Certificate Revokation List):</p>
<pre># openssl ca -config openssl.my.cnf -gencrl -out crl/myca.crl</pre>
<p>The CRL file is <strong>crl/myca.crl</strong>.</p>
<h4>Distribute your certificates and CRL</h4>
<p>Your CA’s certificate and your servers’ certificates should be distributed to those who trust you so they can import them in their client software (web browsers, ftp clients, email clients etc). The CRL should also be published.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/18/be-your-own-certificate-authority-ca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sendmail Problem</title>
		<link>http://blog.nataprawira.com/tech/2009/02/13/sendmail-problem/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/13/sendmail-problem/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 07:27:40 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Sendmail]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=33</guid>
		<description><![CDATA[

There are often problems with sendmail once it has been installed due to the  tightening up of sendmail to stop spammers

Sendmail-8.11.6-15 Connection refused
Sendmail &#38; tcp wrapper rejection
Cannot relay from valid  ip address (Outlook)


 1) Sendmail-8.11.6-15 Connection refused
Cannot telnet to port 25, then Sendmail has not been corretly set up. This is a problem [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F13%2Fsendmail-problem%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F13%2Fsendmail-problem%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p class="text">There are often problems with sendmail once it has been installed due to the  tightening up of sendmail to stop spammers</p>
<blockquote>
<p class="head3"><a href="http://mail.access-info.co.nz/docs/?postid=11#sendmail-8.11.6-15%20Connection%20refused" target="_blank">Sendmail-8.11.6-15 Connection refused</a></p>
<p class="head3"><a href="http://mail.access-info.co.nz/docs/?postid=11#Sendmail%20&amp;%20tcpwrappers%20rejection" target="_blank">Sendmail &amp; tcp wrapper rejection</a></p>
<p class="head3"><a href="http://mail.access-info.co.nz/docs/?postid=11#Cannot%20relay%20from%20valid%20ip%20address%20%28Outlook%29" target="_blank">Cannot relay from valid  ip address (Outlook)</a></p>
</blockquote>
<p class="head2"><span id="more-33"></span></p>
<p class="head2"><strong> 1) <a name="sendmail-8.11.6-15 Connection refused">Sendmail-8.11.6-15 Connection refused</a></strong></p>
<p class="text">Cannot telnet to port 25, then Sendmail has not been corretly set up. This is a problem with RedHat 7.3 or more where Sendmail by default is set to only send from the localhost, you could say this is Good as Sendmail can not spew when set up on a system that is not going to use it.</p>
<p class="head3">File: <span style="text-decoration: underline"><strong>/etc/sendmail.cf</strong></span></p>
<p class="text">Did you make the DAEMON_OPTIONS change mentioned in the release notes? Your sendmail.cf should *NOT* have this line:</p>
<blockquote>
<p class="commands"><strong> O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA</strong></p>
</blockquote>
<p class="text">It needs to be hashed out to this:</p>
<blockquote>
<p class="head3"><strong> #O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA</strong></p>
</blockquote>
<p class="head3">
<p class="head3">File: <span style="text-decoration: underline"><strong>/etc/mail/sendmail.mc</strong></span></p>
<p class="text">You can also change sendmail.mc, but this is just the configuration file that is used to create sendmail.cf. You can either delete it or change the .mc file from</p>
<blockquote>
<p class="commands"><strong> DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA&#8217;)</strong></p>
</blockquote>
<p class="text">to:</p>
<blockquote>
<p class="commands"><strong> dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA&#8217;)</strong></p>
</blockquote>
<p class="text">You do not need to rebuild sendmail.cf if you make the changes directly to sendmail.cf.</p>
<p class="text">To rebuild sendmail.cf is a headache so better to edit sendmail.cf and restart sendmail.</p>
<p class="text">
<p class="head2"><strong> 2) <a name="Sendmail &amp; tcpwrappers rejection">Sendmail &amp; tcpwrappers rejection</a></strong></p>
<p class="head3">File: <span style="text-decoration: underline"><strong>/etc/hosts.allow</strong></span></p>
<blockquote>
<p class="commands"><strong> sendmail: ALL EXCEPT \<br />
203.204. \<br />
218. </strong></p>
</blockquote>
<p class="head2">
<p class="head2"><strong>3) <a name="Cannot relay from valid ip address (Outlook)"> Cannot relay from valid ip address (Outlook)</a></strong></p>
<p class="text">Sendmail has been installed and the above patches have been  appilied, email is being sent fine from with in Horde, but as soon as a valid  client (ip address) seeks to send emails through the server using a client mail  program (outlook), we get a Relaying Rejected message.</p>
<p class="text">The answer to this problem was archived when researching this  page on sendmail.org.<br />
<a href="http://www.sendmail.org/%7Eca/email/relayingdenied.html" target="_blank"> http://www.sendmail.org/~ca/email/relayingdenied.html</a></p>
<p class="commands"><strong>Feb 24 08:39:20 mail sendmail[17602]: i1NJdKCq017602:  ruleset=check_rcpt, arg1=&lt;someone@someone.co.nz&gt;, relay=me.somehereelse.co.nz  [192.168.xx.19], reject=550 5.7.1 &lt;someone@someone.co.nz&gt;&#8230; Relaying denied</strong><br />
<em> (parts of message changed for security)</em></p>
<p class="text">Generally the /etc/mail/access file only has allowed client ip  addresses for relaying. Now with new versions of Sendmail I have found it  necessary to put in the allowed name that the PCs are giving to sendmail.</p>
<p class="head3">File: <span style="text-decoration: underline"><strong>/etc/mail/access</strong></span></p>
<blockquote>
<p class="commands"><strong>access-info.co.nz                  RELAY</strong></p>
</blockquote>
<p class="text">This lines is needed in /etc/mail/access to enable name  resolution.</p>
<p class="text">You may also need the following line in hosts to also enable dns  ip lookup</p>
<p class="head3">File: <span style="text-decoration: underline"><strong>/etc/hosts</strong></span></p>
<blockquote>
<p class="commands"><strong>192.168.xx.xx    laptop.access-info.co.nz     laptop</strong></p>
</blockquote>
<p class="text">Replace xs with valid ip address for the PC trying to send via  outlook.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/13/sendmail-problem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS Underscore Hack</title>
		<link>http://blog.nataprawira.com/tech/2009/02/06/css-underscore-hack/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/06/css-underscore-hack/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 04:08:07 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Underscore Hack]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=32</guid>
		<description><![CDATA[

Original Post



 Update: note that this article is from 2003. The CSS hack described is outdated and (maybe) shouldn’t be used.
I learned another CSS hack today – the underscore hack. You can read all about it in detail, but in essence it’s very simple.
Browsers are supposed to simply ignore CSS properties that they don’t understand. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F06%2Fcss-underscore-hack%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F06%2Fcss-underscore-hack%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><abbr class="updated" title="00"><em><strong><a title="Original Post" href="http://allinthehead.com/retro/150/" target="_blank">Original Post</a></strong></em><br />
</abbr></p>
<div class="entry-content">
<blockquote><p><strong><br />
<em> </em>Update:</strong> note that this article is from 2003. The <span class="caps">CSS</span> hack described is outdated and (maybe) shouldn’t be used.</p></blockquote>
<p>I learned another <span class="caps">CSS</span> hack today – the underscore hack. You can <a title="The Underscore Hack" href="http://www.pixy.cz/blogg/clanky/cssunderscorehack/" target="_blank">read all about it in detail</a>, but in essence it’s very simple.</p>
<p>Browsers are supposed to simply ignore <span class="caps">CSS</span> properties that they don’t understand. This much should be obvious. However, IE/Win does its usual trick of trying too hard to cope with user error and will read and process any valid <span class="caps">CSS</span> property with an underscore tacked on to the front. All other browsers will ignore the mystery property. Example:</p>
<pre><strong><code>p{
   color: black;
   _color: blue;
}</code></strong></pre>
<p>All browsers save IE/Win will display the paragraph text as black – IE/Win displays it as blue. It reads the <strong><code>_color</code></strong> property and allows it to replace the one that came before.</p>
<p>I discovered this technique whilst looking for a solution to IE’s lack of support for <code>min-height</code> to specify the minimum height of an object. Decent browsers like Mozilla support this property, but IE doesn’t. Thanks to another IE bug (one that results in <strong><code>overflow</code> </strong>being treated strangely), it’s possible to set a minimum height for both IE and proper browsers in a fashion such as this:</p>
<pre><strong><code>div#content{
    height: auto;
    min-height: 400px;
    _height: 400px;
}</code></strong></pre>
<p>Not a new technique, but new to me, and helped me out of a layout problem. Be sure to read <a title="Simon Willison - The Underscore Hack" href="http://simon.incutio.com/archive/2003/11/23/underscore" target="_blank">Simon’s discussion</a> of the pros and cons. With the appropriate care, it’s a useful tool to add to your hack list.</p>
</div>
<address> &#8211; <a href="http://allinthehead.com/retro/150/#about" target="_blank">Drew McLellan</a> </address>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/06/css-underscore-hack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A 9 years old whiz-kid, writes an iPhone application</title>
		<link>http://blog.nataprawira.com/tech/2009/02/05/a-9-years-old-whiz-kid-writes-an-iphone-application/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/05/a-9-years-old-whiz-kid-writes-an-iphone-application/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 10:55:18 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Tech News]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[singapore]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=31</guid>
		<description><![CDATA[

SINGAPORE, Feb 5 &#8211; While most children his age sketch on paper with crayons, nine-year old Lim Ding Wen from Singapore, has a very different canvas &#8212; his iPhone.
Lim, who is in fourth grade, writes applications for Apple&#8217;s &#60;AAPL.O&#62; popular iPhone. His latest, a painting program called Doodle Kids, has been downloaded over 4,000 times [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F05%2Fa-9-years-old-whiz-kid-writes-an-iphone-application%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F05%2Fa-9-years-old-whiz-kid-writes-an-iphone-application%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>SINGAPORE, Feb 5 &#8211; While most children his age sketch on paper with crayons, nine-year old Lim Ding Wen from Singapore, has a very different canvas &#8212; his iPhone.</p>
<p>Lim, who is in fourth grade, writes applications for Apple&#8217;s &lt;AAPL.O&gt; popular iPhone. His latest, a painting program called Doodle Kids, has been downloaded over 4,000 times from Apple&#8217;s iTunes store in two weeks, the New Paper reported on Thursday.</p>
<p>The program lets iPhone users draw with their fingers by touching the iPhone&#8217;s touchscreen and then clear the screen by shaking the phone.</p>
<p>&#8220;I wrote the program for my younger sisters, who like to draw,&#8221; Lim said. His sisters are aged 3 and 5.</p>
<p>Lim, who is fluent in six programming languages, started using the computer at the age of 2. He has since completed about 20 programming projects. His father, Lim Thye Chean, a chief technology officer at a local technology firm, also writes iPhone applications.</p>
<p>&#8220;Every evening we check the statistics emailed to us (by iTunes) to see who has more downloads,&#8221; the older Lim said.</p>
<p>The boy, who enjoys reading books on programming, is in the process of writing another iPhone application &#8212; a science fiction game called &#8220;Invader Wars&#8221;.</p>
<p><em><strong><a href="http://sg.news.yahoo.com/rtrs/20090205/tap-singapore-iphone-child-c3bb44c.html" target="_blank">Source</a></strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/05/a-9-years-old-whiz-kid-writes-an-iphone-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Schedule Tasks in Windows Server 2003</title>
		<link>http://blog.nataprawira.com/tech/2009/02/02/how-to-schedule-tasks-in-windows-server-2003/</link>
		<comments>http://blog.nataprawira.com/tech/2009/02/02/how-to-schedule-tasks-in-windows-server-2003/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 03:54:51 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Schedule Tasks]]></category>
		<category><![CDATA[Server]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=30</guid>
		<description><![CDATA[

In Windows Server 2003, you can use Scheduled Tasks in 		  Control Panel to create, delete, configure, or display scheduled tasks. You can 		  also use Schtasks.exe to schedule tasks manually.
Back to the top
Overview of the 				Schtasks.exe Tool

loadTOCNode(2, &#8217;summary&#8217;);
Schtasks schedules commands and programs to run periodically or at 		  a specific time. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F02%2Fhow-to-schedule-tasks-in-windows-server-2003%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F02%2F02%2Fhow-to-schedule-tasks-in-windows-server-2003%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>In Windows Server 2003, you can use Scheduled Tasks in 		  Control Panel to create, delete, configure, or display scheduled tasks. You can 		  also use Schtasks.exe to schedule tasks manually.</p>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>Overview of the 				Schtasks.exe Tool</h3>
<p><span id="more-30"></span></p>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
Schtasks schedules commands and programs to run periodically or at 		  a specific time. Schtasks adds and removes tasks from the schedule, starts and 		  stops tasks on demand, and displays and changes scheduled tasks.</p>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>Syntax and Parameters</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
The following is a list of the syntax and parameters that you can 		  use with Schtasks.exe:</p>
<ul>
<li>
<h4>Schtasks /Create</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Creates a new scheduled task.</p>
<ul>
<li><strong>Syntax</strong>:<br />
<strong>schtasks /create</strong><strong>/tn </strong><em>TaskName </em><strong>/tr </strong><em>TaskRun </em><strong>/sc </strong><em>schedule </em>[<strong>/mo </strong><em>modifier</em>] [<strong>/d </strong><em>day</em>] [<strong>/m </strong><em>month</em>[,<em>month</em>...] [<strong>/i </strong><em>IdleTime</em>] [<strong>/st </strong><em>StartTime</em>] [<strong>/sd </strong><em> StartDate</em>] [<strong>/ed </strong><em>EndDate</em>] [<strong>/du </strong><em>duration</em>] [<strong>/s </strong><em>computer</em> [<strong>/u </strong> [<em>domain\]user </em><strong>/p </strong><em>password</em>]] [<strong>/ru </strong> {[<em>Domain\]User</em> | <em>&#8220;System&#8221;</em>} [<strong>/rp </strong><em>Password</em>]] <strong>/?</strong></li>
<li><strong>Parameters</strong>:
<ul>
<li><strong>/tn </strong><em>TaskName</em> Specifies a name for the task.</li>
<li><strong>/tr </strong><em>TaskRun</em> Specifies the program or command that the task runs. Type the 						  fully qualified path and file name of an executable file, script file, or batch 						  file. If you omit the path, Schtasks.exe assumes that the file is in the 						  Systemroot\System32 folder.</li>
<li><strong>/sc </strong><em>schedule</em> Specifies the schedule type. Valid values are MINUTE, HOURLY, 						  DAILY, WEEKLY, MONTHLY, ONCE, ONSTART, ONLOGON, ONIDLE.</li>
<li><strong>/mo </strong><em> modifier</em> Specifies how frequently the task runs in its schedule type. This 						  parameter is required for a MONTHLY schedule. This parameter is valid, but 						  optional, for a MINUTE, HOURLY, DAILY, or WEEKLY schedule. The default value is 						  1.</li>
<li><strong>/d </strong><em> day</em> Specifies a day of the week or a day of a month. Valid only with 						  a WEEKLY or MONTHLY schedule.</li>
<li><strong>/m </strong><em>month</em>[,<em>month</em>...] Specifies a month of the year. Valid values are JAN &#8211; DEC and 						  * (every month). The <strong>/m </strong> parameter is valid only with a MONTHLY schedule. It is required 						  when the LASTDAY modifier is used. Otherwise, it is optional and the default 						  value is * (every month).</li>
<li><strong>/i </strong><em>IdleTime</em> Specifies how many minutes the computer is idle before the task 						  starts. Type a whole number from 1 to 999. This parameter is valid only with an 						  ONIDLE schedule, and then it is required.</li>
<li><strong>/st </strong><em>StartTime</em> Specifies the time of day that the task starts in HH:MM:SS 						  24-hour format. The default value is the current local time when the command 						  completes. The <strong>/st </strong> parameter is valid with MINUTE, HOURLY, DAILY, WEEKLY, MONTHLY, 						  and ONCE schedules. It is required with a ONCE schedule.</li>
<li><strong>/sd </strong><em>StartDate</em> Specifies the date that the task starts in MM/DD/YYYY format. The 						  default value is the current date. The <strong>/sd </strong> parameter is valid with all schedules, and is required for a ONCE 						  schedule.</li>
<li><strong>/ed </strong><em>EndDate</em> Specifies the last date that the task is scheduled to run. This 						  parameter is optional. It is not valid in a ONCE, ONSTART, ONLOGON, or ONIDLE 						  schedule. By default, schedules have no ending date.</li>
<li><strong>/du</strong><em> Duration</em> Specifies a maximum length of time for a minute or hourly schedule in the <em> HHHH:MM</em> 24-hour format. After the specified time elapses, Schtasks does not start the task again until the start time happens again. By default, task schedules have no maximum duration. This parameter is optional and valid only with a MINUTE or HOURLY schedule.</li>
<li><strong>/s </strong><em>Computer</em> Specifies the name or IP address of a remote computer, with or 						  without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain\</em>]<em>user</em> Runs the command with the permissions of the specified user 						  account. By default, the command runs with the permissions of the user who is 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password</em> Specifies the password of the user account that you specified in 						  the /u parameter. This parameter is required when the <strong>/u </strong><em>parameter</em> is used.</li>
<li><strong>/ru </strong> {[<em>Domain</em>\]<em>User</em> | <em>&#8220;System&#8221;</em>} Runs the tasks with the permission of the specified user 						  account. By default, the task runs with the permissions of the user who is 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/rp </strong><em>Password</em> Specifies the password of the user account that is specified in 						  the <strong>/ru </strong> parameter. If you omit this parameter when you specify a user 						  account, Schtasks.exe prompts you for the password and obscures the text you 						  type. Tasks that run with permissions of the NT Authority\System account do not 						  require a password and Schtasks.exe does not prompt for one.</li>
<li><strong>/? </strong> Displays help at the command prompt.</li>
</ul>
</li>
</ul>
<p><span><a href="http://support.microsoft.com/kb/814596#1">back to the 				top</a></span></li>
<li>
<h4>Schtasks /Change</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Changes one or more of the following properties of a task:</p>
<ul>
<li>The program that the task runs (<strong>/tr </strong>).</li>
<li>The user account under which the task runs (<strong>/ru </strong>).</li>
<li>The password for the user account (<strong>/rp </strong>).</li>
</ul>
<ul>
<li><strong>Syntax</strong>:<strong>schtasks /change /tn </strong> TaskName [<strong>/s </strong><em>computer</em> [<em>/u [domain\]user</em><strong> /p </strong><em>password</em>]] [<strong>/tr </strong> TaskRun] [<strong>/ru </strong> [<em>Domain\]User | &#8220;System&#8221;</em>] [<strong>/rp </strong><em>Password</em>]</li>
<li><strong>Parameters</strong>:
<ul>
<li><strong>/tn </strong><em> TaskName</em> Identifies the task to be changed. Type the task name.</li>
<li><strong>/s </strong><em>Computer</em> Specifies the name or IP address of a remote computer with or 						  without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain\</em>]<em>user </em>Runs the command with the permissions of the specified user 						  account. By default, the command runs with the permissions of the user who is 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password </em>Specifies the password of the user account that you specified in 						  the /u parameter. This parameter is required when the /u parameter is used.</li>
<li><strong>/tr </strong><em>TaskRun </em>Changes the program that the task runs. Type the fully qualified 						  path and file name of an executable file, script file, or batch file. If you 						  omit the path, Schtasks.exe assumes that the file is in the Systemroot\System32 						  folder. The specified program replaces the original program that is run by the 						  task.</li>
<li><strong>/ru </strong> [<em>Domain\</em>]<em>User | &#8220;System&#8221;</em> Changes the user account for the task.</li>
<li><strong>/rp </strong><em>Password </em>Changes the account password for the task. Type the new password.</li>
<li><strong>/? </strong> Displays help at the command prompt.</li>
</ul>
</li>
</ul>
<p><span><a href="http://support.microsoft.com/kb/814596#1">back to the 				top</a></span></li>
<li>
<h4>Schtasks /Run</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Starts a scheduled task immediately. The run operation ignores the 				schedule, but uses the program file location, user account, and password that 				are saved in the task to run the task immediately.</p>
<ul>
<li><strong>Syntax</strong>:<strong>schtasks /run /tn </strong><em>TaskName </em>[<strong>/s </strong><em>computer </em>[<strong>/u </strong> [<em>domain\</em>]<em>user </em><strong>/p</strong><em> password</em>]] <strong>/? </strong></li>
<li><strong>Parameters</strong>:
<ul>
<li><strong>/tn </strong><em>TaskName </em>Identifies the task. This parameter is required.</li>
<li><strong>/s </strong><em>Computer </em>Specifies the name or IP address of a remote computer with or 						  without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain\</em>]<em>user </em>Runs the command with the permissions of the specified user 						  account. By default, the command runs with the permissions of the user who it 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password </em>Specifies the password of the user account that you specified in 						  the /u parameter. This parameter is required when the /u parameter is used.</li>
<li><strong>/? </strong> Displays help at the command prompt.</li>
</ul>
</li>
</ul>
<p><span><a href="http://support.microsoft.com/kb/814596#1">back to the 				top</a></span></li>
<li>
<h4>Schtasks /End</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Stops a program that was started by a task.</p>
<ul>
<li><strong>Syntax</strong>: <strong>schtasks /end /tn </strong><em>TaskName </em>[<strong>/s </strong><em>computer</em> [<strong>/u </strong> [<em>domain\</em>]<em>user </em><strong>/p </strong><em>password</em>]] <strong>/? </strong></li>
<li><strong>Parameters</strong>:
<ul>
<li><strong>/tn </strong><em>TaskName </em>Identifies the task that started the program. This parameter is 						  required.</li>
<li><strong>/s </strong><em>Computer </em>Specifies the name or IP address of a remote computer with or 						  without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain\</em>]<em>user</em> Runs the command with the permissions of the specified user 						  account. By default, the command runs with the permissions of the user who is 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password</em> Specifies the password of the user account that is specified in 						  the <strong>/u </strong> parameter. This parameter is required when the <strong>/u </strong> parameter is used. <strong>/? </strong> Displays help.</li>
</ul>
</li>
</ul>
<p><span><a href="http://support.microsoft.com/kb/814596#1">back to the 				top</a></span></li>
<li>
<h4>Schtasks /Delete</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Deletes a scheduled task.</p>
<ul>
<li><strong>Syntax</strong>:<strong>schtasks /delete /tn </strong><em>{TaskName</em> |<em> *</em>} [<strong>/f </strong>] [<strong>/s </strong><em>computer</em> [<strong>/u </strong> [<em>domain</em>\]<em>user</em><strong>/p </strong><em>password</em>]] [<strong>/? </strong>]</li>
<li><strong>Parameters</strong>:
<ul>
<li><strong>/tn </strong> {<em>TaskName</em> |<em> *</em>} Identifies the task being deleted. This parameter is required.
<ul>
<li><em>TaskName</em> Deletes the named task.</li>
<li><em>*</em> Deletes all the scheduled tasks on the computer.</li>
</ul>
</li>
<li><strong>/f </strong>Suppresses the confirmation message. The task is deleted without 						  warning.</li>
<li><strong>/s </strong><em>Computer</em> Specifies the name or IP address of a remote computer with or 						  without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain</em>\]<em>user</em> Runs the command with the permissions of the specified user 						  account. By default, the command runs with the permissions of the user who is 						  logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password</em> Specifies the password of the user account that you specified in 						  the <strong>/u </strong> parameter. This parameter is required when the <strong>/u </strong>parameter is used.</li>
<li><strong>/? </strong> Displays help at the command prompt.</li>
</ul>
</li>
</ul>
<p><span><a href="http://support.microsoft.com/kb/814596#1">back to the 				top</a></span></li>
<li>
<h4>Schtasks /Query</h4>
<p>loadTOCNode(3, &#8217;summary&#8217;);<br />
Displays all the tasks that are scheduled to run on the computer, 				including those that are scheduled by other users:</p>
<ul>
<li><strong>Syntax</strong>:<strong>schtasks</strong> [<strong>/query</strong>] [<strong>/fo </strong> {<em>TABLE</em> | <em>LIST</em> | <em>CSV</em>}] [<strong>/nh </strong>] [<strong>/v</strong>] [<strong>/s </strong><em>computer</em> [<strong>/u </strong> [<em>domain</em>\]<em>user</em><strong>/p </strong><em>password</em>]]</li>
<li><strong>Parameters</strong>:[<strong>/query</strong>] The operation name is optional. Typing 					 <span class="userInput">schtasks</span> without any parameters performs a query.</li>
<li><strong>/fo </strong> {<em>TABLE</em> |<em> LIST</em> | <em>CSV</em>} Specifies the output format. <em>TABLE</em> is the default. <strong>/nh </strong> Omits column headings from the table display. This parameter is 					 valid with the <em>TABLE</em> and <em>CSV</em> output formats.</li>
<li><strong>/v </strong>Adds advanced properties of the tasks to the display. Queries 					 using <strong>/v </strong> should be formatted as LIST or CSV.</li>
<li><strong>/s </strong><em>Computer</em> Specifies the name or IP address of a remote computer with or 					 without backslash characters. The default is the local computer.</li>
<li><strong>/u </strong> [<em>domain</em>\]<em>user</em> Runs the command with the permissions of the specified user 					 account. By default, the command runs with the permissions of the user who is 					 logged on to the computer that is running Schtasks.</li>
<li><strong>/p </strong><em>password</em> Specifies the password of the user account that is specified in 					 the <strong>/u </strong> parameter. This parameter is required when the <strong>/u </strong> parameter is used.</li>
<li><strong>/? </strong> Displays help at the command prompt.</li>
</ul>
</li>
</ul>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to Create a Scheduled Task</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To create a scheduled task:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type <span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type <span class="userInput">schtasks /create /tn 				&#8220;<var>Application_Name</var>&#8221; /tr 				c:\apps\<var>Application_Name</var> /sc 				<var>Value</var> /st <var>HH:MM:SS</var> /ed 				<var>MM/DD/YYYY</var></span>, and then press ENTER. Note 				that you may have to change the parameters for your situation. For example, you 				might type <span class="userInput">schtasks /create /tn &#8220;My App&#8221; /tr c:\apps\myapp.exe /sc 				daily /st 08:00:00 /ed 12/31/2004 </span> This example schedules the MyApp 				program to run once a day, every day, at 8:00 A.M. until December 31, 2004. 				Because it omits the /mo parameter, the default interval of 1 is used to run 				the command every day.</li>
</ol>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to Change a Scheduled Task</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To change a scheduled task:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type<span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type<span class="userInput">schtasks /change /tn <em>TaskName</em> [/s <em>computer</em> [/u [<em>domain</em>\]<em>user</em> /p <em>password</em>]] [/tr <em>TaskRun</em>] [/ru [<em>Domain</em>\]<em>User</em> | &#8220;System&#8221;] [/rp <em>Password</em>] </span>, and then press ENTER. Note that you may have to 				change the parameters for your situation. For example, to change the program 				that a task runs, type: <span class="userInput">schtasks /change /tn &#8220;Application_Name&#8221; /tr 				C:\File_Path\Application_Name.exe</span></li>
</ol>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to Run a Scheduled Task</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To manually run a scheduled task outside its schedule:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type <span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type <span class="userInput">schtasks /run /tn <em>TaskName</em> [/s <em>computer</em> [/u [<em>domain</em>\]<em>user</em> /p<em> password</em>]] </span>, and then press ENTER. Note that you may have to 				change the parameters for your situation. For example, to run a task on the 				local computer, type <span class="userInput"> schtasks /run /tn 				&#8220;<var>Task_Name</var>&#8221; </span>.</li>
</ol>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to End a Scheduled Task</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To end a scheduled task:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type <span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type <span class="userInput"><strong>schtasks /end /tn </strong>TaskName [<strong>/s</strong> computer [<strong>/u</strong> [domain\]user <strong>/p</strong> password]] </span>, and then press ENTER. For example, to 				end the instances of a program that was started by a scheduled task on a local 				computer, type <span class="userInput">schtasks /end /tn 				&#8220;<var>Task_Name</var>&#8220;</span>.</li>
</ol>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to Delete a Scheduled Task</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To delete a scheduled task:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type <span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type <span class="userInput"><strong>schtasks /delete /tn</strong> {TaskName | *} [<strong>/f</strong>] [<strong>/s</strong> computer [<strong>/u</strong> [domain\]user <strong>/p</strong> password]]</span>, and then press ENTER. For example, to 				delete all tasks scheduled for the local computer, type <span class="userInput">schtasks 				/delete /tn * /f</span>.</li>
</ol>
<div class="topOfPage"><a href="http://support.microsoft.com/kb/814596#top"><img src="http://support.microsoft.com/library/images/support/kbgraphics/public/en-us/uparrow.gif" alt="" />Back to the top</a></div>
<h3>How to Perform a Query of Scheduled Tasks</h3>
<p>loadTOCNode(2, &#8217;summary&#8217;);<br />
To perform a query of scheduled tasks:</p>
<ol>
<li>Click <strong>Start</strong>, click <strong>Run</strong>, 				type <span class="userInput">cmd</span>, and then click <strong>OK</strong>.</li>
<li>At the command prompt, type <span class="userInput">net 				start</span>, and then press ENTER to display a list of currently running 				services. If Task Scheduler is not displayed in the list, type <strong>net 				start &#8220;task scheduler&#8221;</strong>, and then press ENTER.</li>
<li>At the command prompt, type <span class="userInput">schtasks /query </span>, and then press ENTER. Output from this example displays a table 				of tasks that have been scheduled to run.</li>
</ol>
<p>For more information about how to use Schtasks.exe, search for 		  Schtasks.exe in Windo</p>
<div class="indent">After the specified time elapses, Schtasks does not start the task again until the start time recurs. By default, task schedules have no maximum duration. This parameter is optional and valid only with a MINUTE or HOURLY schedule.</div>
<p>ws Server 2003 Help.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/02/02/how-to-schedule-tasks-in-windows-server-2003/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Data Recovery on Linux and ext3</title>
		<link>http://blog.nataprawira.com/tech/2009/01/21/data-recovery-on-linux-and-ext3/</link>
		<comments>http://blog.nataprawira.com/tech/2009/01/21/data-recovery-on-linux-and-ext3/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 04:42:20 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[ext3]]></category>
		<category><![CDATA[Recovery]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=29</guid>
		<description><![CDATA[

By: Abe Getchell 2008-10-03
This article discusses the process of recovering deleted data from an ext3 partition, on a system running Linux, using a process called data carving. This basic technique is useful in any number of situations, such as recovering data that has been accidentally deleted by a user, information removed in an attempt to [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F21%2Fdata-recovery-on-linux-and-ext3%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F21%2Fdata-recovery-on-linux-and-ext3%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><em>By: Abe Getchell 2008-10-03</em></p>
<p>This article discusses the process of recovering deleted data from an ext3 partition, on a system running Linux, using a process called data carving. This basic technique is useful in any number of situations, such as recovering data that has been accidentally deleted by a user, information removed in an attempt to erase signs of a system intrusion that could be used to track the source, or data erased by an end-user attempting to cover up an acceptable use policy infraction.</p>
<p><span id="more-29"></span></p>
<p>This article assumes that you have a basic understanding of ext3 and the inner workings of filesystems. It is important to note that there is a certain amount of risk associated with this process. When performed improperly, the data you are attempting to recover, or other data stored on the system, could be permanently lost. While this technique is quite accurate most of the time, and very useful in any number of different situations, it is not &#8220;forensically sound&#8221; and will not hold up legally for use in court. Special software, hardware, and procedures &#8212; or professional services &#8212; are a must in situations when legal action is required.</p>
<p>The tools used in this article are freely available and can be downloaded from their respective websites.</p>
<p><strong>The basic recovery process</strong></p>
<p>In this section we will go step-by-step through the data recovery process and describe the tools, and their options, in detail. We start by listing a directory below.</p>
<p>[abe@abe-laptop test]$ ls -al<br />
total 27<br />
drwxrwxr-x 2 abe abe 4096 2008-03-29 17:48 .<br />
drwx&#8212;&#8212; 71 abe abe 4096 2008-03-29 17:47 ..<br />
-rwxr&#8211;r&#8211; 1 abe abe 42736 2008-03-29 17:47 weimaraner1.jpg</p>
<p>In the listing above we can see that there is a file named weimaraner1.jpg in the test directory. This is a picture of my dog. I don&#8217;t want to delete it. I like my dog.</p>
<p>[abe@abe-laptop test]$ rm -f *</p>
<p>Here we can see I am deleting it. Whoops! Sorry buddy. Let&#8217;s gather some basic information about the system so we can begin the recovery process.</p>
<p>[abe@abe-laptop test]$ df -h<br />
Filesystem Size Used Avail Use% Mounted on<br />
/dev/sda2 71G 14G 53G 21% /<br />
/dev/sda1 99M 19M 76M 20% /boot<br />
tmpfs 1007M 12K 1007M 1% /dev/shm<br />
/dev/sdb1 887M 152M 735M 18% /media/PUBLIC</p>
<p>Here we see that the full path to the test directory (which is /home/abe/test) is part of the / filesystem, represented by the device file /dev/sda2.</p>
<p>[abe@abe-laptop test]$ su -<br />
Password:<br />
[root@abe-laptop ~]# debugfs /dev/sda2</p>
<p>Using su to gain root access, we can start the debugfs program giving it the target of /dev/sda2. The debugfs program is an interactive file system debugger that is installed by default with most common Linux distributions. This program is used to manually examine and change the state of a filesystem. In our situation, we&#8217;re going to use this program to determine the inode which stored information about the deleted file and to what block group the deleted file belonged.</p>
<p>debugfs 1.40.4 (31-Dec-2007)<br />
debugfs: cd /home/abe/test<br />
debugfs: ls -d<br />
1835327 (12) . 65538 (4084) .. &lt;1835328&gt; (4072) weimaraner1.jpg</p>
<p>After debugfs starts, we cd into /home/abe/test and run the ls -d command. This command shows us all deleted entries in the current directory. The output shows us that we have one deleted entry and that its inode number is 1835328 &#8212; that is, the number between the angular brackets.</p>
<p>debugfs: imap &lt;1835328&gt;<br />
Inode 1835328 is part of block group 56<br />
located at block 1835019, offset 0&#215;0f80</p>
<p>The next command we want to run is imap, giving it the inode number above so we can determine to which block group the file belonged. We see by the output that it belonged to block group 56.</p>
<p>debugfs: stats<br />
[...lots of output...]<br />
Blocks per group: 32768<br />
[...lots of output...]<br />
debugfs: q</p>
<p>Running the stats command will generate a lot of output. The only data we are interested in from this list, however, is the number of blocks per group. In this case, and most cases, it’s 32768. Now we have enough data to be able to determine the specific set of blocks in which the data resided. We&#8217;re done with debugfs now, so we type q to quit.</p>
<p>[root@abe-laptop ~]# dls /dev/sda2 1835008-1867775 &gt; /media/PUBLIC/block.dat</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>The next thing we need to do is pull all unallocated blocks from block group 56 so we can examine their content. The dls program, from The Sleuth Kit (TSK), allows us to do just that. We simply need to know the device file, a range of blocks, and have enough space in the appropriate place to output this data. Using the information above, we can calculate the block range by multiplying the block group number and the block group size and then multiplying the block group number plus one by the blocks per group minus one. In this case, the formula would look like this:</p>
<p>(56 x 32768) through ((56 + 1) x 32768 &#8211; 1)</p>
<p>This would give us a range of 1835008 through 1867775. It&#8217;s very important that the destination of the output does not reside on the same partition as the data you&#8217;re attempting to recover. What will most likely be a large amount of data being written to disk from the output of this command could potentially overwrite the data you are trying to recover (as the blocks which stored the data from the deleted file have already been marked unallocated). You want as little disk activity as possible on the partition you&#8217;re working with. In this example, I&#8217;m using a USB thumb drive (located on /media/PUBLIC) as a location to store this data.</p>
<p>[root@abe-laptop ~]# mkdir /media/PUBLIC/output<br />
[root@abe-laptop ~]# foremost -dv -t jpg -i /media/PUBLIC/block.dat -o /media/PUBLIC/output/</p>
<p>Next we need to attempt to extract this data from the unallocated blocks we extracted with the dls command above. To do this, we are going to use Foremost. This program is used to recover files based on header information, footer information, and internal data structures. This is the process, mentioned earlier, called data carving. First we are going to create a directory to store the foremost output (again, this should be on a separate partition). Next we are going to run the foremost command giving it the file type of jpg (which is an internally recognized type &#8211; more on custom types below), the input file, and the output directory. The output from this command is listed below.</p>
<p>Foremost version 1.5.3 by Jesse Kornblum, Kris Kendall, and Nick Mikus<br />
Audit File</p>
<p>Foremost started at Sat Mar 29 18:02:29 2008<br />
Invocation: foremost -dv -t jpg -i /media/PUBLIC/block.dat -o /media/PUBLIC/output/<br />
Output directory: /media/PUBLIC/output<br />
Configuration file: /usr/local/etc/foremost.conf<br />
Processing: /media/PUBLIC/block.dat<br />
|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
File: /media/PUBLIC/block.dat<br />
Start: Sat Mar 29 18:02:29 2008<br />
Length: 110 MB (115941376 bytes)</p>
<p>Num Name (bs=512) Size File Offset Comment</p>
<p>0: 00033272.jpg 26 KB 17035264<br />
1: 00033328.jpg 184 KB 17063936<br />
2: 00033704.jpg 58 KB 17256448<br />
3: 00033824.jpg 62 KB 17317888</p>
<p>[...]</p>
<p>*46: 00210136.jpg 2 KB 107589632<br />
47: 00210144.jpg 3 KB 107593728<br />
48: 00210392.jpg 6 KB 107720704<br />
*<br />
Finish: Sat Mar 29 18:02:29 2008</p>
<p>49 FILES EXTRACTED</p>
<p>jpg:= 49<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Foremost finished at Sat Mar 29 18:02:29 2008<br />
[root@abe-laptop ~]#</p>
<p>As we can see, Foremost found forty-nine previously deleted jpg files (this output is also saved in a file named audit.txt in the root of the specified output directory). How do we know which is the file we are trying to recover? We could, as is most commonly done, open all of these files and see their contents. Another option is to simply compare file sizes. We know from our directory listing above that the jpg file we are looking for is 41k in size. There&#8217;s only one file that foremost extracted into the output directory that&#8217;s 41k, and indeed, 00114144.jpg is the file we are attempting to recover. Comparing size only works, of course, if you &#8220;know your data&#8221;. Integrity checking programs such as Tripwire play a big role in a recovery operation as you can identify the recovered data without ever inspecting the content, as well as verify its integrity. This becomes quite useful if the information you&#8217;re attempting to recover is confidential and you are not authorized to view the data.</p>
<p><strong>Defining custom types in <em>Foremost</em></strong></p>
<p>As of Foremost v1.5.3, the internally supported data types that the program will recover without custom rules are jpg, gif, png, bmp, avi, exe, mpg, wav, riff, wmv, mov, pdf, ole, doc, zip, rar, htm, and cpp. If you need to recover data beyond these built-in data types, you will need to define custom types in Foremost&#8217;s configuration file (foremost.conf).</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>An entry that defines a type in the foremost configuration file (as explained in the documentation at the beginning of foremost.conf or in the manpage) consists of several columns: extension, case sensitivity, maximum size, header and footer (optional), and special keywords (optional). As an example that most should be familiar with, here is the entry for an html file:</p>
<p>htm n 50000 &lt;html &lt;/html&gt;</p>
<p>We see here that the file extension is htm (NONE can be specified if no file extension should be used during the output of extracted data), the header and footer are not case sensitive, the maximum file size is 50k bytes (which means that 50k bytes after the header will be recovered if no footer is specified or 50k bytes will be recovered if that amount of data is recovered before the defined footer is detected), the recovered file should start with &#8220;&lt;html&#8221; (header) and end with &#8220;&lt;/html&gt;&#8221; (footer).</p>
<p>The ASCII keyword can also be used when attempting to recover ASCII files. Specifying this keyword at the end of an entry will tell Foremost to extract all ASCII printable characters before and after the keyword defined. An example of this would be a type to recover a perl script. If, for example, you need to recover a perl script that you know included Crypt::CBC, you could use the following type definition:</p>
<p>pl y 100000 Crypt::CBC Crypt::CBC ASCII</p>
<p>Note that Crypt::CBC is listed in both the header and footer fields. This is done so that Foremost will recognize this as the string to search around when the ASCII keyword is used. A more general type to find perl scripts could be defined as follows:</p>
<p>pl n 100000 #!/usr/bin/perl #!/usr/bin/perl ASCII</p>
<p>When attempting to recover files that are not ASCII, hexadecimal and octal notation can be used by specifying \x[0-f][0-f] or \[0-3][0-7][0-7], respectively. Below is an example of hexadecimal notation describing the header and footers of a gif file:</p>
<p>gif y 155000000 \x47\x49\x46\x38\x37\x61 \x00\x3b</p>
<p>As you may have realized by now, Foremost is a very powerful tool. Learn its intricacies and it can be a wonderfully flexible tool in data recovery and computer security forensic operations. Read the Foremost man page or consult the configuration file for a complete guide to creating custom data types.</p>
<p><strong>ext2 vs ext3 Data Recover </strong></p>
<p>You may be asking yourself why this process is so much more difficult with ext3 than it is with ext2? This question is answered by one of the ext3 developers in the Linux ext3 FAQ:</p>
<p>Q: How can I recover (undelete) deleted files from my ext3 partition?<br />
Actually, you can&#8217;t! This is what one of the developers, Andreas Dilger, said about it:</p>
<p>In order to ensure that ext3 can safely resume an unlink after a crash, it actually zeros out the block pointers in the inode, whereas ext2 just marks these blocks as unused in the block bitmaps and marks the inode as &#8220;deleted&#8221; and leaves the block pointers alone.<br />
Your only hope is to &#8220;grep&#8221; for parts of your files that have been deleted and hope for the best.</p>
<p>The process, as described in this article, is the &#8220;grep&#8221; that Andreas is referring to. Hopefully, as ext3 is developed further, some effort will be put in to making this process easier and more reliable.</p>
<p><strong>Conclusion</strong></p>
<p>While going through this process may be necessary to recover information lost in any number of situations, it’s not a process you want to go through on a Monday morning to recover your organization&#8217;s payroll data after an administrator fat-fingers an rm command. The single most important piece of information you should take away from this article, in that vein, is to keep current, tested backups of business critical data that reside on the systems you manage. Regardless of the reason for its use, the process covered in this article is something that every system administrator and security analyst should have in their toolbelt.</p>
<p><a href="http://www.securityfocus.com/infocus/1902/1" target="_blank"><em><strong>Source</strong></em></a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/01/21/data-recovery-on-linux-and-ext3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Install APC for PHP on Linux</title>
		<link>http://blog.nataprawira.com/tech/2009/01/19/install-apc-for-php-on-linux/</link>
		<comments>http://blog.nataprawira.com/tech/2009/01/19/install-apc-for-php-on-linux/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 08:46:59 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Alternative PHP Cache]]></category>
		<category><![CDATA[APC]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=28</guid>
		<description><![CDATA[

APC is the Alternative PHP Cache, which is a free, open, and robust framework for caching and optimizing PHP intermediate code. What this means is that APC reads your PHP files, parses them into a more efficient binary format and then caches them in memory so that each request for your PHP files and PHP [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F19%2Finstall-apc-for-php-on-linux%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F19%2Finstall-apc-for-php-on-linux%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>APC </strong>is the Alternative PHP Cache, which is a free, open, and robust framework for caching and optimizing PHP intermediate code. What this means is that APC reads your PHP files, parses them into a more efficient binary format and then caches them in memory so that each request for your PHP files and PHP library files can be fed from the parsed cache. This will generally lead to a speed increase when serving a PHP site, especially one with a lot of library files. This post looks at how to install APC for PHP on Linux. The Linux distribution I used was CentOS 5, but it should be fairly similar for most distros.</p>
<p><span id="more-28"></span></p>
<p>First of all you need to download the APC code from the PHP PECL library.  Change directory to somewhere like <strong>/usr/local/src</strong> and then get the latest version:<strong></strong></p>
<blockquote><p><strong>$ wget http://pecl.php.net/get/APC</strong></p></blockquote>
<blockquote><p>&#8211;22:58:41&#8211;  http://pecl.php.net/get/APC<br />
Resolving pecl.php.net&#8230; 216.92.131.66<br />
Connecting to pecl.php.net|216.92.131.66|:80&#8230; connected.<br />
HTTP request sent, awaiting response&#8230; 200 OK<br />
Length: 114298 (112K) [application/octet-stream]<br />
Saving to: `APC-3.0.16.tgz&#8217;</p>
<p>100%[=====================&gt;] 114,298     97.1K/s   in 1.1s</p>
<p>22:58:43 (97.1 KB/s) &#8211; `APC-3.0.16.tgz&#8217; saved [114298/114298]</p></blockquote>
<p>So then you need to extract the files:</p>
<blockquote><p><strong>$ tar -zxf APC-3.0.16.tgz</strong></p></blockquote>
<p>and change into the APC directory:<strong></strong></p>
<blockquote><p><strong>$ cd APC-3.0.16</strong></p></blockquote>
<p>The next step is to run the &#8220;phpize&#8221; command. This requires that you have PHP development package installed. On CentOS this is php-devel (installed by running &#8220;yum install php-devel&#8221;) and it should have a similar name on other Linux distros.<strong></strong></p>
<blockquote><p><strong>$ phpize</strong></p>
<p>Configuring for:<br />
PHP Api Version:         20041225<br />
Zend Module Api No:      20050922<br />
Zend Extension Api No:   220051025</p></blockquote>
<p>You then configure APC, telling it where the executable file php-config is. If you don&#8217;t know where this is, then do this:</p>
<blockquote><p><strong>$ whereis php-config</strong></p></blockquote>
<p>which will return something like:</p>
<blockquote><p>php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz</p></blockquote>
<p>and then run the configure command like so:</p>
<blockquote><p><strong>./configure &#8211;enable-apc &#8211;enable-apc-mmap &#8211;with-apxs &#8211;with-php-config=/usr/bin/php-config</strong></p></blockquote>
<p>This will go ahead and do some configuring stuff which will look something like this:</p>
<blockquote><p>checking for egrep&#8230; grep -E<br />
checking for a sed that does not truncate output&#8230; /bin/sed<br />
&#8230;<br />
checking dynamic linker characteristics&#8230; GNU/Linux ld.so<br />
checking how to hardcode library paths into programs&#8230; immediate<br />
configure: creating ./config.status<br />
config.status: creating config.h</p></blockquote>
<p>Now that configure is done, it&#8217;s just a matter of running make :</p>
<blockquote><p><strong>$ make</strong></p></blockquote>
<blockquote><p>&#8230;<br />
Libraries have been installed in:<br />
/tmp/APC-3.0.16/modules</p>
<p>If you ever happen to want to link against installed libraries<br />
in a given directory, LIBDIR, you must either use libtool, and<br />
specify the full pathname of the library, or use the `-LLIBDIR&#8217;<br />
flag during linking and do at least one of the following:<br />
- add LIBDIR to the `LD_LIBRARY_PATH&#8217; environment variable<br />
during execution<br />
- add LIBDIR to the `LD_RUN_PATH&#8217; environment variable<br />
during linking<br />
- use the `-Wl,&#8211;rpath -Wl,LIBDIR&#8217; linker flag<br />
- have your system administrator add LIBDIR to `/etc/ld.so.conf&#8217;</p>
<p>See any operating system documentation about shared libraries for<br />
more information, such as the ld(1) and ld.so(8) manual pages.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Build complete.<br />
(It is safe to ignore warnings about tempnam and tmpnam).</p></blockquote>
<p>and then make install:</p>
<blockquote><p><strong>$ make install</strong></p></blockquote>
<blockquote><p>Installing shared extensions:     /usr/lib64/php/modules/</p></blockquote>
<p>and restarting the Apache web server:</p>
<blockquote><p><strong>/etc/init.d/httpd restart</strong></p></blockquote>
<p>The APC cache will now be enabled. You can confirm this by creating a script which calls the phpinfo() command and looking for the APC section. It will have been switched on by default by adding a <strong>&#8220;extension=apc.so&#8221;</strong> line to your <strong>/etc/php.ini</strong> file, but you may want to add more settings to configure it more.</p>
<p>The INSTALL file suggests this (I have put the default values at the end of each line which is what is set if you don&#8217;t set anything in the php.ini file):</p>
<blockquote><p>apc.enabled=1                       # default = 1<br />
apc.shm_segments=1                  # default = 1<br />
apc.shm_size=128                    # default = 30<br />
apc.ttl=7200                        # default = 0<br />
apc.user_ttl=7200                   # default = 0<br />
apc.num_files_hint=1024             # default = 1000<br />
apc.mmap_file_mask=/tmp/apc.XXXXXX  # default = no value<br />
apc.enable_cli=1                    # default = 0</p></blockquote>
<p>And that&#8217;s all there is to it. There is also a monitoring script available so you can see what&#8217;s being cached and how much memory is being used etc. You can read about this in my &#8220;Displaying PHP APC Cache Information&#8221; post.</p>
<blockquote><p><em>Update November 5th 2008: I just installed this on another server and I didn&#8217;t have any issues installing it but it didn&#8217;t add the extension=apc.so line to the /etc/php.ini file automatically. So if it doesn&#8217;t appear to be working, check the php.ini to ensure the line is there and add it if not.</em></p></blockquote>
<p><a href="http://www.electrictoolbox.com/install-apc-php-linux/" target="_blank"><em><strong>Source</strong></em></a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/01/19/install-apc-for-php-on-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to remove / delete  `sqmdataXX.sqm` files on my drive C:\ ?</title>
		<link>http://blog.nataprawira.com/tech/2009/01/19/how-to-remove-delete-sqmdataxxsqm-files-on-my-drive-c/</link>
		<comments>http://blog.nataprawira.com/tech/2009/01/19/how-to-remove-delete-sqmdataxxsqm-files-on-my-drive-c/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 17:35:09 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[.sqm]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MSN]]></category>
		<category><![CDATA[Software Quality Metrics]]></category>
		<category><![CDATA[Windows Live Messenger]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=27</guid>
		<description><![CDATA[

.SQM files are created by a number of Microsoft applications, most commonly Windows Live Messenger (previously known as MSN).
According to Microsoft, SQM files (standing for Software Quality Metrics) are used as part of their &#8220;Microsoft Customer Experience Program&#8221; and help improve their products by anonymously monitoring usage habits and reporting software errors/bugs.
To stop these files [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F19%2Fhow-to-remove-delete-sqmdataxxsqm-files-on-my-drive-c%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F19%2Fhow-to-remove-delete-sqmdataxxsqm-files-on-my-drive-c%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>.SQM</strong> files are created by a number of Microsoft applications, most commonly Windows Live Messenger (previously known as MSN).</p>
<p>According to Microsoft, SQM files (standing for Software Quality Metrics) are used as part of their &#8220;Microsoft Customer Experience Program&#8221; and help improve their products by anonymously monitoring usage habits and reporting software errors/bugs.</p>
<p>To stop these files being created, you will need to disable the option in Windows Live Messenger. You can do this through the options menu:</p>
<p>1. Click HELP.<br />
2. Select &#8216;Customer Experience Improvement Program&#8217;.<br />
3. Tick on &#8216;I don&#8217;t want to participate right now&#8217; box.<br />
4. Click OK.</p>
<p>Please take note, that .SQM files are NOT viruses and do not contain spyware/malware and do not contain any personal information.</p>
<p>SQM files have a naming convention such as &#8220;sqmnoopt00.sqm&#8221;. They are normally found in the root folder of your hard-drive (C:) and more recently, the &#8220;Documents and settings/Application Data/Microsoft/MSN Messenger/&#8221; folder.</p>
<p>Dot What!? visitors have found that deleting SQM files is safe. Although probably true, we advise you to backup the files first.</p>
<p style="text-align: center">################### Simple Story ###################</p>
<p style="text-align: center">By default, you participate in a data-gathering program. Open Live Messenger, click on Help, then on Customer Experience Improvement Program, then de-check the radio button which says you want to participate. Try that. It will almost certainly work, and it&#8217;s not dangerous.</p>
<p style="text-align: center">####################################################</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/01/19/how-to-remove-delete-sqmdataxxsqm-files-on-my-drive-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using SMTP AUTH and STARTTLS with sendmail (RedHat, Centos, Fedora)</title>
		<link>http://blog.nataprawira.com/tech/2009/01/07/using-smtp-auth-and-starttls-with-sendmail-redhat-centos-fedora/</link>
		<comments>http://blog.nataprawira.com/tech/2009/01/07/using-smtp-auth-and-starttls-with-sendmail-redhat-centos-fedora/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 07:34:00 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Sendmail]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=26</guid>
		<description><![CDATA[

Step 1: Back up important files
Red Hat has finally placed sendmail.cf in /etc/mail, where it belongs. To verify the location of your configuration file, type this command:
sendmail -d0.20 -bv &#124; grep sendmail.cf
The default installation outputs this:
Conf file: /etc/mail/sendmail.cf (default for MTA)
Conf file: /etc/mail/sendmail.cf (selected)
Be sure to use this path when generating your new sendmail.cf from [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F07%2Fusing-smtp-auth-and-starttls-with-sendmail-redhat-centos-fedora%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F07%2Fusing-smtp-auth-and-starttls-with-sendmail-redhat-centos-fedora%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong>Step 1: Back up important files</strong></p>
<p>Red Hat has finally placed sendmail.cf in /etc/mail, where it belongs. To verify the location of your configuration file, type this command:</p>
<p>sendmail -d0.20 -bv | grep sendmail.cf</p>
<p>The default installation outputs this:</p>
<p>Conf file: /etc/mail/sendmail.cf (default for MTA)<br />
Conf file: /etc/mail/sendmail.cf (selected)</p>
<p>Be sure to use this path when generating your new sendmail.cf from sendmail.mc, or no changes will take place. Back up your current sendmail.cf and the m4 file that generated it (probably /etc/mail/sendmail.mc):</p>
<p>cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf~<br />
cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc~</p>
<p><strong>Step 2: Make your certificate</strong></p>
<p><span id="more-26"></span></p>
<p>We are also setting up STARTTLS, which allows sendmail to communicate over an encrypted layer using TLS. This is very important, as it allows us to use the LOGIN or PLAIN authentication mechanisms without transferring the password in plain text. It also allows the entire message to remain encrypted from the user&#8217;s machine to the mail server. If sendmail relays the message to another server that offers STARTTLS, the message will be encrypted again. But the most important advantage of this approach is that we get to authenticate using regular system logins and passwords, with no need to maintain a separate user database.</p>
<p>Red Hat&#8217;s openssl package includes a Makefile that makes it extremely easy to generate a certificate (note that on Fedora Core 4 the location is now /etc/pki/tls/certs):</p>
<p>cd /usr/share/ssl/certs<br />
make sendmail.pem</p>
<p>Just follow the prompts and be sure to use the fully qualified domain name of the mail server for the Common Name prompt. Users will still be warned that the certificate is self-signed or not trusted, but you will prevent a warning that the certificate doesn&#8217;t match the host offering it. This certificate is suitable for testing, but you may want to investigate further about the use of certificates before deploying it in a production environment, a topic that is beyond the scope of this howto.</p>
<p><strong>Step 3: Edit sendmail.mc<br />
</strong><br />
If you take a look at the sendmail.mc provided by Red Hat, you will notice that the necessary directives are already present but have been commented out (m4 doesn&#8217;t use the # symbol for comments, it starts a line with dnl, which stands for &#8220;delete until new line&#8221;). Since we want the easiest method possible, without sacrificing security, we need to edit these lines. Don&#8217;t cut &amp; paste from this web page, or you may introduce unwanted characters into your configuration file that will prevent sendmail from starting.</p>
<p>The confAUTH_OPTIONS macro allows you to instruct sendmail not to offer plain text authentication until after a secure mechanism such as TLS is active (the p option). We are also prohibiting anonymous logins (the y option). The A option is a workaround for broken MTAs:</p>
<p>define(`confAUTH_OPTIONS&#8217;, `A p y&#8217;)dnl</p>
<p>Now we define which authentication mechanisms we will trust and use:</p>
<p>TRUST_AUTH_MECH(`LOGIN PLAIN&#8217;)dnl<br />
define(`confAUTH_MECHANISMS&#8217;, `LOGIN PLAIN&#8217;)dnl</p>
<p>Next, we tell sendmail where to find the certificates:</p>
<p>define(`confCACERT_PATH&#8217;,`/usr/share/ssl/certs&#8217;)<br />
define(`confCACERT&#8217;,`/usr/share/ssl/certs/ca-bundle.crt&#8217;)<br />
define(`confSERVER_CERT&#8217;,`/usr/share/ssl/certs/sendmail.pem&#8217;)<br />
define(`confSERVER_KEY&#8217;,`/usr/share/ssl/certs/sendmail.pem&#8217;)</p>
<p>And finally, it may be useful to increase the log level for debugging purposes (delete or comment out this line after everything is working properly):</p>
<p>define(`confLOG_LEVEL&#8217;, `14&#8242;)dnl</p>
<p>Use the m4 command to generate a new sendmail.cf:</p>
<p>m4 /etc/mail/sendmail.mc &gt; /etc/mail/sendmail.cf</p>
<p>Be sure to use the right location for sendmail.cf, as determined earlier. Alternatively, you can use the following command in a stock Red Hat 9.0 or Fedora Core installation:</p>
<p>make -C /etc/mail sendmail.cf</p>
<p>This uses the commands in /etc/mail/Makefile to generate the new sendmail.cf configuration file.</p>
<p><strong>Step 4: Test the configuration<br />
</strong><br />
This is where things get really interesting. sendmail must be restarted before it can use the new configuration file. Rather than simply restarting sendmail with our fingers crossed, we can test it to verify that every thing works properly. You can stop sendmail and then start it with command line options that cause it to log to a specified file. There are various ways to stop sendmail on a Red Hat/Fedora system:</p>
<p>service sendmail stop</p>
<p>or</p>
<p>cd /etc/mail<br />
make stop</p>
<p>or</p>
<p>make -C /etc/mail stop</p>
<p>or</p>
<p>/etc/init.d/sendmail stop</p>
<p>We want to start sendmail with arguments to make it log the SMTP transaction to a special file while we are testing it:</p>
<p>sendmail -bD -X /tmp/test.log</p>
<p>Now, try to send a message from an e-mail client on another computer that does not have relay access, using your server as the outgoing mail server. You should be denied relaying. Edit your preferences so that the client uses authentication, with a login and password (not Secure Password Authentication, or SPA, which is something completely different). You should still be denied access. The last thing you need to do is to instruct the client to use SSL or TLS with the outgoing mail server (there is no need to specify a special port). After making this change, you should be able to send mail (you will be prompted to accept the certificate, however, which you might want to install to prevent further prompts). Now hit ctrl-c to stop sendmail. Restart it normally:</p>
<p>service sendmail restart</p>
<p>Now it&#8217;s time to look at the log. After the first EHLO, sendmail offers something like this:</p>
<p>30245 &gt;&gt;&gt; 250-ENHANCEDSTATUSCODES<br />
30245 &gt;&gt;&gt; 250-PIPELINING<br />
30245 &gt;&gt;&gt; 250-8BITMIME<br />
30245 &gt;&gt;&gt; 250-SIZE<br />
30245 &gt;&gt;&gt; 250-DSN<br />
30245 &gt;&gt;&gt; 250-ETRN<br />
30245 &gt;&gt;&gt; 250-STARTTLS<br />
30245 &gt;&gt;&gt; 250-DELIVERBY<br />
30245 &gt;&gt;&gt; 250 HELP</p>
<p>The important thing is that AUTH is not offered here, because the channel isn&#8217;t encrypted. If you see AUTH in the first exchange, and it offers PLAIN or LOGIN, something is wrong. Look at your logs, go over the previous steps, and make sure that you generated a new sendmail.cf in the right location. The next entries in our log show that TLS is activated:</p>
<p>30245 &lt;&lt;&lt; STARTTLS<br />
30245 &gt;&gt;&gt; 220 2.0.0 Ready to start TLS</p>
<p>Another EHLO takes place, followed by something like this:</p>
<p>30245 &gt;&gt;&gt; 250-ENHANCEDSTATUSCODES<br />
30245 &gt;&gt;&gt; 250-PIPELINING<br />
30245 &gt;&gt;&gt; 250-8BITMIME<br />
30245 &gt;&gt;&gt; 250-SIZE<br />
30245 &gt;&gt;&gt; 250-DSN<br />
30245 &gt;&gt;&gt; 250-ETRN<br />
30245 &gt;&gt;&gt; 250-AUTH LOGIN PLAIN<br />
30245 &gt;&gt;&gt; 250-DELIVERBY<br />
30245 &gt;&gt;&gt; 250 HELP</p>
<p>Now AUTH is offered with the allowed mechanisms (but not STARTTLS, which isn&#8217;t needed here, as the channel is already encrypted). Authentication takes place, and the message is relayed to its destination.</p>
<p>It&#8217;s interesting to note that the username and password is Base64 encoded by the client, so it isn&#8217;t really sent as clear text:</p>
<p>30245 &lt;&lt;&lt; AUTH PLAIN AHJvYmVydABzbHVncw==<br />
30245 &gt;&gt;&gt; 235 2.0.0 OK Authenticated</p>
<p>Nevertheless, it would be trivial to decode the string into the correct username/login pair (robert/slugs, in this case). Therefore, it is best to secure the transaction with TLS. If you want to verify that the transaction is encrypted, open another terminal for root, and run tcpdump:</p>
<p>tcpdump -s 1500 -vvxX port 25</p>
<p>Send a mail with easy to identify strings. You shouldn&#8217;t see your login or the message in tcpdump&#8217;s output.</p>
<p>Note that the certificate will be exchanged in plain text before TLS is enabled. If the mail is relayed to another server that doesn&#8217;t offer STARTTLS, you will see the content of the outgoing message in plain text.</p>
<p><em><strong><a href="http://www.joreybump.com/code/howto/smtpauth.html" target="_blank">Source</a></strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/01/07/using-smtp-auth-and-starttls-with-sendmail-redhat-centos-fedora/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to &#8220;chmod&#8221; directory and/or file only</title>
		<link>http://blog.nataprawira.com/tech/2009/01/06/how-to-chmod-directory-andor-file-only/</link>
		<comments>http://blog.nataprawira.com/tech/2009/01/06/how-to-chmod-directory-andor-file-only/#comments</comments>
		<pubDate>Tue, 06 Jan 2009 03:22:08 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[directories]]></category>
		<category><![CDATA[files]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=24</guid>
		<description><![CDATA[

Just do as followings. Login root or as correct owner for the folder:
# cd (to your /path/directory)
# find -type d -print0 &#124;xargs -0 chmod 755
# find -type f -print0 &#124;xargs -0 chmod 644
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F06%2Fhow-to-chmod-directory-andor-file-only%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2009%2F01%2F06%2Fhow-to-chmod-directory-andor-file-only%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Just do as followings. Login root or as correct owner for the folder:</p>
<blockquote><p><strong># cd </strong>(to your /path/directory)<strong><br />
</strong><strong># find -type d -print0 |xargs -0 chmod 755<br />
# find -type f -print0 |xargs -0 chmod 644</strong></p></blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2009/01/06/how-to-chmod-directory-andor-file-only/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Severed cable disrupts net access</title>
		<link>http://blog.nataprawira.com/tech/2008/12/22/severed-cable-disrupts-net-access/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/22/severed-cable-disrupts-net-access/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 05:32:43 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=23</guid>
		<description><![CDATA[

Internet and phone communications between Europe, the Middle East, and Asia have been seriously disrupted after submarine cables were severed. 
It is thought the FLAG FEA, SMW4, and SMW3 lines, near the Alexandria cable station in Egypt, have all been cut.
A fault was also reported on the GO submarine cable 130km off Sicily.
Experts warned that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F22%2Fsevered-cable-disrupts-net-access%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F22%2Fsevered-cable-disrupts-net-access%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div class="headline"><strong>Internet and phone communications between Europe, the Middle East, and Asia have been seriously disrupted after submarine cables were severed. </strong></div>
<p>It is thought the FLAG FEA, SMW4, and SMW3 lines, near the Alexandria cable station in Egypt, have all been cut.</p>
<p>A fault was also reported on the GO submarine cable 130km off Sicily.</p>
<p>Experts warned that it may be days before the fault is fixed and said the knock on effect could have serious repercussions on regional economies.</p>
<div class="bo"></div>
<div class="bo">Jonathan Wright &#8211; director of wholesale products at Interoute which manages part of the optical fibre network &#8211; told the BBC that the effects of the break would be felt for many days.&#8221;This will grind economies to a halt for a short space of time,&#8221; he said &#8220;If you look at, say, local financial markets who trade with European and US markets, the speed at which they get live data will be compromised.&#8221;</div>
<div class="bo"><span id="more-23"></span></div>
<div class="bo">
<p>&#8220;If you think how quickly trades can be placed, if they are suffering from bad latency times, then by the time a trade is placed, the market may well have moved on.&#8221;</p>
<p>The cause of the break is as yet unknown, although some seismic activity was reported near Malta shortly before the cut was detected.</p>
</div>
<p>In a statement released in relation to one of the breaks, France Telecom said: &#8220;The causes of the cut, which is located in the Mediterranean between Sicily and Tunisia, on sections linking Sicily to Egypt, remain unclear.&#8221;</p>
<p>The French firm said it was sending a ship out to fix the line between Italy and Egypt, although it could take until 31 December to fully repair the line.</p>
<p>The main damage is to the four submarine cables running across the Mediterranean and through the Suez Canal.</p>
<p>It is thought that 65% of traffic to India was down, while services to Singapore, Malaysia, Saudi Arabia, Egypt, Taiwan and Pakistan have also been severely affected.</p>
<p>Earlier this year, the same line was damaged in the same area &#8211; off the Egyptian coast &#8211; although only two lines were snapped then.</p>
<p>&#8220;We&#8217;ve lost three out of four lines. If the fourth cable breaks, we&#8217;re looking at a total blackout in the Middle East,&#8221; said Mr Wright.</p>
<p>&#8220;These three circuits account for 90% of the traffic and we&#8217;re going to see more international phone calls dropping and a huge degradation in the quality of local internet,&#8221; he added.</p>
<p>&#8220;Normally you would expect to see one major break per cable per year. With four you should have an insurance policy. For this to happen twice in one year, on the same cable, is a serious cause for concern.&#8221;</p>
<p><strong> A selection of your comments on this story: </strong></p>
<p>Over weekend 13th to 16th December had considerable delays and time-outs reaching my email server in Germany and various homepages in Switzerland and the UK. I suspected that a breakdown somewhere was at fault but was surprised to be unable to get any info from Google etc. You can check your ADSL speed easily but finding the speed of a connection from one continent to another seems to be lacking.<br />
<strong> John Russell, Toowoomba, Queensland, Australia </strong></p>
<p>I began downloading something this afternoon but late this evening it suddenly became six or seven times slower. I now know why.<br />
<strong> Max, Wallasey, UK </strong></p>
<p>I teach English at a high school in Sisaket. The last few days our connections have been very, very slow. Yesterday, when I was trying to teach some students how to use Limewire to download movies and songs, the connection seemed to be nearly non-existent. We thought that maybe the wire to our building had been damaged.<br />
<strong> Les Blane, Sisaket, Thailand </strong></p>
<p>I work at a call centre. We are unable to make calls as the latency is too high which only ends up in dropping of every call that we dial and the internet speed has been downgraded like anything. I hope this gets fixed by Sunday (December 21), otherwise we will be in total blackout and will suffer in great loss of business in this high time.<br />
<strong> Adeel Awan, Karachi, Pakistan </strong></p>
<p>Yesterday&#8217;s cuts in Malta were a big hassle to all GO subscribers. One here seems to all of a sudden realise how dependent we all are on internet. At least alternative measures have been taken in Malta by GO in conjunction with another internet service provider which was not affected, and therefore today almost all Malta is back to normal &#8211; albeit with slower connections.<br />
<strong> George Bugeja, Zebbug, Malta </strong></p>
<p>Internet is very slow. I could not connect to any sites except by using a socks server I installed on one of my servers located in USA. I wonder why they do not use separated cables with separated routes? Why are the four main cables located with each other? It is just like putting all eggs in the same basket.<br />
<strong> Walaa Waguih, Alexandria, Egypt </strong></p>
<p>Currently staying in Brazil &#8211; cannot access virginmedia.com &#8211; don´t know if this has anything to do with the above.<br />
<strong> Roger Francomb, Sao Paulo </strong></p>
<p>One of my favourite sites was unavailable earlier. It&#8217;s back up, but from conversations there are still others who cannot access the site, some in the same country as the site&#8217;s servers.<br />
<strong> Michael Harvey, Framingham, Massachusetts, United States </strong></p>
<p>I had trouble with the net from earlier today which I thought had something to do with the local SP. The link gets disconnected frequently and even when you are connected it is terribly slow.<br />
<strong> Josekutty, Doha, Qatar </strong></p>
<p><em><strong><a title="http://news.bbc.co.uk/2/hi/technology/7792688.stm" href="http://news.bbc.co.uk/2/hi/technology/7792688.stm" target="_blank">Source</a></strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/22/severed-cable-disrupts-net-access/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to cleaning up SENDMAIL spool</title>
		<link>http://blog.nataprawira.com/tech/2008/12/18/how-to-cleaning-up-sendmail-spool/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/18/how-to-cleaning-up-sendmail-spool/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 04:50:48 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sendmail]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=21</guid>
		<description><![CDATA[

Cleaning the Mail Spool
There could be a lot of &#8220;trash&#8221; qf or df files left behind following a bout of misbehaving sendmails. If the size of either file is 0, you should be able to trash them safely.
cd /var/spool/mqueue-fixme
to get into your queue directory, and

find . -size 0 -exec rm {} \;
to find everything with [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F18%2Fhow-to-cleaning-up-sendmail-spool%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F18%2Fhow-to-cleaning-up-sendmail-spool%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<h3>Cleaning the Mail Spool</h3>
<p>There could be a lot of &#8220;trash&#8221; qf or df files left behind following a bout of misbehaving sendmails. If the size of either file is 0, you should be able to trash them safely.</p>
<pre><strong>cd /var/spool/mqueue-fixme</strong></pre>
<p>to get into your queue directory, and</p>
<p><span id="more-21"></span></p>
<pre><strong>find . -size 0 -exec rm {} \;</strong></pre>
<p>to find everything with a size of 0 and execute the remove command on the found files. This is unwise to run in your default queue directory, even when sendmail is stopped.</p>
<p>Perhaps a sleazy spammer, cretinous chain-mailer, naughty Novell server, or administrator accidentally sending out e-mail to everyone is the cause of your mail woes. You can pull these messages from the mail queue thusly:</p>
<pre><strong>cd /var/spool/mqueue-fixme
mkdir /var/tmp/EVIDENCE-OF-ILLDOING
grep idiot@wherever qf* | cut -d":" -f1  | uniq | cut -d"f" -f2 | \
 xargs -i echo "mv *{} /var/tmp/EVIDENCE-OF-ILLDOING" &gt; RUNME
chmod 700 RUNME
./RUNME</strong></pre>
<p>A sendmail problem could result in lots of &#8220;qf&#8221; files with no corresponding &#8220;df&#8221; file, and vice versa. You can get rid of these unmatched files with:</p>
<pre><strong>cd /var/spool/mqueue-fixme
ls -1 | cut -c 3-16 | sort | uniq -c | sort -n | grep " 1 " | awk '{print "*"$2}' &gt; ~/rmfile</strong></pre>
<p>Then, execute this perl script:</p>
<pre><strong>#!/usr/local/bin/perl

use strict;

open (RMFILE, "rmfile");
while (my $line=</strong><strong>) {
        chomp $line;
        print $line."\n";
        system ("rm /var/spool/mqueue/$line");
}
close (RMFILE);</strong></pre>
<p>I realize that this is not pretty, but it was the best that I could come up with since echo and xargs were not cooperating with me whatsoever.</p>
<p><a title="http://networking.ringofsaturn.com/Unix/sendmailtips.php" href="http://networking.ringofsaturn.com/Unix/sendmailtips.php" target="_blank"><em><strong>Source</strong></em></a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/18/how-to-cleaning-up-sendmail-spool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE ignores custom error pages</title>
		<link>http://blog.nataprawira.com/tech/2008/12/18/ie-ignores-custom-error-pages/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/18/ie-ignores-custom-error-pages/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 04:10:45 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=20</guid>
		<description><![CDATA[

if you use php to create custom error  pages (such as header('HTTP/1.1 500 Internal Server Error');) Internet Explorer  ignores you custom page unless it is at least 512 (or sometimes 1024 bytes)
IE ignores custom error pages that are less than 512 (or from what i've  read 1024) bytes.
just place this before any [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F18%2Fie-ignores-custom-error-pages%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F18%2Fie-ignores-custom-error-pages%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div class="phpcode"><code><span class="html">if you use php to create custom error  pages (such as header('HTTP/1.1 500 Internal Server Error');) Internet Explorer  ignores you custom page unless it is at least 512 (or sometimes 1024 bytes)</p>
<p>IE ignores custom error pages that are less than 512 (or from what i've  read 1024) bytes.</p>
<p>just place this before any output on your custom error  page--- and be sure that your custom error page includes proper html tags (it  must have a &lt;/body&gt; for this specific example to work)</p>
<p><span class="default">&lt;?php<br />
</span><span class="comment">// set your custom error  header --- example --- header('HTTP/1.1 503 Service Unavailable');</p>
<p></span><span class="keyword">function </span><span class="default">padding</span><span class="keyword">(</span><span class="default">$html</span><span class="keyword">){<br />
return (</span><span class="default">$padding</span><span class="keyword">=</span><span class="default">1024</span><span class="keyword">-</span><span class="default">ob_get_length</span><span class="keyword">()) &gt; </span><span class="default">0 </span><span class="keyword">? </span><span class="default">str_replace</span><span class="keyword">(</span><span class="string">'&lt;/body&gt;'</span><span class="keyword">,</span><span class="string">'&lt;!--'</span><span class="keyword">. (</span><span class="default">$padding</span><span class="keyword">&gt;</span><span class="default">8</span><span class="keyword">?</span><span class="default">str_repeat</span><span class="keyword">(</span><span class="string">'  '</span><span class="keyword">,</span><span class="default">$padding</span><span class="keyword">-</span><span class="default">8</span><span class="keyword">)  :</span><span class="default">null </span><span class="keyword">).</span><span class="string">'--&gt;'</span><span class="keyword">.</span><span class="string">"\n"</span><span class="keyword">.</span><span class="string">'&lt;/body&gt;'</span><span class="keyword">,</span><span class="default">$html</span><span class="keyword">) : </span><span class="default">$html</span><span class="keyword">;<br />
}</p>
<p></span><span class="default">ob_start</span><span class="keyword">(</span><span class="string">'padding'</span><span class="keyword">);<br />
</span><span class="default">?&gt;<br />
</span><br />
and then place this somewhere within the html  error page output</p>
<p>&lt;!-- ---- --&gt;</p>
<p>that will auto-adjust to  pad the file to 1024 bytes to override the default Internet Explorer error  pages.</span> </code></div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/18/ie-ignores-custom-error-pages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to show image file that&#8217;s not accessible to public ?</title>
		<link>http://blog.nataprawira.com/tech/2008/12/17/how-to-show-image-file-thats-not-accessible-to-public/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/17/how-to-show-image-file-thats-not-accessible-to-public/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 07:03:40 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=19</guid>
		<description><![CDATA[

You can use below script to show the image file for public access, but public don&#8217;t have direct access to the file itself. Because its located outside of the public folder.
&#60;?php
/* Read local file from /home/bar */
$localfile = file_get_contents("/home/userX/foo.jpg");
echo $localfile;
?&#62;
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fhow-to-show-image-file-thats-not-accessible-to-public%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fhow-to-show-image-file-thats-not-accessible-to-public%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>You can use below script to show the image file for public access, but public don&#8217;t have direct access to the file itself. Because its located outside of the public folder.</p>
<p><code><span style="color: #000000"><span style="color: #0000bb">&lt;?php<br />
</span><span style="color: #ff8000">/* Read local file from /home/bar */<br />
</span><span style="color: #0000bb">$localfile </span><span style="color: #007700">= </span><span style="color: #0000bb"><span style="color: #ffffff">file_get_contents</span></span><span style="color: #007700">(</span><span style="color: #dd0000">"/home/userX/foo.jpg"</span><span style="color: #007700">);</span></span></code></p>
<p><code><span style="color: #000000"><span style="color: #0000bb">echo $localfile;</span></span></code><br />
<span style="color: #0000bb">?&gt;</span></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/17/how-to-show-image-file-thats-not-accessible-to-public/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to know ID number that inserted by the mysql insert query ?</title>
		<link>http://blog.nataprawira.com/tech/2008/12/17/mysql_insert_id-example/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/17/mysql_insert_id-example/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 06:52:44 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=18</guid>
		<description><![CDATA[

Use below scripts :
mysql_insert_id() example
&#60;?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", mysql_insert_id());
?&#62; 
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fmysql_insert_id-example%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fmysql_insert_id-example%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Use below scripts :</p>
<p><strong><strong>mysql_insert_id()</strong> example</strong></p>
<div class="example-contents"><code><span style="color: #000000"><span style="color: #0000bb">&lt;?php<br />
$link </span><span style="color: #007700">= </span><span style="color: #0000bb">mysql_connect</span><span style="color: #007700">(</span><span style="color: #dd0000">'localhost'</span><span style="color: #007700">, </span><span style="color: #dd0000">'mysql_user'</span><span style="color: #007700">, </span><span style="color: #dd0000">'mysql_password'</span><span style="color: #007700">);<br />
if (!</span><span style="color: #0000bb">$link</span><span style="color: #007700">) {<br />
die(</span><span style="color: #dd0000">'Could not connect: ' </span><span style="color: #007700">. </span><span style="color: #0000bb">mysql_error</span><span style="color: #007700">());<br />
}<br />
</span><span style="color: #0000bb">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #dd0000">'mydb'</span><span style="color: #007700">);</p>
<p></span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #dd0000">"INSERT INTO mytable (product) values ('kossu')"</span><span style="color: #007700">);<br />
</span><span style="color: #0000bb">printf</span><span style="color: #007700">(</span><span style="color: #dd0000">"Last inserted record has id %d\n"</span><span style="color: #007700">, </span><span style="color: #0000bb">mysql_insert_id</span><span style="color: #007700">());<br />
</span><span style="color: #0000bb">?&gt;</span> </span></code></div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/17/mysql_insert_id-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to fetch data(s) using mysql_fetch_assoc ?</title>
		<link>http://blog.nataprawira.com/tech/2008/12/17/an-expanded-mysql_fetch_assoc-example/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/17/an-expanded-mysql_fetch_assoc-example/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 06:50:46 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutorial]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=17</guid>
		<description><![CDATA[


mysql_fetch_assoc — Fetch a result row as an associative array


&#60;?php
$conn
= mysql_connect("localhost", "mysql_user", "mysql_password");
if (!
$conn) {
echo "Unable to connect to DB: " . mysql_error();
exit;
}
if (!
mysql_select_db("mydbname")) {
echo "Unable to select mydbname: " . mysql_error();
exit;
}
$sql = "SELECT id as userid, fullname, userstatus
FROM   sometable
WHERE  userstatus = 1";
$result = mysql_query($sql);
if (!
$result) {
echo "Could not successfully run query ($sql) from DB: " . mysql_error();
exit;
}
if (
mysql_num_rows($result) == 0) {
echo "No rows found, nothing to print so am exiting";
exit;
}
// While a row of data exists, put that row in $row as an associative array
// Note: If you're expecting just one row, no need to use a loop
// Note: If you put extract($row); inside the following loop, you'll
//       then create $userid, $fullname, and $userstatus

while ($row = mysql_fetch_assoc($result)) {
echo $row["userid"];
echo $row["fullname"];
echo $row["userstatus"];
}
mysql_free_result($result);
?&#62; 
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fan-expanded-mysql_fetch_assoc-example%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fan-expanded-mysql_fetch_assoc-example%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<div class="example-contents">
<p><strong>mysql_fetch_assoc</strong> — Fetch a result row as an associative array</p>
</div>
<div class="example-contents"></div>
<div class="example-contents"><code><span style="color: #000000"><span style="color: #0000bb">&lt;?php</p>
<p>$conn</p>
<p></span><span style="color: #007700">= </span><span style="color: #0000bb">mysql_connect</span><span style="color: #007700">(</span><span style="color: #dd0000">"localhost"</span><span style="color: #007700">, </span><span style="color: #dd0000">"mysql_user"</span><span style="color: #007700">, </span><span style="color: #dd0000">"mysql_password"</span><span style="color: #007700">);</p>
<p>if (!</p>
<p></span><span style="color: #0000bb">$conn</span><span style="color: #007700">) {<br />
echo </span><span style="color: #dd0000">"Unable to connect to DB: " </span><span style="color: #007700">. </span><span style="color: #0000bb">mysql_error</span><span style="color: #007700">();<br />
exit;<br />
}</p>
<p>if (!</p>
<p></span><span style="color: #0000bb">mysql_select_db</span><span style="color: #007700">(</span><span style="color: #dd0000">"mydbname"</span><span style="color: #007700">)) {<br />
echo </span><span style="color: #dd0000">"Unable to select mydbname: " </span><span style="color: #007700">. </span><span style="color: #0000bb">mysql_error</span><span style="color: #007700">();<br />
exit;<br />
}</p>
<p></span><span style="color: #0000bb">$sql </span><span style="color: #007700">= </span><span style="color: #dd0000">"SELECT id as userid, fullname, userstatus<br />
FROM   sometable<br />
WHERE  userstatus = 1"</span><span style="color: #007700">;</p>
<p></span><span style="color: #0000bb">$result </span><span style="color: #007700">= </span><span style="color: #0000bb">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000bb">$sql</span><span style="color: #007700">);</p>
<p>if (!</p>
<p></span><span style="color: #0000bb">$result</span><span style="color: #007700">) {<br />
echo </span><span style="color: #dd0000">"Could not successfully run query ($sql) from DB: " </span><span style="color: #007700">. </span><span style="color: #0000bb">mysql_error</span><span style="color: #007700">();<br />
exit;<br />
}</p>
<p>if (</p>
<p></span><span style="color: #0000bb">mysql_num_rows</span><span style="color: #007700">(</span><span style="color: #0000bb">$result</span><span style="color: #007700">) == </span><span style="color: #0000bb">0</span><span style="color: #007700">) {<br />
echo </span><span style="color: #dd0000">"No rows found, nothing to print so am exiting"</span><span style="color: #007700">;<br />
exit;<br />
}</p>
<p></span><span style="color: #ff8000">// While a row of data exists, put that row in $row as an associative array<br />
// Note: If you're expecting just one row, no need to use a loop<br />
// Note: If you put extract($row); inside the following loop, you'll<br />
//       then create $userid, $fullname, and $userstatus</span></span></code></div>
<div class="example-contents"><code><span style="color: #000000"><span style="color: #ff8000"><br />
</span><span style="color: #007700">while (</span><span style="color: #0000bb">$row </span><span style="color: #007700">= </span><span style="color: #0000bb">mysql_fetch_assoc</span><span style="color: #007700">(</span><span style="color: #0000bb">$result</span><span style="color: #007700">)) {<br />
echo </span><span style="color: #0000bb">$row</span><span style="color: #007700">[</span><span style="color: #dd0000">"userid"</span><span style="color: #007700">];<br />
echo </span><span style="color: #0000bb">$row</span><span style="color: #007700">[</span><span style="color: #dd0000">"fullname"</span><span style="color: #007700">];<br />
echo </span><span style="color: #0000bb">$row</span><span style="color: #007700">[</span><span style="color: #dd0000">"userstatus"</span><span style="color: #007700">];<br />
}</p>
<p></span><span style="color: #0000bb">mysql_free_result</span><span style="color: #007700">(</span><span style="color: #0000bb">$result</span><span style="color: #007700">);</p>
<p></span><span style="color: #0000bb">?&gt;</span> </span></code></div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/17/an-expanded-mysql_fetch_assoc-example/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Serious security flaw found in IE</title>
		<link>http://blog.nataprawira.com/tech/2008/12/17/serious-security-flaw-found-in-ie/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/17/serious-security-flaw-found-in-ie/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 06:41:43 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[IE7]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=16</guid>
		<description><![CDATA[






Internet Explorer is used by the vast majority of the world&#8217;s computer user





 
Users of Microsoft&#8217;s Internet Explorer are being urged by experts to switch to a rival until a serious security flaw has been fixed.
The flaw in Microsoft&#8217;s Internet Explorer could allow criminals to take control of people&#8217;s computers and steal their passwords, internet [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fserious-security-flaw-found-in-ie%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F17%2Fserious-security-flaw-found-in-ie%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<table border="0" cellspacing="0" cellpadding="0" width="226" align="right">
<tbody>
<tr>
<td>
<div><img src="http://newsimg.bbc.co.uk/media/images/45301000/jpg/_45301037_000882073-1.jpg" border="0" alt="Microsoft Internet Explorer logo, file pic from 2004" hspace="0" vspace="0" width="226" height="170" /></p>
<div class="cap">Internet Explorer is used by the vast majority of the world&#8217;s computer user</div>
</div>
</td>
</tr>
</tbody>
</table>
<p><!-- E IIMA --> <!-- S SF --></p>
<p class="first"><strong>Users of Microsoft&#8217;s Internet Explorer are being urged by experts to switch to a rival until a serious security flaw has been fixed.</strong></p>
<p>The flaw in Microsoft&#8217;s Internet Explorer could allow criminals to take control of people&#8217;s computers and steal their passwords, internet experts say.</p>
<p>Microsoft urged people to be vigilant while it investigated and prepared an emergency patch to resolve it.</p>
<p>Internet Explorer is used by the vast majority of the world&#8217;s computer users. <!-- E SF --></p>
<p><!-- S IBOX --></p>
<table border="0" cellspacing="0" cellpadding="0" width="231" align="right">
<tbody>
<tr>
<td width="5"><img src="http://newsimg.bbc.co.uk/shared/img/o.gif" border="0" alt="" hspace="0" vspace="0" width="5" height="1" /></td>
<td class="sibtbg">
<div>
<div class="mva"><img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/start_quote_rb.gif" border="0" alt="" width="24" height="13" /> <strong>It&#8217;s a shame Microsoft have not been able to fix this more quickly</strong> <img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/end_quote_rb.gif" border="0" alt="" vspace="0" width="23" height="13" align="right" />
</div>
</div>
<div class="mva">
<div>Darien Graham-Smith<br />
PC Pro magazine</div>
</div>
<div class="o"><img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/inline_dashed_line.gif" border="0" alt="" hspace="0" vspace="2" width="226" height="1" />
</div>
<div class="miiib"><!-- S ILIN --></p>
<div class="arr"><a href="http://news.bbc.co.uk/2/hi/technology/7732971.stm">Q&amp;A: Stay safe online</a></div>
<p><!-- E ILIN --></div>
</td>
</tr>
</tbody>
</table>
<p><!-- E IBOX -->&#8220;Microsoft is continuing its investigation of public reports of attacks against a new vulnerability in Internet Explorer,&#8221; said the firm in a security advisory alert about the flaw.</p>
<p>Microsoft says it has detected attacks against IE 7.0 but said the &#8220;underlying vulnerability&#8221; was present in all versions of the browser.</p>
<p>Other browsers, such as Firefox, Opera, Chrome, Safari, are not vulnerable to the flaw Microsoft has identified.</p>
<p><strong>Browser bait</strong></p>
<p>&#8220;In this case, hackers found the hole before Microsoft did,&#8221; said Rick Ferguson, senior security advisor at Trend Micro. &#8220;This is never a good thing.&#8221;</p>
<p>As many as 10,000 websites have been compromised since the vulnerability was discovered, he said.</p>
<p>&#8220;What we&#8217;ve seen from the exploit so far is it stealing game passwords, but it&#8217;s inevitable that it will be adapted by criminals,&#8221; he said. &#8220;It&#8217;s just a question of modifying the payload the trojan installs.&#8221;</p>
<p><!-- S IBOX --></p>
<table border="0" cellspacing="0" cellpadding="0" width="231" align="right">
<tbody>
<tr>
<td width="5"><img src="http://newsimg.bbc.co.uk/shared/img/o.gif" border="0" alt="" hspace="0" vspace="0" width="5" height="1" /></td>
<td class="sibtbg">
<div class="sih">MICROSOFT SECURITY ADVICE</div>
<div class="mva">
<div class="bull">Change IE security settings to high (Look under Tools/Internet Options)</div>
<div class="bull">Switch to a Windows user account with limited rights to change a PC&#8217;s settings</div>
<div class="bull">With IE7 or 8 on Vista turn on Protected Mode</div>
<div class="bull">Ensure your PC is updated</div>
<div class="bull">Keep anti-virus and anti-spyware software up to date</div>
</div>
</td>
</tr>
</tbody>
</table>
<p><!-- E IBOX -->Said Mr Ferguson: &#8220;If users can find an alternative browser, then that&#8217;s good mitigation against the threat.&#8221;</p>
<p>But Microsoft counselled against taking such action.</p>
<p>&#8220;I cannot recommend people switch due to this one flaw,&#8221; said John Curran, head of Microsoft UK&#8217;s Windows group.</p>
<p>He added: &#8220;We&#8217;re trying to get this resolved as soon as possible.</p>
<p>&#8220;At present, this exploit only seems to affect 0.02% of internet sites,&#8221; said Mr Curran. &#8220;In terms of vulnerability, it only seems to be affecting IE7 users at the moment, but could well encompass other versions in time.&#8221;</p>
<p>Richard Cox, chief information officer of anti-spam body The Spamhaus Project and an expert on privacy and cyber security, echoed Trend Micro&#8217;s warning.</p>
<p>&#8220;It won&#8217;t be long before someone reverse engineers this exploit for more fraudulent purposes. Trend Mico&#8217;s advice [of switching to an alternative web browser] is very sensible,&#8221; he said.</p>
<p><!-- S IBOX --></p>
<table border="0" cellspacing="0" cellpadding="0" width="231" align="right">
<tbody>
<tr>
<td width="5"><img src="http://newsimg.bbc.co.uk/shared/img/o.gif" border="0" alt="" hspace="0" vspace="0" width="5" height="1" /></td>
<td class="sibtbg">
<div class="o"></div>
<div>
<div class="mva"><img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/start_quote_rb.gif" border="0" alt="" width="24" height="13" /> <strong>This could be the moment when the minnows in the browser wars finally score a significant victory</strong> <img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/end_quote_rb.gif" border="0" alt="" vspace="0" width="23" height="13" align="right" />
</div>
</div>
<div class="mva">
<div>Rory Cellan-Jones<br />
BBC technology editor</div>
</div>
<div class="o"><img src="http://newsimg.bbc.co.uk/nol/shared/img/v3/inline_dashed_line.gif" border="0" alt="" hspace="0" vspace="2" width="226" height="1" />
</div>
<div class="miiib"><!-- S ILIN --></p>
<div class="arr"><a href="http://www.bbc.co.uk/blogs/technology/2008/12/is_it_safe_to_explore.html">Read the dot.life blog in full</a></div>
<p><!-- E ILIN --></div>
</td>
</tr>
</tbody>
</table>
<p><!-- E IBOX -->PC Pro magazine&#8217;s security editor, Darien Graham-Smith, said that there was a virtual arms race going on, with hackers always on the look out for new vulnerabilities.</p>
<p>&#8220;The message needs to get out that this malicious code can be planted on any web site, so simple careful browsing isn&#8217;t enough.&#8221;</p>
<p>&#8220;It&#8217;s a shame Microsoft have not been able to fix this more quickly, but letting people know about this flaw was the right thing to do. If you keep flaws like this quiet, people are put at risk without knowing it.&#8221;</p>
<p>&#8220;Every browser is susceptible to vulnerabilities from time to time. It&#8217;s fine to say &#8216;don&#8217;t use Internet Explorer&#8217; for now, but other browsers may well find themselves in a similar situation,&#8221; he added.</p>
<p><em><strong><a href="http://news.bbc.co.uk/2/hi/technology/7784908.stm" target="_blank">Source</a></strong></em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/17/serious-security-flaw-found-in-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let’s Install JSON for PHP 5</title>
		<link>http://blog.nataprawira.com/tech/2008/12/10/let%e2%80%99s-install-json-for-php-5/</link>
		<comments>http://blog.nataprawira.com/tech/2008/12/10/let%e2%80%99s-install-json-for-php-5/#comments</comments>
		<pubDate>Wed, 10 Dec 2008 09:34:41 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=15</guid>
		<description><![CDATA[

Originally by Scott Hebert
* his article has been edited to fit in my case.
JSON (JavaScript Object Notation) LogoI recently started messing around with building my own Facebook application. I figured the best way to start learning was to download the demo application and get it working on the Slaptijack web server. I quickly ran into [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F10%2Flet%25e2%2580%2599s-install-json-for-php-5%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F12%2F10%2Flet%25e2%2580%2599s-install-json-for-php-5%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><em>Originally by <strong><a title="http://slaptijack.com/system-administration/lets-install-json-for-php-5/" href="http://slaptijack.com/system-administration/lets-install-json-for-php-5/" target="_blank">Scott Hebert</a></strong></em></p>
<p><strong><em>* his article has been edited to fit in my case.</em></strong></p>
<p><strong><a href="http://php.net/json" target="_blank">JSON</a></strong> (JavaScript Object Notation) LogoI recently started messing around with building my own Facebook application. I figured the best way to start learning was to download the demo application and get it working on the <em>Slaptijack </em>web server. I quickly ran into a problem:</p>
<p><strong> PHP Fatal error:  Call to undefined function json_encode()</strong></p>
<p>The problem is that PHP 5.2 includes the json_encode() and json_decode() functions built right in. Unfortunately, I’m running on PHP 5.0 which doesn’t include native JSON support. Here’s how I resolved that.</p>
<p>1. <strong>Install </strong>json &#8211; This was actually trickier than expected. I assumed I would be able to install this via pear. Apparently, a PEAR Services_JSON package was developed, but it has never been accepted into the official repository.</p>
<p>The trick instead is to use the <em>PECL json package</em>. This was as easy as running <strong>pecl install json</strong> and watch the compiler do its thing.</p>
<p>When it’s done you should have a <strong>json.so</strong> file in your PHP modules directory. Usually under:<em> <strong>/usr/lib/php/modules/</strong></em></p>
<p>2. Create a file with <a href="http://linuxreviews.org/man/nano/" target="_blank">nano</a> or <a href="http://linuxreviews.org/man/vi/" target="_blank">vi</a>, named : <strong>json.ini</strong> and put it in to <strong>/etc/php.d/</strong> folder &#8211; and simply add <strong>extension=json.so </strong>to this file and that will enable the extension. <em>*skip this step if you don&#8217;t have /etc/php.d/ folder*</em></p>
<p>In other case, you can just need to add: <strong>extension=json.so </strong>inside your <strong>php.ini</strong> file. Easy way, you can run below command from your root access :</p>
<p><strong>echo &#8220;extension=json.so&#8221; &gt;&gt; [directory_path_to]/php.ini<br />
</strong></p>
<p>3. <strong>Restart Apache </strong>- Not much more to add here. Without the restart, the extension won’t be loaded.</p>
<p>4. <strong>Profit</strong>!</p>
<p>That’s all it took. Now my PHP 5 installation is kicking along happily with the required JSON functions.</p>
<p>Original source:<br />
<a href="http://slaptijack.com/system-administration/lets-install-json-for-php-5/">http://slaptijack.com/system-administration/lets-install-json-for-php-5/</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/12/10/let%e2%80%99s-install-json-for-php-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>More about urlencode and urldecode</title>
		<link>http://blog.nataprawira.com/tech/2008/11/14/more-about-urlencode-and-urldecode/</link>
		<comments>http://blog.nataprawira.com/tech/2008/11/14/more-about-urlencode-and-urldecode/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 03:14:30 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[urldecode]]></category>
		<category><![CDATA[urlencode]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=14</guid>
		<description><![CDATA[

What you want is possible but it is considerably more work that it is practical to put in. Just say decode and let PHP do the calculations  
Anyway, thanks for an interesting question. Researching it taught me about both how UTF-8 works and about URL encoding in general.
First, link to an explanation of URL [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F11%2F14%2Fmore-about-urlencode-and-urldecode%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F11%2F14%2Fmore-about-urlencode-and-urldecode%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>What you want is possible but it is considerably more work that it is practical to put in. Just say decode and let <span class="searchTerm">PHP</span> do the calculations <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Anyway, thanks for an interesting question. Researching it taught me about both how UTF-8 works and about URL encoding in general.</p>
<p>First, link to an explanation of URL encoding:<br />
<a rel="nofollow" href="http://www.blooberry.com/indexdot/html/topics/urlencoding.htm" target="_blank">http://www.blooberry.com/indexdot/html/topics/urlencoding.htm</a><br />
(disclosure: it&#8217;s written by someone I know <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Secondly, here is how to find the <span class="searchTerm">character</span> from a URL encoding &#8211; manually!</p>
<p>Your <span class="searchTerm">character</span> above &#8211; &#8220;我&#8221; (according to babelfish.altavista.com it means &#8220;I&#8221; in <span class="searchTerm">Chinese</span>, if you can&#8217;t see it in your browser try to copy this and paste in your address bar: javascript:&#8217;&lt;html&gt;我</p>
<div id="EchoTopic" class="answerBody quoted">&lt;/html&gt;&#8217; ) is actually encoded as %E6%88%91.</p>
<p>First tool we use is the Windows calculator: open it and change to Scientific mode in the View menu. Then choose &#8220;Hex&#8221; format and type the hex value from above (simply strip out the % -signs): e68891.</p>
<p>Now click the &#8220;Bin&#8221; option to get the binary value of this hexadecimal number. Copy it and paste it in Notepad.</p>
<p>111001101000100010010001</p>
<p>This is the binary, UTF-8 encoded string. We want to un-UTF-8 it to find the Unicode value. Here is a technical documentation for UTF-8:<br />
<a rel="nofollow" href="ftp://ftp.isi.edu/in-notes/rfc2279.txt" target="_blank">ftp://ftp.isi.edu/in-notes/rfc2279.txt</a></p>
<p>First, start at the end of the string add linebreaks for each 8 digits.</p>
<p>11100110<br />
10001000<br />
10010001</p>
<p>From the first line, remove all the initial 1 &#8211; digits. From each of the next lines, remove the inital &#8220;10&#8243; &#8211; it will now look like this:</p>
<p>00110<br />
001000<br />
010001</p>
<p>Remove the line breaks and put it all on one line again:</p>
<p>00110001000010001</p>
<p>Copy that whole string and go back to the calculator. It should still be on &#8220;Binary&#8221; format, so just paste this new string.</p>
<p>If you now click &#8220;Dec&#8221; (for decimal or &#8220;normal&#8221; format), this is the exact number given in your first post because your browser translated a <span class="searchTerm">character</span> not supported in the POST encoding to a HTML entity &#8211; 25105.</p>
<p>Next, click &#8220;Hex&#8221;. The calculator will say &#8220;6211&#8243;. Now open the Windows &#8220;<span class="searchTerm">character</span> map&#8221; utility. Activate &#8220;Advanced view&#8221; if it doesn&#8217;t show the &#8220;Go to Unicode&#8221; box. Then, in the &#8220;Go to Unicode&#8221; box type 6211. Voila, it shows the <span class="searchTerm">character</span> you are looking for.</p>
<p>I&#8217;m sure you agree it is simpler to just type &lt;? urldecode(&#8217;%E6%88%91&#8242;) ?&gt; <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><em><strong><a href="http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/PHP_Windows/Q_21190448.html" target="_self">source</a><br />
</strong></em></p>
</div>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/11/14/more-about-urlencode-and-urldecode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nasty TinyMCE Error</title>
		<link>http://blog.nataprawira.com/tech/2008/11/13/nasty-tinymce-error/</link>
		<comments>http://blog.nataprawira.com/tech/2008/11/13/nasty-tinymce-error/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 03:01:10 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Error]]></category>
		<category><![CDATA[Nasty]]></category>
		<category><![CDATA[TinyMCE]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=13</guid>
		<description><![CDATA[

There is a nasty tinyMCE error in Firefox that made my life a living hell.
First it was hard to track when it happened. Mostly when using tinyMCE in tabbed displays. I thought the two JavaScript libraries did not &#8220;support&#8221; each other. or maybe some weird variable they use together.
the error was visible in firebug (or [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F11%2F13%2Fnasty-tinymce-error%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F11%2F13%2Fnasty-tinymce-error%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>There is a nasty tinyMCE error in Firefox that made my life a living hell.</p>
<p>First it was hard to track when it happened. Mostly when using tinyMCE in tabbed displays. I thought the two JavaScript libraries did not &#8220;support&#8221; each other. or maybe some weird variable they use together.</p>
<p>the error was visible in firebug (or error console):</p>
<blockquote><p><strong>uncaught exception: [Exception... "Component returned failure code: 0x80070057 (NS_ERROR_ILLEGAL_VALUE) [nsISelection.getRangeAt]&#8221;  nsresult: &#8220;0&#215;80070057 (NS_ERROR_ILLEGAL_VALUE)&#8221;  location: &#8220;JS frame :: http://xxx/mambots/editors/tinymce/jscripts/tiny_mce/tiny_mce_src.js :: anonymous :: line 6465&#8243;  data: no]</strong></p></blockquote>
<p>Then it happened also in a script that made the editor invisible and then back visible.</p>
<p>And it dawed me .. TinyMCE has some unexplained problem on submit when turning visible. you have to click on it first (give him focus), then it&#8217;s ok.</p>
<p>So i added in submit button (admin side &#8211; Joomla programmers know what i mean):</p>
<blockquote><p><strong>if (tinyMCE) tinyMCE.execCommand(&#8217;mceFocus&#8217;, false,&#8217;mailbody&#8217;);</strong></p></blockquote>
<p>as the first line. and all was fine&#8230;</p>
<p>Hope it helps other</p>
<p><a href="http://softmarket.ro/joomla-tips/nasty-tinymce-error.html">Source</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/11/13/nasty-tinymce-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress: Using a Cron job to keep things safe</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/wordpress-using-a-cron-job-to-keep-things-safe/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/wordpress-using-a-cron-job-to-keep-things-safe/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:06:26 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=10</guid>
		<description><![CDATA[

NOTE:
This is maybe not suitable for WPMU


DOWNLOAD:
WordPress Backup with Cron.pdf

Original Links

Using a Cron job to keep things safe

What it does:

At midnight every night, the core WordPress tables are backed up, compressed and emailed to you. The backed up file is then deleted from the server.

For the script to work, you must have MUTT installed on [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fwordpress-using-a-cron-job-to-keep-things-safe%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fwordpress-using-a-cron-job-to-keep-things-safe%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<blockquote><p><strong>NOTE:<br />
This is maybe not suitable for WPMU<br />
</strong></p>
</blockquote>
<p><em>DOWNLOAD:</em><br />
<a href='http://blog.efusionteam.com/denie/files/2008/03/wordpress-backup-with-cron.pdf' title='WordPress Backup with Cron.pdf'>WordPress Backup with Cron.pdf</a></p>
</p>
<p><a href="http://www.tamba2.org.uk/wordpress/cron/">Original Links</a></p>
</p>
<p><strong>Using a Cron job to keep things safe</strong></p>
</p>
<p><em>What it does:</em></p>
</p>
<p>At midnight every night, the core WordPress tables are backed up, compressed and emailed to you. The backed up file is then deleted from the server.</p>
</p>
<p>For the script to work, you must have MUTT installed on your server. Ask your host about this.<br />
Known hosts on which this works: A Small Orange, EMax hosting and Site5. If you know of any others, please let me know ?</p>
</p>
<p><em>Why it does this:</em></p>
</p>
<p>The only backup script I could find that did what I wanted was automysql. Problem was that this backed up the entire database and I wanted to exclude tables involved with stats and spam. There may well be a way to modify automysql but I could not find it. So I put this together.</p>
</p>
<p><em>License:</p>
</p>
<p>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.<br />
(See the download).</em></p>
</p>
<p><em>Disclaimer:</p>
</p>
<p>I am not responsible if this does anything wrong. Before you install code you should be either familiar with what it does and how, or you should ask someone you trust &#8211; with a cron job asking your host is a &#8220;Good Thing&#8221;.</em></p>
</p>
<p><strong>Cron Job ?</strong></p>
</p>
<p>http://en.wikipedia.org/wiki/Cron explains. If you are unsure about Cron, or you need to know if you can run Cron jobs, talk to your host &#8211; only they can answer.</p>
</p>
<blockquote><p>NOTE</p>
</p>
<p>This ONLY backs up those tables which were created when you installed WP. If keeping all your stats, all your anti-spam settings, your user-online tables, your mostaccessed tables etc etc etc is important, just go use automysql &#8211; it is more fully featured. I&#8217;m working on the principle that if something catastrophic did happen then all you really want is your posts, comments and links.</p>
</blockquote>
<p><strong>The script</strong></p>
</p>
<p>In a nutshell it says this: &#8220;Get this database, save a copy, compress it, mail it, delete the copy.&#8221;</p>
</p>
<blockquote><p>
    #Set the 4 variables<br />
    #Replace what is AFTER the = with the information from your wp-config.php file<br />
    #That&#8217;s your information on the right okay ?</p>
</p>
<p>    DBNAME=DB_NAME</p>
</p>
<p>    DBPASS=DB_PASSWORD</p>
</p>
<p>    DBUSER=DB_USER</p>
</p>
<p>    #Keep the &#8221; around your address<br />
    EMAIL=&#8221;you@your_email.com&#8221;</p>
</p>
<p>    mysqldump &#8211;opt -u $DBUSER -p$DBPASS $DBNAME &gt; backup.sql<br />
    gzip backup.sql<br />
    DATE=`date +%Y%m%d` ; mv backup.sql.gz $DBNAME-backup-$DATE.sql.gz<br />
    echo &#8216;Blog Name:Your mySQL Backup is attached&#8217; | mutt -a $DBNAME-backup-$DATE.sql.gz $EMAIL -s &#8220;MySQL Backup&#8221;<br />
    rm $DBNAME-backup-$DATE.sql.gz
</p>
</blockquote>
</p>
<p>All you need to do is tell it which database and where to send it. Easy <img src='http://blog.nataprawira.com/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</p>
<p>See the &#8216;Blog Name:&#8217; bit ? Put something there to identify it for you. Useful if you have multiple cron running.</p>
</p>
<p>You can download the 2.0 script here: <a href="http://www.tamba2.org.uk/wordpress/cron/cronjob2.sh">http://www.tamba2.org.uk/wordpress/cron/cronjob2.sh</a></p>
</p>
<p><strong>Setting up the script</strong></p>
</p>
<p><em>Complete the details</em></p>
</p>
<p>The script is configured for the default &#8216;table_prefix&#8217; of wp_<br />
If you changed that prefix at the time of installation, you will need to change it in the script.</p>
</p>
<p>Then complete your email details. Remember that you could be getting emails that are over 1MB in size and increasing, and that these will arrive frequently. Be sure that your email account can accommodate these. (Finally ! A use for GMail !)</p>
</p>
<p><strong>Uploading the file</strong></p>
</p>
<p>You could put this cronjob file in any directory on your website BUT DO NOT.<br />
If you put this in your main directory or a sub-directory (which could be www / htdocs / public_html / mainwebsite_html) it is readable in a browser. Which means I can download it and find out how to access your database. So unless you want to take that risk, DO NOT UPLOAD THIS INTO YOUR MAIN DIRECTORY.</p>
</p>
<p>You need to upload the file above your main directory. That way it is not accessible from a browser.</p>
</p>
<p>The &#8216;etc&#8217; directory is one place for this to go. I&#8217;ll use my site as an example:<br />
When I login by ftp, I see these:</p>
</p>
<p>Click the indicated directory and upload your cron file into it.</p>
</p>
<p>Change the file permissions to 711</p>
</p>
<p>Now you need to get the PATH for your file.<br />
Login to your blog, click Options, then Miscellaneous. Look at what is in the box for this Destination directory:. It should look something like this</p>
</p>
<p>    <b>/home/name/public_html/blog/wp-images/ </b></p>
</p>
<p>The information you need is everything before the public_html.<br />
Remember &#8211; on your host it might be www or htdocs or mainwebsite_html or something very similar.</p>
</p>
<p>Your path will therefore be <b>/home/name/etc/cronjob.sh</b><br />
If you unsure at all, ask your host for the PATH to the directory where you uploaded the file.</p>
</p>
<p><strong>Setting the cron job</strong></p>
</p>
<p>Your host should offer a way of accessing and setting cron jobs. The screenshots here are for CPanel.</p>
</p>
<p>That line of information you just copied ? Paste that where shown.</p>
</p>
<p>Now check the other boxes &#8211; I get a backup every night at midnight so if you want the same, make the same options highlighted. (If you are considering running the cron job more frequently than once every 24 hours, you must read the Q &amp; A section at the bottom of this page).</p>
</p>
<p>Click the button beneath that says &#8220;Save Crontab&#8221;</p>
</p>
<p><strong>That&#8217;s it &#8211; all done !</strong></p>
</p>
<p><strong>Q &amp; A</strong></p>
</p>
<p>    * I&#8217;m still not sure about cron jobs. Will you do it for me ?<br />
          o No. Talk to your host, post in their support forums.<br />
    * How often can I run this ?<br />
          o Ask your host. I can&#8217;t see why you would want to run it more than once a day&#8230;..<br />
    * I&#8217;ve stayed up til midnight and nothing has happened !!<br />
          o Heh, I did this too. The script kicks in when it gets to midnight on the server. Look in your WordPress options for the Times in the weblog should differ by: and work out when it should arrive<br />
    * Can I test it sooner ?<br />
          o Yes &#8211; just alter it to work &#8220;Every 15 minutes&#8221; and &#8220;Every hour&#8221;. It will then send one fairly quickly. Remember to change it back !<br />
    * Can I leave the copy on the server too ?<br />
          o Yes. Remove the line rm backup-$DATE.sql.gz<br />
            Be sure to delete old ones regularly &#8211; this is a very fast way to fill server space !<br />
    * How do I backup more than one database ?<br />
          o You would need to run one cron job per database BUT the script would also need to take account of this and name the saved files appropriately. If you need this, I suggest you look at automysql for your needs.<br />
    * It does not work.<br />
          o The script tries 2 methods to send the email. If you do not get a backup file, and instead you get an error message, ask your host for advice. I am unable to advise on error messages. I have tested this script many times on my database and have had no untoward effects. Before looking for any help anywhere, check that you have done everything here.<br />
    * My backups are massive!<br />
          o The script backs up everything &#8211; including any stats / spam tables that have the same table prefix.<br />
            To reduce the size of the backup so it only gets what is essential then change this</p>
</p>
<p>                <b>mysqldump &#8211;opt -u $DBUSER -p$DBPASS $DBNAME &gt; backup.sql </b></p>
</p>
<p>            to</p>
</p>
<p>                <b>mysqldump &#8211;opt -u $DBUSER -p$DBPASS $DBNAME wp_users wp_posts [and all the other table names] &gt; backup.sql </b></p>
</p>
<p><em></p>
</p>
<p>These pages are independent of http://wordpress.org<br />
All design, content &amp; images © Mark 2004/2005/2006/2007. All rights reserved.</p>
</p>
<p>subnoto<br />
</em></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/wordpress-using-a-cron-job-to-keep-things-safe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wordpress: Upgrading (Not MU Version)</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/wordpress-upgrading-not-mu-version/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/wordpress-upgrading-not-mu-version/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:05:44 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=9</guid>
		<description><![CDATA[

Original Page

DOWNLOAD:
Upgrading WordPress.pdf

Before you get started, make sure you meet the minimum requirements.

Three Step Upgrade

These are the short instructions, if you want more check out the extended upgrade instructions. If you experience problems with the Three Step Upgrade, you may want to review the more detailed upgrade instructions.

For these instructions, it is assumed that your [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fwordpress-upgrading-not-mu-version%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fwordpress-upgrading-not-mu-version%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><strong><a href="http://codex.wordpress.org/Upgrading_WordPress">Original Page</a></strong></p>
</p>
<p><b>DOWNLOAD:</b><br />
<a href='http://blog.efusionteam.com/denie/files/2008/03/upgrading-wordpress.pdf' title='Upgrading WordPress.pdf'>Upgrading WordPress.pdf</a></p>
</p>
<p><em>Before you get started, make sure you meet the <a href="http://wordpress.org/about/requirements/">minimum requirements</a>.</em></p>
</p>
<p><strong>Three Step Upgrade</strong></p>
</p>
<p>These are the short instructions, if you want more check out the <a href="http://codex.wordpress.org/Upgrading_WordPress_Extended">extended upgrade instructions</a>. If you experience problems with the Three Step Upgrade, you may want to review the <a href="http://codex.wordpress.org/Upgrading_WordPress_Extended">more detailed upgrade instructions</a>.</p>
</p>
<p>For these instructions, it is assumed that your blog&#8217;s URL is http://example.com/wordpress/. Note that during the upgrade process access to your blog may not work for your visitors. You may consider a plugin like <a href="http://wordpress.org/extend/plugins/maintenance-mode/">Maintenance Mode</a>.</p>
</p>
<p><strong>Step 0: Before You Get Started</strong></p>
</p>
<p>    * Just in case something goes wrong, make sure you have a backup. <a href="http://codex.wordpress.org/WordPress_Backups">WordPress_Backups</a> is a comprehensive guide.</p>
</p>
<p>    * Deactivate your plugins. A plugin might not be compatible with the new version, so it&#8217;s nice to check for new versions of them and deactivate any that may cause problems. You can reactivate plugins one-by-one after the upgrade. </p>
</p>
<p><strong>Step 1: Replace WordPress files</strong></p>
</p>
<p>   1. Get the <a href="http://wordpress.org/download/">latest WordPress</a>. Either download and extract it to your computer or download it directly to the server.</p>
</p>
<p>   2. Copy the new files to your server, overwriting old files. You may use FTP or shell commands to do so. </p>
</p>
<blockquote><p><strong>NOTE</strong><br />
The wp-content folder requires special handling, as do the plugins and themes folders. You must copy over the contents of these folders, not the entire folder. Copying the entire folder overwrites all your customizations and added content.</p>
</p>
<p>Also take care to preserve the wp-config.php file in the root directory, as it contains your database sign-in information. Do note though that usually this will not be a problem since in a new installation the config file will be named wp-config-sample.php.</p>
</blockquote>
<p><strong>Step 2: Upgrade your installation</strong></p>
</p>
<p>   1. Visit the upgrade page. It will be at a URL like http://example.com/wordpress/wp-admin/upgrade.php. This updates your database to be compatible with the latest code, and before you do this your blog might look funny. </p>
</p>
<p><strong>Step 3: Do something nice for yourself</strong></p>
</p>
<p>If you have caching enabled, your changes will appear to users more immediately if you clear the cache at this point (and if you don&#8217;t, you may get confused when you see the old version number in page footers when you check to see if the upgrade worked).</p>
</p>
<p>Your WordPress installation is successfully upgraded. That&#8217;s as simple as we can make it without <a href="http://codex.wordpress.org/Installing/Updating_WordPress_with_Subversion">Updating WordPress Using Subversion</a>.</p>
</p>
<p>Consider rewarding yourself with a blog post about the upgrade, reading that book or article you&#8217;ve been putting off, or simply sitting back for a few moments and let the world pass you by.<br />
Troubleshooting</p>
</p>
<p>If anything has gone wrong the first thing to do is go through all the steps in our extended upgrade instructions. That page also has information about some of the most common problems we see.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/wordpress-upgrading-not-mu-version/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: Create ZIP file with PASSWORD</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/php-create-zip-file-with-password/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/php-create-zip-file-with-password/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:04:50 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ZIP]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=8</guid>
		<description><![CDATA[


function zipme ($SOURCE, $PWD) {
    $software = &#8220;/usr/bin/zip&#8221;;
    $parameter = &#8220;-P&#8221;;
    $blank = &#8221; &#8220;;
    $dozip = $software . $blank . $parameter . $blank . $PWD . $blank . $SOURCE . &#8220;.zip&#8221; . $blank . $SOURCE;
    $output = `$dozip`;
  [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fphp-create-zip-file-with-password%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fphp-create-zip-file-with-password%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<blockquote><p>
<strong>function zipme ($SOURCE, $PWD) {</strong><br />
    $software = &#8220;/usr/bin/zip&#8221;;<br />
    $parameter = &#8220;-P&#8221;;<br />
    $blank = &#8221; &#8220;;<br />
    $dozip = $software . $blank . $parameter . $blank . $PWD . $blank . $SOURCE . &#8220;.zip&#8221; . $blank . $SOURCE;<br />
    $output = `$dozip`;<br />
    return $output;<br />
<strong>}</strong>
</p>
</blockquote>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/php-create-zip-file-with-password/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to create a self-signed SSL Certificate &#8230;</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/how-to-create-a-self-signed-ssl-certificate/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/how-to-create-a-self-signed-ssl-certificate/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:04:01 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[CA]]></category>
		<category><![CDATA[Certificate]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=7</guid>
		<description><![CDATA[


          
            &#8230;  which can be used for testing purposes or internal usage
Source : http://www.akadia.com/services/ssh_test_certificate.html
          
          [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fhow-to-create-a-self-signed-ssl-certificate%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fhow-to-create-a-self-signed-ssl-certificate%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p><font size="1"></p>
<p>          <P><br />
            &#8230;  which can be used for testing purposes or internal usage<br />
Source : <a href="http://www.akadia.com/services/ssh_test_certificate.html">http://www.akadia.com/services/ssh_test_certificate.html</a><br />
          </P><br />
          <P><br />
            Overview<br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              The following is an extremely simplified view of how SSL is<br />
              implemented and what part the certificate plays in the entire process.<br />
            </P></p>
<p>            <P><br />
              Normal web traffic is sent unencrypted over the Internet. That is,<br />
              anyone with access to the right tools can snoop all of that traffic. Obviously, this<br />
              can lead to problems, especially where security and privacy is necessary, such as in<br />
              credit card data and bank transactions. The Secure Socket Layer is used to encrypt<br />
              the data stream between the web server and the web client (the browser).<br />
            </P><br />
            <P><br />
              SSL makes use of what is known as <B>asymmetric cryptography</B>,<br />
              commonly referred to as <B>public key cryptography (PKI)</B>. With public key<br />
              cryptography, two keys are created, one public, one private. Anything encrypted with<br />
              either key can only be decrypted with its corresponding key. Thus if a message or<br />
              data stream were encrypted with the server&#8217;s private key, it can be decrypted only<br />
              using its corresponding public key, ensuring that the data only could have come from<br />
              the server.<br />
            </P></p>
<p>            <P><br />
              If SSL utilizes public key cryptography to encrypt the data stream<br />
              traveling over the Internet, why is a certificate necessary? The technical answer to<br />
              that question is that a certificate is not really necessary &#8211; the data is secure and cannot easily be decrypted by a third party. However,<br />
              certificates do serve a crucial role in the communication process. The certificate,<br />
              signed by a trusted Certificate Authority (CA), ensures that the certificate holder<br />
              is really who he claims to be. Without a trusted signed certificate, your data may be<br />
              encrypted, however, the party you are communicating with may not be whom you think.<br />
              Without certificates, impersonation attacks would be much more common.<br />
            </P><br />
          </BLOCKQUOTE><br />
          <P><br />
            Step 1: Generate a Private Key</p>
<p>          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              The <B>openssl</B> toolkit is used to generate an <B>RSA Private<br />
              Key</B> and <B>CSR (Certificate Signing Request)</B>. It can also be used to generate<br />
              self-signed certificates which can be used for testing purposes or internal<br />
              usage.</p>
<p>            </P><br />
            <P><br />
              The first step is to create your RSA Private Key. This key is a<br />
              1024 bit RSA key which is encrypted using Triple-DES and stored in a PEM format so<br />
              that it is readable as ASCII text.<br />
            </P><br />
            <P><br />
              <B>openssl genrsa -des3 -out server.key 1024<BR><br />
              <BR><br />
              </B> <FONT color="#0000FF">Generating RSA private key, 1024 bit long modulus<BR></p>
<p>               &#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;++++++<BR><br />
               &#8230;&#8230;..++++++<BR><br />
               e is 65537 (0&#215;10001)<BR><br />
               Enter PEM pass phrase:<BR><br />
               Verifying password &#8211; Enter PEM pass phrase:</FONT><br />
            </P></p>
<p>          </BLOCKQUOTE><br />
          <P><br />
            Step 2: Generate a CSR (Certificate Signing Request)<br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              Once the private key is generated a Certificate Signing Request can be generated. The<br />
              CSR is then used in one of two ways. Ideally, the CSR will be sent to a Certificate<br />
              Authority, such as Thawte or Verisign who will verify the identity of the requestor<br />
              and issue a signed certificate. <B>The second option is to self-sign the CSR, which<br />
              will be demonstrated in the next section</B>.<br />
            </P><br />
            <P></p>
<p>              During the generation of the CSR, you will be prompted for several pieces of<br />
              information. These are the X.509 attributes of the certificate. One of the prompts<br />
              will be for &#8220;Common Name (e.g., YOUR name)&#8221;. It is important that this field be<br />
              filled in with the fully qualified domain name of the server to be protected by SSL.<br />
              If the website to be protected will be https://public.akadia.com, then enter<br />
              public.akadia.com at this prompt. The command to generate the CSR is as follows:<br />
            </P><br />
            <P><br />
              <B>openssl req -new -key server.key -out server.csr<BR><br />
              <BR><br />
              </B> <FONT color="#0000FF">Country Name (2 letter code) [GB]</FONT>:<B>CH</B><BR><br />
               <FONT color="#0000FF">State or Province Name (full name)<br />
              [Berkshire]</FONT>:<B>Bern</B><BR></p>
<p>               <FONT color="#0000FF">Locality Name (eg, city)<br />
              [Newbury]</FONT>:<B>Oberdiessbach</B><BR><br />
               <FONT color="#0000FF">Organization Name (eg, company) [My Company<br />
              Ltd]</FONT>:<B>Akadia AG</B><BR><br />
               <FONT color="#0000FF">Organizational Unit Name (eg, section)<br />
              []</FONT>:<B>Information Technology</B><BR><br />
               <FONT color="#0000FF">Common Name (eg, your name or your server&#8217;s hostname)<br />
              []</FONT>:<B>public.akadia.com</B><BR></p>
<p>               <FONT color="#0000FF">Email Address []</FONT>:<B>martin.zahn@akadia.com</B><BR><br />
               <FONT color="#0000FF">Please enter the following &#8216;extra&#8217; attributes<BR><br />
               to be sent with your certificate request<BR><br />
               A challenge password []:<BR><br />
               An optional company name []:</FONT></p>
<p>            </P><br />
          </BLOCKQUOTE><br />
          <P><br />
            Step 3: Remove Passphrase from Key<br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              One unfortunate side-effect of the pass-phrased private key is <B>that Apache will<br />
              ask for the pass-phrase each time the web server is started</B>. Obviously this is<br />
              not necessarily convenient as someone will not always be around to type in the<br />
              pass-phrase, such as after a reboot or crash. mod_ssl includes the ability to use an<br />
              external program in place of the built-in pass-phrase dialog, however, this is not<br />
              necessarily the most secure option either. <B>It is possible to remove the Triple-DES<br />
              encryption from the key</B>, thereby no longer needing to type in a pass-phrase. If<br />
              the private key is no longer encrypted, it is critical that this file only be<br />
              readable by the root user! If your system is ever compromised and a third party<br />
              obtains your unencrypted private key, the corresponding certificate will need to be<br />
              revoked. With that being said, use the following command to remove the pass-phrase<br />
              from the key:<br />
            </P></p>
<p>            <P><br />
              <B>cp server.key server.key.org<BR><br />
               openssl rsa -in server.key.org -out server.key</B><br />
            </P><br />
            <P><br />
              The newly created server.key file has no more passphrase in it.<br />
            </P><br />
            <P></p>
<p>              <FONT color="#0000FF">-rw-r&#8211;r&#8211; 1 root root 745 Jun 29 12:19 server.csr<BR><br />
               -rw-r&#8211;r&#8211; 1 root root 891 Jun 29 13:22 server.key<BR><br />
               -rw-r&#8211;r&#8211; 1 root root 963 Jun 29 13:22 server.key.org</FONT><br />
            </P><br />
          </BLOCKQUOTE><br />
          <P><br />
            Step 4: Generating a Self-Signed Certificate<br />
          </P></p>
<p>          <BLOCKQUOTE><br />
            <P><br />
              At this point you will need to generate a self-signed certificate because you either<br />
              don&#8217;t plan on having your certificate signed by a CA, or you wish to test your new<br />
              SSL implementation while the CA is signing your certificate. This temporary<br />
              certificate will generate an error in the client browser to the effect that the<br />
              signing certificate authority is unknown and not trusted.<br />
            </P><br />
            <P><br />
              To generate a temporary certificate which is good for 365 days, issue the following<br />
              command:<br />
            </P><br />
            <P><br />
              <B>openssl x509 -req -days 365 -in server.csr -signkey server.key -out<br />
              server.crt</B><BR></p>
<p>               <FONT color="#0000FF">Signature ok<BR><br />
               subject=/C=CH/ST=Bern/L=Oberdiessbach/O=Akadia AG/OU=Information<BR><br />
               Technology/CN=public.akadia.com/Email=martin.zahn@akadia.com<BR><br />
               Getting Private key</FONT><br />
            </P><br />
          </BLOCKQUOTE><br />
          <P></p>
<p>            Step 5: Installing the Private Key and Certificate<br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              When Apache with mod_ssl is installed, it creates several directories in the Apache<br />
              config directory. The location of this directory will differ depending on how Apache<br />
              was compiled.<br />
            </P><br />
            <P><br />
              <B>cp server.crt /usr/local/apache/conf/ssl.crt<BR><br />
               cp server.key /usr/local/apache/conf/ssl.key</B></p>
<p>            </P><br />
          </BLOCKQUOTE><br />
          <P><br />
            Step 6: Configuring SSL Enabled Virtual Hosts<br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              <B>SSLEngine on<BR><br />
               SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt<BR></p>
<p>               SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key<BR><br />
               SetEnvIf User-Agent &#8220;.*MSIE.*&#8221; nokeepalive ssl-unclean-shutdown<BR><br />
               CustomLog logs/ssl_request_log <BR><br />
                  &#8220;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \&#8221;%r\&#8221; %b&#8221;</B><br />
            </P><br />
          </BLOCKQUOTE></p>
<p>          <P><br />
            <B>Step 7: Restart Apache and Test</B><br />
          </P><br />
          <BLOCKQUOTE><br />
            <P><br />
              <B>/etc/init.d/httpd stop<BR><br />
               /etc/init.d/httpd stop</B></p>
<p>            </P><br />
            <P><br />
              <B>https://public.akadia.com</B><br />
            </P><br />
          </BLOCKQUOTE></p>
<p></font></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/how-to-create-a-self-signed-ssl-certificate/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Creating ZIP Files on the Spot</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/creating-zip-files-on-the-spot/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/creating-zip-files-on-the-spot/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:02:50 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=6</guid>
		<description><![CDATA[

This interesting article found on Zend.com will explain to you how to create ZIP files on the fly using PHP.
Terms of Agreement:
By using this article, you agree to the following terms&#8230;
1) You may use this article in your own programs (and may compile it into a program and distribute it in compiled format for languages [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fcreating-zip-files-on-the-spot%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fcreating-zip-files-on-the-spot%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>This interesting article found on Zend.com will explain to you how to create ZIP files on the fly using PHP.</p>
<p>Terms of Agreement:<br />
By using this article, you agree to the following terms&#8230;<br />
1) You may use this article in your own programs (and may compile it into a program and distribute it in compiled format for languages that allow it) freely and with no charge.<br />
2) You MAY NOT redistribute this article (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.<br />
3) You may link to this article from another website, but ONLY if it is not wrapped in a frame.<br />
4) You will abide by any additional copyright restrictions which the author may have placed in the article or article&#8217;s description.<br />
Ever wondered how you could create ZIP files on the fly<b>?</b> In this article, which I found on Zend.com, you&#8217;ll be able to. The original version can be found here: http://www.zend.com/zend/spotlight/creating-zip-files2.php</p>
<p>     <b>?</b> php</p>
<p>    /*</p>
<p>    Zip file creation class<br />
    makes zip files on the fly&#8230;</p>
<p>    use the functions add_dir() and add_file() to build the zip file;<br />
    see example code below</p>
<p>    by Eric Mueller<br />
    http://www.themepark.com</p>
<p>    v1.1 9-20-01<br />
      &#8211; added comments to example</p>
<p>    v1.0 2-5-01</p>
<p>    initial version with:<br />
      &#8211; class appearance<br />
      &#8211; add_file() and file() methods<br />
      &#8211; gzcompress() output hacking<br />
    by Denis O.Philippov, webmaster@atlant.ru, http://www.atlant.ru</p>
<p>    */</p>
<p>    // official ZIP file format: http://www. // pkware.com/appnote.txt</p>
<p>    class zipfile<br />
    {  </p>
<p>        var $datasec = array(); // array to store compressed data<br />
        var $ctrl_dir = array(); // central directory<br />
        var $eof_ctrl_dir = &#8220;\x50\x4b\x05\x06\x00\x00\x00\x00&#8243;; //end of Central directory record<br />
        var $old_offset = 0;</p>
<p>        function add_dir($name)   </p>
<p>        // adds &#8220;directory&#8221; to archive &#8211; do this before putting any files in directory!<br />
        // $name &#8211; name of directory&#8230; like this: &#8220;path/&#8221;<br />
        // &#8230;then you can add files using add_file with names like &#8220;path/file.txt&#8221;<br />
        {<br />
            $name = str_replace(&#8221;\\&#8221;, &#8220;/&#8221;, $name);  </p>
<p>            $fr = &#8220;\x50\x4b\x03\x04&#8243;;<br />
            $fr .= &#8220;\x0a\x00&#8243;;    // ver needed to extract<br />
            $fr .= &#8220;\x00\x00&#8243;;    // gen purpose bit flag<br />
            $fr .= &#8220;\x00\x00&#8243;;    // compression method<br />
            $fr .= &#8220;\x00\x00\x00\x00&#8243;; // last mod time and date</p>
<p>            $fr .= pack(&#8221;V&#8221;,0); // crc32<br />
            $fr .= pack(&#8221;V&#8221;,0); //compressed filesize<br />
            $fr .= pack(&#8221;V&#8221;,0); //uncompressed filesize<br />
            $fr .= pack(&#8221;v&#8221;, strlen($name) ); //length of pathname<br />
            $fr .= pack(&#8221;v&#8221;, 0 ); //extra field length<br />
            $fr .= $name;<br />
            // end of &#8220;local file header&#8221; segment</p>
<p>            // no &#8220;file data&#8221; segment for path</p>
<p>            // &#8220;data descriptor&#8221; segment (optional but necessary if archive is not served as file)<br />
            $fr .= pack(&#8221;V&#8221;,$crc); //crc32<br />
            $fr .= pack(&#8221;V&#8221;,$c_len); //compressed filesize<br />
            $fr .= pack(&#8221;V&#8221;,$unc_len); //uncompressed filesize</p>
<p>            // add this entry to array<br />
            $this -&gt; datasec[] = $fr;</p>
<p>            $new_offset = strlen(implode(&#8221;", $this-&gt;datasec));</p>
<p>            // ext. file attributes mirrors MS-DOS directory attr byte, detailed<br />
            // at http://support.microsoft.com/support/kb/articles/Q125/0/19.asp</p>
<p>            // now add to central record<br />
            $cdrec = &#8220;\x50\x4b\x01\x02&#8243;;<br />
            $cdrec .=&#8221;\x00\x00&#8243;;    // version made by<br />
            $cdrec .=&#8221;\x0a\x00&#8243;;    // version needed to extract<br />
            $cdrec .=&#8221;\x00\x00&#8243;;    // gen purpose bit flag<br />
            $cdrec .=&#8221;\x00\x00&#8243;;    // compression method<br />
            $cdrec .=&#8221;\x00\x00\x00\x00&#8243;; // last mod time &amp; date<br />
            $cdrec .= pack(&#8221;V&#8221;,0); // crc32<br />
            $cdrec .= pack(&#8221;V&#8221;,0); //compressed filesize<br />
            $cdrec .= pack(&#8221;V&#8221;,0); //uncompressed filesize<br />
            $cdrec .= pack(&#8221;v&#8221;, strlen($name) ); //length of filename<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //extra field length<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //file comment length<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //disk number start<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //internal file attributes<br />
            $ext = &#8220;\x00\x00\x10\x00&#8243;;<br />
            $ext = &#8220;\xff\xff\xff\xff&#8221;;<br />
            $cdrec .= pack(&#8221;V&#8221;, 16 ); //external file attributes  &#8211; &#8216;directory&#8217; bit set</p>
<p>            $cdrec .= pack(&#8221;V&#8221;, $this -&gt; old_offset ); //relative offset of local header<br />
            $this -&gt; old_offset = $new_offset;</p>
<p>            $cdrec .= $name;<br />
            // optional extra field, file comment goes here<br />
            // save to array<br />
            $this -&gt; ctrl_dir[] = $cdrec;  </p>
<p>        }</p>
<p>        function add_file($data, $name)   </p>
<p>        // adds &#8220;file&#8221; to archive<br />
        // $data &#8211; file contents<br />
        // $name &#8211; name of file in archive. Add path if your want</p>
<p>        {<br />
            $name = str_replace(&#8221;\\&#8221;, &#8220;/&#8221;, $name);<br />
            //$name = str_replace(&#8221;\\&#8221;, &#8220;\\\\&#8221;, $name);</p>
<p>            $fr = &#8220;\x50\x4b\x03\x04&#8243;;<br />
            $fr .= &#8220;\x14\x00&#8243;;    // ver needed to extract<br />
            $fr .= &#8220;\x00\x00&#8243;;    // gen purpose bit flag<br />
            $fr .= &#8220;\x08\x00&#8243;;    // compression method<br />
            $fr .= &#8220;\x00\x00\x00\x00&#8243;; // last mod time and date</p>
<p>            $unc_len = strlen($data);<br />
            $crc = crc32($data);<br />
            $zdata = gzcompress($data);<br />
            $zdata = substr( substr($zdata, 0, strlen($zdata) &#8211; 4), 2); // fix crc bug<br />
            $c_len = strlen($zdata);<br />
            $fr .= pack(&#8221;V&#8221;,$crc); // crc32<br />
            $fr .= pack(&#8221;V&#8221;,$c_len); //compressed filesize<br />
            $fr .= pack(&#8221;V&#8221;,$unc_len); //uncompressed filesize<br />
            $fr .= pack(&#8221;v&#8221;, strlen($name) ); //length of filename<br />
            $fr .= pack(&#8221;v&#8221;, 0 ); //extra field length<br />
            $fr .= $name;<br />
            // end of &#8220;local file header&#8221; segment</p>
<p>            // &#8220;file data&#8221; segment<br />
            $fr .= $zdata;  </p>
<p>            // &#8220;data descriptor&#8221; segment (optional but necessary if archive is not served as file)<br />
            $fr .= pack(&#8221;V&#8221;,$crc); //crc32<br />
            $fr .= pack(&#8221;V&#8221;,$c_len); //compressed filesize<br />
            $fr .= pack(&#8221;V&#8221;,$unc_len); //uncompressed filesize</p>
<p>            // add this entry to array<br />
            $this -&gt; datasec[] = $fr;</p>
<p>            $new_offset = strlen(implode(&#8221;", $this-&gt;datasec));</p>
<p>            // now add to central directory record<br />
            $cdrec = &#8220;\x50\x4b\x01\x02&#8243;;<br />
            $cdrec .=&#8221;\x00\x00&#8243;;    // version made by<br />
            $cdrec .=&#8221;\x14\x00&#8243;;    // version needed to extract<br />
            $cdrec .=&#8221;\x00\x00&#8243;;    // gen purpose bit flag<br />
            $cdrec .=&#8221;\x08\x00&#8243;;    // compression method<br />
            $cdrec .=&#8221;\x00\x00\x00\x00&#8243;; // last mod time &amp; date<br />
            $cdrec .= pack(&#8221;V&#8221;,$crc); // crc32<br />
            $cdrec .= pack(&#8221;V&#8221;,$c_len); //compressed filesize<br />
            $cdrec .= pack(&#8221;V&#8221;,$unc_len); //uncompressed filesize<br />
            $cdrec .= pack(&#8221;v&#8221;, strlen($name) ); //length of filename<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //extra field length<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //file comment length<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //disk number start<br />
            $cdrec .= pack(&#8221;v&#8221;, 0 ); //internal file attributes<br />
            $cdrec .= pack(&#8221;V&#8221;, 32 ); //external file attributes &#8211; &#8216;archive&#8217; bit set</p>
<p>            $cdrec .= pack(&#8221;V&#8221;, $this -&gt; old_offset ); //relative offset of local header<br />
    //      &amp;n // bsp; echo &#8220;old offset is &#8220;.$this-&gt;old_offset.&#8221;, new offset is $new_offset<br />&#8220;;<br />
            $this -&gt; old_offset = $new_offset;</p>
<p>            $cdrec .= $name;<br />
            // optional extra field, file comment goes here<br />
            // save to central directory<br />
            $this -&gt; ctrl_dir[] = $cdrec;<br />
        }</p>
<p>        function file() { // dump out file<br />
            $data = implode(&#8221;", $this -&gt; datasec);<br />
            $ctrldir = implode(&#8221;", $this -&gt; ctrl_dir);  </p>
<p>            return<br />
                $data.<br />
                $ctrldir.<br />
                $this -&gt; eof_ctrl_dir.<br />
                pack(&#8221;v&#8221;, sizeof($this -&gt; ctrl_dir)).     // total # of entries &#8220;on this disk&#8221;<br />
                pack(&#8221;v&#8221;, sizeof($this -&gt; ctrl_dir)).     // total # of entries overall<br />
                pack(&#8221;V&#8221;, strlen($ctrldir)).             // size of central dir<br />
                pack(&#8221;V&#8221;, strlen($data)).                 // offset to start of central dir<br />
                &#8220;\x00\x00&#8243;;                             // .zip file comment length<br />
        }<br />
    }  </p>
<p>    <b>?</b></p>
<p>Example Usage of the Class</p>
<p>     <b>?</b> php</p>
<p>    $zipfile = new zipfile();  </p>
<p>    // add the subdirectory &#8230; important!<br />
    $zipfile -&gt; add_dir(&#8221;dir/&#8221;);</p>
<p>    // add the binary data stored in the string &#8216;filedata&#8217;<br />
    $filedata = &#8220;(read your file into $filedata)&#8221;;<br />
    $zipfile -&gt; add_file($filedata, &#8220;dir/file.txt&#8221;);  </p>
<p>    // the next three lines force an immediate download of the zip file:<br />
    header(&#8221;Content-type: application/octet-stream&#8221;);<br />
    header(&#8221;Content-disposition: attachment; filename=test.zip&#8221;);<br />
    echo $zipfile -&gt; file();  </p>
<p>    // OR instead of doing that, you can write out the file to the loca disk like this:<br />
    $filename = &#8220;output.zip&#8221;;<br />
    $fd = fopen ($filename, &#8220;wb&#8221;);<br />
    $out = fwrite ($fd, $zipfile -&gt; file());<br />
    fclose ($fd);</p>
<p>    // then offer it to the user to download:<br />
    <a href="output.zip">Click here to download the new zip file.</a></p>
<p>    <b>?</b></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/creating-zip-files-on-the-spot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to recover domain when the primary domain controller failes and there are member domain controllers</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/how-to-recover-domain-when-the-primary-domain-controller-failes-and-there-are-member-domain-controllers/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/how-to-recover-domain-when-the-primary-domain-controller-failes-and-there-are-member-domain-controllers/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:02:04 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Networking]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=5</guid>
		<description><![CDATA[

Many of us have probably dabbled in setting up our own domain and forest for development purposes. For me &#8211; a domain is a must &#8211; I have my development environment that is heavily used to model development projects for clents &#8211; and I have my family &#8211; me, my wife, and 7 children with [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fhow-to-recover-domain-when-the-primary-domain-controller-failes-and-there-are-member-domain-controllers%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fhow-to-recover-domain-when-the-primary-domain-controller-failes-and-there-are-member-domain-controllers%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>Many of us have probably dabbled in setting up our own domain and forest for development purposes. For me &#8211; a domain is a must &#8211; I have my development environment that is heavily used to model development projects for clents &#8211; and I have my family &#8211; me, my wife, and 7 children with their own computers.</p>
<p>So, we have a fairly detailed setup on the home front &#8211; but the following applies to ANY environment in which your primary domain controller gives up the ghost &#8211; and you do not have an image backup of the PDC.</p>
<p><b>Foremost &#8211; clarity: In an Active Directory forest, where you have several domain controllers, but one primary domain controller (PDC) &#8211; you may think that you must RESTORE or recover this PDC to salvage the domain. In other words, if the PDC fails &#8211; is all lost? Nope, not at all. Unless you do not have backup domain controllers. If you do not &#8211; then reading the rest of this is moot &#8211; but if you do, then read on.</b></p>
<p>When you promote additional servers on your domain, and make them member DC&#8217;s in the same forest, then your domain details are available to you &#8211; and you simply need to transfer the Operation Master role to another DC &#8211; but before doing that &#8211; there are the FSMO&#8217;s &#8211; yea, something hardly anyone knows about: FSMO = Flexible Single Master Operation &#8211; something your PDC or master of operations &#8211; manages. If a PDC &#8211; and Global Catalog for that matter &#8211; goes offline, a backup DC will generally pickup and juggle traffic for the PDC. But what happens if the PDC crashes altogether, and you need to basically assign a member backup DC the PDC role?</p>
<p><b>FSMO must be transferred to a backup DC before that DC can assume the Master of Operations role. This is done at the command-line level, and you must be careful before you make this call &#8211; ONLY do this if you are sure you cannot recover the original PDC because once you do this &#8211; you cannot later recover the PDC and bring it online. It cannot be added back into the forest at all.</b></p>
<p>So, the FSMO roles and how we transfer these. In a word, you cannot simply transfer the FSMO roles because the PDC is off line and not available to authorize the transfer. However, you &#8216;can&#8217; SEIZE the FSMO roles from the original PDC &#8211; even with the machine offl line.</p>
<blockquote><p>Caution: Using the Ntdsutil utility incorrectly may result in partial or complete loss of Active Directory functionality.</p>
</blockquote>
<p>Open a <b>CMD prompt on the backup DC</b> you want to perform this on. At the command-line prompt, type <b>Ntdsutil</b> and press enter .</p>
<blockquote>
<p>Microsoft Windows [Version 5.2.3790]<br />
(C) Copyright 1985-2003 Microsoft Corp.</p>
<p>C:\WINDOWS&gt;ntdsutil<br />
ntdsutil:</p>
</blockquote>
<p>At this prompt, type roles and press :</p>
<blockquote>
<p>ntdsutil: roles<br />
fsmo maintenance:</p>
</blockquote>
<p>Now type connections and press :</p>
<blockquote>
<p>fsmo maintenance: connections<br />
server connections:</p>
</blockquote>
<p>Now type <b>connect to server SERVERNAME</b>  where  is the name of the backup DC you are working on, and press :</p>
<blockquote>
<p>server connections: connect to server hamddc02</p>
<p>Connected to hamdc02 using credentials of locally logged on user.<br />
server connections:</p>
</blockquote>
<p>At the server connections prompt type <b>q</b> and press enter :</p>
<blockquote>
<p>server connections: q<br />
fsmo maintenance:</p>
</blockquote>
<p>Now we are going to <b>SEIZE the FSMO roles</b> we want. <u>NOTE</u>: Out of the 5 FSMO roles, we are NOT going to seize the Infrastructure Master. We do not want to put the Infrastructure Master (IM) role on the same domain controller as the Global Catalog server. If the Infrastructure Master runs on a GC server it will stop updating object information because it does not contain any references to objects that it does not hold. This is because a GC server holds a partial replica of every object in the forest. <b>For now, we&#8217;ll seize the following</b>:</p>
<blockquote>
<p>
<b><br />
Seize domain naming master<br />
Seize PDC<br />
Seize RID master<br />
Seize schema master<br />
</b></p>
</blockquote>
<p>We do this by typing the line shown above. For example, to seize the domain naming master, type seize domain naming master and press </p>
<p>You will receive a Windows dialog prompting to confirm this move &#8211; click  and then you&#8217;ll see the attempt to safely transfer the FSMO role, a failure message, and then it will seize the role, assigning it to the backup DC you specified when you connected to the server above.</p>
<p>Once you have completed this for the 4 roles, type <b>Quit</b> to exit the utility, then Exit to return to Windows.</p>
<p>From the <b>Start menu</b>, select <b>Run</b> and enter <b>dsa.msc</b> and press enter.</p>
<p>On the domain that is displayed, <b>right click</b> and select <b>Operations Masters</b>. You should now see that this backup domain controller (HAMDC02 in this case) is not the Operations master.</p>
<p>From here you simply <b>re-create the failed domain controller</b>, and promote it &#8211; joining it to this existing forest. </p>
<p>Hopefully others will find this useful.</p>
</p>
<p>Source:<br /><a href="http://geekswithblogs.net/mhamilton/archive/2007/04/15/111674.aspx">geekswithblogs.net/mhamilton/archive/2007/04/15/111674.aspx</a></p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/how-to-recover-domain-when-the-primary-domain-controller-failes-and-there-are-member-domain-controllers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VPN Ports</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/vpn-ports/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/vpn-ports/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:01:18 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[Networking]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=4</guid>
		<description><![CDATA[

PPTP uses IP protocol 47, designed for &#8220;General Routing Encapsulation&#8221; or GRE packets. A common mistake in configuring firewalls for use with PPTP is to open PPTP port 1723 (allowing connections to be established) but forget to forward GRE protocol type 47 (denying port data from passing through the tunnel). Some operating systems include &#8220;PPTP [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fvpn-ports%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fvpn-ports%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>PPTP uses IP protocol 47, designed for &#8220;General Routing Encapsulation&#8221; or GRE packets. A common mistake in configuring firewalls for use with PPTP is to open PPTP port 1723 (allowing connections to be established) but forget to forward GRE protocol type 47 (denying port data from passing through the tunnel). Some operating systems include &#8220;PPTP ping&#8221; utilities (pptpsrv and pptpclnt in Windows 2000) that verify both PPTP ports are opened.</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/vpn-ports/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE 6 Operation Aborted errors (and solution)</title>
		<link>http://blog.nataprawira.com/tech/2008/08/13/ie-6-operation-aborted-errors-and-solution/</link>
		<comments>http://blog.nataprawira.com/tech/2008/08/13/ie-6-operation-aborted-errors-and-solution/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 17:00:33 +0000</pubDate>
		<dc:creator>Denie</dc:creator>
				<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://blog.nataprawira.com/tech/?p=3</guid>
		<description><![CDATA[

From: Keith Hackett
To: All
07/23/2008 01:57:35 PM
Hi All,
I thought I&#8217;d post a frustrating problem and subsequent solution that I experienced today. A client called and reported that several users with IE 6 started experiencing &#8220;operation aborted&#8221; errors on certain pages of their web site. The problems started yesterday but no changes had been made to the [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;"><a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fie-6-operation-aborted-errors-and-solution%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.nataprawira.com%2Ftech%2F2008%2F08%2F13%2Fie-6-operation-aborted-errors-and-solution%2F" height="61" width="51" /></a></div>
<!-- ALL ADSENSE ADS DISABLED -->
<p>From: Keith Hackett<br />
To: All<br />
07/23/2008 01:57:35 PM</p>
<p>Hi All,</p>
<p>I thought I&#8217;d post a frustrating problem and subsequent solution that I experienced today. A client called and reported that several users with IE 6 started experiencing &#8220;operation aborted&#8221; errors on certain pages of their web site. The problems started yesterday but no changes had been made to the website in weeks.</p>
<p>After stripping the code down as much as possible I arrived at a base chunk of code that would generate the errors in IE 6 (IE 7 and Firefox work fine).</p>
<p><b>The solution? Remove the BASE tag! Weird, huh?!</b></p>
<p>Now, as to why the error only started occuring, I can only guess. I suspect that something changed with Google maps that was affected by the BASE tag.</p>
<p>Later&#8230;</p>
<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.nataprawira.com/tech/2008/08/13/ie-6-operation-aborted-errors-and-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
