<?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>Bash &#8211; Henry Poon&#039;s Blog</title>
	<atom:link href="https://blog.henrypoon.com/blog/tag/bash/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.henrypoon.com</link>
	<description></description>
	<lastBuildDate>Mon, 03 Oct 2022 03:25:59 +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>Installing Seafile with Docker and Apache 2</title>
		<link>https://blog.henrypoon.com/blog/2019/06/12/installing-seafile-with-docker-and-apache-2/</link>
					<comments>https://blog.henrypoon.com/blog/2019/06/12/installing-seafile-with-docker-and-apache-2/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Wed, 12 Jun 2019 07:12:42 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[9]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache 2]]></category>
		<category><![CDATA[Apache HTTP Server]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[cloud storage]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Dia]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[DROPBOX]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Email]]></category>
		<category><![CDATA[File sharing]]></category>
		<category><![CDATA[Free software]]></category>
		<category><![CDATA[Gmail]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Gran]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IOS]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Lie]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matt]]></category>
		<category><![CDATA[Nap]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Opera]]></category>
		<category><![CDATA[OS-level virtualisation]]></category>
		<category><![CDATA[Page]]></category>
		<category><![CDATA[Password]]></category>
		<category><![CDATA[PATH]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Reference]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[seafile]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[System software]]></category>
		<category><![CDATA[Systemd]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[USR]]></category>
		<category><![CDATA[ypres]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">https://blog.henrypoon.com/?p=3509</guid>

					<description><![CDATA[Seafile is an open source file sharing software that allows its users to setup their own cloud storage at home. Think Dropbox, but self-hosted. This post is about deploying an instance of Seafile using Docker on a non-standard port (i.e. not 80 and 443). The reason to deploy the app on a non-standard port is [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><a rel="noreferrer noopener" aria-label="Seafile (opens in a new tab)" href="https://www.seafile.com" target="_blank">Seafile</a> is an open source file sharing software that allows its users to setup their own cloud storage at home.  Think Dropbox, but self-hosted.</p>



<p class="wp-block-paragraph">This post is about deploying an instance of Seafile using Docker on a non-standard port (i.e. not 80 and 443).  The reason to deploy the app on a non-standard port is usually because there is already another webserver running on that port (in my case Apache 2).  In such scenarios, it is necessary to set up a reverse proxy so the Seafile port can be exposed by Apache on ports 80/443.  Under typical circumstances, deploying Seafile on a standard port would mean that the app would host itself without the need for Apache 2 at all.  This post also assumes Ubuntu 16.04 as the operating system, but in theory should apply to other Linux OS&#8217;s.</p>



<p class="has-text-align-left wp-block-paragraph">The process can be split into multiple parts:</p>



<ol class="wp-block-list"><li>Setup Docker</li><li>Deploy Seafile</li><li>Configure Apache 2</li><li>Setup systemd</li><li>Setup e-mail (optional)</li><li>Backing up the image</li><li>Troubleshooting</li></ol>



<h2 class="wp-block-heading">Setup Docker</h2>



<p class="wp-block-paragraph">This guide won&#8217;t go into depth on how to setup Docker, but rather the setup guide and more information about what Docker is can be found here: <a rel="noreferrer noopener" aria-label="https://docs.docker.com/get-started/ (opens in a new tab)" href="https://docs.docker.com/get-started/" target="_blank">https://docs.docker.com/get-started/</a></p>



<h2 class="wp-block-heading">Deploy Seafile</h2>



<p class="wp-block-paragraph">The key page in the Seafile documentation for deploying Seafile within Docker can be found here: <a href="https://github.com/haiwen/seafile-docker" target="_blank" rel="noreferrer noopener">https://github.com/haiwen/seafile-docker</a>.  The command I used is as follows:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker run -d --name seafile \
  -e SEAFILE_SERVER_HOSTNAME=seafile.example.com \
  -e SEAFILE_ADMIN_EMAIL=me@example.com \
  -e SEAFILE_ADMIN_PASSWORD=a_very_secret_password \
  -v /opt/seafile-data:/shared \
  -p 8000:80 \
  seafileltd/seafile:latest</code></pre>



<p class="wp-block-paragraph">I recommend setting up Seafile with an actual secret password because it&#8217;s not easy to change once it&#8217;s set up.</p>



<p class="wp-block-paragraph">Note that the port argument shows 8000:80.  It means that Docker will use the host port 8000 and the container will use port 80 &#8211; meaning that using Docker will interpret requests from my host OS on port 8000 as requests on port 80 in the container.  8000 was used on my setup because port 80 was already used. </p>



<p class="wp-block-paragraph">Once the command is executed, the necessary files will be downloaded and the container will start and will be accessible on port 8000.</p>



<p class="wp-block-paragraph">There is also an option to setup Seafile with an SSL cert from <a rel="noreferrer noopener" aria-label="Let's Encrypt (opens in a new tab)" href="https://letsencrypt.org/" target="_blank">Let&#8217;s Encrypt</a>, but I didn&#8217;t do this because I already had a cert that I wanted to reuse.</p>



<p class="wp-block-paragraph">Once the server is up, navigate to <a href="#">https://seafile.example.com/sys/settings/</a> and change SERVICE_URL and FILE_SERVER_URL to match your domain name.</p>



<h2 class="wp-block-heading">Configure Apache 2</h2>



<p class="wp-block-paragraph">Adding a reverse proxy on Apache 2 will allow Apache 2 to route requests to port 8000, which will go to port 80 in the container.  The main reference for this section is this: <a href="https://manual.seafile.com/deploy/deploy_with_apache/" target="_blank" rel="noreferrer noopener">https://manual.seafile.com/deploy/deploy_with_apache/</a>.  This is done by adding a new site to Apache 2.  The following configuration assumes that a LetsEncrypt SSL certificate is used.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">cd /etc/apache2/sites-available
sudo nano seafile.conf</code></pre>



<pre class="wp-block-code"><code lang="apacheconf" class="language-apacheconf">&lt;IfModule mod_ssl.c&gt;
&lt;VirtualHost *:443&gt;
    ServerName seafile.example.com
    ServerAdmin me@example.com

    RewriteEngine On

    # ModSecurity does not process requests.  There is a hard limit of 1 GB
    # with ModSecurity.
    SecRuleEngine Off

    # Whitelist internal IPs for mod_evasive
    DOSWhitelist 192.168.1.*

    &lt;Location /media&gt;
        Require all granted
    &lt;/Location&gt;

    # Stuff for seafile server
    ProxyPass /seafhttp http://127.0.0.1:8082
    ProxyPassReverse /seafhttp http://127.0.0.1:8082
    RewriteRule ^/seafhttp - [QSA,L]

    # Stuff for seahub
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8000/
    ProxyPassReverse / http://127.0.0.1:8000/

    ErrorLog ${APACHE_LOG_DIR}/seafile_error.log
    CustomLog ${APACHE_LOG_DIR}/seafile_access.log combined

    Include /etc/letsencrypt/options-ssl-apache.conf

    SSLCertificateFile /path/to/cert/file.pem
    SSLCertificateKeyFile /path/to/cert/key/file.pem
&lt;/VirtualHost&gt;
&lt;/IfModule&gt;
</code></pre>



<p class="wp-block-paragraph">I&#8217;ve added my local domain to the whitelist so that mod_evasive doesn&#8217;t think my local host is a threat.</p>



<p class="wp-block-paragraph">There are two sets of ProxyPass and ProxyPassReverse lines.  The reason for this is that Seafile is split up into Seahub and Seafile, where one uses port 8082 (by default), while the other uses 8000.  These two lines are essentially what allows Apache to read requests from port 443 and pass them on to the container.</p>



<p class="wp-block-paragraph">Once the file is saved, execute the following</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo a2ensite seafile.conf
sudo service apache2 reload</code></pre>



<p class="wp-block-paragraph">Navigating to the site at the Apache 2 defined port should now load Seafile without having to go to port 8000.</p>



<h2 class="wp-block-heading">Setup systemd</h2>



<p class="wp-block-paragraph">systemd allows the Docker container to be started up on boot, and be controlled like this:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo service seafile start/stop/restart</code></pre>



<p class="wp-block-paragraph">The configuration is as follows:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo nano /etc/systemd/system/seafile.service</code></pre>



<pre class="wp-block-code"><code lang="properties" class="language-properties">[Unit]
Description=Seafile Server
After=network.target mysql.service

[Service]
Type=oneshot
ExecStart=/usr/bin/docker container start seafile
ExecStop=/usr/bin/docker container stop seafile
ExecReload=/usr/bin/docker container restart seafile
RemainAfterExit=yes
User=root
Group=root

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



<p class="wp-block-paragraph">Once the configuration is saved, shut off the existing running instance of Seafile and then let systemd start it up for you.</p>



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



<p class="wp-block-paragraph">At this point, Seafile should start automatically on boot, with Apache 2 doing a reverse proxy to the true Seafile port.</p>



<h2 class="wp-block-heading">Setup e-mail (optional)</h2>



<p class="wp-block-paragraph">Optionally, Seafile can be configured to send e-mails.  The reference is here: <a href="https://manual.seafile.com/config/sending_email/" target="_blank" rel="noreferrer noopener">https://manual.seafile.com/config/sending_email/</a>.  The config file should be under:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">/opt/seafile-data/seafile/conf/seahub_settings.py</code></pre>



<p class="wp-block-paragraph">I happen to be using Gmail SMTP, so at the end of the file I&#8217;ve added</p>



<pre class="wp-block-code"><code lang="properties" class="language-properties">EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'me@example.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
SERVER_EMAIL = EMAIL_HOST_USER</code></pre>



<h2 class="wp-block-heading">Backing up the image</h2>



<p class="wp-block-paragraph">After setting everything up, you&#8217;ll probably want to backup the Docker image.  First, print out the list of running containers</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker ps</code></pre>



<p class="wp-block-paragraph">Then take a snapshot of the current running state:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">docker commit -p &lt;container ID&gt; &lt;whatever you want to call this snapshot&gt;</code></pre>



<p class="wp-block-paragraph">Running this command lists all the images and should show this newly saved image:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker images</code></pre>



<p class="wp-block-paragraph">I don&#8217;t have a private docker repository, so I saved the image to the disk and backed up the file by doing the below.  Just make sure to actually move the image to an actual backup location.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker save -o &lt;whatever path you want&gt;/&lt;filename&gt;.tar &lt;the name used earlier&gt;</code></pre>



<p class="wp-block-paragraph">The image should be backed up now.  To restore the image, it&#8217;s a matter of running this:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker load -i &lt;path to the backup file&gt;</code></pre>



<p class="wp-block-paragraph">Listing the images as above should show that the image was successfully loaded.  Running this starts it back up again.</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker run &lt;container name&gt;</code></pre>



<h2 class="wp-block-heading">Troubleshooting</h2>



<p class="wp-block-paragraph">Seafile logs can be helpful if it doesn&#8217;t start up correctly.  These can be found at:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">/opt/seafile-data/logs/seafile</code></pre>



<p class="wp-block-paragraph">There may be a need to ssh into the Docker container.  The command for that is:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">sudo docker exec -it seafile /bin/bash</code></pre>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2019/06/12/installing-seafile-with-docker-and-apache-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3509</post-id>	</item>
		<item>
		<title>Running Selenium Webdriver on Bash for Windows</title>
		<link>https://blog.henrypoon.com/blog/2017/06/18/running-selenium-webdriver-on-bash-for-windows/</link>
					<comments>https://blog.henrypoon.com/blog/2017/06/18/running-selenium-webdriver-on-bash-for-windows/#comments</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Sun, 18 Jun 2017 20:02:23 +0000</pubDate>
				<category><![CDATA[computer stuff]]></category>
		<category><![CDATA[engineering]]></category>
		<category><![CDATA[APT]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Drive]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Free software]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Graphical user interface testing]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[ise]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[lamb]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[Port]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Run]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[Sleep]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[USR]]></category>
		<category><![CDATA[Variable]]></category>
		<category><![CDATA[Vol]]></category>
		<category><![CDATA[Web browsers]]></category>
		<category><![CDATA[Web development software]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Xming]]></category>
		<guid isPermaLink="false">https://blog.henrypoon.com/?p=2711</guid>

					<description><![CDATA[NOTE: This article is for WSL1, for WSL2, see this post Bash for Windows has been working pretty great for me until I needed to run Selenium Webdriver on it. I quickly learned that it wouldn&#8217;t work just work right out of the box, and the set up for it is quite convoluted. You will [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">NOTE: This article is for WSL1, for WSL2, see <a href="https://blog.henrypoon.com/blog/2020/09/27/running-selenium-webdriver-on-wsl2/" target="_blank" rel="noreferrer noopener">this post</a></p>



<p class="wp-block-paragraph">Bash for Windows has been working pretty great for me until I needed to run Selenium Webdriver on it. I quickly learned that it wouldn&#8217;t work just work right out of the box, and the set up for it is quite convoluted.</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">Bash for Windows</a></li><li><a rel="noreferrer noopener" href="https://sourceforge.net/projects/xming/" target="_blank">Xming</a> &#8211; This will actually allow the Window to appear on the screen</li><li><a rel="noreferrer noopener" href="https://github.com/mozilla/geckodriver/releases" target="_blank">geckodriver</a> &#8211; Selenium now needs this to run Firefox</li></ul>



<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-get install firefox</code></pre>



<p class="wp-block-paragraph">Export DISPLAY variable in ~/.bashrc. Just add this to the ~/.bashrc:</p>



<pre class="wp-block-code"><code lang="bash" class="language-bash">export DISPLAY=:0</code></pre>



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



<p class="wp-block-paragraph">Just download it from the link above and run it.</p>



<h2 class="wp-block-heading">Download geckodriver</h2>



<p class="wp-block-paragraph">Download geckodriver from the link above and put in the /usr/bin/ folder in Bash for Windows.</p>



<h2 class="wp-block-heading">Running Selenium</h2>



<p class="wp-block-paragraph">Here is a piece of sample Python code I used to setup the web browser. It will setup the browser, open Google, sit there for 10 seconds and then quit.&nbsp; Make sure to have Xming running otherwise the browser isn&#8217;t going to start.</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/2017/06/18/running-selenium-webdriver-on-bash-for-windows/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2711</post-id>	</item>
		<item>
		<title>Osaka</title>
		<link>https://blog.henrypoon.com/blog/2014/07/24/osaka/</link>
					<comments>https://blog.henrypoon.com/blog/2014/07/24/osaka/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Fri, 25 Jul 2014 05:43:18 +0000</pubDate>
				<category><![CDATA[asia]]></category>
		<category><![CDATA[Albums]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[beer]]></category>
		<category><![CDATA[Breads]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Castle]]></category>
		<category><![CDATA[COM]]></category>
		<category><![CDATA[Const]]></category>
		<category><![CDATA[Construction]]></category>
		<category><![CDATA[Culture]]></category>
		<category><![CDATA[curry]]></category>
		<category><![CDATA[currywurst]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[daruma]]></category>
		<category><![CDATA[Delicious]]></category>
		<category><![CDATA[dotonbori]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Egg waffle]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[Food and drink]]></category>
		<category><![CDATA[Foods]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[helles]]></category>
		<category><![CDATA[hiroshima]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[ise]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Japan]]></category>
		<category><![CDATA[Japanese cuisine]]></category>
		<category><![CDATA[lederhosen]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Meat]]></category>
		<category><![CDATA[Museum]]></category>
		<category><![CDATA[namba]]></category>
		<category><![CDATA[Natural sciences]]></category>
		<category><![CDATA[Net]]></category>
		<category><![CDATA[nuclear fission]]></category>
		<category><![CDATA[Octopus as food]]></category>
		<category><![CDATA[okonomiyaki]]></category>
		<category><![CDATA[osaka]]></category>
		<category><![CDATA[osaka castle]]></category>
		<category><![CDATA[osaka science museum]]></category>
		<category><![CDATA[Pancakes]]></category>
		<category><![CDATA[Pho]]></category>
		<category><![CDATA[Sauce]]></category>
		<category><![CDATA[shinsaibashi]]></category>
		<category><![CDATA[Shopping]]></category>
		<category><![CDATA[skewers]]></category>
		<category><![CDATA[sora]]></category>
		<category><![CDATA[STR]]></category>
		<category><![CDATA[Street food]]></category>
		<category><![CDATA[Struct]]></category>
		<category><![CDATA[takoyaki]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Vancouver]]></category>
		<category><![CDATA[Vol]]></category>
		<category><![CDATA[yakiniku]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/osaka</guid>

					<description><![CDATA[In Osaka, we began by visiting the famous shopping and food areas like Shinsaibashi, Dotonbori, and Namba. I wasn&#8217;t really there to shop so we mostly walked through the shopping streets. I&#8217;m also told that at night it is not very enjoyable walking through this area alone as there are many shady characters trying to [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">In Osaka, we began by visiting the famous shopping and food areas like Shinsaibashi, Dotonbori, and Namba. I wasn&#8217;t really there to shop so we mostly walked through the shopping streets. I&#8217;m also told that at night it is not very enjoyable walking through this area alone as there are many shady characters trying to get &#8220;business&#8221;.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipNm59dxE42evCScPM36pBHJDN0LIS6CzzxBnHzC?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh3.googleusercontent.com/EC0R5Jig9NjXSSYVxTTMNPUZoE_bVuhRQ0VjlXl49HjF=w1358-h684-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">The best food we ate in Osaka was definitely Yakiniku at a place called Sora (空), which means &#8220;sky&#8221;. Pieces of pre-marinated meats are cooked on the grill, and everything was delicious.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipO1jNej262eOzTzF_Qk6ixhusC-Cc7b7FMPfOQK?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh4.googleusercontent.com/8vAtqZJ1svfSqNCiw11soi3ohTVaPdCgZmG6h--OQUD4=w1357-h605-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">Even though we were not in Hiroshima, we got to eat Okonomiyaki again. This time, there was a grill at our table and a server at the restaurant cooked it for us while we watched.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipPq4simOx6valBcp_SzVUVunSqwOkjWZFcITQgx?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/lh4.googleusercontent.com/-y5Fq9MNddlo/U7bLuB4EqII/AAAAAAAAXyA/_Tti_X-h7ok/w1358-h564-no/IMG_0385.JPG?w=1280&#038;ssl=1" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">Osaka is also famous for deep fried skewers using different foods like chicken, squid, and veggies. The skewers are served with a special sauce and according to the local culture, double-dipping is highly frowned upon. We at this at a famous Japanese skewer restaurant called Daruma (だるま) with some friends in Osaka. My personal favourite was the kind with intestines.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipNPxd3cIPlQqTmUataB_3L0Goso1HFwvEqzluR5?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh3.googleusercontent.com/o4rNlmHEqhGCFaFOB9ziDmtBodgqpv-Yg-Jr95uWUXQF=w1357-h625-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">Osaka Castle is another well known landmark in the city. Since the many wars that the castle has been involved in since its construction in the 16th century, the castle has now been restored and the inside has been converted into a museum with a rooftop observation deck.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipOk-tHXaRSwNpTlxWr-IvDg7LL3CnFiPaE_hzWz?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh5.googleusercontent.com/Dx2u_AQdZyxk0NtRxQEKNPCkGI3_jLHkA2jbFnXXOG8G=w1358-h764-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">We also visited the Osaka Science Museum. It was full of interactive exhibits that taught various concepts in the natural sciences, like magnetism, sound, air drag, and chemical reactions. The best exhibit was definitely the one on nuclear fission.</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="Osaka Science Museum nuclear fission demo" width="1280" height="720" src="https://www.youtube.com/embed/WobOYBaRiG8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">Takoyaki, another one of Osaka&#8217;s local delicacies, was also something we had to try. The ball is made of a batter and inside it, there are bits of octopus meat, and the entire thing is cooked in a special Takoyaki grill. After it is cooked, Takoyaki sauce and mayonnaise is added. It is interesting to eat since the outer shell is quite soft, but the octopus is not. The sauce also adds some sweetness to the flavour.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipNs0l7VO1vcjVtEi0qrZwcQEJVUVBhr_-13D6g1?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh4.googleusercontent.com/siwmfsvUiA9k5QtR4_iSLU8lWX9TVxmNIu43kS21Ef77=w1357-h629-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">While I was no stranger to Takoyaki since I have had it previously, we got to try a kind that used egg for the outer shell rather than the batter. It was definitely new and special, but I have to say the regular kind was way better.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipPHLMElGeRFHIWd7wr1Sm_EprGK9FBT_NL1BcvS?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh4.googleusercontent.com/5vPkIXIjJEXvzXLuYBKN7shvOBPvYZr9L819D4GLnzOH=w1358-h612-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">We also stumbled onto a restaurant called the &#8220;International Beer Museum&#8221; that had different beers from around the world on tap. It had been a long time since I had a Helles, so that&#8217;s what I got. I also realized that I haven&#8217;t been posting much about Japanese beer and the reason is that it is quite easy to get the same name brands in Vancouver (with the exception of Suntory Premium Malt&#8217;s) and they taste the same too!</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipO002MQiWAs2_o0lqW_4P9Z68oZ9-F3TH2LIKsV?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh5.googleusercontent.com/TDq_iBbZLQRM3WA6bGPdc-5qXNiWn-KZmrTIFVL7GcW0=w1358-h764-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">I also didn&#8217;t think I&#8217;d be able to eat Currywurst in Japan either. Needed way more sauce though, but I understand that kind of sauce is probably hard to come by in Japan.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipP6CMS3THHZerSIpaJpLepNs417CRDr-hIToF9Z?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh6.googleusercontent.com/-GYiFCrTGdB2qFsCAC6PQg81ZJtkNE2LOobggXwKQWG6=w1358-h654-no" alt=""/></a></figure>
</div>


<p class="wp-block-paragraph">And I also didn&#8217;t think I&#8217;d see an Asian person wearing Lederhosen either.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg/photo/AF1QipOwJpbV1LPFpT2e4MXH94yrlIZE7kF487TqiXdo?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/lh6.googleusercontent.com/-satAUNYK3iM/U83of1EOTuI/AAAAAAAAXz4/C0HfJWkEQ9E/w312-h495-no/IMG-20140627-WA0000.jpg?w=1280&#038;ssl=1" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">Links to photo albums:</p>



<ul class="wp-block-list"><li><a href="https://photos.google.com/share/AF1QipP4raHe_voGiKBo1sBIRvnksIS1tw8hEOfqgyuEL_F5es39KPs7jed8Y9CCN_eSSg?key=RXlxYXhtU3Fob2YybDBDNHJDM2I3RWJQcFlEeGRR" target="_blank" rel="noreferrer noopener">Osaka</a></li><li><a href="https://photos.google.com/share/AF1QipN260sHSI7wanGZKi6R7FqOHntjg1MnjW4AU1aPuCaotcBLGkgzpo4O23Pb2aqkbg?key=c290cFhZYlRfSER6eVREdHhjdTc1dTZFdWpvbXVR" target="_blank" rel="noreferrer noopener">Osaka Science Museum</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2014/07/24/osaka/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1887</post-id>	</item>
		<item>
		<title>Food in Tokyo</title>
		<link>https://blog.henrypoon.com/blog/2014/07/13/food-in-tokyo/</link>
					<comments>https://blog.henrypoon.com/blog/2014/07/13/food-in-tokyo/#respond</comments>
		
		<dc:creator><![CDATA[hp]]></dc:creator>
		<pubDate>Mon, 14 Jul 2014 04:06:38 +0000</pubDate>
				<category><![CDATA[asia]]></category>
		<category><![CDATA[akihabara]]></category>
		<category><![CDATA[Asian cuisine]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[bluefin tuna]]></category>
		<category><![CDATA[Canada]]></category>
		<category><![CDATA[Chan]]></category>
		<category><![CDATA[clams]]></category>
		<category><![CDATA[Cuisine]]></category>
		<category><![CDATA[D]]></category>
		<category><![CDATA[daiwa]]></category>
		<category><![CDATA[Delicious]]></category>
		<category><![CDATA[EAR]]></category>
		<category><![CDATA[Fast food]]></category>
		<category><![CDATA[fish]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[Food and drink]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[IME]]></category>
		<category><![CDATA[It]]></category>
		<category><![CDATA[Japan]]></category>
		<category><![CDATA[Japanese cuisine]]></category>
		<category><![CDATA[Japanese food]]></category>
		<category><![CDATA[Japanese regional cuisine]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Mind]]></category>
		<category><![CDATA[National dishes]]></category>
		<category><![CDATA[Noodle]]></category>
		<category><![CDATA[Noodle soup]]></category>
		<category><![CDATA[Pho]]></category>
		<category><![CDATA[ramen]]></category>
		<category><![CDATA[rice]]></category>
		<category><![CDATA[sashimi]]></category>
		<category><![CDATA[sea urchin]]></category>
		<category><![CDATA[seafood]]></category>
		<category><![CDATA[soup]]></category>
		<category><![CDATA[sushi]]></category>
		<category><![CDATA[teishoku]]></category>
		<category><![CDATA[Thou]]></category>
		<category><![CDATA[Time]]></category>
		<category><![CDATA[Tokyo]]></category>
		<category><![CDATA[tsukiji]]></category>
		<category><![CDATA[Tsukiji Fish Market]]></category>
		<category><![CDATA[tuna]]></category>
		<category><![CDATA[Z]]></category>
		<guid isPermaLink="false">http://henrypoon.mooo.com/blog/food-in-tokyo</guid>

					<description><![CDATA[Naturally, food was the first thing that came to mind first when I thought of Tokyo. In this post I&#8217;ll try to summarize the different food I got the chance to eat while I was here. The best sushi I&#8217;ve ever had was at the Tsukiji Fish Market. The place was called Daiwa (大和) and [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Naturally, food was the first thing that came to mind first when I thought of Tokyo. In this post I&#8217;ll try to summarize the different food I got the chance to eat while I was here.</p>



<p class="wp-block-paragraph">The best sushi I&#8217;ve ever had was at the Tsukiji Fish Market. The place was called Daiwa (大和) and there is always a line up to get in. In Canada, we are used to eating a lot of raw salmon, but in Japan, it is all about tuna &#8211; especially bluefin tuna. We were also served sea urchin too and I would say that was the only time I&#8217;ve ever had sea urchin that was delicious. (More info <a href="http://www.gourmetfury.com/2012/04/daiwa-sushi-tsukiji-tokyo/" target="_blank" rel="noreferrer noopener">here</a>)</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipP6djjwrEI4OHDixhYpysJOWMlqyj970cJL3s4I?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh3.googleusercontent.com/0CqbtnPeLbzHP2MNOkwrG8z3iE-USvbs5s6eWSgaCLRW=w720-h405-no" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">Sashimi by itself is definitely very delicious too. This sashimi platter was from a restaurant called Uokin (魚金), near Shinbashi Station in Tokyo.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipMuR8VWCruTYl31qwPUr4QaqEDczxb9ilK1WDRi?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh4.googleusercontent.com/qHIC7N9Za2gLxYiLw7cntcSEFAf5cG-ghbVt_CJYXHeA=w1358-h764-no" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">At the same restaurant, we also ate cooked fish head. I&#8217;m sure it doesn&#8217;t look that appetizing to a lot of people, but it definitely tasted very good, and I&#8217;m someone who does not normally eat fish head, but I tried it since our hosts had ordered it. Good thing I tried it too!</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipOqAsTeKtMaCpWsaPSaciVnsaAr883vFxx5tdQD?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/lh6.googleusercontent.com/-Sl7IRxKS-OI/U7a5nDxosPI/AAAAAAAAXhc/hUhhkSpFTak/w1358-h764-no/IMG_0817.JPG?w=1280&#038;ssl=1" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">This is probably a lesser known dish in Japan, but we were served assorted shellfish that were still alive along with a grill to cook them in. I thought that was pretty special. That was from a seafood restaurant chain called 鈴木水産.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipMKZgF6OWERgCIvd7P04gWf4KbFGdNv9kN5jUsI?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh3.googleusercontent.com/vCsTXpZs6RQ1A5pMWj_LPpA_TdRLV1k96HEFSemS7Y6A=w1358-h764-no" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">And of course, there is ramen, a classic Japanese noodle soup dish. My favourite was from a place called Ramen Shokudo Ikinaisshou in Akihabara. Some people even like to mix the soup with rice too, and that&#8217;s really good too.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipOt76O027t7J4lWwU-7D-RcIDD3HBbJ5ASHEXHI?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img data-recalc-dims="1" decoding="async" src="https://i0.wp.com/lh3.googleusercontent.com/-ecNwR_BJ0tc/U7ZIxHXz2YI/AAAAAAAAXgg/1BmofZGnL64/w1358-h764-no/IMG_0178.JPG?w=1280&#038;ssl=1" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">Lastly, here is a type of Japanese food known as a teishoku, or a &#8220;meal set&#8221;. This one, from a chain called Yayoiken (やよい軒), has a bowl of rice, soup, and various side dishes in a tray. This is more of a fast food place though.</p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w/photo/AF1QipPHCLyKyvg70Zkfb2n-K4Ndd-CfT2NSybcBDUVv?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener"><img decoding="async" src="https://lh5.googleusercontent.com/O42PP71vlNOFnfqQEHRzwfmiELzolG2vXqk5yo7nUZcQ=w1358-h764-no" alt=""/></a></figure>
</div>


<p class="has-text-align-center wp-block-paragraph"></p>



<p class="wp-block-paragraph">Link to photos from Tokyo: <a href="https://photos.google.com/share/AF1QipPRxsil_YSbaoJdurZwzrOznS1RNqmKfhpyJ2BpV4oXKvijEhnTeIm8PV6cB17-Vw?key=YUQ1endKdjZ2VWRsUUdWT3REQ29aNVNjWm4wNFd3" target="_blank" rel="noreferrer noopener">here</a></p>



<p class="wp-block-paragraph">Link to photos of just food: <a href="https://photos.google.com/share/AF1QipNh3ZiNzYC_cSGdhGuJSdLd68MlKnHB--fVFW_nK9PFPhSGAdY2_AlLQQcEY-B87w?key=VXJYclBwZG5oZW15c3RpWkZLTEMwWFFHVUlNdGJB" target="_blank" rel="noreferrer noopener">here</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.henrypoon.com/blog/2014/07/13/food-in-tokyo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1871</post-id>	</item>
	</channel>
</rss>
