开源框架Autofac使用入门

一、Autofac是什么 说到Autofac,我们就要首先了解依赖注入(Dependency Injection,简称DI)。DI不是什么技术,而是一种设计模式,是用来降低计算机程序之间的耦合的。在.net平台,有很多依赖注入工具,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,Autofac是一款较为轻量级的、性能优异的、支持xml配置的依赖注入工具。这也是为什么我选择先学习Autofac的原因。 1.1 依赖注入(DI)和控制反转(IOC) 依赖注入(Dependency Injection)DI是一种软件设计模式,用来允许我们开发松耦合代码。DI是一种很好的方式去减少软件模块之间的紧耦合关心。DI帮助更好的去管理软件中的功能更新和复杂度。DI的目的是让代码可维护。依赖注入模式使用构造器对对象初始化并提供需要的依赖给对象,也就意味着允许你从类外部注入一个依赖项。 控制反转(IOC,Inversion Of Contrl)也是一种设计模式,它是对DIP(依赖倒置原则,Dependence Inversion Principle)的一种实现。IOC指的是一种框架或运行时的编程风格,用来控制程序流程。IOC意味着我们可以改变常规的控制方式。它在DIP下得以实现。许多基于.net框架的软件开发都使用IOC。IOC更多的是一个通用术语,不仅仅局限于DI。 1.2 DI和IOC在项目中起到什么作用 假设你的客户端类需要使用一个服务类组件,那么你能做的就是让你的客户知道一类IService接口而不是服务类。这样,你就可以随时改变Service类的实现而不会中断已经部署的代码。 二、Autofac如何使用 首先你必须获取AutoFac,这里你可以通过各种方式加载它,我这里还是通过VS中的NuGet来加载AutoFac,不论是哪种方式,最终的目的就是将 Autofac.dll,Autofac.Configuration.dll 这两个程序集引用到你的项目中。这样在你的项目中,如果想使用AutoFac,只需添加其命名空间引用即可~ 这里我用的是2.6版本的(PS:Autofac.Configuration.dll V4.1 已经没有ConfigurationSettingsReader 用法稍有改变,还没去研究) 2.1 Demo分析 代码Demo,这里在控制台应用程序中使用,首先创建一个类 /// <summary> /// 定义一个Animal接口 /// </summary> public interface IAnimal { void DogCall(); void CatCall(); } 然后,写一个类继承此接口 public class Call: IAnimal { public void CatCall() { Console.WriteLine("喵喵喵"); } public void DogCall() { Console.WriteLine("汪汪汪"); } } 接着,用Autofac static void Main(string[] args) { var builder = new ContainerBuilder();//创建一个IOC容器 builder.RegisterType<Call>().As<IAnimal>();//通过AS可以让Call类中通过构造函数依赖注入类型相应的接口。 //Build()方法生成一个对应的Container实例,这样,就可以通过Resolve解析到注册的类型实例。 using (var container = builder.Build()) { //当注册的类型在相应得到的容器中可以Resolve你的Call类中所有实例。 var call = container.Resolve<IAnimal>(); call.DogCall(); call.CatCall(); } Console.ReadLine(); } 使用Autofac的步骤:第一步,定义一个Container容器。第二步,创建builder,并在builder中注册类型。第三步,实例化容器。第四步,在需要使用接口的地方,通过container来解析得到一个借口的实例。 ...

October 22, 2021

隐形数字水印技术

