KKDEV - Shelikhoo 's Personal Blog

Be chosen to change the world.

#Why we must change the way we express our code

The CPUs are similar to each other, so similar that a compiler like LLVM can support multiply CPU architecture by translating a internal representation of action directly to native instructions without understanding what the program is actually doing. And they share a similar issue: making compromise for compatibility and a deeper cause: binary code distribution & representation. The most powerful advantage of a CPU architecture is its software ecosystem. No matter how powerful a device is, without a variety of available software ready for end user, the system is unsuitable unless it meet a power user.

Domain Socket的用途和其对于V2Ray的意义

TL;DR Domain socket是一种进程间通信机制,本身并不能跨主机通信,并不能直接用于翻墙,它是一种辅助配置的工具。 长回答 Unix domain socket 是一种跨进程通信通信协议,主要用于Unix系操作系统下,同一个主机上应用程序之间的通信。在V2Ray中实现了类似于TCP的流式Domain socket协议. 主要用法和优点 用于代理和其他程序之间的本地环回连接 Domain Socket协议的主要作用是和其他程序交互,这包括nginx等成熟的应用程序,也包括其他用户自己的应用程序。由于Unix domain socket支持基于文件控制访问权限,基于domain socket的协议可以比较有效的控制访问,减少权限控制的难度,减少了网络协议中需要的认证。 这在多用户环境下十分重要,通过Domain socket可以比较有效和方便的减少在同一个主机下,服务被其他用户访问的情况,及由于不正确配置导致本地服务被代理用户访问的情况。 当然,在部分环境下,Domain socket不占用本地端口,不需要生成数据包的特点也会是使用其的优点。 用于解决不同网络命名空间之间通信的问题 Linux操作系统下进程可以分组件可以处于操作系统中不同的命名空间,使用不同的操作系统环境。由于Unix domain socket是进程间通信方式,和网络并不处于同一个命名空间,因此,可以在使用相同的进程间通信命名空间的同时,使用不同的网络环境。这可以用于将部分程序在不同的网络环境中运行,实现在Linux环境下的分应用代理。 Domain Socket对于V2Ray的意义 在Unix环境下,一个比较重要的设计哲学就是每个工具做一个事,并将这个事情做好。V2Ray并不完全遵循这个哲学,而这个哲学也不是完全适合于V2Ray。但是,引入Domain sock是将V2Ray和其他程序进行有效结合的重要方法,使V2Ray更容易和其他程序和项目进行整合。

#Identify the barrier that reduce the the efficiency of modern computing

Modern computing devices are fast, but not as fast as it can be. One of the principle of software programming is abstraction, which make developing software faster and easier than its hardware counterpart, for the price of efficiency if the abstraction is not ideal. One of the most inefficient abstraction is sequential execution, which to be fair, cannot blame von-neumann. In the early days of hardware development, there is only so much circuit unit to support one core.


在未来的一段时间内,V2RayNG在Play上的开发者将变为其UI部分开发者所拥有的帐号CaptainIron (Telegram用户名为:d4boy)。 本次转移的原因在于这位开发者希望在其的App中加入应用内支付,而这需要开发者拥有自己的Play帐号并设置自己的支付方式。 在本次转移完成后,应用的开发者将显示为CaptainIron,而我将不再拥有对其商店描述和上架程序的管理权限。 由于我已经不再管理此程序的上架信息,请将您在使用这个程序的时候遇到的问题反馈给CaptainIron(Telegram: d4boy)。 同时,由于不再管理此程序上架的程序文件,这个程序的功能和安全性不会拥有来自我的背书和承诺,我也不会为此应用的行为和内容负责。 您在购买或订阅了此App内的服务时发生的交易不直接和我产生关联,您不应该期待来自我的功能和稳定性更新 ,也不应该以在此应用的付款的情况期待来自我的服务和支持。 此后,V2RayNG的更新将由其的开发者完全控制,而其的开发者应该自行处理来自其用户的相关反馈和支持请求。 这包括Telegram群组和来自其他渠道的和V2RayNG有关的求助和问题解答, 请不要对于和其有关的内容以包括但不限于私聊,@和或其他提及的方式请求和期待我的支持。 在AGPL协议的许可范围下,其开发者可以继续使用来自我的libv2ray并得到其的功能和稳定性更新。 这意味着V2RayNG将必须继续保持开源,公布源代码并允许来自其他人的修改和分发修改版的程序。 每个开发者开发程序都需要有自己的动机和动力,有些开发者可能愿意在不接受任何形式的报酬下开发并共享程序, 但是更多的开发者需要金钱的驱动才会持续不断为用户提供高质量的程序。 缺少利益支持的任何活动都不可能长久持续,尤其是极其枯燥且需要特殊的工具和技术才能完成的软件和或硬件开发工作。 希望大家不要对开发者决定加入收费功能的决定做出过多的负面评价,每一个都要为一个原因而努力 ,而金钱则是对于很多人来说最容易接受的原因,也是最容易让他们感到自己工作的意义的方法。 对于他们来说,这是对于他们使用自己的周末和夜晚甚至是午休和 课间在电脑和手机前对着一个枯燥的界面和晦涩难懂的术语挥洒自己的时间的最好的理由 (P.S.:不过V2RayNG开发者貌似是在工作地点摸鱼进行开发, 并没有使用自己的私人时间,可能并不适用上面的描述23333333)。 Update: 转移已经完成。 Update: 已经提交了转移申请,可能需要几天的时间才会生效。 Shelikhoo

