分类目录归档:其他分类

删除 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
byNeil
byNeil.com

原文来自 Blog by Neil, post 删除 Intel 集成显卡的桌面右键菜单 转载请注明出处。本站保留一切权力

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
byNeil
byNeil.com

原文来自 Blog by Neil, post freebsd 使用 Ntpdate 和 Ntpd 自动更新系统时间 转载请注明出处。本站保留一切权力

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

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

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

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

原文来自 Blog by Neil, post Linux 下如何保存并恢复 firefox 的设置 转载请注明出处。本站保留一切权力

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
byNeil
byNeil.com

原文来自 Blog by Neil, post Delphi/c++builder 中出现 “float operation exception” 转载请注明出处。本站保留一切权力

如何编译 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
byNeil
byNeil.com

原文来自 Blog by Neil, post 如何编译 google chrome v8 引擎 转载请注明出处。本站保留一切权力

使用java keytool 查看,添加,删除 jks 文件

jks 是 java 的 key store 文件格式. java 提供 keytool 工具操作jks.
keytool 是随 jre 发布的工具. 所以只要你安装了 jre 就有这个工具.
在windows上,是keytool.exe. 在Lunix上,是 keytool

jks 类似于 pfx(p12) 文件, 有密码加密, 可以保存多可key 或者证书等等. key 或者 证书被称为一个 entry, 每个entry有个别名(alias). 操作时需要制定别名.

list

查看 jks 的内容:

keytool -list  -keystore  publickeys.jks     -storepass mypassword

keytool -list  -keystore  privatekeys.jks   -storepass mypassword

keytool 还可以操作pfx 文件.
比如:

keytool -list  -keystore  PartyB.pfx  -storetype pkcs12  -storepass ExampleB  -v 

import

添加证书到 jks 中:

keytool  -importcert  -keystore publickeys.jks  -storepass  mypassword  -alias partyb  -file PartyB.cer

添加pfx 包含key和证书到 jks 中:

keytool  -importkeystore  -srcstoretype PKCS12 -srckeystore PartyB.pfx  -srcalias  1   -srcstorepass ExampleB   -destkeystore  privatekeys.jks  -deststorepass secrets  -destalias  partyb -destkeypass ExampleB

注意上面的 -srcalias 1, 指的是 pfx 文件中需要导入到 jks 中的证书的 别名. 如何查看到这个别名呢:

用上面的 list 命令可以查看到 pfx 里面的 alias:

keytool -list  -keystore  PartyB.pfx  -storetype pkcs12  -storepass ExampleB  -v   | grep "Alias"

delete

删除 jks 中的 证书或key


keytool -delete -keystore publickeys.jks -storepass mypassword -alias partyb keytool -delete -keystore privatekeys.jks -storepass mypassword -alias partyb

byNeil
byNeil.com

原文来自 Blog by Neil, post 使用java keytool 查看,添加,删除 jks 文件 转载请注明出处。本站保留一切权力

排除不受信任的根证书列表:cnnic, alibaba

今天心血来潮, 检查一下我的根证书列表:

certmgr.msc

排除了一些垃圾流氓证书到不受信任的列表, 以下是我的列表:

a

其中 'CNNIC ROOT' 自不必多说.

其中有三个证书值得一说:

  1. 首先说说前两个, 一个是 'Alibaba.com Corporation Root CA', 另一个是: 'ALIPAY_ROOT'. 作为一个第三方的电子商务公司, 我实在想不通他为什么要在我的机器里面装入 根证书. 而且可以看到这两个根证书的用途都是 "所有". 就是权限最大的根证书. 不光可以做普通证书做的事,比如签名,加密,时间戳等等. 甚至还能签发次级CA.

