2014年3月29日星期六

详解并改进Linux终端的clear命令

clear做了啥? clear做的工作很简单:把待输入的下一行移动到左上角。 所以你看,它根本没有真正对终端的内容进行清除,只不过是将其藏起来了。 如何实现clear Linux的终端控制序列 Linux控制台实现了VT102和ECMA-48/ISO 6429/ANSI X3.64终端控制的子集,详见:console_codes - ubuntu man page。 Linux使用ANSI escape code方式来描述其控制序列,详见:ANSI escape code - Wikipedia。 简而言之,使用ESC符号开始的一串字符序列会被解析成控制序列,多数控制序列由CSI(control sequence introducer)开始,由ESC [来表示。 使用printf命令实现clear printf支持终端控制序列,其中ESC可以用\e转义符表示。 console_codes - ubuntu man page中给出了一个表(节选): Sequences ...

2014年3月23日星期日

使用Xshell登录到Koding

Koding简介 注册地址:koding.com Koding是一个在线开发环境,其为每个人提供了免费的计算能力和开发环境,目标是简化全球性的开发。Koding提供了免费的虚拟机和一个真实的Ubuntu OS终端,你能在其上开发你的代码,无论是Python,PHP, C++, C都是可以的。甚至于它们能够在全世界任何(无须梯子)的地方来访问,并进行团队开发。 使用Xshell来登录你的VM 网页版终端提供的功能有限,推荐使用Xshell来进行远程登录。 配置会话 安装好Xshell,现已有中文版。 在Koding上设置你的SSH keys。 没有SSH keys的话需在Xshell中打开菜单栏工具中找到新建用户密钥向导,设置类型为RAS,长度为1024,来生成一个新的SSH keys。 与你的VM建立一个SSH链接,用于端口转发。 新建一个会话,点击连接选项,主机改为ssh.koding.com。 切换到用户身份验证页,设置好Public Key(SSH Keys)。 切换到SSH,勾选使用ZLIB压缩和不分配终端。 切换到隧道,添加如下转移规则(斜体可修改): 类型(方向):Local(Outgoing) ...

2014年3月15日星期六

Python的流重定向要点

起因 今晚在写LYCBot的时候需要实现一个在独立环境中运行代码的模块YCPY,其中涉及到流的重定向问题,特此记录。 使用内存流 Python中没有C#的MemoryStream,但是有个类似的StringIO,提供类似的功能。 StringIO是一个类文件对象 StringIO提供了和文件相同的接口。 sys.stdout和sys.stderr使用StringIO进行重定向 代码如下: sout = StringIO.StringIO() serr = StringIO.StringIO() self.stdout = sout self.stderr = serr 当需要从两者中读取时,使用下列方法即可: out.getvalue() sys.stdin使用StringIO进行重定向 与前两者不同,sys.stdin需要读取,因此需要些特殊处理: sin = StringIO.StringIO() sys.stdin = sin sys.stdin.write(input_txt) sys.stdin.seek(0) 需要对sys.stdin进行一个seek到流起始位置的操作。 @LYC 转载请注明出...

2014年3月8日星期六

网页访问相关库使用总结

url解析相关 统一资源定位符(url) scheme://domain:port/[path][;params][?query][#fragment] scheme:协议类型。 domain:域名,如:mrlyc.blogspot.com。 port:端口号,默认是80。 path:资源在服务器的逻辑路径,使用/分割。 params:特殊参数,很少见,如:http://en.wikipedia.org/wiki/Robotics;Notes。 query:查询字符串。以?字符为起点,每个参数以&隔开,再以=分开参数名称与数据,通常以utf-8的url编码,中文以%开头的16进制表示。 fragment:信息段,指定了后会定位到指定id的位置。 注意:url应先编码再合并,先拆分再解码。 urlparse模块 urlparse 参数: url:指定的url。 [scheme]:指定的协议。 [allow_fragments]:是否允许指定信息段。 接受一个url字符串并将其分割成对应的6个部分,返回一个6元组。结果访问方法有两种,下标访问和属性引用。 url = "http://www.noaurl.com:8080/index.html;params?name=query#main" p...

2014年3月3日星期一

哀悼昆明事件,本博客将黑白展示一天

事件追踪 折叠 新窗口打开 博客灰度效果实现技术 使用grayscale.js 项目网站:http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/ Demo:http://james.padolsey.com/demos/grayscale/ 动态配置 为了博客能够定时切换灰度效果和彩色效果,做了一个能够根据配置和时间切换的脚本。 切换脚本 function checkDateList(){ function parseDateLstItem(d_str){ return $.extend(['*','*','*','*','*','*'],d_str.split(/[-:\sT./]+/)); } function parseDateObject(){ var date = new Date(); var d_str = date.toISOString(); return parseDateLstItem(d_str); } var date = parseDateObject(); ...

2014年3月2日星期日

用gae为你的blogger作反向代理

原因 Blogger是个好东西,但是因为一些奇怪的原因,在中国总是访问不了。 偶尔看到一个博文:《利用GAE给Blogger做一个国内可以访问的镜像站》,十分高大上。 因此跟着文章思路瞎琢磨了一番,仅此记录。 bs2grproxy 项目主页:https://code.google.com/p/bs2grproxy/ 源代码:http://bs2grproxy.googlecode.com/svn/ 工具下载地址:https://code.google.com/p/bs2grproxy/downloads/list 工具备份:http://yunpan.cn/Q4qLULxwErWKm 作者的描述: How to use 1. Download the source package 2. Modify app name in app.yaml 3. Upload the app Enjoy 由此看来,这是一个基于GAE的轻量级反向代理程序。 前期步骤 不多赘述,引用Luke在博文的步骤,略修改。 步骤 1. 在GAE中新建立一个空的app,并记录下app名称。 2. 下载资源包 (这部之前你应该已经做到了)...

Logging 模块学习笔记

快速开始 日志级别 权值 CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 NOTSET 0 除NOTSET外,logging模块提供了与级别名称对应的小写函数以便快速调用。 样例代码: import logging def main(): logging.critical("critical") logging.error("error") logging.warning("warning") logging.info("info") logging.debug("debug") if __name__ == '__main__': main() 输出: CRITICAL:root:critical ERROR:root:error WARNING:root:warning 从输出可以注意到WARNING以下级别的信息并没有打印出来。 原因在于logging默认的级别是WARNING,可以通过logging.basicConfig函数或修改默认Logger对象来改变级别。...