Authentication failed (rejected by the remote node), please check the Erlang cookie

遇到这种情况原因就是本地的授权cookie文件不匹配导致的,结局方法如下:

  1. 删除 %UserProfile% 目录下的 .erlang.cookie 文件
  2. 使用 C:\Windows\System32\config\systemprofile 目录下的 .erlang.cookie 覆盖掉之前 %UserProfile% 目录的同名文件

在试试,现在应该已经可以正常访问了

本机到本机

1
2
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --zone=public --add-port=80/tcp --permanent

本机到其他机器

1
2
3
firewall-cmd --zone=public --add-masquerade
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.0.2
firewall-cmd --permanent --zone=public --add-service=http

重新加载应用

1
firewall-cmd --reload

配置

1
2
3
4
sysctl -w net.ipv4.ip_forward=1 # 启用IP转发功能
sysctl -p # 立即生效
echo "net.ipv4.ip_forward=1" >> /usr/lib/sysctl.d/50-default.conf
iptables -t nat -A POSTROUTING -j MASQUERADE

添加端口转发脚本 portforward.sh

1
2
3
4
#!/bin/bash
# $1=listen port
# $2=connect address and port example:111.111.111.111:2222
iptables -t nat -A PREROUTING -p tcp -i eno1 --dport $1 -j DNAT --to $2

想要添加端口的时候只要这么用就好

1
./portforward.sh 22 111.111.111.111:22

在 Windows Vista 以上的操作系统中可以使用pkgmgr对Windows功能的快捷安装
比如想要安装 telnet客户端 时,只需在控制台里面键入以下命令并回车:

1
pkgmgr /iu:"TelnetClient"

等几秒钟后 telnet 命令就可以使用了
就这么简单 :)

问题出现

今天在Windows里使用 Cocos-Quick 创建的项目在使用ADT往Android里面部署的时候遇到了下面的问题

出现上图的情况是这样的操作步骤:

  1. 添加 D:\Tools\Quick-Cocos2dx-Community\cocos\platform\android\java 到 Library 引用里
  2. 点击 OK
  3. 重新打开这个配置界面

问题解决

测试了许久后,无意间发现有次选错了路径后Library正常了

当时我选择的 Quick 是 F:\Quick-Cocos2dx-Community
选择的项目目录是 F:\Code\Cocos\QuickHello

终于发现了解决这个BUG的办法: 将项目和想要引用的Library放在同一个分区内
遂将项目和 Quick 放到同一个分区内后问题解决,效果如下:

引起这个错误的原因是: Eclipse 本身并不是给Windows 这种多分区系统定制的,本身是用来给 MAC 或者 Linux 这种以目录为结构的系统使用的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 拉取最新的代码
git fetch --all
# 恢复到最后一次提交,放弃本地所有修改
git reset --hard

# 列出所有设置
git config -l

# 抛弃对文件的修改
git co -- <filename>
# 抛弃对目录的修改
git co .

# 从版本库中删除文件
git rm <filename>

# 比较差异
git diff

# 查看提交历史
git log

本篇文章后续不定期更新

不能再构造函数内使用 shared_from_this() 函数

1
2
3
4
5
6
7
8
class class_a : public std::enable_shared_from_this<class_a>
{
public:
class_a(void)
{
auto self(shared_from_this());// 这里会报 bad_weak_ptr 错误
}
};

子类无法重复继承

1
2
3
4
5
6
7
class class_a : public std::enable_shared_from_this<class_a>
{
};

class class_b : public class_a, public std::enable_shared_from_this<class_a>
{
};

这段代码将无法通过编译。
如果想返回子类的 shared_from_this 指针,则可以进行如下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class class_a : public std::enable_shared_from_this<class_a>
{
public:
virtual ~class_a()// 为了确保 dynamic_pointer_cast 可以工作,需要父类拥有虚函数。
{}
};

class class_b : public class_a
{
public:
std::shared_ptr<class_b> shared_from_this(void)
{
return std::dynamic_pointer_cast<class_b>(class_a::shared_from_this());
}
};

通常来说如果定义一个类时,如果这个类可能被继承使用时,将这个类的析构函数定义为虚函数来确保析构的调用顺序

需求

我有时需要在命令行里对某个VS项目目录进行编译或部署等操作,总是需要以下步骤:

  1. 打开VS的Command Prompt
  2. 进入该项目目录
  3. 进行编译操作

个人觉得这样太浪费时间,于是萌生了添加类似 Command Here 右键菜单的想法。
办法很简单,在注册表添加相关项就可以了

解决方案

Windows7 添加方法

将以下内容修改到自己对应VS目录后以文本形式保存到 VS2013-Command-Prompt-Here-win7.reg 文件,然后双击导入即可

1
2
3
4
5
6
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\VS2013 Command Prompt Here]

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\VS2013 Command Prompt Here\command]
@="cmd.exe /s /k pushd \"%1\" & \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat\" x86"

Windows10 添加方法

将以下内容修改到自己对应VS目录后以文本形式保存到 VS2013-Command-Prompt-Here-win10.reg 文件,然后双击导入即可

1
2
3
4
5
6
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\VS2013 Command Prompt Here]

[HKEY_CLASSES_ROOT\Directory\Background\shell\VS2013 Command Prompt Here\command]
@="cmd.exe /s /k pushd \"%V\" & \"C:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\VC\\vcvarsall.bat\" x86"

为什么区分Windows版本

因为对于Windows来说传参的方式有所改变
pushd %1 是用于Windows7的
pushd %V 是用于Windows10的

下载

for Windows7: VS2013-Command-Prompt-Here-win7.reg
for Windows10: VS2013-Command-Prompt-Here-win10.reg

打开 Visual Studio 2013 Command Prompt

1
2
3
4
5
6
7
8
9
10
11
wget http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/win32/nasm-2.11.08-win32.zip
unzip nasm-2.11.08-win32.zip -d C:/nasm
set PATH=%PATH%;C:/nasm/
wget https://www.openssl.org/source/openssl-1.0.2d.tar.gz
tar xzf openssl-1.0.2d.tar.gz
cd openssl-1.0.2d
perl configure VC-WIN32 --prefix=C:/openssl
ms\do_nasm
nmake -f ms\nt.mak
nmake -f ms\nt.mak install
echo "build successed."

这样编译不会产生 error A2070:invalid instruction operands 这个错误