Android developer网站上给出了Android Activity生命周期的状态图:
Hexo博客的多分支管理方法
我的博客自开博以来一直使用Hexo框架,部署到GitHub Pages上。由Hexo生成的静态页面放置在GitHub仓库nettee.github.io里,这样你们就可以访问我的博客了。
但是,我有可能会在多个机器上写文章,Hexo项目里的Markdown文件和图片一样需要管理。一开始我是新开了一个GitHub仓库Hexo.y(如果这个链接打不开,说明这个过时的仓库已经被我删掉了),设置好gitignore之后,把Markdown文件和图片托管到上面。但是本来博客就有一个仓库了,这样又建了一个仓库,总觉得怪怪的。于是我灵机一动,使用Git的多分支策略管理博客内容。
nettee.github.io仓库中,博客的静态页面放在master分支上,而Markdown文件放在blog分支上,两个分支互相之间不会进行合并。本机写博客的时候,就在blog分支下写Markdown文件,使用Hexo生成静态页面后,部署到远程(GitHub上)的master分支。而博客源文件在blog分支管理后,和远程的blog分支进行同步。本地从来不处理master分支。这样两个分支就可以相安无事地共同呆在一个仓库里了。
最后碎碎念一点。我将博客文件用Git进行管理的初衷是要同时在我电脑上的Windows系统和Ubuntu系统上写博客。原本在Windows系统上写博客的时候,因为Windows的cmd字体非常难看,又和Linux命令不兼容,我一直是在Git Bash里输入各种Hexo命令,不管是hexo new
,还是hexo s
,都要等待非常长的时间。这让我一度以为Hexo的效率有问题。今天第一次在Ubuntu系统里写博客,hexo new
在1秒的时间就响应了,而不是在Windows系统上的几十秒。我不禁感慨,使用Linux真的能把工作效率提高很多。
SQLAlchemy架构笔记
这篇笔记主要是为了帮助读者更好地理解SQLAlchemy的架构。虽然原文中已经将SQLAlchemy架构的大部分讲得很全面了,但原文主要是介绍SQLAlchemy的架构,很多部分并没有详细解释。这篇笔记到了补充说明的作用。本笔记共10个小节,和原文的10个小节是完全对应的,读者可以在阅读本笔记的过程中随时参照原文。
SQLAlchemy的代码比较难以阅读,这是由它自身的特点决定的。首先,SQLAlchemy不是一个应用软件,而是一个Python Library。由于SQLAlchemy是一个数据库工具,它必须要适配各种主流的数据库,因此含有大量处理环境上下文的代码。其次,SQLAlchemy用Python书写,Python是动态类型的语言,变量不需要声明,而且可以在对象上添加任意的属性,这给阅读代码带来了很大的难度。总体来说,SQLAlchemy的源代码读起来非常困难。因此,这篇笔记中没有太多对源代码的分析,重点在于分析SQLAlchemy的架构层次,理解设计的思路、动机,并阐释其中使用的模式。
1. 数据库抽象面临的挑战
原文中给出了一个概念,叫做“对象-关系阻抗失配”(object-relational impedance mismatch)问题。这个概念的含义是这样的:
“对象-关系阻抗失配”(object-relational impedance mismatch),有时候叫做“范式不匹配”(paradigm mismatch),指的是对象模型和关系模型不能很好地共同工作。关系数据库系统用表格的形式表示数据,然而面向对象的语言,如Java,是用相联系的对象来表示的。用表格状的关系数据库加载和存储对象,暴露了下面五个不匹配的问题。
开源软件架构之SQLAlchemy翻译
本文翻译自The Architecture of Open Source Applications第二卷第20章。
原文:SQLAlchemy at Architecture of Open Source Applications
翻译者:nettee
SQLAlchemy诞生于2005年,是一个Python语言的数据库工具包和对象关系映射(ORM)系统。在一开始,SQLAlchemy是一个提供使用Python数据库API(DBAPI)处理关系数据库的端到端系统。它的核心特性包括顺畅地处理复杂的SQL查询和对象映射和“工作单元”(unit of work)模式的实现。这些特性使得SQLAlchemy能够提供高度自动化的数据库系统,因此SQLAlchemy在很早期的几个版本里就受到了大量的关注。
SQLAlchemy从一个小的、实现粗糙的概念开始,通过一系列的修订迅速进步。在用户技术不断增长的同时,内部架构和外部API也在迭代更新。在2009年1月0.5版本面世时,SQLAlchemy已经在大范围的生产部署后稳定了下来,到了0.6版本(2010年4月)和0.7版本(2011年5月),架构和API的改进使得生产最高效和最稳定的库成为可能。在写作本文时,SQLAlchemy已经在多个领域中被大量组织所采用。在很多人眼中,它已经成为Python关系数据库处理事实上的标准。
使用Python编程时的一些思考
前两天做数据挖掘的作业,是我第一次用Python写一个有点规模(两百多行)的程序,第一次真正使用Python的类和namedtuple,在编程的过程中对Python语言产生了不少思考,在这里先记录下来,以后有时间的时候就仔细探究一下。
1. Python的面向对象机制
Python类的语法有一个很鲜明的特征,就是每个方法的第一个参数都需要是self
,类似于Java中的this引用。我在编程过程中发现,无论何时引用一个类内的成员或方法,都需要通过self
来访问,即self.xxx
。我有些怀疑,Python类的语法是否只是一个语法糖,解释器直接将方法调用转化为一个函数,而由于程序员已经在方法的第一个参数上写上了self
,解释器都不需要再改变方法的参数列表了。而Python的类不支持访问控制(public/protected/private),似乎也印证了这一点。
2. 列表推导和生成器
列表推导(list comprehension)是Python里很棒的一个语法,也是我喜欢Python的原因之一。列表推导可以实现函数式编程中map, filter, apply的功能,而且更加清晰明了。关于列表推导,我很想一探背后的原理,列表推导是用for循环来实现的吗?列表推导会产生多少临时变量?了解这些之后,才能更好地使用这个功能。
列表推导和函数式编程一样都有一个缺点,它返回的是一个全新的列表,在数据量很大的时候,这会降低不少性能。所以在对很大的数据进行操作的时候我也不愿意使用列表推导。不过生成器(generator)是一个很好的解决方案,它不会一次生成所有的结果,只会在被迭代的时候每次产生一个结果,有种惰性求值的感觉。生成器的写法和列表推导一样,只需将方括号变为圆括号。在作为函数参数时,括号还可以省略,像:
可扩展的Web架构和分布式系统
本文翻译自The Architecture Of Open Source Applications第二卷第一章。
原文:Scalable Web Architecture and Distributed Systems
翻译:nettee
开源软件已经成为构建一些大型网站重要的基础材料。在这些网站不断发展的同时,和架构相关的最佳实践与指导原则也随之出现。这一章致力于考察设计大型网站时的一些关键问题,以及用来达成这些目标的一些基础材料。
这一章主要关注Web系统,其中一些内容同样适用于其他的分布式系统。
1.1 Web分布式系统设计的原则
构建和运行一个可扩展的网站或应用究竟意味着什么?最原始的网站只是让用户能通过因特网连接到远程的资源——将资源(或对资源的访问)分布在多个服务器上,便能使网站变得可扩展。
Go语言对面向对象的支持
用HTML5 Canvas实现一个贪吃蛇小游戏
事情的缘由是这样的,上上学期我在课程作业中实现了一个Windows控制台下的“飞机大战”小游戏,做完之后感觉这样一个小游戏实在是过于简陋。在上个学期学习了Java Swing图形界面编程之后,我计划着使用Swing重写一个飞机大战小游戏,但一拖再拖,一直没有动手。
今年年初决定开始之后,我查阅了Swing和JavaFX(一个更年轻的Java图形界面框架)的资料,感觉到JavaFX似乎一直是不温不火,再加上GUI编程代码的极其繁琐,我心中产生了动摇。忽然意识到现在用户界面已经是移动端和Web的天下了,我应该在Web端开发游戏才是。很快我找到了HTML Canvas,在没有写过JavaScript代码的情况下,我边摸索边开工,居然在一天的时间里就写出了一个基本成型的贪吃蛇游戏。
Python Argparse Tutorial 翻译
本文翻译自Python官方documentation, Python 版本 3.3
翻译:nettee
这份教程是对 argparse
的简要介绍, argparse
是 Python 标准库中推荐使用的命令行解析模块.
注意: 与 argparse
完成相同任务的模块还有 getopt
(与C语言中的 getopt()
函数用法相同)和已经被废弃的 optparse
. 另外 argparse
是以 optparse
为基础的,因此二者在用法方面很相似.
一些概念
让我们通过使用 ls 命令来展示在入门指引中我们将要探讨的命令行解析功能:
Hello World
很早以前就知道用Github Pages可以搭博客,不过竟然神奇地一直没有搭出来。前两天受到了zefange做的“两个”的刺激,又寻找Github博客的搭建方法。这次用了Hexo这个框架,很快就完成了第一个Hello World。
暂时用的Hexo的默认主题,等我有精力了,就换一个美好一点的主题。
说得不宜过多,此为博客开篇。