GFW这次升级的原理推测

面对着GFW的升级,相当多的梯子的作者也是纷纷表示和GfW进行斗争已经没有意义。我这里也花了一些时间稍微看了看GFW升级之后的情况。由于我在教育网,所以这个结果不一定是全国的普遍情况。
fqrouter的作者声称这次GFW的升级是进行全球范围的拔网线。这个一点都不假,这车升级之后GFW不会像以前以前一样在国际出口检测之后发送RST包进行阻塞了。GFW现在的行为直接是在骨干路由进行丢包。我这里对Google进行一次tracert的测试:
通过最多 30 个跃点跟踪
到 google.com [173.194.127.192] 的路由:

1 2 ms 2 ms 2 ms 180.201.128.1
……
6 8 ms 8 ms 9 ms 119.167.86.53
7 36 ms 36 ms 36 ms 219.158.10.81
8 * * * 请求超时。
显然,在骨干网就被丢包了。
现在一个能访问的google ip,一旦你进行访问,那么过上半分钟左右它就会被添加到黑名单里面。这个速度应该不是通过路由表扩散进行污染的应该是通过某种新的技术来进行可编程的拦截。经过测试发现这个设备确实就是出口路由了,它的下一跳就已经是国外的ip。
虽然说没有太多的实验,基本确定了这次升级之后GFW会尝试自动扩展黑名单并且在国际出口墙掉它们。

方滨兴教授祝您身体健康

吐槽一下minecraft forge 1.8的改动

众所周知,去年年末,微软成功收购了MoJang公司从而掌握了Minecraft等游戏,有许多开发者离开了原来的开发团队。在Minecraft Forge 团队虽然宣布将会把forge的项目继续下去但是Minecraft Forge的创始人之一的cpw离开了Minecraft Forge团队。在以前的时候有相当多的Minecraft Forge的API都是在cpw的个人的名字的包里面,由于cpw离开,Minecraft Forge团队也是把cpw下面的包都该到了Forge的命名空间下面,并且没有任何提前声明,就活生生的直接就突然在新版本中重新修改了API的位置。这根本没有办法让开发者适应,开发者不得不重构代码才能在新的版本下面开发。而Minecraft Forge团队似乎也意识到了自己的行为有一些愚蠢,于是在新版的Forge测试版里面又有了一份cpw命名空间下面的代码,但是如果你把旧版本的Mod直接在这上面运行会由于无法强制类型转换而导致游戏崩溃;换句话讲就是cpw下面的代码是根本没有办法工作的。简直就是Lex想一出是一出的改动,forge的各种改动好烦啊,又要去更新教程呢……

2015新年大礼:GFW再次大升级,fqrouter已死,goagent已死

上个月低GFW屏蔽Gmail服务之后,今年GFW一上来就来了一个惊喜,该屏蔽的都屏蔽了。
fqrouter的作者昨天在twitter上表示项目停止维护。而GoAgent的作者也停止了GoAgent这个项目。也就是说原本大约40%的翻墙者不得不更换新的工具。
这一次的屏蔽似乎并不是简简单单的普通的屏蔽,而是带有回访功能的更加智能的骨干网丢包。我这里的以前通过hosts修改来访问google,而现在当我查找到能使用的google ip并且尝试访问之后的几分钟之内,这个ip地址就被阻断,然而该ip可以ping通,而80端口tcp包却没有任何应答,而443端口的tcp也是中途就会丢失。由于并不知道google的mac地址,所以不能实际确定这次是使用的路由表污染还是使用的选择性丢包完成的。至于更进一步的研究就要等着我有更多时间之后进行仔细的研究。
至于这次的GFW升级的影响肯定还是很大的。不管GFW怎么升级,VPN或者SS这种麻雀战以及XX门这种XX功的东西肯定是不会消亡的。如果中国阻断PPTP协议的话,那么许多外国企业就完全没有办法在中国办公了。而XX门那种工具有着政治对手的支持肯定也不会消亡。所以这次升级直接的后果肯定就会使现在翻墙工具变得更加单一化。
总之,方教授真是给了一个新年大礼啊。本来还想写一篇关于GFW的论文,结果GFW就升级了……你特么在逗我

php文件函数windows系统编码bug

最近在windows的php环境突然发现windows的php的文件函数文件名都是使用的GBK编码没有使用utf-8编码。于是需要手动转换一下编码。当然了linux系统都是使用的utf-8编码就没有这些问题啦。

我写了一些常用的函数的包装,供大家方便使用

$Server_System;
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
    $Server_System = 'windows';//filename will be changed into utf-8 in windows
} else {
    $Server_System = 'linux';
}

function my_file_exists($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    return file_exists($path);
}

function my_file_get_contents($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    return file_get_contents($path);
}

function my_filemtime($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    return filemtime($path);
}

function my_file_put_contents($path,$data)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    return file_put_contents($path,$data);
}

function my_is_dir($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }

    return is_dir($path);
}

function my_md5_file($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    
    return md5_file($path);
}

function my_sha1_file($path)
{
    global $Server_System;
    if($Server_System == 'windows')
    {
        $path = iconv('utf-8','gbk',$path);
    }
    
    return sha1_file($path);
}

快被bug弄崩溃了

到处都是bug,bug,bug。刚刚修复了那个php CDN的文件编码之类的bug,现在又出来了莫名其妙的调用失败的bug。

做的nodejs的蜘蛛也是被nodejs的异步给恶心到了,嘛,早知道就不用nodejs给自己自找麻烦了,哎,不能实时同步查询数据库简直无情。

