ubuntu 的网卡名字 变成了 ens33

很久以前就注意到 ubuntu 的 网卡名字不再是 eth0 了.
这里有一个争论 http://opensuse-factory.opensuse.narkive.com/rGGZFhpR/13-1-why-network-eth0-is-named-instead-ens33

这里有正式的解释: https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/

简单的来讲, eth0 的名字是内核取的, 而这个名字是受驱动程序的先后顺序决定的. 多个网卡的话, 每次重启 ethx 后面的 数字可能会随机变化.
这也是改名的根本原因.

改名是为了让名字固定下来. 这个名字是 systemd 取的, 来自主板上端口顺序. 所以相对固定.

当然还有其他好处若干. 请阅读上面的链接.

如何 显示 cpp 文件的 include 树形结构

在排除一下 cpp 编译错误时, 可能需要搞清楚文件包含关系.
linux:

gcc  -M showtime.c  my.cpp

windows:

cl.exe  /showIncludes  my.cpp

参考:

  1. https://stackoverflow.com/questions/5834778/how-to-tell-where-a-header-file-is-included-from
  2. https://stackoverflow.com/questions/1137966/displaying-the-include-hierarchy-for-a-c-file-in-visual-studio

如何挂载 lvm 分区

查看 lvm 信息

```sh

lvdisplay

--- Logical volume ---
LV Path /dev/system-dblti/root
LV Name root
VG Name system-dblti
LV UUID NhTMSk-tTvl-Bj4V-7kjv-xP4N-8T9P-wtkSGb
LV Write Access read/write
LV Creation host, time dedie, 2015-12-21 14:28:10 +0100
LV Status available
# open 1
LV Size 1,82 TiB
Current LE 476631
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0

```

然后挂载:

```sh
mount /dev/system-dblti/root /mnt
```

删除 Intel 集成显卡的桌面右键菜单

Intel 集成显卡驱动会自动在桌面的右键菜单添加选项:

十分讨厌, 对于这种一百年用不上的功能给我加到桌面菜单里面, 真是想不通.

可以通过修改注册表简单的删除它.

下载这个注册表项, 并运行: https://www.tenforums.com/attachments/tutorials/19110d1431740240-remove-intel-hd-graphics-desktop-context-menu-windows-remove_intel_graphics_control_panel_from_desktop_context_menu.reg

参考地址:
https://www.tenforums.com/tutorials/6088-remove-intel-hd-graphics-desktop-context-menu-windows.html

freebsd 使用 Ntpdate 和 Ntpd 自动更新系统时间

由于某些原因,系统时间有时候不对了.
freebsd 如何同步时间.

  1. 手动同步:
ntpdate -b pool.ntp.org

几秒钟后, 时间就同步了.

  1. 启动系统 Ntpd 服务, 自动同步:
    编辑系统的文件: /etc/ntpd.conf
server pool.ntp.org
driftfile /etc/ntp.drift
logfile /var/log/ntpd.log

然后编辑: /etc/rc.conf
加入一行:

ntpd_enable="YES"
ntpdate_enable="YES"

启动ntpd 服务:

service ntpd start

参考:
1. http://www.surlyjake.com/blog/2008/11/17/freebsd-time-updates-with-ntpdate-and-ntpd/
1. https://www.cyberciti.biz/tips/freebsd-timeclock-synchronization-with-ntp-server.html

Linux 下如何保存并恢复 firefox 的设置

要自动化firefox的一些操作, 除了 firefox 的 一些命令行参数: http://kb.mozillazine.org/Command_line_arguments 外, 可以修改一份 firefox 的设置并保存, 然后在新的机器上,只需要先恢复设置, 再启动 firefox.

firefox 的设置在一个叫 profile 的 文件夹中. 文件夹位置在这里:
http://kb.mozillazine.org/Profile_folder

只需要保存这个目录, 然后复制到新机器的相同位置即可.

Delphi/c++builder 中出现 “float operation exception”

编译好的 dll 在 c++ builder 64 位中调用,出现 "float operation exception".

尝试了 32位, 没有问题.

尝试了纯console 的 c++ builder 程序, 也没有问题. 只有包含 vcl 的 c++ builder 程序才有问题.

让我感觉到可能是 vcl 改变了 runtime 的某种行为.

跟踪了代码, 异常发生在这一行:
https://github.com/v8/v8/blob/3.20.17/src/conversions.h#L75

inline int FastD2I(double x) {
  return static_cast<int>(x);
}

当 x 大于 int 的 max 值时,问题出现.

虽然这种转换会导致溢出, 但是怎么会引发异常呢?

然后找到:
https://www.opengl.org/discussion_boards/showthread.php/156817-Disabling-Floating-Point-Exceptions

看起来, opengl 也遇到相同的问题.

