<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>dipplum.com &#187; 乱七八糟</title>
	<atom:link href="http://dipplum.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://dipplum.com</link>
	<description>Be  the change you wanna see in the world</description>
	<lastBuildDate>Sat, 12 Nov 2011 07:38:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Visual C++ 2009编译libmikmod</title>
		<link>http://dipplum.com/2009/11/10/visualc-compile-libmikmod/</link>
		<comments>http://dipplum.com/2009/11/10/visualc-compile-libmikmod/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 03:13:18 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[mikmod]]></category>
		<category><![CDATA[stratagus]]></category>
		<category><![CDATA[visualc]]></category>

		<guid isPermaLink="false">http://dipplum.com/2009/11/10/visual-c-2009%e7%bc%96%e8%af%91libmikmod/</guid>
		<description><![CDATA[1. 主页 http://mikmod.raphnet.net/ 2. 最新版本 3.2.0-beta2，2004年2月发布 &#160;&#160;&#160; 下载 http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.zip 3. 编译依赖 &#160;&#160;&#160; DirectX SDK中的头文件。最新的DirectX SDK 2009 Auguest可以从微软（http://is.gd/4Q3Mo）下载。或者只下载其中include目录和lib目录打包（http://is.gd/4Q416）。 4. 编译方法 &#160;&#160;&#160; 解压后，从Visual Studio 2008的命令行提示符下进入win32目录，首先设置INCLUDE变量，然后编译。如果编译静态链接库，可以参见下例（把directx的目录修改成自己的）： cd win32 set INCLUDE=..\..\directxsdk-0908\include;%INCLUDE% nmake -f makefile.static 5. Bug &#160;&#160;&#160; include\mikmod_internal.h文件中有bug，导致不能在Visual Studio 2008下编译，在该文件的include之后加入下面5行： #ifdef _mm_malloc #undef _mm_malloc #undef _mm_calloc #undef _mm_free #endif 6. 其他注意事项 &#160;&#160;&#160; 1. 编译Multithreaded DLL版的静态库 &#160;&#160;&#160; 编译生成的静态库，为了更好的与其他库交互，最好是编译生成Multithreaded DLL版本，也就是编译时加/MD参数。由于libmikmod默认的头文件不支持编译静态库的同时，链接到MSVCRT的Muiltithreaded DLL。所以要做相应修改。 [...]]]></description>
			<content:encoded><![CDATA[<p>1. 主页 <a href="http://mikmod.raphnet.net/">http://mikmod.raphnet.net/</a></p>
<p>2. 最新版本 3.2.0-beta2，2004年2月发布</p>
<p>&#160;&#160;&#160; 下载 <a href="http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.zip">http://mikmod.raphnet.net/files/libmikmod-3.2.0-beta2.zip</a></p>
<p>3. 编译依赖</p>
<p>&#160;&#160;&#160; DirectX SDK中的头文件。最新的DirectX SDK 2009 Auguest可以从微软（<a href="http://is.gd/4Q3Mo）">http://is.gd/4Q3Mo）</a>下载。或者只下载其中include目录和lib目录打包（<a href="http://is.gd/4Q416">http://is.gd/4Q416</a>）。</p>
<p>4. 编译方法</p>
<p>&#160;&#160;&#160; 解压后，从Visual Studio 2008的命令行提示符下进入win32目录，首先设置INCLUDE变量，然后编译。如果编译静态链接库，可以参见下例（把directx的目录修改成自己的）：</p>

<div class="wp_syntax"><div class="code"><pre class="batch" style="font-family:monospace;">cd win32
set INCLUDE=..\..\directxsdk-0908\include;%INCLUDE%
nmake -f makefile.static</pre></div></div>

</p>
<p><span id="more-425"></span></p>
<p>5. Bug</p>
<p>&#160;&#160;&#160; include\mikmod_internal.h文件中有bug，导致不能在Visual Studio 2008下编译，在该文件的include之后加入下面5行：</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#ifdef _mm_malloc</span>
<span style="color: #339933;">#undef _mm_malloc</span>
<span style="color: #339933;">#undef _mm_calloc</span>
<span style="color: #339933;">#undef _mm_free</span>
<span style="color: #339933;">#endif</span></pre></div></div>

<p>6. 其他注意事项</p>
<p>&#160;&#160;&#160; 1. 编译Multithreaded DLL版的静态库</p>
<p>&#160;&#160;&#160; 编译生成的静态库，为了更好的与其他库交互，最好是编译生成Multithreaded DLL版本，也就是编译时加/MD参数。由于libmikmod默认的头文件不支持编译静态库的同时，链接到MSVCRT的Muiltithreaded DLL。所以要做相应修改。</p>
<p>&#160;&#160;&#160; 2. 生成include\mikmod.h</p>
<p>&#160;&#160;&#160; 由于Windows系统没有configure过程，include目录下仅有一个mikmod.h.in，要把其中的版本号替换生成mikmod.h。 </p>
<p>&#160;&#160;&#160; 3. 静态库中缺少load_asy</p>
<p>&#160;&#160;&#160; 静态库中包含的目标文件好像不全，却load_asy，需要修改Makefile将其加进来。</p>
<p>7. 完整的patch</p>
<p>&#160;&#160;&#160; 下面是包含上述改动完整的patch。打上后把include\mikmod.in.h改名为include\mikmod.h即可。</p>

<div class="wp_syntax"><div class="code"><pre class="diff" style="font-family:monospace;">diff -Naur libmikmod-3.2.0-beta2\include\mikmod.h.in libmikmod-3.2.0-beta2-<span style="">2</span>\include\mikmod.h.in
<span style="color: #888822;">--- libmikmod-3.2.0-beta2\include\mikmod.h.in	Wed Feb 18 09:10:40 2004</span>
<span style="color: #888822;">+++ libmikmod-3.2.0-beta2-2\include\mikmod.h.in	Mon Apr 26 18:33:00 2004</span>
<span style="color: #440088;">@@ -44,7 +44,7 @@</span>
 #ifdef DLL_EXPORTS
 #define MIKMODAPI __declspec<span style="">&#40;</span>dllexport<span style="">&#41;</span>
 #else
<span style="color: #991111;">-#define MIKMODAPI __declspec<span style="">&#40;</span>dllimport<span style="">&#41;</span></span>
<span style="color: #00b000;">+#define MIKMODAPI</span>
 #endif
 #else
 #define MIKMODAPI
<span style="color: #440088;">@@ -54,9 +54,9 @@</span>
  *	========== Library version
  */
&nbsp;
<span style="color: #991111;">-#define LIBMIKMOD_VERSION_MAJOR @LIBMIKMOD_MAJOR_VERSION@L</span>
<span style="color: #991111;">-#define LIBMIKMOD_VERSION_MINOR @LIBMIKMOD_MINOR_VERSION@L</span>
<span style="color: #991111;">-#define LIBMIKMOD_REVISION      @LIBMIKMOD_MICRO_VERSION@L</span>
<span style="color: #00b000;">+#define LIBMIKMOD_VERSION_MAJOR 3L</span>
<span style="color: #00b000;">+#define LIBMIKMOD_VERSION_MINOR 2L</span>
<span style="color: #00b000;">+#define LIBMIKMOD_REVISION      0L</span>
&nbsp;
 #define LIBMIKMOD_VERSION \
 	<span style="">&#40;</span><span style="">&#40;</span>LIBMIKMOD_VERSION_MAJOR&amp;lt;&amp;lt;<span style="">16</span><span style="">&#41;</span>| \
<span style="color: #440088;">@@ -83,7 +83,7 @@</span>
 typedef char CHAR;
 #endif
&nbsp;
<span style="color: #991111;">-@DOES_NOT_HAVE_SIGNED@</span>
<span style="color: #00b000;">+</span>
&nbsp;
 #if defined<span style="">&#40;</span>__arch64__<span style="">&#41;</span> || defined<span style="">&#40;</span>__alpha<span style="">&#41;</span>
 /* <span style="">64</span> bit architectures */
diff -Naur libmikmod-3.2.0-beta2\include\mikmod_internals.h libmikmod-3.2.0-beta2-<span style="">2</span>\include\mikmod_internals.h
<span style="color: #888822;">--- libmikmod-3.2.0-beta2\include\mikmod_internals.h	Wed Feb 18 08:29:18 2004</span>
<span style="color: #888822;">+++ libmikmod-3.2.0-beta2-2\include\mikmod_internals.h	Tue Nov 10 10:47:10 2009</span>
<span style="color: #440088;">@@ -47,6 +47,12 @@</span>
 #pragma warning<span style="">&#40;</span>disable:<span style="">4761</span><span style="">&#41;</span>
 #endif
&nbsp;
<span style="color: #00b000;">+#ifdef _mm_malloc</span>
<span style="color: #00b000;">+#undef _mm_malloc</span>
<span style="color: #00b000;">+#undef _mm_calloc</span>
<span style="color: #00b000;">+#undef _mm_free</span>
<span style="color: #00b000;">+#endif</span>
<span style="color: #00b000;">+</span>
 /*========== More type definitions */
&nbsp;
 /* SLONGLONG: 64bit, signed */
diff -Naur libmikmod-3.2.0-beta2\win32\Makefile.static libmikmod-3.2.0-beta2-<span style="">2</span>\win32\Makefile.static
<span style="color: #888822;">--- libmikmod-3.2.0-beta2\win32\Makefile.static	Wed Jan 21 12:29:36 2004</span>
<span style="color: #888822;">+++ libmikmod-3.2.0-beta2-2\win32\Makefile.static	Mon Nov 09 15:28:39 2009</span>
<span style="color: #440088;">@@ -11,7 +11,7 @@</span>
 # Your compiler here
 CC=cl
 # Compiler flags
<span style="color: #991111;">-CFLAGS=/nologo /O2 /MTd /Zi /Fm /c /DWIN32 /DDRV_DS /DDRV_WIN /DHAVE_FCNTL_H /DHAVE_MALLOC_H /DHAVE_LIMITS_H</span>
<span style="color: #00b000;">+CFLAGS=/nologo /O2 /MD /Zi /Fm /c /DWIN32 /DDRV_DS /DDRV_WIN /DHAVE_FCNTL_H /DHAVE_MALLOC_H /DHAVE_LIMITS_H</span>
 COMPILE=$<span style="">&#40;</span>CC<span style="">&#41;</span> $<span style="">&#40;</span>CFLAGS<span style="">&#41;</span> /I..\include /I.. /I..\win32
&nbsp;
 .SUFFIXES:
<span style="color: #440088;">@@ -29,6 +29,7 @@</span>
     load_669.o load_amf.o load_dsm.o load_far.o load_gdm.o load_it.o  \
     load_imf.o load_m15.o load_med.o load_mod.o load_mtm.o load_okt.o \
     load_s3m.o load_stm.o load_stx.o load_ult.o load_uni.o load_xm.o \
<span style="color: #00b000;">+    load_asy.o \</span>
     mmalloc.o mmerror.o mmio.o \
     mdriver.o mdreg.o mloader.o mlreg.o mlutil.o mplayer.o munitrk.o mwav.o \
     npertab.o sloader.o virtch.o virtch2.o virtch_common.o
<span style="color: #440088;">@@ -106,6 +107,9 @@</span>
 load_s3m.o:     ..\loaders\load_s3m.c \
 	                ..\win32\mikmod_build.h ..\include\mikmod_internals.h
 	$<span style="">&#40;</span>COMPILE<span style="">&#41;</span> /Fo$@ ..\loaders\load_s3m.c
<span style="color: #00b000;">+load_asy.o:     ..\loaders\load_asy.c \</span>
<span style="color: #00b000;">+	                ..\win32\mikmod_build.h ..\include\mikmod_internals.h</span>
<span style="color: #00b000;">+	$<span style="">&#40;</span>COMPILE<span style="">&#41;</span> /Fo$@ ..\loaders\load_asy.c</span>
 load_stm.o:     ..\loaders\load_stm.c \
 	                ..\win32\mikmod_build.h ..\include\mikmod_internals.h
 	$<span style="">&#40;</span>COMPILE<span style="">&#41;</span> /Fo$@ ..\loaders\load_stm.c
diff -Naur libmikmod-3.2.0-beta2\win32\mikmod_build.h libmikmod-3.2.0-beta2-<span style="">2</span>\win32\mikmod_build.h
<span style="color: #888822;">--- libmikmod-3.2.0-beta2\win32\mikmod_build.h	Thu Feb 19 09:15:22 2004</span>
<span style="color: #888822;">+++ libmikmod-3.2.0-beta2-2\win32\mikmod_build.h	Mon Nov 09 15:19:11 2009</span>
<span style="color: #440088;">@@ -44,7 +44,7 @@</span>
 #ifdef DLL_EXPORTS
 #define MIKMODAPI __declspec<span style="">&#40;</span>dllexport<span style="">&#41;</span>
 #else
<span style="color: #991111;">-#define MIKMODAPI __declspec<span style="">&#40;</span>dllimport<span style="">&#41;</span></span>
<span style="color: #00b000;">+#define MIKMODAPI</span>
 #endif
 #else
 #define MIKMODAPI</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2009/11/10/visualc-compile-libmikmod/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>学习了下《有一种战犯叫参谋》</title>
		<link>http://dipplum.com/2009/07/31/learn-anti-jap-war/</link>
		<comments>http://dipplum.com/2009/07/31/learn-anti-jap-war/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 04:16:43 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[history]]></category>

		<guid isPermaLink="false">http://dipplum.com/2009/07/31/%e5%ad%a6%e4%b9%a0%e4%ba%86%e4%b8%8b%e3%80%8a%e6%9c%89%e4%b8%80%e7%a7%8d%e6%88%98%e7%8a%af%e5%8f%ab%e5%8f%82%e8%b0%8b%e3%80%8b/</guid>
		<description><![CDATA[昨天说看到黄章晋的博客上说我们 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。继续不寒而栗。]]></description>
			<content:encoded><![CDATA[<p>昨天说看到黄章晋的博客上说我们 regime 对于31-45年这段历史的描述是有“框架性描述”的错误，把我给惊到了，还以为恨了这么多年日本人恨错了。于是找来这本他推荐的《有一种战犯叫参谋》，囫囵吞枣的看了，还是非常有收获的。</p>
<p>首先通报我的学习结论：确实有“框架性”错误，但不重要。而且，那时的日本鬼子比我想象中的还可怕。</p>
<p>黄章晋所谓的“框架性描述”错误是：1937年爆发的中日全面战争，并非一场有预谋的要灭亡或全面吞并中国的侵略战争，即使到1945年，日本都没有这样的想法。这个结论的前面半句从《参》中是可以得到的，后半句我稍微有点吃不准。</p>
<p>下面摘取下《参》中发现的有趣的现象讨论：</p>
<ul>
<li>不宣战 </li>
</ul>
<p>从1937年“卢沟桥事变”中日战争开始，到1941年偷袭珍珠港太平洋战争爆发，中日居然都没有宣战。国民政府据说一直到1942年才对日宣战。日本可说是“不宣而战”，中国则是“战而不宣”。奇怪吧？</p>
<p>日本不宣战，是因为最重要的战略资源，石油、橡胶都捏在美国人手里，一宣战美国肯定中立；中国不宣战，也是巴望着美国和德国的武器装备和援助，怕宣战后怕美国中立，德国支持日本。</p>
<p>宣战是个现代文明中很有趣的概念，二战之后，仗还在打，但几乎没有大国之间的宣战了。不宣战可以规避很多国内法和国际法中的重重限制。</p>
<ul>
<li>战争理由 </li>
</ul>
<p>日本莫名其妙发动全面对华战争，到现在根本没有人知道为什么，奇怪吧？</p>
<p>其实九一八事变发生的时候，策划者石原莞尔的战略目的还是很明确的，扶植伪政权政权，建设铁路，拓展日本的战略纵深，开采煤矿等战略资源。</p>
<p>而到1937年卢沟桥事变之后，日本皇军策划了一系列事变为借口，占领了大多数城市，并扶植了另外一个伪政权。但战略目的何在？</p>
<p>把中国全境变成日本的领土是不现实的。前面讲过日本不宣战，宣战时要公布战争理由，不宣战就没有，没有理由不可能堂而皇之的侵占他国领土。开玩笑，日本想占，列强不想占？以为其他资本主义强国都是吃屎的啊。</p>
<p>所以，日本人只能在沦陷区扶植个伪政权，伪装成两个中国政权内斗，然后驻个军、占几个矿山、抢几个文物、顺便屠杀些无辜的中国百姓。日本只要不名目张胆宣布沦陷区是日本领土，并开始移民，列强也只能装模作样的谴责并呼吁日本停止武装冲突。</p>
<ul>
<li>不投降 </li>
</ul>
<p>因为这仗日本也打的莫名其妙，并且在开战之后不可避免的被拖入人民战争的汪洋大海。所以后期就一直希望尽快结束这场战争。</p>
<p>单方面撤军是不可能的，打了这么久，战略目的是什么谁都不知道，要达成也就无从谈起，又什么好处都没捞着，要撤军日本国内舆论都不答应（奇怪吧，据说南京攻陷后，日本“举国”欢腾）。所以，无论如何，也要逼蒋介石快点投降。投降了就有谈判，谈判就可以讨价还价，割地赔款之类，好处能要多少要多少，大不了拉上列强来一起分。</p>
<p>蒋介石应该就是看到了这一点，死不投降。因为蒋手上有一张王牌，就是国际支持。有了国际支持，只要他不投降，日本也不可能怎么样。</p>
<ul>
<li>石油 </li>
</ul>
<p>在此之前几乎不理解为什么中东那块这么闹腾。现在倒是明白了，现代战争中的各种“大杀器”，飞机坦克舰艇炸弹啥的，都需要石油，我真笨。日本又是没有石油资源的国家。那时候还没有发现大庆油田，和东海油田（钓鱼岛啊钓鱼岛），否则历史怎么发展就很难说了。</p>
<p>据说当初日本年消耗石油490万吨，90%靠进口，主要是美国。那时印尼有块亚洲最大的油田年产470万吨，实际控制者也是英美。日本有胆和美国决裂，打大东亚圣战，也是基于自己能控制这块油田。实际上，从1941年12月8日偷袭珍珠港开始，日本花了两个月的时间，在1942年2月的确控制了印尼的这块油田。</p>
<ul>
<li>军国主义 </li>
</ul>
<p>前面说我认为“框架性描述”错误不重要，指的是这不影响很多大家公认的正义和事实。但准确、不夸大的描述历史是绝对必要的。</p>
<p>从《参》中看出，日本军国主义，还是很可怕的。</p>
<p>首先，和德国意大利的独裁政府不同，日本军国主义时期并不独裁，从31到45年期间，换了怕有十个首相，还有一个反战的首相被暗杀。就算是后来东条总揽几乎所以内阁职务，打了败仗照样下台。支持这样一个国家，走过十五年的动力到底是什么？我一想就不寒而栗。</p>
<p>其次，参谋，也就是《参》文一直批判的、左右日本军政几十年的这样一个存在，简直是专门培养的战争机器。他们中的大部分从来没有进入社会，从小就在军人家庭长大，然从专门的军队小学开始一直上到士官学校（这个传统现在的自卫队还有，汗）。从来没有打过仗，读了十年书之后，就成了参谋，指挥战争。还是不寒而栗。</p>
<p>最后，如果说政府官员，军队指挥员还只能代表一小部分人的话，最不可思议的就是日本士兵了。二战中日本士兵共阵亡近250万。那时候日本总人口7000万。估计男丁3500万，20-30之间青年最多1000万，有多少人当过兵？日本投降时还有多少士兵？至少苏联就俘虏了60万关东军一直没有归还日本。日本投降之后，很多打散的日军继续打游击，最后正式投降的一个日本军官竟然是撑到了1974。继续不寒而栗。</p>
]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2009/07/31/learn-anti-jap-war/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>git remove file from revision history</title>
		<link>http://dipplum.com/2009/03/18/git-remove-from-history/</link>
		<comments>http://dipplum.com/2009/03/18/git-remove-from-history/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 20:30:40 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[scm]]></category>

		<guid isPermaLink="false">http://dipplum.com/2009/03/18/git-remove-from-history/</guid>
		<description><![CDATA[最近学习 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 可以起到保留要删除的文件的效果。 另外，由于 [...]]]></description>
			<content:encoded><![CDATA[<p>最近学习 git，真是非常强大，非常不好用的软件。</p>
<p>一个常见的需求：有一个文件，包含敏感信息，不小心加进git库里面去了。希望从源码库的所有历史记录中删除该文件的所有版本。</p>
<p>其他的源码管理系统也会有类似的功能。如果是 CVS，就到源码库目录下直接删除 RCS 文件。如果是 Subversion，则是用 svnadmin dump 之后，用 import filter 再倒入。</p>
<p>git-filter-branch 命令包含各种回溯修改 revision history 的功能，经过尝试，获得心得若干：</p>
<ul>
<li>首先，git 的命令可扩展性很强，但对初学者来说，要记忆的命令太长，像看天书； </li>
<li>其次，git 往往一个命令完成不了任务，需要多个命令配合，但文档对此语焉不详，初学者无所适从； </li>
<li>最后，也是最难的，git 中概念太多，名字非常不直观，从传统源码管理的层次理解起来台阶太高。 </li>
</ul>
<p>为此，写了几个 bash function，封装 git 的上述功能。用法如下</p>
<ul>
<li>git-rewrite-commits exclude_files_list：将文件从 reivision history 中删除，可指定要删除的目录；</li>
<li>git-prune-commits：上面的命令执行之后，可能出现空的 commit 对象，用这个命令可以清空这类对象；</li>
<li>git-rewrite-msg regex：regex 是可被 sed 接受的正则表达式，用该命令修改所有的 commit 注释；</li>
</ul>
<p>如果直接使用 filter-branch 从 git 历史中删除文件，会将工作拷贝中的文件也删除。而如果只是想把清除 git 库中的敏感文件，用户可能希望保留工作拷贝中的这些文件。使用 git-rewrite-commits 可以起到保留要删除的文件的效果。</p>
<p>另外，由于 git 是分布式源码管理，用这种做法因此光删除一个库中的文件历史并不够。为了避免下游的库将删除后的敏感文件又 push 回来，应该对 git 库的所有副本执行相同的清除操作，这样才保险。</p>
<p>附：相关 bash 脚本，加入 .bashrc 中生效</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> git-remove-refs<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> $<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: git-remove-refs refs_name&quot;</span>
    <span style="color: #7a0874; font-weight: bold;">return</span>
  <span style="color: #000000; font-weight: bold;">fi</span>
  <span style="color: #c20cb9; font-weight: bold;">git</span> for-each-ref <span style="color: #660033;">--format</span>=<span style="color: #ff0000;">&quot;%(refname)&quot;</span> refs<span style="color: #000000; font-weight: bold;">/</span><span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">xargs</span> <span style="color: #660033;">-I</span> Ref <span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #660033;">-c</span> <span style="color: #ff0000;">&quot;echo removing git ref: Ref; git update-ref -d Ref&quot;</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> git-backup-files<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #007800;">FILES</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">git</span> ls-files $<span style="color: #000000; font-weight: bold;">@`</span>
  <span style="color: #000000; font-weight: bold;">for</span> File <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$FILES</span>
  <span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> save backup <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #007800;">$File</span>
  <span style="color: #000000; font-weight: bold;">done</span>
  <span style="color: #007800;">GIT_BACKUP_TMP</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">tempfile</span><span style="color: #000000; font-weight: bold;">`</span>.tar.gz
  <span style="color: #c20cb9; font-weight: bold;">tar</span> czf <span style="color: #007800;">$GIT_BACKUP_TMP</span> <span style="color: #007800;">$FILES</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> backup <span style="color: #c20cb9; font-weight: bold;">file</span> saved at <span style="color: #007800;">$GIT_BACKUP_TMP</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> git-restore-files<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$GIT_BACKUP_TMP</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> backup <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #007800;">$GIT_BACKUP_TMP</span> restored
    <span style="color: #c20cb9; font-weight: bold;">tar</span> xzf <span style="color: #007800;">$GIT_BACKUP_TMP</span>
    <span style="color: #7a0874; font-weight: bold;">unset</span> GIT_BACKUP_TMP
  <span style="color: #000000; font-weight: bold;">fi</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> git-rewrite-commits<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> $<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: git-rewrite-commits files_to_remove&quot;</span>
    <span style="color: #7a0874; font-weight: bold;">return</span>
  <span style="color: #000000; font-weight: bold;">fi</span>
  git-backup-files $<span style="color: #000000; font-weight: bold;">@</span>
  <span style="color: #c20cb9; font-weight: bold;">git</span> filter-branch <span style="color: #660033;">--index-filter</span> <span style="color: #ff0000;">&quot;git ls-files -z $@ | git update-index --remove -z --stdin&quot;</span>
  git-remove-refs original
  git-restore-files
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> git-prune-commits<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #000000; font-weight: bold;">!</span> <span style="color: #660033;">-z</span> $<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: git-prune-commits&quot;</span>
    <span style="color: #7a0874; font-weight: bold;">return</span>
  <span style="color: #000000; font-weight: bold;">fi</span>
  <span style="color: #c20cb9; font-weight: bold;">git</span> filter-branch <span style="color: #660033;">--prune-empty</span>
  git-remove-refs original
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> git-rewrite-msg<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-z</span> $<span style="color: #000000; font-weight: bold;">@</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> ; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Usage: git-rewrite-msg regex_pattern&quot;</span>
    <span style="color: #7a0874; font-weight: bold;">return</span>
  <span style="color: #000000; font-weight: bold;">fi</span>
  <span style="color: #c20cb9; font-weight: bold;">git</span> filter-branch <span style="color: #660033;">--msg-filter</span> <span style="color: #ff0000;">&quot;sed -e <span style="color: #000099; font-weight: bold;">\&quot;</span>$1<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>
  git-remove-refs original
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2009/03/18/git-remove-from-history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>09春晚好看的节目</title>
		<link>http://dipplum.com/2009/02/02/09-spring-festival-gala/</link>
		<comments>http://dipplum.com/2009/02/02/09-spring-festival-gala/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 19:39:21 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://dipplum.com/?p=124</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/p/99E28CDBBF1CA86B" /><embed src="http://www.youtube.com/p/99E28CDBBF1CA86B" type="application/x-shockwave-flash" width="480" height="291"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2009/02/02/09-spring-festival-gala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>装了个代码语法高亮插件</title>
		<link>http://dipplum.com/2009/02/01/wp-syntax-ftest/</link>
		<comments>http://dipplum.com/2009/02/01/wp-syntax-ftest/#comments</comments>
		<pubDate>Sun, 01 Feb 2009 11:59:00 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dipplum.com/?p=110</guid>
		<description><![CDATA[1 2 3 4 5 6 #include &#60;stdio.h&#62; &#160; int main&#40;&#41; &#123; printf&#40;&#34;hello, world!\n&#34;&#41;; &#125;]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;hello, world!<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2009/02/01/wp-syntax-ftest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>开张第一篇</title>
		<link>http://dipplum.com/2008/08/17/hello-world/</link>
		<comments>http://dipplum.com/2008/08/17/hello-world/#comments</comments>
		<pubDate>Sun, 17 Aug 2008 17:55:17 +0000</pubDate>
		<dc:creator>li</dc:creator>
				<category><![CDATA[乱七八糟]]></category>

		<guid isPermaLink="false">http://dipplum.com/?p=1</guid>
		<description><![CDATA[感谢wfans提供的如此价廉物美的空间, 感谢管理员CrazyLoong的热情服务. 这里不是第一个购买的空间, 我买的空间即多且滥到我都不好意思提. 这里自然也不会是最后一个, 其实我很专心, 我对待每个新空间都像对待最后一个, 可是往往&#8230;, 哎. 不说了, 这是大喜的日子. 每次申请新的空间, 开设新的网志, 总是要循例展望下美好的未来. 就和小时候开学前的晚上一样, 给自己定下许多目标, 梦想取得许多成果, 多到数不过来, 于是踌躇满志, 于是辗转失眠. 就好像今晚. 没办法, 我就好这口, 无论如何cliche, 还是得走走过场. 其实, 以前写网志感觉是写给别人看到, 好喜欢写Howto, 希望别人看到, 希望好多好多人看, 希望也成为牛逼的人. 写Howto是好事, 是为全人类做贡献, 但写Howto太耗时间和精力了, 永远只有少数有这样的魄力, 将自己的所有知识整理成文字. 而我还是习惯一步不停往前跑, 不习惯停下来总结, 因此Blog往往一荒就荒好几个月. 我想改变改变思路, 这回不强求用网志记录知识, 只求多记下点沿途点滴的心情, 以后有空回去翻翻, 也有趣的紧. 其实写的时候, 域名还在transfer中, 发表出来也没人看. 不知道什么时候会有第一个看客.]]></description>
			<content:encoded><![CDATA[<p>感谢<a href="http://wfans.org/forums/">wfans</a>提供的如此<a href="http://wfans.org/forums/thread-70-3-1.html">价廉物美的空间</a>, 感谢管理员<a href="http://goto8848.net/">CrazyLoong</a>的热情服务.</p>
<p><a href="http://dipplum.com">这里</a>不是第一个购买的空间, 我买的空间即多且滥到我都不好意思提. 这里自然也不会是最后一个, 其实我很专心, 我对待每个新空间都像对待最后一个, 可是往往&#8230;, 哎. 不说了, 这是大喜的日子.</p>
<p>每次申请新的空间, 开设新的网志, 总是要循例展望下美好的未来. 就和小时候开学前的晚上一样, 给自己定下许多目标, 梦想取得许多成果, 多到数不过来, 于是踌躇满志, 于是辗转失眠. 就好像今晚.</p>
<p>没办法, 我就好这口, 无论如何cliche, 还是得走走过场. 其实, 以前写网志感觉是写给别人看到, 好喜欢写Howto, 希望别人看到, 希望好多好多人看, 希望也成为牛逼的人. 写Howto是好事, 是为全人类做贡献, 但写Howto太耗时间和精力了, 永远只有少数有这样的魄力, 将自己的所有知识整理成文字. 而我还是习惯一步不停往前跑, 不习惯停下来总结, 因此Blog往往一荒就荒好几个月. 我想改变改变思路, 这回不强求用网志记录知识, 只求<strong>多记下点沿途点滴的心情</strong>, 以后有空回去翻翻, 也有趣的紧.</p>
<p>其实写的时候, <a href="http://dipplum.com">域名</a>还在transfer中, 发表出来也没人看. 不知道什么时候会有第一个看客.</p>
]]></content:encoded>
			<wfw:commentRss>http://dipplum.com/2008/08/17/hello-world/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

