第零章 引言

我们有一些关于如何开创和经营一项事业,以及其怎样成长(或者停滞)的新理念。
这本书不是基于学术理论,而是基于我们的实践。我们已经积累 10 年以上的经验。在这一过程中,我们见证了两次经济衰退、 一次泡沫经济的溃灭、商业模式的转换、还时不时传出的黯淡前景的预言, 而在这过程中,我们仍然一直赚钱。
我们特意保持较小的公司规模,专门针对小企业和组织,帮助他们用简单方法解决事情。全球有超过 300 万人用我们的产品。
我们由三个人于 1999 年组成一家网站设计公司。2004 年,由于对业界普遍采用的项目管理软件并不满意, 所以我们创造了自己的:Basecamp。 当我们把这款在线工具展现给客户和和同事们时,他们都一致地说:“ 我们就需要这样的工具。” 5 年以后,Basecamp 一年就能产生数百万的利润。
我们现在也销售其他的在线工具。Highrise, 我们的联系人管理和简单的 CRM(客户关系管理)工具,给数万家小企业用于追踪潜在客户信息,交易情况和成千上万的联系人。超过 50 万人注册的 Backpack,是一款好用的知识共享工具。Campfire,一款实时商务聊天软件,已经发送了超过一亿条信息。我们还开发了一款开源 web 编程框架,Ruby on Rails,它对 Web 2.0 时代影响巨大。

Read More

使用JavaScript画一个图片

html部分代码:

1
2
3
4
5
6
7
8
<html>
<head>canvas</head>
<body>
<input type="file" id="avatar">

<canvas id="canvas"></canvas>
</body>
</html>

javascript部分代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function draw(avatar) {
const $canvas = document.getElementById('canvas')
const ctx = $canvas.getContext('2d')

const img = new Image()
img.onload = () => {
ctx.drawImage(img, 0, 5, 40, 40)
}
img.src = URL.createObjectURL(avatar)

ctx.font = 'bold 14px sans-serif'
ctx.fillStyle = 'blue'
ctx.fillText('EGOIST', 50, 15)

const usernameWidth = ctx.measureText('EGOIST').width
ctx.font = '14px sans-serif'
ctx.fillStyle = '#666'
ctx.fillText('2017/7/7', usernameWidth + 50 + 10, 15)

const content = `hello world
goodbye world`
content.split('\n').forEach((text, index) => {
ctx.fillText(text, 50, 30 + 15 * index)
})
}

document.getElementById('avatar').addEventListener('change', e => {
draw(e.target.files[0])
})

效果图:

原图

DrW9R.jpg

渲染后

DrjKY.png

一些有用的工具

1.Everything

一个功能丰富的文件搜索工具。(比windows系统自带的搜索快N个数量级)
Link

2.autohotkey

是一款免费的、Windows平台下开放源代码的热键脚本语言,是为游戏操纵杆和鼠标创建的热键,是自动按键。也可以通过命令调用系统接口及程序,并创建基于简单语言的图形化界面的执行程序
Link

Read More

java编译常量和运行时常量

看下面一段代码:

1
2
3
4
5
6
7
8
9
10
11
12
public class Test1 {
public static void main(String args[]){
System.out.println(FinalTest.x);
}
}

class FinalTest{
public static final int x =6/3;
static {
System.out.println("FinalTest static block");
}
}

上面和下面的例子大家对比下,然后自己看看输出的是什么?

Read More

docker学习笔记-1

镜像拉取

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

有了镜像后,我们就可以以这个镜像为基础启动一个容器来运行。以上面的
ubuntu:14.04 为例,如果我们打算启动里面的 bash 并且进行交互式操作的
话,可以执行下面的命令。
docker run -it --rm ubuntu:14.04 bash
-it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们
这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终
端。
–rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需
求,退出的容器并不会立即删除,除非手动 docker rm 。我们这里只是随便
执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免
浪费空间。
ubuntu:14.04 :这是指用 ubuntu:14.04 镜像为基础来启动容器。
bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的
是 bash 。

Read More