【引文】如何用Python往Google Spreadsheet上写数据
现代企业里,数据决定着方向,人们都想随时看到各种报表。很多项目可能都需要dashboard一类的工作,把分散的数据变成一些能随时查看实时数据的图表,这个工作有两个环节:
把数据汇集起来,放入CSV或者数据库
一个服务器端的程序能够读到这写数据,根据需要生成在线的图表 (离线的也可以,那样每次人们想看这些图的时候都会来麻烦你,如果你在度假,他们会想敲开你的电脑)
第一步可以通过定期跑些脚本完成,但是第二步有时候就不太容易了,如果你希望你的图表能够让所有人方便随时查看,最方便的给出一个URL能让人随时访问,Google的在线文档可以提供一个简单的解决方案。
但是,如何将数据自动弄到在Google spreadsheet 上呢?手动的copy/paste是一个方法,但是很费人工,最简单的方法就是写个脚本把这个流程自动化。如何将数据写进Spreadsheet (在线表单)呢?请参考下文:
Write to a Google Spreadsheet from a Python script
注:这是个搜索方面比较大拿的Googler的博客。
资源推荐: Google Code University
如果你的专业课里有过不少计算机科学之类的内容,你可能还记得很多中文课本不太好读,其原因一方面有可能因为是课本里的语言(符号)粗制滥造,另一方面有可能是因为你的思维方式不适应课本里的内容。
我推荐所有能看懂英文的读者多去搜索一下英文世界里的教材,从而能够摆脱劣质教材或语言因素所带来的束缚。为什么推荐英文教材呢?大家可以参考一下英文教材编写者(计算机科学界大儒,图灵奖得住) Dijkstra对于自己写作上的要求:
At a given moment, the concept of polite mathematics emerged, the underlying idea of which is that, even if you have only 60 readers, it pays to spend an hour if by doing so you can save your average reader a minute…
翻译:任何时候,你(作者)在书中要解释一些带有数学成分的概念,你(作者)应该有这样的理念:哪怕这个内容只有60个读者,(作者) ...
读后感:房间里的大象:Google文化成为主导
一篇有关Google在互联网市场已经造成垄断事实的文章。
这里有个有意思的英文常用表达: elephant in the (living) room (房间里的一只大象),一般用来表达事情已经大到没办法睁一只眼闭一只眼了…例如:
丈夫开始拿单位里年轻的姑娘的照片当壁纸
公司虽然已经没有说要裁员,但是已经开始停止供应免费的厕所手纸
我再举例子可能就有人要扔砖了
互联网公司(不久的将来会延伸到很多非互联网公司)的成功,已经越来越依赖于自己能不能被搜索到,不能被搜索到的网页其实也就相当于不存在。而文中所点到的是一个大多数人已经知道的事实,那就是Google已经成为这个渠道无可厚非的“独裁者”。如果你是一位网站管理员并有系统的方法(例如:Google Analytics) 统计用户的来源,你大概会明白这其中的比例 (如果你没有统计方法,估计你在向管理层要预算的时候很难量化)。下表是一个叫 Stack Overflow的网站统计的一个月内访问自己网站的用户中搜索用户的分布:
Search Engine Visits
Google &n ...
读后感:真正编程的力量
读到 coding horror (不知道中文翻译是什么,“代码恐慌”?) 中的文章 Real Ultimate Programming Power
文中讲到了软件开发中的方法论和其的演化,但是最让人觉得有意思的是两个引述:
The majority of developers do not suffer from too much design patterns, or too much SOLID, or agile, or waterfall for that matter. They suffer from whipping out cowboy code in a pure chaos environment, using simplistic drag & drop, data driven, vb-like techniques.
翻译: 让大多数软件开发者痛苦的,不是过多的设计模式,过多的SOLID(见注解), 过多的敏捷开发,或者瀑布模型;让大多数开发者痛苦的是在混乱的环境中用低级方式除去代码仙人留下来的古怪代码(好吧,这是我对cowboy ...
如何自己写一个网络爬虫
这里是维基百科对网络爬虫的词条页面。网络爬虫以叫网络蜘蛛,网络机器人,这是一个程序,其会自动的通过网络抓取互联网上的网页,这种技术一般可能用来检查你的站点上所有的链接是否是都是有效的。当然,更为高级的技术是把网页中的相关数据保存下来,可以成为搜索引擎。
从技相来说,实现抓取网页可能并不是一件很困难的事情,困难的事情是对网页的分析和整理,那是一件需要有轻量智能,需要大量数学计算的程序才能做的事情。下面一个简单的流程:
在这里,我们只是说一下如何写一个网页抓取程序。
首先我们先看一下,如何使用命令行的方式来找开网页。
telnet somesite.com 80
GET /index.html HTTP/1.0
按回车两次
使用telnet就是告诉你其实这是一个socket的技术,并且使用HTTP的协议,如GET方法来获得网页,当然,接下来的事你就需要解析HTML文法,甚至还需要解析Javascript,因为现在的网页使用Ajax的越来越多了,而很多网页内容都是通过Ajax技术加载的,因为,只是简单地解析HTML文件在未来会远远不够。当然,在这里,只是展示一个非常简单的抓取, ...
如何上网觅无踪
Tor是一个是开源项目,网址http://www.torproject.org(很遗憾,这个网站因为GFW,在中国大陆你无法访问,),TOR这个项目,旨在把这个世界上所有的代理服务器或是使用Tor的这各个客户端串在一起,形成一个虚似的网络。
这是一个分布式的,通过一种P2P技术构建的网络。这个技术很像是BT或是电驴所使用的技术。不过,Tor 的目标是抵御流量分析,流量分析是一种对网络的监视行为,这种行为会威胁个人的匿名与隐私,商业活动与业务关系的保密和国家的安全,打破网络屏蔽。
也就是说,这是一种可以保护你私人上网信息的技术。你每次请求网页你都会通过第三方,每一次你都会使用不同的路由,不同的IP地址,从而达到你在网上的行踪无人可觅。
这是我推荐你下载一个三套件,Vidalia Bundle,其中包括,Vidalia, Tor 和 Privoxy,也是属于Tor这个项目。你知道的,所有的开源项目都会互相借鉴,Tor也不例,除了自己的东西,同样也会借鉴别人的项目。
安装后,你可以在你的开始菜单中找到“Vidalia Bundle”,然后,请先启动Privoxy,然后启动To ...
Fork 系统炸弹
这个炸弹很简单,就是一个命令行,如下所示:
:(){ :|:& };:
在此,我严重警告你,请不要在你的Unix/Linux或Cygwin的Shell下执行这个命令。否则,这个命令会不停地fork子进程,直到你的整个系统无法响应。
再次警告你,请不要执行这个命令,除非你想重启你的系统。
101个设计模式
所以设计模式,实是是一种方法,一种为了解决某种或某类物定问题所使用的设计模型。据说,在编程语言方面有100多种设计模式,而在现实生活中,传说有上成千上万个模式,比如写书有写书的设计模式,写武侠的一种,言情的另一种,连官方的新闻稿件也有。
言归正传,这个站点(http://sourcemaking.com/design-patterns-and-tips)是向大家着力推荐的讲解编程方面设计模式的网站,除了GoF那经典的23个三大类的设计模式,还有N多的其它种类的设计模式。一共101个,最重要的是,它的这101个设计模式的写作模式如下:
模式的意图
要解决什么样的问题
模式的讨论
模式的结构
模式的业务示例
实现模式的Checklist
模式的规则
代码示例(包括各种语言,如:Java, C++, PHP, Delphi…)
时间1234567890
“At 11:31:30pm UTC on Feb 13, 2009, Unix time will reach 1,234,567,890.
Where will you be at this momentous second?” – from Bell Labs
在下周五或周六的某一时间,计算机的时间戳(TimeStamp)为变成奇妙的1234567890,而这一天就是——格林威治时间:2009年2月13日 11:31:30 。
当然,因为这个时间在地球上某些地方是13日,某些地方是14日,不同的时区可能会不一样。不过,你可以使用Unix/Linux 下的Perl运行一下这个命令你就知道你的当地时间了。
perl -e ‘print scalar localtime(1234567890),”\\n”;’
对于中国GMT+8(东八区)的时间如下:2009年2月14日 早上7点31分30秒,你会在这一时刻干什么?你会在某个地方做点什么事庆祝一下吗?或是你会因为今天是情人节而在这个时间给你的爱人发个短信吗?呵呵。
不过,西方某些迷信的还懂编程的朋友们开 ...
结对编程的利与弊
结对编程(Pair-Programming)可能是近年来最为流行的编程方式。所谓结对编程,也就是两个人写一个程序,其中,一个人叫Driver,另一个人叫Observer,Driver在编程代码,而Observer在旁边实时查看Driver的代码,并帮助Driver编程。并且,Driver和Observer在一起时可以相互讨论,有效地避免了闭门造车,并可以减少后期的code review时间,以及代码的学习成本。
有实验证明,平均下来,结对编程所花费的时候比单人编程增加了10%,但也会比单人编程减少15%的代码BUG。如果再算上后期代码的维护和学习成本,结对编程比单人编程更有效率,还更为节省成本。无论是对开发团队还是对于Business,结对编程都会是非常不错的Programming Practice。
下面是一些结对编程的优点:
程序员互相帮助,互相教对方,可能得到能力上的互补。
可以让编程环境有效地贯彻Design。
增强代码和产品质量,并有效的减少BUG。
降低学习成本。一边编程,一边共享知识和经验,有效地在实践中进行学习。
在编程中,相互讨论,可能更快更有效地解决 ...
Java书籍Top 10
下面是Java Inside上推荐的十本不错的Java书籍。(文章来源)
1)Java Language Specification, Third Edition (by James Gosling)
本书由Java技术的发明者编写,是Java TM编程语言的权威性技术指南。如果你想知道语言之构造的精确含义,本书是最好的资源。
中文版链接:《Java编程规范》
英文版链接:《The Java Language Specification (3rd Edition) 》
2) Effective Java , Second Edition (by Joshua Bloch)
本书介绍了在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案。通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰、健壮和高效的代码。.
本书中的每条规则都以简短、独立的小文章形式出现,并通过例子代码加以进一步说明。本书内容全面,结构清晰,讲解详细。可作为技术人员的参考用书。…
中文版链接:《Effect ...
PHP v5.3的新鲜玩意
PHP v5.3马上就要release了,这里让我们看看他有一些什么样的新特性。
1)_callStatic() magic 方法
class Foo
{
public static function __callStatic( $name, $args )
{
echo "Called method $name statically";
}
public function __call( $name, $args )
{
echo "Called method $name";
}
}
Foo::dog(); // outputs "Called method dog statically"
$foo = new Foo;
$foo->dog(); // outputs "Called method dog"
2)动态调用函数
class Dog
{
public function bark()
{
echo "Woof!";
...
你应该知道的20个Ajax技术(11-20)
11) 表单字段帮助信息的自动提示
增强WEB表单的Usability有很多很多的方法,在网上一搜一大片,然后有些时候,用户会被表单搞得很混乱,而且,不同的用户会对表单有不同的理解,其输入也是千奇百怪。所以,为表单字段增加一下自动帮助信息的提示绝对是非常不错的选择。这点在淘宝网上表现得比较出现。下面是一个非常简单短小的教程。
http://woork.blogspot.com/2008/04/improve-form-usability-with-auto.html
12) qGallery (演示)
虽然这不是一个有丰富功能的图库应用,但这绝对是一个非常优秀的Ajax应用。它基于Prototype Javascript框架(http://prototypejs.org/)制作,它对图片集的处理是非常优秀的。而且是它在节省网络带宽方面也很出色。本文写作之时,他目前还在开发阶段,还没有开放给大家下载。不过再等几个星期也就差不多该Release了。
13)Ajax 星式打分(源码,演示)
人们总是想给他们身连的事物表达他们的喜恶,所以有一个星式打分控件绝对 ...
你应该知道的20个Ajax技术(01-10)
1) TextboxList自动完成 (源码,演示)
这个控件主要来自Facebook吧,在网易的邮件里也能看到,还有hotmail等等,在文本框里输入文本不但可以出现相关数据的列表,而且选中后的字符串还会变成一个小图标。这个控件主要用在电子邮件中吧。
2) Ajax IM即时聊天 (源码,演示)
Ajax IM是一个很牛的即时聊天的客户端,你可以使用它制作一个Web-Based的即时聊天工具,这是一个非常强大的Ajax技术。
3)即时校验用户的输入(源码,演示)
以前,检验WEB表单的输入需要放在后台,因此,用户需要提交表单数据到后台才能知道是否所填写的内容有误。Ajax把实时检测表单输入域变成了现实,如今,我们在网上已经能看到很多很多的这样的应用,比如在你注册一个用户输入一个用户名的时候,不用提交整个表单到后台,你就能知道用户名是否已被人使用。
4)即时编辑器(源码,演示)
所谓即时编辑器就是双击一下网页上的文本,于是你就要吧编辑它了,编辑完后再单击一下别的地方,编辑过的内容就会被提交到后台保存。在这里,给出的示例是一个非常小巧的即时编辑器—— inline editor
...
Java EE6 初探
在tss上,Reza Rahman发表了一篇关于JAVA EE6《Java EE6 Overview》的文章,在文章里面他谈及一些关于JavaEE6草案的一些修改内容。
想JAVA企业级应用一路走来,从J2ee到Java EE5 在到即将要推出的Java EE6经历了一个由复杂到简单,由繁到简的过程。
Reza Rahman 文章说,Java EE6将会更简单,更轻量级,更易部署,Java EE6将会裁剪到Java EE5中不实用的部分。并且Java EE6将会为不同的用户群提供不同的规范子集。
回顾上一版本Java EE 5中,主要引入了以下改变:
1)引入了EJB3.0
2)引入了JSF作Tier framework.
3)使用JAX-WS2.0取代了JAX-RPC作新一代的SOAP的Web service API
4)使用POJO编程,零配置系统和自由的XML减轻了系统的复杂性。
而新版本的Java EE 6中,提供了一个更为简单,新型和完美整全的平台,并提供了非常丰富的技术,其包含WebBeans 1.0和JAX-RS 1.1,以及更为成熟 ...
50套Web开发图标
下面是号称最好的50套WEB开发的图标。来源:链接
其它相关的一些文章
30 Amazingly Creative Social Bookmarks Icon Sets ?
42 Amazing Photoshop and Illustrator Icon Design Tutorials ?
35 Free Icon Sets for your iPhone – Pimp it Up! ?
Top 12 Icon Design Video Tutorials ?
Top 5 Free Icon Editors for the Pro Designer ?
The Best Icon Search Engines and Features for Designers ?
Sweetie – Cute and clear icons
famfamfam – Mini Icons
Vector Icon Set
Facebook UI Icon Set
Fugue Icons
bwpx Icons
Sanscons Icon Set
Diagona Ico ...
C++ 对象的内存布局
07年12月,我写了一篇《C++虚函数表解析》的文章,引起了大家的兴趣。有很多朋友对我的文章留了言,有鼓励我的,有批评我的,还有很多问问题的。我在这里一并对大家的留言表示感谢。这也是我为什么再写一篇续言的原因。因为,在上一篇文章中,我用了的示例都是非常简单的,主要是为了说明一些机理上的问题,也是为了图一些表达上方便和简单。不想,这篇文章成为了打开C++对象模型内存布局的一个引子,引发了大家对C++对象的更深层次的讨论。当然,我之前的文章还有很多方面没有涉及,从我个人感觉下来,在谈论虚函数表里,至少有以下这些内容没有涉及:
1)有成员变量的情况。
2)有重复继承的情况。
3)有虚拟继承的情况。
4)有钻石型虚拟继承的情况。
这些都是我本篇文章需要向大家说明的东西。所以,这篇文章将会是《C++虚函数表解析》的一个续篇,也是一篇高级进阶的文章。我希望大家在读这篇文章之前对C++有一定的基础和了解,并能先读我的上一篇文章。因为这篇文章的深度可能会比较深,而且会比较杂乱,我希望你在读本篇文章时不会有大脑思维紊乱导致大脑死机的情况。;-)
目录
对象的影 ...
C++ 虚函数表解析
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。
关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。
当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。
言归正传,让我们一起进入虚函数的世界。
目录
虚函数表
一般继承(无虚函数覆盖)
一般继承(有虚函数覆盖)
多重继承(无虚函数覆盖)
多重继承(有虚函数覆盖)
安全性
一、通过父类型的指针访问子类自己 ...
C/C++返回内部静态成员的陷阱
在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼。这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员。如果你的内存是在函数内栈上分配的,那么这个内存会随着函数的返回而被弹栈释放,所以,你一定要返回一块函数外部还有效的内存。
这是一个让无数人困扰的问题。如果你一不小心,你就很有可能在这个上面犯错误。当然目前有很多解决方法,如果你熟悉一些标准库的话,你可以看到许多各式各样的解决方法。大体来说有下面几种:
1)在函数内部通过malloc或new在堆上分配内存,然后把这块内存返回(因为在堆上分配的内存是全局可见的)。这样带来的问题就是潜在的内存问题。因为,如果返回出去的内存不释放,那么就是memory Leak。或者是被多次释放,从而造成程序的crash。这两个问题都相当的严重,所以这种设计方法并不推荐。(在一些Windows API中,当你调用了一些API后,你必需也要调用他的某些API来释放这块内存)
2)让用户传入一块他自己的内存地址,而在函数中把要返回的内存放到这块内存中。这是一个目前普遍使用的方式。很多Windo ...
C++ STL string的Copy-On-Write技术
Scott Meyers在《More Effective C++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,直到你非要做的时候才去做。
当然,这种事情在现实生活中时往往会出事,但其在编程世界中摇身一变,就成为了最有用的技术,正如C++中的可以随处声明变量的特点一样,Scott Meyers推荐我们,在真正需要一个存储空间时才去声明变量(分配内存),这样会得到程序在运行时最小的内存花销。执行到那才会去做分配内存这种比较耗时的工作,这会给我们的程序在运行时有比较好的性能。必竟,20%的程序运行了80%的时间。
当然,拖延战术还并不只是这样一种类型,这种技术被我们广泛地应用着,特别是在操作系统当中,当一个程序运行结束时,操作系统并不会急着把其清除出内存,原因是有可能程序还会马上再运行一次(从磁盘把程序装入到内存是个很慢的过程),而只有当内存不够用了,才 ...