<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.9.1" -->
<rss version="0.92">
<channel>
	<title>错落有致</title>
	<link>http://blog.cuoluo.net</link>
	<description>&#60;span class=&#34;lamengao&#34;&#62;Lamengao&#60;/span&#62;&#039;s weblog</description>
	<lastBuildDate>Sat, 16 Jul 2011 10:35:53 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>一个纯粹的JavaScript blog</title>
		<description><![CDATA[REWORK上说有了灵感就立刻去做，所以我花了两天时间实现了自己的一个想法--一个纯粹的JavaScript blog。 
前后端都是由javascript驱动。
前端仅仅是一个静态的html文件，后端数据保存在google spreadsheets中，逻辑部分由google apps script来处理（就是一段javascript脚本）。 
零成本，你只需要有一个能存放单个html文件的地方就能搭建整个blog. 
我把这个blog取名为 purejsblog (pure javascript blog)
关于 PureJsBlog
http://purejsblog.cuoluo.net/index.html?p=3
PureJsBlog demo
http://purejsblog.cuoluo.net/index.html
]]></description>
		<link>http://blog.cuoluo.net/2010/10/purejsblog/</link>
			</item>
	<item>
		<title>在App Engine上使用OpenID验证登陆</title>
		<description><![CDATA[Google App Engine最新发布的SDK 1.3.4提供了对OpenID的原生支持。下面我们就来演示在app engine上的应用如何使用OpenID来登陆。
首先你需要登陆到App Engine的管理控制台中，在你应用的"Application Settings"中选择"Authentication Options"为 "(Experimental) Federated Login"并保存。

一旦你设置好了上面这一步，App Engine的Users API就能够提供对OpenID的支持了。在使用Users API之前，我们先看看OpenID的登陆流程，我按照自己的理解画了一个示意图。


用户访问web app
web app返回一个登陆表单，提供OpenID identifier的输入框
用户输入OpenID identifier,提交表单
web app根据用户输入的OpenID identifier用create_login_url()函数生成并重定向到OpenID登陆页面
用户在OpenID provider处登陆，并授权web app获取用户的OpenID信息
OpenID provider把用户重定向到web app(重定向的url包含了用户的OpenID信息)
web app通过get_current_user()函数获取到用户信息，登陆完成

上面的流程省略掉了一些步骤和细节，比如web app和OpenID provider的交互，web app对重放攻击的处理等等。这些步骤和细节App Engine全都帮我们做了，所以对web开发者来说是透明的，我们不用去关心。我们需要做的就是第2，4，7步。
提供一个用户登陆页面
准备一个简单login.html文件内容如下，主要就是提供一个能够接收用户OpenID标识的表单。

&#60;html>
&#60;head>
  &#60;title>Log in with OpenID&#60;/title>
&#60;/head>
&#60;body>
  &#60;h1>Log in with OpenID&#60;/h1>
  &#60;form method="get" action="/testopenid">
    &#60;input type="text" name="openid" />
    &#60;input type="submit" [...]]]></description>
		<link>http://blog.cuoluo.net/2010/06/using-openid-authentication-on-app-engine/</link>
			</item>
	<item>
		<title>Protected: 没有距离的日子</title>
		<description><![CDATA[There is no excerpt because this is a protected post.]]></description>
		<link>http://blog.cuoluo.net/2010/04/the-days-no-distance/</link>
			</item>
	<item>
		<title>把你的google电子表格打造成twitter客户端</title>
		<description><![CDATA[前天学了一下Google Apps Script觉得这玩意儿很好玩儿(我很早以前就觉得google spreadsheet潜力很大),所以就想做点什么来练练手。经过短暂的思考，想到了一个点子--把google电子表格打造成twitter客户端。谁知google后发现早就有人想到这样做了，不由得有些小小的遗憾。不过继续搜索后发现，大家有的似乎都只是一个想法，我还没有找到一个真正可用的apps script.既然没有一个成型的脚本，那正好自己把它实现。
这里简单的介绍一下google apps script，它能让你用一种很简单的方式来自动处理电子表格中的数据。就像是office excel中的宏，但比宏强大很多倍。google apps script使用标准的javascript语言，提供相当直观的API,可以很容易就上手。最最重要的是，你写好的javascript脚本是在google的服务器上运行的，这为我们利用google电子表格来翻墙提供了可能,当然你要先保证自己的电子表格不被墙。比如我下面要介绍的这个脚本就能让你在不翻墙的情况下使用twitter(当然只是一部分内容：查看timeline和更新消息).
我的spreadsheet twitter client就是下面这个样子的。

你可以按照下面的步骤使用这个脚本：
1.登陆你的google文档
2.打开这个google电子表格(由于我的脚本很多都是硬编码，所以需要有一个模板)
3.点击菜单中的"File > Make a copy",然后输入你想保存的文件名，确定。
4.第一次打开你保存的这个电子表格后，你需要按照提示输入你的twitter用户名和密码.如果输入错误或者想更换twitter用户，你可以点击电子表格下面的"config"工作表，然后在里面更改。

5.如果想发推，你可以在"home"工作表左上角那个白色的大框框(就是cell A2)中输入内容,然后按回车确认输入完毕(输完内容后一定要按回车，这点很重要，不然脚本获取不到你的推)，然后点击菜单 "Twitter action > Update status."就可以了。
6.至于更新时间线，同样也是点击菜单"Twitter action"然后寻找相应的操作就可以了。
7.对了，不管是发推还是更新时间线，在你第一次运行脚本的时候电子表格会询问你是否同意脚本更改你的数据，你选择同意然后再次点击菜单运行就可以了。
好了，就是这么简单。如果你想Geek一把，尝试一下用电子表格浏览twitter吧。
如前所述，写这个脚本只是为了熟悉一下google apps script,所以这个电子表格客户端还很简陋，很多功能都没有。但也不排除那天有时间的话更新一些新功能。如果有了新功能你只需要打开这个文件重复上面的操作就可以了。当然，如果你对google apps script有兴趣，可以在"Tools > Scripts > Script editor..."查看源码，然后自行完善。
ps.在google 电子表格被墙的情况下可以试试用https打开。
]]></description>
		<link>http://blog.cuoluo.net/2010/03/make-your-google-spreadsheet-to-twitter-client/</link>
			</item>
	<item>
		<title>How to send a private tweet</title>
		<description><![CDATA[习惯了用twitter记录自己的一些想法.但有时候想法很不成熟或者只想写下一些私事，所以并不是所有的tweets都适合公开。可是twitter并不支持private tweet,要么全部公开，要么全部私密。为了解决这个问题，我以前的做法是重新申请一个twitter账号，把tweets设为保护状态，然后所有不想公开的tweets就用那个账号发布。这样做起来并不方便，我只想用一个账号来保存我所有公开和不公开的tweets。于是便有了private tweet这个小工具。它的原理很简单，所谓的private tweet就是自己给自己发的私信，但是这在twitter的web页面上是无法做到的，只能通过api,所以我需要写一个小工具。如果有时间的话，下一步要完善的就是提供显示自己所有private tweets的功能.
update:花了一个多小时，view my private tweets功能已经完成。

http://privatetweet.appspot.com
]]></description>
		<link>http://blog.cuoluo.net/2010/03/how-to-send-a-private-tweet/</link>
			</item>
	<item>
		<title>gmail style html editor</title>
		<description><![CDATA[正在做一个google风格的web应用，前端需要用到富文本编辑器,于是在KindEditor的基础上山寨了一个gmail风格的html editor.山寨到了一半，Closure Library横空出世，有了官方的版本，我也就没有必要自己做了。不过我想也许有人用的着，还是贡献出来吧。下面就是这个做了一半的gmail html editor，代码都是开源的如需完善请自行修改。


demo
]]></description>
		<link>http://blog.cuoluo.net/2010/01/gmail-style-html-editor/</link>
			</item>
	<item>
		<title>在Linode VPS上安装pptp VPN</title>
		<description><![CDATA[pre{font-family: "ff-meta-web-pro-1", "ff-meta-web-pro-2", Helvetica, Arial, sans-serif;word-break:break-all;font-size:20px;}
应apple4.us之邀介绍一下如何在Linode VPS上安装VPN server.我自己的VPS装的是Ubuntu 9.10,所以以下操作全都是针对Ubuntu 9.10操作系统的。
首先，你要确保自己的vps已经按照Getting Started With Linode这篇文章做好了初步的准备工作。对安装VPN而言，需要注意的就是设置好更新源。编辑你的/etc/apt/sources.list文件，去掉"##universe repositories"之后所有行的注释，让文件变成和下面的一样。当然，这一步需要用sudo或者在root下来完成，后面所有的命令都是如此。
## main &#38; restricted repositories
deb http://us.archive.ubuntu.com/ubuntu/ karmic main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic main restricted

deb http://security.ubuntu.com/ubuntu karmic-security main restricted
deb-src http://security.ubuntu.com/ubuntu karmic-security main restricted

## universe repositories
deb http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic universe
deb http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ karmic-updates universe

deb http://security.ubuntu.com/ubuntu karmic-security universe
deb-src http://security.ubuntu.com/ubuntu karmic-security universe
接着用下面的命令更新你的软件包数据库
apt-get update
现在我们可以正式安装VPN [...]]]></description>
		<link>http://blog.cuoluo.net/2009/12/install-pptp-vpn-in-linode-vps/</link>
			</item>
	<item>
		<title>Search Tweets By Date Range</title>
		<description><![CDATA[我在上一篇blog(似乎是很久很久以前的事了)中谈到，如果twitter想要当做云，能够记录各种log,那么首先要提供的一个功能就是特定时间段的信息搜索。但是twitter似乎并不想往这个方向努力，虽然提供了搜索服务但却不能满足那个小小的要求。你要是想查看某个话痨在上个月某一天的推，那要"more"的多么痛苦。
既然twitter不提供，那我们自己把他实现出来。这就是searchTweetsByDate.com的由来。目前功能还很有限并且必须要翻墙才能正常使用。下一步就是慢慢的完成这些todolist,如果有时间的话。
to do list

支持墙内用户使用
增大可搜索的时间范围(目前只支持从2009/11/02开始的范围内搜索)
支持用户home timeline的搜索(目前只支持用户的user timeline)
API
让可搜索的时间范围精确到秒
...

@Lamengao
]]></description>
		<link>http://blog.cuoluo.net/2009/11/search-tweets-by-date-range/</link>
			</item>
	<item>
		<title>twitter发展的一种可能性</title>
		<description><![CDATA[我眼中的twitter就是一个半实时的动态信息发布和接收平台。从这个角度考虑,任何能够产生动态信息的地方都可以使用twitter。所以每一个twitter账号背后不一定是human，可以是服务器的系统日志，可以是个人交易的支付记录，当然也可以是blog的更新(只要你愿意，甚至可以把twitter当做rss阅读器。)。为如此众多的动态信息都创建一个twitter账号实在太麻烦。我希望twitter能够创建子账号，或者是给信息做标签，让信息能够更新到特定标签下。用户也可以只follow特定标签下的信息。这些概念都不新鲜，但如果twitter都实现出来潜力还是惊人的。
如果只要一个点击就能为任意一种动态信息创建一个twitter“账号”，那twitter的众多定义都将被改写。我可以创建自己网站的访问日志的twitter，我可以把自己商店的收银机连上twitter，让她记录我的每一笔营收。像这样把不同种类的信息集中放在twitter的好处在于，你可以在任意时间任意地点查看任意的一种记录,关键是你还可以分享出去还可以发布出去，只要你愿意。也许某一天FBI会要求twitter提供那个用户的账号信息来查看他是否偷税漏税。我就不相信twitter到了那一天还找不到自己的盈利模式。
twitter上的信息偏重于当前时间，而日历上的活动提醒之类的属于未来时间。如果twitter真要起到记录各种“日志”的作用，首先要提供的一个功能就是特定时间段的信息搜索。
我是个技术上的乐观主义者，什么服务都可以想得很美好，具体怎么走就看twitter自己了。
]]></description>
		<link>http://blog.cuoluo.net/2009/06/twitter-way/</link>
			</item>
	<item>
		<title>Fuck The GFW</title>
		<description><![CDATA[昨天(6月2日),GFW相继屏蔽了twitter,live.com,bing.com,hotmail,flickr等一大批国外网站。为的是提醒我们那个快要到来的日子。生在这个局域网内，每天都在猜测下一个倒下的是谁，这种感觉很坏。面对互联网上众多优秀的免费的或不免费的服务，我们要么不能用，要么不敢用。我还能说什么呢？Fuck The GFW
我梦想有一天，国内能实现真正的言论自由。我梦想有一天，互联网能够真正的互联。
]]></description>
		<link>http://blog.cuoluo.net/2009/06/fuck-the-gfw/</link>
			</item>
</channel>
</rss>

