<?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>Computer architecture &#8211; Henry Poon&#039;s Blog</title>
	<atom:link href="https://blog.henrypoon.com/blog/tag/computer-architecture/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.henrypoon.com</link>
	<description></description>
	<lastBuildDate>Wed, 05 Oct 2022 02:07:42 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
<site xmlns="com-wordpress:feed-additions:1">83044199</site>	<item>
		<title>Running Selenium Webdriver on WSL2</title>
		<link>https://blog.henrypoon.com/blog/2020/09/27/running-selenium-webdriver-on-wsl2/</link>
					<comments>https://blog.henrypoon.com/blog/2020/09/27/running-selenium-webdriver-on-wsl2/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Mon, 28 Sep 2020 00:49:34 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Drive]]></category>
		<category><![CDATA[Error message]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Firefox version history]]></category>
		<category><![CDATA[Flag]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Graphical user interface testing]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[IP address]]></category>
		<category><![CDATA[ise]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Lag]]></category>
		<category><![CDATA[lamb]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Lie]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Messages]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Parameter]]></category>
		<category><![CDATA[PATH]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Resolv.conf]]></category>
		<category><![CDATA[Rolling]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Sleep]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[STR]]></category>
		<category><![CDATA[Struct]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Ubuntu version history]]></category>
		<category><![CDATA[USR]]></category>
		<category><![CDATA[Variable]]></category>
		<category><![CDATA[Web development software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">https://blog.henrypoon.com/?p=6269</guid>

					<description><![CDATA[This is a newer version of the post that I made before on how to run Selenium on WSL, but this one is on doing it in WSL2. The instructions are similar at a high level but there are some additional gotchas. You will need: WSL2 setup with Firefox installed (mine uses Ubuntu 20.04) VcXsrv [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This is a newer version of the post that I made before on <a href="https://blog.henrypoon.com/blog/2017/06/18/running-selenium-webdriver-on-bash-for-windows/" target="_blank" rel="noreferrer noopener">how to run Selenium on WSL</a>, but this one is on doing it in WSL2.  The instructions are similar at a high level but there are some additional gotchas.</p>



<p class="wp-block-paragraph">You will need:</p>



<ul class="wp-block-list"><li><a rel="noreferrer noopener" href="https://msdn.microsoft.com/en-us/commandline/wsl/install_guide" target="_blank">WSL2 setup</a> with Firefox installed (mine uses Ubuntu 20.04)</li><li><a rel="noreferrer noopener" href="https://sourceforge.net/projects/vcxsrv/" target="_blank">VcXsrv</a></li><li><a rel="noreferrer noopener" href="https://github.com/mozilla/geckodriver/releases" target="_blank">geckodriver</a></li></ul>



<h2 class="wp-block-heading">How it works</h2>



<p class="wp-block-paragraph">VcXsrv starts up an X server on the Windows host machine, and what WSL will do is connect to this server to pass on the details of what programs need to be displayed (in this case, the browser window).  Geckodriver is there purely as a middle layer for Selenium to be able to interact with Firefox.</p>



<h2 class="wp-block-heading">VcXsrv setup</h2>



<p class="wp-block-paragraph">This setups the X server so that Windows can display graphical data coming from the Ubuntu instance.</p>



<ol class="wp-block-list"><li>Download and install</li><li>Start it up with the the command line parameter &#8220;-ac&#8221;.  This flag removes access control restrictions for connecting clients (which is okay as long as this server isn&#8217;t exposed on the open Internet and that the only client connecting is the Ubuntu instance)</li><li>Allow connections to VcXsrv on Windows Firewall</li></ol>



<p class="wp-block-paragraph">The &#8220;-ac&#8221; flag and allowing the program through Windows Firewall is pretty important.  When I didn&#8217;t do this, Ubuntu would give me cryptic error messages like &#8220;Broadway display type not supported&#8221;, but once I set up these access controls, everything was fine.</p>



<h2 class="wp-block-heading">Bash setup</h2>



<p class="wp-block-paragraph">Install firefox</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo apt install firefox</code></pre>



<p class="wp-block-paragraph">Export DISPLAY variable in .bashrc (or for whatever terminal you use, maybe .zshrc, etc.)</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">export DISPLAY=$(ip route | awk '{print $3; exit}'):0</code></pre>



<p class="wp-block-paragraph">This will configure your DISPLAY variable to use the IP address listed in the resolv.conf file.  The IP address listed there is the IP address of the X server that will be used for displaying the browser window.</p>



<p class="wp-block-paragraph">Start up VcXsrv as described in the above and then try to open Firefox.  The Firefox window should open.</p>



<h2 class="wp-block-heading">Geckodriver setup</h2>



<p class="wp-block-paragraph">This acts purely as the API interface that allows Selenium to interact with Firefox.  Selenium looks for this executable when controlling the web browser.</p>



<ol class="wp-block-list"><li>Download geckodriver (make sure to get the Linux one and not the Windows one)</li><li>Put it in /usr/bin (or alternatively some other folder in your PATH)</li></ol>



<h2 class="wp-block-heading">Selenium sample on Python</h2>



<p class="wp-block-paragraph">I tend to use Python when running Selenium code, and I haven&#8217;t tried it on another language (I imagine the principles are similar).  Here is a piece of sample code for starting up the browser and opening up a website, but really any Selenium code can be used.</p>



<pre class="wp-block-code"><code lang="python" class="language-python">import time

from selenium import webdriver
from selenium.webdriver import DesiredCapabilities

def execute_with_retry(method, max_attempts):
    e = None
    for i in range(0, max_attempts):
        try:
            return method()
        except Exception as e:
            print(e)
            time.sleep(1)
    if e is not None:
        raise e

capabilities = DesiredCapabilities.FIREFOX
capabilities["marionette"] = True
firefox_bin = "/usr/bin/firefox"
browser = execute_with_retry(lambda: webdriver.Firefox(
    firefox_binary=firefox_bin, capabilities=capabilities), 10)

browser.get("https://www.google.com")

time.sleep(10)

browser.close()</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2020/09/27/running-selenium-webdriver-on-wsl2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">6269</post-id>	</item>
		<item>
		<title>Setting up your own Counter-Strike 1.6 dedicated server via Docker</title>
		<link>https://blog.henrypoon.com/blog/2018/09/23/setting-up-your-own-counter-strike-1-6-dedicated-server-via-docker/</link>
					<comments>https://blog.henrypoon.com/blog/2018/09/23/setting-up-your-own-counter-strike-1-6-dedicated-server-via-docker/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Sun, 23 Sep 2018 20:00:12 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[gaming]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Contents]]></category>
		<category><![CDATA[Counter-Strike]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Directory]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Filesystem Hierarchy Standard]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[HLDS]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[ise]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[PATH]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[Sleep]]></category>
		<category><![CDATA[STR]]></category>
		<category><![CDATA[System administration]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[Systemd]]></category>
		<category><![CDATA[Team]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[USR]]></category>
		<category><![CDATA[Variable]]></category>
		<guid isPermaLink="false">https://blog.henrypoon.com/?p=2992</guid>

					<description><![CDATA[Once upon a time, you had to run the HLDSUpdateTool, and then SteamCMD. But now, awesome people on the internet have created Docker images for setting up a Counter-Strike 1.6 dedicated server. Now, all you have to do is: Install Docker on your machine Get a Docker image for a CS 1.6 server (I created [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Once upon a time, you had to run the HLDSUpdateTool, and then SteamCMD. But now, awesome people on the internet have created Docker images for setting up a Counter-Strike 1.6 dedicated server. Now, all you have to do is:</p>



<ol class="wp-block-list"><li>Install Docker on your machine</li><li>Get a Docker image for a CS 1.6 server (I created <a rel="noreferrer noopener" href="https://github.com/hpoon/HLDS-CS1.6" target="_blank">this one</a>, which is based off of an <a rel="noreferrer noopener" href="https://github.com/kriansa/cs-16-server" target="_blank">existing one</a>. Mine has:<ul><li>A lot of maps</li><li>Metamod</li><li>AMXModX (with high ping kicker, podbot control menu, round money, rock the vote, and admin all in one)</li><li>Podbot</li></ul></li><li>Customise the server (e.g. editing the server.cfg, amxx.cfg, and other config files, etc.)</li><li>Start it up! (the README.md in the above linked Git repos has more info on this)</li></ol>



<p class="wp-block-paragraph">As far as ports go, I only needed to forward 27015 on my machine, but your mileage may vary. Others have reported that <a rel="noreferrer noopener" href="https://developer.valvesoftware.com/wiki/Half-Life_Dedicated_Server" target="_blank">some more ports</a> must also be forwarded on some machines.</p>



<p class="wp-block-paragraph">Then optionally, if you&#8217;re running Ubuntu and you want this server to start up like a service via systemd, you&#8217;ll need this:</p>



<ol class="wp-block-list"><li>An executable script with path /usr/local/bin/hlds with contents (make sure the DIR variable matches your installation directory):</li></ol>



<pre class="wp-block-code"><code lang="bash" class="language-bash">#!/bin/sh

# Do not change this path
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

# The path to the game you want to host. example = /home/newuser/dod
DIR=/opt/cs-16-server/bin
DAEMON=./server

start()
{
    echo  -n "Starting HLDS"
    if [ -e $DIR ]; then
        cd $DIR
        $DAEMON start
    else
        echo "No such directory: $DIR!"
    fi
}

stop()
{
    echo -n "Stopping HLDS"
    if [ -e $DIR ]; then
        cd $DIR
        $DAEMON stop
    else
        echo "No such directory: $DIR!"
    fi
}

reload()
{
    echo -n "Restarting HLDS"
    stop
    sleep 1
    start
}

case "$1" in
    start|stop|reload)
        "$1"
        ;;
    *)
        echo  "Usage: $ 0 {start | stop | reload | status}"
        exit  1
        ;;
esac

exit  0</code></pre>



<ol class="wp-block-list" start="2"><li>A script with path /etc/systemd/system/hlds.service with contents:</li></ol>



<pre class="wp-block-code"><code lang="properties" class="language-properties">[Unit]
Description=HLDS

[Service]
Type=oneshot
ExecStart=/usr/local/bin/hlds start
ExecStop=/usr/local/bin/hlds stop
ExecReload=/usr/local/bin/hlds reload
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target</code></pre>



<ol class="wp-block-list" start="3"><li>Then execute:</li></ol>



<pre class="wp-block-code"><code lang="bash" class="language-bash">systemctl daemon-reload
systemctl enable hlds
service hlds start</code></pre>



<p class="wp-block-paragraph">Feel free to check out my server that&#8217;s running right now with the same Docker image! Here&#8217;s the command to connect via the console.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">connect henrypoon.com:27015</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2018/09/23/setting-up-your-own-counter-strike-1-6-dedicated-server-via-docker/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2992</post-id>	</item>
		<item>
		<title>Running LINE Messenger in Ubuntu 14.04</title>
		<link>https://blog.henrypoon.com/blog/2015/02/09/running-line-messenger-in-ubuntu-14-04/</link>
					<comments>https://blog.henrypoon.com/blog/2015/02/09/running-line-messenger-in-ubuntu-14-04/#comments</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Mon, 09 Feb 2015 22:25:38 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[9]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[BackSlash Linux]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Chrome OS]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computing platforms]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Extension]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Lie]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Lubuntu]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[STR]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[WINE]]></category>
		<guid isPermaLink="false">https://www.henrypoon.com/blog/?p=2039</guid>

					<description><![CDATA[LINE is a messaging program kind of like WhatsApp, but it has a desktop client. &#160;However, this desktop client only runs on Windows. &#160;On Linux, it has to run under Wine, which&#160;allows running Windows programs (some) inside the Linux environment. &#160;Caveat: sending stickers does not appear to work. UPDATE 7. JULY 2015: Since this post, [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">LINE is a messaging program kind of like WhatsApp, but it has a desktop client. &nbsp;However, this desktop client only runs on Windows. &nbsp;On Linux, it has to run under <a href="https://www.winehq.org/" target="_blank" rel="noopener noreferrer">Wine</a>, which&nbsp;allows running Windows programs (some) inside the Linux environment. &nbsp;Caveat: sending stickers does not appear to work.</p>



<p class="wp-block-paragraph">UPDATE 7. JULY 2015: Since this post, my version of LINE has been updated to 4.0.3.367, and it looks like stickers work now!</p>



<p class="wp-block-paragraph"><span style="color: #ff0000;">UPDATE 31. JULY 2016: Looks like in July 2015, LINE released a Chrome app.  Users of Chrome can just use that extension instead of using this method:</span> <a href="https://chrome.google.com/webstore/detail/line/ophjlpahpchlmihnnnihgmmeilfjmjjc" target="_blank" rel="noreferrer noopener">Link</a></p>



<p class="wp-block-paragraph">Running LINE in Ubuntu 14.04</p>



<ol class="wp-block-list"><li>Install Wine</li></ol>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo apt-get install wine</code></pre>



<ol class="wp-block-list" start="2"><li>Install VC++ 2008 Redistributable</li></ol>



<pre class="wp-block-code"><code lang="bash" class="language-bash">winetricks vcrun2008</code></pre>



<ol class="wp-block-list" start="3"><li>Download and install <a href="http://line.me/en-US/download" target="_blank" rel="noopener noreferrer">LINE</a> for Windows</li></ol>



<p class="wp-block-paragraph">Without installing the VC++ 2008 Redistributable, LINE would intermittently crash (even though it was able to start correctly). &nbsp;This worked on my Ubuntu 14.04 x64 system.</p>



<p class="wp-block-paragraph">LINE Version: 3.9.1.188<br>Wine Version: 1.6.2</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2015/02/09/running-line-messenger-in-ubuntu-14-04/feed/</wfw:commentRss>
			<slash:comments>26</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2039</post-id>	</item>
		<item>
		<title>Installing Epson WF-3520 Printer on Ubuntu</title>
		<link>https://blog.henrypoon.com/blog/2015/01/30/installing-epson-wf-3520-printer-on-ubuntu/</link>
					<comments>https://blog.henrypoon.com/blog/2015/01/30/installing-epson-wf-3520-printer-on-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Sat, 31 Jan 2015 07:37:18 +0000</pubDate>
				<category><![CDATA[gaming]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computer printers]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Drive]]></category>
		<category><![CDATA[epson]]></category>
		<category><![CDATA[Find]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Office equipment]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Printer]]></category>
		<category><![CDATA[printer setup]]></category>
		<category><![CDATA[Seiko Epson]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[Typography]]></category>
		<category><![CDATA[ubuntu]]></category>
		<guid isPermaLink="false">https://www.henrypoon.com/blog/?p=2026</guid>

					<description><![CDATA[Just had an issue where I couldn&#8217;t set up my printer (connected on the network) on my Ubuntu machine because I didn&#8217;t have the drivers. &#160;The automatic printer set up would keep crashing half way through. This post from askubuntu.com hits this issue right on the head:&#160;http://askubuntu.com/questions/333534/installing-epson-wf-3520 I thought I&#8217;d leave a post here, just [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Just had an issue where I couldn&#8217;t set up my printer (connected on the network) on my Ubuntu machine because I didn&#8217;t have the drivers. &nbsp;The automatic printer set up would keep crashing half way through.</p>
<p>This post from <a href="http://askubuntu.com" target="_blank" rel="noopener noreferrer">askubuntu.com</a> hits this issue right on the head:&nbsp;<a href="http://askubuntu.com/questions/333534/installing-epson-wf-3520" target="_blank" rel="noopener noreferrer">http://askubuntu.com/questions/333534/installing-epson-wf-3520</a></p>
<p>I thought I&#8217;d leave a post here, just so I know where to find it again in case I forget.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2015/01/30/installing-epson-wf-3520-printer-on-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2026</post-id>	</item>
		<item>
		<title>Proof of the Farthest-in-Future Optimal Caching Algorithm</title>
		<link>https://blog.henrypoon.com/blog/2014/02/02/proof-of-the-farthest-in-future-optimal-caching-algorithm/</link>
					<comments>https://blog.henrypoon.com/blog/2014/02/02/proof-of-the-farthest-in-future-optimal-caching-algorithm/#comments</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Sun, 02 Feb 2014 23:19:13 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[All That]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Cache replacement policies]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Comment]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[Contents]]></category>
		<category><![CDATA[CPU cache]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Digital technology]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[farthest-first]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[greedy algorithms]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[IOS]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[optimal caching]]></category>
		<category><![CDATA[Outside]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[tuna]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/proof-of-the-farthest-in-future-optimal-caching-algorithm</guid>

					<description><![CDATA[This topic came up in one of my lectures and I found it a little challenging to understand the proof so I thought I&#8217;d write it down as best as I could explain it so that I could understand it better and possibly help other people understand it better. &#160;Feel free to comment/ask questions/correct me, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>This topic came up in one of my lectures and I found it a little challenging to understand the proof so I thought I&#8217;d write it down as best as I could explain it so that I could understand it better and possibly help other people understand it better. &nbsp;Feel free to comment/ask questions/correct me, etc.</p>
<p>In a computer, there are various methods of storing information. &nbsp;Information can be stored in the processor cache, RAM, hard disk, etc. &nbsp;It can be faster to request information from a storage medium that is smaller. &nbsp;However, this smaller storage medium cannot fit all the possible information that can be requested. &nbsp;So the idea is to insert a portion of the data into the faster, smaller medium (the <strong>cache</strong>) and the rest into the slower, larger medium (<strong>main memory)</strong>.</p>
<p>If a request is made and the data is not available in the faster, smaller medium first, then the data will be read from the slower, larger medium &#8211; this is what is known as a <strong>cache miss</strong>.</p>
<p>Given that all the data cannot possibly live in the cache, there must be a way to minimize the amount of times that the data must be read from the main memory.</p>
<h1>Optimal Caching &#8211; Farthest-in-Future</h1>
<h2>The Algorithm</h2>
<p>The idea is that there is an algorithm that minimizes the amount of cache misses that occur for a set of requests. &nbsp;The <em>Farthest-in-Future Algorithm&nbsp;</em>evicts the item in the cache that is not requested until the farthest in the future. &nbsp;For example, given the following cache with items &#8220;a&#8221; through &#8220;f&#8221;.</p>
<table>
<tbody>
<tr>
<td>Cache Items</td>
<td>a b c d e f</td>
</tr>
<tr>
<td>Future Queries</td>
<td>g a b c e d a b b f</td>
</tr>
</tbody>
</table>
<p><span style="line-height:1.5em;">It is clear that &#8220;g&#8221; does not exist in the set of cache items and so when &#8220;g&#8221; is requested, a cache miss will result. An item will be evicted because &#8220;g&#8221; is not in the cache. &nbsp;According to the </span><em style="line-height:1.5em;">Farthest-in-Future Algorithm</em><span style="line-height:1.5em;">, element &#8220;f&#8221; will be evicted since it is the one that will be used furthest in the future.</span></p>
<h2>Definitions</h2>
<p><strong>Cache Miss</strong> &#8211; Occurs when it is necessary to bring in an item from the main memory into the cache</p>
<p><strong>Schedule</strong>&nbsp;&#8211; A list that contains, for each, request, which item is brought into the cache, and which item is evicted</p>
<p><strong>Reduced Schedule</strong> &#8211; a schedule that only brings in an item when there is a request for that item &#8211; so a non-reduced schedule would bring an item into the cache outside of a request for that item</p>
<h2>Theorem</h2>
<p>To be shown:</p>
<blockquote><p><em>Farthest-in-Future</em> is the optimal algorithm that minimizes the number of cache misses.</p></blockquote>
<p>To prove this, let&#8217;s say there is a schedule SFF&nbsp;that follows the&nbsp;<em>Farthest-in-Future Algorithm</em>&nbsp;and that there is a schedule optimal S<sup><em></sup>&nbsp;that has a minimum number of cache misses. It can be shown that it is possible to transform&nbsp;S<sup></em></sup>&nbsp;into SFF&nbsp;by performing a series of evictions without increasing the number of cache misses. &nbsp;Since&nbsp;S<sup>*</sup>&nbsp;is already optimal, and the number of cache misses did not increase, then SFF&nbsp;must be optimal.</p>
<p>To perform one transformation, the statement below can be used. &nbsp;Right now, it isn&#8217;t all that clear why this is necessary, but it should become clearer further on.</p>
<blockquote><p>Let S&nbsp;be a reduced schedule that is the same as SFF&nbsp;for the first j requests, then there is a reduced schedule S&#8217;&nbsp;that is the same as SFF&nbsp;for the first j+1 requests, and incurs no more misses than S</p></blockquote>
<h2>Proof</h2>
<p>Let&#8217;s say the cache at the start looks like this. &nbsp;S and SFF&nbsp;have the exact same contents (this is what was defined in the previous section).</p>
<table>
<tbody>
<tr>
<td>S</td>
<td>a b c d</td>
</tr>
<tr>
<td>SFF</td>
<td>a b c d</td>
</tr>
</tbody>
</table>
<p><span style="line-height:1.5em;">Given a schedule S, it can be shown that any request can be made, and the resulting schedule would be equal to the ideal algorithm and does not increase the number of cache misses. &nbsp;Essentially, we want S = S&#8217; = SFF&nbsp;after a request is made and that the number of cache misses have not increased. &nbsp;If this can be shown for all different scenarios that items are requested, then&nbsp;</span><em style="line-height:1.5em;">Farthest-in-Future</em><span style="line-height:1.5em;"> is the ideal algorithm.</span></p>
<h3>Case 1: Item Is Already in the Cache</h3>
<p>Now let&#8217;s say the next item to be requested is item &#8220;d&#8221;. &nbsp;It is clear that this item exists in both caches and no evictions are necessary. &nbsp;Since no evictions are necessary, SFF&nbsp;does not change. &nbsp;It was specified in a prior section that there is a schedule S&#8217; that equals SFF, which incurs no more misses than S.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>a b c d</td>
<td>Read&nbsp;d</td>
</tr>
<tr>
<td>S</td>
<td>a b c d</td>
<td>Read&nbsp;d</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>a b c d</td>
<td>Read&nbsp;d</td>
</tr>
</tbody>
</table>
<p>Here, S = S&#8217; because no changes had to be made to the cache and there were no cache misses. &nbsp;After the request for item &#8220;d&#8221;, S = S&#8217;, each with zero cache misses, which is a valid outcome.</p>
<h3>Case 2: Item Is Not in the Cache, S and SFF&nbsp;Evict the Same Item</h3>
<p>Let&#8217;s say the next item to be requested is item &#8220;e&#8221;. &nbsp;Neither cache has this item, so an eviction will have to be made. &nbsp;Let&#8217;s also say SFF&nbsp;and S both choose to evict item &#8220;a&#8221; to make room for &#8220;e&#8221;. &nbsp;It was specified in a prior section that there is a schedule S&#8217; that equals SFF, which incurs no more misses than S.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>b c d e</td>
<td>Evict a; Read e</td>
</tr>
<tr>
<td>S</td>
<td>b c d e</td>
<td>Evict a; Read e</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>b c d e</td>
<td>Evict a; Read e</td>
</tr>
</tbody>
</table>
<p>Here S = S&#8217; because S and SFF&nbsp;both evicted the same item. &nbsp;Both S and S&#8217; each have one cache miss (no increase relative to one another), which is a valid outcome.</p>
<h3>Case 3: Item Is Not in the Cache, S and SFF&nbsp;Each Evict A Different Item</h3>
<p>This is where the proof can become more confusing (as if it isn&#8217;t already). &nbsp;Let&#8217;s say the next item to be requested is &#8220;e&#8221;. &nbsp;Let&#8217;s also say that the ideal algorithm, SFF, evicts &#8220;a&#8221; and S evicts &#8220;b&#8221;.&nbsp;It was specified in a prior section that there is a schedule S&#8217; that equals SFF, which incurs no more misses than S. This means that in order to get S&#8217; = SFF, S&#8217; should evict &#8220;a&#8221; in order to match with SFF.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>b c d e</td>
<td>Evict a; Insert&nbsp;e</td>
</tr>
<tr>
<td>S</td>
<td>a c d e</td>
<td>Evict b; Insert&nbsp;e</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>b c d e</td>
<td>Evict a; Insert&nbsp;e</td>
</tr>
</tbody>
</table>
<p>Here, S does not agree with&nbsp;S&#8217; = SFF. &nbsp;Essentially, these two schedules behave the same, so long as future requests do not request items &#8220;a&#8221; or &#8220;b&#8221;. &nbsp;This shows that there is a schedule S&#8217; that equals SFF, but it is not known whether or not S&#8217; has no more cache misses than S, since &#8220;a&#8221; or &#8220;b&#8221; can be requested in the future, which can determine whether S or S&#8217; has more cache misses. &nbsp;From this point onward, S and S&#8217; behave the same until one of the following happens:</p>
<h4>Case 3a: Item Is in SFF, But Not S; S Evicts &#8220;a&#8221;</h4>
<p>Let&#8217;s say eventually item &#8220;b&#8221; gets requested. &nbsp;In this case, S&#8217; and SFF do not need to change. &nbsp;All S has to do is evict &#8220;a&#8221; to make room for &#8220;b&#8221;. &nbsp;In this case, S has two total cache misses (from request &#8220;e&#8221; and &#8220;b&#8221;), while SFF and S&#8217; each have only one cache miss, thus fulfilling the cache miss requirement.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>b c d e</td>
<td>Insert&nbsp;b</td>
</tr>
<tr>
<td>S</td>
<td>b c d e</td>
<td>Evict a; Insert&nbsp;b</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>b c d e</td>
<td>Insert&nbsp;b</td>
</tr>
</tbody>
</table>
<h4>Case 3b: Item Is Neither in SFF Nor S</h4>
<p>Let&#8217;s say eventually item &#8220;f&#8221; gets requested. &nbsp;S&#8217;, SFF, and S all need to make an eviction. S&#8217; and SFF can evict &#8220;b&#8221; to make room for &#8220;f&#8221;, and S can evict &#8220;a&#8221; to make room for &#8220;f&#8221;. &nbsp;In this case, each schedule as two cache misses, thus fulfilling the cache miss requirement.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>c d e f</td>
<td>Evict b; Insert&nbsp;f</td>
</tr>
<tr>
<td>S</td>
<td>c d e f</td>
<td>Evict a; Insert&nbsp;f</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>c d e f</td>
<td>Evict b; Insert&nbsp;f</td>
</tr>
</tbody>
</table>
<h4>Case 3c: Item Is in SFF, But Not S; S Evicts Item Not Equal to &#8220;a&#8221;</h4>
<p>Let&#8217;s say eventually item &#8220;b&#8221; gets requested and S evicts an item that isn&#8217;t &#8220;a&#8221;, say &#8220;c&#8221;. &nbsp;Now, SFF and S&#8217; both already have &#8220;b&#8221; in the cache. &nbsp;In order to synchronize S and S&#8217; to make them comparable to see how many cache misses each have, S&#8217; and SFF will evict &#8220;c&#8221; to make room for &#8220;a&#8221;.</p>
<table>
<tbody>
<tr>
<td>SFF</td>
<td>a b d e</td>
<td>Evict c; Insert a</td>
</tr>
<tr>
<td>S</td>
<td>a b d e</td>
<td>Evict c; Insert&nbsp;b</td>
</tr>
<tr>
<td>S&#8217;</td>
<td>a b d e</td>
<td>Evict c; Insert&nbsp;a</td>
</tr>
</tbody>
</table>
<p>Since &#8220;a&#8221; is being brought into the cache without a request for &#8220;a&#8221;, this makes S&#8217; and SFF no longer a reduced schedule. &nbsp;However, the proof calls for S&#8217; and SFF being a reduced schedule. &nbsp;Fortunately, it is possible to transform an unreduced schedule into a reduced one. &nbsp;In this case, each schedule has two cache misses, thus fulfilling the cache miss requirement.</p>
<h4>Case 3d: Item Is Not in SFF, But in S</h4>
<p>The only item that is in S and not SFF is item &#8220;a&#8221;. &nbsp;SFF had evicted it initially at the beginning of Case 3. &nbsp;Since SFF had evicted it, it must have been the item that would be requested furthest into the future. &nbsp;Therefore, it is not possible for item &#8220;a&#8221; to be requested before other items.</p>
<p>&nbsp;</p>
<p>After going through all possible eviction decisions that the schedules can do, it was shown that for each scenario, there was indeed a schedule S&#8217; = SFF, where the cache misses incurred in S&#8217; no more than S.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2014/02/02/proof-of-the-farthest-in-future-optimal-caching-algorithm/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1799</post-id>	</item>
		<item>
		<title>Switching Microsoft Windows and Office to English</title>
		<link>https://blog.henrypoon.com/blog/2011/01/20/switching-microsoft-windows-and-office-to-english/</link>
					<comments>https://blog.henrypoon.com/blog/2011/01/20/switching-microsoft-windows-and-office-to-english/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Thu, 20 Jan 2011 18:40:36 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[Click]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computers]]></category>
		<category><![CDATA[Control Panel]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Find]]></category>
		<category><![CDATA[German]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Graphical user interfaces]]></category>
		<category><![CDATA[Icon]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Language]]></category>
		<category><![CDATA[Languages]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft Office]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Start menu]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 10]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[Windows Me]]></category>
		<category><![CDATA[Windows Vista]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/switching-microsoft-windows-and-office-to-english</guid>

					<description><![CDATA[At my workplace, all the computers are in German.&#160; I do not read German.&#160; I get by by remembering what buttons were where in the Windows version.&#160; Luckily, I managed to switch the language to English. Switching the Language for Windows To do this, go to the Control Panel and open the Regional and Language [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>At my workplace, all the computers are in German.&nbsp; I do not read German.&nbsp; I get by by remembering what buttons were where in the Windows version.&nbsp; Luckily, I managed to switch the language to English.</p>
<h1>Switching the Language for Windows</h1>
<p>To do this, go to the Control Panel and open the Regional and Language Options.&nbsp; This might be hard to do when Windows is in a different language so just look for the icon that has a globe on it.&nbsp; Depending on the version of Windows, switching the language may not be possible.&nbsp; And also, different versions of Windows put these buttons in different places within the Language Options.&nbsp; Click around the tabs, and there should be a drop down box for you to change the language.&nbsp; Once that’s done, restart the computer.</p>
<h1>Switching the Language for Office</h1>
<p>Hopefully switching the language for Windows worked, because it would really help for this part, although it isn’t necessary.&nbsp; Not every version of Office supports changing languages.&nbsp; It depends on the version that was installed.&nbsp; Go to the Start Menu, find Microsoft Office, and then Microsoft Office Tools.&nbsp; Under there, there should be an icon for Language Settings.&nbsp; The icon has a globe and an A on it under Windows 7.&nbsp; Open it and change the language.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2011/01/20/switching-microsoft-windows-and-office-to-english/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">731</post-id>	</item>
		<item>
		<title>Civilization 4 Port Forwarding</title>
		<link>https://blog.henrypoon.com/blog/2010/06/30/civilization-4-port-forwarding/</link>
					<comments>https://blog.henrypoon.com/blog/2010/06/30/civilization-4-port-forwarding/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Thu, 01 Jul 2010 04:01:27 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computer networking]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Internet protocol suite]]></category>
		<category><![CDATA[Internet protocols]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Network address translation]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/civilization-4-port-forwarding</guid>

					<description><![CDATA[Reference: https://portforward.com/civilization-iv/ For some reason, even after forwarding these, Direct IP Connection still doesn&#8217;t work. Culprit: Port 2302 (TCP/UDP) Forward that then it will work.]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Reference: <a href="https://portforward.com/civilization-iv/" target="_blank" rel="noreferrer noopener">https://portforward.com/civilization-iv/</a></p>



<p class="wp-block-paragraph">For some reason, even after forwarding these, Direct IP Connection still doesn&#8217;t work.</p>



<p class="wp-block-paragraph">Culprit: Port 2302 (TCP/UDP)</p>



<p class="wp-block-paragraph">Forward that then it will work.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2010/06/30/civilization-4-port-forwarding/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">399</post-id>	</item>
		<item>
		<title>Snow Leopard on a Dell Inspiron 1520</title>
		<link>https://blog.henrypoon.com/blog/2010/06/11/snow-leopard-on-a-dell-inspiron-1520/</link>
					<comments>https://blog.henrypoon.com/blog/2010/06/11/snow-leopard-on-a-dell-inspiron-1520/#comments</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Fri, 11 Jun 2010 09:57:32 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[9]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Click]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Darwin]]></category>
		<category><![CDATA[Dell]]></category>
		<category><![CDATA[Dia]]></category>
		<category><![CDATA[Drive]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Event]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Final]]></category>
		<category><![CDATA[Find]]></category>
		<category><![CDATA[Flag]]></category>
		<category><![CDATA[Force]]></category>
		<category><![CDATA[GeForce 8 series]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Graphics hardware]]></category>
		<category><![CDATA[Graphics processing unit]]></category>
		<category><![CDATA[Hackintosh]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[Installation]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[KPA]]></category>
		<category><![CDATA[Lag]]></category>
		<category><![CDATA[Laptop]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[Lie]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Lost]]></category>
		<category><![CDATA[Mac OS X Leopard]]></category>
		<category><![CDATA[Mac OS X Snow Leopard]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[NVIDIA]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[Snow]]></category>
		<category><![CDATA[Snow leopard]]></category>
		<category><![CDATA[STR]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Trac]]></category>
		<category><![CDATA[USB]]></category>
		<category><![CDATA[Video cards]]></category>
		<category><![CDATA[Wireless]]></category>
		<category><![CDATA[X86]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/snow-leopard-on-a-dell-inspiron-1520</guid>

					<description><![CDATA[After a lot of reinstalling and kext testing I&#8217;ve finally managed to get my Inspiron 1520 to run Snow Leopard with the latest updates and things working. &#160;I tried my best to list the sources of info that I found, but I Googled so much useful and not so useful links that I don&#8217;t remember [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>After a lot of reinstalling and kext testing I&#8217;ve finally managed to get my Inspiron 1520 to run Snow Leopard with the latest updates and things working. &nbsp;I tried my best to list the sources of info that I found, but I Googled so much useful and not so useful links that I don&#8217;t remember which are which anymore.</p>
<p>Computer Specs:</p>
<p>Intel Core 2 Duo T5250 Processor<br />
2 GB RAM @ 667 Ghz<br />
Intel GM965 Chipset<br />
nVidia GeForce 8600M GT<br />
Dell Wireless 1390 802.11g</p>
<h1>Installation</h1>
<p>I was lucky enough to only need the Retail Snow Leopard Disc (10A432) and the <a href="http://osx86.sojugarden.com/2010/06/myhack-installer-1-1-released/" target="_blank" rel="noopener noreferrer">myHack Installer 1.0.1</a>. &nbsp;I pretty much followed METHOD 2 in this guide (method 1 didn&#8217;t really work out for me, but it might have had something to do with the disc restoration part of the guide):</p>
<p><a href="http://prasys.co.cc/2009/08/installing-snow-leopard-for-osx86/" target="_blank" rel="noopener noreferrer">http://prasys.co.cc/2009/08/installing-snow-leopard-for-osx86/</a></p>
<p>For the myHack installer, check the box for the kext that says something about PS2 in it. &nbsp;It will enable the laptop touchpad and keyboard. &nbsp;Also, read the description for each kext to see if you need it or not.</p>
<p>When I used method 1 in the guide, I had some trouble with an installation error that said &#8220;Could not verify BaseSystem.pkg&#8221; or something along those lines. &nbsp;That error appeared at about 10-15% installation progress. &nbsp;It went away then I used method 2. &nbsp;I did read somewhere that it may have had to do with the restoration in Disk Utility. &nbsp;Either way, it worked the second time around.</p>
<p>Once SL was installed, I ran the myHack Installer on my drive to get the Chameleon Bootloader on there so I wouldn&#8217;t have to use my USB to boot all the time. &nbsp;Also, be sure not to install GraphicsEnabler as it will prevent your computer from shutting down completely (more on that later).</p>
<h1>Graphics</h1>
<p>Since my laptop uses an nVidia card, there is an issue that prevents the computer from shutting down completely if the &#8220;GraphicsEnabler&#8221; option is used in the myHack Installer. &nbsp;I believe NVInject, NVKush, and NVDarwin all suffer from this same problem. &nbsp;What happens is that when the shut down command is invoked, the computer&#8217;s screen will turn off, the HD will turn off, but the power stays on. &nbsp;When the nVidia graphics kexts aren&#8217;t used, this problem goes away.</p>
<p>I&#8217;ve tried generating an EFI String and loading that with EFI Studio, but it didn&#8217;t do the job. &nbsp;The resolution is still 1024&#215;768 and I have no QE, CI or OpenGL support. &nbsp;What I did later on was install PC EFI to see if that would fix things (I didn&#8217;t really know what I was doing here at this point). &nbsp;That didn&#8217;t really work, but I did later find out that EFI Studio allows me to add boot flags. &nbsp;I added &#8220;Graphics Mode&#8221;=&#8221;1280x800x32&#8221; to the boot flag so now it boots with the proper resolution. &nbsp;It gives the proper resolution, but still no QE/CI or OpenGL. &nbsp;This guide has information on how to test for QE (Quartz Extreme) and CI (Core Image):&nbsp;<a href="http://prasys.co.cc/tag/enable-qeci/" target="_blank" rel="noopener noreferrer">http://prasys.co.cc/tag/enable-qeci/</a></p>
<p>Another thing I tried was to modify my DSDT to get my graphics card working using this link: <a href="http://tonymacx86.blogspot.com/2010/01/advanced-dsdt-fixes-nvidia-graphics.html" target="_blank" rel="noopener noreferrer">http://tonymacx86.blogspot.com/2010/01/advanced-dsdt-fixes-nvidia-graphics.html</a>. &nbsp;I managed to get the card recognized using the DSDT code, but when I got rid of the graphics kexts, and the boot.plist options as specified in the guide, I lost my graphics acceleration. &nbsp;I know my DSDT code is working here still since System Profiler tells me what card I have with the exact same names that I gave in the DSDT. &nbsp;It seems that having graphics acceleration and shutdown/restart working properly just isn&#8217;t meant to be.</p>
<p>The tradeoff:</p>
<p>I either could have proper graphics acceleration and no shutdown, OR I could have shut down and no graphics acceleration. &nbsp;Graphics is the clear winner here, but I still hate having no shutdown. &nbsp;I have not found a fix for this.</p>
<h1>Power Management</h1>
<p>There was a problem with high CPU temperatures with the laptop. &nbsp;I installed the VoodooPowerMini kext located here (<a href="http://forum.voodooprojects.org/index.php/topic,1095.0.html" target="_blank" rel="noopener noreferrer">http://forum.voodooprojects.org/index.php/topic,1095.0.html</a>)</p>
<h1>Audio</h1>
<p>After looking for various kexts, I found that VoodooHDA worked for me. &nbsp;It can be found here (<a href="http://www.kexts.com/view/70-voodoohda_(32--_64-bit,_recompiled_by_prasys).html" target="_blank" rel="noopener noreferrer">http://www.kexts.com/view/70-voodoohda_(32&#8211;_64-bit,_recompiled_by_prasys).html</a>).</p>
<h1>Wireless</h1>
<p>Works after installation.</p>
<h1>USB Ports</h1>
<p>They work since it can recognize my mouse and USB drive.</p>
<h1>Battery Indicator</h1>
<p>I used the VoodooBattery kext located here (<a href="http://forum.voodooprojects.org/index.php/topic,1092.0.html" target="_blank" rel="noopener noreferrer">http://forum.voodooprojects.org/index.php/topic,1092.0.html</a>)</p>
<h1>Card Reader</h1>
<p>I don&#8217;t use this so I didn&#8217;t install the kext for it. &nbsp;It can be found here: <a href="http://www.dailyblogged.com/retail-snow-leopard-installation-guide/" target="_blank" rel="noopener noreferrer">http://www.dailyblogged.com/retail-snow-leopard-installation-guide/</a> or <a href="http://www.dailyblogged.com/wp-content/uploads/2009/09/VoodooSDHC.kext.zip">SD Card Fix</a> (more direct).</p>
<h1>Touchpad</h1>
<p>I had an issue where I couldn&#8217;t tap the touchpad in order for it to &#8220;click&#8221;. &nbsp;I fixed this issue by installing the VoodooPS2Controller kext (check the Trackpad option during the installation) (<a href="http://forum.voodooprojects.org/index.php/topic,235.0.html" target="_blank" rel="noopener noreferrer">http://forum.voodooprojects.org/index.php/topic,235.0.html</a>). &nbsp;Then I installed the preference pane (this allows configuring the Trackpad through System Prefs) here <a href="http://www.dailyblogged.com/retail-snow-leopard-installation-guide/" target="_blank" rel="noopener noreferrer">http://www.dailyblogged.com/retail-snow-leopard-installation-guide/</a> (command -f to find it). &nbsp;I opened System Preferences and pressed the Show All button, and I saw a &#8220;Trackpad&#8221; option, so I opened it and the option was there.</p>
<h1>Webcam</h1>
<p>Works after installation.</p>
<h1>Conclusion</h1>
<p>Everything I listed here works except for video and the card reader. &nbsp;There are other things like Ethernet, but I don&#8217;t really use it.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2010/06/11/snow-leopard-on-a-dell-inspiron-1520/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">378</post-id>	</item>
		<item>
		<title>Snow Leopard on a Virtual Machine</title>
		<link>https://blog.henrypoon.com/blog/2010/06/08/snow-leopard-on-a-virtual-machine/</link>
					<comments>https://blog.henrypoon.com/blog/2010/06/08/snow-leopard-on-a-virtual-machine/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Wed, 09 Jun 2010 03:41:22 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[9]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Darwin]]></category>
		<category><![CDATA[Drive]]></category>
		<category><![CDATA[DVD]]></category>
		<category><![CDATA[Hackintosh]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Leopard]]></category>
		<category><![CDATA[Mac OS X Leopard]]></category>
		<category><![CDATA[Mac OS X Snow Leopard]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[Operating systems]]></category>
		<category><![CDATA[Parallels Desktop for Mac]]></category>
		<category><![CDATA[Snow]]></category>
		<category><![CDATA[Snow leopard]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[VMware Fusion]]></category>
		<category><![CDATA[VMware Workstation]]></category>
		<category><![CDATA[Windows]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/snow-leopard-on-a-virtual-machine</guid>

					<description><![CDATA[Here is an article that teaches you how to install Snow Leopard in VMWare using a Windows host. http://www.ihackintosh.com/2009/12/install-snow-leopard-in-vmware-7-windows-edition/ http://www.online-tech-tips.com/mac-os-x/install-snow-leopard-on-pc/ Note: &#160;the darwin_snow.iso must always be mounted in the VM&#8217;s CD/DVD drive in order for the OS to boot. &#160; Shutting down the VM by pressing shut down in the OS will cause a kernel [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<p>Here is an article that teaches you how to install Snow Leopard in VMWare using a Windows host.</p>
<p><a href="http://www.ihackintosh.com/2009/12/install-snow-leopard-in-vmware-7-windows-edition/">http://www.ihackintosh.com/2009/12/install-snow-leopard-in-vmware-7-windows-edition/</a></p>
<p><a href="http://www.online-tech-tips.com/mac-os-x/install-snow-leopard-on-pc/">http://www.online-tech-tips.com/mac-os-x/install-snow-leopard-on-pc/</a></p>
<p>Note: &nbsp;the darwin_snow.iso must always be mounted in the VM&#8217;s CD/DVD drive in order for the OS to boot. &nbsp; Shutting down the VM by pressing shut down in the OS will cause a kernel panic. &nbsp;The around it is to open the .vmx file associated with the virtual machine and change smc.present from true to false.</p>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2010/06/08/snow-leopard-on-a-virtual-machine/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">370</post-id>	</item>
		<item>
		<title>Linking Windows Live ID with Windows 7 User Account</title>
		<link>https://blog.henrypoon.com/blog/2010/05/08/linking-windows-live-id-with-windows-7-user-account/</link>
					<comments>https://blog.henrypoon.com/blog/2010/05/08/linking-windows-live-id-with-windows-7-user-account/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Sun, 09 May 2010 06:31:34 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Computer architecture]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Digital technology]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Microsoft Windows]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[Windows Live]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/linking-windows-live-id-with-windows-7-user-account</guid>

					<description><![CDATA[I don&#8217;t know why you would do this (yet), but here it is. http://www.blogsdna.com/5067/instantly-link-windows-live-id-with-windows-7-user-account.htm]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">I don&#8217;t know why you would do this (yet), but here it is.</p>



<p class="wp-block-paragraph"><a href="http://www.blogsdna.com/5067/instantly-link-windows-live-id-with-windows-7-user-account.htm" target="_blank" rel="noreferrer noopener">http://www.blogsdna.com/5067/instantly-link-windows-live-id-with-windows-7-user-account.htm</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2010/05/08/linking-windows-live-id-with-windows-7-user-account/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">284</post-id>	</item>
	</channel>
</rss>
