<?xml version="1.0" encoding="UTF-8" standalone="no"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xml:lang="zh-Hans">
	<title type="text">His Story</title>
	<subtitle type="text">Everday is delicious. Taste it and don't waste it.</subtitle>

	<updated>2021-11-27T04:10:20Z</updated>

	<link href="https://wangxiaohu.com/blog" rel="alternate" type="text/html"/>
	<id>https://wangxiaohu.com/blog/?feed=atom</id>
	<link href="https://wangxiaohu.com/blog/?feed=atom" rel="self" type="application/atom+xml"/>

	<generator uri="https://wordpress.org/" version="6.4.8">WordPress</generator>
	<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[Setting up VPC endpoint for Amazon S3]]></title>
		<link href="https://wangxiaohu.com/blog/?p=428" rel="alternate" type="text/html"/>

		<id>https://wangxiaohu.com/blog/?p=428</id>
		<updated>2021-11-27T04:10:20Z</updated>
		<published>2021-11-27T03:08:53Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="Uncategorized"/><category scheme="https://wangxiaohu.com/blog" term="AWS"/>
		<summary type="html"><![CDATA[By default, accessing S3 resources from any instance or &#8230; <a href="https://wangxiaohu.com/blog/?p=428" class="more-link">继续阅读<span class="screen-reader-text">Setting up VPC endpoint for Amazon S3</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=428"><![CDATA[
<p>By default, accessing S3 resources from any instance or Kubernetes pod within a VPC involves outbound traffic via NAT or IGW. Not only this is less efficient, it also incurs a service fee due to the traffic. The cost can be significant if traffic is huge.</p>



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



<p>To keep the traffic within VPC, an S3 accesspoint for the specific S3 resources and a VPC endpoint can be created by following <a href="https://aws.amazon.com/blogs/storage/managing-amazon-s3-access-with-vpc-endpoints-and-s3-access-points/">the general instruction</a>.</p>



<p>After that, double check the policies at two places.</p>



<h5 class="wp-block-heading" id="1.-Policy-for-IAM">1. Policy for IAM</h5>



<p>Go to <strong>AWS Console</strong> → <strong>IAM </strong>→ <strong>User</strong>. It is supposed to be a service account that has following policy attached</p>



<pre class="wp-block-code"><code>{
    "Version": "2012-10-17",
    "Statement": &#91;
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": &#91;
                "s3:ReplicateObject",
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucket",
                "s3:DeleteObject"
            ],
            "Resource": "*"
        }
    ]
}</code></pre>



<pre class="wp-block-verse">As a security best practice, DO NOT grant <code>Allow</code> to all actions, i.e. <code>"Action": ["*"]</code>.</pre>



<h5 class="wp-block-heading" id="2.-Policy-for-the-endpoint">2. Policy for the endpoint</h5>



<p>Go to <strong>AWS Console</strong> → <strong>VPC </strong>→ <strong>Endpoints </strong>→ <strong>the endpoint</strong> → <strong>Policy</strong></p>