首先, alibaba 网站上使用的证书都是 来自第三方的verisign的. 这没有任何问题. 那他还要给我装权限如此之高的根证书的目的是什么? 除了耍流氓还有什么解释. 你当用户的电脑是韭菜园子吗? 你视用户的安全如空气吗? 有一天要逼我在虚拟机中使用 支付宝吗? 去年买了个包. 流氓.

  1. 再说说另一个, 就是图中的'ROOTCA', 名字看起来很唬人. 以为是正规的根证书.
    但是我们点开详细信息看看:
    b

发现他的 C=CN

原来, 这货和 CNNIC 是一路货色.果断禁用之.

最后分享一下禁用方法.
在"受信任的根证书颁发机构"中找到他们之后, 不能直接删除, 删除之后,有些会自动安装比如alibaba, 有些会通过windows自动更新重新装入, 比如CNNICroot. 正确的做法是, 用鼠标把他们拖到下面的 "不信任的证书" 分支里面.
这样就算重新安装了, 他们仍然是不受信的.

我很喜欢淘宝, alibaba, 支付宝, 也是马云的粉丝. 但是,无论是谁,耍流氓就不行. 让流氓证书滚粗.

byNeil
byNeil.com

原文来自 Blog by Neil, post 排除不受信任的根证书列表:cnnic, alibaba 转载请注明出处。本站保留一切权力

联通宽带又在调皮了。给我分配内网ip

刚才偶然看了一下路由器, 不知什么时候起,联通开始分配内网ip了?

来自 blog.byneil.com

image

byNeil
byNeil.com

原文来自 Blog by Neil, post 联通宽带又在调皮了。给我分配内网ip 转载请注明出处。本站保留一切权力

学一点Git–20分钟git快速上手

在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿。你是不是早就跃跃欲试了,只是苦于没有借口(契机)。 好吧,机会就在今天。 给我20分钟,是的,只要20分钟, 让你快速用上git。

我们废话不多说,直接来干货。

我们将会介绍一下几点:

一, 什么是git

二,使用git的一般开发流程

三,快速安装新建项目。holloword。

开始:

一,什么是git。

阅读本文的前提是你知道或者用过至少一种源代码管理工具,比如:SVN, CVS 或者TFS等等。 你必须知道什么是源代码管理。如果这些都不满足。请直接跳过本文。

了解陌生事物的最好办法,是和已知事物类比。 ---孔子

我们以svn为例。  我们都知道传统的源代码管理都是以服务器为中心的:

image

每个开发者都直接连在中间服务器上, 本地修改,然后commit到svn服务器上。

这种做法看似完美,但是有致命的缺陷:

1. 开发者不能本地跟踪代码版本。 所有的信息都是在服务器上。  你把本地的代码改了很多,但是又不能提交。通常,本地只能缓存一个版本。对于小项目无所谓, 但是项目一复杂,人员多就麻烦了。 通常你本地的代码都全是红色的。自己都不知道今天修改了什么, 有哪些修改是真正应该提交给svn的。

2. 因为第一点,一旦离开服务器, 程序猿将无法正常工作。 因为本地不能跟踪代码版本。  你的(几乎)任何操作都必须连上服务器。比如, show log, blame,show history等等。

3. 中央服务器压力过大。  因为每个人都必须把代码提交到服务器,并且做daily build。

4. 对于大型项目, svn几乎不可用。 例如linux内核项目, 开发者何止几万? 都直接提交给svn服务器的话还不乱套了。

5. 对于个人的私人项目而言(或者对于小公司的项目), 不用版本控制当然不行,但是为了用版本控制而专门假设svn服务器有有点舍不得。

有没有能解决上述几个问题的东东呢?  恩, 答案是肯定的。

Linux内核的作者也遇到了这些问题,于是他决定再一次改变世界, 重写一个可以本地使用的svn。

对, 这就是git。  分布式代码版本管理系统。(说人话 :就是不用服务器的svn)

我们来看git的结构:

image

git没有中央服务器。 你装上git软件之后,你就可以指定本地的文件夹进行版本控制了。你可拔掉网线,然后在本地修改, commit,revert(rollback), branch, restore, show log, blame, history 等等, 全部你之前在svn里面可以用的操作。 简单的说,你就完美了。

 

