在Mac下搭建Android开发环境

五年没有碰过Android开发了。最近一个朋友要去澳门赌钱,让我帮开发一个简单的决策大小红黑的APP。感觉蛮简单的,顺手干了起来。不一样的是当时候用的是eclipse,Google于2013 I/O大会针对Android开发推出的新的开发工具Android Studio,从环境配置开始讲起吧。

1. 重新安装Java

虽然Mac OSX 10.9以后系统就自带了Java 6的环境,由于下面这个原因,必须再装一遍。

image

安装链接 https://support.apple.com/kb/DL1572?viewlocale=zh_CN&locale=en_US

2. 下载JDK

下载链接 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

我下载的是jdk-7u79。目前运行起来也没有问题。

image

3. 下载Android studio

下载地址 http://www.androiddevtools.cn

安装好以后第一次的话会进入到设置向导页,直接选择“Standard”, 点击“Finish”按钮。然后会自动下载依赖组件,如下图。

image

这个过程需要翻墙,而且依赖你的网速,时间有点久,大家耐心等待…

运行时Android studio可能会提示找不到jdk,让你重新定位你的jdk。这时你可以使用java -version查看你的Java版本,然后在弹出的框中选择你的jdk位置。这样Android环境基本上就安装好了。

image

参考资料

Android Studio系列教程一–下载与安装

Android Studio 入门 Hello World


在 Mac 下搭建jekyll环境

这一篇文章已经很老了。看我最新的这一篇《在 Mac 下搭建jekyll环境》

一直在用github pages来管理自己的Blog。不过一起太懒,都是直接在模板上修改,导致最近修改css查看效果特别麻烦,每次都要commit push之后才看到效果。想着还是在本地也配个环境吧,做下来之后蛮简单的。

1、安装/升级本地ruby

ruby -v 查看下本地ruby版本号,如果是1.9.2以上的直接跳过该步。由于我的系统是10.10,ruby版本已经上到2了,所以这一个步骤就跳过了。

安装rvm

$ curl -L https://get.rvm.io | bash -s stable

安装好rvm后需要按照提示 source ~/.bash_profile 将rvm添加到环境变量中。

安装ruby

$ rvm use 1.9.3
ruby-1.9.3-p392 is not installed.
To install do: 'rvm install ruby-1.9.3-p392'
$ rvm install ruby-1.9.3-p392

2、安装jekyll

$ gem install jekyll

安装的时间蛮久的,我这里网络不好。安装完成后,cd到项目根目录

$ jekyll s

通过 localhost:4000 即可访问。

参考资料:

http://jekyllcn.com/


Linux的locale设置问题

今天新开了一个digital ocean的vps,发现了这个提醒:

WARNING! Your environment specifies an invalid locale.
 This can affect your user experience significantly, including the
 ability to manage packages. You may install the locales by running:

   sudo apt-get install language-pack-zh
     or
   sudo locale-gen zh_CN.UTF-8

To see all available language packs, run:
   apt-cache search "^language-pack-[a-z][a-z]$"
To disable this message for all users, run:
   sudo touch /var/lib/cloud/instance/locale-check.skip

输入dpkg-reconfigure显示如下提醒

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "zh_CN.UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

以下两种方法不一定都试用,可以都试一遍。

办法一

在文件/etc/environment中添加如下内容

LC_ALL="en_US.utf8"

输入dpkg-reconfigure locales按照提示选中一下内容

image

image

完成以上步骤后重启系统即可。

办法二

~/.bash_profile文件开头中添加如下信息即可:

export LANG="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_MESSAGES="en_US.UTF-8"
export LC_MONETARY="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LC_TIME="en_US.UTF-8"
export LC_ALL=

如果你用的是zsh等其它类型的shell,在相应的配置文件里也输入这些信息即可。 例如zsh则在文件~/.zshrc中添加。


digital ocean是一个新兴的vps运营商,如果你也打算使用,可以使用我的推荐链接注册,这样子你我都将得到10美元。digital ocean


zsh介绍

先前用的shell是bash(一般程序员都这样吧= =),接触了一段时间zsh,非常好用的shell,最方便的地方,应该就是命令行补全和命令历史记录共享。下面来记录一下。

zsh简介

Shell是Linux/Unix的一个外壳,负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,之后再把结果返回用户或应用程序。

Linux/Unix提供了很多种Shell,可以通过以下命令查看系统中自带的shell:cat /etc/shells

初期zsh并不是那么好用,因为配置复杂。直到有一天国外有个程序员开发出了一个快速上手的zsh项目「oh my zsh」,人气开始聚集起来。

好,下面我们看看如何安装、配置和使用 zsh。

zsh安装

