• 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/