你可能意识到一个问题了。   就是天下大乱了。

每个人都自顾自的开发,怎么协作呢?  恩,通常git比svn会多出两个操作, 就是 pull 和push。

我们看一个复杂一点的图:

image

开发者之间通过 pull和push操作, 把别人的修改拉过来,或者把自己的修改推给别人。

恩,你可能还是觉得有问题,我们生产 环境中, 以谁的代码为最终版本呢? 

这个问题确实比较棘手,因为,从单纯的技术上将,每个开发者的机器都是对等的。 没有主次之分。

我们还有办法:

技术上不能解决的问题,我们从制度上解决. ---- 孟子

从分布式环境中我们模拟出一个中心来:

image

我们引入Leader这个角色。  他的机器是最终版本。 每个开发者都必须把最终的修改版push给leader。 leader会review然后提交。他就是最终版本。

恩, 我们好像还漏掉一个大问题, 说git,怎么漏掉了github呢。 github是什么。

我们知道,如果每个人都本地修改的话,本地可能不安全,(硬盘坏了,笔记本被偷了。。。。)

我们可能需要一个安全的服务器来存储/备份代码。对于开源的项目,可能是需要一个地方分享你的代码,你不可能24小时开着笔记本,让别人从你这pull代码。

于是, 网上所有的源代码托管网站就冒出来了。 github就是这样的。

看这个图, 我只修改了其中一个地方, 就是把leader的机器换成了。 github.com 提供的在线账户。

image

所以没有git和 github没有必然联系。

这里有几个常用的在线托管地址, 有兴趣自己看看:

1. github.com,  大名鼎鼎。 免费,只支持开源项目, 不支持私有项目。

2.  bitbucket.com ,同样大名鼎鼎。 免费, 支持开源项目和私有项目。 免费用户最多5个。项目无限。

3.   git.oschina.net, 国内顶尖托管平台, 我本人正在用的就是这个。  支持开源项目和私有项目。 成员无限, 项目1000个。   使用的是阿里云服务器, 速度极快。  本人推荐5颗星。

 

二, git开发的一般流程。

上面其实已经涉及了使用git的一般结构。 那么生产环境中, git是如何应用的呢。

本人知道的模型如下:

image

 

每个开发者都向自己的项目服务器(leader)提交代码, leader向公司服务器提交。 当然这个leader是可有可无的。如果项目小的话,  开发者可以直接向公司服务器提交。  公司的服务器就是最终版本。  一般公司还会有持续集成CI服务器。  我们可以在公司的源码服务器上设置git的hook。 自动触发CI服务器工作。 这是后话,不多说了。

 

三,  前面的概念弄清楚之后, 上手就容易多了。 我们helloword。

1.   这是git的官网:http://git-scm.com/  去下载windows客户端。

     如果是linux的话, sudo apt-get install gitcore

2.  注意, 官网的客户端都是命令行的。 命令行是高阶用法。不在这里说了。 我们下个gui。

我用的是TortoiseGit。  https://code.google.com/p/tortoisegit/  , 大家恐怕都熟悉svn时代的乌龟爬。上手快。 我们下面的操作都是gui上的。

安装过程不说了。 一路next。 我们跳过。 直接到最后。假设你现在已经安装完成了。

比如我已经有一个工程, helloworld:

image

这是工程文件的内部结构:

image

现在我们想让helloworld用上git怎么做呢, 在工程根目录下,点击鼠标右键。

image

选择 Create repository。

这个选项不要勾上。 稍后我们会解释什么是 Bare。

image

然后就完成了。

image

里面多出了一个 .git目录。 当前的目录(及其所有子目录)已经在git的监视之中了。 但是当前的代码还没有添加到git的跟踪数据库中。  简单的说,git还没有储存任何版本信息。 我们需要进行第一次提交:

