• C++ 入门书籍推荐 at 2016年06月06日

    C++ 坑比较多,要想短期上手写代码不是不可以,但用在工程里很可能写出不少坑自己又坑伙伴的代码。 Essential C++ 是我唯一知道靠谱又篇幅比较短的入门书了。 但这还不够,如果急于求成的话,至少还应该通读一遍《C++ 编程规范》,如果能完全掌握,应该能回避工程中会遇到的坑了。 但这本书都是浓缩的精华,解释不够详尽,我不太确定 C++ 初学者对它的接受度。

    另外这两本书都没有涵盖 C++ 1x 标准的内容。新标准中引入了不少好用的特性,条件允许的话还是应该尽量采用。

    由于 C++ Primer 第五版更新到了 C++ 11 标准,我还是建议通过这本书入门,虽然中文版也超过了 800 页,但没有哪个项目会用到全部 C++ 特性,所以作为入门,阅读内容是可以裁剪的。

    我的建议: “第 1 章 开始”、“第Ⅰ部分 C++ 基础”:详读。这一部分虽然有大概 300 页,但各种语言大同小异,重点比较和你常用语言的差异就能事半功倍。 “第Ⅱ部 C++ 标准库”:大部分略读,大概知道有什么内容,以后用到再查。注意,用之前一定要查!另外 “第 12 章 动态内存” 一定要详读。 “第Ⅲ部分 类设计者的工具”:13、15 章详读,其他略读,用到再查。 “第Ⅳ部分 高级主题 ”:18 章涉及到异常和命名空间的详读,其他略读。

  • #6 楼 @lissdy 技术书籍,Kindle 版的排版真的很捉急,而且还只能用 Kindle 客户端看。其实美国各大计算机方面的出版社,官方都有电子版卖,不但提供 PDF 格式,如果你想要在苹果设备或 Kindle 上阅读,一般也有相应的格式,价格往往还比 Amazon 上便宜。节假日时常还有折扣活动,Pragmatic 一般是 6 折或 5 折(愚人节那个星期搞了个 6 折)。

  • 可以直邮,但个人不建议买。以前买过几次,要么是没有电子版的,要么折扣实在低,买来收藏的。 美亚图书运费比较贵,我买的时候(现在不知道有没有变)是每一单起价 5.99 美元,每本书再加 4.99 美元,还是平邮,到国内大概 3 到 5 星期。其他更快的运费就感人了。

    技术类图书建议到各出版社官网买电子版(有 PDF 格式,经常还搞折扣优惠),非技术类可以买 Kindle 版,方便。如果非要实体书,先到中亚搜一下有没有货,虽然标价比美亚贵(偶尔也能买到比美亚便宜的),但考虑到运费,价格不一定差太多,还有物流速度的优势。

  • #38 楼 @jasl 界面复杂几乎是 Window 程序的通病,没办法,好在调教好了能用。复制粘贴很方便,跟 iTerm 差不多。

  • #36 楼 @jasl Windows 终端可以用 ConEmu,虽然不如 ITerm2,但已经比较好用了。

  • [VPS] 求推荐 at 2016年04月06日

    香港的 VPS 貌似带宽和流量偏小,东南亚的话,有没有考察过新加坡,大型 VPS 服务商一般都有新加坡节点。

  • #24 楼 @libuchao 现在看来,目前的解决方案从使用效果上,相当于更好用的虚拟机。不过由于文件系统的无缝共享,也有望解决部分问题了,如 git for Windows 的效率问题。

    git 本来是以快著称的,但我在工作项目上运行time git status的结果(另,我是用 PCI-E 协议的固态硬盘):

    real    0m6.824s
    user    0m2.437s
    sys     0m12.078s
    

    这在 OS X 或 Linux 基本是秒开的。

    git difftoolgit mergetool每个文件弹出来目测要等好几秒(好吧,如果用原生 git,估计我不能设置某个 Windows 程序做 merge tool 了)。

    git checkout如果两个分支差异比较大,随随便便等个几分钟甚至更长时间。

    总之用得很搓火。

  • #10 楼 @libuchao 可能我们的关注点不一样。看了视频,所谓的 “无缝切换”,是建立在 Linux、Windows 可以访问同一个文件系统上的。这个功能应该是显而易见的,不然和虚拟机比,可用性上也没太多优势。另外就是,我注意到,演示时在 cmd 直接输入bash运行。但不确定这个 bash 是 Linux 原生的(也就意味着 Windows 程序可以直接调用 Linux 工具),还是做了特别处理。

    但我的疑问还是没有解决,至少从视频看不出来。举个实际的用况,假设一个 OS X 用户,使用 Textmate 做编辑器,那么他可以:

    1. mate path/to/file编辑指定文件
    2. $EDITOR设为mate,这样当命令行工具需要编辑文本时,可以调用 Textmate
    3. Textmate 的很多功能是调用 sh、ruby 等脚本实现的
    4. 它还可以直接调用其它命令行工具。例如在编辑器内通过 git 插件访问代码库;如果你写了一段 C++ 程序并运行,它可以自动调用 gcc 来编译,然后运行 gcc 构建出来的程序。

    以上的用法,应该不算很罕见和特殊吧?我们把他挪到 Windows 上,至少需要实现:

    1. 从 Linux 环境调用 Windows 程序,这点视频里没有演示,他用 vscode 的时候,都是用 File Explorer 打开的
    2. Windows 程序可以调用 Linux 程序,从能够在 cmd 运行 bash 看,似乎是可以的,即使不能自由的调用所有的工具,至少把对 Linux 命令的调用封装到 bash 脚本里间接调用,应该是可行的,虽然这样比较麻烦。
    3. 不同子系统信息的交换,例如最基本的是文件路径:一个 Windows 程序传给 Linux 程序的肯定是C:/path/to/file,甚至是C:\path\to\file,Linux 程序怎么理解?而 Linux 程序给 Windows 的则是/mnt/c/path/to/file/home/username/path/to/file。 还有ln -s(或者通过其他脚本创建 symlink),在 Unix 是个很常用的操作,而在 Windows 上坑爹的是个特权操作。于是 cygwin 是自己实现的 symlink,出了 cygwin 环境就不认了。而 MinGW 默认配置是关掉 symlink,ln -s实际在做拷贝,即使配置成使用系统原生的 symlink,因为权限问题,也不方便。

    总之现在 Windows 上使用 Unix 环境是很痛苦的,目前微软官方的方案只是解决了部分问题。

  • #8 楼 @libuchao 看使用场景了,如果你的任务可以只用 Linux 子系统内的工具完成所有事情,当然没什么不方便。但在 Windows 上开发,很多人的应用场景是要用到 Windows 原生程序,甚至以这些程序为主,但又需要某些 Unix 命令行工具提供的便利。

  • 在 Windows Blog 上看到这么一条: Third, note that Bash and Linux tools cannot interact with Windows applications and tools, and vice-versa. So you won’t be able to run Notepad from Bash, or run Ruby in Bash from PowerShell.

    https://blogs.windows.com/buildingapps/2016/03/30/run-bash-on-ubuntu-on-windows/