Permalink
Browse files

convert posts from WP

  • Loading branch information...
1 parent 51f3eab commit 3848b26b5ff3fc0bf988c4453680f2dc92294503 @yihui committed Feb 6, 2012
Showing 439 changed files with 13,439 additions and 0 deletions.
View
@@ -0,0 +1,3 @@
+_site
+media/
+
View
8 404.md
@@ -0,0 +1,8 @@
+---
+title: 404
+layout: page
+---
+
+Nothing found :(
+
+But you still can have a [look around]({{ site.url }})
View
@@ -0,0 +1,5 @@
+markdown: redcarpet
+permalink: /:year/:month/:title/
+url: http://yihui.name/cn
+author: 谢益辉
+
View
@@ -0,0 +1,16 @@
+<section class="comment">
+<div id="disqus_thread"></div>
+<script type="text/javascript">
+ /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
+ var disqus_shortname = 'yihui'; // required: replace example with your forum shortname
+ var disqus_url = '{{ site.url }}{{ page.url | remove:'index.html' }}';
+ /* * * DON'T EDIT BELOW THIS LINE * * */
+ (function() {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ })();
+</script>
+<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+</section>
+
View
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-us">
+ <head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <meta name="author" content="{{ site.author }}" />
+ <title>{{ page.title }} | {{ site.author }}</title>
+ <link rel="shortcut icon" href="/favicon.ico">
+ <link href="{{ site.url }}/feed/" rel="alternate" title="{{ site.author }}" type="application/atom+xml" />
+ <link rel="stylesheet" href="/media/css/style.css">
+ <link rel="stylesheet" href="/media/css/github.css">
+ <script type="text/javascript" src="/media/js/highlight.pack.js"></script>
+ <script type="text/javascript">
+ hljs.initHighlightingOnLoad();
+ </script>
+ </head>
+ <body>
+ <div id="container">
+ <div id="main" role="main">
+ <header>
+ <h1>{{ page.title }}</h1>
+ </header>
+ <nav>
+ <span><a title="home page" class="" href="{{ site.url }}/">home</a></span>
+ <span><a title="about" class="" href="{{ site.url }}/about/">about me</a></span>
+ <span><a title="publication" class="" href="{{ site.url }}/publication/">publication</a></span>
+ <span><a title="guestbook" class="" href="{{ site.url }}/guestbook/">guestbook</a></span>
+ <span><a title="vitae" class="" href="{{ site.url }}/vitae/">vitae</a></span>
+ <span><a title="categories" class="" href="{{ site.url }}/categories/">categories</a></span>
+ <span><a title="tags" class="" href="{{ site.url }}/tags/">tags</a></span>
+ <span><a title="links" class="" href="{{ site.url }}/links/">links</a></span>
+ <span><a title="subscribe me" class="" href="{{ site.url }}/feed/">feed</a></span>
+ </nav>
+ <article class="content">
+ <blockquote>THIS SITE IS STILL UNDER CONSTRUCTION. PLEASE COME BACK AFTER THIS NOTICE IS REMOVED. THANKS!</blockquote>
+ {{ content }}
+ </article>
+ </div>
+ </div>
+ </body>
+</html>
View
@@ -0,0 +1,11 @@
+---
+layout: default
+---
+
+<section class="post">
+{{ content }}
+</section>
+{% if page.comments %}
+{% include comments.md %}
+{% endif %}
+
View
@@ -0,0 +1,35 @@
+---
+layout: default
+---
+
+<section class="post">
+{{ content }}
+</section>
+<section class="meta">
+<span class="author">
+ <a href="http://yihui.name">{{ site.author }}</a>
+</span>
+<span class="time">
+ /
+ <time datetime="{{ page.date | date:"%Y-%m-%d" }}">{{ page.date | date:"%Y-%m-%d" }}</time>
+</span>
+<br />
+{% if page.categories %}
+<span class="categories">
+ Published in categories
+ {% for cat in page.categories %}
+ <a href="{{ site.url }}/categories/#{{ cat }}" title="{{ cat }}">{{ cat }}</a>&nbsp;
+ {% endfor %}
+</span>
+{% endif %}
+{% if page.tags %}
+<span class="tags">
+ tagged with
+ {% for tag in page.tags %}
+ <a href="{{ site.url }}/tags/#{{ tag }}" title="{{ tag }}">{{ tag }}</a>&nbsp;
+ {% endfor %}
+</span>
+{% endif %}
+</section>
+{% include comments.md %}
+
@@ -0,0 +1,23 @@
+---
+layout: post
+title: 在Windows下建立远程桌面连接
+categories:
+- Technology
+tags:
+- Windows
+- 网络
+- 计算机
+- 远程连接
+- 防火墙
+---
+
+网络最大的好处在于省去了很多跑腿的时间,而不在于有QQ可以聊天。Windows的远程桌面连接也算是节省跑腿功夫的一种办法,它可以通过网络让我们从自己的计算机连接到远程计算机,连接上之后就如同真正登录到那台计算机的系统一样,我们可以进行系统管理员的几乎所有操作。
+
+设置很简单,必要条件是要在远程系统的Windows防火墙(控制面板-->Windows防火墙)中打开系统对远程桌面连接的限制(如下图),然后就可以从自己的计算机登录该远程计算机了,不过这里还有一个小前提——远程计算机的管理员必须设置密码!这样我们才可以用管理员的帐号和密码登录。
+
+
+[![Windows的远程桌面连接](http://yihui.name/cn/wp-content/uploads/1186587642_0.png)](http://yihui.name/cn/wp-content/uploads/1186587642_0.png)
+
+
+
+如果想用两台电脑同时干活,或者同学同事谁的电脑出问题了,都可以采用这种方法登录操作,但我现在不知道远程连接究竟会占用本机多大的内存,通过任务管理器,似乎也没看到远程桌面连接很明显占用了多少内存。
@@ -0,0 +1,105 @@
+---
+layout: post
+title: 对于大型数据处理的“庖丁解牛”
+categories:
+- Featured
+- Statistics
+tags:
+- ODBC
+- R
+- RODBC
+- SPSS
+- SQL
+- Windows
+- 二进制文件
+- 大型数据
+- 计算机
+- 远程连接
+---
+
+9号通宵大战,总算大致赶完了一篇报告。这个通宵让我创下了42小时不睡觉的记录,其惨烈程度可想而知。这篇 报告的主题是针对人口抽样调查数据进行分析,得出地区人口素质的一些描述性结论。其实我的相当大一部分时间都花在了处理数据上面,因为数据比较庞大,一共 有260万行、90个变量,数据文件大小在FoxPro存储格式下为424M,首先我要想办法将 FoxPro数据转化为一般常见的数据库格式,因此将之导出为dBase IV(*.dbf),这样SPSS就可以读了(当然也可以用R的RODBC包读), 从dBase IV转为SPSS格式(*.sav)之后文件大小变为约1.5G,但很容易就能找出减小数据文件大小的办法:将以文本形式(String)表示的数字转化 为数值型(Numeric)即可(其实这份数据中的大部分数值都是用文本形式保存的,除非以零开头,都可以直接转换为数值形式)——我并不了解真正的 SPSS存储形式,但我猜测对于字符数据,至少要比数值数据多两个引号吧。初步整理之后,文件大小能缩减到400多M,当然我是不会直接用SPSS来作分 析的,因为速度太慢,一个变量的频数统计就要花半分钟时间,我可没那么多时间和耐心去等。最终我采用的办法是将数据存为纯文本格式,具体来说是逗号分隔符 数据(*.csv),然后开始用R来作分析。到这里,数据的预处理仍然没有结束,我为了让分析做得更快,又采取了一个策略:将每一列变量都单独存为一个数 据文件。要达到这样的目的,当然要首先把每一列变量提取出来,那么怎样依次提取变量呢?方法很简单,用SQL的select语句即可。文本文件当然也可以 当作数据库来处理,因为Windows一般会有文本文件的ODBC Driver,利用R的RODBC包结合SQL的select语句,变量就可以顺利被选择出来了。
+
+以下是一个R程序示例:[文件下载链接](http://yihui.name/cn/wp-content/uploads/1186898931_0.gz)
+
+
+ # 生成一个随机的Poisson矩阵
+ > x = apply(matrix(rpois(1e+05, 5), ncol = 10), 2, as.integer)
+ > colnames(x) = LETTERS[1:10] 将列命名为A-J的十个字母
+ > print(x[1:10, ]) 这是数据的形式
+ A B C D E F G H I J
+ [1,] 2 2 9 3 5 5 3 8 3 5
+ [2,] 4 5 1 2 6 3 6 6 4 7
+ [3,] 7 4 4 3 2 3 5 1 8 5
+ [4,] 5 7 2 5 6 7 6 7 4 3
+ [5,] 10 3 5 4 6 7 5 5 1 5
+ [6,] 1 6 8 3 6 2 4 7 5 3
+ [7,] 7 5 3 4 2 4 2 4 4 7
+ [8,] 4 6 4 1 4 3 4 1 2 3
+ [9,] 2 0 4 9 6 6 7 3 3 10
+ [10,] 2 2 8 2 5 9 4 5 4 8
+ > f = c("c:/x.csv", "c:/x.RData", "c:/y.RData")
+ > write.csv(x, file = f[1], row.names = F) csv格式文件
+ > save(x, file = f[2]) 二进制文件
+ > y = x
+ > save(y, file = f[3], ascii = T) ASCII文件
+ > print(file.info(f)[, 1:3]) 看看三种文件的大小对比
+ size isdir mode
+ c:/x.csv 213189 FALSE 666
+ c:/x.RData 64389 FALSE 666
+ c:/y.RData 203336 FALSE 666
+ > require(RODBC) 加载RODBC包
+ # 注意,"Text Files"只是我自己命名的一个数据库连接,
+ # 请按照图1、图2的步骤建立文本数据库驱动的连接
+ # 这里也可以将odbcConnect()的参数设为空字符串""
+ # 这样系统会自动弹出选择ODBC连接的对话框
+ > channel = odbcConnect("Text Files")
+ > print(sqlColumns(channel, "x.csv")[, c(1, 3, 4, 6)])
+ TABLE_CAT TABLE_NAME COLUMN_NAME TYPE_NAME
+ 1 C:\ x.csv A INTEGER
+ 2 C:\ x.csv B INTEGER
+ 3 C:\ x.csv C INTEGER
+ 4 C:\ x.csv D INTEGER
+ 5 C:\ x.csv E INTEGER
+ 6 C:\ x.csv F INTEGER
+ 7 C:\ x.csv G INTEGER
+ 8 C:\ x.csv H INTEGER
+ 9 C:\ x.csv I INTEGER
+ 10 C:\ x.csv J INTEGER
+ # 要依次保存所有的列,只需要把这里的SQL语句放在循环中即可
+ # 比如paste("select", i, "from x.csv", collapse = " ")
+ # 让i在LETTERS[1:10]中循环
+ > print(sqlQuery(channel, "select A,B from x.csv")[1:10,
+ ])
+ A B
+ 1 2 2
+ 2 4 5
+ 3 7 4
+ 4 5 7
+ 5 10 3
+ 6 1 6
+ 7 7 5
+ 8 4 6
+ 9 2 0
+ 10 2 2
+ > odbcClose(channel) 关闭ODBC连接
+ > file.remove(f) 删掉前面生成的三个文件
+
+
+
+
+[![点击看大图](http://yihui.name/cn/wp-content/uploads/1186851487_0.png)](http://yihui.name/cn/wp-content/uploads/1186851487_0.png)
+
+
+
+图1:新建数据源(控制面板-->管理工具-->数据源 (ODBC);添加)
+
+
+[![点击看大图](http://yihui.name/cn/wp-content/uploads/1186851487_1.png)](http://yihui.name/cn/wp-content/uploads/1186851487_1.png)
+
+
+
+图2:Microsoft Text Driver
+
+用R处理完数据之后,预处理过程才算真正结束了,这里要特别提一句的是,由于R的_save()_函数默认采用二进制存储方式(而不是直接存储ASCII字符),数据的大小便可以被大幅度压缩,最后以二进制数据形式存储的这90个变量大小之和才50M左右——数据大小被压缩到原来的1/10。
+
+这次采取的另一个节省时间策略就是[上一篇日志](http://yihui.name/cn/2007/08/remote-connection-under-windows/)里 提到的远程桌面连接;我自己这台电脑跑起来比较慢,于是我把这些数据处理工作都交给了办公室的另一台电脑,在那里执行我的R语句,然后回到自己的电脑同时 做别的工作,等那边的计算结束之后再把结果复制回来就可以了。由于R的计算都是在内存(RAM)中进行,大家都知道读写内存的速度比读写硬盘或其它存储的 速度要快很多倍,R的计算速度尤其是在这种大型数据的情况下就显得极其快,频数统计(_table()_函数)往往都是半秒不到就计算出来了。 当然,这世上不存在绝对好或者绝对差的东西,读写内存必然对内存有一定的要求(主要是内存大小),比如当数据很庞大的时候,Windows下就很难把数据 一口气读进来。我前面将每一列变量单独存为数据文件的做法其实也是回避这个缺点,因为我的分析并不需要每次都用到所有的变量,而加载一列数据的时间也是很短的,用谁就加载谁。
@@ -0,0 +1,15 @@
+---
+layout: post
+title: Bo-Blog系统中Tags的大小写问题解决办法
+categories:
+- Technology
+tags:
+- Google
+- PHP
+- 博客
+- 网站
+---
+
+在Bo-Blog博客系统中,Tags默认都是被转化为小写形式的,不知道官方为何采取这种限定形式。我感觉大部分程序语言都是区分大小写(Case Sensitive)的,所以这种限制真是很奇怪。特别是有些专有名词根本就不能小写,看着"odbc"、"latex"、"windows"等写法我就会觉得不舒服。
+
+这个问题也不难解决,花几秒钟Google一下,查出来PHP的大小写转换函数为_strtolower()__strtoupper()_,再花几秒钟看看提交文章的这个表单(Form)中元素的id(是$tags),然后到PHP源文件中搜索一下"$tags",马上就找到了转换小写的地方:在admin\cp_edit.php的第344行有一句"$tags_array=@explode(' ', **strtolower(**trim($tags)**)**);",把这里的小写函数去掉即可。
@@ -0,0 +1,10 @@
+---
+layout: post
+title: Google Maps:我在什么地方?
+categories:
+- Life
+tags:
+- Google
+- Google Maps
+---
+
@@ -0,0 +1,32 @@
+---
+layout: post
+title: Netflix Prize(百万美元大奖)数据预处理的一个简单R程序
+categories:
+- Featured
+- Statistics
+tags:
+- Netflix
+- R
+- Windows
+- 大型数据
+---
+
+不知道这样一个程序要跑多久:
+
+
+ setwd("e:/download/")
+ files = list.files("training_set", full.names = T)
+ writeLines("movieID,customerID,Rating,ratingDate,movieReleaseDate",
+ "training_set.csv")
+ for (i in 1:17770) {
+ x = read.csv(files[i], F, skip = 1, as.is = F, stringsAsFactors = F)
+ x = cbind(i, x, read.csv("movie_titles.txt", F, nrows = 1,
+ skip = i - 1, as.is = F, stringsAsFactors = F)[1, 2])
+ write.table(x, file = "training_set.csv", append = T, sep = ",",
+ row.names = F, col.names = F, quote = F)
+ }
+
+
+当我没加入第7~8行的_read.csv()_那一句时,程序在WinXP+奔四3.0GHz+512M内存下跑了47分钟把一个2G多的CSV数据文件写完了。不过等我用SQL语句去读其中一列时,发现内存终于不够用了。
+
+[Netflix的奖金](http://www.netflixprize.com)是1,000,000$,呃,这么大一堆钱,做做梦吧。莫非这个奖还要比拼各家的计算机配置?![](http://yihui.name/cn/wp-content/uploads/bo/emot/uplook.gif)国内啥时候能有这样的悬赏啊?
@@ -0,0 +1,14 @@
+---
+layout: post
+title: R的data frame怎么提取一列
+categories:
+- Life
+tags:
+- data frame
+- Joke
+- R
+- rtist
+- 统计之都
+---
+
+看了这个帖子[http://cos.name/cn/topic/7393](http://cos.name/cn/topic/7393),把我笑喷了。楼主莫介意,丝毫没有取笑的意思。rtist一定哭笑不得,急坏了。
@@ -0,0 +1,19 @@
+---
+layout: post
+title: 重命名MySQL数据库
+categories:
+- Technology
+tags:
+- MySQL
+- RENAME
+- 网站
+- 重命名
+---
+
+很简单,RENAME一下就好了。语法:
+
+
+> RENAME {DATABASE | SCHEMA} _db_name_ TO _new_db_name_;
+
+
+这次一边做网页,也算是一边学习MySQL了。其实到现在为止基本上还是一个糊涂蛋。
@@ -0,0 +1,26 @@
+---
+layout: post
+title: 恨死Hotmail!恨死垃圾邮件!
+categories:
+- Life
+tags:
+- Hotmail
+- 垃圾邮件
+- 网络
+---
+
+Hotmail要么是个白痴(别人可以轻易偷走邮箱里面的联系人信息),要么是故意发广告邮件。Hotmail的用户还是早点逃离吧。
+
+现在垃圾邮件大致分两种,一种是“专业人员”发的,对此我们毫无办法,网络这东西,谁也逮不着谁(就算逮着了,现在有明确的法律制裁么);另外一种垃圾邮件本来是可以避免的,那就是自己的联系人中某些人在某些网站注册用户,然后稀里糊涂把自己的联系人信息有意无意透露给了那些网站,最后导致的结果就是那些流氓网站无休止地给这些无辜的受害者发邮件说“您好,您的好友XXX在什么什么地方注册了,并邀请您参加,您要不要去啊?”我收到的一般都是英文的,大概形式就是这样:
+
+
+> Hello,
+***@hotmail.com has added you as a friend on Crickee.
+*** needs to confirm that you are friends.
+Please click this link to accept this friend request:
+http://www.***.com/?ik=&^%&$^%#(*@!
+It takes just a second. Thank you.
+http://www.***.com, it's free, fun and easy ;-)
+
+
+痴线!傻子才会去点链接,点了链接无非告诉这些垃圾制造者:喂,我的邮箱是有效的,以后多给我发一些垃圾邮件吧!
@@ -0,0 +1,11 @@
+---
+layout: post
+title: 8月16日骑车又下雨
+categories:
+- Life
+tags:
+- 下雨
+- 自行车
+---
+
+[两年前的今天](http://xieyihui.bokee.com/2622775.html),我冒着暴雨骑我的破自行车从北京到了天津;今天白天骑车去BIStone公司,结果晚上的时候下雨了。回来路上马上就想起了两年前在暴雨滂沱中几乎以游泳的形式骑车的情景。
Oops, something went wrong.

0 comments on commit 3848b26

Please sign in to comment.