月份:2017年2月

[读书笔记]批判官员的尺度

[读书笔记]批判官员的尺度

依法禁止某种言论并不可怕,可怕的是禁止者不给出明确的认定标准,想查禁什么言论,就随意给某种言论贴上禁止“标签”。
“真理只有在思想市场中,才能得到最好的检验”(大法官 霍姆斯)
“靠更多言论矫正异议,而非强制他人噤声沉默”(大法官 布兰代斯)
私人言论与公共事务无关,国会可视其危害程度,决定是否立法限制。但是,公共言论是人民自制的基础,政府不应干预。
“公民履行批判官员的职责,如同官员恪尽管理社会之职”,因此,除非媒体蓄意造假或罔顾真相,官员不得提起诽谤诉讼。
“对公共事务的讨论应当不受抑制、充满活力并广泛公开”(大法官 布伦南)
一个社会对批评之声有多大的容忍限度,往往标志着这个社会有多高的民主程度。
那么,言论与出版自由条款的含义究竟如何确定?或者,我们可以讨论另一个问题:究竟有谁来确定?这个问题放在今天,答案当然不言而喻:解释宪法当然是法院,尤其是最高法院的职责所在。
最高法院与其它法院,一般通过普通法解释宪法,即根据过去法官裁判的先例,决定每起案件如何判决。(普通法系)
大陆法系国家法官仍是按条分缕析的成文法典判案。(大陆法系)(如今的英国、美国,已出现了不少成文法律,甚至取代了普通法的效力)
法律的含义,正是在不断回应实践过程中越辩越明。
在实践中,出版自由的含义,已演变成“对公共议题进行刻薄批评和激烈讨论的权利”
汉德法官说,《群众》杂志刊载的文章和漫画,“虽对战争充满敌意”,“令人不快”,试图激起反战情绪,但是,“不管这些作品是适度的政治推理,还是过激、不当的谩骂,在美国这个以言论自由为权利最终根源的国家里,人人皆享有批评政府的自由……钳制这些可能动摇人民意志的言论,无异于镇压所有对立评论和意见……言论只有在直接煽动叛乱、反抗等行为时,才构成犯罪,如果把合法的政治言论当做调唆煽动,就是驱逐了民主政治的守护神,是最大的不宽容。”
“是人民,而不是政府,拥有绝对主权”,以及人民享有“自由检视公众人物和公共事务的权利”。(麦迪逊)
换言之,言论自由是政府自治的基本条件。
他(霍姆斯)已充分论证,若以影响战事为由,动辄令人因言获罪,将是一种野蛮行径。
“我们撤销原判。因为阿拉巴马州法院在政府官员因职务行为受到批评而提起的诽谤诉讼中,所使用的法律规则存在宪法缺陷,未能保护宪法第一修正案和第十四修正案确立的言论、出版自由”(大法官 布伦南)
“我国曾对一项原则做出过深远承诺,那就是:对公共事务的辩论应当不受抑制、充满活力并广泛公开,它很可能包含了对政府或官员的激烈、刻薄,甚至尖锐的攻击。在此背景下,我们考虑了本案涉及的问题。本案中的那则广告,抗议的是我们所处时代的主要公共议题,它显得有权得到宪法保护”(大法官 布伦南)
人民才是宪法的主人,人民对政府的任何评论,都享有免责权(亚历山大·米克尔约翰)
容许新闻报道存在犯错的空间,对新闻界是一种莫大激励。在越战和0“水门事件”中,媒体之所以敢放手挑战官方权威,深挖幕后真相,靠的就是并非“绝对真实”的匿名消息源。
对社会危害的恐惧,不能成为打压言论自由和集会自由的正当借口。当年人们还因为害怕女巫,而烧死女人。言论的一大职能,就是将人们从非理性恐惧的桎梏中解脱出来。
如果有足够时间,应当让人们借助讨论揭示谬误,通过教育祛除邪念,靠更多言论矫正异议,而非强制他人噤声沉默。
这些报人孜孜以求的,无非是揭露更多被官方遮蔽的黑幕,这样的言论都不能免责,还有什么样的言论可以免责?如果我们不允许人民讨论这类事务,公共安全如何得以保障?是的,在很多情况下,诽谤确实存在。但是,你总不能一面揭发罪恶,一面掩盖作恶者姓名吧。很难想象,一家没有任何言论免责特权的媒体,能够担当起维护民主社会安危的重任。
“任何事务一旦实际运转,总难避免某种程度上的滥用,这类情形在新闻界体现得尤为明显。不过,我始终认为,留存一些芜枝杂叶,任其自有凋敝,会比直接剪除更利于树木生长”(麦迪逊 1798年驳斥防治煽动法”维吉尼亚决议”的报告)

