在macOS上搭建TensorFlow环境

在mac上安装TensorFlow的方法(官方推荐用virtualenv,以Python2.7为例):

  1. 安装pip和virtualenv:

    1
    2
    sudo easy_install pip
    sudo pip install --upgrade virtualenv
  2. 创建TensorFlow的目录(在~目录下创建tensorflow目录):

    1
    virtualenv --system-site-packages ~/tensorflow
  3. 激活virtualenv环境:

    1
    source ~/tensorflow/bin/activate
  4. 终端会变成这样:

    1
    (tensorflow)$
  5. 退出:

    1
    (tensorflow)$ deactivate
  6. 安装TensorFlow,这里需要注意的是macOS Sierra以后由于SIP机制(System Integrity Protection),直接安装会提示”…OSError: [Errno 1] Operation not permitted…”,我们需要通过--user -U将其安装到用户目录下:

    1
    pip install --upgrade tensorflow --user -U
  7. 成功安装会提示(这些都是TensorFlow需要用到的库):

    1
    Successfully installed backports.weakref-1.0rc1 bleach-1.5.0 funcsigs-1.0.2 html5lib-0.9999999 markdown-2.2.0 mock-2.0.0 numpy-1.13.0 pbr-3.1.1 protobuf-3.3.0 setuptools-36.0.1 six-1.10.0 tensorflow-1.2.0 werkzeug-0.12.2 wheel-0.29.0
  8. 这个时候进入python的交互环境测试:

    1
    2
    3
    4
    5
    >>>python
    import tensorflow as tf
    hello = tf.contant('Hello, TensorFlow!')
    sess = tf.Sesssion()
    print(sess.run(hello))
  9. 不出意外的话,TensorFlow会提示一些奇怪的东西:

    1
    The TensorFlow library wasn't compiled to use SSE instructions, but these are available on your machine and could speed up CPU computations" in "Hello, TensorFlow!" program
  10. 按照github上Carmezim的说法,这些warning是告诉我们如果自己编译TensorFlow会使其运行速度更快,我们可以忽略这些警告(例如在我的.zshrc中):

    1
    2
    # in your ~/.zshrc file
    export TF_CPP_MIN_LOG_LEVEL=2

相关链接:

  1. TensorFlow官方安装教程
  2. 解决mac osx下pip安装ipython权限的问题
  3. Github issue of TensorFlow warning

使用wget下载Xcode

自从Xcode出现了那次XcodeGhost事件后,便只能通过AppStore上进行更新了,然而由于种种原因,AppStore经常上不去,即使连上了也经常会有坑爹的网络问题,所以如果能下载dmg当然是更好的。

方法也很简单,就是通过wget等命令行下载工具直接下载,支持断点续传,稳定方便,比AppStore好多了。

首先需要做的就是找到下载链接:

https://developer.apple.com/services-account/download?path=/Developer_Tools/Xcode_7.3/Xcode_7.3.dmg

用Chrome打开这个链接会弹出Apple Developer账户登录的信息,然后会重定向回开发者主页,第二次打开这个页面,便会弹出下载对话框,但是用Chrome下载可能会面临网络不稳定的情况,我们右键页面选择检查,打开Chrome调试界面,选择Network, 选择download?path=…开头的连接,如图所示:

调试界面

在Response Headers中,我们可以获得location,即实际的下载链接。在Request Header中,我们找到cookie中的ADCDownloadAuth字段。

只需要有location和ADCDownloadAuth我们就可以用wget进行下载了。

命令如下:

1
wget --header "Cookie:ADCDownloadAuth=ZbmIKnE9W%2FhUDmqp9hYPVdeKuzB3VwGEUrEhZn%2BDQtF4Wg9DJiVonlD2Qi7gb7m3ZRLlBQdx02Oq%0D%0AV9qpH2t4WHYq20FxlxKMm7xFJZwEJpg1zXHh08rCVh6bZFBu7J9nfOmkwt21m4esehS0jzrwu%2Fgf%0D%0As5S2EUVdfyfStzkCL3QnTRmo%0D%0A" http://adcdownload.apple.com/Developer_Tools/Xcode_7.3/Xcode_7.3.dmg