git默认你本地会有一个主分支master。

image

我们写一些注释, 并且勾上想要添加到git的文件。 (如果有子目录的话, 它都会显示在这里。)

image

提交完成, close。 这个push按钮,稍后再说。

image

好了,这个时候我们在回到文件夹,看看有什么变化:

image 

现在这些文件就添加进git了。

剩下的你就可以为所欲为了。 想svn一样,自己试试几个命令吧: 修改, difference, commit, revert,

到这你已经入门了。 

最后我们来介绍两个重要的概念。

1. “git目录”,   就是指上图中,项目根目录下生成的 “.git” 文件夹。  用过svn的同学都知道, svn有‘.svn’文件夹。  他们的作用差不多。 这里保存了git的本地数据库资料。就是所有的版本信息。   跟svn不一样的地方就是,git中,只有根目录下有这个目录, 所有的子目录下都没有, 也就是每个工程只有一个.git目录。

2.  “git工作目录”, 其实就是你的工程目录, 比如上图中的工程跟目录:H:\mycode\helloworld\  。  问什么有这个工作目录呢。 就是你工作在这个目录下, 你可以修改编辑里面的文件,最后把修改提交给git目录。  这个共组目录还有一个神奇的地方就是,  你可以创建不同的branch(你默认工作在master下), 当你切换不同的branch时, 你的工作目录(工程目录)里的所有文件都会变成当前branch对应的文件。 这个不展开了。

 

最后再解释上面留下的两个问题:

1. “Bare”  创建Bare的意思是: 你只想要git的数据库(即上图中的 “.git”文件夹。), 而不想要当前的文件。 这通常用在公司的中央服务器上。 它不需要当前项目的实际代码,只需要保留git数据库信息就行了。

2. 在commit之后的对话框中的 push的意思。   正如之前介绍的。 push的意识是把你的修改push给别人(或者给公共服务器)。  commit的意思只是提交到本地的 .git 数据库。 并没有更新别别人。  所有提交完之后, 乌龟很贴心的给我们一个push按钮。 通过它你可以快速把刚刚的修改push给别人,或者给服务器。 

 

总结, 这不是一本完全的git手册,但至少能让你消除git恐惧症,快速入手。

这里是gitbook的中文版: http://gitbook.liuhui998.com/  他是真正的大而全。 为什么最后才说她呢? 因为它就像是一本 牛津大辞典, 全面,权威。  但是对于幼儿园小朋友学英语,就不能一上来就背它吧。  先跟着别人说,上手要紧。   之后有什么不会的,再去查字典。

好了。 就到这。 欢迎大家访问我的个人独立博客: http://blog.byneil.com  欢迎大家多多交流。

后面有时间的话,还想给大家分享一下我对几大源码托管服务器的经验。 希望大家顶啊。。。。

byNeil
byNeil.com

原文来自 Blog by Neil, post 学一点Git–20分钟git快速上手 转载请注明出处。本站保留一切权力

Windows 8.1 设置本地账户的方法

 

刚安装windows 8.1正式版,  安装完成之后, 提示设置账户.  貌似只能设置微软的在线账户, 之前的windows8有个选项可以只设置本地账户.  对于这种"改进", 我只想对微软说两个字: 呵呵.

幸好在网上找到了两个方法可以绕过:

1. 拔掉网线, 后退到上一步,  然后在下一步.  系统检测到你没有联网, 就不会提示设置在线账户了.  直接提示设置本地账户.

2. 如果你不喜欢这么暴力的方法, 还有比较文艺一点的.  在设置在线账户的框里面, 随便输入一个邮箱, 和一个密码,  系统检测不到账户, 就会在后面出现一行小字, 点击就可以创建本地账户了.

 

Have fun.

 

 

 
byNeil
byNeil.com

原文来自 Blog by Neil, post Windows 8.1 设置本地账户的方法 转载请注明出处。本站保留一切权力