屠龙

有个单薄弱小的少年,手无寸铁的站在恶龙面前。他没有魔神的长斧,没有锃亮的铠甲,他除了热血一无所有。
但就是死,也会全力一击。
让你知道,即使是凡人,也有屠龙的愿景。你看那碧蓝的苍穹之上,无数个英雄的魂灵在呐喊啊,仿佛在说,他啊!他是我们的战士,他就要来了。
那么来吧,我心中的龙。
每一个少年心中,都有一条非屠不可的龙,不是么?

无畏

我想让你见识一下什么是真正的勇敢
不要错误地认为勇敢就是一个人手握枪支
勇敢是当你还未开始就已知道自己会输
可你依然要去做
而且无论如何都要把它坚持到底
你很少能赢
但有时也会

自叹弗如

这两天一直在纠结一件事情。
我真的很想认真的学习英语了。我知道我想干的事情一定可以做到。
今天我收到了服务器的告警短信,硬盘需要续费了。
这个硬盘里装着我这半年所有的心血,还有好几个T的分词结果和图片。但是我知道如果他还在的话,我肯定会忍不住接着做Whisper和Argus的。
我自己是肯定下不了手格式化硬盘的。
所以我决定,不给硬盘续费了,让他自生自灭吧,哈哈。

这也算是一次实习经历吧

其实这篇东西很早之前就打算写了,但是最近一直在忙一些其他的事情,所以就耽搁了下来。
从阿里回来,算是圆了我“去阿里”的梦想,但也终结了我对阿里的所有幻想。也许这就是一座围城,外面的人想进来,里面的人想出去。
回到学校,开始了一段非常鬼畜的实习之旅。真的是见山不山了,这家公司的实习经历也许永远不会出现在我的简历中,但我想说的是,这应该是我大学生活中最快乐的一段时间了。
由于之前一直是打算找工作的,花了很多时间去水offer。现在去准备雅思是有一点晚了。但是既然已经选择了这条路,只能硬着头皮往前冲了。
这两天我观察了一下我想要申请的学校,基本都是要求雅思6.5分的。对于我这样一个英语渣来说,这真的算是一个不小的挑战了。果然以前欠下的东西是一定要还回来的。
这个学期打算专攻英语了,技术方面的东西可能要延缓一段时间了。如果这个学期出不了成绩的话,那我可就真的GG了。以前一直没有什么学习英语的动力,现在一下子给自己搞了这么一个幺蛾子,还是蛮爽的。让我们轰然向前吧!

Windows静默执行system command

这两天在撸一个远程控制的木马。
在服务端,我们首先要实现的一个功能就是要能够执行系统命令。但是system函数在执行的时候都会自带一个黑乎乎的Console,这东西很容易暴露啊(什么很容易,明明一眼就能看出来好么?)
所以,我们需要一种可以将输出重定向的函数来完成这一光荣而不怎么艰巨的历史使命。打开MSDN,万花丛中我们找到了这个东东——CreateProcess。
下面的代码实现非常简单,我们重定向了系统调用的输出,成功把它带到了沟里~~

#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup") // 设置连接器选项

之后我们再拉一个文件句柄出来,用它来接住CreateProcess的输出。
Continue reading

关于Socket.io的一个大坑

在阿里其他的东西没学会,但踩坑填坑的手艺却是大有长进。
这两天在搞一个聊天工具,其中用到了Socket.io这个库。这个库给我的印象其实一直都是非常好的。这个家伙的Websocket封装做的很不错,给开发带来了很大的便利。
昨天脑洞大开想在Server端加上一个Redis的消息队列。这样的话,如果有新的Connection连接进来,Server就可以向他推送近期的消息了。
当然,储存消息的方式不难。我直接用来Redis的Hash存储,这种方式比较适合存储像消息体这样的对象类型。
之后我在监听Login事件的监听器中加上了emit广播,测试了和Redis的连接。
由于不能每进来一个新连接Server都去广播一次,这样很影响用户体验。所以我打算做成单播的形式,只给新加入的Connection推送最近的消息。
于是按照Socket.io的Doc:

// send to current request socket client
socket.emit('message', "this is a test");
// sending to all clients except sender
socket.broadcast.emit('message', "this is a test");
// sending to all clients in 'game' room(channel) except sender
socket.broadcast.to('game').emit('message', 'nice game');
// sending to all clients, include sender
io.sockets.emit('message', "this is a test");
// sending to all clients in 'game' room(channel), include sender
io.sockets.in('game').emit('message', 'cool game');
// sending to individual socketid 
io.sockets.socket(socketid).emit('message', 'for your eyes only'); 

我爽爽的Debug了两个小时,最后还是在stackoverflow上找到了答案。从1.0.0的版本之后,Sockets变成一个list数组了,所以调用姿势变成了这个样子:

//向新加入的用户推送之前的消息
 io.sockets.connected[socket.id].emit('message', {userid:reply.id, username:reply.name, content:reply.content});

简直2333有木有?其实这不是一个大问题,但是网上的教程基本都是1.0.0版本之前的,所以很多教程使用的是现在已经不再兼容的方法。
希望我能成为萝卜,为你填掉这个坑。