是旅行还是长跑?

run

你苦战通宵游戏时,布里斯班的灯鱼已划过珊瑚丛;
你赶场招聘会时,蒙巴萨的小蟹刚溜出渔夫的掌心;
你写程序代码时,布拉格的电车正摇着铃晃过金色夕阳;
你挤进汹涌的食堂时,哥本哈根的街头画家完成了第99幅立体画。
有一些穿高跟鞋走不到的路,有一些喷着香水闻不到的空气,有一些在楼宇里永远遇不到的人。

大伙看到这段文字,一定以为我要炖一锅热腾腾的心灵鸡汤了,然而事实的真相是,Mac君不会做饭!

这段文字在网络上流传甚广誉为佳句,其实还有很多类似的文字,比如「放下一段过往,期待一场盛大而华丽的远行」,比如「生活在别处,远离城市的丛林」,比如「背起行囊去远行」等等,总之就是一边戳着你的脑门一边对你说「你看看你现在过得是什么生活,你对得起谁,你为什么不把这些破烂扔掉去面朝大海春暖花开?」

这时候你是不是就忧伤啦,躺在租来的小屋里,手边是一个二手的电脑和已经翻的卷边的编程指南,想想蒙巴萨的小蟹和布拉格的电车,你对自己说,这特么是人过的日子么?于是就开始自怨自艾,懊悔不迭,为什么当年特么的不让自选爹?但是想归想,除了极少数的二愣子,大部分看完这些话就是忧伤一下,然后洗洗睡了,因为明天还要去找工作或去写代码。

其实每个人在某个城市呆久了都会疲惫,每份工作干多了都会厌倦,为了疲惫和厌倦的改变,那不叫改变,那叫逃避。面对无数的选择和变化,你沉溺其中,但是依然无法获得理想中的生活。

经过这样一番理性加感性的描述之后,你就知道这种文字除了让人感受令人愉悦的忧伤和丧失斗志之外毛用没有,基本上可以定性为精神鸦片!只要你没有一个强悍的爹,就要先忘掉那些小鱼小蟹还有珊瑚丛,那些暂时还不属于你,踏踏实实的练习和提升才是正道,为自己规划一个十年的长跑,可以时不时停下来休息一下,低下头汗水就落入尘埃,抬起头就看看夕阳西下,你抹去疲惫,然后继续前行。十年看似很长,但实在很短,十年以后你回头看看,你究竟是成了人中龙凤,还是小鱼小虾,是你认知了世界,还是世界抛弃了你。

