Linux 程序员的 Mac 安装记录

作为一个 Linux 的老用户,我再一次验证了那句老话「Linux 用户有钱就换 Mac」。 前段时间,托朋友从香港购入一台 rMBP,下面就是我的 Mac 使用安装记录。 Brew Brew 是 Mac 下面的包管理工具,通过 Github 托管适合 Mac 的编译配置以及 Patch,可以方便的安装开发工具。 安装 Brew: ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go/install)" 我安装的 Brew 包: brew install ack brew install adns brew install android-sdk brew install ansible brew install ansible20 brew install apple-gcc42 brew install apr brew install apr-util brew install archey brew install aria2 brew install asciidoc brew install asio brew install atk brew install augeas brew install autoconf brew install autojump brew install automake brew install avr-binutils brew install avr-gcc brew install avr-libc brew install awscli brew install axel brew install bdw-gc brew install bfg brew install boost brew install burp brew install c-ares brew install cabal-install brew install cairo brew install certbot brew install cliclick brew install cloog brew install cmake brew install cmatrix brew install colordiff brew install connect brew install coreutils brew install cowsay brew install cpp-netlib brew install cscope brew install ctags brew install curl brew install curl-ca-bundle brew install dcfldd brew install ddrescue brew install dialog brew install dirmngr brew install dnstop brew install docbook brew install docker brew install docker-compose brew install docker-machine brew install dos2unix brew install erlang brew install ettercap brew install ext4fuse brew install faac brew install fcitx-remote-for-osx brew install fd brew install fetchmail brew install ffind brew install ffmpeg brew install figlet brew install findutils brew install fontconfig brew install fortune brew install fping brew install freetype brew install fzf brew install gcc brew install gd brew install gdbm brew install gdk-pixbuf brew install gettext brew install gflags brew install gfortran brew install ghc brew install ghc@8.0 brew install gifsicle brew install git brew install git-extras brew install git-flow brew install git-lfs brew install git-number brew install giter8 brew install glew brew install glib brew install glog brew install gmp brew install gmp@4 brew install gnu-getopt brew install gnu-sed brew install gnu-tar brew install gnu-time brew install gnupg brew install gnupg2 brew install gnutls brew install go brew install goaccess brew install gobject-introspection brew install godep brew install gource brew install gpg-agent brew install gradle brew install grafana brew install graphite2 brew install graphviz brew install grep brew install grok brew install groovy brew install gtk+ brew install haproxy brew install harfbuzz brew install hicolor-icon-theme brew install html2text brew install htop-osx brew install httpie brew install hydra brew install icu4c brew install ifstat brew install iftop brew install imagemagick brew install influxdb brew install ipcalc brew install iperf brew install isl brew install isl@0.12 brew install jansson brew install jemalloc brew install jenv brew install jetty brew install jnettop brew install jpeg brew install jq brew install jshon brew install kafka brew install lame brew install languagetool brew install libao brew install libarchive brew install libassuan brew install libconfig brew install libdaemon brew install libev brew install libevent brew install libexif brew install libffi brew install libgcrypt brew install libgpg-error brew install libiodbc brew install libksba brew install libmagic brew install libmpc brew install libnet brew install libpng brew install librdkafka brew install libressl brew install librsync brew install libsodium brew install libsoxr brew install libssh brew install libtasn1 brew install libtermkey brew install libtiff brew install libtool brew install libunistring brew install libusb brew install libusb-compat brew install libuv brew install libvo-aacenc brew install libvterm brew install libxml2 brew install libyaml brew install libzip brew install little-cms brew install lldpd brew install lrzsz brew install lsyncd brew install lua brew install lua52 brew install luajit brew install luarocks brew install lynx brew install lz4 brew install lzlib brew install lzo brew install makedepend brew install maven brew install mbedtls brew install memcache-top brew install memcached brew install mercurial brew install mit-scheme brew install mitmproxy brew install mongodb brew install mono brew install mp4v2 brew install mpfr brew install mpg123 brew install msgpack brew install msodbcsql brew install mssql-tools brew install mtr brew install multitail brew install mycli brew install mysql brew install neovim brew install nettle brew install nghttp2 brew install nginx brew install nload brew install nmap brew install node brew install nodeenv brew install npth brew install nspr brew install nsq brew install nuget brew install objective-caml brew install ocaml brew install oniguruma brew install opencc brew install openssl brew install openssl101 brew install openssl@1.1 brew install openvpn brew install osquery brew install ossp-uuid brew install p11-kit brew install p7zip brew install pandoc brew install pango brew install pcre brew install perl brew install phantomjs brew install pinentry brew install pixman brew install pkg-config brew install plantuml brew install pngpaste brew install popt brew install privoxy brew install protobuf brew install proxychains-ng brew install pth brew install pwgen brew install python brew install python3 brew install qt brew install qt5 brew install r brew install rapidjson brew install rclone brew install readline brew install reattach-to-user-namespace brew install redis brew install rename brew install rlwrap brew install rmtrash brew install rocksdb brew install rsync brew install ruby brew install ruby-build brew install s-lang brew install s3cmd brew install sbt brew install scala brew install scons brew install sdl2 brew install sdl2_image brew install shadowsocks-libev brew install shairport brew install shairport-sync brew install shared-mime-info brew install shyaml brew install siege brew install sleuthkit brew install snappy brew install sntop brew install socat brew install source-highlight brew install spark brew install spdylay brew install sphinx-doc brew install springboot brew install sqlite brew install sqlmap brew install ssh-copy-id brew install sshfs brew install sshpass brew install stunnel brew install subversion brew install swig brew install sysbench brew install taglib brew install texi2html brew install the_silver_searcher brew install thefuck brew install thrift brew install tidy-html5 brew install tig brew install tinyproxy brew install tldr brew install tmate brew install tmux brew install tokyo-cabinet brew install tree brew install typescript brew install udns brew install udptunnel brew install unibilium brew install unison brew install unixodbc brew install utf8proc brew install vim brew install w3m brew install watch brew install watchman brew install webkit2png brew install webp brew install wget brew install wxmac brew install x264 brew install xclip brew install xvid brew install xz brew install yara brew install yasm brew install yuicompressor brew install zookeeper brew install zsh brew install zstd Brew cask Brew cask 是类似 Brew 的管理工具, 直接提供 dmg 级别的二进制包,(Brew 是不带源码,只有对应项目所在的 URL)。 ...