如果你使用的是Mac,那么可以跳过安装这一节,Mac自带了zsh。

安装zsh

apt-get install zsh ### 安装oh my zsh 自动安装:

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh 手动安装:

git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

zsh配置

与bash类似的配置文件.bashrc,zsh的配置主要集中在用户当前目录的.zshrc里,打开.zshrc,在最下面会发现这么一行字:

# Customize to your needs…

可以在此处定义自己的环境变量和别名,当然,oh my zsh 在安装时已经自动读取当前的环境变量并进行了设置,你可以继续追加其他环境变量。

我自己的部分配置如下:

alias vi='vim'
alias dd='df -h'
alias p='netstat -antp'
alias pp='pstree -a'
alias ta='tail -f /var/log/syslog'
alias dudir='du --max-depth=1 -ah 2> /dev/null | sort -hr | head '
alias rm0='find / -type f -name "0" | xargs -i  rm -fr "{}"'
alias grepall='grep -D skip -nRe'

ip() {
  iptables -F;
  iptables-restore < /etc/iptables.test.rules;
  iptables-save > /etc/iptables.up.rules;
  iptables -L;
}

alias tn='tmux new -s'
alias tll='tmux ls'
alias tt='tmux attach -t'
alias tk='tmux kill-session -t'

zsh可以针对文件类型设置对应的打开程序,比如:

alias -s html=mate,意思就是你在命令行输入 hello.html,zsh会为你自动打开 TextMat 并读取 hello.html; alias -s gz=’tar -xzvf’,表示自动解压后缀为 gz 的压缩包

zsh使用

  • 强大的历史纪录功能,输入 grep 然后用上下箭头可以翻阅你执行的所有 grep 命令。

  • 智能拼写纠正.

  • 各种补全:路径补全、命令补全,命令参数补全,插件内容补全等等。触发补全只需要按一下或两下 tab 键,补全项可以使用 ctrl+n/p/f/b上下左右切换。

  • 目录浏览和跳转:输入 d,即可列出你在这个会话里访问的目录列表,输入列表前的序号,即可直接跳转。

  • 在当前目录下输入 .. 或 … ,或直接输入当前目录名都可以跳转。

zsh其它

通过以上步骤,zsh已经可以很好地使用了。如果你还想更加rock一些,zsh也可以满足你的要求。

主题

如果你是个主题控,还可以玩玩 zsh 的主题。在 .zshrc 里找到ZSH_THEME,就可以设置主题了,默认主题是:

ZSH_THEME=”robbyrussell”

oh my zsh 提供了数十种主题,相关文件在~/.oh-my-zsh/themes目录下,你可以随意选择。

插件

oh my zsh 项目提供了完善的插件体系,相关的文件在~/.oh-my-zsh/plugins目录下,默认提供了100多种,大家可以根据自己的实际学习和工作环境采用。

想了解每个插件的功能,只要打开相关目录下的 zsh 文件看一下。插件也是在.zshrc里配置,找到plugins关键字,你就可以加载自己的插件了,系统默认加载 git ,你可以在后面追加内容,如下:

plugins=(git textmate ruby autojump)

​ 参考资料:


关于开源

知乎看到了神奈川关于开源回答的两个好答案,深以为然,转到自己的blog上,时时勤拂拭。

  1. 为什么要开源
  2. 世界顶级开源软件工程师,他们如何谋利?

为什么要开源

题主问的非常好,尤其是从功利的角度来看为什么要开源。我把这个问题分成三个回答你:

从无私的角度看,为什么要开源? 从自私的角度看,个人为什么要开源? 从自私的角度看,公司为什么要开源?

从无私的角度看,为什么要开源?

  1. 建立社区:可以这么说,如果没有开源社区,苹果,谷歌,Facebook都不会是现在这样。如果没有Linux,现在互联网的格局简直无法想象。为了让更多人能够使用优秀的产品,需要有人来愿意把自己的产品免费给他人使用。很多开源社区的贡献者都是为了建立,维持这样一个互助互利的社区而不断努力的。

  2. 帮助他人:开源一个很美妙的地方就是,别人不用花时间解决一样的问题。当你看到你的一个大问题已经有人做了开源项目的时候,你一定感觉如释重负。同样,有人感谢你的开源项目帮他们解决了一个大问题,真的是种很美妙的成就感。

  3. 结识朋友:开源社区中经常能遇到很多志同道合的好朋友。你帮我改代码,我帮你加功能,说不定两个人就认识成了好朋友。我和我现在的一位导师和几位朋友就是在贡献开源项目的时候认识的。

好,下面来说说不明显的:

