Good good study, day day up

aleung的学习笔记, aleung的idea

虽然我不是处女座的,但在有些事情上会表现得比较处女座,例如对于文档格式,我常会跟各种细节纠缠不休,为的是看起来显得完美一些。

作为软件开发者,写文档是必备的技能,而且文档里常常会出现大量英文。这里介绍一些很基本的规则,使得文档的显得专业一些。这些规则在其他类型的文章里也是适用的。

阅读全文 »

用 Jekyll 作为内部技术文档库

去年在公司的产品开发团队中推行了使用 Jekyll 静态网站生成工具来写内部技术文档,大半年下来,效果还不错。

阅读全文 »

2014年断断续续学了一阵子 Scala 语言,Scala 真的不错,将面向对象和函数式编程两种范式结合得很好,对 Java 程序员非常友好。不过,从学编程开始就受命令式编程的思想的浸淫,要使用函数式编程的思想相当困难,思路转不过来,而 Scala 又不强迫你用 FP,所以写出来的程序基本上还是命令式的。不少人都推荐学 Haskell 作为函数式编程的入门,作为一门学院派的语言,它非常纯粹,有助于掌握函数式编程的思维方式。于是开始读 Learn You a Haskell for Great Good,这真是本入门好书,从头开始一点点的理解接受函数式编程的思路。学 Haskell 的感觉非常有趣

不过那本书只是讲语言特性和思想,没有讲 Haskell 的运行环境和使用。上网收集了一些资料,记录下来。

Haskell (缺省)是编译成 native code,并非运行在托管环境下,因此开发出来的程序就像 C 的一样直接可执行的 binary。Haskell 程序需要依赖于 Runtime System (RTS),RTS 提供了内存管理,GC,轻量线程,并发等等功能的支持。包括 RTS 和其他的依赖到的 library,缺省都是静态链接到可执行程序中的,因此编译出来的程序体积会比较大。但现在 GHC 也已经支持动态链接了,如果使用动态链接,则要求运行环境中需要已经安装了 GHC(有 RTS)。在这方面,Haskell 跟 Go 差不多,都是直接得到 native 可执行程序,分发和部署会简单一些。

Haskell 的编译器叫做 Glasgow Haskell Compiler (GHC),它包括了 compiler,boot library 和 runtime system (RTS)。编译器支持多种 backend,除了可以生成 native code (机器码),也可以产生 C 语言源代码(供跨平台移植),或者 LLVM code,(供后面接 LLVM toolchain 使用)。

做应用开发不太可能什么都从头做起,必然要依赖第三方的函数库。Haskell 世界里的包管理和 build 系统叫 Cabal。另外有个工具 Cabal-Install 负责下载 Haskell package 源代码、编译、安装和注册到 GHC 的整个过程。共享的包存放在 Hackage 这个在线仓库中。

阅读全文 »

Pacer数据丢了,没法分析心率和速度 :(

净成绩 4:17:47,比广马要好些。之前训练很少,按照玩玩的心态去跑,没有设定时间目标,也没有预定配速,就按照舒服的速度跑。

阅读全文 »

最近一个星期,电脑出现了缓慢的现象:打开任何应用,窗口都要等待上一段时间才能出现。

Process Explorer 中看到进程已经出现,也没有什么CPU占用,但窗口就是不出来,好像是要等到什么操作超时。这里如果能够查看调用栈,应该就能知道程序卡在什么地方。

上网搜索一下,看到一些文章提到 troubleshoot Windows 问题,都用到了 WinDbg 来分析进程调用栈。这篇文章简要介绍了 WinDbg 的使用方法(不过可能文章年代过于久远,有些细节已经对不上了)。于是安装相应软件,实操一下。

只是用到 WinDbg 的一些皮毛功能,包括这些命令:

Command Description
~ 列出所有线程
k 5 显示当前线程的stack trace,如果附带数字则限制打印条数
kb 显示stack trace,包含前三个调用参数
~n[cmd] 对n号线程执行 cmd 操作
~*[cmd] 对所有线程执行操作,如 ~*k 5
~ns 切换到n号线程
阅读全文 »

A shortened sbt tutorial for beginner and quick reference.

Directory structure

1
2
3
4
5
6
7
8
9
10
11
lib/
project/
Build.scala
plugins.sbt
src/
main/
resources/
scala/
java/
test/
built.sbt

Source code can be placed in the project’s base directory. But usually people organize them into directory structure.

sbt by default uses the same directory structure as Maven for source files, all under src/.

阅读全文 »

由于 sbt 使用 Ivy 做依赖管理,必须了解一下 Ivy 的基础知识。这里从熟悉 Maven 的用户的角度简单描述一下 Ivy。

共同点

Maven的功能要比 Ivy 多很多,Maven 既管 build 也管依赖,而Ivy 仅仅是负责依赖管理。但就在依赖管理方面,两者在概念、模型、功能等方面都还是比较相似的。

对于 artifact 的标识,都是使用 groupID, artifactID, version 三元组,不过 Ivy 叫它们为 organization, module name, revision。Ivy 兼容 Maven 2 metadata,可以直接使用 Maven 2 repository。

Configuration / Scope

阅读全文 »

This demo uses Graphite and Grafana to store and present API metrics. The demo environment is installed on Ubuntu.

Graphite

Graphite has two major components.

The first is carbon-cache, which is a daemon process to receive metrics data from client through TCP connection and store into filesystem via whisper database library.

Another one is a webapp. It provides HTTP API for generating graphs and retrieving raw data.

阅读全文 »

Updated 2014-11-27: 之前漏了一些号码段,重新补上更新了。

2014广州马拉松在网上可以根据号码查询成绩和名次了,但是没有开放完整成绩册的数据下载。出于好奇,想知道成绩的分布:跑330以内的有多少人?400呢?有多少人最后关门一刻才冲线的?于是写了个程序把数据抓下来分析。

数据不包含号码以0开头的专业选手(大概几十人)。由于不知道确切号码段,没完赛选手的数据有可能有误。

首先是各组的人数,男女比例全马约8:1,半马约3.6:1。跑步的妹子相对还是比较少,女子只要完赛了,总能够拿到个几百名的名次的 :)

阅读全文 »