SSH Escape Sequences

May 16, 2012

前阵子因为要折腾 VPS 的缘故把博客暂时放在了 @likounin 童鞋的服务器上,不想最近他的服务器出了点问题,于是只能赶紧把 VPS 重新折腾回原样,然后把博客搬回来。

慌忙折腾之中遇到个问题:在 SSH 里卡住了,没法 Ctrl-C(因为这种按键会直接发给远端),该怎么正常退出?

想来也应该有个转义序列可以直接对 SSH 做操作……于是,那就是 ~

SSH 到服务器后,确保之前按过一次回车,然后按

~?

于是就会列出一堆可用的转义序列,比如:

Supported escape sequences:
~. – terminate connection
~B – send a BREAK to the remote system
~C – open a command line
~R – Request rekey (SSH protocol 2 only)
~^Z – suspend ssh
~# – list forwarded connections
~& – background ssh (when waiting for connections to terminate)
~? – this message
~~ – send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

总之,要退出已经卡住的 SSH 程序,可以在按一次回车(见上面帮助信息的最后一行)之后,按下

~.

话说回来,转义字符也只是默认是这个 ~ 字符而已,如果不喜欢的话,ssh_config 文件中有一个选项叫 EscapeChar 可以修改转义字符。

以上。

Blender: 地铁隧道

April 4, 2012

清明回家,终于有点时间干点其它事情。

其实主要是发现在家访问 YouTube 等等网站不卡,于是就在上面找了些 Blender 教程看看(说来,Blender 2.5+ 大改了界面后还真没好好用过呢)。那么以下就是我昨天一下午的成果:

地铁隧道

很明显的,我材质神马的真心苦手,铁轨部分的材质尤其马虎 ╮(╯▽╰)╭

主要用到的就是 Array / Mirror / Curve 修改器(Modifier),地面额外用了一张反射贴图模拟边缘的水渍。

以上。

WM_IME_CHAR

March 17, 2012

于是又是一篇木有技术含量的笔记。

对于 Unicode 窗口,WM_IME_CHAR 和 WM_CHAR 没有区别,wParam 都是一个 WCHAR,即输入的字符。

对于非 Unicode (DBCS) 窗口,WM_IME_CHAR 的 wParam 即由输入法生成的一个字符。这个字符既有可能是单字节字符也有可能是双字节字符。如果是单字节字符,那么和 WM_CHAR 没什么区别;如果是一个双字节字符,那么 wParam 高 8 位为 Leading byte,低 8 位为 Continuation Byte。

所有经由输入法产生的字符都会产生 WM_IME_CHAR 消息而不是 WM_CHAR,但 DefWindowProc 会把 WM_IME_CHAR 转换为相应的一个或两个 WM_CHAR 消息。

例如:

  • 不开输入法输入「9」 → 收到 WM_CHAR (0×0039)
  • 打开输入法输入「9」 → 收到 WM_IME_CHAR (0×0039) → 收到 WM_CHAR (0×0039)
  • 打开输入法输入「笨」 → 收到 WM_IME_CHAR (0xB1BF) → 收到 WM_CHAR (0x00B1) → 收到 WM_CHAR (0x00BF)

去掉 WinMain 和控制台窗口

February 18, 2012

微软什么的最讨厌啦~写个 GUI 程序要么带个控制台窗口,要么就得用非主流的 WinMain 函数作入口。

用 gcc 的话,这其实不是个问题,带上一个 -mwindows 参数即可顺利解决掉控制台窗口并且抛弃 WinMain

而到了 Visual Studio,似乎很两难:

  • Linker 参数中 SubSystem 选择 Windows 可以去除控制台窗口,但会要求用 WinMain 作入口。
  • Linker 参数中 SubSystem 选择 Console 可以使用 main 作入口,但会自带控制台窗口。

于是困惑了。好在今天在 Irrlicht 的教程中见到了解法:

Linker 参数中的 SubSystem 继续选择 Windows,与此同时将 Entry Point 设置为 mainCRTStartup 即可兼得鱼和熊掌。

以命令行参数形式就是:/SUBSYSTEM:windows /ENTRY:mainCRTStartup

要点就是 ENTRY 参数有三种:mainCRTStartup、WinMainCRTStartup、和 _DllMainCRTStartup,分别对应调用 mainWinMain、和 DllMain,默认是根据 /DLL 和 /SUBSYSTEM 参数自动选择的。

以上。

这一天我们一起改密码

December 22, 2011

密码泄漏

如图,你懂的。

在这之后,还伴随着各种其它网站诸如人人、178、多玩、百合等等网站帐号密码的泄漏。呃~在这欢乐的一天,中招的各位真是辛苦了 m(_ _)m

p.s. 看这种文件果然还是 tail head grep 神马的方便 >.<

Vim 中删除符合条件的行

November 17, 2011

一说筛选数据首先映入脑海的是 grep,但 Windows 下就悲了个具了,从别程序复制(这时候觉得 GUI 不能管道真是太糟糕了)了一坨纯文本数据要筛选,为了这个还要临时保存个文件然后再开个 Cygwin 啊~MSYS 啊什么的真是太不适合我这种懒人了。于是还是要拜托好用的 Vim 来处理。

假设要在某坨数据中删除含有「kernel32」的行,可以执行:

:g/kernel32/d

其中中间的条件部分 kernel32 和一般的查找条件格式相同,最后部分的 d 则和一般的命令按键相同。如果要保留匹配的行则可以把开头的 g 替换为 g!

这样的写法实际是使用了 VIM 的「Multiple Repeats」功能,完整格式是这样的:

:[range]g[lobal]/{pattern}/[cmd]

详情请参考 :help :g :)