2013-12-08 · alswl

Postfix 基本配置[译文]

原文地址:Postfix Basic Configuration 。 有少许编译。 介绍 Postfix 的配置文件 main.cf 有数百个配置参数, 幸运的是,所有参数都有合理的默认配置项。 大部分时候,只需要配置两三个参数即可。 安装 Postfix 的方法可以参见 安装方法。 特殊场景用途的配置方式,如邮件中枢,防火墙,拨号环境客户端的说明可以在 标准配置说明 里面查看。 Postfix 配置语法 Postfix 的配置文件默认在 /etc/postfix。主力配置文件是 main.cf 和 master.cf。用户权限必须是 root 的。 /etc/postfix/main.cf 配置语法有两个要点:不用引号,可以使用 $ 来引用参数。 # 定义一个参数 /etc/postfix/main.cf: parameter = value # 引用一个已有参数 /etc/postfix/main.cf: other_parameter = $parameter 引用参数时候,可以再定义之前先引用(Postfix 使用延迟计算技术)。 ...

2013-11-09 · alswl

在 Python 中使用 GDB 来调试[译文]

大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已。 另外还有强悍的 jStack 和 jConsole 来进行运行期侦测,JVM 的工业级强度果然不是盖的。 当时公司技术方面也遇到了一些瓶颈,一部分原因是 CPython 本身的 IO 模型问题, 另一方面也和早期代码写的极不工整脱不了关系。万般无奈之下,我们用 Jython 推翻重做了主要业务,效果立竿见影,但同时也把真实问题给规避掉了。 在这之后我们在 JVM 的领导下,走上了康庄大道。但我心中始终还有一个梗, 就是想对性能遇到瓶颈的 Python Process 进行线上侦测。 这篇文章就是开始的第一步。 ...

2013-11-01 · alswl

15 分钟学会 R 语言[译文]

仗着自己有几门语言的基础,我在学新语言时候,都会选择一些快速入门教程。 比如 Learn X in Y minuts 就是我经常光顾的站点。 前段时间,小柒在用 R 写数据分析脚本,我就建议她把 Learn X in Y minuts 里面的 R 语言教程翻译出来。话说 Learn X in Y minuts 里面的中文贡献还是非常多的,赞。 Learn X in Y minuts 的源码托管在 Github。 小柒被我逼着把这篇 R 语言教程 翻译到 R 语言教程中文版。 下面是译文,有不妥的地方可以留言或者直接去 Github 上面 Pull request。 R 是一门统计语言。它有很多数据分析和挖掘程序包。可以用来统计、分析和制图。 你也可以在 LaTeX 文档中运行 R 命令。 ...

2013-10-29 · alswl

读《大规模Web服务开发技术》

Thumbnail

年前看了这本书《大规模Web服务开发技术》,当时给的评价是: 很好,让我这个渣渣看的很感动,数据翔实,经历可靠,翻译的也不错,我给 4.2 分 现在经历过 Python / Django / 烂代码的阵痛,开始有更多的想法, 在整理这些粗糙的想法之前,我又把这本书翻了一遍,写个流水帐读书笔记。 《大规模Web服务开发技术》@豆瓣: http://book.douban.com/subject/6758780/ 规模 小规模 / 大规模 / 超大规模的侧重点各不相同:保持扩展性/保持冗余/低成本运维/开发合作方便 内存、磁盘、负载 内存快,磁盘慢,IO 速度的差异 ...

