June 13, 2015
Dev with Vagrant and Docker
"前言 为了在团队里搭建统一的本地开发环境,最近花了点时间用了下vagrant和docker,在此做个记录, 这也算一个DevOps的实践。\nVagrant介绍 Vagrant 是一款用来构建虚拟开发环境的工具,非常适合 php/python/ruby/java 这类语言开发 web 应用,“代码在我机子上运行没有问题”这种说辞将成为历史。\n我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,非常霸气。\n以上介绍直接抄自网络,我觉得介绍的很到位。\n「注意点:」\nvagrant up命令执行后,如果看到下面的错误信息,则需要安装另外一个工具:\n[default] The guest additions on this VM do not match the installed version of VirtualBox! In most cases this is fine, but in rare cases it can prevent …"
June 9, 2015
golang中flag包的用法
"golang中flag包主要用来CLI下,获取命令参数,示例如下mysql.go:\npackage main import ( \u0026#34;flag\u0026#34; \u0026#34;fmt\u0026#34; ) func main() { host := flag.String(\u0026#34;h\u0026#34;, \u0026#34;localhost\u0026#34;, \u0026#34;请指定一个主机\u0026#34;) user := flag.String(\u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定数据库用户\u0026#34;) port := flag.Int(\u0026#34;P\u0026#34;, 3306, \u0026#34;Port number to use for commection or 0 for default to, in port 3306\u0026#34;) //var name string //flag.StringVar(\u0026amp;name, \u0026#34;u\u0026#34;, \u0026#34;root\u0026#34;, \u0026#34;请指定用户名\u0026#34;) flag.Parse() //参数解析 fmt.Println(\u0026#34;主机地 …"
May 29, 2015
mac下的yum包管理工具MacPorts
"这里推荐安装 Homebrew,好像安装这个的用户比较的多的,安装命令也非常的简单。\nMac下面除了用dmg、pkg来安装软件外,比较方便的还有用MacPorts来帮助你安装其他应用程序,跟BSD中的ports道理一样。MacPorts就像apt-get、yum一样,可以快速安装些软件。\n除了这个还有一些类似的工具: Homebrew 和 Fink。\nFlink是直接编译好的二进制包,MacPorts是下载所有依赖库的源代码,本地编译安装所有依赖,Homebrew是尽量查找本地依赖库,然后下载包源代码编译安装。 Flink容易出现依赖库问题,MacPorts相当于自己独立构建一套,下载和编译的东西太多太麻烦,Homebrew的方式最合理。\n下面将MacPorts的安装和使用方法记录在这里以备查。\n访问官方网站http://www.macports.org/install.php,这里提供有dmg安装和源码安装两种方式,dmg就多说了,下载 MacPorts-2.3.3-10.10-Yosemite.pkg,下一步下一步安装即可。\n通过Source安装MacPorts\nwget …"
May 24, 2015
mac终端中显示tree的命令(转)
"寻觅了良久终于找到了mac下如何在终端显示tree的命令了,作为从linux下转过来的人,还没适应mac的finder,还是喜欢在命令行下查看文件。\n命令:\nfind . -print | sed -e \u0026#39;s;[^/]*/;|____;g;s;____|; |;g\u0026#39; 然后手动alias一下,在你的.bash_profile或者.zshrc中添加:\nalias tree=\u0026#34;find . -print | sed -e \u0026#39;s;[^/]*/;|____;g;s;____|; |;g\u0026#39;\u0026#34; 搞定\n要是能显示颜色和控制层级就更好了。\nPS:也可以通过brew install tree 安装。"
May 1, 2015
ios8中action segue
"os8 action segue 有几种方法,一般选择哪一个,每种方法都有什么用,在什么环境下使用?\nApple的解释在这里: https://developer.apple.com/library/ios/recipes/xcode_help-IB_storyboard/chapters/StoryboardSegue.html 我的翻译: Show: 在master或detail区域展现内容(典型的如iPad的设置界面,左侧是master,右侧是detail),究竟是在哪个区要取决于屏幕上的内容,如果不分master/detail,就单纯的把新的内容push到当前view controller stack的顶部 Show Detail: 大致同Show,在detail区域展现内容,如果不分master/detail,新的内容取代当前view controller stack的顶部 Present Modally:模态展示内容 Present as Popover:在当前的view上出现一个小窗口来展示内容,无处不在的“选中文字后出现 复制/翻译 按钮就是这个 Custom:自定义的"
April 18, 2015
vmware11下安装mac osx 10.10教程(原创)
"推荐此方法:\n一. 安装vmware 12 pro的破解补丁(unlocker207)\nvmware 12 pro unlocker207( 204版本在vm11处可以使用,在vm12下不管用,各版本下载 http://www.insanelymac.com/forum/files/file/339-unlocker/ )\n二. 下载 Yosemite Install(14F27)_10.10.5.cdr 镜像文件。安装方法同windows一样,设置为cd/dvd就可以了。默认vmware只显示iso文件,选择一下显示所有文件即可。\n安装过程中会提示一下信息,和下面教程的错误和解决方法都一样。\n===============================================\n不在推荐使用以下这种方法,网络安装特别的慢,另外版本已经过时。推荐使用上面的方法安装!\n在安装前请检查您的硬件配置是否支持,特别注意是”虚拟化”功能,有的主板虽然支持,但默认是关闭状态的,需要在bios里开启才可以。\n所需软件:\n1.mac 补丁 unlocker 2.mac os x 10.10.3 …"
April 8, 2015
golang中的sync.WaitGroup
"Golang的sync的包有一个并发原语WaitGroup,在日常开发中比较的有用。\nWaitGroup的用途:它能够一直等到所有的goroutine执行完成,在其期间会会阻塞主线程的执行,直到所有的goroutine执行完成。\n这里要注意一下,在其中的多个goroutine 的执行结果是没有顺序的,调度器不能保证多个 goroutine 执行次序,且进程退出时不会等待它们结束。\nWaitGroup总共有三个方法:Add(delta int), Done() 和 Wait()。简单的说一下这三个方法的作用。\nAdd: 添加或者减少等待goroutine的数量\nDone: 相当于Add(-1)\nWait: 执行阻塞,直到所有的WaitGroup数量变成0\n举个例子\npackage main import ( \u0026#34;fmt\u0026#34; \u0026#34;sync\u0026#34; \u0026#34;time\u0026#34; ) func main() { var wg sync.WaitGroup for i := 0; i \u0026lt; 5; i++ { wg.Add(1) go func(n int) { defer …"
April 8, 2015
Golang语言的GOPATH与工作目录详解
"这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置、应用目录结构、编译应用等内容,需要的朋友可以参考下\nGOPATH设置\ngo 命令依赖一个重要的环境变量:$GOPATH\n(注:这个不是Go安装目录( GOROOT)。下面以笔者的工作目录为说明,请替换自己机器上的工作目录。)\n在类似 Unix 环境大概这样设置:\nexport GOPATH=/home/apple/mygo 为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。\nWindows 设置如下,新建一个环境变量名称叫做GOPATH:\nGOPATH=c:mygo GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下\n以上 $GOPATH 目录约定有三个子目录:\n1.src 存放源代码(比如:.go .c .h .s等)\n2.pkg 编译后生成的文件(比如:.a)\n3.bin 编译后生成的可执行文件( …"
March 30, 2015
亿级用户下的新浪微博平台架构
"序言 新浪微博在2014年3月公布的月活跃用户(MAU)已经达到1.43亿,2014年新年第一分钟发送的微博达808298条,如此巨大的用户规模和业务量,需要高可用(HA)、高并发访问、低延时的强大后台系统支撑。\n微博平台第一代架构为LAMP架构,数据库使用的是MyIsam,后台用的是php,缓存为Memcache。\n随着应用规模的增长,衍生出的第二代架构对业务功能进行了模块化、服务化和组件化,后台系统从php替换为Java,逐渐形成SOA架构,在很长一段时间支撑了微博平台的业务发展。\n在此基础上又经过长时间的重构、线上运行、思索与沉淀,平台形成了第三代架构体系。\n我们先看一张微博的核心业务图(如下),是不是非常复杂?但这已经是一个简化的不能再简化的业务图了,第三代技术体系就是为了保障在微博核心业务上快速、高效、可靠地发布新产品新功能。\n第三代技术体系 微博平台的第三代技术体系,使用正交分解法建立模型:在水平方向,采用典型的三级分层模型,即接口层、服务层与资源层;在垂直方向,进一步细分为业务架构、技术架构、监控平台与服务治理平台。下面是平台的整体架构图:\n如上图所示,正交分解法将整个图 …"
March 28, 2015
用PHP尝试RabbitMQ(amqp扩展)实现消息的发送和接收
"上篇文章我们介绍了 amqp扩展在windows下的安装方法,这里我们看一下用法。\n消费者:接收消息\n逻辑: 创建连接–\u0026gt;创建channel–\u0026gt;创建交换机–\u0026gt;创建队列–\u0026gt;绑定交换机/队列/路由键–\u0026gt;接收消息\n\u0026lt;?php /************************************* * PHP amqp(RabbitMQ) Demo - consumer * Author: Linvo * Date: 2012/7/30 *************************************/ //配置信息 $conn_args = array( \u0026#39;host\u0026#39; =\u0026gt; \u0026#39;192.168.1.93\u0026#39;, \u0026#39;port\u0026#39; =\u0026gt; \u0026#39;5672\u0026#39;, \u0026#39;login\u0026#39; =\u0026gt; \u0026#39;guest\u0026#39;, \u0026#39;password\u0026#39; =\u0026gt; \u0026#39;guest\u0026#39;, \u0026#39;vhost\u0026#39;=\u0026gt;\u0026#39;/\u0026#39; …"