文章检索
-
android api proxy C# CMake ExtJS Godaddy Google Code gtap iphone iPhone App js页面 linux opensuse twitter twitter for iPhone wordpress XHTML XML 二氧化碳排放量 互联网森林 凤凰 前田约翰 周太王 塑料瓶 姓 岳阳 开源 张家界 无效字符 来历 标签记账 氏 王学 电话骗局 简单法则 自由行 致命 致癌 节能灯泡 记账软件 设计方式 说法 长沙 马子 骗子
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.
twitter
- [博客] http://t.co/LyNbDVjn从消费成本看sns的下一个热点/ 从消费成本看SNS的下一个热点
持续关注
Categories
广而告之
Category Archives: 我爱开源
twiproxy – 基于GTAP 0.4的twitter API proxy
twitter终于封杀了basic auth,为了避免被拒之墙外,在Google Appengine上装了一个GTAP 0.4的版本,貌似Twitterrific可以用了,但Twitter的官方客户端还不能使用。 说起Twitter官方,那可是很纠结的一段。 最初还是tweetie的时候,特意买了一套,谁知不久twitter被封杀,tweetie不支持代理,等啊等,听说tweetie 2支持代理了,才发现之所以叫2原来是不能升级令要付钱的,嘿嘿,有点上当的感觉啊 后来,tweetie被twitter收购,变成官方,免费的客户端,高兴啊,赶快去下载,发现下的不能用,原来又升tweetie 3了,而tweetie 3只支持xAuth,比如GTAP这样的,只支持oAuth的也不能用。 没办法,偷懒不了,自己动手吧 说起xAuth,其实是oAuth的简单模式,和Basic Auth最大的不同是,不再传递用户名和密码,而是传递access_token和自签名数据,GTAP之所以不支持,是因为没有对oauth/access_token这条指令做支持。 所以,在GTAP上做了几处修改: 添加oauth/access_token这条指令的处理,将客户端发送过来的用户名/密码转换成access_token和access_token_secret 当客户端发送请求时,通过客户端发送的access_token获取access_token_secret。GTAP使用用户的密码对保存的access_token和access_token_secret进行加密,导致无法直接通过access_token获取access_token_secret,这本是安全机制,不过考虑到部署者完全可以通过log方式输出用户名密码或者token,所以改为明文存储。可能还有更好的办法,这里先偷个懒吧,反正一般都是自己部署的APP 增加了basic命令,按说起来,通过代理是完全可以支持原有的Basic Auth的客户端的,比如Chrome著名的插件Metrist,通过basic可以实现这个,但目前的测试结果比较奇怪,数据已经正常返回了,但Metrist只有偶尔可以获取到,不知道为什么 为了开发方便,在Google Code上重新构建了一个项目twiproxy,采用和GTAP一样的开源协议,有兴趣的可以去看看,也欢迎提供修改建议:) 最后列一下twiproxy的功能 支持原有GTAP 0.4的功能 支持xAuth模式,即支持twitter for iPhone登录 支持原有basic auth客户端(未确认) 地址: twitter.com : xxx.appspot.com/ api.twitter.com : xxx.appspot.com/api basic auth : xxx.appspot.com/basic
又上了名字空间的套
在做一个XML的XSL,原XML如下: <?xml version="1.0" encoding="utf-16"?> <book version="5.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns="http://docbook.org/ns/docbook"> <info> <title>test</title> <author> <personname> <othername>Unknown</othername> </personname> </author> <bibliosource>Unknown</bibliosource> </info> </book> 制作的XSL: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="info"> <xsl:value-of … Continue reading
XHTML解析的实体问题
我在《集成Html Tidy》一文中说过使用HtmlTidy转换HTML以方便使用XML解析器解析,事实上,并没有那么简单,随便解析几个XHTML就会碰到解析异常的问题,错误是“Reference to undeclared entity ‘nbsp’”。 查找原因发现,在XML中,除了< > & ' "以外,其他如 之类的实体必须通过DTD或其他方式定义。Html Tidy转换出的XHTML并没有显式定义这些实体,而是采用类似以下的定义: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 在这个DTD中会定义如&nbps;之类的实体,但由于需要到W3C的网站上去获取这些定义,所以XML解析器默认会忽略这些定义,就导致没有定义的异常。 不过在.net中提供了XmlResolver类帮助处理这种情况,而我们需要做的就是重写这个类,并将XHTML中定义的DTD重新指向我们指定的某个位置,如上的情况操作如下: 1. 下载http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd 2. 将下载的dtd作为资源放入程序中 3. 重写XmlResolver类,增加判断,当传入的路径为"-//W3C//DTD XHTML 1.0 Transitional//EN" 时就以流方式返回资源中的DTD 4. 创建XmlReader,并将重载的XmlResolver设置在XmlReader中 5. 使用该XmlReader装载解析XHTML 完成以上步骤,再解析XHTML就不会再有异常出现了。当然XHTML的DTD定义不止这一种,为了兼容起见,最好将所有的DTD定义都按以上的步骤加入程序中。 具体实现代码可以参考我的开源项目:Page Releaser
UrlRewritingNET实现URL Rewrite
在asp.net中实现URL Rewrite,除了IIS本身带的URL Rewrite Module以外,还有很到其他的解决方案,比如UrlRewritingNET。 UrlRewritingNET号称除了文件扩展名Rewrite需要IIS支持以外,其他所有操作都不需要IIS设置,这当然对虚拟主机的网站来说是非常便利的。 下面看看怎么来部署UrlRewritingNET: 1. 首先将下载的dll放置到bin目录 2. 修改Web.config,增加UrlRewritingNET的相关配置如下: <?xml version="1.0"?> <configuration> <configSections> <section name="urlrewritingnet" requirePermission="false" type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter"/> </configSections> <urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07"> <rewrites> <add name="category" … Continue reading
HTML页面之间的参数传递的局限性
动态网页传递参数比较简单,如果想在HTML之间传递参数就需要一点技巧,摘录两种方法如下: 采用字符串解析的: /* *函数功能:从href获得参数 *sHref: http://www.cscenter.com.cn/arg.htm?arg1=d&arg2=re *sArgName:arg1, arg2 *return: the value of arg. d, re */ function GetArgsFromHref(sArgName) { var sHref= document.location.href; var args = sHref.split("?"); var retval = ""; if(args[0] == sHref) /*参数为空*/ { … Continue reading
实现HTML的简单压缩
PageReleaser需要一种HTML的压缩算法,Google了很久,发现如果只是简单去除空白和注释的话,使用XLinq就可以轻易的实现 先看看MSDN是怎么说的: 一种常用方案是读取缩进的 XML,在内存中创建一个没有任何空白文本节点(即不保留空白)的 XML 树,对该 XML 执行某些操作,然后保存带缩进的 XML。在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。这是 LINQ to XML 的默认行为。 另一个常见的情况是读取和修改已经有意缩进的 XML。您可能不想以任何方式更改这种缩进。若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。 简单的说,XDocument载入时,默认使用LoadOptions::None,自动去掉XML的空白;保存时,默认使用SaveOptions::None,自动格式化XML。 也就是说,使用XDocument将一个HTML文档打开什么也不作就保存,其实等于实现了HTML的格式化。 而如果在保存时,使用SaveOptions::DisableFormatting参数,看似要保存XML的空白,由于载入时所有空白都被删掉了,其实等于删除了所有空白,于是去掉空白就这样实现了。 至于删掉注释也很简单,只是需要注意,一般页面嵌入JavaScript会使用注释节点包裹,需要例外处理。 整个HTML压缩代码如下: var nodes = from s in doc.DescendantNodes() where … Continue reading
开源项目:Page Releaser
使用js框架+Ajax模式的开发,总会造成大量的js文件导致网站传输效率降低,尤其在网络状况不佳的环境很容易出现整个网页无法使用,就如IE的那个经典错误,对象不支持此属性或方法。 js压缩合并的工具很多,我也基于JsMin做过JsMin#。不过因为调试的需要,仍然需要维护一个调试用得HTML,里面引用所有未压缩的js;再维护一个发布用得HTML,用来引用合并后的js。每次更新网页都非常不方便。 此后,开始构思更好的方法,于是有了Page Releaser的构想。 Page Releaser借鉴了C++中Release的概念,通过解析HTML提取js和css信息,并对它们进行压缩,合并,嵌入,再依照处理结果重新构建HTML,最终生成一套完整的发布版本。之所以叫Page,是因为它每次只处理一个HTML。(本来打算叫WebReleaser,但多HTML会牵涉到资源网页间共用的问题,比较复杂,自动化结果会很难评估。不过好在,像ExtJS这样的大型框架,任何应用一个HTML就够了:) Page Releaser的终极目标是将包含一个HTML,N个JS,N个CSS,N个图片的网站,最终压缩成一个HTML和一个图片,以最大的减少浏览器因为建立连接造成的效率浪费。 当然,浏览器建立最少的连接并不意味着网站就有最优化的效果,比如一张1000*1的图片和一张1*1000的图片无论怎么合并,生成新图片都会比原来的图片大得多,所以Page Releaser也提供各种参数以便产生针对性的最好效果。 目前放出的版本只是实现了js的压缩,合并,嵌入以及css的合并,嵌入,其他功能将逐步加入 Page Releaser安装 当然按照惯例,小工具一概开源,大家也可以自行下载代码编译: Page Releaser源码
集成Html Tidy
解析HTML最大的问题是不能使用标准的XML解析器,虽然很多新的网站开始逐步改用规范的XHTML,但只有出现一个<br>就会导致整个解析过程的失败,而好的HTML解析器却不是那么容易找到的,所以转换或许也是一个很好的选项 在google这个问题的时候,发现一个好东西HTML Tidy,W3C出品的,开源的小工具,可以将HTML转换成XHTML或XML HTML Tidy提供了编译好的exe文件,所以最初尝试在程序中通过进程方式直接调用,转换的速度很快,不过会出现一个控制台的黑窗口,大量处理时会比较麻烦。 后来查找Tidy的衍生库,发现EfTidy.net。EfTidy.net采用Warp技术,将C++的库直接引入到C#的项目中,用C#调用非常简单。可惜的是,这明显是老外的作品,没有考虑编码的问题,中文会被自动转换为类似#C2C8;这样的Unicode编码,显然这是无法忍受的。 之后又找到了Tidy的纯C#代码编写的库Tidy.net,虽然版本有点老且很难随Tidy的源版更新,不过毕竟是同源的C#代码,什么编码,语言之类的问题统统不存在,于是集成转换的问题解决了。 P.S. Tidy有很多各种各样的库,还有如Mark Tidy之类的,各有特点,大家有空可以试试,好用的话记得推荐给我哦:)
开源的私人项目???
今天在Google Code上逛的时候,碰到一个项目,介绍就写了八个字,“私人项目,非请勿入”。 不禁想到之前参加一个软件方面的培训,吃饭时,一个同行问大家,除了Google Code还有什么方便的代码库没有? 当时推荐他SourceForge,他细致的问了半天,最后得出不能用的结论,原因是无法限制别人下载他提交的代码 疑惑。。。半天才明白他的意思。 原来他需要和外网的人共享代码库,于是想用开源平台的代码库,但又不想开放代码。 这么用开源平台,无语中。。。。。 类似Google Code这样的在线代码库的确非常方便,我为了享受这种便利提交了不少代码,当然一旦提交,项目就不再“私人”了,于是索性开源。 但像文章开始的八字声明,就如同穿着“新装”的皇帝一边自己大大咧咧的裸着,一边又警告别人非礼勿视,未免有点可笑了。
我的开源项目
受惠于开源太多,开放一些小部件也算是某种回馈。其实,很多时候并不是开不开的问题,而是怎么开的问题。这里要特别感谢Google Code提供了如此简单便利的网站,让我很多时候不禁的想,不开源项目怎么管理:) 以下是目前已存在项目的清单,Google Code上的项目并不一定提供Release的版本,请大家自行使用SVN工具获取代码,如有问也题可直接在此留言,谢谢! 网站: My Tools Package – 提供一些小工具的Release版,不定期更新 Google Code项目: mytools360 – My Tools Package网站工具的源码 jeebookstore – 基于ExtJS的简单文档管理系统 sscs – 一个基于SDL的界面库