sqlite

sqlite是一个非常小的数据库,适合小的应用,或者是app之类的.

install

  • windows command line

下载SQLite, 下载的文件是sqlite-shell-win32-x86-3081001.zip

下载后将sqlite3.exe放入到windows系统的path路径中,或者在pathe路径中加入sqlite3.exe所在的目录。

  • windows SqliteBrowser

可以使用GUI工具, 这个应该更方便

Read More

git tips

how to pull after forced update

1
git reset origin/master --hard

this willResets the index and working tree. Any changes to tracked files in the working tree since are discarded.

当前工作目录的index和本地修改,都会被丢弃(丢弃的修改包括已经提交到本地的commit)

Read More

git reference

git ref

可以使用下面的命令查看ref

1
git show HEAD

HEAD vs ORIG_HEAD

HEAD is (direct or indirect, i.e. symbolic) reference to the current commit. It is a commit that you have checked in the working directory (unless you made some changes, or equivalent), and it is a commit on top of which “git commit” would make a new one. Usually HEAD is symbolic reference to some other named branch; this branch is currently checked out branch, or current branch. HEAD can also point directly to a commit; this state is called “detached HEAD”, and can be understood as being on unnamed, anonymous branch.

ORIG_HEAD is previous state of HEAD, set by commands that have possibly dangerous behavior, to be easy to revert them. It is less useful now that Git has reflog: HEAD@{1} is roughly equivalent to ORIG_HEAD (HEAD@{1} is always last value of HEAD, ORIG_HEAD is last value of HEAD before dangerous operation).

“pull” or “merge” always leaves the original tip of the current branch in ORIG_HEAD.

HEAD is a moving pointer. Sometimes it means the current branch, sometimes it doesn’t.

Read More

git commit message convention

I collect all information for internet, I did not write a single word.

A well-crafted git commit message is the best way to communicate context about a change to fellow developers (and indeed to their future selves)

examples

example of commit messages:

Capitalized, short (50 chars or less) summary

More detailed explanatory text, if necessary.  Wrap it to about 72
characters or so.  In some contexts, the first line is treated as the
subject of an email and the rest of the text as the body.  The blank
line separating the summary from the body is critical (unless you omit
the body entirely); tools like rebase can get confused if you run the 
two together.
   
- Bullet points are okay, too
- Typically a hyphen or asterisk is used for the bullet, followed by a
  single space, with blank lines in between, but conventions vary here
- Use a hanging indent

Read More

The Cathedral and the Bazaar

记得还是在读大学的时候读到的这篇文章,那个时候对文章的理解不是很深刻,工作多年以后再读这篇文章,对里面的很多思想有可比较深刻的认识,特别是关于软件管理方面的。 也许没有实践经验,有的东西就很难理解吧。

大师的思想不会随着时间的变化而失去光辉的,快20年过去了,依然闪烁着智慧。而且随着开源社区的壮大,git这样的工具出现,我们不的不佩服大师看待未来的眼光,对前沿的敏锐观察力。

英文版:The Cathedral and the Bazaar

中文版:大教堂和集市

Read More

规则

这篇博文是由两个问题想到的。

一是火车票实名制后,但是仍然还是有黄牛党倒票。倒票的手法是,先用几百张身份证抢下火车票,然后联系买主,联系到买主后,在乘车时间的前一两天,在一个窗口退票,另外一个窗口买票,一退票后系统上显示有一张鱼票后,马上买入。虽然理论上还是有被其它人抢走,失手的可能,但由于该车次的票早早就买光了,临开车的前1、2天,很少会有人去查询,所以还是比较安全的。 针对这种倒票方式,设置怎样的规则杜绝呢?首先一个方法就是,退掉的票,半个小时后才能买入。这样就可以增加退掉的票被被人抢走的可能性。开车前半个小时,退掉的票可以立马买进。这样就讲黄牛党的倒票时间窗口缩短到了开车前半个小时。 复杂的规则,就还有调查哪些身份证存在大量这种买了票后,又退票的行为,并加以惩罚。例如半年内不能买车票,或在春运期间不能买火车票。但这里有个风险,就是如果黄牛党用假身份证买票,那么这条规则就会伤及到真身份证的那个无辜的人。

第二个问题是成都的公交车票,有两种,一种是电子钱包,就是充一定数量的钱,这个钱永远在卡里,一直可以用,主要目的是方便,不用每次乘公交都要准备零钱,而且还打9折。 还有一种是次卡,就是用前买一定数量的乘车次数,相当于打5折,而且用次卡乘车,2个小时内免费换乘公交车3次。而电子钱包换乘的时候,是要再次给钱的。对于我们这些上班族,每天上班要换乘几次的,非常划算。 但次卡有个规定,买的次数是当月有效的,一到下个月,无论你买了多少次,就作废了。我想公交公司是想用这种方式,吃点别人多充次数的油头。最开始的时候,次卡只能10块钱的倍数买,后来大家反对,于是可以1块钱的倍数买。乘公交用次卡的最低单位也是1块钱,所以基本上,公交公司就没有什么油头了。