这两天需要给项目中的图片加水印,考虑到美观就放弃了显性的水印,而采用隐形的数字水印。利用数字水印的不可见性,在不影响作品的情况下,加入版权信息的数字水印,可抗击拷贝,剪切。 数字水印(DigitalWatermarking)技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到,只有通过专用的检测器或阅读器才能提取。数字水印是一个崭新的信息隐藏技术,首次提出这个概念至今也不到20年。 我采用的是github上面的一个开源库blind_watermark (https://github.com/guofei9987/blind_watermark) 这是基于小波变换的数字盲水印,用python来写的,效果还可以,不过通过通信软件截图或者发送之后,就无法获取到数字水印了,这个只能防那些直接拿来使用的盗用者。 另外,如果图片上透明背景的png格式,转换之后会生成黑色底色,这个也很不好,我花了两天时间试图修改源码,还是没有完成。 虽然没有能,但是学会了一些OpenCV的技术。

October 18, 2021

用python给图片添加半透明水印

我一直都是用C#来完成水印的生产,最近捣腾python脚本,查了一下,可以很方便地用python给图片添加半透明水印。 # coding:utf-8 from PIL import Image, ImageDraw, ImageFont def add_text_to_image(image, text): font = ImageFont.truetype('C:\Windows\Fonts\STXINGKA.TTF', 36) # 获取字体 # 添加背景 new_img = Image.new('RGBA', (image.size[0] * 3, image.size[1] * 3), (0, 0, 0, 0)) new_img.paste(image, image.size) # 添加水印 font_len = len(text) rgba_image = new_img.convert('RGBA') text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0)) image_draw = ImageDraw.Draw(text_overlay) for i in range(0, rgba_image.size[0], font_len*40+100): for j in range(0, rgba_image.size[1], 200): image_draw.text((i, j), text, font=font, fill=(0, 0, 0, 50)) text_overlay = text_overlay.rotate(-45) image_with_text = Image.alpha_composite(rgba_image, text_overlay) # 裁切图片 image_with_text = image_with_text.crop((image.size[0], image.size[1], image.size[0] * 2, image.size[1] * 2)) return image_with_text if __name__ == '__main__': img = Image.open("test.jpg") im_after = add_text_to_image(img, u'test_output') im_after.save(u'test_output.png')

October 15, 2021

第六届南宁市十大杰出中学生评选结果

第六届“南宁市十大杰出中学生“名单”和第六届“南宁市十大杰出中学生“提名奖名单” 七县五城区团委、教育局,各开发区团委(团工委)、教育局,全市各中学团委、学生会: 为了贯彻落实党的十六届三中全会和团十五大精神,全面推进素质教育,及时树立优秀中学生典型,展示新世纪我市中学生的聪明才智和青春风采,在全市中学生中再次掀起学习先进、求实创新、提高素质的新高潮。共青团南宁市委、南宁市教育局、南宁市学生联合会开展了第六届“南宁市十大杰出中学生“、“南宁市百名优秀中学生“评选活动,在各级党政领导和社会各界的重视和支持下,本次评选活动已圆满结束。一大批勤奋学习、品学兼优、积极进取、乐于助人、富有创新精神的优秀中学生脱颖而出,成为南宁市当代中学生中的佼佼者,以自己的行 动展现出了新世纪青少年的青春风采。 为树立典型,表彰先进。经共青团南宁市委、南宁市教育局、南宁市学生联合会的认真审核,决定授予谢芳秋等10名同学第六届“南宁市十大杰出中学生“荣誉称号,授予苏铁晖等10名同学第六届“南宁市十大杰出中学生“提名奖,授予 宁晓等100名同学第六届“南宁市百名优秀中学生“荣誉称号,授予南宁市第二中学等10所学校第六届“南宁市十大杰出中学生“评选活动育英奖。 希望受表彰的中学生珍惜荣誉,不懈努力,锐意进取,再创佳绩。号召全市中学生向受表彰的同学学习,以他们为榜样,努力学习,求实创新,崇尚科学,传播文明,努力成为社会主义现代化事业的合格建设者和接班人。 共青团南宁市委员会 南宁市教育局 南宁市学生联合会 2003年12月30日 附1:第六届“南宁市十大杰出中学生“名单 奉献星:谢芳秋(女) 宾阳县宾阳中学373班 创造星:卓 越 广西大学附属中学初三(1)班 博学星:张 远 南宁市第十四中学初三(13)班 余 悦(女) 南宁市第三中学高三(2)班 学干星:李 行 南宁市第二中学高2001(8)班 韦英华(女) 邕宁县高级中学012班 艺体星:黄国星 南宁市第五中学初02(1)班 李 佳(女) 南宁沛鸿民族中学初01(5)班 技能星: 农莉霞(女) 南宁市第一中等职业学校01旅游(1)班 奋进星: 梁琪森 南宁市育才实验中学高二(1)班 附2:第六届“南宁市十大杰出中学生“提名奖名单 奉献星:李月娟(女) 邕宁县长塘镇第一初级中学011班 创造星:玉丹妮(女) 南宁市第一中学高三(1)班 博学星:赵 莉(女) 武鸣县武鸣高级中学武鸣八班 苏铁晖 南宁市第二中学高三(8)班 学干星:张 弛 南宁市第三中学高三实验(2)班 许 媚(女) 南宁市第二十八中学高三(6)班 艺体星:张 慧(女) 南宁市天桃实验学校中学部初一(10)班 夏 照(女) 南宁市五一中路学校初二(3)班 技能星: 黄 龙 南宁市第二十六中学初三(七)班 奋进星: 颜果中 横县第二高级中学(0111)班

September 25, 2021

武鸣高中的那些老师们

二十年前的今天,我踏入武鸣高中的校门,不同于小熊,武高给我留下很多深刻的回忆——都是相对美好。对于武高我的印象和二十年前的感受,我在《光明之路》里写过: “我从三轮摩的跳下来,抬头就看见武鸣高中的校门,深红色的瓷砖镶嵌着门柱,闪闪发光的金字大招牌,这个景象和我预想中的差不多。这里就是我一直梦回牵绕的理想之地,这一个多月来我曾经无数次想象第一次看见它时的激动心情,然而此时此刻,我却似乎变得镇定和平静,我知道我还有更远的目标要去实现。” 班主任阿家老师,他是班主任,我当年是这么描述: “班主任长得微胖,头形很圆,前额的头发已经秃了不少,他留部分后面的头发拨到前面挡住,讲话的过程中,我能感觉他的眼神一直在游走,偶尔我眼神和他触碰的那一刹那,我正要对他微笑,他却带着傲慢的神气把目光移走。这一节课是化学课,老师是班主任,他和前几天的表现没有太多变化,依然是一脸严肃认真的姿态,偶尔努力露出一丝微笑,我总觉得那是挤出来的笑容。” 语文老师是阿能老师,他原来只是初中老师,经过自己的努力来到武高,并担任民族班的班主任,听说现在已经到市里教书了,我印象最深的是他胃病导致被切掉了半个胃——我们一直觉得他是因为太努力了: “第一节是语文课,铃声刚停住,我看见一位带着眼镜、留着边分头的人走进教室,他微微仰着头,手水平地端着课本,走上讲台后,他拿起粉笔转身用狂草写上自己的名字,字迹写得太像明星的签名,我没能马上认出来。他一边面带微笑说话,一边伸出食指在空中画一条弧线,他环顾四周,看见没有人举手他继续讲话。”

September 10, 2021

关于HTTP请求头中的Remote_Addr,X-Forwarded-For,X-Real-IP值

开发过程中,我们有时候需要获取用户的客户端机器的ip地址,在遥远的拨号上网年代,我们只需要通过很简单的Remote_Addr就能获得客户端的真是ip地址,可是随着代理服务器的普及,客户端的ip地址往往不那么容易拿到。 一、Remote_Addr 这个值表示发出请求的远程主机的IP地址,remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。 二、x_forwarded_for 简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项,正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP。 设置格式:X-Forwarded-For: 127.0.0.1, 192.168.1.1, 202.19.89.64 这个设置表示请求由127.0.0.1发出,经过三层代理,第一层是192.168.1.1,第二层是202.19.89.64,而本次请求的来源IP 1.1.1.1是第三层代理。 三、X-Real-IP 当有多个代理时候,可以在第一个反向代理上配置“proxy_set_header X-Real-IP $remote_addr” 获取真实客户端IP; 四、案例分析 (一)、第一种情况 Nginx Proxy 202.19.89.64 nginx.conf location /test { proxy_pass http://192.168.108.1; } 192.168.108.1 nginx.conf location /test { proxy_pass http://192.168.108.2; } Nginx Proxy就是简单的把请求往后转发。 Nginx Backend 192.168.108.108 nginx.conf location /test { default_type text/html; charset gbk; echo "$remote_addr || $http_x_forwarded_for"; } Nginx Backend输出客户端IP($remote_addr)和X-Forwarded-For请求头($http_x_forwarded_for),当访问服务时输出结果:192.168.108.108 || 1.$remote_addr代表客户端IP,当前配置的输出结果为最后一个代理服务器的IP,并不是真实客户端IP; 2.在没有特殊配置情况下,X-Forwarded-For请求头不会自动添加到请求头中,即Nginx Backend的$http_x_forwarded_for输出为空。 (二)、第二种情况 通过添加X-Real-IP和X-Forwarded-For捕获客户端真实IP。 Nginx Proxy 202.19.89.64 nginx.conf location /test { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.108.1; } 192.168.108.1 nginx.conf location /test { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.108.2; } Nginx Backend 192.168.108.108 nginx.conf location /test { default_type text/html; charset gbk; echo "$remote_addr ||$http_x_real_ip ||$http_x_forwarded_for"; } 当访问服务时,输出结果为:192.168.108.108 || 202.19.89.64 || 192.168.108.1, 192.168.108.2 ...

August 17, 2021

从WebForm到MVC,一直到Blazor

打算下一个项目用Blazor,学习了一个下午,这是一个很不错的全栈UI框架,基于WebAssembly技术,可以让开发人员直接用C#完成js的工作。 学习过程中,我脑子里闪现了自己经历的那个ASP.NET的WebForm时代,那时候我们用UserControl的ascx文件布局网页。查了下,果然是一脉相承。 https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/architecture-comparison 我把消息发群里,大家开始回忆曾经用过的方法,包括ViewState,GridView,IsPostBack,masterpage,repeater,这些技术确实都是一代人的回忆。 不过认真回想,微软的WwebFrom的理念是超前的, 只不过碍于当时的技术发展, 只能做成那样,后来的UI框架其实都给予它的思想。 “技术会落后,思想传承”,微软的技术从WebForm到MVC,一直到一直到Blazor,使用的WebUI的组件技术一直都没有改变,果然是汇集世界一流软件工程师的公司。

August 5, 2021

龙应台的《(不)相信》

二十岁之前相信的很多东西,后来一件一件变成不相信。 曾经相信过爱国,后来知道“国”的定义有问题,通常那谆谆善诱要你爱国的人所定义的“国”,不一定可爱,不一定值得爱,而且更可能值得推翻。 曾经相信过历史,后来知道,原来历史的一半是编造。前朝史永远是后朝人在写,后朝人永远在否定前朝,他的后朝又来否定他,但是负负不一定得正,只是累积渐进的扭曲变形移位,使真相永远掩盖,无法复原。说“不容青史尽成灰”,表达的正是,不错,青史往往是要成灰的。指鹿为马,也往往是可以得逞和胜利的。 曾经相信过文明的力量,后来知道,原来人的愚昧和野蛮不因文明的进展而消失,只是愚昧野蛮有很多不同的面貌:纯朴的农民工人、深沉的知识分子、自信的政治领袖、替天行道的王师,都可能有不同形式的巨大愚昧和巨大野蛮,而且野蛮和文明之间,竟然只有极其细微、随时可以被抹掉的一线之隔。 曾经相信过正义,后来知道,原来同时完全可以存在两种正义,而且彼此抵触,冰火不容。选择其中之一,正义同时就意味着不正义。而且,你绝对看不出,某些人在某一个特定的时机热烈主张某一个特定的正义,其中隐藏着深不可测的不正义。 曾经相信过理想主义者,后来知道,理想主义者往往经不起权力的测试:一掌有权力,他或者变成当初自己誓死反对的“邪恶”,或者,他在现实的场域不堪一击,一下就被弄权者拉下马来,完全没有机会去实现他的理想。理想主义者要有品格,才能不被权力腐化;理想主义者要有能力,才能将理想转化为实践。可是理想主义者兼具品格及能力者,几希。 曾经相信过爱情,后来知道,原来爱情必须转化为亲情才可能持久,但是转化为亲情的爱情,犹如化入杯水中的冰块——它还是冰块吗? 曾经相信过海枯石烂作为永恒不灭的表征,后来知道,原来海其实很容易枯,石,原来很容易烂。雨水,很可能不再来,沧海,不会再成桑田。原来,自己脚下所踩的地球,很容易被毁灭。海枯石烂的永恒,原来不存在。 二十岁之前相信的很多东西,有些其实到今天也还相信。 譬如国也许不可爱,但是土地和人可以爱。譬如史也许不能信,但是对于真相的追求可以无止尽。譬如文明也许脆弱不堪,但是除文明外我们其实别无依靠。譬如正义也许极为可疑,但是在乎正义比不在乎要安全。譬如理想主义者也许成就不了大事大业,但是没有他们社会一定不一样。譬如爱情总是幻灭的多,但是萤火虫在夜里发光从来就不是为了保持光。譬如海枯石烂的永恒也许不存在,但是如果一粒沙里有一个无穷的宇宙,一刹那里想必也有一个不变不移的时间。 那么,有没有什么,是我二十岁前不相信的,现在却信了呢? 有的,不过都是些最平凡的老生常谈。曾经不相信“性格决定命运”,现在相信了。曾经不相信“色即是空”,现在相信了。曾经不相信“船到桥头自然直”,现在有点信了。曾经不相信无法实证的事情,现在也还没准备相信,但是,有些无关实证的感觉,我明白了,譬如李叔同圆寂前最后的手书:“君子之交,其淡如水,执象而求,咫尺千里。问余何适,廓尔忘言,华枝春满,天心月圆。” 相信与不相信之间,彷佛还有令人沉吟的深度。

July 21, 2021

微分方程模型之传染病数学模型

关于传染病的数学模型,在许多年前数学界早已做过研究,根据传染病的传播速度不同,空间范围各异,传播途径多样,动力学机理等各种因素,对传染病模型按照传染病的类型划分为 SI,SIR,SIRS,SEIR 模型。如果是按照连续时间来划分,那么这些模型基本上可以划分为常微分方程(Ordinary Differential Equation),偏微分方程(Partial Differential Equation)等多种方程模型;如果是基于离散的时间来划分,那么就是所谓的差分方程(Difference Equation)。差分模型其实是微分模型的离散形式,所以我们只讨论微风方程模型。 首先要介绍一些常用的符号:在时间戳 上,可以定义以下几种人群: •易感者(susceptible):用符号 来表示; •感染者(infective):用符号来表示; •康复者(Recoverd):用符号来表示; 其次,在时间戳t上,总人口是 。如果暂时不考虑人口增加和死亡的情况,那么N(t)是一个恒定的常数值。 除此之外, •r表示在单位时间内感染者接触到的易感者人数; •传染率:表示感染者接触到易感者之后,易感者得病的概率; •康复率:表示感染者康复的概率,有可能变成易感者(可再感染),也有可能变成康复者(不再感染)。 在进行下面的分析之前,先讲一个常微分方程的解。 一、SI 模型(Susceptible-Infective Model) 在 SI 模型里面,只考虑了易感者和感染者,并且感染者不能够恢复,此类病症有 HIV 等,模型如下: 其微分方程就是: 这个微风方程近似解法如下: 通过数值模拟的结果: 在SI模型的假设下,全部人群到最后都会被感染。 二、SIS模型(Susceptible-Infectious-Susceptible Model) 除了HIV这种比较严重的病之外,还有很多小病可以恢复并且反复感染,例如日常的感冒,发烧等。在这种情况下,感染者就有一定的几率重新转化成易感者。如下图所示: 其微分方程是: 初始值:,。 这个方程的数值近似解: 三、SIR 模型(Susceptible-Infectious-Recovered Model) 很多时候,感染者在康复了之后就有抗体,于是后续就不再会获得此类病症,这种时候就需要考虑SIR模型。此类病症有麻疹,腮腺炎,风疹等。我们熟悉的SIR模型是基于疫情流行区域的总人数、感染人数、易感人数、病愈人数和时间之间的如下关系: 其微分方程是: 这些方程里的参数和为常数,反映了特定疫情的特征。这些方程貌似简单,但由于常数和是同一数量级,导致方程属于高度耦合的非线性类型,实际上无法求解析解,需要用数值解来提供预测结果。在疫情扩散过程中的早期,由于开始时易感人群也就是总人数,即 ≈ ,我们可以简化感染人数和时间的关系为: 由此可得到感染人数的近似解为: 这一关系表明,近似的感染人数总数是时间的指数函数。这里的常数和应该根据疫情的特点来确定,从而实现感染人数的估计。当然,疫情防控措施也会影响这些参数,反过来也反映了防控措施的效果。这些参数一般是根据流行病学的统计结果得到的,会在疫情的流行过程中得到反映。也就是说,我们也可以根据实际疫情报告来决定这些参数。由于我们已经积累了一些疫情实际数据,基于SIR分析的回溯拟合可以精确地确定这些参数。 SIR模型的一些近似结果(预测新冠病毒的有症状的确诊病例): 四、总结 最后,除了以上的 SI,SIS,SIR 模型中,还考虑进去。除此之外,如果把潜伏期、潜伏期的传染情况也加进去考虑,还有SIRS模型,SEIR模型等,但是不管怎么变化都是基于SIR这个微分模型,而且有时候考虑的参数越多不一定越准确,比较本身参数就不是绝对精确。

July 5, 2021

伯林和自由主义(二)

这段时间阅读伯林的《自由论》及相关书籍,发现伯林的思想广博又深邃,他是哈耶克和波普尔的好友,他的很多想法甚至超越了穆勒,我特别欣赏他坚持在自由的前提下,坚守多元和容忍。伯林有两篇重要的文章,重要得我不得不转到这里来,为此我专门进行了OCR识别,并且人工校对。 这是第二篇文章,这篇文章可以大致了解伯林对于“自由”的基本论述,这两天在youtube上看到Manufacturing Intellect节目里对伯林的采访,他说了这么一句很令我深思的话:伟大的哲学家的基本理念和思想是非常简单又深刻的,并且他可以通俗地告诉大众,至于他自己的长篇大论,只是在论述、校验和证明自己的思想是经得起推敲的,并且也是对普通人或者其他哲学家的一些想法的反驳。 自由 什么是政治自由?在古代世界,特別在希腊人当中,“是自由的”就是能够参与自己城邦的管理。只冇当一个人冇权参与法律的制定与废除时,法律才是有效的。自由并不是被迫服从别人为他制定的法律,而是服从由他制定的法律。这种民主制使得政府与法律渗透生活的所冇领域成为可能。人不能免于这样的管理,他也不要求免于这样的管理。所有民主主义者都声称,人人都同样可能接受批评、调査、依法传讯(若必需)或其他安排,在建立与维持这些安排时,每个公民都有权参与。 在现代世界,一种新观念产生了一本杰明•贡斯当对之作了最清晰的阐释一这就是:存在着一个私人生活的领域,除了特殊情况外,这个领域朵不希望受公共权力干涉的。古代世界的核心问题是“谁应该统治我?”。有些人说是封主,有些人说是最贤明者,或最富冇者、敁勇敢者、多数派、法院、所有人的匿名表决。在现代世界,一个同等重耍的问题楚:政府应该在多大程度上进行管理?古代世界假定生活是一个整体,法律与政府覆盖其整个领域——没有任何理由保护生活的任何一个角落不受这种监管。在现代世界,历史地说,不管是作为教会反对世俗国家干涉的斗争或国家反对教会的斗争的结果,还始作为私人企业工业、商业的成长及其反对国家干涉的要求的结果,或者还因为别的什么原因,我们开始提出这样的假设在公共生活与私人生活之间存在着界线;无论在这个界线之内我可以依意愿行事,亦即按我軎欢的方式生活、相信我愿意相信之物的私人空间多么狭小,只要我的行为不干涉别人相似的权利,或不损害使这种安排成为吋能的秩序。这是古典自由主义观点,在英国与法同各种各样的人权宣言中,在诸如洛克、伏尔泰、托马斯•潘恩、贡斯巧和约翰•斯图亚特•穆勒等人的著作中,得到完整或部分的表达。当我们说到公民自由(权)或公民价值时,这就是其中的含义之一。 _人需要彼此防范和防范政府,这种假设从未在世界的任何地方被完全接受过,我所说的古希腊或古典的观点以这种形式重新出现你说个人有权选择他喜爱的生活。_但是这适用于所有人吗?如果这个个体无知、不成熟、未受教育、智力残缺,拒绝恰当的健康与发展机会,他将不可能知道如何选择。这种人从不会真正知道他的真正需要是什么。如果存在这样一些人,他们知道人的本性是什么、人究竟渴望什么,如果他们替其他人做了他们如果更明智、更知情、更成熟、更发达也会做的事情——也许用一些控制的手段——那么,他们是在剥夺后者的自由吗?他们的确干涉了人们,但只是为了让他们能够做如果他们知道得更多也会做的亊悄,或者为了使他们总是处于最佳状态,而非老是受制于非理性的动机或幼稚的举动,或让他们本性中动物的一面占优势。那么这还是干涉吗?如果父母或老师强迫不情愿的孩子上学或努力学习,以虽然孩子们可能并不知道的真实要求为名,那么,既然这是所有真正的人——因为他们是人——都必然要求的,他们还是在剥夺孩子们的自由吗?肯定不是。老师或父母给了他们潜伏的或真实的自我,迎合他们的需要,以反对他们更肤浅的自我暂时的需耍,这些需要在人成熟时就像老皮一样会蜕掉。” 如來你用教会、政党或阀家来代替父母,你就会得到作为许多现代权威之基础的那种理论。我们被告知说,服从这些机构就是服从自己,因此不是受奴役,因为这些机构本身体现着我们最好与最明智的方面,而自我约束并非约束,自我控制并非受奴役。 这两种观点(在其各种版本中)的战斗,乃是现代世界基本的政治议题。一方说把酒瓶放到嗜酒症患者拿不着的地方并未剥夺他的自由;如果他被阻止酗酒,即使是通过强迫,他也会健康起来,能更好地履行他作为人和公民的责任并会更好地成为他自己,这样要比他能够着酒瓶、毁坏他的健康与健全时更自由。他不知道这一点的事实正是他的疾病或他对自己真实需要无知的表现。另一方并不否认有必要对反社会的行为加以抑制,不否认有必要防止他伤害他自己或伤害他自己的孩子或其他人的福利,但是否认这种抑制——虽然是公正的——构成自由。为了让别的利益,如安全、和平或健康有足够的空间,自由也许不得不被剥夺;或者为了明天更大的自由今天的自由不得不被剥夺;但是剥夺自由并不是提供自由,而且,强制,不管有多么好的理由,毕竟是强制而非自由。自由,这些人会说,仅是诸多价值中的一种,如果它构成实现其他同等重要的目标的障碍,或者妨碍其他人实现这些目标的机会,它就必须让路。 对此,另一方的回应是,这种说法预先假定私人生活与公共生活的分裂(它假定人有可能在其私人生活中做一些别人不喜欢的事情,因此需要受到保护),但是这样一种人性观是建立在一种根本的错误之上。人类是一个整体,在一个理想的社会里,当每个人的功能发挥出来时,没有人会想去做那些令别人反感或想阻止的事情。改革家与革命者的恰当的意图,便是去打通人与人之间的高墙,把一切带到开放之境,使人没有分裂地生活在一起,以致一人所欲即万人所欲。要求不被打扰,要求能够做自己愿意做的事而不需要向某个法庭——家庭、雇主、党、政府或整个社会——作解释,这种要求本身便是失调的表现。向社会索要自由就是向自我索要自由。这种病症必须通过改变财产关系(如社会主义要求做的那样),或通过消除批判理性(如一些宗教派别,以及法西斯和其他极权主义政权事实上试图做的那样)予以治疗。 在可以称作有机论的第一种观点中,所有分离都是坏的,不容践踏的人权观念乃是壁垒观念——是人与人之间相互隔离时才需要的墙壁——只有在一个坏的社会里才为人们所需,而在一个组织良好、所有人类小溪都流入统一的人类江河的社会里则没有存在的余地。在第二种或自由主义的观点中,人权,以及私人领域(在其中我不受审查)的观念,对于人人需要的最低限度的自主——如果他要按自己的路线发展的话——是不可缺少的;因为多样性是人类的类本质,而不是行将逝去的状态。这个观点的拥护者认为,毁灭这种权利以建立一种普遍的、自我导向的人类社会——一个所有人向着同一目标进军的社会——将摧毁个人选择的领域;而这一领域,不管多么狭窄,一旦失去,生命亦不再有价值 。 极权与威权制度以一种粗糙的和(有人会坚持说)扭曲的形式,代表着这些观点的前一种,而自由民主制度倾向于代表后一种。当然,这些观点的变种与联结,以及它们间的妥协,也是可能的。它们是两种基本的、彼此对立的观念,主导着自文艺复兴以来的世界。

July 2, 2021