TBC…

[Project]JpegDecoder DHT to Huffman Code Part

[Project]JpegDecoder DHT to Huffman Code Part

//DHT PART

        static List<DHTCode> DHTReader()
        {
            int LengthDHT = OriginPicture.ReadByte() * 0xFF + OriginPicture.ReadByte();
            int TableNo = OriginPicture.ReadByte();
            int[] L = new int[16];
            int LengthV = 0;
            for (int i = 0; i < 16; i++)
            {
                L[i] = OriginPicture.ReadByte();
                LengthV += L[i];
            }
            int[] V = new int[LengthV];
            for (int i = 0; i < LengthV; i++)
            {
                V[i] = OriginPicture.ReadByte();
            }
            List<DHTCode> DHTCodeCollection = new List<DHTCode>();
            //if (L[0] == 0) DHTCodeCollection[0] = new DHTCode(1, 1, "0", V[0]);
            //else DHTCodeCollection[0] = new DHTCode(0, 2, "00", V[0]);
            string PrevCode = "";
            int FirstI = 0;
            int CurrDHT = 0;
            for (int i = 0; i < 16; i++)
            {
                if (L[i] != 0)
                {
                    for (int j = 0; j < L[i]; j++)
                    {
                        if (PrevCode=="")
                        {
                            string C = "";
                            for (int Cont = 0; Cont <= i; Cont++)
                            {
                                C += '0';
                            }
                            PrevCode = C;
                            DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT]));
                            CurrDHT++;
                        }
                        else
                        {
                            string C = PrevCode;
                            int Prev = Convert.ToInt32(C, 2);
                            Prev++;
                            C = Convert.ToString(Prev, 2);
                            Prev = PrevCode.Length - C.Length;
                            for (int Set = 0; Set < Prev; Set++)
                            {
                                C = "0" + C;
                            }
                            DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT]));
                            CurrDHT++;
                            PrevCode = C;
                        }
                    }
                    FirstI = i;
                    break;
                }
            }
            for (int i = FirstI + 1; i < 16; i++)
            {
                for (int j = 0; j < L[i]; j++)
                {
                    string C = PrevCode;
                    int Prev = Convert.ToInt32(C, 2);
                    Prev++;
                    C = Convert.ToString(Prev, 2);
                    Prev = PrevCode.Length - C.Length;
                    for (int Set = 0; Set < Prev; Set++)
                    {
                        C = "0" + C;
                    }
                    Prev = i - C.Length + 1;
                    for (int Set = 0; Set < Prev; Set++)
                    {
                        C = C + "0";
                    }
                    DHTCodeCollection.Add(new DHTCode(CurrDHT, C.Length, C, V[CurrDHT]));
                    CurrDHT++;
                    PrevCode = C;
                }
            }
            return DHTCodeCollection;
        }
    }
[C#]Make Heap

[C#]Make Heap

写的略蠢……把一个数组转成堆的形式

    public class Heap
    {
        public HeapNode Root = new HeapNode();
        public void Heapify(HeapNode CurrNode)
        {
            int Select = 0;//0:Curr 1:Right 2:Left
            if ((CurrNode.L != null && CurrNode.Value > CurrNode.L.Value) && ((CurrNode.R != null && CurrNode.Value > CurrNode.R.Value) || (CurrNode.R == null))) Select = 0;
            else if (CurrNode.L != null && CurrNode.Value > CurrNode.L.Value) Select = 1;
            else if (CurrNode.R != null) Select = 2;
            if (Select == 1)
            {
                int temp = CurrNode.Value;
                CurrNode.Value = CurrNode.R.Value;
                CurrNode.R.Value = temp;
                Heapify(CurrNode.R);
            }
            if (Select == 2)
            {
                int temp = CurrNode.Value;
                CurrNode.Value = CurrNode.L.Value;
                CurrNode.L.Value = temp;
                Heapify(CurrNode.L);
            }
        }
        public void MakeHeap(HeapNode CurrNode)
        {
            if (CurrNode.L != null) MakeHeap(CurrNode.L);
            if (CurrNode.R != null) MakeHeap(CurrNode.R);
            Heapify(CurrNode);
        }
        public HeapNode IntData(int[] a, int CurrPos)
        {
            HeapNode Node = new HeapNode();
            if (a.Length < CurrPos + 1) return null;
            Node.Value = a[CurrPos];
            Node.L = IntData(a, (CurrPos + 1) * 2 - 1);
            Node.R = IntData(a, (CurrPos + 1) * 2);
            return Node;
        }
        public Heap(int[] a)
        {
            Root = IntData(a, 0);
            MakeHeap(Root);
        }
    }