从自私的角度看,个人为什么要开源?

  1. 提升代码质量:开源是提升个人代码质量的好方法。这个有两个方面:首先,如果你知道你的代码要给别人看,你会不自觉的把代码写的更干净一点,多加点说明。其次,开源之后别人会建议怎么改(如果你的项目有一定影响力),给你建议的人多了,你也大概就有概念怎么把代码写的更好了。

  2. 展示个人代码:如果你在找工作,这个很可能会是你的主要动机。公司实际上很好奇你写的代码质量如何,但是光从1个小时的面试实在看不出太多。所以很多公司会非常喜欢看你的开源项目,来评估一下你的代码质量如何。同样,如果你面试的时候告诉公司,“我有个开源项目,你们可以去看看”,这将是个不错的加分项。

  3. 建立个人品牌:如果你足够厉害,把一个优质项目开源是个迅速提升影响力的好方法。很多在大公司工作过的顶级工程师,我们都是通过他们的开源项目认识的。git的发明人,Linus Torvalds,就是一个好例子。一个工程师如果在工作之外想要树立个人品牌的话,写一个高质量的开源项目是个相当好的选择。

  4. 备份个人项目:其实很多人把项目放到Github的时候根本没想这么多。。。他们只是想把家庭作业,代码练习啥的备份到网上去而已。。。其实Github当中绝大部分项目都是这种实际没啥用的代码备份(只是Github没让你看到)。。

从自私的角度看,公司为什么要开源?

  1. 树立品牌形象:公司与个人开源的动机不同。公司开源很多情况下是为了提升外界对公司的形象认知。任何一个大科技公司,肯定用了多多少少用了开源项目(Linux,至少吧?)。如果连一个开源项目都没有,这很容易给人造成,“这公司总是索取,却不回馈给开源社区”的形象(尤其在美国)。

  2. 发掘潜在员工:比如,我读了谷歌的Android的代码,发现里面有个大安全漏洞,然后我提交一个修改把漏洞给补了。你说谷歌想不想拉起我去工作?很多公司一个很好的招聘渠道是开源项目的贡献者。如果能在公司开源项目做出有意义贡献的话,这个对于公司来说是比面试好很多的能力证明。

  3. 实现额外功能:这点实际上很有意思,有的公司/项目实际上有很多想做的小功能,但是没时间也没人力去单独做。这个时候开源的力量就体现出来了,项目开源之后很多时候能吸引到开源贡献者来做一些自己感兴趣,项目想要,但项目没时间做的feature。我之前在Socket.io做的时候写的就是这样的一个小feature。

  4. 扩大影响范围:公司开源项目的质量,很多时候能反映公司的影响力。所以硅谷的很多大公司,都有一些厉害的开源项目。一方面是回馈社区,一方面是展示公司的影响力和代码质量,吸引更多人才。同样,如果一个公司很希望自己的一个产品有更大影响力的话,开源是个好方法。苹果的Swift就是个好例子。Swift开源之后,能够用在不少iOS之外的领域。说不定之后我们还能看到用Swift写的网站架构。

  5. 用作战略武器:开源项目还可以作为公司的战略武器。最好的例子就是谷歌的Android。通过开源和病毒式的传播一下追上iOS。这里面有很多弊端(比如碎片化严重),不过谷歌这么一招给了开发者十分大的力量,Android一下成为一个和iOS比肩的选项。

如果你好奇全职的开源工程师如何赚钱的话,这是我之前的答案: 世界顶级开源软件工程师,他们如何谋利? - 编程

最后,也希望题主能继续为开源社区出一分力 : )

世界顶级开源软件工程师,他们如何谋利?

喜欢这个问题,我之前也有相同的困惑。

来说说我导师的故事。

在哈佛上一个和Facebook一起合作办学的课程,一个学期与一个开源项目合作,学习在开源社区维持并贡献代码。

我当时选择了Socket.io。写过实时软件(比如聊天室,微信,多人在线合作文档)的同学可能听说过Socket这个概念。Socket.io就是用javascript编写的Socket库,只要几行就能弄出一个聊天室。这个项目在Github上有将近2万的star。实际使用项目规模大约有10万以上。并不能和Rails,Linux这种顶级的开源项目比,但是也十分了得。

我的导师,Socket.io的创始人之一,并没有稳定的日常工作。换个说法更好,他并不需要稳定的日常工作。

首先,他的主要工作,是旅游。Socket.io因为有不错的国际影响力,他经常被各个地方当地的软件社区请去做演讲嘉宾。去年我在日本的时候还十分机缘巧合地也碰到他在东京,一问原来是参加东京的Socket.io event来做嘉宾了。因为是别人请来,衣食住行全部报销,一分钱都没花。