然后找到:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/c310909a-fe07-4a4e-92d7-be2e1dc81137/finding-cause-of-floating-point-invalid-operation?forum=vsdebug

最终找到了这篇文章:

Random and unexpected EXCEPTION_FLT_DIVIDE_BY_ZERO and EXCEPTION_FLT_INVALID__OPERATION

原来 cpu 在操作浮点数时有专门的 fpu 寄存器.

而浮点数如果出现溢出等情况时, 是否导致异常是由一个专门的寄存器 fpcw 控制.

在 windows 平台上, fpcw 的值默认是忽略浮点溢出的异常的.
但是有的程序可能会改变 fpcw 的值, 来引发异常.

解决方案: 执行自己的代码时, 恢复 fpcw 的默认值, 用完再回滚.

头文件:

#include "float.h"

获得当前 fpcw 的值:

int old_fpcw = _controlfp(0,0)

设置 fpcw 为 windows 上的默认值:

_controlfp(MCW_EM, MCW_EM);

用完后, 回滚到原始值:

_controlfp(old_fpcw, _MCW_DN | _MCW_EM |_MCW_RC  )

另外, 这里还有一篇文章介绍fpu 的工作方式:
http://www.website.masmforum.com/tutorials/fptute/fpuchap1.htm

如何编译 google chrome v8 引擎

谷歌 chrome v8 引擎可以嵌入到自己的 c++ 程序中. 一般可以把 v8 编译成 dll, 然后调用.
还可以把 v8 编译成静态库, 静态链接到自己的程序中. 要编译v8的源代码可不是件容易的事.
这里记录下步骤:

  1. Pure Windows 7 x64
  2. Install python 2.7
  3. Install git https://git-scm.com/, v8 needs git bash to compile. Then edit the C:\Users\neil\.bashrc file:
export DEPOT_TOOLS_WIN_TOOLCHAIN=0
  1. Install VS2013, Express edition is ok. Edit Windows Registry:
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\12.0.
    Crate a String value: InstallDir, value is: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\
    If you already have the value there, just ignore this step.
  2. If you don't have this file: C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat, copy one.
  3. Install VS2015, Express edition is ok.
  4. Install Windows 10 sdk: https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk
  5. Install google depot_tools https://www.chromium.org/developers/how-tos/install-depot-tools
  6. Open git-bash, get v8 source code:
fetch v8
  1. Generate vs 2015 project, static lib without snapshot, release edition:
cd v8
gn gen out-release/Default --args="v8_static_library=true is_component_build=false v8_use_external_startup_data=false v8_use_snapshot=false is_debug=false" --ide=vs2015

注意:
1. 第 4 步, 可能是因为 VS2013 express 版有点残, 如果你是pro 或者 ultimate版 可能不需要.
2. 第 8 步, 需要从 google 同步很多工具, 在中国, 你懂得.
3. 第 10 步, 个的参数是生成静态库. 不加,就是动态库. 要查看所有可用参数: "gn args --list" for available build arguments.

refs:
1. https://www.chromium.org/developers/how-tos/install-depot-tools
2. https://v8project.blogspot.com/2015/09/custom-startup-snapshots.html
3. https://chromium.googlesource.com/chromium/src/tools/gn/+/HEAD/docs/reference.md
4. https://stackoverflow.com/questions/38674676/building-and-linking-v8-in-visual-studio

mosh 使用(二)

在 ubuntu 上运行 mosh 的客户端, 出现以下错误:

The locale requested by LC_CTYPE=UTF-8 isn't available here.
Running `locale-gen UTF-8' may be necessary.

The locale requested by LC_CTYPE=UTF-8 isn't available here.
Running `locale-gen UTF-8' may be necessary.

mosh-server needs a UTF-8 native locale to run.

Unfortunately, the local environment (LC_CTYPE=UTF-8) specifies
the character set "US-ASCII",

The client-supplied environment (LC_CTYPE=UTF-8) specifies
the character set "US-ASCII".

locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LANGUAGE=
LC_CTYPE=UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Connection to 128.199.. closed.
/usr/local/bin/mosh: Did not find mosh server startup message.

在~/.bashrc添加一行:

export LC_ALL="en_US.UTF-8"

退出 bash, 再次进入, 出现以下警告:

-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory

我们可以通过运行 locale -a 查看系统当前支持的locale定义

我们通过运行

localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

生成相应的locale配置文件。之后系统就不会报错了。

solaris 上安装 git

今天要在solaris上安装git。
记录一下步骤:

pkgadd -d http://get.opencsw.org/now
/opt/csw/bin/pkgutil -U
/opt/csw/bin/pkgutil -y -i git 
/usr/sbin/pkgchk -L CSWgit # list files

https://www.opencsw.org/package/git/