Check server response of

Server response
NS records
Whois domain
Response headers
Request headers
Raw HTML code
301 Moved Permanently - sayap.com
HTTP Status: 301
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
Server: nginx/1.18.0 (Ubuntu)
Date: Thu, 15 May 2025 07:15:34 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://sayap.com/

HTTP Code 301 Moved Permanently

301 Moved Permanently means that the requested resource has been permanently moved to a new URL. All future requests should use the new address.

When is Code 301 used?

  • When changing a website domain
  • When modifying URL structures
  • When setting up redirects for SEO

What does Code 301 mean for the user?

The browser will automatically redirect the user to the new address, and search engines will update their indexes.

200 OK - https://sayap.com/
HTTP Status: 200
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
Server: nginx/1.18.0 (Ubuntu)
Date: Thu, 15 May 2025 07:15:34 GMT
Content-Type: text/html
Content-Length: 25404
Last-Modified: Wed, 28 Sep 2016 03:04:48 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "57eb3350-633c"
Accept-Ranges: bytes

HTTP Code 200 OK

200 OK is a standard successful HTTP server response. It means that the client’s request (e.g., from a browser) was successfully processed, and the server is delivering the requested data.

When is Code 200 used?

  • When loading a web page
  • When successfully receiving an API response
  • When processing a form or another HTTP request

What does Code 200 mean for the user?

The user receives content without errors, and the page or application functions properly. If Code 200 is accompanied by data, the browser or program processes and displays it to the user.