神经网络这面的程序也是错误多的好多,莫名其妙的训练不了了……不管了,总之各种操蛋

轻量级php文件同步:LIGHTphpCDN

嘛,很不要脸的来推广自己的项目了。一个开源的轻量级的PHP写的文件同步系统。当然目的是为了管理CDN的了,所以名字也就叫CDN了,至于是不是CDN嘛,看你怎么用啦。

为什么要写这个项目呢,主要是前一段时间被我的php空间恶心到了,由于是虚拟主机,只能使用ftp进行上传。由于想利用php免费空间建立下载镜像,所以就一怒之下写了这个软件。

软件的说明什么的在项目目录里面,不过是英文写的罢了。

项目主页:https://github.com/manageryzy/Light-php-CDN

 

世界真的好小啊

前一段时间无意在网上发现了星光的博客,一下子找到了萌口组,发现这竟然是黑猫长的站。

最近又在MC的圈子里面发现了一些个人独立博客,追踪着这些友情链接真的发现了许许多多熟悉的身影呢。

突然见我萌生了一个念头:通过外链的分析建立一张独立博客的外链网络的可视化查询网站。

不管怎样,先把自己手头的活先干完啦。开的坑太多了 > _ <

Visual Studio插件推荐:resharper

一直以来不在Visual Studio编程,发现自己很火星的发现这么一个插件:resharper

众所周知,Visual Studio很强大,但是有一些功能跟屎一样:代码提示完全不区分上下文环境(简直就是NOTEPAD++水平);快捷键设计的让人完全体会不到有哪里快捷了。

在无意中发现了这么一款插件用来替换掉Visual Studio跟屎一样的代码提示。人们都说安装了resharper的VS和没安装的VS是两个IDE(不过我并不是微软阵营的开发者)。实际使用了一下,发现确实,这个代码提示很强大。不过他是收费的(在中国国情下……不说了)。如果你不能忍受这种商业软件,我推荐你还是不要使用Visual Studio了吧。免费的版本你能够获得30天的试用。

http://www.jetbrains.com/resharper/

以上是它的官方网站。

新坑预告:Minecraft Mod开发框架

在现在这个时代开发Minecraft Mod已经比起过去轻松多了,但是仍然是一件非常繁琐的事情。你不得不把所有的数据都在代码里面处理,你必须是程序员、是美工、是游戏设计师、是游戏测试人员。所以我准备开发一套更加方便的Minecraft Mod开发框架,提供图形化界面的代码生成、资源文件管理以及实用API的提供。

 

项目的地址(现在这个只是图形化界面的库项目,算是代码模板吧):https://github.com/manageryzy/Minecraft-Forge-Class-Template

 

走过路过的,如果你也热爱Minecraft 请给我的项目星星或者关注啦,当然如果你能够贡献代码,请务必联系我

自定义你的eclipse forge-gradle workspace

如果你使用eclipse来开发你的minecraft mod,你可能会直接使用Minecraft Forge提供的workspace,这样子虽然方便,但是有的时候你就会意识到你正在做一些非常愚蠢的低级的事情:在不同版本的mod之间来回复制代码。就算是你通过版本控制软件(比如git或者subversion)来解决了这个问题,有的时候你还是会发现你没有办法来解决工程之间的依赖,也没办法在一个workspace下面开发多个mod。今天我来粗浅的介绍一下如何在eclipse的一个workspace里面开发并且调试自己定制的forge-gradle的工程。


 

不管怎么样,你在开发之前你必须要拥有你的开发工具了。在你安装eclipse之后很有可能你的eclipse是不支持gradle的,你可能会需要手动安装gradle插件。为了安装的方便我推荐你通过MarketSpace来安装你的插件。如果你的eclipse没有Market请你自行在网络上搜索如何获得MarketSpace。通过MarketSpace你可以轻松的获得Gradle插件。

虽然有了Gradle插件你就可以开始开发了,但是由于这个插件并不是很好用,所以我还是在这里来具体的说一下你该如何操作吧。

  1. 解压你下载回来的minecraft forge src文件
  2. 在命令行或者终端里面执行gradle的初始化反编译环境任务,并且执行eclipse任务。具体的可以参考forge gradle环境搭建教程
  3. 在eclipse 的File菜单里面选择Import,选择已经存在的工程。找到你的解压出的目录并且导入
  4. 导入之后你的工程通常不会有一个友好的名称,推荐你通过F2来调用重命名来给工程起一个容易识别的名字
  5. 推荐你在之后的开发中通过Git来管理你的软件版本,这样也方便你进行多个分支的开发
  6. 在eclipse配置运行选项。为了方便,通常我会配置运行选项为Gradle GUI。不要忘了给你的运行选项起一个容易识别的名字
  7. 启动你的刚刚配置的工程。如果一切顺利的话,你应该可以看到已经列出来的可用命令(不过这一步在我这里通常需要花费一定的时间)。
  8. 推荐你把常用的runClient以及runServer添加到favorite里面
  9. 如果你需要调试,请在你的Gradle启动任务的时候添加上–debug-jvm参数。这个时候还并不是完全的。你还需要去eclipse里面去配置项目的调试的方式。具体做法是:在Debug As里面选择远程Java应用程序,然后设置端口。这时候你应该先在Gradle里面启动任务之后然后通过eclipse来调试程序

以上,就是全部的自定义你的ForgeGradle WorkSpace的流程了