标 题: 散乱,街景,学生游行和其他[20P]
发信站: 水木社区 (Mon Nov 29 05:33:26 2010), 站内
开始重新对50MM有感觉了。
--
※ 来源:・水木社区 http://newsmth.net・[FROM: 129.11.113.*]
“我从来没有作过系统努力去改善人类的命运……我所做的仅仅是:在长时期内,我对社会上那些我认为是非常恶劣的和不幸的情况公开发表了意见,对它们表示沉默就会使我觉得是在犯同谋罪。”
有的人走了,他还活着,并且以一种更为深远和让人刻骨铭心的方式,永远活着。他们没有什么权力,究其一生,也不追求和留恋那种旨在凌驾于他人之上,通过命令他人而获得快感、安慰与私利的权力。在权力面前,他们通常是无能为力的弱者,但并不因此放弃努力的权利。的确,除了道德的正直,对良知的坚持和对社会的关怀,以及恪尽职守的工作,他们看起来再也没有什么力量能够影响他人了。
但就是这种微弱的、坚韧不倒的努力,维系着世道中的正义和真理,让文明的血脉和人道的理想代代相传。而且,他们的形象和英名,总是会远远超拔于那些易碎与速朽的权势,超拔于那种把安逸享乐当作生活目的的“猪栏的理想”,而在星空闪耀,在大地深植,在人心永驻——虽然,这种超拔并非他们的追求。
蔡定剑先生,英年早逝的学者、教师,宪政民主的传播者、实践者,就是一位依靠自己的思想、著作、行为和人格永远活着的人。他的一生,是真正践行了自己所信奉的价值观、为了自己的最高愿望而活着的一生,是为了一个民族的长治久安而殚精竭虑地求索她的制度基础和文化基础的一生,是用充满人道主义精神的温和、宽容、理性、韧性与社会不断互动、推动社会进步的一生。所有这一切,不仅使他成为中国迈向民主宪政道路上的杰出代表,而且成为当代学人和教师的伦理学楷模。
没有谁在良心的天空中拥有管辖权,不管怎样的教条,都难以真的浸润人心。而蔡定剑先生不经意中就深深感染和打动了我们,如同清水芙蓉,毫无雕琢,唯余赤诚。正因为如此,当他离开的时候,无数相识的朋友和不相识的读者听众,蓦然发现,在他们最为看重的精神地带,出现了一片空白,而且很长时间都难以填补。这是一种怎样的损失,又是一种何等的痛惜。
今天上午,蔡定剑先生的遗体告别仪式在北京八宝山革命公墓举行。这是告别,也是拥抱,拥抱他的思想人格,拥抱他留下的精神财富。
蔡定剑先生是一位有着强烈的社会责任感和崇高理想的人,这使他的人生一直有着明确的方向感。在中国的官员中,退休从教者并不少,但弃官从教者则少之又少。退休从教,对官员来说是一件光荣而体面的事情,他们也大都继续拥有院校之长一类的头衔,相当于“官本位”的一次夕阳化平移。而蔡定剑先生放弃全国人大副局长之职到中国政法大学任教时,是纯粹去做一个教授,并主持宪政研究所的研究,时年不过48岁。如果从上世纪90年代末他就想回到学校,后来先联系了北京大学算起,他决心弃官从教、从学的时间就更早。没有一种超越性的价值追求,这很难做到。
马克思在《青年在选择职业时的考虑》开篇写道,“自然本身给动物规定了它应该遵循的活动范围,动物也就安分地在这个范围内运动,不试图越出这个范围,甚至不考虑有其他什么范围存在。神也给人指定了共同的目标——使人类和他自己趋于高尚,但是,神要人自己去寻找可以达到这个目标的手段。”在马克思看来,选择职业时“应该遵循的主要指针是人类的幸福和我们自身的完美”,“人们只有为同时代人的完美、为他们的幸福而工作,才能使自己也达到完美”。蔡定剑的选择,就是青年马克思式的选择。对国家、社会、民族的责任感,对民主、宪政、法治的使命感,使得他决意告别流俗,不再循规蹈矩,而是回到中国知识分子的道统之中,以天下为怀,任重而道远,“为天地立心,为生民立命,为往圣继绝学,为万世开太平”。这样的生命历程,在蔡定剑看来,才是一个更为真实、也更值得珍视的世界,即使呕心沥血,焚膏继晷,辗转反复,负重前行,但在内心深处,他却是快乐的,骄傲的,幸福的。恰如爱因斯坦所言:“照亮我的道路,并不断给我新的勇气去愉快地正视生活的理想,是善、是美、是真。要是没有志同道合者之间的亲切感情,要是不全神贯注于客观世界,那么在我看来,生活是空虚的。”这也是蔡定剑的道路和生活。
蔡定剑先生是严肃而诚笃的学者、教师,也是不满足于书斋,在大地上探索真理、切实行动的人。从某种意义上说,他的告别仕途,是为了更好地参与政治生活。政治是“众人之事”,因此需要众人参与。爱因斯坦说,政治问题“在较广泛的意义上来说就是人类事务”,他因此反对那种“科学家对政治应当默不做声”的看法。在给朋友的信中,爱因斯坦问,“要是乔尔达诺・布鲁诺、斯宾诺莎、伏尔泰和洪堡也都是这样想,这样行事,那么我们的处境会怎样呢?”在另一封信中,他说,“我从来没有作过系统努力去改善人类的命运……我所做的仅仅是:在长时期内,我对社会上那些我认为是非常恶劣的和不幸的情况公开发表了意见,对它们表示沉默就会使我觉得是在犯同谋罪。”
和爱因斯坦的政治参与方式相比,蔡定剑的选择,是更为积极、主动和有创造性地参与中国的民主法治进程。他直面矛盾,承受煎熬,但并不消极,他思于此,哭于此,歌于此,呼于此,也有为于此。他长期在全国人大工作,既看到了民主法治在中国的蹉跎与进步,更看到了人民心中孕育的民主要求,并视之为中国民主化的宝贵资源。他曾经感慨,“是什么力量把百岁老人在寒冷泥泞的冬天从温暖的家中吸引到投票站去?是什么力量让一位全身瘫痪的病人叫人抬到选举大会会场来竞选村官?又是什么动力驱使这一群没有多少文化的农民怀揣着法律文本四处奔走,苦苦寻找着民主权利?……是因为他们对自己利益的关注,是对自己命运的关注。”民主、法治、人权、宪政,这是蔡定剑先生的信仰,同时,他也在现实中看到了希望。当他的心灵和人民的心灵同频共振后,当他的工作和人民的意愿深切地融为一体后,公民蔡定剑的大脑和脚步就再也没有停止过,直到他安息的那一刻。
从普及法治知识到参与地方政府改革的制度设计,从呼吁预算公开、以“限钱”促进“限权”到推动地方党代表直选和全委会改革,从为城市小摊贩鸣不平到反对就业歧视,蔡定剑先生无时无刻不在实践他所提出的“人人都是改革者”、人人都可以为民主法治建设出一分力的理念,并由此成为公民权利的坚定捍卫者和社会改革的建设性推动者。他是当之无愧的“中国公民”。
蔡定剑先生是思想者,也是教书育人的传播者。距今70年前,蔡元培先生故去后,他的学生蒋梦麟在《蔡先生不朽》一文中总结了蔡先生留下的四大不朽精神,即学术自由之精神、宽宏大度之精神、安贫乐道之精神、科学求真之精神。在作为教师的蔡定剑身上,这些不朽的精神也都熠熠可见,光照万千学子。他是在传道授业,也是在传播一种以民主为核心的生活方式。如同爱因斯坦在悼念居里夫人时所说的,“第一流人物对于时代和历史进程的意义,在其道德品质方面,也许比单纯的才智成就方面还要大。”对这一点,举凡受教于蔡定剑先生的学生,无不感同身受。
今天,2010年11月26日,我们和蔡定剑先生那平静如洗的面容做一个永远的告别。他如同时代的尺子和镜子,让作为生者的我们经受了一次难以释怀的洗礼。这个高尚的灵魂离我们远去了,但他那把宪政民主作为毕生使命、虽九死其犹未悔的声音,必将激励我们更好地活着,让生命活出更高的意义和价值。有这样的公民,是中国的骄傲;必有一日,也许就在不久的将来,中国的社会发展和民主法治的进步,定会让蔡先生的英灵感到欣慰和光荣。
“如果我们选择了最能为人类福利而劳动的职业,那么,重担就不能把我们压倒,因为这是为大家而献身;那时我们所感到的就不是可怜的、有限的、自私的乐趣,我们的幸福将属于千百万人,我们的事业将默默地、但是永恒发挥作用地存在下去,而面对我们的骨灰,高尚的人们将洒下热泪。”
这个主动承载了社会责任和历史责任的生命,必将被历史铭记。
蔡定剑先生不朽。
These are environment variables which effect cmake behaviour.
Several people have already figured out the details on their own, but I have gotten requests to do a more comprehensive tutorial on how the boot and recovery images are structured, and how you can edit them.
Background
Your phone has several devices which hold different parts of the filesystem:
#cat /proc/mtd dev: size erasesize name mtd0: 00040000 00020000 "misc" mtd1: 00500000 00020000 "recovery" mtd2: 00280000 00020000 "boot" mtd3: 04380000 00020000 "system" mtd4: 04380000 00020000 "cache" mtd5: 04ac0000 00020000 "userdata"
In this tutorial, we will deal with "recovery" and "boot". The "boot" device holds the files that are automatically loaded onto the root of your filesystem every time you boot (details below).
"system" holds everything that gets mounted in your system/ directory, and userdata/ is everything that shows up in data/ (this is all the apps you've installed, your preferences, etc).
The recovery and boot partitions are at /dev/mtd/mtd1 and /dev/mtd/mtd2, and before you do anything else you should back these up (note: this may not be the best way of doing this because it may not deal properly with bad blocks etc, but it's all we've got until somebody comes up with a better method, and besides you will probably be restoring from update.zip anyway):
# cat /dev/mtd/mtd1 > /sdcard/mtd1.img # cat /dev/mtd/mtd2 > /sdcard/mtd2.img
The other thing you should do is put your favorite update.zip file into the root directory of your sd card so that if you screw up your boot partition you can boot into recovery mode and re-apply the update. You probably want one of the pre-rooted recovery images found elsewhere on the forums.
There is also another important file you should know about. In /system/recovery.img there is a full copy of everything that is loaded on mtd1. This file is automatically flashed onto mtd1 every time you shut down. That means two things: 1. Any changes you make directly to /dev/mtd/mtd1 get blown away on reboot and 2. If you want to change /dev/mtd/mtd1 you're probably better off just sticking the image in /system/recovery.img and rebooting. When creating your own custom update.zip files (especially when adapting the stock images), you can get tripped up if you forget to replace /system/recovery.img and it ends up overwriting /dev/mtd/mtd1 unbeknownst to you. Watch out.
Structure of boot and recovery images
The boot and recovery images are not proper filesystems. Instead, they are a custom android format consisting of a 2k header, followed by a gzipped kernel, followed by a ramdisk, followed by a second stage loader (optional, we have not seen these in the wild yet). This structure is outlined in mkbootimg.h:
+-----------------+ | boot header | 1 page +-----------------+ | kernel | n pages +-----------------+ | ramdisk | m pages +-----------------+ | second stage | o pages +-----------------+ n = (kernel_size + page_size - 1) / page_size m = (ramdisk_size + page_size - 1) / page_size o = (second_size + page_size - 1) / page_size 0. all entities are page_size aligned in flash 1. kernel and ramdisk are required (size != 0) 2. second is optional (second_size == 0 -> no second)
A ramdisk is basically a small filesystem containing the core files needed to initialize the system. It includes the critical init process, as well as init.rc, which is where you can set many system-wide properties. If you really want to know more about it, here is the documentation. Here's a list of files on a typical ramdisk:
./init.trout.rc ./default.prop ./proc ./dev ./init.rc ./init ./sys ./init.goldfish.rc ./sbin ./sbin/adbd ./system ./data
The recovery image typically has a few extra files, which constitute the recovery binary and supporting files (the application that gets run if you hold down home+power when rebooting). These files are:
./res ./res/images ./res/images/progress_bar_empty_left_round.bmp ./res/images/icon_firmware_install.bmp ./res/images/indeterminate3.bmp ./res/images/progress_bar_fill.bmp ./res/images/progress_bar_left_round.bmp ./res/images/icon_error.bmp ./res/images/indeterminate1.bmp ./res/images/progress_bar_empty_right_round.bmp ./res/images/icon_firmware_error.bmp ./res/images/progress_bar_right_round.bmp ./res/images/indeterminate4.bmp ./res/images/indeterminate5.bmp ./res/images/indeterminate6.bmp ./res/images/progress_bar_empty.bmp ./res/images/indeterminate2.bmp ./res/images/icon_unpacking.bmp ./res/images/icon_installing.bmp ./sbin/recovery
Unpacking, Editing, and Re-Packing the images
Note: below I give you the details for unpacking and repacking manually, but I have attached two perl scripts that do most of this for you
If you are good with a hex editor, you can open up any of these images and strip off the first 2k of data. Then, look for a bunch of zeroes followed by the hex 1F 8B (which is the magic number of a gzip file). Copy everything from the first line of the file, through the zeroes, and stopping at the 1F 8B. That is the kernel. Everything from the 1F 8B through the end is the ramdisk. You could save each of these files separately. In order to see the contents of the ramdisk, you need to un-gzip it and then un-cpio it. You could use a command like this (ideally after creating a new directory and cd'ing into it):
gunzip -c ../your-ramdisk-file | cpio -i
That will place all of the files from the ramdisk in your working directory. You can now edit them.
In order to re-create the ramdisk, you need to re-cpio them and re-gzip those files, with a command like the following (remember, cpio will include everything in the current working directory, so you probably want to remove any other cruft you might have in there):
find . | cpio -o -H newc | gzip > ../newramdisk.cpio.gz
The final step is to combine the kernel and your new ramdisk into the full image, using the mkbootimgprogram (which you should download and compile from the git repository):
mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel your-kernel-file --ramdisk newramdisk.cpio.gz -o mynewimage.img
Now, there's a lot of hassle in pulling apart files in hex editors and remembering all of these commands, so I wrote unpack and repack perl scripts for you (attached). Hooray.
Flashing your new image back onto the phone
You will probably only ever be flashing boot images directly to the phone, given the fact that /system/recovery.img automatically flashes the recovery device for you (as noted above). If you have created a new recovery image, just stick it in /system/recovery.img and reboot. If you are flashing a boot image, stick it on your phone via adb (a tool included in the Android SDK):
adb push ./mynewimage.img /sdcard
Then, open a shell to your phone via 'adb shell', get root, and do the following two commands to flash your new boot image:
# cat /dev/zero >> /dev/mtd/mtd2 write: No space left on device [this is ok, you can ignore] # flash_image boot /sdcard/mynewimage.img
Reboot.
If your phone starts all the way up, congratulations. If not, you did something wrong and you'll need to boot into recovery mode and apply your update.zip file (reboot while holding down home+power, when you get the recovery screen press alt+L and then alt+S).
Something fun to do with your new found power
If you place a file titled initlogo.rle in the root directory of your boot image, the phone will display this image upon boot (after the "G1" image and before the Android animation). In order to create this file, you need to create a 320x480 image in Photoshop or Gimp and save it as a "raw image" file. You then need to compress that image with the program to565. More details on that here.
This is not the same thing as applying an update.zip
You will see other places on the forums that describe how to create customized update.zip files, as well as update.zip files that people are sharing. For example, there is a recent update.zip which is a modified version of rc30 (with the anti-root aspects disabled). The update.zip files include new boot images, recovery images, and typically replacements for the entire system/ directory as well as other updates. If you are creating a custom boot or recovery image, it is typically a good idea to start with the image distributed with the most recent update you have applied (flashing an image from an older release could have unintended consequences).