<pre class="wp-block-code"><code>{
    "Version": "2012-10-17",
    "Id": "Policy1637977229005",
    "Statement": &#91;
        {
            "Sid": "Stmt1637977226759",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}</code></pre>



<pre class="wp-block-verse">This endpoint policy is less constrained than the policy for user, because want the policy for user to be more specific.</pre>



<p>After all, run <code>traceroute s3.ap-southeast-1.amazonaws.com</code> from any of the instances within the VPC to verify.</p>



<ul><li>Following output shows it is successful</li></ul>



<pre class="wp-block-preformatted">$ traceroute s3.ap-southeast-1.amazonaws.com
traceroute to s3.ap-southeast-1.amazonaws.com (52.219.129.42), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
    ...
28  * * *
29  * * *
30  * * *</pre>



<ul><li>Following output shows it is still going thru NAT/IGW</li></ul>



<pre class="wp-block-preformatted">$ traceroute s3.ap-southeast-1.amazonaws.com
traceroute to s3.ap-southeast-1.amazonaws.com (52.219.40.74), 30 hops max, 60 byte packets
 1  ec2-175-41-128-191.ap-southeast-1.compute.amazonaws.com (175.41.128.191)  42.290 ms ec2-175-41-128-195.ap-southeast-1.compute.amazonaws.com (175.41.128.195)  3.103 ms ec2-18-141-171-23.ap-southeast-1.compute.amazonaws.com (18.141.171.23)  36.088 ms
 2  100.65.32.176 (100.65.32.176)  1.149 ms 100.65.32.160 (100.65.32.160)  1.132 ms 100.65.33.144 (100.65.33.144)  4.671 ms
 3  100.66.16.248 (100.66.16.248)  3.400 ms 100.66.16.26 (100.66.16.26)  8.787 ms 100.66.16.244 (100.66.16.244)  4.695 ms
 4  100.66.19.122 (100.66.19.122)  3.511 ms 100.66.19.204 (100.66.19.204)  17.491 ms 100.66.18.104 (100.66.18.104)  18.193 ms
 5  100.66.3.241 (100.66.3.241)  15.377 ms 100.66.3.137 (100.66.3.137)  154.101 ms 100.66.3.61 (100.66.3.61)  19.897 ms
 6  100.66.0.135 (100.66.0.135)  10.907 ms 100.66.0.165 (100.66.0.165)  9.064 ms 100.66.0.201 (100.66.0.201)  11.826 ms
 7  100.65.2.41 (100.65.2.41)  3.090 ms 100.65.3.41 (100.65.3.41)  2.821 ms 100.65.2.41 (100.65.2.41)  2.648 ms
 8  s3-ap-southeast-1.amazonaws.com (52.219.40.74)  0.518 ms  0.569 ms  0.578 ms</pre>



<p>Follow the <a href="https://aws.amazon.com/premiumsupport/knowledge-center/connect-s3-vpc-endpoint/">troubleshooting steps</a> if anything does not work.</p>



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



<p>Now we have both S3 access point and the VPC endpoint for S3 setup.</p>



<p>To access the S3 resource within VPC, instead of using <code>s3://&lt;bucket name&gt;</code> directly, use</p>



<pre class="wp-block-preformatted"><code>s3://arn:aws:s3:ap-southeast-1:&lt;account number&gt;:accesspoint/&lt;bucket name&gt;</code></pre>



<p>Some 3rd party library built for AWS S3 might not recognize the S3 access point URL and throw exceptions like</p>



<pre class="wp-block-code"><code>Caused by: java.lang.NullPointerException: null uri host.
        at java.util.Objects.requireNonNull(Objects.java:228)
        at org.apache.hadoop.fs.s3native.S3xLoginHelper.buildFSURI(S3xLoginHelper.java:71)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.setUri(S3AFileSystem.java:486)
        at org.apache.hadoop.fs.s3a.S3AFileSystem.initialize(S3AFileSystem.java:246)
        at org.apache.flink.fs.s3.common.AbstractS3FileSystemFactory.create(AbstractS3FileSystemFactory.java:123)
        ... 24 more</code></pre>



<p>In that case, <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html">S3 access point alias</a> could be used. It can be found under <strong>S3 Bucket</strong> → <strong>Access Points</strong>. It looks something like</p>



<p><code>s3://&lt;bucket name>-1ks47nsk5hyxi845kebsen1nyf11caps1b-s3alias</code></p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=428#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=428" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[Clean unused firewall rules using PowerShell]]></title>
		<link href="https://wangxiaohu.com/blog/?p=420" rel="alternate" type="text/html"/>

		<id>https://wangxiaohu.com/blog/?p=420</id>
		<updated>2021-10-14T15:03:03Z</updated>
		<published>2021-10-14T14:58:16Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="Uncategorized"/>
		<summary type="html"><![CDATA[In Windows, firewall rules can be easily cumulated over &#8230; <a href="https://wangxiaohu.com/blog/?p=420" class="more-link">继续阅读<span class="screen-reader-text">Clean unused firewall rules using PowerShell</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=420"><![CDATA[
<p>In Windows, firewall rules can be easily cumulated over time. Every time a new application is launched, the user will be prompted to create a new firewall rule for the app. However, when applications get uninstalled, most of them would not remove the firewall rule it has created.</p>



<p>Once there are more than just a few unused firewall rules, the system becomes less secure due to the exposed protocols and ports. A mocked application at the exact same file path can easily take advantage of existing firewall rules created and make the system vulnerable.</p>



<p>Unused firewall rules can be cleaned up with just 3 lines of PowerShell commands, under elevated command prompt:</p>



<pre class="wp-block-code"><code>$unusedFilters = Get-NetFirewallApplicationFilter | Where-Object {$_.Program -notin ("Any", "System")} | Where-Object {-not (Test-Path (&#91;System.Environment]::ExpandEnvironmentVariables($_.Program)))}

$unusedRules = Get-NetFirewallRule | Where-Object {$_.Name -in $unusedFilters.InstanceId}

$unusedRules | Remove-NetFirewallRule -Verbose</code></pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><a href="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?ssl=1"><img fetchpriority="high" decoding="async" width="660" height="251" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?resize=660%2C251&#038;ssl=1" alt="" class="wp-image-422" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?resize=1024%2C389&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?resize=300%2C114&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?resize=768%2C292&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?resize=1536%2C584&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?w=1575&amp;ssl=1 1575w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2021/10/image.png?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></a><figcaption>PSPrompt customized using <a rel="noreferrer noopener" href="https://ohmyposh.dev/" target="_blank">oh-my-posh</a></figcaption></figure></div>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=420#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=420" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[Running docker on Nexus 5]]></title>
		<link href="https://wangxiaohu.com/blog/?p=395" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=395</id>
		<updated>2020-10-28T00:00:26Z</updated>
		<published>2020-10-28T00:00:26Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="Uncategorized"/><category scheme="https://wangxiaohu.com/blog" term="docker"/><category scheme="https://wangxiaohu.com/blog" term="hammerhead"/><category scheme="https://wangxiaohu.com/blog" term="nexus 5"/><category scheme="https://wangxiaohu.com/blog" term="postmarketos"/>
		<summary type="html"><![CDATA[My Raspberry Pi 3 died. It was used for running Plex se &#8230; <a href="https://wangxiaohu.com/blog/?p=395" class="more-link">继续阅读<span class="screen-reader-text">Running docker on Nexus 5</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=395"><![CDATA[
<p>My Raspberry Pi 3 died. It was used for running Plex server. It was running inside docker before the Pi died. I was looking for replacement. I looked into my basement and I found two <a rel="noreferrer noopener" href="https://wiki.postmarketos.org/wiki/Google_Nexus_5_(lg-hammerhead)" target="_blank">Google_Nexus_5_(lg-hammerhead)</a> phones. Then the story began&#8230;</p>



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



<ul><li>you are fairly familiar with how flashing works, e.g. fastboot stuff.</li><li>you&#8217;ve already running postmarketos on your phone</li><li>you know what docker is</li><li>you know that you are probably gonna remove all the fancy UIs from your phone, and switch to postmarketos-ui-fbkeyboard or some console only mode</li><li>you&#8217;d better have a LAN connection on your phone rather than wifi</li></ul>



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



<p>I can only prove this is working on my phones for now.</p>



<h3 class="wp-block-heading"><strong>1. Edit kernel config</strong></h3>



<p>NOTE: before you make any change to kernel, always backup <code>~/.local/var/pmbootstrap/cache_git/pmaports/main/linux-postmarketos-qcom-msm8974/config-postmarketos-qcom-msm8974.armv7</code></p>



<p>Run</p>



<blockquote class="wp-block-quote"><p><code><em>pmbootstrap kconfig edit postmarketos-qcom-msm8974</em></code></p></blockquote>



<p>where <strong><code>qcom-msm8974</code></strong> is for my Nexus 5. You need to figure out what&#8217;s for your phone.</p>



<p>You have 2 options to learn what to set when configuring the kernel:</p>



<ul><li>follow <a href="https://wiki.gentoo.org/wiki/Docker#Kernel">https://wiki.gentoo.org/wiki/Docker#Kernel</a> (which doesn&#8217;t really apply to kernel 5.9 but I made it)</li><li>run <a href="https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh">https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh</a></li></ul>



<p>You can see the changes I made to my kernel config at&nbsp;<a href="https://gitlab.com/tigerinus/pmaports/-/commit/d4c1ad862f5485fd9a7577e59b95e97da1b988ae">https://gitlab.com/tigerinus/pmaports/-/commit/d4c1ad862f5485fd9a7577e59b95e97da1b988ae</a></p>



<p>BTW &#8211; I&#8217;ve got a Ugreen USB 2.0 network adapter hooked, so I took the chance and selected</p>



<p><strong><code>Device Drivers => Network device support => &lt;*> USB Network Adapters => &lt;*> ASIX AX88xxx Based USB 2.0 Ethernet Adapters</code></strong> </p>



<h3 class="wp-block-heading"><strong>2. Build the kernel</strong></h3>



<blockquote class="wp-block-quote"><p><code><em>pmbootstrap build linux-postmarketos-qcom-msm8974 --force </em></code></p></blockquote>



<p>I had to add <strong><code>--force</code></strong> otherwise it won&#8217;t build.</p>



<p>If everything is successful, you should find something like below</p>



<p><code>~/.local/var/pmbootstrap/packages/edge/armv7/linux-postmarketos-qcom-msm8974-5.9.0_rc4-r0.apk</code></p>



<h3 class="wp-block-heading"><strong>3. Install the kernel</strong></h3>



<p>Get the&nbsp;<strong>linux-postmarketos-qcom-msm8974-5.9.0_rc4-r0.apk</strong>&nbsp;copied onto your phone and do</p>



<blockquote class="wp-block-quote"><p><code><em>sudo apk add -u linux-postmarketos-qcom-msm8974-5.9.0_rc4-r0.apk </em></code></p></blockquote>



<p>Just in case, I also copied <strong><code>/boot/boot.img-postmarketos-qcom-msm8974</code></strong> to local as <strong><code>boot.img</code></strong>, boot to bootloader and did</p>



<blockquote class="wp-block-quote"><p><code><em>fastboot flash boot boot.img </em></code></p></blockquote>



<p>Reboot the phone and run <strong><code>check-config.sh</code></strong> again to see if anything missing. My experience is you don&#8217;t need everything enabled.</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/wiki.postmarketos.org/images/c/c3/Check-config.png?w=660&#038;ssl=1" alt="" data-recalc-dims="1"/></figure></div>



<h3 class="wp-block-heading"><strong>4. Install docker</strong></h3>



<p>Boot to your phone, assuming you have a pretty good internet connection, then do</p>



<blockquote class="wp-block-quote"><p><code><em>sudo apk add docker</em></code></p></blockquote>



<p>Not only this installs docker, but also an important service <strong><code>containerd</code></strong>.</p>



<h3 class="wp-block-heading"><strong>5. Get docker daemon running</strong></h3>



<p>Run</p>



<blockquote class="wp-block-quote"><p><code><em>sudo service docker start </em></code></p></blockquote>



<p>We are not there yet. This first-time boot is for creating files, directories, group it needs. The <code><strong>docker</strong> </code>command won&#8217;t work because of couple things that have to happen at boot time below.</p>



<p>DO NOT make docker to start on boot or you will get &#8220;can&#8217;t load program: function not implemented: unknown.&#8221; error.</p>



<p>BTW &#8211; If you hate doing <strong><code>sudo docker...</code></strong> everytime, you can optionally add yourself to docker group by</p>



<blockquote class="wp-block-quote"><p><code><em>sudo vi /etc/group </em></code></p></blockquote>



<p>Now reboot so at least <code><strong>containerd</strong> </code>service is effective, in terms of automatically mounting <code><strong>cgroup2</strong> </code>to <strong><code>/sys/fs/cgroup</code></strong>.</p>



<blockquote class="wp-block-quote"><p><code><em>sudo reboot </em></code></p></blockquote>



<p>After reboot, do</p>



<blockquote class="wp-block-quote"><p><code><em>sudo service docker start </em></code></p></blockquote>



<p>You should see something like</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/wiki.postmarketos.org/images/7/7e/Sudo_service_docker_start.png?w=660&#038;ssl=1" alt="Sudo service docker start.png" data-recalc-dims="1"/></figure></div>



<p>which you won&#8217;t see if you tried to start docker service before the reboot.</p>



<h3 class="wp-block-heading"><strong>6. Verify things are good</strong></h3>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/wiki.postmarketos.org/images/3/34/Docker_info.png?w=660&#038;ssl=1" alt="Docker info.png" data-recalc-dims="1"/><figcaption>health check</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/wiki.postmarketos.org/images/0/08/Docker_run_hello_world.png?w=660&#038;ssl=1" alt="Docker run hello world.png" data-recalc-dims="1"/><figcaption>hello-world</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://i0.wp.com/wiki.postmarketos.org/images/9/96/Docker_run_fedora.png?w=660&#038;ssl=1" alt="Docker run fedora.png" data-recalc-dims="1"/><figcaption>fedora</figcaption></figure></div>



<h2 class="wp-block-heading">What&#8217;s next?</h2>



<p>It&#8217;d be fun to have kubernetes running on this little device. Not sure if I should go with <a href="https://k3s.io/" target="_blank" rel="noreferrer noopener">k3s </a>or <a href="https://microk8s.io/" data-type="URL" data-id="https://microk8s.io/" target="_blank" rel="noreferrer noopener">microk8s</a>.</p>



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



<ul><li><a href="https://wiki.alpinelinux.org/wiki/Docker">https://wiki.alpinelinux.org/wiki/Docker</a></li></ul>



<ul><li><a href="https://wiki.gentoo.org/wiki/Docker#Kernel">https://wiki.gentoo.org/wiki/Docker#Kernel</a></li></ul>



<ul><li><a href="https://blog.hypriot.com/post/verify-kernel-container-compatibility/">https://blog.hypriot.com/post/verify-kernel-container-compatibility/</a></li></ul>



<p></p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=395#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=395" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[最近 Windows 10 的锁屏壁纸都很赞]]></title>
		<link href="https://wangxiaohu.com/blog/?p=382" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=382</id>
		<updated>2020-02-15T02:37:06Z</updated>
		<published>2020-02-15T02:37:06Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="Uncategorized"/>
		<summary type="html"><![CDATA[顺便分享一下 wsl 下如何找到这些图片的命令： 输出是一堆 cp 命令，需要执行的话把 echo 去掉就行了 &#8230; <a href="https://wangxiaohu.com/blog/?p=382" class="more-link">继续阅读<span class="screen-reader-text">最近 Windows 10 的锁屏壁纸都很赞</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=382"><![CDATA[
<figure class="wp-block-gallery aligncenter columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex"><ul class="blocks-gallery-grid"><li class="blocks-gallery-item"><figure><img decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="388" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=388" class="wp-image-388" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/07e2af9f9a094b9c047e1eb4c864d1c9351bd6ef94c4fceb70d65577fc1d284c.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li><li class="blocks-gallery-item"><figure><img decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="387" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=387" class="wp-image-387" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/080ae1dfd550934f7dfb0c2e2e491387ad32def840024ada429bfc0bb1e44c4e.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="386" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=386" class="wp-image-386" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/98afcc3b87405fa5e099c9d285f266b927256dc8a99d08353965f3690765bb97.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="385" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=385" class="wp-image-385" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/955dab78a2a43b3956fb00111b1849770aaeda6fbd86fcbc5220d11d64221c7e.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="383" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=383" class="wp-image-383" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/f9e76a316616348afd996cf42f6ce101d4ff7ab95750c005283e8bce019bde48.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li><li class="blocks-gallery-item"><figure><img loading="lazy" decoding="async" width="660" height="371" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?resize=660%2C371&#038;ssl=1" alt="" data-id="384" data-full-url="https://wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg" data-link="https://wangxiaohu.com/blog/?attachment_id=384" class="wp-image-384" srcset="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?resize=1536%2C864&amp;ssl=1 1536w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?w=1920&amp;ssl=1 1920w, https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2020/02/bce659c82b95b5c6011d28d2313a204e31aa0129fb37f8f0ae591ddb7f1d26b9.jpg?w=1320&amp;ssl=1 1320w" sizes="(max-width: 660px) 100vw, 660px" data-recalc-dims="1" /></figure></li></ul></figure>



<p>顺便分享一下 wsl 下如何找到这些图片的命令：</p>



<pre class="wp-block-code"><code>$ for asset in `file -i $(wslpath $(cmd.exe /c "&lt;nul set /p=%UserProfile%" 2>/dev/null))/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/* | grep png | awk -F':' '{print $1}'`; do echo cp $asset /tmp$asset.png; done</code></pre>



<p>输出是一堆 cp 命令，需要执行的话把 echo 去掉就行了。</p>



<pre class="wp-block-code"><code>cp /mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/04f9bd3de104a427ca557d53f05747c382a62bc3efb2422a0ba9bbe8aa21e757 /tmp/mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/04f9bd3de104a427ca557d53f05747c382a62bc3efb2422a0ba9bbe8aa21e757.png
cp /mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/1181ec5a0c631705dcaded34f58a171b842ed6783274b4bc7122e66eaa498a67 /tmp/mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/1181ec5a0c631705dcaded34f58a171b842ed6783274b4bc7122e66eaa498a67.png
cp /mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/ffadc5cae56e18df849d64d219b374745eb3f046a01a7ff3316c0ce4eb5d3c64 /tmp/mnt/c/Users/xiaoh/AppData/Local/Packages/Microsoft.Windows.ContentDeliveryManager_cw5n1h2txyewy/LocalState/Assets/ffadc5cae56e18df849d64d219b374745eb3f046a01a7ff3316c0ce4eb5d3c64.png
...</code></pre>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=382#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=382" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[在 k8s 中开一个 shell]]></title>
		<link href="https://wangxiaohu.com/blog/?p=369" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=369</id>
		<updated>2019-02-08T01:54:55Z</updated>
		<published>2019-02-01T03:36:07Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="技巧"/><category scheme="https://wangxiaohu.com/blog" term="docker"/><category scheme="https://wangxiaohu.com/blog" term="kubernetes"/>
		<summary type="html"><![CDATA[经常需要一个远程临时的 shell 做些什么事，比如实验一下某个需要运行一晚上的脚本，用完环境就扔了。在 AW &#8230; <a href="https://wangxiaohu.com/blog/?p=369" class="more-link">继续阅读<span class="screen-reader-text">在 k8s 中开一个 shell</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=369"><![CDATA[
<p>经常需要一个远程临时的 shell 做些什么事，比如实验一下某个需要运行一晚上的脚本，用完环境就扔了。在 AWS 或者 Azure 上开一个新的 VM 总是感觉不够快捷，也不想专门浪费一个 VM 的资源为这个目的留着。</p>



<p>还好我有个 Kubernetes 下创建 pod 的权限，这下就方便多了。</p>



<p>首先创建一个 shell.yaml 来描述一个可以运行 bash shell 的 pod（容器镜像用的是<a href="https://hub.docker.com/_/bash">官方的 bash 镜像</a>）:</p>



<pre class="wp-block-code"><code>apiVersion: v1
kind: Pod
metadata:
  name: shell
  labels:
    purpose: shell
spec:
  containers:
  - name: shell
    image: bash
    command: ["tail"]
    args: ["-f", "/dev/null"]
  restartPolicy: OnFailure</code></pre>



<p>然后执行下面的命令来创建这个 pod：</p>



<pre class="wp-block-code"><code>$ kubectl apply -f shell.yaml
pod/shell created</code></pre>



<p>成功之后，就可以通过下面的命令获得一个远程的 shell 环境了：</p>



<pre class="wp-block-code"><code>$ kubectl exec -it shell -- bash --login
shell:/#</code></pre>



<p style="font-size:0">这个新创建的环境是基于 alpine linux 的，自然什么工具都没有自带。需要什么工具，只要用 <code>apk add</code> 命令安装就好了。我因为工作需要一般都会安装下面这些工具：</p>



<pre class="wp-block-code"><code>apk add git
apk add nodejs-current
apk add npm
apk add python3</code></pre>



<p>如果想从或者向这个 pod/shell 复制文件的话，用下面的命令就好了：</p>



<pre class="wp-block-code"><code>kubectl cp ... ...</code></pre>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=369#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=369" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[又一个开始]]></title>
		<link href="https://wangxiaohu.com/blog/?p=358" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=358</id>
		<updated>2011-01-21T02:32:12Z</updated>
		<published>2011-01-21T02:32:12Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="思绪"/>
		<summary type="html"><![CDATA[人们总是说迈出第一步是最难的。其实不对——最难的是第二步。往往接触一个新事物的时候，人的好奇和兴奋大于紧张和恐 &#8230; <a href="https://wangxiaohu.com/blog/?p=358" class="more-link">继续阅读<span class="screen-reader-text">又一个开始</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=358"><![CDATA[<p>人们总是说迈出第一步是最难的。其实不对——最难的是第二步。往往接触一个新事物的时候，人的好奇和兴奋大于紧张和恐惧。各种名人传记里说第一步难的，都是得瑟，真的。而当第二个机遇摆在面前的时候，却早已习惯了第一步驻足在的地方。习惯了那里的人和物，习惯了各种形色，再也迈不出那双肥腿。《Inception》 里说，当在一个梦里久了，你会忘记当年梦想，然后“困”在那个层次，很难再走出来，直到死亡。现实也是如此。一个人从学校里出来的时候，两手空空。只有怀揣一把子冲劲，从一个结束走向另外一个开始。如果没有想过计划下一个结束和开始，那么一定有一天会突然惊醒，然后“掐指一算，都已是风烛残年<sup>1</sup>”。</p>
<p>今天看新闻，说 Google 换 CEO 了。Eric 在给这个公司贡献了十年之后，回到了二把手。人们早已习惯了 Google 各种创意的鬼点子，结果前进变成了定格，匀速发展成为了静止。当习惯成为了主导，丢失的就是方向。那么一切改变都是必要的，无论好坏。</p>
<p>安居乐业，满于现状，那是退休以后的事。只有不惧怕改变，才不会被时间打败。</p>
<p><sup>1</sup><em><em><em>萧乾</em></em>《枣核》</em></p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=358#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=358" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[三年]]></title>
		<link href="https://wangxiaohu.com/blog/?p=355" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=355</id>
		<updated>2010-01-17T19:19:08Z</updated>
		<published>2010-01-17T19:19:08Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="思绪"/>
		<summary type="html"><![CDATA[在天空中，同是一颗金星，早晨人们叫它启明，夜晚人们叫它长庚。我愿意选择最佳的角度，将生命的长杆伸进茫茫宇宙。不 &#8230; <a href="https://wangxiaohu.com/blog/?p=355" class="more-link">继续阅读<span class="screen-reader-text">三年</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=355"><![CDATA[<p>在天空中，同是一颗金星，早晨人们叫它启明，夜晚人们叫它长庚。我愿意选择最佳的角度，将生命的长杆伸进茫茫宇宙。不管钓上什么，都是我的。把酸苦留在心里，将幸福写在脸上。默默相对的，是那最虔诚的感动。</p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=355#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=355" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[Life is Like a Boat]]></title>
		<link href="https://wangxiaohu.com/blog/?p=354" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=354</id>
		<updated>2009-12-09T07:17:50Z</updated>
		<published>2009-12-09T07:17:50Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="杂乱"/><category scheme="https://wangxiaohu.com/blog" term="Bleach"/>
		<summary type="html"><![CDATA[很久没有听到什么令人感动的歌了。最近看《死神》，突然发现喜欢上了片尾曲。好听的歌应该就是这样，简单的旋律加唯美 &#8230; <a href="https://wangxiaohu.com/blog/?p=354" class="more-link">继续阅读<span class="screen-reader-text">Life is Like a Boat</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=354"><![CDATA[<p>很久没有听到什么令人感动的歌了。最近看《死神》，突然发现喜欢上了片尾曲。好听的歌应该就是这样，简单的旋律加唯美的歌词。</p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8824c5ae-f28e-404a-b619-8ce11bb0f975" class="wlWriterEditableSmartContent">
<div><object width="420" height="257"><param name="movie" value="http://www.dailymotion.com/swf/x21ehj&amp;related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param></object></div>
</div>
</p>
<p>Nobody knows who I really am   <br />I never felt this empty before    <br />And if I ever need someone to come along,    <br />Who&#8217;s gonna comfort me, and keep me strong? </p>
<p>We are all rowing the boat of fate   <br />The waves keep on coming and we can&#8217;t escape    <br />But if we ever get lost on our way    <br />The waves would guide you through another day </p>
<p>Far away, I&#8217;m breathing, as if I were transparent   <br />It would seem I was in the dark, but I was only blindfolded </p>
<p>I give a prayer as I wait for the new day   <br />Shining vividly up to the edge of that sea </p>
<p>Nobody knows who I really am   <br />Maybe they just don&#8217;t give a damn    <br />But if I ever need someone to come along    <br />I know you would follow me, and keep me strong </p>
<p>People&#8217;s hearts change and sneak away from them   <br />The moon in its new cycle leads the boats again </p>
<p>And every time I see your face   <br />The ocean heaves up to my heart    <br />You make me wanna strain at the oars, and soon    <br />I can see the shore </p>
<p>Oh, I can see the shore   <br />When will I see the shore? </p>
<p>I want you to know who I really am   <br />I never thought I&#8217;d feel this way towards you    <br />And if you ever need someone to come along,    <br />I will follow you, and keep you strong </p>
<p>And still the journey continues on quiet days as well   <br />The moon in its new cycle shines on the boats again </p>
<p>I give a prayer as I wait for the new day   <br />Shining vividly up to the edge of that sea</p>
<p>And every time I see your face   <br />The ocean heaves up to my heart    <br />You make me wanna strain at the oars, and soon    <br />I can see the shore </p>
<p>We are rowing the boat of fate, but the waves keep attacking us   <br />But isn&#8217;t that still a wonderful journey? Aren&#8217;t any of them a wonderful journey?</p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=354#comments" rel="replies" thr:count="2" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=354" rel="replies" thr:count="2" type="application/atom+xml"/>
			<thr:total>2</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[This is it&#8230;]]></title>
		<link href="https://wangxiaohu.com/blog/?p=352" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=352</id>
		<updated>2009-10-28T07:16:28Z</updated>
		<published>2009-10-28T07:03:43Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="思绪"/><category scheme="https://wangxiaohu.com/blog" term="Michael Jackson"/>
		<summary type="html"><![CDATA[24 号因为身体微恙，没有参加当天的全球 Thrill The World 的活动。排练了一个月，很可惜。所以 &#8230; <a href="https://wangxiaohu.com/blog/?p=352" class="more-link">继续阅读<span class="screen-reader-text">This is it&#8230;</span></a>]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=352"><![CDATA[<p>24 号因为身体微恙，没有参加当天的全球 Thrill The World 的活动。排练了一个月，很可惜。所以今天把全部的致敬都放在了这部纪录片上。本来是 28 号首映，但是惊喜发现今晚九点就有第一场了。于是安静地呆在办公室里加班，准备到时间准时出发去影院。</p>
<p>多谢小 A 提前帮忙买了电影票，以防人多爆场没有位置。后来才发现这个担心是多余的。虽然观众人数跟其它好莱坞大片不能比，但是还是能看到一些粉丝。电影还没有开始，就四处发 MJ 的 Sticker 贴在身上。影院也贴心地制作了钥匙链当作首映的礼物。</p>
<p>本来一开始那些粉丝看上去还要准备映后唱歌跳舞一番以表达敬意，但是近两个小时的放映之后，看到的只有沉默。对于我这个 15 年的老麦粉来说，绝大部分排练都似曾相识。感觉看到的不是新鲜的抢夺眼球的舞台特效，反而有一种感觉，就是他曾经回来过。</p>
<p>一个人活了 50 岁，却一丝不苟地从事了一个职业 45 年。片中有一个演唱会合作的歌手评价说，没有任何一个瑕疵可以逃过 MJ 的眼睛和耳朵。任何一错误都要更正从新来过。一切都是为了 Fans。熟悉的舞蹈和旋律，让人感觉时间从来都没有前进过。然后突然地，他就走了。喜欢麦当娜在之前MTV ‘09 的颁奖开幕上说的：<strong>Michael Jackson 前无古人后无来者，他当之无愧的 King of Pop。</strong></p>
<p><img loading="lazy" decoding="async" style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2009/10/image.png?resize=398%2C643&#038;ssl=1" width="398" height="643" data-recalc-dims="1" /></p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=352#comments" rel="replies" thr:count="0" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=352" rel="replies" thr:count="0" type="application/atom+xml"/>
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>wangxiaohu</name>
							<uri>http://wangxiaohu.com/blog</uri>
						</author>

		<title type="html"><![CDATA[生日快乐]]></title>
		<link href="https://wangxiaohu.com/blog/?p=350" rel="alternate" type="text/html"/>

		<id>http://wangxiaohu.com/blog/?p=350</id>
		<updated>2009-08-29T05:27:35Z</updated>
		<published>2009-08-29T05:27:35Z</published>
		<category scheme="https://wangxiaohu.com/blog" term="杂乱"/><category scheme="https://wangxiaohu.com/blog" term="Michael Jackson"/>
		<summary type="html"><![CDATA[老子曰：“死而不亡者寿”。今天在谷歌看到的标题图片：]]></summary>

					<content type="html" xml:base="https://wangxiaohu.com/blog/?p=350"><![CDATA[<p>老子曰：“死而不亡者寿”。今天在谷歌看到的标题图片：</p>
<p><img loading="lazy" decoding="async" style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image" src="https://i0.wp.com/wangxiaohu.com/blog/wp-content/uploads/2009/08/image1.png?resize=276%2C110&#038;ssl=1" width="276" height="110" data-recalc-dims="1" /></p>
]]></content>
		
					<link href="https://wangxiaohu.com/blog/?p=350#comments" rel="replies" thr:count="1" type="text/html"/>
			<link href="https://wangxiaohu.com/blog/?feed=atom&amp;p=350" rel="replies" thr:count="1" type="application/atom+xml"/>
			<thr:total>1</thr:total>
			</entry>
	</feed>