存档

‘乱七八糟’ 分类的存档

Visual C++ 2009编译libmikmod

2009年11月10日 dipplum 7 条评论

1. 主页 http://mikmod.raphnet.net/

2. 最新版本 3.2.0-beta2,2004年2月发布

    下载 http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.zip

3. 编译依赖

    DirectX SDK中的头文件。最新的DirectX SDK 2009 Auguest可以从微软(http://is.gd/4Q3Mo)下载。或者只下载其中include目录和lib目录打包(http://is.gd/4Q416)。

4. 编译方法

    解压后,从Visual Studio 2008的命令行提示符下进入win32目录,首先设置INCLUDE变量,然后编译。如果编译静态链接库,可以参见下例(把directx的目录修改成自己的):

cd win32
set INCLUDE=..\..\directxsdk-0908\include;%INCLUDE%
nmake -f makefile.static

阅读全文…

分类: 乱七八糟 标签: , ,

学习了下《有一种战犯叫参谋》

2009年7月31日 dipplum 3 条评论

昨天说看到黄章晋的博客上说我们 regime 对于31-45年这段历史的描述是有“框架性描述”的错误,把我给惊到了,还以为恨了这么多年日本人恨错了。于是找来这本他推荐的《有一种战犯叫参谋》,囫囵吞枣的看了,还是非常有收获的。

首先通报我的学习结论:确实有“框架性”错误,但不重要。而且,那时的日本鬼子比我想象中的还可怕。

黄章晋所谓的“框架性描述”错误是:1937年爆发的中日全面战争,并非一场有预谋的要灭亡或全面吞并中国的侵略战争,即使到1945年,日本都没有这样的想法。这个结论的前面半句从《参》中是可以得到的,后半句我稍微有点吃不准。

下面摘取下《参》中发现的有趣的现象讨论:

  • 不宣战

从1937年“卢沟桥事变”中日战争开始,到1941年偷袭珍珠港太平洋战争爆发,中日居然都没有宣战。国民政府据说一直到1942年才对日宣战。日本可说是“不宣而战”,中国则是“战而不宣”。奇怪吧?

日本不宣战,是因为最重要的战略资源,石油、橡胶都捏在美国人手里,一宣战美国肯定中立;中国不宣战,也是巴望着美国和德国的武器装备和援助,怕宣战后怕美国中立,德国支持日本。

宣战是个现代文明中很有趣的概念,二战之后,仗还在打,但几乎没有大国之间的宣战了。不宣战可以规避很多国内法和国际法中的重重限制。

  • 战争理由

日本莫名其妙发动全面对华战争,到现在根本没有人知道为什么,奇怪吧?

其实九一八事变发生的时候,策划者石原莞尔的战略目的还是很明确的,扶植伪政权政权,建设铁路,拓展日本的战略纵深,开采煤矿等战略资源。

而到1937年卢沟桥事变之后,日本皇军策划了一系列事变为借口,占领了大多数城市,并扶植了另外一个伪政权。但战略目的何在?

把中国全境变成日本的领土是不现实的。前面讲过日本不宣战,宣战时要公布战争理由,不宣战就没有,没有理由不可能堂而皇之的侵占他国领土。开玩笑,日本想占,列强不想占?以为其他资本主义强国都是吃屎的啊。

所以,日本人只能在沦陷区扶植个伪政权,伪装成两个中国政权内斗,然后驻个军、占几个矿山、抢几个文物、顺便屠杀些无辜的中国百姓。日本只要不名目张胆宣布沦陷区是日本领土,并开始移民,列强也只能装模作样的谴责并呼吁日本停止武装冲突。

  • 不投降

因为这仗日本也打的莫名其妙,并且在开战之后不可避免的被拖入人民战争的汪洋大海。所以后期就一直希望尽快结束这场战争。

单方面撤军是不可能的,打了这么久,战略目的是什么谁都不知道,要达成也就无从谈起,又什么好处都没捞着,要撤军日本国内舆论都不答应(奇怪吧,据说南京攻陷后,日本“举国”欢腾)。所以,无论如何,也要逼蒋介石快点投降。投降了就有谈判,谈判就可以讨价还价,割地赔款之类,好处能要多少要多少,大不了拉上列强来一起分。

蒋介石应该就是看到了这一点,死不投降。因为蒋手上有一张王牌,就是国际支持。有了国际支持,只要他不投降,日本也不可能怎么样。

  • 石油

在此之前几乎不理解为什么中东那块这么闹腾。现在倒是明白了,现代战争中的各种“大杀器”,飞机坦克舰艇炸弹啥的,都需要石油,我真笨。日本又是没有石油资源的国家。那时候还没有发现大庆油田,和东海油田(钓鱼岛啊钓鱼岛),否则历史怎么发展就很难说了。

据说当初日本年消耗石油490万吨,90%靠进口,主要是美国。那时印尼有块亚洲最大的油田年产470万吨,实际控制者也是英美。日本有胆和美国决裂,打大东亚圣战,也是基于自己能控制这块油田。实际上,从1941年12月8日偷袭珍珠港开始,日本花了两个月的时间,在1942年2月的确控制了印尼的这块油田。

  • 军国主义

前面说我认为“框架性描述”错误不重要,指的是这不影响很多大家公认的正义和事实。但准确、不夸大的描述历史是绝对必要的。

从《参》中看出,日本军国主义,还是很可怕的。

首先,和德国意大利的独裁政府不同,日本军国主义时期并不独裁,从31到45年期间,换了怕有十个首相,还有一个反战的首相被暗杀。就算是后来东条总揽几乎所以内阁职务,打了败仗照样下台。支持这样一个国家,走过十五年的动力到底是什么?我一想就不寒而栗。

其次,参谋,也就是《参》文一直批判的、左右日本军政几十年的这样一个存在,简直是专门培养的战争机器。他们中的大部分从来没有进入社会,从小就在军人家庭长大,然从专门的军队小学开始一直上到士官学校(这个传统现在的自卫队还有,汗)。从来没有打过仗,读了十年书之后,就成了参谋,指挥战争。还是不寒而栗。

最后,如果说政府官员,军队指挥员还只能代表一小部分人的话,最不可思议的就是日本士兵了。二战中日本士兵共阵亡近250万。那时候日本总人口7000万。估计男丁3500万,20-30之间青年最多1000万,有多少人当过兵?日本投降时还有多少士兵?至少苏联就俘虏了60万关东军一直没有归还日本。日本投降之后,很多打散的日军继续打游击,最后正式投降的一个日本军官竟然是撑到了1974。继续不寒而栗。

分类: 乱七八糟 标签:

git remove file from revision history

2009年3月18日 dipplum 没有评论

最近学习 git,真是非常强大,非常不好用的软件。

一个常见的需求:有一个文件,包含敏感信息,不小心加进git库里面去了。希望从源码库的所有历史记录中删除该文件的所有版本。

其他的源码管理系统也会有类似的功能。如果是 CVS,就到源码库目录下直接删除 RCS 文件。如果是 Subversion,则是用 svnadmin dump 之后,用 import filter 再倒入。

git-filter-branch 命令包含各种回溯修改 revision history 的功能,经过尝试,获得心得若干:

  • 首先,git 的命令可扩展性很强,但对初学者来说,要记忆的命令太长,像看天书;
  • 其次,git 往往一个命令完成不了任务,需要多个命令配合,但文档对此语焉不详,初学者无所适从;
  • 最后,也是最难的,git 中概念太多,名字非常不直观,从传统源码管理的层次理解起来台阶太高。

为此,写了几个 bash function,封装 git 的上述功能。用法如下

  • git-rewrite-commits exclude_files_list:将文件从 reivision history 中删除,可指定要删除的目录;
  • git-prune-commits:上面的命令执行之后,可能出现空的 commit 对象,用这个命令可以清空这类对象;
  • git-rewrite-msg regex:regex 是可被 sed 接受的正则表达式,用该命令修改所有的 commit 注释;

如果直接使用 filter-branch 从 git 历史中删除文件,会将工作拷贝中的文件也删除。而如果只是想把清除 git 库中的敏感文件,用户可能希望保留工作拷贝中的这些文件。使用 git-rewrite-commits 可以起到保留要删除的文件的效果。

另外,由于 git 是分布式源码管理,用这种做法因此光删除一个库中的文件历史并不够。为了避免下游的库将删除后的敏感文件又 push 回来,应该对 git 库的所有副本执行相同的清除操作,这样才保险。

附:相关 bash 脚本,加入 .bashrc 中生效

function git-remove-refs()
{
  if [ -z $@ ] ; then
    echo "Usage: git-remove-refs refs_name"
    return
  fi
  git for-each-ref --format="%(refname)" refs/$1 | xargs -I Ref bash -c "echo removing git ref: Ref; git update-ref -d Ref"
}
 
function git-backup-files()
{
  FILES=`git ls-files $@`
  for File in $FILES
  do
    echo save backup for $File
  done
  GIT_BACKUP_TMP=`tempfile`.tar.gz
  tar czf $GIT_BACKUP_TMP $FILES
  echo backup file saved at $GIT_BACKUP_TMP
}
 
function git-restore-files()
{
  if [ -f $GIT_BACKUP_TMP ] ; then
    echo backup file $GIT_BACKUP_TMP restored
    tar xzf $GIT_BACKUP_TMP
    unset GIT_BACKUP_TMP
  fi
}
 
function git-rewrite-commits()
{
  if [ -z $@ ] ; then
    echo "Usage: git-rewrite-commits files_to_remove"
    return
  fi
  git-backup-files $@
  git filter-branch --index-filter "git ls-files -z $@ | git update-index --remove -z --stdin"
  git-remove-refs original
  git-restore-files
}
 
function git-prune-commits()
{
  if [ ! -z $@ ] ; then
    echo "Usage: git-prune-commits"
    return
  fi
  git filter-branch --prune-empty
  git-remove-refs original
}
 
function git-rewrite-msg()
{
  if [ -z $@ ] ; then
    echo "Usage: git-rewrite-msg regex_pattern"
    return
  fi
  git filter-branch --msg-filter "sed -e \"$1\""
  git-remove-refs original
}
分类: 乱七八糟 标签: ,

09春晚好看的节目

2009年2月2日 dipplum 没有评论

分类: 乱七八糟 标签:

装了个代码语法高亮插件

2009年2月1日 dipplum 没有评论
1
2
3
4
5
6
#include <stdio.h>
 
int main()
{
    printf("hello, world!\n");
}
分类: 乱七八糟 标签: ,

开张第一篇

2008年8月17日 dipplum 3 条评论

感谢wfans提供的如此价廉物美的空间, 感谢管理员CrazyLoong的热情服务.

这里不是第一个购买的空间, 我买的空间即多且滥到我都不好意思提. 这里自然也不会是最后一个, 其实我很专心, 我对待每个新空间都像对待最后一个, 可是往往…, 哎. 不说了, 这是大喜的日子.

每次申请新的空间, 开设新的网志, 总是要循例展望下美好的未来. 就和小时候开学前的晚上一样, 给自己定下许多目标, 梦想取得许多成果, 多到数不过来, 于是踌躇满志, 于是辗转失眠. 就好像今晚.

没办法, 我就好这口, 无论如何cliche, 还是得走走过场. 其实, 以前写网志感觉是写给别人看到, 好喜欢写Howto, 希望别人看到, 希望好多好多人看, 希望也成为牛逼的人. 写Howto是好事, 是为全人类做贡献, 但写Howto太耗时间和精力了, 永远只有少数有这样的魄力, 将自己的所有知识整理成文字. 而我还是习惯一步不停往前跑, 不习惯停下来总结, 因此Blog往往一荒就荒好几个月. 我想改变改变思路, 这回不强求用网志记录知识, 只求多记下点沿途点滴的心情, 以后有空回去翻翻, 也有趣的紧.

其实写的时候, 域名还在transfer中, 发表出来也没人看. 不知道什么时候会有第一个看客.

分类: 乱七八糟 标签:
This work by dipplum is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 China Mainland.