2013-06-29 · alswl

Arch,再见

Thumbnail

Arch 是我真正使用的第一款 Linux 发行版,大约使用了三年, 现在的这个 VPS 跑的系统也是 Arch。 然而随着时间变化,我从最早的天天更新狂,到一周、一个月、三个月和不主动更新。 彻底从从不折腾会死星人变成了一个尽量避免变更的老用户。 Arch 很适合作为第二个(第一个是新手使用的 Ubuntu),它的哲学 KISS 非常优雅, Keep It Simple And Stupid。基于这原则,它将 Linux 内部的使用、运维细节都展现出来。 毫不夸张的说,被 Arch 折腾几年,就能胜任 Linux SA 的角色了(笑)。 ...

2013-04-13 · alswl

读《人件》

Thumbnail

事情起源于动态语言和静态语言之争,最后争论焦点转移到:「相信人本身的能力重要, 还是通过语言/工具来约束人重要」。 我认为项目开发中最重要的是个人能力和团队协作能力,工具只是加分项。 如果代码质量差、监控难、性能难以优化,解决根本问题的关键还是在人身上。 并不是静态编译和工具检查就能搞定了。 我愤愤的在 QQ 对话框中写道: 我工作第一年痛苦于开发流程,阅读了《人月神话》,就开始坚信软件工程的哲学 后来痛苦与代码质量,阅读了《重构》,开始坚信代码质量决定产品质量 现在痛苦于人和语言的冲突,动态和静态的冲突,我想读《人件》了 ...

2013-04-10 · alswl

读《打造 Facebook》

Thumbnail

感谢好基友 @daodao 送了我这本《打造 Facebook》, 年前一直忙,最近腾出两个晚上,把这本很火的书看完了。 第一次听见王淮这个名字,其实是在知乎上面, 当时有一个问题 Facebook 早期员工王淮在职期间有什么成就?。 之后陆陆续续看到他的几个回答,感觉他非常善于自我营销。再之后就读到他这本书。 书中最喜欢的章节是关于 Facebook 工程师文化和产品开发流程的描述。 ============================== 我是分割线 ============================== Facebook 招人标准 对公司的忠诚,是文化认同的附属品 技术面试 2.5 / 系统设计 1 / 文化面试 0.5 5 个程度的面试打分 高标准人才,喜欢挑战和完成艰巨任务 慢招人,快炒鱿鱼 新兵训练营 ...

2013-02-25 · alswl

在 Python 中使用 epoll[译文]

原文地址: http://scotdoyle.com/python-epoll-howto.html , 我这里取精简内容翻译过来。 ============ 正文开始 ============ 介绍 Python 从 2.6 开始支持 epoll。现在我们用 Python3 来写基于这些 API 的 epoll 范例。 阻塞的 Socket 通信范例 import socket EOL1 = b'\n\n' EOL2 = b'\n\r\n' response = b'HTTP/1.0 200 OK\r\ndate: "2013-01-12T00:01:00+08:00" response += b'Content-Type: text/plain\r\nContent-Length: 13\r\n\r\n' response += b'Hello, world!' serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) serversocket.bind(('0.0.0.0', 8080)) serversocket.listen(1) try: while True: connectiontoclient, address = serversocket.accept() request = b'' while EOL1 not in request and EOL2 not in request: request += connectiontoclient.recv(1024) print('-'*40 + '\n' + request.decode()[:-2]) connectiontoclient.send(response) connectiontoclient.close() finally: serversocket.close() 这个范例中的代码在 accept() 、 recv() 和 send() 时候会发生阻塞, 导致其他连接无法完成。 通常情况下,在我们使用阻塞模型时候,会专门建立一个主线程来进行监听, 将建立成功的连接交给其他线程操作,然后继续在主线程上面监听。 这样一来,就不会受单次请求阻塞的限制。 C10K 问题描述了其他处理高并发方法,比如异步 Socket, 通过监听事件来触发预设的响应。异步 Socket 可以是单线程,也可以是多线程。 ...

2013-01-12 · alswl

My 2012

本想着末日来了也是好事,大家都挂了,一了百了,啥事情都不用干了。 不过末日既然没来,工作和生活就得继续下去,年末了还是需要缅怀一下 2012, 然后展望一下 2013。 2012 关键词:妹子 和姑娘 A 不得不说的故事,追了一段时间之后发现太熟了,不好下手,另外三观有点不一致, 现在已经有男朋友了。更八卦的段子见 有哪些智能手机用户的行为让你当时就震惊了? 另有青春年少萝莉一枚,让我确认自己不是基佬,已死心。 最近几年我蛮少对异性有好感产生,或许是周围姑娘太少的缘故,或许是爱无能了。 ...

2013-01-01 · alswl