Read More

go语言学习

一点体会

下面这篇博文是在看《go语言编程》书的笔记。 在看书的过程中,其实也没有对go语言进行深入的学习。仅仅是停留在对语法的简单了解。

总的来说,go语言没有它多的新东西,仅仅是将各个语言比较有特色的内容,集中到以一个语言中,而且还是基于C语言的,因为go语言的作者就是C语言的作者。哪些比较有特色的呢,例如闭包,接口,垃圾回收,还有必然语言级别支持协程。这种炒大杂烩的方式,个人感觉不可能会成功。只不过go语言已一个比较强大的干爹google,所有才多多少少掀起了几个波浪。

很有意思的一件事情是,虽然这个语言生在美国,生在google,但是目前go语言的社区最活跃的,还是我们中国的屌丝程序员。我认为这是一件极好的事情,说明了我们中国在IT方面对新事物的开明态度和勇于追逐,虽然成功可能不在go语言,但是有这种态度,终会有所作为。

go语言简介

go语言是google推出的一个可以提高并发编程的语言,它着不同一般的背景。

  • 回溯至1969 年, 肯·汤普逊(Ken Thompson)和丹尼斯·里奇(Dennis Ritchie )在贝尔实验室的计算科学研究中心里开发出了Unix ,还因为开发Unix而衍生——C语言。
  • 80年代,开始Plan 9 的操作系统研究项目,解决Unix 中的一些问题, 又演变出了Inferno 的项目分支,以及一个名为Limbo 的编程语言
  • Limbo是用于开发运行在小型计算机上的分布式应用的编程语言,它支持模块化编程,编译期和运行时的强类型检查,进程内基于具有类型的通信通道,原子性垃圾收集和简单的抽象数据类型。它被设计为:即便是在没有硬件内存保护的小型设备上,也能安全运行。
  • Limbo 语言被认为是Go语言的前身,不仅仅因为是同一批人设计的语言,而是Go语言确实从Limbo 语言中继承了众多优秀的特性。
  • 贝尔实验室后来经历了多次的动荡,包括肯·汤普逊在内的Plan 9 项目原班人马加入了Google 。在Google ,他们创造了Go语言。
  • 2007 年9月,Go语言还是这帮大牛的20% 自由时间的实验项目
  • 2008 年5月,Google 发现了Go语言的巨大潜力,从而开始全力支持这个项目
  • 2009年11 月,发布第一个版本在
  • 2012年3月28 日,发布第一个正式版本

go语言特性

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性 (Cgo, C语言库)

Read More

数据结构--树

树,计算机中比较纠结的一种数据结构。种类太多了,涉及到的算法也太多了。主要目的是汇总一下。参考了网上的几篇博客。12

二叉树

就是binary tree,搜索二叉数特点:

  1. 所有非叶子结点至多拥有两个儿子(Left和Right);
  2. 所有结点存储一个关键字;
  3. 非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;

但二叉树在经过多次插入与删除后,有可能导致不同的结构, 例如下图也是一个二叉数,但是其查找效率已经是线性的了:

所以,使用二叉树还要考虑尽可能让二叉树保持左图的结构,和避免右图的结构,也就是所谓的“平衡”问题; 实际使用的二叉数都是在原二叉树的基础上加上平衡算法, 即“平衡二叉树”;如何保持二叉树结点分布均匀的平衡算法是平衡二叉树的关键; 平衡算法是一种在二叉数中插入和删除结点的策略。

Read More

lisp笔记

下面是在看《ANSI common lisp》这本书和做习题的时候的一些笔记。

lisp

约翰麦卡锡和他的学生于 1958 年展开 Lisp 的初次实现工作。 Lisp 是继 FORTRAN 之后,仍在使用的最古老的程序语言。 更值得注意的是,它仍走在程序语言技术的最前面。懂 Lisp 的程序员会告诉你,有某种东西使 Lisp 与众不同。

Lisp 与众不同的部分原因是,它被设计成能够自己进化。你能用 Lisp 定义新的 Lisp 操作符。当新的抽象概念风行时(如面向对象程序设计),我们总是发现这些新概念在 Lisp 是最容易来实现的。Lisp 就像生物的 DNA 一样,这样的语言永远不会过时。

Lisp能够自己进化的特点,注定了它有很多方言存在(真的是方言,英语里面用的是dialects)。 其中common lisp就是其中的一种方言。

下面几篇关于lisp的文章值得一读:

Read More