从零开始的内网穿透

在跟朋友Terraria联机的过程中,我2G内存的小云服务器不堪重负,于是决定用内网穿透在我的树梅派上跑游戏服务器。
其实以前在Minecraft联机的时候,我就已经有想法用内网穿透搭搭麦块服务器了。当时尝试了github上的开源工具,不过被TX疯狂发短信和邮件报警。然后大家也不玩麦块了,所以就不再折腾了。
这次趁着闲,索性自己写一个工具。

然后在这里也介绍一下内网穿透的原理,和怎样自己编写这样一个工具。

Read More

写一些能够被自动调用的函数

在日常开发测试中,偶尔会有这样的需求,在一个cpp文件中,定义一些函数,而这些函数会在一定条件下被自动调用。

例如,我是在刷leetcode题的时候,遇到了超时的问题,于是乎想写几个benchmark函数测试一下性能。可是如果以后每次测性能都要重新写一遍的话,又很麻烦。于是乎,我有了这样一个需求:

1
2
3
4
5
6
7
8
9
10
11
12
// leetXX.cpp
....

MY_BENCH(bench1)
{
...
}
MY_BENCH(bench2)
{
...
}

Read More

Idea 使用小技巧

从一开始的Eclipse,到MyEclipse,最后到idea,大致是我使用Java IDE的一个轨迹,而现在基本上是只有在使用idea进行Java开发了。作为一个IDE,无论是界面,还是代码提示和修改,亦或是对各种框架和工具的支持,方方面面,它都带给我特别多惊喜。故而在这里总结记录分享一点在使用idea时用到的特性和技巧。

Read More

使用移动设备作为Linux副屏

由于工作的原因,经常会需要带着自己的笔记本到处跑。然后,作为程序员,总是渴望着更多的屏幕。比如一块屏幕用来看视频,一块用来看文档,一块用来写代码,一块用来做测试。这也是我比较喜欢EmacsAwesome这种编辑器和wm的原因。不过,在实际生活中,随时带着一块屏幕出门也不太现实,所以探索一下使用ipadandroid手机作为副屏的方式。

在这篇文章中,就大致介绍一下VirtScreenDeskreen的使用和特点。

Read More

string::append的问题

在使用libcurl的过程中,按照教程使用string类型进行数据接收:

1
2
3
4
5
6
size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp)
{
auto sz = size * nmemb;
((string*)userp)->append((char*)buffer, 0, sz);
return sz;
}

但是在测试过程中,接收图片时却总是出现问题,收到的数据远小于原始数据。

Read More