曾经,他先后被三家创业公司雇佣,担任CTO,公司卖了赚了大笔钱。现在他基本处于不用工作就可以衣食无忧的状态。选择再次加入创业公司也只是因为个人兴趣爱好。包括别人请他飞来飞去,何必用个工作来限制周游世界的自由?

然后,他对于Socket.io本身的工作,基本减少到维持社区,做战略决定。听他说很多民间爱好组织会给这个项目捐钱,数额不等,但并不是主要收入。大公司合作捐款的很多,基本上可以作为2~3个人的工资。这些捐款也确实基本用于支付全职项目管理员。他也不太再直接写代码,很多漏洞和功能都是代理给管理员和社区了。不过前一段时间Socket.io要更新大版本,他比较辛苦一些,亲自修复了之前很多漏洞。

最后,来说说我在开源社区的几个感受: 开源并不是散漫。开源社区有着相当严格的管理体系。每个大型项目都有创始人,全职管理员(管理项目领薪水),专项贡献者,一般贡献者等不同的区分。开源软件不会被新手破坏也是得益于这样的管理体系。一般如果你只是随便写点东西,管理员是不会允许你的代码进入项目的。

开源并不是赚钱。开源项目是为了影响力。如果Linux像微软一样收费,怎么也不可能走到今天这步。与之相对,开源项目创始人和领导者所获得的,是他人无与伦比的尊敬。如果想要,他们的地位,影响力完全可以给他们找到任何级别的工作,无论是大小公司CTO,高级工程师,创业cofounder。其中任何一项几年的薪资都可以让他们衣食无忧。更何况之前所说的捐款,演讲。

最后link一下关于开源的另一个回答,感兴趣的朋友们可以去看看: 为什么要开源? - 神奈川的回答


markdown入门

Markdown 是一种轻量级的「标记语言」,学习成本低。很早前就在使用markdown,就连我的blog 的编写,也都是使用markdown语言编写的。这篇文章里将记录一些常用的markdown语法、Mac下的 工具,以及Mou的快捷键。

Mou快捷键

大小写 		Ctrl (Shift) U
文章前data 	Ctrl Shift G
大小于和& 	Ctrl Shift ,(.)(7)
参考手册 		Cmd R

Markdown语法

加粗 Cmd B

*emphasize*   **strong** 	

斜体 Cmd I

_emphasize_   __strong__					

链接 Ctrl Shift L

行内链接
An [example](http://url.com/ "Title")		

关联链接
An [example][id]. Then, anywhere
else in the doc, define the link:

  [id]: http://example.com/  "Title"	
  	
自动链接
<http://example.com/>
  	
Email
An email <example@example.com> link.

图片 Ctrl Shift I

行内链接
![alt text](/path/img.jpg "Title")			

关联链接
![alt text][id]								

[id]: /url/to/img.jpg "Title"

标题 Cmd 1

类 Setext:
Header 1
========
Header 2
--------

类 atx 形式(后边的#可加可不加):
# Header 1 #				Cmd 1
## Header 2 ##				Cmd 2
### Header 6				Cmd 6

列表 Ctrl L

有序列表:

1.  Foo
2.  Bar

无序列表:

*   A list item.			
    With multiple paragraphs.
*   Bar

还可以这样:

*   Abacus
    * answer
*   Bubbles
    1.  bunk
    2.  bupkis
        * BELITTLER
    3. burper
*   Cunning

引用 Ctrl Q

> Email-style angle brackets		
> are used for blockquotes.

> > And, they can be nested.

> ### Headers in blockquotes
> 
> * You can quote a list.
> * Etc.

代码框 Cmd K

`<code>` 		

代码块 Cmd [ (])

四个空格,或者一个tab

This is a preformatted		
code block.

backtick Cmd K

```				
Fenced code blocks are like Stardard
Markdown’s regular code blocks, except that
they’re not indented and instead rely on a
start and end fence lines to delimit the code
block.
```

横线

---

* * *

- - - - 

强制换行

行末添加两个空格

删除线 Cmd U

~~ ~~		

表格

简单的表格

First Header | Second Header | Third Header
------------ | ------------- | ------------
Content Cell | Content Cell  | Content Cell
Content Cell | Content Cell  | Content Cell

单元格左右对齐

First Header | Second Header | Third Header
:----------- | :-----------: | -----------:
Left         | Center        | Right
Left         | Center        | Right

页内链接

## [This is an example](id:anchor1)

Click this [link](#anchor1) in the Preview view will auto scroll to the place of the destination anchor.

脚标

That's some text with a footnote.[^1]

[^1]: And that's the footnote.

其它相关

运行以下命令安装markdown快速预览插件:

$ brew cask install qlmarkdown

也可以在github上获得这个插件qlmarkdown