如果你真的烦透了当下,想出去散心旅行的,看看这篇《旅行,写作,编程》( http://www.aqee.net/traveling-writing-programming/ ),同样是在全球各处行走,这位兄弟游山玩水的成果是:写了两本关于JavaScript和CoffeeScript的书,参加了一个技术会议,写了大量的开源库,筹划了一个创业公司的框架,旅行结束后背着包去Twitter上班了,那一年他21岁。这叫游历生活。如果你也可以,那就凡事趁早,早去早回,对了,别说我没提醒你把背包里的PC换成Mac!

零零碎碎写了一些东西,是因为最近见了一些悲欢,看了一些生死,我越来越感觉到,生活更像长跑而不是旅行,你不断的前行和奔跑,在长跑中告别青春、告别幻想、告别岁月、然后慢慢开始告别各种人和事……

你不知道什么时候是终点,可能倒下的时候就是终点吧……


很多人问怎么处理这么多邀请码并编排格式,很简单,把你们发来的邀请码贴到一起,用Vim简单编辑一下,然后执行以下代码即可。

# -*- coding: utf-8 -*-
file = open( "/Users/xxx/Downloads/duokan.txt" )
duokan = {}
for line in file:
    line  = line.strip()
    if ( line.__len__() == 0 ):
        continue
    index = line.find(" ", 0)
    code = line[0:index]
    code = "<a href='http://book.duokan.com/invite?" + code+"'>" + code + "</a>"
    name = line[index+1:line.__len__()].strip()

    if ( not duokan.__contains__( name ) ):  
        duokan[name] = code;
    else:
        duokan[name] = duokan[name] + " # " + code

for key in duokan.keys():
    print '%s  \n%s  ' % (key, duokan[key])
    print '***'

打印出来的内容就是支持Markdown编辑器的,直接复制、粘贴、提交即可。


文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· Web站点:macshuo.com

人生元编程

metadata

昨天和今天收到了近两百个多看电子书邀请码,我需要编个小程序整理一下格式,去重合并,明天发布到macshuo.com网站上,有需要电子书的读者,您最好手疾眼快了,明天的MacTalk,不见不散。 另外,有读者反映杭州内存快溢出了,暴雨,积水最深处达60公分,希望杭州的读者出行注意安全。

今天这篇有点长,耐心读完会有收获。

如果你是个诗人,那你的人生就是一场风花雪月的事;如果你是个演员,除了学好《演员的自我修养之外》,你的人生就是一场接一场的剧本;如果你是个侠客,对不起,现代没有侠客,你会被抓起来进行休假式治疗;如果你是个程序员,好吧,你的人生将由一行行飘逸的代码和捉摸不定的bug组成,所谓编程人生,就是你的一生已经与编程密不可分,为代码欢笑,为bug忧伤。

那一年你初入江湖,你不懂什么是汇编什么是语言,你搞不懂Lisp和Smalltalk的区别,为什么C++比C多了两个加号就成了对象,2000年以后那么多人都在用Java,现在却说Objective-C是最贵的语言,这特么又是为毛?

你对着大海说,我要学尽天下武功!大海对你说,你算术不太好~~~

孩纸,世界上的编程语言成百上千,常用的也有数十种,光学会这些语言你的时间就得用微积分计算,学完以后估计手抖的都敲不动键盘了,哪还有时间创造奇迹?更别说除了语言你还得掌握前端后端UI体验,这个数据库那个操作系统balabala……

你在知道了这些真相以后,依然痴心不改,抹干眼泪冲到编程兵器排行榜「TIOBE Index」面前,挑选了前十名开始勤学苦练。你在满天星斗的夜色中编写C程序,在清晨的微光中调试算法,上午你敲打键盘输出日志,中午吃完五右四分之一口米饭之后就匆匆离开,因为你要去看看系统为什么崩溃……你学会了五种语言、三种操作系统和四种数据库,你写了一个MIS两个OA三个App,你觉得你开始了编程人生,其实是你的人生被编程了,你被代码驱动和驱赶,你变得疲惫不堪。

这次你在清晨的寒风里对着高山说,这特么是为什么?高山对你说,因为你不懂元编程!


好吧,扯了这么多其实是想和大家谈谈元编程的事儿。元编程?估计小白一听又懵了,啥是元编程呢?与云计算、大数据不同,元编程并不是一个抽象的概念和名词,这里面代表了很多务实的技术,相伴而行的概念还有元数据。

元在英文里就是meta,元编程就是meta programming,元数据就是meta data。元编程就是能够操作代码的代码,元数据就是能够描述数据的数据。

听完这样一个介绍,大家是否更加晕菜了呢?如果回答是肯定的,那么效果达到了。

在接着介绍元编程之前,我们先看一下代码的世界。如果把代码比作一座小镇,那么其中的类、函数、方法、变量、代码块、宏,就是小镇上安居乐业的居民,他们相互协作,相互依赖,一起建设着有XX特色的美好家园。

在能够支持元编程的语言世界里,你可以和这些居民打招呼,还可以进行内省(introspection),获取其自身的一些信息和行为,甚至你能够为这些居民动态增加一些能力和行为,或者在这些居民奔跑的时候改变他们的行为,或者创建一些新的居民。这样的语言有Ruby、Python等。

在不支持元编程的语言世界里,大家分为两个状态,编译时和运行时,一旦编译器完成了自己的工作,这些方法和函数就看不见了,他们成为内存中的幽灵,你只能通过固定的方式使用他们,而无法获取他们自身的信息。当然,即使是这样的语言,为了增加编程的灵活性,也通过各种方式来提升元编程的能力,比如Java和C#笨手笨脚的使用反射方式,C++则通过模板方式,但古老的C就无能为力了,因为他没有元编程能力。

现在我们就知道了,编程语言虽然各有侧重,但是语言和语言之间的能力和特点区别还是很大的,不管你现在使用的是什么语言,我都建议你们去学一门具备原生的元编程能力的语言,比如Ruby、Python、Lisp、Objective-C等。

我第一次接触元编程和元数据还是在一家外企,那家外企的名字和火箭有关,他们有很多年纪一大把的老程序员,据说是制定corba标准的牛人,他们在这个火箭公司开发了一套分布式的软件平台,名字不能提,因为老外的版权意识太强袅。我一位前同事移民国外,只是在自己的开源项目引用了一点平台文档,结果一纸法院传票追杀到异国他乡,而且直接导致这个同事的上司被辞退。「好吧,上司不是我,不过我当时确实想过,如果我引用了他们的代码,也许会见到真的杀手吧。」

这套平台的持久化、权限和业务逻辑引擎都采用了元编程和元数据的方式实现,实现语言是Python,当时看到那些优雅的代码,我再次感受到编程的魔力,原来代码还可以这样写!我在那个外企的两点收获,第一是平台和元编程,第二是版权意识。后来当我有机会主导从头构建一个软件开发平台的时候,我吸取了这些思想和经验,基于元编程的思路构建了平台组件数据字典,你可以编写少量代码或不编写代码就生成各种业务应用,这就是操作代码的代码,描述数据的数据。

这时候就有童靴问了,你啰哩啰嗦扯了这么多元编程,干嘛标题叫做人生元编程?

因为无论是编程还是人生,都特么是相通的,想清楚了这一点,你就会觉得百无聊赖,因为万事万物要么是熊样要么是鸟样,都脱不出那个框框。具备元编程的语言就具备更强大的操控自己的能力,可以自省,可以反射,可以动态改变和控制自己;具备人生元编程能力的人,同样有自省能力,随时检查和控制自身的情绪和行为,思考自己的想法,改变大脑的动机。

举个简单的例子,当你的理智告诉自己9点就必须开始看书学习的时候,你的大脑会对你说,「亲,可以再看会电视呦,你看沙发都这么舒服……」

缺乏元编程能力的回答是「那……就再看会」,具备元编程能力的回答是「滚!」

扯淡完毕,大家感受一下……


文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· Web站点:macshuo.com

如果您希望持续看到MacTalk,可以点击{阅读原文}对作者进行小额赞助,最近遭遇多起大额捐助,再次感谢,其实来杯咖啡就行,想捐助美刀的,去macshuo.com看看PayPal

杯具中的战斗杯

beiju

这两天写的有点累,本来想休息下,但是有槽不吐枉自为人,于是……

最近写了几篇文章,都及时贴到macshuo.com上了,结果被转的到处都是,尤其是「趣谈个人建站」那篇长文,被转到各种网站和媒体,好一点的加上来源和署名,再好一点的在微博上发的时候@你一下,但是大部分都特么的默默转载、默默复制、默默改名,默默的说来自互联网,艹,你们全家都互联网!

总之结果就是,没有一家媒体或网站吱一声说「我们想转载你的文章balabala……」,又不和你要钱你怕啥呢?还有些个人博客,没事复制来复制去的,你要自己看直接放Evernote或Pocket不就完了么,贴博客上干嘛呢,搞的更自个写的似的。

有位网友评价:

国内版权意识淡得一逼,之前的时候看到一些省级卫视直接使用自媒体发布在优酷的版权作品,还抹掉了来源。在国内已经习惯了免费,甚至很多人觉得直接复制显得自己牛逼。虽然很无奈,但能做的就只有支持正版、支持原创了。

我觉得这位网友说的算轻的,这其实就是要不要脸的问题,创作者幸辛苦苦写了很多东西,您拿过去改改署名和标题,打扮的和自家小姑娘似的,这不是流氓是什么?

其实这样的事情由来已久,我也懒得说了,反正内容传播的目的达到了,至于内容是谁创造的,根本木有人关心。引发今天吐槽的原因是另一件事,今天和图灵的编辑聊天,谈到了他们的电子书盗版问题。大家知道图灵除了传统书籍之外,开始销售pdf版本的电子书,并在每本书的页脚打印了这样一句话「图灵社区会员 XXX专享 尊重版权」,XXX就是购书者的真实姓名,这下您不好意思复制给别人了吧,毕竟每本书上都有您的名字啊。但依然盗的风风火火,要不要脸啊?

这些盗版的传播者恰恰是正版书籍的购买者,买了正版书籍,反而成了盗版的始作俑者,这特么简直是杯具中的战斗杯!

程序员不支持程序员,还能指望谁?


今天推荐一本专讲Mac技巧的书籍,叫做「Mac功夫」,有300多个Mac技巧和窍门,去图灵社区搜索即可,纸质书和电子书都有。我发现我在MacTalk讲过的Mac技巧,一部分内容是和这本书重合的。

如果您是Mac用户,手边放一本,效率高不费劲!

另外,再推荐一下郝培强的新作「新杂志」(iPad版),到App Store搜索「新杂志」下载即可,App和里面的杂志都是免费的,其中的MacTalk杂志下载量依然排行第二,下载量还没超过2000,被胖子的Tiny4Cocoa落下一个身位,你们对得起谁?

克隆高手

gaoshou

不知道多少读者看过最近汤姆·克鲁斯的新作《遗落战境》,影片之宏大和剧情的逆转就不细说了,让我印象深刻的是外星势力通过克隆人类的精英分子来反制人类,掠夺资源的场景。阿汤哥在电影中扮演了一枚帅哥宇航员,要能力有能力,要Pose有姿势,力量与智慧的化身,沉着冷静,风采迷人,实属人类之精华,当然还有一个靓妹纸就不说了,这俩人在一次出航中被抓,外星人估计也是好色之徒,一看帅锅靓妹,直接克隆几千份,随用随克,一会派去东塔一会送到西塔,一会去修理几个机器人,一会去修理几个抵抗者,然后自己在摄像头后面笑的像你大爷!

各位看官看到这估计就明白了,这帮孙子就是慕容一脉复兴啊,这不就是以彼之道、还施彼身么,看来外星大爷也是一点不厚道。

但是大老板看到这估计就嗨皮了,我知道很多老板经常对公司里牛人说,「你看,你这么牛,但是你就一个人牛,这样不好,对吧?你就不能给我培养出xxx个你来,那样不就你好我好大家都好了么?」,这时候估计高手都会坚定的回复一句「你大爷!」

我记得当年京东促销导致服务器全面崩溃时,京东老刘放话「增加三倍服务器,活动再搞一次」,做技术的都知道,想做到性能容量随着服务器数量的增加线性扩展是多么困难的事,没有积累想通过复制绝无可能。机器如此,况高手乎?

所以高手除非能够克隆,每个靓汤都一样英明神武,有灵感有直觉,处理事务解决问题思路都一样一样的。
若非如此,高手不可培养,只能独自成长。

说到直觉,我觉得这是高手的一个特征。虽然自己不是高手,但有时候帮助别人解决问题时往往靠直觉行事,有时候还会觉得,这么简单的解决方法对方怎么想不到呢?这特么就是直觉吧。你有可能说不清楚为什么会想到这个方法,但是知道,那是正确的。我们家老太太有一天冬天患病手疼,我查了大量的医学资料,觉得有可能是腱鞘炎,随后带老太太去医院,那位医生让俺妈简单的做了几个动作,看了看手和臂,简单问了问,说,很可能是类风湿,最好做检查确认下。检查结果确诊为类风湿!这就是高手,他可以通过一些微妙的线索得出结果,而新手往往让你做一堆检查,最后得出一个错误结论!

直觉,这玩意能复制和培养么?

还有,很多公司往往希望通过设置规则和秩序来保证专家和高手有更大的产出,殊不知这样的做法正好适得其反。在技术公司,规则和秩序,更多适合那些不知进取或不思进取的新手和胜任者,人一旦在某个领域达到一定的高度,就有了自己的做法和直觉,方向没问题就行了,复杂的制度反而会抑制他们的创造性。另外,自信往往来自于无知而不是知识,一个人一旦成为高手,就会痛苦的意识到自己知道的是多么少,人生苦短学问太多,这样的人是不需要去鞭策的,给空间和鼓励就好。

扯了这么多,估计有读者要问,「你丫见过高手吗?」

我还算幸运,刚进入洪恩软件的时候身边有几个牛人,其中之一还是我的顶头上司,这哥们技术功能非常扎实,据说读汇编像读《读者》一样,公司要做网站,他就学了几天perl,然后带着我们把洪恩在线搭起来了,后来要做企业级软件,他又学了几天java,带着我们把产品做出来了,那是2001年左右……后来他去创业袅。另一个是独行侠,大老板专门为他配了办公室,里面一堆服务器和显示屏,他经常蜷缩在宽大的座位里抱着键盘编程,我们进去请教问题时看到屋里烟雾缭绕,丫叼着烟翘着二郎腿正在敲打键盘,后来这兄弟搭建了完美时空游戏的底层框架和引擎……。还有一位被大老板誉为国内少有的能够写操作系统级别代码的家伙,后来去了米帝音讯全无……

你们说,这些人能特么的复制和培养么?

高手不可培养,只能独自成长。如果你的团队里有这样的高手,好好珍惜他们并给予他们足够的空间,也许有一天会有数百倍的回报!

以上言论,有可能都是错的!


今天又发现了OS X的一个小技巧,比如你用预览程序打开了多个PDF或图片文件,你想知道其中一个文件的存放位置,可以用右键点击预览程序窗口标题栏上的文件名,会出现一个下拉菜单,菜单中会递归显示该文件的上级文件夹,直到根目录。点选可以打开相关的文件夹,大家可以尝试一下。

打开其他类型的文件也是一样的,比如keynote、pages等,你也可以在safari上试试,看看是什么效果。


文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · Web站点:macshuo.com

如果您希望持续看到MacTalk,可以点击{阅读原文}对作者进行小额赞助

趣谈个人建站

website-edit-2

这篇文章是分四次完成的。虽然是技术文章,但我尽量把这件事写的轻松一点,大家读起来也更有趣。最后形成了一篇完整的趣谈个人建站。

2000年前后是第一波互联网浪潮,无论是幸与不幸,我的早期职业生涯都是从这波浪潮开始的,那时候很多ASP(Application Service Provider)厂商会给个人用户免费提供一些静态建站功能,大家可以写一些HTML+CSS+JS的页面传上去,算是早期的个人的站点,我记得自己的第一个站点叫做「雪域苍穹」,貌似取自一首流行歌曲的名字。无论是名称还是页面,现在看来都土的能掉出翔来,但当时的感觉是,这特么的太酷了。

后面做过一些个人网站,由于各种原因都关掉了。再后来开始写博客,很多人开始建自己的博客站点。站点不少,一直保持更新的倒没几个。我的想法是,专业的事就让专业的厂商去做吧,所以一直也没建个人博客网站,断断续续的在博客园和图灵社区写一些东西,也算是保持更新了。

终于有一天,微信公众平台来了,一个偶然的机会注册了MacTalk(原Mac技巧),之后一口气写了一百三十多篇文章,文字总数超过了我前几年的博客总和,而且保持了一定的文字水准(自以为-_-#)。然后就有很多读者一直提醒我,MacTalk里的内容有一部分是技术性质的,有存留价值,如果能够进行查询检索,对Mac的新老用户都有帮助。我想了想也是,扯淡的东西估计没人愿意重复阅读的,技术类又很难记在当下,所以就准备开始着手建站,然后macshuo.com就建成了。下面我把整个过程写一下,供大家参考,另外,我只说自己的选择,不会去比对各种指标,比如Linode和国内VPS的优劣,Apache和Nginx的性能差异等等,如果你想了解这些东西,那就用Google百度一下。

搭建个人站点,大致需要做这么几件事情:

  • 一台具备公网IP的服务器
  • 安装操作系统,搭建环境
  • 购买域名,域名绑定IP
  • 部署应用程序

基本上这四套组合拳打完,你的个人网站就算建起来了,后续的事情就是添砖加瓦和蓬荜生辉了。

好把我们依次介绍:

服务器

大部分公司都会有自己的服务器和公网IP,要么托管要么自建机房。但对于个人用户来说,就没必要费时费力做这个事情了,购买一个VPS(Virtual Private Server)即可。什么是VPS,建议大家去维基百科上查一下,简单来说就是你会拥有一台虚拟主机,除了看不见机箱之外,你可以像操作一台实体服务器那样操作它,独立操作系统和硬盘空间、独立内存和CPU资源、独立的执行程序和系统配置等,可以自己安装操作系统和软件,独立重启等等。

在VPS的选择上,我用的是Linode。Linode是一家来自于米帝的专注于提供 Linux VPS 的服务提供商, 虚拟化技术采用了Xen,Linode的含义是Linux Node。注意,这里的操作系统是Linux,我推荐所有个人建站都采用Linux,不解释,如果你想采用Windows Server,后面的内容就不用看了。

Linode在国内外口碑都不错,价格适中,质量可靠,童叟无欺。Linode提供了各种Linux操作系统供选择,比如Ubuntu、Redhat、Debian、CentOS等等,装系统和重装系统都非常简单。

好,我们下面简单说一下步骤,访问https://manager.linode.com/session/signup
填写邮箱、用户名密码,就算注册成功了,Linode会给你发封邮件确认,打开那个确认链接,大家就会看到下面这张图的内容:

website1

Linode通过它的ticket system(一套支持系统)提供7 x 24 x 365的支持服务,看清楚,不是7 x 24 x 365的不停机服务,我现在特别烦一些企业客户,一谈就说永不宕机,特么除了上帝谁能保证永不宕机?时间长了自个都得宕!另外Linode还提供了4小时的免费试用服务,比较厚道,如果你试试觉得不爽还可以选择不玩。

选择继续,就可以选机房了,Linode目前提供了东京和欧美等地的机房选择,我选了东京机房,据说是针对亚太地区用户的需求新开辟的,速度很快。然后选操作系统,设置硬盘大小、root密码等,点击「Rebuild」,你就进入了VPS的控制台,等Host Job Queue的所有任务都是绿色的Success,就可以点击「Boot」,启动系统。然后找到Remote Access这个标签,点进去就可以找到这台服务器的访问IP,打开终端,输入ssh root@x.x.x.x,就可以登录系统了,看到了吧,very simple!

试用之后,如果你觉得可以,点击Account标签,完善自己的信息,选择服务器配置,支付信息,然后就可以完整支付流程了。

我选的是Linode 1024套餐(24 GB DISK, 2000 GB),按照年付费的话230刀左右,大家这两天赞助的碎银子,差不过够一年年费了:)支付方式包括Visa,MasterCard,American Express,只有要信用卡还是很方便的。

另外需要注意的一点是,拿到了IP之后,一定要在不翻##墙的情况下测试一下是否可以正常访问。我就遇到这个问题了,在国内没法访问,但是挂了VPN的就可以,我估计是哪个倒霉孩子以前用过,被墙之后不用了。

不得已我发起了一个Ticket(支持问题),说我在中国大陆不能访问这个IP,但通过VPN可以,那哥们响应倒是挺快,但显然不懂我朝行情,让我执行mtr –r x.x.x.x,mtr可以结合ping、nslookup、tracert诊断网络传输问题。我只得把数据返给他,结果人家还要其他数据,我就不耐烦了,用蹩脚的英文给丫解释了一下什么是伟大的墙,基本意思就是少特么废话,赶紧给我换个IP。那哥们看我气势挺盛,赶紧给我换了个IP,我一试没问题了,说了声三克油,他说威尔卡姆,这事算结了。两人共交手五个回合,用时2小时,效率还可以。

好,服务器部分就介绍到这里。以下是我的linode推荐码,如果大家要购买Linode服务,可以用这个链接。

http://www.linode.com/?r=6bd100da844d8d2c191680a4792610467ce9052


搭建环境

我选用的服务器是Ubuntu12.04,64位。以下内容均基于该环境描述。

拿到了主机IP,你就算拿到了新房的钥匙,但是离入住还远着呢,因为你那个主机现在就是个毛坯房,除了进去看看,什么都不能干。好,下面我们做一下简装修。

1、创建用户

第一次登录需要root用户,什么是root?root就是整个Linux操作系统最牛逼的主,他想干嘛就干嘛,他想删谁就删谁,他是光他是电他是唯一的神话,他就是我朝就是我D,所以非常危险,你们懂的。如果用root执行一下rm -rf,那整个锡安就会被抹掉,尼奥也拯救不了,如果root愿意,他可以抹掉你曾经存在过的所有痕迹。所以,我们不能没事就用root进去耍,为了解决这个问题,我们必须要建立一个agent,平时是普通用户,关键时刻充当root的角色。

具体操作如下:

首先用root登录系统

ssh root@x.x.x.x

创建一个新用户,用户名随你喜欢,比如叫做mactalk

adduser mactalk

按照提示信息输入密码和相关信息,就可以完成操作。完成之后系统就会自动建立/home/mactalk路径。

然后是授权,输入

visudo

在编辑器中找到如下内容:

root    ALL=(ALL:ALL) ALL

在下面加一行

mactalk    ALL=(ALL:ALL) ALL

通过ctrl+x保存退出即可。然后就可以退出root,用mactalk重新登录(ssh mactalk@x.x.x.x),登录进来默认目录在/home/mactalk下,当你想行使root权限时,请在命令之前增加sudo,按照系统提示输入密码即可执行操作。

2、选择shell

用户建好了,下面我们为用户选择一种shell,估计小白看到这个又毛了,啥是shell?

shell就是Linux的一个外壳,你理解成衣服也行。它负责外界与Linux内核的交互,接收用户或其他应用程序的命令,然后把这些命令转化成内核能理解的语言,传给内核,内核是真正干活的,干完之后再把结果返回用户或应用程序。比如你对shell说,「你好」,shell就跑到内核那说,「老大,有人问候你呢」,内核就不耐烦的说,「有事说事,我特么忙着呢」,shell就把这条信息反馈给你,大致就是这样。以前讲Mac技巧的时候,经常跟大家说在终端里输入一些命令,那就是Mac的shell,都是一脉相承的。

Linux提供了很多种Shell,你要问我为什么要有这么多,我只能告诉你,你为毛同类型的衣服有那么多件?花色,质地还不一样。写程序比买衣服复杂多了,而且程序员是不惮于把事情搞复杂的,牛程序员看到不爽的shell,就会自己重新写一套,慢慢形成了一些标准,常用的shell有这么几种,sh、bash、csh、zsh等,想知道你的系统有几种shell,可以通过以下命令查看:

cat /etc/shells

这些shell我就不解释了,维基百科和百度百科都写的很清楚,总之,坊间流传,普通程序员用bash,文艺程序员用zsh,XX程序员直接用原生的sh,我建议大家文艺一点,用zsh好一些,功能也最强大。目前各个版本的Linux默认的shell都是bash,如果你想用zsh,需要安装一下,如下:

sudo apt-get install zsh

具体的配置我就不介绍了,感兴趣的读者,可以参考

http://leeiio.me/bash-to-zsh-for-mac/

3、通用工具

介绍几个简单的工具,建站必备。

  • wget,命令行下载工具,安装sudo apt-get install wget,使用方式后面会介绍。

  • tmux,一个优秀的终端复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权。使用它最直观的好处就是,通过一个终端登录远程主机并运行tmux后,在其中可以开启多个控制台而无需再「浪费」多余的终端来连接这台远程主机。好吧,这句话有点绕,简单说就是用tmux打开的会话可以一直驻留在服务器上,下次去看时还是上次来的样子。就像你是某个酒店的VIP客户,住完之后不会人走茶凉,也不会断电,下次去时茶还热着,灯也亮着,就这样。

    安装方式sudo apt-get install tmux,对使用方式感兴趣的读者去查一下吧,中文介绍很多,记住,热键是ctrl+b。

  • vim,在Linux上少不了编辑文件,我推荐Vim和Emacs,一个是编辑器之神,一个是神的编辑器(或者是伪装成操作系统的编辑器),我是Vim党,目前在学习Emacs。我之前写过一个Vim系列,有兴趣的可以去看:

    http://www.cnblogs.com/chijianqiang/tag/vim/

    从原理到配置、使用都有非常详细的介绍,那也是个大坑,还没写完,但写了MacTalk就变成顾此坑失彼坑了。

差不多就这几个,其他的工具随用随装吧。


域名和DNS

服务器和环境构建都写完了,今天介绍一下域名和DNS的那点事儿,稍微复杂一点的软件部分放在最后说。

域名是什么东西呢?就是一个网站的标识和入口,由「.」分隔开的字符串构成,洋名叫Domain Name,比如苹果公司网站的域名就是apple.com,在浏览器地址栏输入这个域名,就可以访问苹果的网站了。为什么要有域名呢,有了公网IP,不就可以访问网站了么?

咳,这么说吧,如果有人说找个地方聚聚,你说,咱们经度116.46、纬度39.92,不见不散!地方倒是对,但是估计实名菜刀和无名臭鞋就飞过来了。IP地址就是你的服务器在互联网世界的经纬度,域名就是对应IP的门牌号码,就像人们能记住门牌号记不住经纬度一样,在网络世界里,大家都是记域名的。与现实世界不同的是,门牌号和实际地址正常情况都是一对一的,而域名和IP地址是多对一的,也就是说,只要你有一个公网IP,就可以申请多个域名,对应多个应用,非常方便。

现在你知道了吧,要建站,必须要有域名。能够提供域名的厂商很多,国内外都有。不过我强烈推荐大家购买国外厂商的域名,免去提交材料和备案之苦,国外动动鼠标和小手分分钟搞定的事情,国内要提交各种材料、备案、定期监管balabala……具体差异大家看看www.apple.com.cn和www.apple.com两个网站的底部知道了,苹果中国的底部有「京公安网安备 11010500896|京ICP备10214630」,再看看米帝的网站,毛都没有,都是自己的网站信息,我们只能说,米帝的监管制度太不健全了,真为他们捉鸡!

国外的域名厂商推荐www.godaddy.com和www.name.com,都不错。我使用的是Godaddy。

Godaddy是全球最大的域名注册服务商,全球市场占有率超过30%,一般情况下不会被我朝屏蔽。如果屏蔽了Godaddy,会导致在大陆无法访问全球近三分之一的网站,所以相对安全,相对,你懂的。另外Godaddy开始支持支付宝了,对我朝臣民来说付费变得方便无比。

在域名选择上,最好满足这几点要求:有意义、好记、简短,另外尽可能使用com(通用顶级域名)。申请步骤也很简单,访问www.godaddy.com,在搜索框输入你想要购买的域名,点击搜索,你会看到这个域名的具体信息,是否被使用,相关域名,价格等信息,域名后缀一般有com、net、me、us、info等,建议选com,不建议选info,据说info结尾的网站大部分是垃圾网站,会被搜索引擎屏蔽。

选好域名后,点Add,加入购物车,如果不需要其他服务,一路Continue即可,最后设置支付信息,支付宝在最后一列,然后「Place Your Order」,根据提示注册和支付即可。价格与域名信息相关,一般几美元到10几美元不等。

购买完成之后,进入Godaddy的域名管理控制台,找到你购买的域名,把域名和你的IP地址绑定起来,就可以通过域名访问你的网站了。这里就涉及到DNS了。

DNS的洋名一般说成Domain Name System,就是给域名提供服务的。光有域名没用,还得有相关的服务能够把域名解析成IP地址才行,DNS就干这事。DNS的扩展性非常好,不依靠单一的巨型主机索引,而是通过分布式系统提供服务,全球能够提供DNS服务的服务器多如牛毛数不胜数,但大哥级别的根服务只有13台,目前的分布是:主根服务器美国1个,设置在弗吉尼亚州的杜勒斯;辅根服务器美国9个,瑞典、荷兰、日本各1个,旗下是各个级别的域名服务器。

DNS的工作方式挺复杂,有兴趣的直接去Google吧,我简单描述一下,大致的场景是这样的,比如小明是个DNS服务器,有一天你想访问macshuo.com,就问,「小明啊,我想去听听MacTalk,怎么走呢?」,作为忠诚的DNS战士,小明的服务态度是值得赞赏的,如果他知道的话,就会立刻告诉你地址,比如从这个街区左转左转左转再左转balabala……如果丫不知道也没关系,他会反馈给上级主管,说「最近有人新建了个MacTalk网站,我这还没记录地址,你晓得不?」,上级部门如果知道就会把地址发给小明,说「你丫长点记性,把这地址记下来行不?别特么老问了,最近自媒体网站可真多啊,哎……」,这样小明就会把地址告诉你,并且用心的把这个地址记到自己的小本本上,下次有人再问,就直接告诉人家答案了。如果上级部门也不知道,那就继续问,直到反馈到根服务器为止,反正只要你注册了,总能找到。差不多就这样吧。

Godaddy默认提供了DNS服务,点击DNS Manager,在弹出的设置面板中设置你的网站IP即可,具体的图文教程网络上很多,我就不费那事了。但是我的使用结果是,Godaddy提供的DNS在国内访问不太稳定,时不时就不能访问了,具体为啥我也不清楚。因为购买了Linode服务,我最后采用了Linode的DNS,具体的做法是:

  1. 登录linode.com,点击DNS Manager标签,进入管理控制台
  2. 选择Add a domain zone
  3. 填写域名、邮件地址和IP
  4. 点击Add a Master Zone,就算完成了

最后一步就是在Godaddy的控制台里设置一下Linode的DNS服务器,很简单就不描述了。


应用程序和部署

经过前面三篇系列文章的介绍之后,我们现在房子也有了,做了简装修,还申请了地址和门牌号,最后一步就是入住,也就是部署你的应用程序。

针对网站提供的服务不同,需要不同的技术选型,我的需求就是做个风格简约的博客,用来存放MacTalk的文章,同时有个地方能够随意发表一些个人观点,就这么简单,所以针对这个需求进行选择即可。大家将来建站的时候也是一样,明确自己的需求,不要为未来买单,尽量搞的轻量级一些,最忌讳给的是龙套的钱,您自个却按照男猪脚进行角色扮演,不提倡。

搭建轻量级的博客不建议使用.Net或JavaEE的技术,这些技术都比较重,必要性不大。Php、Python、Ruby相关的框架都是可选的技术。因为我对Python相对熟悉一些,最初想找个开源的Python Blog框架,不过后来综合对比了一下,发现在个人博客领域,WordPress基本上无出其右,技术成熟、安装方便、性能稳定、插件众多,实在是居家建站、个人扯淡之必备良药,就是它了。

在确定了基本需求和工具之后,我们看看涉及到哪些技术:

1、Nginx Nginx是一款高性能的HTTP服务器软件,由俄罗斯的一位大牛Igor Sysoev开发的,源代码以类BSD许可证的形式发布。Nginx的设计非常轻量级,由内核和模块组成,内核微小简洁,模块功能强大,静态编译。Nginx做的事情简单来说就是,接收客户端(浏览器)的HTTP请求,然后通过映射机制把不同类型的请求交给不同的模块去处理,比如html、图片、css等可以交给静态资源模块处理,还可以做压缩、缓存等,php、python等类型的请求则交给FastCGI模块去处理,完成业务逻辑。

什么是FastCGI呢?这玩意就等于是HTTP服务器和动态脚本语言通信的接口,就像一个粘合剂一样把HTTP请求和动态脚本处理整合在一起,顾名思义,处理速度非常Fast!

Nginx可以说是HTTP服务器软件市场的新贵,目前国内很多大型网站都采用了Nginx作为默认的web服务器,比如阿里、腾讯、新浪等等,国外就更多了。当然,在Nginx未涉足江湖之前,这个领域的大哥叫做Apache,那时候几乎所有的HTTP Server都是清一色的Apache,一时之间风头无两。但是这哥们大哥做久了就不思进取,跟国内很多大佬一个德性,没竞争对手时就特么不知道改进,直到Nginx出来抢了丫半壁江山,现在知道努力了,当初干嘛去了?

那么Nginx比Apache优秀在哪呢?

  • Nginx的所有模块都是全静态编译的,启动Nginx后,Nginx的模块被自动加载,静态库执行效率更高。

  • Nginx支持epoll(Linux系列)和kqueue(BSD系列)I/O事件通知机制。完,又特么出现两个名词!这让人情何以堪、文何以完啊?简单说说epoll吧。epoll是Linux2.6正式引入的提高网络I/O的处理方法,它的几个优点是:单一进程打开的FD(文件描述符)数量仅受限于操作系统,1GB内存的机器上大约是10万左右,这一点大大提升了处理海量请求的能力;采用共享内存的模式避免内存拷贝;随着打开FD的数量增加,I/O效率不会线性下降。总之,大家知道epoll很牛逼就是了。

  • Nginx支持多进程的工作方式,Nginx启动后会有一个master进程,多个worker进程。worker进程一般对应服务器的CPU数量,你有个8核的CPU,最好把worker设置为8。master负责接收外界信号,并向worker发送信号,监控worker的运行状况,当worker挂掉的时候,启动新的worker。写到这我发现,这特么活脱脱就是一个地主老财打压长工的模式啊!
    尤其是Nginx的不中断重启机制,当系统配置变化需要重新启动Nginx时,我们就给地主(master)发个消息,说这批长工(worker)太老了,都得换掉,你看着办。地主收到消息后就开始偷偷雇佣新的长工(worker),然后假惺惺的告诉老长工,把手头的活干完就行了,别太累了,啊。这时候如果有新的请求,就会交给新长工干,等所有的老长工把活都干完了,就直接fire,绝不留情。这样,整个服务无中断重启过程就完成了,就特么一个字,黑!
    当然长工(worker)也不是省油的等,他们干活的过程非常复杂,会用到我们上文中提到的epoll机制,如果有人感兴趣,以后再讲吧,这么写下去这个系列就没完了。

Nginx功能非常强大,一本书也写不完,我简单就说这么几句。老话,有兴趣的,用Google百度一下!

大概了解了Nginx的工作机制,下面安装就比较简单了,Nginx可以编译安装,也可以在线安装,对于普通用户来说,使用apt-get在线安装即可,省得自己去找依赖关系。

#安装
sudo apt-get install nginx
#启动
sudo service nginx start

如果安装和启动都没有问题,我们再调整几个参数就可以了。

找到/etc/nginx/nginx.conf,做以下几个改动:

  • 把worker_processes设置为服务器的CPU核数
  • 在event里增加use epoll
  • 把worker_connections的值设置大一点,如果是1G内存,不要大于100000/worker_processes。

其他的采用默认值即可,然后重新加载参数:

sudo nginx -s reload

好,Nginx就算妥了,后续在安装PHP和WordPress时还要做一些配置。

我有时候觉得,当我们在计算机领域遇到问题的时候,总会出现一些技术神山上的神人,他们时不时会俯视一下凡人的IT世界,高兴了就顺手解决几个bug,发明几个新玩意,epoll和Nginx就是这些玩意,我们用好就已经心满意足袅。

2、MySQL

MySQL是应用最为广泛的开源数据库,这个没什么可说的,非常成熟的技术,直接安装即可:

sudo apt-get install mysql-server

安装过程中,MySQL会提示你设置root密码(root的作用参考之前介绍的,把操作系统换成数据库即可)。如果安装时没设置密码,等MySQL起来后用mysqladmin改也行,用sql改也行,简单不啰嗦。

3、PHP

WordPresss是基于PHP开发的,所以我们得为WordPress准备好环境,安装PHP。

sudo apt-get install php5
sudo apt-get install php5-fpm

php5-fpm是PHP FastCGI的实现之一,能够更好的管理PHP进程,控制内存使用,平滑重载等,现在我们都用它!

下面做一点简单配置,打开php.ini文件:

sudo vim /etc/php5/fpm/php.ini

找到cgi.fix_pathinfo=1这一行,把1改为0。 值为1时,php的解释器会尽可能的去解析客户端请求的文件各种类型,这会引发一些安全漏洞,设置为0时,解释器只会去解析特定的文件类型,设置为0是一种相对安全的处理策略。

修改www.conf:

sudo vim /etc/php5/fpm/pool.d/www.conf

listen = 127.0.0.1:9000 修改为 listen = /var/run/php5-fpm.sock,前者是走TCP socket,后者是Unix domain socket,如果服务都在同一台机器上,建议使用后者,效率更好一些。

重新启动PHP,这部分的配置就算完成了:

sudo service php5-fpm restart

4、WordPress

好的,我们从后场断球后左冲右突,盘过对方和我方的所有进攻和防守队员,来到球门前面,发现就差最后一关:WordPress。下面我们看看如何安装和配置WordPress。

首先下载WordPress的最新版本,我用了中文版,下载和解压缩:

wget http://cn.wordpress.org/wordpress-3.5.1-zh_CN.tar.gz
tar -xzvf wordpress-3.5.1-zh_CN.tar.gz 

在MySQL中为WordPress创建用户和数据库,这部分很简单就不描述了。我们设定数据库为wordpress,用户名为mactalk,并且把数据库编码改为UTF-8。

在解压好的wordpress文件夹下,执行:

cp wp-config-sample.php wp-config.php
vim ~/wordpress/wp-config.php

按照文件内容注释填写数据库名称、用户名、密码、数据库编码使用UTF-8,然后保存退出。

为wordpress创建www文件夹,并且把完整的wordpress目录复制到www文件夹下,并设置相关权限:

sudo mkdir -p /var/www

sudo cp -r ~/wordpress/* /var/www

cd /var/www/

sudo chown www-data:www-data * -R 

sudo usermod -a -G www-data username

安装php的MySQL驱动

sudo apt-get install php5-mysql

设置虚拟主机:

在/etc/nginx/sites-available下创建文件wordpress

sudo vim wordpress

内容如下:

server {
    listen   80;

    root /var/www;
    index index.php index.html index.htm;

    #根据 IP 或域名自定义
    server_name 3.3.3.3;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
          root /usr/share/nginx/www;
    }

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$
    location ~ \.php$ {
        #fastcgi_pass 127.0.0.1:9000;
        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }

}

这个文件的作用就是把Nginx和WordPress粘合在一起,接收客户端的请求并反馈响应结果。有几点要注意的是,root设置为/var/www/,index部分增加index.php,fastcgi_pass对应之前设置的unix socket:unix:/var/run/php5-fpm.sock。

为wordpress文件建立软连接:

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress

最后重新启动nginx和php5-fpm,就算大功告成了:

sudo service nginx restartsudo 
service php5-fpm restart

如果一切正常的话,访问你的域名或者公网IP,就可以看到wordpress的提示页面,根据信息提示初始化数据库,创建管理员,基本框架就算建好了,之后就是完善和优化,比如性能优化、主题选择、配置信息、插件选择、扩展开发等等,大家慢慢体会吧。

这个系列就算完结了,我发现写这种文章想做到好玩好看、还能言之有物把事说清楚,挺难也挺累,好在结了。


第一个十年我才华横溢,「贼光闪现」,令周边黯然失色;第二个十年,我终于「宝光现形」,不再去抢风头,反而与身边的美丽相得益彰;进入第三个十年,繁华落尽见真醇,我进入了「醇光初现」的阶段,真正体味到了境界之美。——台湾作家林清玄


文章内容来自微信公众账号:MacTalk
· 微信号:sagacity-mac
· 回复 m 可以查阅所有历史文章和Mac Tips
· Web站点:macshuo.com

如果希望持续看到MacTalk,点击{阅读原文}对作者进行小额赞助

Mac评——交流、阅读和音乐类App在iOS7的体验

appsonios7

今天是端午节,祝大家节日快乐,多吃粽子多长肉,俗话说每逢佳节长三斤么!

本来今天想休息一天,后来想到前天MacTalk节日无休的承诺,还是随便说两句吧。今天简单说说几个常用的iOS App在iOS 7上的体验。

iBook:与iOS 6上的体验并无二致,非常稳定,但是由于iBook不是iOS的原生应用,目前依旧充满了拟物风情,或者叫愤青更合适一些。那张木纹大脸充满了上一代iOS的愤怒和悲情,还有那张大书架,哎,风萧萧兮易水寒,多看一眼是一眼。


Kindle:体验了大厂风范,在iOS7上表现优秀,图标和控制台风格既不拟物,也不扁平,保持了Amazon的风格,所以说,不跟风的后果,最终结果要么死掉,要么形成自己的风格。Amazon是个低调的巨人,虽然实际上一直在与苹果分庭抗礼,但常常隐藏在茫茫海洋中,仅露出冰山一角,似乎不那么时尚,但一直在高速成长。


微信:微信4.5在iOS7上变现不尽如人意,UI方面没什么可说的,主要是功能问题,还不少:

1、有一些长文本消息会丢信息,无论是点对点还是还是公众平台群发都存在这个问题。 2、朋友圈没法选中图片,也就是说如果你升级了iOS7,就只能通过照相方式在朋友圈分享图文消息。 3、朋友圈分享文字消息时,文字输入框错位。 4、微信的API似乎也有些问题,比如我想通过虾米分享音乐到朋友圈而不可得。

就写这么多吧,微信4.5在iOS7上勉强达到可用程度,让我们期待5.0早日到来。


多看:多看阅读目前在iOS7上基本没法用,控制中心和书城都是html和javascript,估计用了不少web技术,出现了兼容问题,不过多看阅读的开发经理立刻给我反馈「下个版本就会修正,已经在等待审核了」,这效率,估计其他阅读类厂商要狠狠感受一下。


豆瓣:我常用的豆瓣App是豆瓣阅读和豆瓣FM,这两个App的UI设计已经非常贴合iOS7了,所以没有任何突兀的感觉,尤其是新版的豆瓣FM3.0,基本上形成了豆瓣风格的小清新和扁平化设计,绿、蓝是基本色系,配合深浅不同的红色点缀,让人一看就是豆瓣的作品,操作简洁,风格典雅,如果能够增加分享到微信的功能就更好了。

经过读者提醒,发现豆瓣有分享到微信朋友圈的功能,但是比较隐蔽,需要单击专辑图片,出现歌词界面,右上角才会出现分享图标,有点过于难找了。

新版的豆瓣阅读(iPhone版)抛弃了原来的排版引擎,启动了全新的引擎和UI设计,可以直达商店购买书籍,整体操作也更为流畅,但是目前的新版没有书签功能,多手势基本上没发挥作用,我觉得完全可以通过多手势实现目录导航、商城和阅读切换等。希望这个版本尽快登录iPad。目前的多看阅读在iOS7上偶尔闪退。


字节社:起步很早的阅读App,最早叫做唐茶,我在字节社也买了一些书,阅读体验还不错,不过目前在iOS7上基本上没法用,书籍同步倒是没问题,但一打开就闪退,估计下个版本应该会解决这个问题。


云中书城:不知道什么时候在App Store下架了,似乎很久没更新,在iOS7上可用,偶尔闪退,也许是iOS7的问题?最近盛大起点出走的问题,给云中书城带来了很多不确定性,大家还是把书先看完再说吧。


在线音乐类:虾米和Jing。除了豆瓣FM,我常用的两个在线音乐App还有虾米和Jing,目前在iOS7上表现都不错,Jing的设计把拟物和扁平进行了完美的结合,因为它的封面是一个扁平的唱片(太帅了),有质感又非常扁(哈哈),根据你的情绪选择音乐。虾米的设计中规中矩,既不拟物也不扁平,走的是讨巧的路线,但是歌多质量好,结合在线网站,用户也不少。尤其是离线和分享,挺好。但问题就出在分享上,目前分享与iOS7不太兼容,不过估计改起来不困难,等下个版本吧。

不写了,没想到这玩意也写了这么多,最近已经堕落到写字比写代码快了,我要检讨一下。

我的iOS App不少,但主要的用途是交流、阅读和听音乐,所以就说这几个吧,期待它们的新版本。

祝大家晚安。


文章内容来自微信公众账号:MacTalk · 微信号:sagacity-mac · 回复 m 可以查阅所有历史文章和Mac Tips · Web站点:macshuo.com

如果文章对你有价值,点击{阅读原文}对作者进行小额赞助