<?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>WilliamKyle&#039;s Home</title>
	<atom:link href="https://www.williamkyle.com.cn/feed" rel="self" type="application/rss+xml" />
	<link>https://www.williamkyle.com.cn</link>
	<description>不积跬步，无以至千里；不积小流，无以成江海。</description>
	<lastBuildDate>Fri, 08 Apr 2022 14:59:37 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.2</generator>
	<item>
		<title>推荐一个不错的在线学习网站</title>
		<link>https://www.williamkyle.com.cn/archives/273.html</link>
					<comments>https://www.williamkyle.com.cn/archives/273.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Wed, 10 Apr 2013 14:30:10 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=273</guid>

					<description><![CDATA[https://www.coursera.org/，由斯坦福大学教授 Andrew Ng 和 Daphne K &#8230; <a href="https://www.williamkyle.com.cn/archives/273.html" class="more-link">继续阅读<span class="screen-reader-text">推荐一个不错的在线学习网站</span></a>]]></description>
										<content:encoded><![CDATA[
<p>https://www.coursera.org/，由斯坦福大学教授 Andrew Ng 和 Daphne Koller 创建，里面有许多不错的关于计算机科学的课程，很值得学习。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/273.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>依旧长时间不更新 ╮(╯▽╰)╭</title>
		<link>https://www.williamkyle.com.cn/archives/257.html</link>
					<comments>https://www.williamkyle.com.cn/archives/257.html#comments</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Sun, 23 Dec 2012 15:51:55 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=257</guid>

					<description><![CDATA[啊~~~发现还是没怎么更新博客，进后台一看，没事的时候贴的草稿一大堆，发布出去的几乎没有，懒死了 发现自己还是 &#8230; <a href="https://www.williamkyle.com.cn/archives/257.html" class="more-link">继续阅读<span class="screen-reader-text">依旧长时间不更新 ╮(╯▽╰)╭</span></a>]]></description>
										<content:encoded><![CDATA[
<p>啊~~~发现还是没怎么更新博客，进后台一看，没事的时候贴的草稿一大堆，发布出去的几乎没有，懒死了</p>



<p>发现自己还是不怎么喜欢写东西，不喜欢排版，什么时候能做一个把脑子里的的各种印象 memcpy 到电脑的设备呢？那时候就可以很方便的弄东西了。</p>



<p>这个月 7 号，外公去世了，突然一下就走了。我突然发现人年纪大了，身体病痛来了就很容易接近死亡。外公去年还能下地干活，年初突然就身体不好中风了，半身不遂。舅舅在家照顾外公，尽心尽力了，但外公还是去了。</p>



<p>这周五部门年底聚餐，喝了一点酒，我这是很久没喝酒，稍微来一点就不行了。不会说话，不知道怎么给老大敬酒- -、餐桌文化严重缺失啊，作为一个只会动筷子吃东西的吃货，这样太悲催了，以后怎么和老大们搞好关系嘛，哎，这嘴巴确实得练练。几个同事喝的一塌糊涂，都是平时压力太大，都不省人事了，在厕所里守着，看着他们吐得个难受啊。酒这个东西，小饮怡情、大饮伤身，没事还是少喝点。</p>



<p>昨晚上群里冒了个泡，和众撸友撸了好久，好久没玩了，各种坑啊，哎。</p>



<p>明天又要开始上班了，有些地方又要开始坑了，不过就像撸啊撸一样，每个人都有坑的时候，关键只要大家一个团队相互配合、相互帮助，终归是会能克服困难的。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/257.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Long time no update</title>
		<link>https://www.williamkyle.com.cn/archives/229.html</link>
					<comments>https://www.williamkyle.com.cn/archives/229.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Sat, 06 Oct 2012 04:55:05 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=229</guid>

					<description><![CDATA[好久没更新了，最近没少折腾东西，但是一直在折腾，木有写什么日志做一些保留神马的。最近信息没怎么梳理，只是在不停 &#8230; <a href="https://www.williamkyle.com.cn/archives/229.html" class="more-link">继续阅读<span class="screen-reader-text">Long time no update</span></a>]]></description>
										<content:encoded><![CDATA[
<p>好久没更新了，最近没少折腾东西，但是一直在折腾，木有写什么日志做一些保留神马的。最近信息没怎么梳理，只是在不停的尝试一些问题的解决办法，找到了些有用的资料也就是直接把网页快照下来，所以最近笔记软件没少用，像 EverNote、轻笔记、为知笔记等等，笔记软件用起来挺不错的，各有各的长处吧，但是对我来说主要就是存网页快照了。</p>



<p>最近工作的内容主要是搭环境，一个软件让我弄了快三个星期，简直恶心死了，主要是因为系统版本太低，导致需要解决各种依赖，往往是装一个软件需要 N 多依赖，装依赖的程序的时候发现依赖还需要依赖，然后就成了一棵很大的树了。最开始为了省事，拉下来一个源，结果发现系统版本太低，yum、apt-get 神马的都成浮云了，很多东西都不能安装到指定版本，而且系统还不能跨版本升级，强行升级直接不能开机╮(╯▽╰)╭</p>



<p>最后还是申请了一台机器装了个新版本的系统才搭完了这一套程序环境，我觉得老版本的系统得在这个月老老实实的一个个装依赖了，苦逼啊。。。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/229.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>关于 SSH 证书登录的问题</title>
		<link>https://www.williamkyle.com.cn/archives/210.html</link>
					<comments>https://www.williamkyle.com.cn/archives/210.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Tue, 31 Jul 2012 06:15:36 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=210</guid>

					<description><![CDATA[使用 SSH 的证书登录是十分方便的，但是有时候明明设置好了，但是登陆的时候却还是要输入密码，这个主要跟目录的 &#8230; <a href="https://www.williamkyle.com.cn/archives/210.html" class="more-link">继续阅读<span class="screen-reader-text">关于 SSH 证书登录的问题</span></a>]]></description>
										<content:encoded><![CDATA[
<p>使用 SSH 的证书登录是十分方便的，但是有时候明明设置好了，但是登陆的时候却还是要输入密码，这个主要跟目录的权限关系比较大，首先是 root 目录的权限，默认的情况下应该是</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">drwxr-xr-x</code></pre>



<p>然后是.ssh 文件夹，默认权限应该是</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">drwx------</code></pre>



<p>而 <span style="font-family: simsun; font-size: 14px; line-height: 23px; text-align: left; background-color: #ffffff;">authorized_keys</span> 文件，则应该是</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">-rw-------</code></pre>



<p>如果权限设置有问题，很有可能就登陆不进去了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/210.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>关于 Discuz 在反向代理后用户 IP 的获取</title>
		<link>https://www.williamkyle.com.cn/archives/184.html</link>
					<comments>https://www.williamkyle.com.cn/archives/184.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Wed, 23 May 2012 17:42:54 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Discuz]]></category>
		<category><![CDATA[IP]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[反向代理]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=184</guid>

					<description><![CDATA[原本是 Discuz 的一个安全处理，这时候却给我带来了点麻烦。 CG 最近想给实验室弄个 BBS，于是默认选 &#8230; <a href="https://www.williamkyle.com.cn/archives/184.html" class="more-link">继续阅读<span class="screen-reader-text">关于 Discuz 在反向代理后用户 IP 的获取</span></a>]]></description>
										<content:encoded><![CDATA[
<p>原本是 Discuz 的一个安全处理，这时候却给我带来了点麻烦。</p>



<p>CG 最近想给实验室弄个 BBS，于是默认选了 Discuz，主机原来是 Windows 的，装了 Apache + MySQL + PHP，安装 Discuz 的时候还很正常，装完之后 CG 说上不去了。我打开页面，反应了半天还是没出来，于是打算在虚拟机里面装一个 Ubuntu，然后在 Ubuntu 下跑 Discuz。</p>



<p>装虚拟机神马的就不再说了，装完之后，突然想到一个问题，虚拟机的 IP 不能分到一个公网 IP，只能是虚拟网卡的内部 IP，这就意味着只有服务器能访问虚拟机。我知道 Nginx 是有反向代理的，然后上网一搜，发现 Apache 也可以实现反向代理，Apache 还确实很强大啊。于是马上修改 httpd.conf</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyPreserveHost On
ProxyPass /bbs/ http://192.168.77.80/bbs/
ProxyPassReverse /bbs/ http://192.168.77.80/bbs/
ProxyPass /bbs http://192.168.77.80/bbs</code></pre>



<p>检查语法没错，重启 Apache 服务打开网址一看，OK。装上一个 Discuz 测试一下，一切正常。然后看到 IP 我就纠结了，我在论坛上显示的 IP 都是 192.168.77.1，即服务器的 IP，怎么会这样子。这个万一要封 IP，岂不是都不能上了。于是开始郁闷了，在服务器上抓一下包，发现服务器的 Apache 反向代理是会转发连接用户的真实 IP 的，为什么在 Discuz 中不显示呢？开始我还以为是 Discuz 设计的问题，没有怎么仔细去查这个问题。突然，今天同学在实验室上网的时候，显示的登录 IP 是实验室的 IP，我就纳闷了，貌似寝室的 IP 地址 Discuz 不认啊。于是搜一下源代码，发现在 source/class/discuz/discuz_application.php 有如下片段</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="php" class="language-php">private function _get_client_ip() {
	$ip = $_SERVER['REMOTE_ADDR'];
	if (isset($_SERVER['HTTP_CLIENT_IP']) &amp;&amp; preg_match('/^([0-9]{1,3}.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	} elseif(isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND preg_match_all('#d{1,3}.d{1,3}.d{1,3}.d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
		foreach ($matches[0] AS $xip) {
			if (!preg_match('#^(10|172.16|192.168).#', $xip)) {
				$ip = $xip;
				break;
			}
		}
	}
	return $ip;
}
</code></pre>



<p>原来是 Discuz 认为寝室的 IP 段（10.xxx.xxx.xxx）算是伪造的 IP，好吧。把寝室的 IP 段限制删了，马上就正常了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/184.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>wget 是个好东西啊</title>
		<link>https://www.williamkyle.com.cn/archives/178.html</link>
					<comments>https://www.williamkyle.com.cn/archives/178.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Tue, 17 Apr 2012 17:16:07 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=178</guid>

					<description><![CDATA[wget 是一个从网络上自动下载文件的自由工具，支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/ &#8230; <a href="https://www.williamkyle.com.cn/archives/178.html" class="more-link">继续阅读<span class="screen-reader-text">wget 是个好东西啊</span></a>]]></description>
										<content:encoded><![CDATA[
<p>wget 是一个从网络上自动下载文件的自由工具，支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP 协议下载，并可以使用 HTTP 代理。</p>



<p>可以通过它来镜像站点，很多时候在做 Linux 的源或者 Apache 的源的时候，第一次下载整个镜像的时间是很长的，所以可以先用 wget 镜像一个比较快的站，然后稍微整理下，就可以直接用 rsync 进行数据同步了。</p>



<p>wget 的具体使用如下：</p>



<span id="more-178"></span>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">GNU Wget 1.13.4，非交互式的网络文件下载工具。
用法： wget [选项]... [URL]...

长选项所必须的参数在使用短选项时也是必须的。

启动：
  -V,  --version           显示 Wget 的版本信息并退出。
  -h,  --help              打印此帮助。
  -b,  --background        启动后转入后台。
  -e,  --execute=COMMAND   运行一个 “.wgetrc” 风格的命令。

日志和输入文件：
  -o,  --output-file=FILE    将日志信息写入 FILE。
  -a,  --append-output=FILE  将信息添加至 FILE。
  -d,  --debug               打印大量调试信息。
  -q,  --quiet               安静模式 (无信息输出)。
  -v,  --verbose             详尽的输出 (此为默认值)。
  -nv, --no-verbose          关闭详尽输出，但不进入安静模式。
  -i,  --input-file=FILE     下载本地或外部 FILE 中的 URLs。
  -F,  --force-html          把输入文件当成 HTML 文件。
  -B,  --base=URL            解析与 URL 相关的
                             HTML 输入文件 (由 -i -F 选项指定)。
       --config=FILE         Specify config file to use.

下载：
  -t,  --tries=NUMBER            设置重试次数为 NUMBER (0 代表无限制)。
       --retry-connrefused       即使拒绝连接也是重试。
  -O,  --output-document=FILE    将文档写入 FILE。
  -nc, --no-clobber              skip downloads that would download to
                                 existing files (overwriting them).
  -c,  --continue                断点续传下载文件。
       --progress=TYPE           选择进度条类型。
  -N,  --timestamping            只获取比本地文件新的文件。
  --no-use-server-timestamps     不用服务器上的时间戳来设置本地文件。
  -S,  --server-response         打印服务器响应。
       --spider                  不下载任何文件。
  -T,  --timeout=SECONDS         将所有超时设为 SECONDS 秒。
       --dns-timeout=SECS        设置 DNS 查寻超时为 SECS 秒。
       --connect-timeout=SECS    设置连接超时为 SECS 秒。
       --read-timeout=SECS       设置读取超时为 SECS 秒。
  -w,  --wait=SECONDS            等待间隔为 SECONDS 秒。
       --waitretry=SECONDS       在获取文件的重试期间等待 1..SECONDS 秒。
       --random-wait             获取多个文件时，每次随机等待间隔
                                 0.5*WAIT...1.5*WAIT 秒。
       --no-proxy                禁止使用代理。
  -Q,  --quota=NUMBER            设置获取配额为 NUMBER 字节。
       --bind-address=ADDRESS    绑定至本地主机上的 ADDRESS (主机名或是 IP)。
       --limit-rate=RATE         限制下载速率为 RATE。
       --no-dns-cache            关闭 DNS 查寻缓存。
       --restrict-file-names=OS  限定文件名中的字符为 OS 允许的字符。
       --ignore-case             匹配文件/目录时忽略大小写。
  -4,  --inet4-only              仅连接至 IPv4 地址。
  -6,  --inet6-only              仅连接至 IPv6 地址。
       --prefer-family=FAMILY    首先连接至指定协议的地址
                                 FAMILY 为 IPv6，IPv4 或是 none。
       --user=USER               将 ftp 和 http 的用户名均设置为 USER。
       --password=PASS           将 ftp 和 http 的密码均设置为 PASS。
       --ask-password            提示输入密码。
       --no-iri                  关闭 IRI 支持。
       --local-encoding=ENC      IRI (国际化资源标识符) 使用 ENC 作为本地编码。
       --remote-encoding=ENC     使用 ENC 作为默认远程编码。
       --unlink                  remove file before clobber.

目录：
  -nd, --no-directories           不创建目录。
  -x,  --force-directories        强制创建目录。
  -nH, --no-host-directories      不要创建主目录。
       --protocol-directories     在目录中使用协议名称。
  -P,  --directory-prefix=PREFIX  以 PREFIX/... 保存文件
       --cut-dirs=NUMBER          忽略远程目录中 NUMBER 个目录层。

HTTP 选项：
       --http-user=USER        设置 http 用户名为 USER。
       --http-password=PASS    设置 http 密码为 PASS。
       --no-cache              不在服务器上缓存数据。
       --default-page=NAME     改变默认页
                               (默认页通常是 “index.html”)。
  -E,  --adjust-extension      以合适的扩展名保存 HTML/CSS 文档。
       --ignore-length         忽略头部的 ‘Content-Length’ 区域。
       --header=STRING         在头部插入 STRING。
       --max-redirect          每页所允许的最大重定向。
       --proxy-user=USER       使用 USER 作为代理用户名。
       --proxy-password=PASS   使用 PASS 作为代理密码。
       --referer=URL           在 HTTP 请求头包含 ‘Referer: URL’。
       --save-headers          将 HTTP 头保存至文件。
  -U,  --user-agent=AGENT      标识为 AGENT 而不是 Wget/VERSION。
       --no-http-keep-alive    禁用 HTTP keep-alive (永久连接)。
       --no-cookies            不使用 cookies。
       --load-cookies=FILE     会话开始前从 FILE 中载入 cookies。
       --save-cookies=FILE     会话结束后保存 cookies 至 FILE。
       --keep-session-cookies  载入并保存会话 (非永久) cookies。
       --post-data=STRING      使用 POST 方式；把 STRING 作为数据发送。
       --post-file=FILE        使用 POST 方式；发送 FILE 内容。
       --content-disposition   当选中本地文件名时
                               允许 Content-Disposition 头部 (尚在实验)。
       --auth-no-challenge     发送不含服务器询问的首次等待
                               的基本 HTTP 验证信息。

HTTPS (SSL/TLS) 选项：
       --secure-protocol=PR     选择安全协议，可以是 auto、SSLv2、
                                SSLv3 或是 TLSv1 中的一个。
       --no-check-certificate   不要验证服务器的证书。
       --certificate=FILE       客户端证书文件。
       --certificate-type=TYPE  客户端证书类型，PEM 或 DER。
       --private-key=FILE       私钥文件。
       --private-key-type=TYPE  私钥文件类型，PEM 或 DER。
       --ca-certificate=FILE    带有一组 CA 认证的文件。
       --ca-directory=DIR       保存 CA 认证的哈希列表的目录。
       --random-file=FILE       带有生成 SSL PRNG 的随机数据的文件。
       --egd-file=FILE          用于命名带有随机数据的 EGD 套接字的文件。

FTP 选项：
       --ftp-user=USER         设置 ftp 用户名为 USER。
       --ftp-password=PASS     设置 ftp 密码为 PASS。
       --no-remove-listing     不要删除 ‘.listing’ 文件。
       --no-glob               不在 FTP 文件名中使用通配符展开。
       --no-passive-ftp        禁用 “passive” 传输模式。
       --retr-symlinks         递归目录时，获取链接的文件 (而非目录)。

递归下载：
  -r,  --recursive          指定递归下载。
  -l,  --level=NUMBER       最大递归深度 (inf 或 0 代表无限制，即全部下载)。
       --delete-after       下载完成后删除本地文件。
  -k,  --convert-links      让下载得到的 HTML 或 CSS 中的链接指向本地文件。
  -K,  --backup-converted   在转换文件 X 前先将它备份为 X.orig。
  -m,  --mirror             -N -r -l inf --no-remove-listing 的缩写形式。
  -p,  --page-requisites    下载所有用于显示 HTML 页面的图片之类的元素。
       --strict-comments    用严格方式 (SGML) 处理 HTML 注释。

递归接受/拒绝：
  -A,  --accept=LIST               逗号分隔的可接受的扩展名列表。
  -R,  --reject=LIST               逗号分隔的要拒绝的扩展名列表。
  -D,  --domains=LIST              逗号分隔的可接受的域列表。
       --exclude-domains=LIST      逗号分隔的要拒绝的域列表。
       --follow-ftp                跟踪 HTML 文档中的 FTP 链接。
       --follow-tags=LIST          逗号分隔的跟踪的 HTML 标识列表。
       --ignore-tags=LIST          逗号分隔的忽略的 HTML 标识列表。
  -H,  --span-hosts                递归时转向外部主机。
  -L,  --relative                  只跟踪有关系的链接。
  -I,  --include-directories=LIST  允许目录的列表。
  --trust-server-names             use the name specified by the redirection
                                   url last component.
  -X,  --exclude-directories=LIST  排除目录的列表。
  -np, --no-parent                 不追溯至父目录。


</code></pre>



<p>wget 受/etc/wgetrc 文件和~/.wgetrc 这两个文件的管理，由于 wget 遵循 Robot Exclusion Standard（robots.txt）标准, 所以有时候不能镜像站点，这时可以通过参数-e robots=off 或者直接把 robots=off 写进 wgetrc 文件里面了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/178.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>三月上半个月的各种事</title>
		<link>https://www.williamkyle.com.cn/archives/155.html</link>
					<comments>https://www.williamkyle.com.cn/archives/155.html#comments</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Tue, 20 Mar 2012 16:56:46 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=155</guid>

					<description><![CDATA[好久没写东西了，最近很多纠结的事情，各种各样的。 体检 开始是驾校的体检，真是件很蛋疼的事情，我有一定程度的红 &#8230; <a href="https://www.williamkyle.com.cn/archives/155.html" class="more-link">继续阅读<span class="screen-reader-text">三月上半个月的各种事</span></a>]]></description>
										<content:encoded><![CDATA[
<p>好久没写东西了，最近很多纠结的事情，各种各样的。</p>



<h5 class="wp-block-heading"><strong>体检</strong></h5>



<p>开始是驾校的体检，真是件很蛋疼的事情，我有一定程度的红绿色弱，但是不是红绿色盲，然后车管所体检的时候，觉得我辨别颜色的能力有问题，直接认定成色盲了。哎，我承认我是色弱，但是我还没到色盲的程度啊，红绿灯我能看得出啊，最后还得给驾校交钱处理。。。</p>



<p>不过反过来想，我现在到是觉得红绿灯的设计有点歧视色觉障碍人士，非得要用颜色来区分干嘛？为什么不能用形状之类的呢？比如通行亮箭头，禁止通行亮个叉之类的，亮与不亮应该都能分得出吧？让我想起了金工实习的时候，一位老师傅的抱怨，新买的机床运行的开关是个红色的按钮，紧急停止是个绿的，容易出事故，让我们以后在设计东西的时候一定要多多考虑。不管怎么说，现在新的交通灯系统已经逐渐在升级了，哎，什么时候交通灯也能再多多考虑点颜色的问题呢？</p>



<h5 class="wp-block-heading"><strong>山西行</strong></h5>



<p>额，体完检，过几天顺利通过的那一批就参加理论考试了，所以我家妹纸也去了。考完试就拉着我去她家了，坐火车坐了一晚上，虽说买的是卧铺，可我还是半夜被冻醒了，虽说现在火车不用烧火了，但也不至于让人家半夜冻醒吧。</p>



<p>第二天早上醒来就到了，各种山头啊，密密麻麻的，火车途中还经过了各种煤矿相关的企业，什么煤场啊、焦炭厂什么的，以及各种带烟囱的工厂。到站后，她爸爸来接我们了，回去途中各种绕盘山公路，各种拉煤的大卡车。她们家由于整个村子要整体改造被拆了用于建设新的居民区而搬到别人家去了，现在住的地方在一个山头的半山腰上，去了之后才知道，冬天水管冻坏了，喝水还得去山底下的人家去担水。额，反正让我体验了把真正的西北缺水生活。</p>



<p>这几天也去逛了逛山头，“太阳出来我爬山坡，爬到了山顶我想唱歌”，站在山顶我确实想唱歌，“我家住在黄土高坡哦~~~大风从坡上刮过~” 果然是黄土高坡啊~~到处都是黄土，不带什么绿色的，大部分山都是光秃秃的，偶尔还能看到几个窑洞、几户人家，大风一吹就是小型沙尘暴啊。不过到处能看到一个个白色的编织袋，好像是肥料和泥土，貌似适用于种树育苗的。估计她们那改造是把居民都从山上移出来，山上全部种树吧。可见山西还是在做转型，或者也是在为改善居住环境作努力吧。他们那也就是一个资源型的城市，如果煤挖完了，确实也就荒芜了。</p>



<p>回学校的线路是另外一条，途中火车各种钻山洞了，哎，怪不得愚公要移山啊，现代的科技给我们带来了便利，也消耗了大量的资源，有些东西到底值不值呢？确实有待衡量啊。</p>



<h5 class="wp-block-heading"><strong>宿舍厕所改造</strong></h5>



<p>学校的厕所终于开始改造了，我刚来学校就很看不惯学校的奢侈啊，虽说是挨着黄河，但再怎么说也是缺水的地区，水质也很差，煮开的水有股怪味，还有很厚的一层水垢，果断大二的时候结石了，学校的宿舍也太奢侈了，至少我们楼的厕所的小便池一天 24 小时都是漫流的，想关的话，连个阀门都找不到。当时我就有点无语，我家在南方，挨着洞庭湖，每隔几年还发发洪水，但是我从小到大都没见过这种公用场所 24 小时水漫流的地方。</p>



<p>学校终于改造宿舍的排水系统了，把生活废水（主要是洗衣服、洗漱等）回收下用于冲厕所，竟然还是自动感应的。额，前几天刚刚看了一个视频，讲的是以前的机械师设计的开香槟的机器，可以把香槟打开，并且准确的倒到酒杯里，让我感觉以前的设计师是多么的构思巧妙，纯粹的机械装置，没有什么电机，传感器之类的。最近还看了一个电影——&nbsp;<strong>The Invention of Hugo Cabret </strong>，看到以前人们设想的机器人，也都是纯机械的。有时候看看现在，大部分东西都得依赖电，感觉有了各种传感器，就现代化了，就牛叉了似的。但是有时候我感觉，有些地方用这么多电路却是退化了，很多东西原本可以用机械去触发，我们很多能源都浪费在了不必要的地方。我感觉厕所这种地方，可以设计一种类似于那种原始的拉线开关似的设备，在池边加一块踏板，上厕所的过程中站上去，拉下开关，完了的时候离开踏板。我们高中就是这种储水箱似的冲厕所，不过是用手拉的，我觉得厕所开关应该设计成脚踏的比较卫生。什么时候好好构思一下这个设备，说不定还能当成一个发明，呵呵。</p>



<h5 class="wp-block-heading"><strong>琐事</strong></h5>



<p>还有一些妹纸家里的琐事，各种麻烦，最近还没解决掉，暂时也就不多说了，她家兄弟姐妹多了确实是热闹，但是有时候也会有点闹心，不管怎么说呢，我还是觉得一个家里能够有个两个小孩还是不错的，作为独生子女的我感受不到他们的那种情感的。</p>



<p>老妈今年身体不太舒服，这几天刚刚去检查了，开始还被误判为冠心病，弄的我妈各种焦虑。前几天去湘雅检查，说是左前降支心肌桥，医生说是肥胖引起的心血管生长畸形，问题不是很大，但是的注意保养，听到这个结果，我妈又松了口气。哎，我现在倒是觉得我妈心病比身体上的疾病更加厉害啊，心理暗示太强了，文科的老妈伤不起啊，哎~~~</p>



<p>不过不管怎么说，身体健康才是第一的，不管怎么样，都要健康快乐的活着。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/155.html/feed</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Visual C++ 6.0 CDialogBar Create 出错解决方案</title>
		<link>https://www.williamkyle.com.cn/archives/141.html</link>
					<comments>https://www.williamkyle.com.cn/archives/141.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Mon, 27 Feb 2012 13:18:53 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[CDialogBar Create]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Visual C++ 6.0]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=141</guid>

					<description><![CDATA[今天打算弄一个工具栏，于是设计了一个对话框，然后建立一个 CDialogBar 对象，可是在 Create 的 &#8230; <a href="https://www.williamkyle.com.cn/archives/141.html" class="more-link">继续阅读<span class="screen-reader-text">Visual C++ 6.0 CDialogBar Create 出错解决方案</span></a>]]></description>
										<content:encoded><![CDATA[
<p>今天打算弄一个工具栏，于是设计了一个对话框，然后建立一个 CDialogBar 对象，可是在 Create 的时候老是出错，报错地点如下：</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/141.jpg" alt=""/></figure></div>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">File:bardlg.cpp
Line:48</code></pre>



<p>然后看了一下别人的建立过程，发现别人建立对话框的时候，是直接建立的 <strong>IDD_DIALOGBAR</strong> 的对话框，于是比较了 <strong>IDD_DIALOGBAR</strong> 和 <strong>IDD_DIALOG</strong> 的各种参数，发现只要把建立的 <strong>IDD_DIALOG</strong> 对话框的属性改一下就可以了。<br /></p>



<p>样式：下层；边框：无；<br />更多样式：取消可见</p>



<p>其他的设置没有测试，默认的对话框按以上设置之后就能当作工具栏使用了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/141.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Visual C++ 6.0 使用心得</title>
		<link>https://www.williamkyle.com.cn/archives/128.html</link>
					<comments>https://www.williamkyle.com.cn/archives/128.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Sat, 25 Feb 2012 13:18:05 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[Visual C++ 6.0]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=128</guid>

					<description><![CDATA[Visual C++ 6.0 使用了一段时间了，其中有些东西修改一下能用得更加顺手，于是记录一下。 修改工作空 &#8230; <a href="https://www.williamkyle.com.cn/archives/128.html" class="more-link">继续阅读<span class="screen-reader-text">Visual C++ 6.0 使用心得</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Visual C++ 6.0 使用了一段时间了，其中有些东西修改一下能用得更加顺手，于是记录一下。</p>



<h5 class="wp-block-heading">修改工作空间的图标</h5>



<p>打开注册表，定位到 <strong>HKEY_CLASSES_ROOT\dswfile\DefaultIcon</strong>, 双击默认，然后把 msdev.exe 之后的串删了即可。</p>



<h5 class="wp-block-heading">新建进程打开项目</h5>



<p>直接删除注册表 <strong>HKEY_CLASSES_ROOT\dswfile\shell\&amp;Open with MSDev\ddeexec</strong> 部分，再次打开 dsw 文件的时候就不会把原来开着的项目给关了。</p>



<h5 class="wp-block-heading">Windows 7 下添加文件到项</h5>



<p>首先下载一个插件 <a href="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/files/FileTool.rar">FileTool</a>，然后解压到文件夹 <strong>C:\Program Files\Microsoft Visual Studio\Common\MSDev98\AddIns</strong>（假设是安装在默认的位置，详情请根据机器调整），然后打开 VC——工具——定制——附加项和宏文件，勾选 <strong>FileTool Developer Studio Add-in</strong>，这时就会出来一个工具条，就可以通过工具条添加、打开文件了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/128.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>VC6 下通过 DirectShow 调用摄像头</title>
		<link>https://www.williamkyle.com.cn/archives/117.html</link>
					<comments>https://www.williamkyle.com.cn/archives/117.html#comments</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Thu, 23 Feb 2012 15:19:08 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[编程]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[DirectX]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[摄像头]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=117</guid>

					<description><![CDATA[首先，我们下载一下 DirectX 的 SDK 开发包，目前我们可以使用的是 DirectX 9.0 SDK（ &#8230; <a href="https://www.williamkyle.com.cn/archives/117.html" class="more-link">继续阅读<span class="screen-reader-text">VC6 下通过 DirectShow 调用摄像头</span></a>]]></description>
										<content:encoded><![CDATA[
<p>首先，我们下载一下 DirectX 的 SDK 开发包，目前我们可以使用的是 <a href="http://download.microsoft.com/download/7/e/9/7e9f48c6-f28a-469b-9b8e-cc84032efbd4/dxsdk_sum2004.exe">DirectX 9.0 SDK（Summer 2004）</a>之后的版本 DirectShow 已经被分离出去了。下载之后安装，安装前最好把 IDE 都给关了，免得路径没有添加进去。</p>



<h5 class="wp-block-heading"><strong>我们开始设计阶段：</strong></h5>



<p>我们先通过 MFC AppWizard(exe) 建立一个 MFC 的基本对话框，去除默认的两个按钮和文本，然后我们添加一个图像控件、一个组合框、一个按钮，然后设置属性，详情如下：</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image001.png" alt=""/></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image002.png" alt=""/></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image003.png" alt=""/></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image004.png" alt=""/></figure></div>



<p>然后，我们通过类向导添加成员变量，详情如下：</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image006.jpg" alt=""/></figure></div>



<h5 class="wp-block-heading"><strong>我们双击 Test</strong><strong>按钮，进入代码编写。</strong></h5>



<p>首先，我们把摄像头的两个文件加到项目路径下，然后再在文件视图里面添加这两个文件进项目。</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/clip_image007.png" alt=""/></figure></div>



<p>然后，我们给窗口类的头文件里面添加引用</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">#include "CaptureVideo.h"</code></pre>



<p>接着，给窗口类添加一个私有的成员变量</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">private:
         CCaptureVideo m_cap;</code></pre>



<p>然后再在窗口初始化的时候，初始化设备列表</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">m_cap.EnumDevices(m_Device.GetSafeHwnd());
m_Device.SetCurSel(0);</code></pre>



<p>然后在按键的时候初始化摄像头就是的</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">m_cap.Init(m_Device.GetCurSel(),m_Screen.GetSafeHwnd());
m_OK.EnableWindow(FALSE);</code></pre>



<p>我的设计环境为 Windows 7 SP1 、 Visual C++ 6.0 SP6 ，借鉴的别人的程序，如果有其他问题，欢迎一起讨论。<br /><a href="//www.williamkyle.com.cn/wp-content/uploads/ckfinder/files/Cap.rar">源代码点击下载</a></p>



<hr class="wp-block-separator"/>



<p>关于出现以下错误的解决方案</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
CapDlg.cpp
C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
CaptureVideo.cpp
C:\DXSDK\Include\strmif.h(1018) : error C2146: syntax error : missing ';' before identifier 'HSEMAPHORE'
C:\DXSDK\Include\strmif.h(1018) : fatal error C1004: unexpected end of file found
Generating Code...
执行 cl.exe 时出错.
</code></pre>



<p>在项目的 StdAfx.cpp 里面加上</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="cpp" class="language-cpp">#include "C:\DXSDK\Include\strmif.h"</code></pre>



<p>编译一次就好了，之后注释掉就好了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/117.html/feed</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title>学校的网速啊，无语了，先撤回国内</title>
		<link>https://www.williamkyle.com.cn/archives/115.html</link>
					<comments>https://www.williamkyle.com.cn/archives/115.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Tue, 21 Feb 2012 16:52:14 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=115</guid>

					<description><![CDATA[在家访问网站还勉勉强强的，这一回学校，我去，开个首页也要半天，更别说编辑文章了，于是我趁着晚上网速稍微好了一些 &#8230; <a href="https://www.williamkyle.com.cn/archives/115.html" class="more-link">继续阅读<span class="screen-reader-text">学校的网速啊，无语了，先撤回国内</span></a>]]></description>
										<content:encoded><![CDATA[
<p>在家访问网站还勉勉强强的，这一回学校，我去，开个首页也要半天，更别说编辑文章了，于是我趁着晚上网速稍微好了一些把网站搬了回来。</p>



<p>这几天在学校很充实啊，白天学开车，晚上搞学习，时不时还得去实验室弄点东西，毕业设计还没有开始，暂时还是不知道写什么东西的好，老师说开学后第二周再开会。我想，到时候再加一个毕业设计，那就更加有的忙了。</p>



<p>前几天把电脑给重装了，这下是彻底干干净净了，以前装了很多软件基本上都没怎么用过，新装系统装上新版的软件，少了很多补丁舒服多了，记得以前的系统光是系统的补丁文件就有十几二十多个 G，想一想都觉得吓人，新系统尝试了一些新软件，感觉现在还是跑的挺顺的。</p>



<p>最近一些以前的软件需要部分重写了，有时候挺纠结的，有空的时候别人那部分没弄完，现在有点忙起来了，别人的那部分就交过来了，现在也只能慢慢地一部分一部分的往下写了。弄了个 SVN 感觉挺不错的，想想以前都是拷贝文件夹的。。。就顺便拿这个项目练练工具软件吧，到时候再学学文档的生成软件。</p>



<p>明天还要去老校区领软考证书，早点睡吧。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/115.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>在.Net 环境下使用 MySQL</title>
		<link>https://www.williamkyle.com.cn/archives/102.html</link>
					<comments>https://www.williamkyle.com.cn/archives/102.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Thu, 09 Feb 2012 12:55:18 +0000</pubDate>
				<category><![CDATA[编程]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySql.Data.dll]]></category>
		<category><![CDATA[数据库]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=102</guid>

					<description><![CDATA[要想在.Net环境下使用MySQL，必须引用MySQL的Connector, 在VS中“项目”->“添加引用” &#8230; <a href="https://www.williamkyle.com.cn/archives/102.html" class="more-link">继续阅读<span class="screen-reader-text">在.Net 环境下使用 MySQL</span></a>]]></description>
										<content:encoded><![CDATA[
<p>要想在.Net环境下使用MySQL，必须引用MySQL的Connector, 在VS中“项目”->“添加引用”->“浏览”，选择 “MySql.Data.dll”，然后在文件开头</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="csharp" class="language-csharp">using MySql.Data.MySqlClient; </code></pre>



<p>这个 MySql.Data.dll 可以从 MySQL 的官方网站上得到，但是下载到的要不是一个源码的 zip 包，要不就是一个 10 几 M 的 msi 安装文件，里面包含了很多其他的东西，包括 Sample 等等，实际上这几个 dll 只有几百 K 而已。所以，我打包把它单独拿出来。<a href="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/files/v2_0.rar">v2.0.rar</a>  <a href="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/files/v4_0.rar">v4.0.rar</a>       </p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="csharp" class="language-csharp">using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;

namespace MySQL
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                MySqlConnection conn = new MySqlConnection("server=Server;uid=User;pwd=Pass;database=Database");
                MySqlCommand cmd = new MySqlCommand("show databases;", conn);
                conn.Open();
                MySqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    Console.WriteLine(reader.GetValue(0).ToString());
                }                
                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }
    }
}

</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/102.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ubuntu 上搭建 PPTPD 的 VPN</title>
		<link>https://www.williamkyle.com.cn/archives/91.html</link>
					<comments>https://www.williamkyle.com.cn/archives/91.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Thu, 09 Feb 2012 08:05:19 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PPTPD]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[VPN]]></category>
		<category><![CDATA[VPS]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=91</guid>

					<description><![CDATA[这个主机是在 BuyVM 买的 VPS，装的是 Ubuntu，折腾一年多了，下面把以前用 pptpd 搭建 V &#8230; <a href="https://www.williamkyle.com.cn/archives/91.html" class="more-link">继续阅读<span class="screen-reader-text">Ubuntu 上搭建 PPTPD 的 VPN</span></a>]]></description>
										<content:encoded><![CDATA[
<p>这个主机是在 BuyVM 买的 VPS，装的是 Ubuntu，折腾一年多了，下面把以前用 pptpd 搭建 VPN 的流程记录一下。</p>



<p>安装 pptpd</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">apt-get install pptpd</code></pre>



<p>配置 pptpd</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">vi /etc/pptpd.conf 
#去掉 localip 192.168.0.1 remoteip 192.168.0.234-238,192.168.0.245 前面的 #</code></pre>



<p>配置 ppp</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">vi /etc/ppp/options 
ms-dns 8.8.8.8 
vi /etc/ppp/chap-secrets 
#依次添加 用户名、服务器、密码、IP</code></pre>



<p>打开转发</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">vi /etc/sysctl.conf 
#去掉 net.ipv4.ip_forward=1 前面的 #</code></pre>



<span id="more-91"></span>



<p>设置路由</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 服务器 IP</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/91.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>一些常用到的 Bash 小语句</title>
		<link>https://www.williamkyle.com.cn/archives/40.html</link>
					<comments>https://www.williamkyle.com.cn/archives/40.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Thu, 09 Feb 2012 07:57:48 +0000</pubDate>
				<category><![CDATA[Bash Shell]]></category>
		<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=40</guid>

					<description><![CDATA[以后的工作将会与 Linux 打交道了，所以脚本必须得会用，这篇文章记录一下常用的一些 Bash 语句，以方便 &#8230; <a href="https://www.williamkyle.com.cn/archives/40.html" class="more-link">继续阅读<span class="screen-reader-text">一些常用到的 Bash 小语句</span></a>]]></description>
										<content:encoded><![CDATA[
<p>以后的工作将会与 Linux 打交道了，所以脚本必须得会用，这篇文章记录一下常用的一些 Bash 语句，以方便自己查阅。</p>



<h5 class="wp-block-heading">检测当前脚本运行用户是否具有 root 权限</h5>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">#!/bin/bash
if [ $(id -u) != "0" ]; then
	echo "Sorry, you must run this as root. You can cry sudo " $0
	exit 1
else
	echo "You are root"
fi
</code></pre>



<h5 class="wp-block-heading">按照当前日期组织文件名</h5>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">$(date +%Y%m%d).log
#Tips: 在用于 crontab 的计划任务时，由于% 在 crontab 里面有其他的意义，所以必须转义
$(date +\%Y\%m\%d).log</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/40.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DD-WRT 多出口负载均衡提升带宽</title>
		<link>https://www.williamkyle.com.cn/archives/73.html</link>
					<comments>https://www.williamkyle.com.cn/archives/73.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Sat, 04 Feb 2012 13:11:55 +0000</pubDate>
				<category><![CDATA[网络]]></category>
		<category><![CDATA[DD-WRT]]></category>
		<category><![CDATA[宽带]]></category>
		<category><![CDATA[网速合并]]></category>
		<category><![CDATA[负载均衡]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=73</guid>

					<description><![CDATA[家里以前上网是用的老爸办公室的光纤，网速就 2M，下个东西勉勉强强。去年电信在搞三网合一，早就在我家挂了个设备 &#8230; <a href="https://www.williamkyle.com.cn/archives/73.html" class="more-link">继续阅读<span class="screen-reader-text">DD-WRT 多出口负载均衡提升带宽</span></a>]]></description>
										<content:encoded><![CDATA[
<p>家里以前上网是用的老爸办公室的光纤，网速就 2M，下个东西勉勉强强。去年电信在搞三网合一，早就在我家挂了个设备盒，年前好不容易催了又催，终于把线路搞通了，发了个华为的 HG8240 的 PON 终端，网速是 4M，下载东西勉强跑到了 500 多 K。由于不知道家里这边的 VlanID，不能让 HG8240 当路由器用，所以只得把以前家里的老无线路由 NetCore NW606 挂在后面自动拨号。</p>



<p>前段时间无聊，把我原来的 TP-Link 840N 的无线路由器刷了下固件，改成了 DD-WRT 的系统，转发了楼下的无线信号，但是原来的那个 2M 的光纤就闲置了，于是改了改 DD-WRT 的设置，让它挂在两个网段下面，因为它的无线是个网卡，WAN 是个网卡，LAN 也是个网卡，而且还能虚拟 VLAN 出来。所以我就然它的 WAN 接在了 2M 光纤上，无线连接楼下的信号，再虚拟个无线出来和 LAN 桥接在一起。这样一来，就相当于有两个出口了，最开始本来是想按照网通、电信做路由表的，但是想想还是算了，本来 840N 的处理能力就一般，再挂一个这么大的路由表性能肯定好不到哪去，于是在网上找了半天，看到了负载均衡，今天试了一下，果断效果显著啊。</p>



<p><br />其实命令很简单，一条就搞定。</p>



<span id="more-73"></span>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">ip route replace default equalize nexthop via 192.168.2.1 dev ath0 weight 5 nexthop via 192.168.1.1 dev eth0 weight 2
</code></pre>



<p>这个命令是告诉路由器默认出口下一跳的地址是无线网卡上的 192.168.2.1，其权重是 5；或者下一跳的地址是 WAN 网卡上的 192.168.1.1，权重是 2。这样一来，路由器会根据权重分配线路。用 QQ 旋风下载一个帝国时代，效果很明显的达到了 700 多 K。</p>



<figure class="wp-block-image"><img decoding="async" src="/wp-content/uploads/ckfinder/images/旋风下载.jpg" alt=""/></figure>



<div class="wp-block-columns is-layout-flex wp-container-2">
<div class="wp-block-column is-layout-flow" style="flex-basis:100%">
<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/ckfinder/images/2M线路.jpg" alt=""/><figcaption>2M 光纤的带宽图</figcaption></figure>



<figure class="wp-block-image size-large"><img decoding="async" src="/wp-content/uploads/ckfinder/images/4M线路.jpg" alt=""/><figcaption>4M 光纤的带宽</figcaption></figure>
</div>
</div>



<p>由于路由器性能一般，所以刷图的时候一上一下的，不过下载的时候速度还是比较稳定的。</p>



<p>虽说网速上去了，但是这个方法毕竟有利也有弊，由于下一跳的线路是变动的，这就可能导致一些应用的通信不稳定，比如 QQ，有点时不时的掉线。有些应用是锁定 IP 的，也会被判定为认证失败。这让我想起了学校的网络，学校也是有一堆出口，包括网通的一个网段，电信的一个网段，以及教育网的几个出口。估计应该是先按照线路路由，然后再按照负载均衡走的出口，所以有时候 IP 时不时的变动。</p>



<p>这个功能暂时先保留着，留着半夜下载东西的时候再用，平时要是老爸老妈斗地主掉线了该郁闷了，再说 4M 的光纤速度对他们来说已经可以了。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/73.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Windows 7 环境下重置图标缓存</title>
		<link>https://www.williamkyle.com.cn/archives/57.html</link>
					<comments>https://www.williamkyle.com.cn/archives/57.html#comments</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Thu, 02 Feb 2012 01:50:18 +0000</pubDate>
				<category><![CDATA[Windows]]></category>
		<category><![CDATA[Windows 7]]></category>
		<category><![CDATA[图标]]></category>
		<category><![CDATA[缓存]]></category>
		<category><![CDATA[脚本]]></category>
		<category><![CDATA[重置]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=57</guid>

					<description><![CDATA[图标缓存可以加速图标的显示，但是有时，如果图标发生了改变，但是并没有正常显示时，我们需要重建图标的缓存，把如下 &#8230; <a href="https://www.williamkyle.com.cn/archives/57.html" class="more-link">继续阅读<span class="screen-reader-text">Windows 7 环境下重置图标缓存</span></a>]]></description>
										<content:encoded><![CDATA[
<p>图标缓存可以加速图标的显示，但是有时，如果图标发生了改变，但是并没有正常显示时，我们需要重建图标的缓存，把如下代码保存为.cmd 文件运行即可。</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="bash" class="language-bash">rem 关闭 Windows 外壳程序 explorer
taskkill /f /im explorer.exe

rem 清理系统图标缓存数据库
attrib -h -s -r "%userprofile%\AppData\Local\IconCache.db"
del /f "%userprofile%\AppData\Local\IconCache.db"
attrib /s /d -h -s -r "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\*"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_32.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_96.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_102.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_256.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_1024.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_idx.db"
del /f "%userprofile%\AppData\Local\Microsoft\Windows\Explorer\thumbcache_sr.db"

rem 清理 系统托盘记忆的图标
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v IconStreams
echo y|reg delete "HKEY_CLASSES_ROOT\Local Settings\Software\Microsoft\Windows\CurrentVersion\TrayNotify" /v PastIconsStream

rem 重启 Windows 外壳程序 explorer
start explorer</code></pre>



<div class="wp-block-file"><a id="wp-block-file--media-d00b291b-bdf0-4d17-a854-2abd11610ef0" href="https://www.williamkyle.com.cn/wp-content/uploads/2012/02/Reset-Icon-Cache.zip" target="_blank" rel="noreferrer noopener">下载脚本</a></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/57.html/feed</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>博客安装笔记</title>
		<link>https://www.williamkyle.com.cn/archives/22.html</link>
					<comments>https://www.williamkyle.com.cn/archives/22.html#comments</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Tue, 31 Jan 2012 11:31:41 +0000</pubDate>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[CKFinder]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[SyntaxHighlighter]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=22</guid>

					<description><![CDATA[之前博客的安装记录。 https://web.archive.org/web/20121105184732/h &#8230; <a href="https://www.williamkyle.com.cn/archives/22.html" class="more-link">继续阅读<span class="screen-reader-text">博客安装笔记</span></a>]]></description>
										<content:encoded><![CDATA[
<p>之前博客的安装记录。 <a href="https://web.archive.org/web/20121105184732/http://www.williamkyle.com.cn/" target="_blank" rel="noreferrer noopener">https://web.archive.org/web/20121105184732/http://www.williamkyle.com.cn/</a></p>



<p>以下是原文：</p>



<hr class="wp-block-separator"/>



<p>WordPress 的安装就不用怎么多说了。下载、解压、移动到你想要的目录，修改 owner，建数据库，安装就是的。</p>



<p>我主要讲一下插件的问题，我装的是<a rel="noopener" href="http://wordpress.org/extend/plugins/ck-and-syntaxhighlighter/" target="_blank"><strong>CK and SyntaxHighlighter</strong></a>这个插件，它综合了 CKEditor、CKFinder 以及 SyntaxHighlighter 三个软件，能够提供可视化编辑器、文件管理以及语法高亮。这个插件还是很不错的，至少很对我的胃口，然而这几个插件本身有着一些不足之处，所以得对它们进行一些修改。</p>



<span id="more-22"></span>



<h4 class="wp-block-heading">SyntaxHighlighter 的右上角的问号</h4>



<p class="has-text-align-center">&nbsp; &nbsp;&nbsp; <img decoding="async" style="width: 150px; height: 150px;" src="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/SyntaxHighlighter右上角问号.jpg" alt=""/>修改之前 VS 修改之后<img decoding="async" style="width: 150px; height: 150px;" src="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/SyntaxHighlighter右上角问号2.jpg" alt=""/></p>



<p>由于这个插件里的 SyntaxHighlighter 用的是 3.x 版本的，右上角会有一个问号出现，可以通过修改 css 文件让它不显示。</p>



<p>首先打开/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/styles/shCoreCk.css 找到&nbsp; &nbsp;&nbsp;</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="css" class="language-css">.syntaxhighlighter .toolbar {
  position: absolute !important;
  right: 1px !important;
  top: 1px !important;
  width: 11px !important;
  height: 11px !important;
  font–size: 10px !important;
  z–index: 10 !important;
}
</code></pre>



<p>&nbsp; &nbsp; 添加一个 display:none; 修改成</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="css" class="language-css">.syntaxhighlighter .toolbar {
  position: absolute !important;
  right: 1px !important;
  top: 1px !important;
  width: 11px !important;
  height: 11px !important;
  font–size: 10px !important;
  z–index: 10 !important;
  display:none:
}
</code></pre>



<h4 class="wp-block-heading">&nbsp;&nbsp;&nbsp;&nbsp;<br />SyntaxHighlighter 代码框右侧滚动条</h4>



<p>如上面所示，这个滚动条出现的很难看，同样修改 shCoreCk.css 文件，在第 54 行添加代码</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="css" class="language-css">.syntaxhighlighter table {
  margin: 1px 0 !important;
}
</code></pre>



<h4 class="wp-block-heading">&nbsp;SyntaxHighlighter 的自动换行</h4>



<figure class="wp-block-image"><img decoding="async" src="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/SyntaxHighlighter底下滚动条.jpg" alt=""/></figure>



<p>&nbsp;SyntaxHighlighter 3.x 版本貌似不会自动换行，同样可以通过修改 shCoreCk.css 文件让其自动换行</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="css" class="language-css">.syntaxhighlighter .line {
  white–space: pre !important;
} </code></pre>



<p>&nbsp; &nbsp; 修改成</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="css" class="language-css">.syntaxhighlighter .line {
  /*white-space: pre !important;*/
  white–space: pre–wrap;
  white–space: –moz–pre–wrap;
  white–space: –pre–wrap;
  white–space: –o–pre–wrap;
  word–wrap: break–word;
}
</code></pre>



<p>不过这样还是有问题的，它把折下去的行也算入行号内了，所以到后面，行号会缺少。</p>



<figure class="wp-block-image"><img decoding="async" src="http://www.williamkyle.com.cn/wp-content/uploads/ckfinder/images/SyntaxHighlighter断行.jpg" alt=""/></figure>



<p>这个在 SyntaxHighlighter 2.x 版本没有出现，但是 2.x 版本的复制会把行号也复制进去。</p>



<h4 class="wp-block-heading">CKFinder 的权限设置</h4>



<p>CKFinder 的后台首页是个 html 文件，可以直接访问，并创建文件夹、上传文件，危害甚大，所以必须处理。我的解决方案是在/wp-content/plugins/ck-and-syntaxhighlighter/ckfinder/config.php 文件里面添加 WordPress 的 wp-admin/admin.php 的引用，这样一来，就只有能登陆后台的用户使用这个功能了。</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="php" class="language-php">include(dirname(str_replace(", '/', __FILE__)) . '/../../../../wp-admin/admin.php');</code></pre>



<h4 class="wp-block-heading">CKFinder 的文件路径设置</h4>



<p>由于这个插件返回的文件路径使用的是相对路径，导致在后台编辑的时候不能显示的上传的文件，同样修改一下 config.php 即可，但是文件路径返回的是使用时的域名路径，所以如果修改了域名的话，估计都得修改了。</p>



<pre class="wp-block-code has-dark-gray-color has-text-color"><code lang="php" class="language-php">$baseUrl = 'http://' . $_SERVER["HTTP_HOST"] . '/wp-content/uploads/ckfinder/';
</code></pre>



<p>暂时就改了这么多，当然主题也改了一下，折腾了很久，最终由于 PhotoShop 水平有限，只是正式修改了一小部分，暂时就先这样吧，用空了再继续折腾。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/22.html/feed</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>世界，你好！</title>
		<link>https://www.williamkyle.com.cn/archives/1.html</link>
					<comments>https://www.williamkyle.com.cn/archives/1.html#respond</comments>
		
		<dc:creator><![CDATA[WilliamKyle]]></dc:creator>
		<pubDate>Mon, 30 Jan 2012 16:35:47 +0000</pubDate>
				<category><![CDATA[随笔]]></category>
		<guid isPermaLink="false">http://www.williamkyle.com.cn/?p=1</guid>

					<description><![CDATA[哎，挺喜欢这个主题的，可惜有些 Bug，主要是看着这个篱笆有点乱，还有就是浏览器窗口缩小的时候，Header  &#8230; <a href="https://www.williamkyle.com.cn/archives/1.html" class="more-link">继续阅读<span class="screen-reader-text">世界，你好！</span></a>]]></description>
										<content:encoded><![CDATA[
<p>哎，挺喜欢这个主题的，可惜有些 Bug，主要是看着这个篱笆有点乱，还有就是浏览器窗口缩小的时候，Header 的排版会出现错乱。本来想自己重新弄一下的，排版也弄的差不多了，突然发现中间的这块白色的阅读区出现了点问题，主要是我 PS 技术不行，不知道怎么弄阴影到透明，不弄吧，又显得没过渡，太不细腻了。还是先放着吧，等什么时候 PS 技术提升了再说吧。</p>



<p>最终，我就把 RSS 的图标处理了下，因为它开始挡着副标题了，后来在重排版的时候突然发现，其实不用动图片的，只要把副标题的 CSS 的 z-index 设置一个值就可以了。</p>



<p>留着这个博客慢慢弄吧，我是不太喜欢写东西的，主要是因为文笔不够好，而且觉得排版时间很痛苦的事情。但是我觉得，还是的记录点什么，不然这个情况永远得不到改变，所以说，慢慢积累吧。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.williamkyle.com.cn/archives/1.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