GET / HTTP/1.1
Host: sayap.com
Accept: */*
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])


<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

<title>sayap</title>

<link rel="shortcut icon" href="data:image/x-icon;," type="image/x-icon" />

<!--
<link rel="openid.server" href="http://pip.verisignlabs.com/server" />
<link rel="openid.delegate" href="http://sayap.pip.verisignlabs.com" />
<link rel="openid2.provider" href="http://pip.verisignlabs.com/server" />
<link rel="openid2.local_id" href="http://sayap.pip.verisignlabs.com" />
<meta http-equiv="X-XRDS-Location" content="http://pip.verisignlabs.com/user/sayap/yadisxrds" />
-->

<link rel="openid.server" href="https://indieauth.com/openid" />
<link rel="openid.delegate" href="http://sayap.com/" />

<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="/blog/feed" />
<link rel="alternate" type="application/atom+xml" title="Atom 1.0"
href="/blog/feed/atom" />
<link rel='stylesheet' href='/css/pygments_murphy.css' type='text/css' />

<link rel="stylesheet" href="/css/normalize.css">
<link rel="stylesheet" href="/css/main.css">
<link rel="stylesheet" href="/css/custom.css">
<script src="/js/vendor/modernizr-2.6.2.min.js"></script>

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-38025600-1']);
_gaq.push(['_setDomainName', 'sayap.com']);
_gaq.push(['_trackPageview']);

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>


    </head>
    <body>
        <div id="content">
            <div id="header">

    <a href="/" title="sayap">
    <img id="top_image" src="/img/14walcott.png" width="100" height="100" />
</a>

<ol id="top_list">
    <li>dev</li>
    <li>ops</li>
    <li>football</li>
    <li>making lists</li>
</ol>

<hr />


            </div>

            <div id="main_block">
                <div id="side_block">
<div id="sidebar">
    <section id="categories">
        <h3>Categories</h3>
        <ul>
            <li>
                <a href="/blog/category/boleh/">
                    boleh
                </a>
                (<a href="/blog/category/boleh/feed/">rss</a>) 
                (3)
            </li>
            <li>
                <a href="/blog/category/javascript/">
                    javascript
                </a>
                (<a href="/blog/category/javascript/feed/">rss</a>) 
                (1)
            </li>
            <li>
                <a href="/blog/category/linux/">
                    linux
                </a>
                (<a href="/blog/category/linux/feed/">rss</a>) 
                (5)
            </li>
            <li>
                <a href="/blog/category/meta/">
                    meta
                </a>
                (<a href="/blog/category/meta/feed/">rss</a>) 
                (1)
            </li>
            <li>
                <a href="/blog/category/python/">
                    python
                </a>
                (<a href="/blog/category/python/feed/">rss</a>) 
                (1)
            </li>
        </ul>
    </section>

    <section id="archives">
        <h3>Archives</h3>
        <ul>
            <li>
                <a href="/blog/archive/2013/04/1/">
                    April 2013
                </a>
                (1)
            </li>
            <li>
                <a href="/blog/archive/2010/11/1/">
                    November 2010
                </a>
                (1)
            </li>
            <li>
                <a href="/blog/archive/2010/03/1/">
                    March 2010
                </a>
                (1)
            </li>
            <li>
                <a href="/blog/archive/2008/12/1/">
                    December 2008
                </a>
                (1)
            </li>
            <li>
                <a href="/blog/archive/2008/10/1/">
                    October 2008
                </a>
                (1)
            </li>
            <li>
                <a href="/blog/archive/2008/09/1/">
                    September 2008
                </a>
                (1)
            </li>
        </ul>
    </section>
    
    <section id="about">
        <h3>About</h3>
        <p>
            sayap is a code monkey who writes long ticket description and
            even longer commit message to bore future maintainer to death.
        </p>
        <p>
            sayap lives in Malaysia, and follows timezone
            <code>EPL/Arsenal</code>.
        </p>
        <a href="https://stackoverflow.com/users/422321/sayap">
            <img src="https://stackoverflow.com/users/flair/422321.png?theme=clean"
                width="208" height="58"
                alt="profile for sayap at Stack Overflow, Q&amp;A for professional and enthusiast programmers"
                title="profile for sayap at Stack Overflow, Q&amp;A for professional and enthusiast programmers">
        </a>
        <a href="https://github.com/sayap" rel="me"></a>
    </section>
</div>

                </div>
                <div id="prose_block">



<div class="blog_post">
  <a name="basic-uvd-support-v2-for-radeon-on-gentoo"></a>
  <h2 class="blog_post_title"><a href="/blog/2013/4/7/basic-uvd-support-v2-for-radeon-on-gentoo/" rel="bookmark" title="Permanent Link to Basic UVD support v2 for Radeon on Gentoo">Basic UVD support v2 for Radeon on Gentoo</a></h2>
  <small>April 07, 2013 at 08:53 AM | categories: 

<a href='/blog/category/linux'>linux</a>
 | <a href="http://sayap.com/blog/2013/4/7/basic-uvd-support-v2-for-radeon-on-gentoo/#disqus_thread">View Comments</a>
</small><p/>
  <div class="post_prose">
    
  <p>Here's a simple step-by-step guide for Gentoo users to start testing the <a href="http://www.phoronix.com/scan.php?page=article&amp;item=amd_opensource_uvd&amp;num=1">newly released UVD support</a> in the open source Radeon driver:</p>
<ol>
<li>Buy something from AMD/ATI. Be a good open source citizen and vote with your wallet! Some good candidates include <a href="http://www.asus.com/Graphics_Cards/EAH5750_FORMULA2DI1GD5/">this</a> and <a href="http://www.sapphiretech.com/presentation/product/?pid=1034&amp;lid=1">this</a>.</li>
<li>Feel good about yourself.</li>
<li>Wait several years for AMD developers and lawyers to get their collective shit together. Use the shitty proprietary Catalyst driver in the meantime.</li>
<li><code>emerge --sync</code>.</li>
<li>Say goodbye to x11-drivers/ati-drivers, replacing it with x11-drivers/xf86-video-ati. Make sure it says "radeon" instead of "fglrx" in the <code>VIDEO_CARDS</code> flag.</li>
<li>Install media-libs/mesa-9.2_pre20130404 and x11-drivers/radeon-ucode-20130402 kindly and promptly prepared by chithanh. <a href="http://chithanh.blogspot.com/2013/04/new-mesa-features-for-adventurous.html">All hail chithanh</a>.</li>
<li>Grab the latest kernel source from the <a href="http://cgit.freedesktop.org/~agd5f/linux/log/?h=drm-fixes-3.9">drm-fixes-3.9 branch</a>. This <a href="http://cgit.freedesktop.org/~agd5f/linux/snapshot/linux-b75bbaa038ffc426e88ea3df6c4ae11834fc3e4f.tar.gz">tarball</a> should work.</li>
<li>Apply all 11 patches from <a href="http://www.spinics.net/lists/dri-devel/msg36746.html">patchset v2</a> posted in the mailing list. Alternatively, apply this <a href="/patches/basic-uvd-v2.diff">rolled-up patch</a>.</li>
<li>Build kernel. Make sure to set <code>CONFIG_DRM_RADEON</code> and add the relevant firmwares to <code>CONFIG_EXTRA_FIRMWARE</code> (e.g. "radeon/PALM_me.bin radeon/PALM_pfp.bin radeon/SUMO_rlc.bin radeon/SUMO_uvd.bin" for E-350).</li>
<li>Add "vdpau" to the <code>USE</code> flags and recompile packages that make use of it.</li>
<li>Reboot. Join forums / IRC / mailing lists for group hug.</li>
</ol>
<p>UPDATE: <a href="http://www.spinics.net/lists/dri-devel/msg36838.html">Patchset v3</a> is out in the mailing list. Essentially the same as v2, with one change moved from 02 to 03.</p>

  </div>
</div>





<div class="blog_post">
  <a name="openvpn-on-openwrt-for-iptables-noob"></a>
  <h2 class="blog_post_title"><a href="/blog/2010/11/9/openvpn-on-openwrt-for-iptables-noob/" rel="bookmark" title="Permanent Link to OpenVPN on OpenWrt for iptables noob">OpenVPN on OpenWrt for iptables noob</a></h2>
  <small>November 09, 2010 at 08:43 AM | categories: 

<a href='/blog/category/linux'>linux</a>
 | <a href="http://sayap.com/blog/2010/11/9/openvpn-on-openwrt-for-iptables-noob/#disqus_thread">View Comments</a>
</small><p/>
  <div class="post_prose">
    
  <p>OpenWrt is a sweet distro for wireless routers. However, doing certain stuffs with it, e.g. setting up OpenVPN, is not an easy task. There are many wiki pages, forum threads, and blog posts to help us mortal to get OpenVPN running, but most of them involves a blood sacrifice to the God of Iptables as the mandatory first step. Iptables?? Surely there must be a less painful way?</p>
<p>After some trials and errors, I managed to get OpenVPN to work on OpenWrt, without typing any iptables command. Not everything can be done via the Luci web interface though, so expect to get your hands dirty with the command line. With that said, here are the steps for the typical road warrior setup (tested on Backfire 10.03).</p>
<ol>
<li>
<p>SSH into the router, and install the necessary packages</p>
<pre><code>opkg update
opkg install openvpn luci-app-openvpn openvpn-easy-rsa
</code></pre>
</li>
<li>
<p>Apply <a href="https://dev.openwrt.org/changeset/21641">changeset 21641</a> manually. The change went in on 2010-05-31, so Backfire 10.03 doesn't have it. See <a href="https://forum.openwrt.org/viewtopic.php?pid=111432#p111432">this forum thread</a> for more info.</p>
<pre><code>nano /etc/hotplug2-common.rules
# remove the "next" line in the tun/tap section
</code></pre>
</li>
<li>
<p>Generate the keys following [this excellent guide] (http://openvpn.net/index.php/open-source/documentation/miscellaneous/77-rsa-key-management.html) from OpenVPN.</p>
<pre><code>nano /etc/easy-rsa/vars
# Scroll to the bottom and put in the country, province, city, organization, and email

build-ca
build-dh
build-key-server server
build-key-pkcs12 client1
</code></pre>
</li>
<li>
<p>Copy the following files into /etc/openvpn/. This is the default location, so they will get picked up automatically later.</p>
<pre><code>cd /etc/easy-rsa/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn/
</code></pre>
</li>
<li>
<p>Copy client1.p12 to the client machine (i.e. the road warrior). The client config file should look like this:</p>
<pre><code>client
dev tun
proto udp

remote &lt;server address&gt; 1194
resolv-retry infinite
nobind

persist-key
persist-tun

pkcs12 client1.p12

comp-lzo
verb 3

ns-cert-type server
tls-client
tls-remote &lt;the common name during the build-key-server step&gt;
</code></pre>
</li>
<li>
<p>Open Luci web interface, go to <em>Service -&gt; OpenVPN</em>, and enable <strong>sample_server</strong>. Click <em>Save &amp; Apply</em>.</p>
</li>
<li>
<p>Click the edit icon for sample_server. Click the <em>Swith to advanced configuration</em> link. Click the <em>VPN options</em> tab. Select <strong>Push options to peer</strong> from the <em>Additional Field</em> list, and click <em>Add</em>. Then, select <strong>custom</strong> and type <strong>route 192.168.1.0 255.255.255.0</strong> (change this accordingly if lan is not on 192.168.1.0/24).</p>
</li>
<li>
<p>Go to <em>Network -&gt; Interfaces</em>. Type <strong>vpn</strong> in the box and click <em>Add entry</em>. Change <em>Protocol</em> to <strong>none</strong>, and change <em>Interface</em> to <strong>tun0</strong>. Click <em>Save &amp; Apply</em>.</p>
</li>
<li>
<p>Go to <em>Network -&gt; Firewall -&gt; Zones</em>. Click <em>Add entry</em>, and type <strong>vpn</strong> as the <em>Name</em>. Change <em>Incoming Traffic</em> and <em>Outgoing Traffic</em> to <strong>accept</strong>, and select <strong>vpn</strong> in the <em>Networks</em> list. Click <em>Save &amp; Apply</em>.</p>
</li>
<li>
<p>Go to <em>Network -&gt; Firewall -&gt; Traffic Control</em>. Click the upper <em>Add entry</em> button twice. Select <strong>lan</strong> as <em>Source</em> and <strong>vpn</strong> as <em>Destination</em>, and then reverse the order. Click <em>Save &amp; Apply</em>.</p>
</li>
<li>
<p>Go to <em>Network -&gt; Firewall -&gt; Traffic Control</em> again. Click the lower <em>Add entry</em> button. Type <strong>openvpn</strong> as the <em>Name</em>, and change <em>Source</em> to <strong>wan</strong>. Then, select <strong>Protocol</strong> from the <em>Additional Field</em> list, and click <em>Add</em>. Change <em>Protocol</em> to <strong>UDP</strong>, and type <strong>1194</strong> as the <em>Destination Port</em>. Click <em>Save &amp; Apply</em>.</p>
</li>
</ol>
<p>We are done. Once openvpn is started on the client machine, it should be able to access all the lan machines, and vice versa.</p>

  </div>
</div>





<div class="blog_post">
  <a name="screw-android-i-am-going-maemo"></a>
  <h2 class="blog_post_title"><a href="/blog/2010/3/28/screw-android-i-am-going-maemo/" rel="bookmark" title="Permanent Link to Screw Android, I am going Maemo">Screw Android, I am going Maemo</a></h2>
  <small>March 28, 2010 at 11:47 PM | categories: 

<a href='/blog/category/linux'>linux</a>
 | <a href="http://sayap.com/blog/2010/3/28/screw-android-i-am-going-maemo/#disqus_thread">View Comments</a>
</small><p/>
  <div class="post_prose">
    
  <p>As the first and only Maemo 5 device, Nokia N900 is simply amazing. Unlike other smartphones that give you thousands of silly Apps, with N900 you can have <strong>real, actual, full-length Applications</strong>.</p>
<p>For example, this screenshot below shows a fully ajax web application rendered and functioning nicely in the N900's MicroB browser:</p>
<p><img src="/img/microb.png" width="560" heigth="296" /></p>
<p>(Btw, that's our Business Intelligence Dashboards developed by my colleagues. Great work guys!)</p>
<p>Of course, this web application can certainly be rendered and functioning nicely with other smartphones also. What seperates N900 from the appsphones, however, is that it can actually <strong>host</strong> the backend of the web application, all by itself.</p>
<p>In this case, the backend uses these services:</p>
<p><img src="/img/services.png" width="560" heigth="296" /></p>
<p>along with apache modules mod_wsgi and mod_php.</p>
<p>The speed isn't great, since N900's hardware spec is comparable to the laptop I had 10 years ago. Nevertheless, it works. So, screw Android with its non-standard Java and tiny SQLite database, I am going Maemo with N900 :D</p>
<p>UPDATE: After installing <code>build-essential</code>, all the latest and greatest versions of httpd, postgresql, and python can be compiled and run natively on the phone, without the chroot.</p>

  </div>
</div>





<div class="blog_post">
  <a name="installing-a-contrib-module-for-greenplum"></a>
  <h2 class="blog_post_title"><a href="/blog/2010/3/12/installing-a-contrib-module-for-greenplum/" rel="bookmark" title="Permanent Link to Installing a contrib module for Greenplum">Installing a contrib module for Greenplum</a></h2>
  <small>March 12, 2010 at 12:49 AM | categories: 

<a href='/blog/category/linux'>linux</a>
 | <a href="http://sayap.com/blog/2010/3/12/installing-a-contrib-module-for-greenplum/#disqus_thread">View Comments</a>
</small><p/>
  <div class="post_prose">
    
  <p>Installing a contrib module for Greenplum must be a dead simple task, because it was no where to be found in the otherwise comprehensive Greenplum Admin Guide.</p>
<p>However, google for "greenplum contrib" only returns one relevant result to a <a href="http://www.dbagp.com/?p=16">Chinese blog post</a>, which despite best intention, only serves to discourage a newbie like me from ever trying to install a contrib. Recompiling postgresql and hand-editing Makefile just to install a small module? That just doesn't sound right, even for a Gentoo user.</p>
<p>After some messing around with a few contrib, I finally found the right way, which is indeed dead simple:</p>
<ol>
<li>Get any of the postgresql 8.2 source package from the <a href="http://www.postgresql.org/ftp/source/">official site</a></li>
<li><code>su - gpadmin</code></li>
<li>Unpack the source, then go to ~/postgresql-8.2.xx/contrib/xxx</li>
<li><code>make USE_PGXS=1 COPT="-Wno-error" install</code></li>
<li>(Optional for Greenplum MPP) Use gpssh to copy whatever .so file that just get installed under /usr/local/greenplum-db/lib/postgresql to other nodes</li>
<li><code>psql -f xxx.sql [DBNAME]</code></li>
</ol>
<p>There you have it. Simple, no fluff, even an Ubuntu user can get it to work (seriously, I am not joking).</p>

  </div>
</div>





<div class="blog_post">
  <a name="garbage-in-xmltv-out"></a>
  <h2 class="blog_post_title"><a href="/blog/2008/12/31/garbage-in-xmltv-out/" rel="bookmark" title="Permanent Link to Garbage in, Xmltv out">Garbage in, Xmltv out</a></h2>
  <small>December 31, 2008 at 04:48 AM | categories: 

<a href='/blog/category/boleh'>boleh</a>
 | <a href="http://sayap.com/blog/2008/12/31/garbage-in-xmltv-out/#disqus_thread">View Comments</a>
</small><p/>
  <div class="post_prose">
    
  <p>As a follow up to my <a href="/blog/2008/12/30/mythtv-s-xmltv-grabber-for-malaysia-channels">previous post</a>, I am going to rant about my poor experience with screenscraping. Although the xmltv grabber, in its current incarnation, works with listings from <a href="http://star-ecentral.com/tvnradio/tvguide/">The Star</a> and <a href="http://www.astro.com.my/tvguide/default.asp">Astro</a>, the script was initially written to target the official websites for <a href="http://www.tv3.com.my/">TV3</a>/<a href="http://www.ntv7.com.my">NTV7</a>/<a href="http://www.8tv.com.my">8TV</a>/<a href="http://www.tv9.com.my/">TV9</a> (Media Prima) and RTM1/RTM2 (<a href="http://www.rtm.gov.my/">RTM</a>).</p>
<p>To understand why the idea was ditched, here's a sample line of html from TV3 (reformatted for sanity):</p>
<div class="pygments_murphy"><pre><span></span><span class="p">&lt;</span><span class="nt">td</span><span class="p">&gt;</span>
    <span class="p">&lt;</span><span class="nt">a</span>
        <span class="na">id</span><span class="o">=</span><span class="s">&quot;plcRoot_Layout_zoneCenter_ContentPlaceHolder_partPlaceholder_Layout_zoneScheduleContent_TV3ScheduleContent_ScheduleMain1_dlScheduleToday_ctl04_lnkShow&quot;</span> 
        <span class="na">title</span><span class="o">=</span><span class="s">&quot;Date: Aug 19, 2008&amp;lt;br&gt;Time: 10:00 AM - 10:02 AM&quot;</span>
        <span class="na">class</span><span class="o">=</span><span class="s">&quot;ScheduleLink&quot;</span>
        <span class="na">onmouseover</span><span class="o">=</span><span class="s">&quot;this.T_STICKY=false;this.T_WIDTH=300;this.T_FONTCOLOR=&#39;#000000&#39;;this.T_FONTFACE=&#39;Verdana&#39;;this.T_PADDING=5;this.T_BGCOLOR=&#39;#FFFFFF&#39;;this.T_TITLE=&#39;BERITA TERKINI&#39;;this.T_STATIC=true;return escape(&#39;Date: Aug 19, 2008&amp;lt;br&gt;Time: 10:00 AM - 10:02 AM&#39;);&quot;</span> 
        <span class="na">href</span><span class="o">=</span><span class="s">&quot;/Shows/MainNormal.aspx?MasterID=258&amp;amp;ShowID=322&amp;amp;MenuID=1&amp;amp;TemplateID=3&quot;</span>
    <span class="p">&gt;</span>
            BERITA TERKINI
    <span class="p">&lt;/</span><span class="nt">a</span><span class="p">&gt;</span>
<span class="p">&lt;/</span><span class="nt">td</span><span class="p">&gt;</span>
</pre></div>

<p>It contains an id that is <strong>150 characters long</strong>, multiple unescaped closing angle brackets, and some funky onmouseover code. Truely thedailywtf.com material. Oh ya, the html file with little content approaches 100K in size.</p>
<p><strong>TRWTF</strong> about Media Prima websites, however, is the lack of consistency. All 4 sites appear to be running the same ASP.NET app, but subtly, each one is different:</p>
<ul>
<li>
<p>It is <code>Schedules.aspx</code> on TV3 and NTV7, <code>ScheduleToday.aspx</code> on 8TV, and <code>Schedule.aspx</code> on TV9.</p>
</li>
<li>
<p>To get today schedules, you need to pass in query string parameter <code>view=today</code> to TV3, NTV7, and TV9. 8TV, of course, doesn't need it.</p>
</li>
<li>
<p>NTV7 only contains partial listing and will truncate shows that have been aired from the list. TV9 contains partial listing but doesn't truncate. TV3 and 8TV contain full listing and doesn't truncate. IMHO, Media Prima should change one of them to contain full listing with truncation. Then we will have a permutation.</p>
</li>
<li>
<p>If you feel adventurous, you can probably get around the truncation by simulating ASP.NET's postback and using the lovely calendar widget that has <em>number-of-days-since-2000-01-01</em> as its parameter. If you feel adventurous, and have too much time in your hands.</p>
</li>
</ul>
<p>Bashing aside, one good thing about Media Prima is that they are not afraid to show you what's under the hood. I just checked the 8tv schedules and was presented with this error message, embedded in the page:</p>
<div class="pygments_murphy"><pre><span></span>[Error loading the WebPart &#39;8TVScheduleSubNavi&#39;]
C<span class="p">:</span><span class="nl">\Inetpub\wwwroot\mediaprima\8tv\CMSWebParts\8TV\Schedule\8TVScheduleSubNavi.ascx(17)</span><span class="c1">: error BC30451: Name &#39;LinkHelperClass&#39; is not declared.</span>
</pre></div>

<p>Awesome.</p>
<p>In comparison, RTM website is surprisingly good.</p>
<ul>
<li>
<p>Both RTM1 and RTM2 pages are <strong>consistent</strong> to each other. This is a small feat, but I have to mention it.</p>
</li>
<li>
<p>The date parameter follows ISO8601, i.e. <code>YYYY-MM-DD</code>, unlike Media Prima websites that expect 3 parameters for day, month, and year. Kudos to the developers.</p>
</li>
<li>
<p>The page size is <strong>6 times smaller</strong> compared to Media Prima.</p>
</li>
<li>
<p>The listing follows the <em>newspaper day</em> (i.e. from morning until the next morning), rather than the actual day (i.e. from midnight to midnight). This is good usability.</p>
</li>
<li>
<p>It has reliability issue at times -- RTM1 listing is blank since 2008-12-28.</p>
</li>
</ul>
<p>As for Astro website, there is nothing much to talk about. Overall, it is just OK.</p>
<ul>
<li>
<p>Pages are consistent.</p>
</li>
<li>
<p>The date parameter uses the format of <code>DD-MON-YYYY</code>.</p>
</li>
<li>
<p>A day of schedules is splitted into 2 pages, one for AM, one for PM. This is cumbersome not only for the script to scrape, but also for an actual person to read.</p>
</li>
<li>
<p>Things like <em>No Transmission</em> and <em>Transmission Ends</em> are included as shows with start time and duration. This isn't really necessary.</p>
</li>
<li>
<p>The size of the page is 3 times bigger compared to RTM.</p>
</li>
</ul>
<p>The Star website has its goods and bads, but still, it is the best among the bunch.</p>
<ul>
<li>
<p>Pages are consistent.</p>
</li>
<li>
<p>The date parameter uses the format of <code>MM/DD/YYYY</code>. Ugh.</p>
</li>
<li>
<p>The listing contains columns for <strong>description</strong> and <strong>episode</strong>. This is a major plus. However, the episode column contains a mix of English words and Arabic numerals. It has to be more consistent.</p>
</li>
<li>
<p>The listing follows newspaper day (duh).</p>
</li>
<li>
<p>It spells <strong>SpongeBob SquarePants</strong> correctly. Shame on you, Astro.</p>
</li>
</ul>
<p>Lastly, the web designers for RTM/Media Prima/Astro/The Star really need to start learning how to use CSS to properly <em>separate content from presentation</em>. Seriously. Let's just start by giving a freaking id (that is less than 150 characters) to the freaking schedules tables, so that I don't have to rely on some bizzare <code>bgcolor</code> attributes to identify them. Amen.</p>

  </div>
</div>








                </div>
            </div>

            <div id="footer">

    <hr />

<p id="credits">
Powered by <a href="http://www.blogofile.com">Blogofile</a>.<br/>
<br/>
RSS feeds for <a href="/blog/feed/">Entries</a>
 and <a
href="http://sayap.disqus.com/latest.rss">Comments</a>.
<br>
</p>

<script type="text/javascript">
//<![CDATA[
(function() {
		var links = document.getElementsByTagName('a');
		var query = '?';
		for(var i = 0; i < links.length; i++) {
			if(links[i].href.indexOf('#disqus_thread') >= 0) {
				query += 'url' + i + '=' + encodeURIComponent(links[i].href) + '&';
			}
		}
		document.write('<script charset="utf-8" type="text/javascript" src="https://disqus.com/forums/sayap/get_num_replies.js' + query + '"></' + 'script>');
	})();
//]]>
</script>


            </div> 
        </div> 
    </body>
</html>







                               

Whois info of domain

Domain Name: SAYAP.COM
Registry Domain ID: 93363296_DOMAIN_COM-VRSN
Registrar WHOIS Server: whois.porkbun.com
Registrar URL: http://porkbun.com
Updated Date: 2024-12-08T05:23:11Z
Creation Date: 2002-12-23T06:51:55Z
Registry Expiry Date: 2025-12-23T06:51:55Z
Registrar: Porkbun LLC
Registrar IANA ID: 1861
Registrar Abuse Contact Email: [email protected]
Registrar Abuse Contact Phone: 5038508351
Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: IVY.NS.CLOUDFLARE.COM
Name Server: WILL.NS.CLOUDFLARE.COM
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of whois database: 2025-05-15T07:15:22Z <<<
For more information on Whois status codes, please visit https://icann.org/epp
NOTICE: The expiration date displayed in this record is the date the
TERMS OF USE: You are not authorized to access or query our Whois
by the following terms of use: You agree that you may use this Data only
to: (1) allow, enable, or otherwise support the transmission of mass