附上下载截图:

下载截图

喝杯咖啡,静静等候就好啦:-)

(这也方法也适用于下载其他Developer工具,只需要知道Request URL。如下载Xcode7.2.1.dmg只需要把Xcode7.3替换成7.2.1即可。)

如何改变Xcode的编辑器字体

Xcode本身的字体大小默认只有11,如果在iMac下做开发,人眼看得会很累,那么如何更改Xcode编辑器的字体呢?

  1. 打开Xcode-Preferences-Fonts&Colors,点下方+号,选择从原本的数十个模板里新建一个自己的新模板,比如我的就叫做Midnight Extended,这样可以避免破坏原始的主题
    选择主题

  2. 在SourceEditor中选中任意文本(如PlainText),然后按⌘(cmd)+A选中所有文本,这样下方的”T”按钮应该会从灰色变为可以点击,点击后就可以弹出字体选择框了,我选的是OSX 10.11推出的苹方-简字体,字号选14号
    选择文本

  3. 最终效果如图所示,是不是比默认的好看多了?当然大家也可以根据自己的喜好自由定制~
    最终效果

iOS开发中macro的使用

在iOS开发中,常常会用到宏(Macro)来灵活定义一些常量或是函数,下面就罗列一些宏的常用方法。

  1. #define
    define是最常用的宏命令,用以定义常量或函数,在实际使用中,编译器用宏中#define A B的B替换A

  2. #ifdef/#ifndef
    #ifdef A表示如果A已被定义,而#ifndef A表示如果A未定义。后者常用来解决重复定义的问题,这两个宏都需要在下一行用#endif来结束

  3. #if/#elif/#else/#endif
    #if A或者#if A 1是宏中的条件判断语句,也需要用#endif结束

  4. do {…} while (0)
    使用do {…} while (0)构造的宏不会受到大括号、分号的影响,总是会按照期望的方式运行,而#define A(...) do {} while (0)可以使A(…)失效,即什么也不做

  5. 多行
    宏支持多行,只需要在行末尾用\即可

使用iOS自带CommonCrypto库计算MD5

开发中常常会用到MD5计算,实际上iOS 5.0就已经内置了加密和哈希计算的库,这里就简单讲下用其中的CommonCrypto进行MD5计算。

Objective-C代码:

1
#import <CommonCrypto/CommonCrypto.h>
+(NSString *)MD5:(NSString *)str
{
    const char* cstr = [str UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cstr, (CC_LONG)strlen(cstr), result);
    
    return [NSString stringWithFormat:
            @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
            result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7],
            result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15]];
}

此外,CommonCrypto还支持SHA,Hmac等。

Mac SVN版本太旧解决办法

Mac(El Captain)自带的SVN版本是1.7.20,而最新(2016.2.24)的SVN是1.9.3,用brew install svn装了最新的SVN,然而用svn --version出来的还是1.7.20。

解决办法就是将homebrew安装的svn路径加入到PATH中,具体方法如下:

  1. 找到brew安装svn的bin目录:/usr/local/Cellar/subversion/1.9.3/bin

  2. 在~/.bash_profile中将其加入到PATH中(若新机器没有bash_profile则新建一个):

    1
    export PATH="/usr/local/Cellar/subversion/1.9.3/bin:$PATH"
  3. 编译bash_profile: source ~/.bash_profile

  4. 查看svn位置: which -a svn(-a可以看到PATH中所有svn的位置)、
  5. 检查版本号: svn --version

通过其他方式安装的svn也可以通过类似方法解决。

如何重置App Store

Mac的App Store有时会出现无法下载软件或是已购项目中显示该下载项目错误之类的提示,解决方法如下:

  1. 在终端内输入:

    1
    defaults write com.apple.appstore.ShowDebugMenu -bool true
  2. 重新启动AppStore,菜单栏最右会出现Debug栏,选择Reset Application以及Clear Cookies

  3. 重新开始下载项目

新的开始

之前的wordpress博客维护起来太麻烦,习惯用markdown,研究了下hexo,快速搭了个新博客。

域名不变,还是epsilonx.cn,之前的wordpress博客就不更新了。

嗯,就这样吧。