V2Ray RFC: V2Ray Pipe Transport Proposal

V2Ray is designed to be a flexible network tool for developers. However, in term of developer friendliness it have suffered a bad reputation as being hard to master both for user and third-party developers. Here, I would like to propose a new stub transport that is intended to reduce the difficulty for developing a transport for V2Ray, and remove the necessity of commitment for development. Pipe transport use operating system’s fork and/or unix domain socket capability.

Designing A QR Code Scheme For V2Ray

Scanning QR code to import configure file from computer have been a wanted feature for a long time, but only until very recently, such a possibility were aroused to implement such a functionality. Before LibV2Ray write a universal, future proof, multipart enabled QR code. Multiply attempt by third-party developer was made to create a QR code representation for a configure file. All previous version of QR code solve all problems they face at that time very successfully, but still at the expense of some problem not significant in their eyes.

V2RayGO Privacy Policy

V2Ray Team, LibV2Ray Team and V2RayGO Team respect your privacy. V2RayGO do not include any tracking library or service from third party purposefully, but could use third party service to improve your experience. V2RayGO might or might not collect your device identification info, hardware and software info, cash info, and network info, but we will request your consent before upload them to our sever. User can refuse to upload any of these information to our server and continue to use the a limited set of function of our software, once you have consent our upload we will keep uploading indefinitely.

#Classify and discriminate network traffic to enable partial global proxy in Linux using cgroup,iptables,redsocks

Some of my friends ask me to play minecraft with them. “Great!”, I said as minecraft can be running natively in Linux, which is a prerequisite for me to join. No Longer before I downloaded it, I encounter a problem, it doesn’t honor system’s proxy setting and will not run unless it can contact its server and Internet on my computer is provided by a socks5 proxy. While a VPN can do the work without much exploration, I decided to seek a way to solve this problem in a more elegant way.

$I am a pro-encryption

Firstly, happy to see you again. For past few months, this blog have been frozen as I was as busy as have little time to doing stuff for myself. As you might have already noticed, from now, this blog will be written in English. This adjustment was due to the variety of font I can choose once I wrote in English. In this article, I will talk about the recent debate on encryption and how it related to you.


现在,很多人的电脑上都有一个小泡泡,实时的告诉自己到底还有多少内存。但是你真的了解内存么? 电脑中有多级存储机制,一般的说,读取的速度越快,存储的容量越小。CPU寄存器和缓存,内存,硬盘,(其实还有),就是电脑的多级存储得成员。其中,内存和之前的存储介质中存储的内容在电脑关闭后会自动消失(可以这样认为),因此我们大部分的数据都保存在硬盘之上。 但是硬盘的速度并不快,为了保证程序的流畅运行,电脑会将程序在近期需要的数据加载到内存,程序在读取文件内容时可以直接到内存,而不是硬盘读取。因此提高了电脑的运行速度和减少可响应时间。 内存,只要电脑一启动完毕,就会被系统自动的加载数据,比如程序可能会用到的文件,而程序,也可以向系统申请内存。结果是,在正常运行的现代操作系统上,闲置的内存非常少。 内存中预加载的文件并不会和程序抢占内存,程序要求内存时,操作系统可以直接将已经预加载文件的内存交给程序,尽管预加载的文件没有用上但是实际上也没有损失。 因此,内存对于操作系统是一个不用白不用,用了也白用的地方。 但是,当运行的程序过多时,也会出现内存确实不够用的情况,这时就会将程序的不常用内存放到交换分区(页面文件,虚拟内存)中来防止系统因为内存不足而崩溃。但是因为交换分区在硬盘,访问速度比内存差很多,在可能的情况下,一般不将程序的数据放在硬盘中。 好,到最后,为什么内存不用清理呢? 清理内存是先让系统给自己分配很多内存(文件白预加载了),将其他的程序都挤到交换分区(这些程序的运行速度变慢了),之后释放掉自己多请求的内存,让内存闲置下来。 不久,随着其他程序又运行,毕竟是需要经常访问的内容,程序数据会返回内存,直到下一次内存清理。 内存这种东西,空着也是空着,不如多用用好。当遇到因为内存不足而导致的电脑速度慢时,应该减少运行的程序或增加内存的大小,而不是使用软件来降低内存利用率。