• Guides/Don’t Starve Together Dedicated Servers

    具体教程 http://dontstarve.wikia.com/wiki/Guides/Don%E2%80%99t_Starve_Together_Dedicated_Servers sudo dpkg –add-architecture i386 # If running a 64bit OS sudo apt-get update sudo apt-get install lib32gcc1 # If running a 64bit OS sudo apt-get install lib32stdc++6 # If running a 64bit OS sudo apt-get install libgcc1 # If running a 32bit OS sudo apt-get install libcurl4-gnutls-dev:i386 sudo useradd -m steam chmod a+rw […]

  • 相由心生

    相由心生,境随心转

  • 五円

    去了浅草寺,发现游客都往许愿箱里扔五日元的硬币,然后在那虔诚的许愿 同行 jay 解释, 因为 五日元(五円) 读音与 “ご縁” 相同,所以被认为缘份,幸运的象征 所以在日本大多许愿都会用五日元来许愿。 似乎挺有意的一件事,于是特意留了一枚五円, 仅作旅游纪念

  • Let’s Encrypt 免费SSL安全证书安装方法

    Let’s Encrypt is a new Certificate Authority: It’s free, automated, and open. Let’s Encrypt是一个免费SSL证书发行项目,是由ISRG提供的免费免费公益项目,自动化发行证书,但是证书只有90天的有效期。适合个人使用或者临时使用。 git clone https://github.com/letsencrypt/letsencrypt.git cd letsencrypt # 创建验证目录 mkdir -p /home/wwwroot/站点目录/.well-known/acme-challenge # 生成证书 –agree-tos参数屏蔽该提示 ./letsencrypt-auto certonly –email 邮箱 -d 域名 –webroot -w /网站目录完整路径 –agree-tos Let’s Encrypt会检测系统安装依赖包,安装完后会有蓝色的让阅读TOS的提示,回车 稍等片刻就完成了。 生成证书后会有如下提示: IMPORTANT NOTES: – If you lose your account credentials, you can recover through e-mails […]

  • Google Protocol Buffers 编码原理

    Protocol buffers are a language-neutral, platform-neutral extensible mechanism for serializing structured data. A Simple Messag 举个栗子, 定义一个proto message 把 a 的值设置为十进制的 150: message Test1 { required int32 a = 1; } 然后将该 message 序列化到 Binary 文件中, 可以看到数据为: 08 96 01 在理解这个些数前需要先了解 Varints Base 128 Varints varints 是一种使用一个或多个字节(byte)表示整型数据的方法。数值越小, 其所占用的字节数越少。(注:类似 varchar) 通常整数用字节表示, 每个字节占 8 位, 而在 varint […]

  • 方差为什么用平方,而不是绝对值?[转]

    问题一:如果要从甲、乙两名选手中选拔一名参加射击比赛?你将设计什么方案? S:总分高的。 T:若有一名选手射击5次,总分30;而另一名选手射击10次,总分50分,你又会选择谁? S:看来还是算平均分合适。 问题二:你选择谁? 甲:3、5、6、7、9 乙:4、5、6、7、8 从数据中,可以看出用平均数来选拔是不可取的。尽管平均环数相同,但二人的水平还是有差距的。让学生充分研讨,经过观察分析数据,比较容易达成这样的共识:甲最多9,最少3环,波动范围较大,而乙最多8,最少4,波动范围较小。因此乙较稳定,应该选拔乙。 问题三:极大值与极小值的差能分析准确吗? 甲:3、5、6、7、9 丙:3、6、6、6、9 不难发现,虽然最多比最少差距相同,但丙比甲要稳定。同时还发现:在平均数相同的情况下,单纯比较最大与最小两个数据,不能够说明一组数据的整体波动情况,每个数据都有决定权。那么又如何反映一组数据的波动情况? S:用各个数据减去它们的平均数,得到各个数据的偏差;再将各偏差相加。 经过一算:不难得出甲、乙、丙的偏差和都为0。到这一步,同学们会突然想到去掉偏差的负号问题。老师引导学生进行探索、分析,最后归纳出两种方法。(1)先求各偏差的绝对值,再相加;(2)先求各偏差的平方,再相加。 问题四:算一算下列数据的偏差和。 甲:3、5、6、7、9 乙:4、5、6、7、8 丙:3、6、6、6、9 用方法一算得:甲:8;乙:6;丙:6(又如何比较乙、丙的稳定性呢?) 用方法二算得:甲:20;乙:10;丙:18(这种算法算得,三者的稳定性都不一样?也让学生初步体会用平方而不用绝对值的目的就是将数据间的差距拉大) 问题五:乙孤军奋战(求偏差平方和): 第一阶段:4、5、6、7、8 第二阶段:4、5、6、7、8、4、5、6、7、8 第三阶段:4、5、6、7、8、4、5、6、7、8、4、5、6、7、8 …… 从上面的计算看出:单求偏差平方和,易因“数据越多而导致偏差平方和也越大”的结论,而实际上它们的稳定性应该是相同的。从而得出结论:只有求得“偏差的平方”的平均数才能真实地描述波动特征。 [1] http://tonni-l-green.blog.sohu.com/162240378.html

  • 字节序

    字节序是指多字节数据在计算机内存中存储的顺序或者网络传输时各字节的顺序。 在不同的处理器以不同的方式存放, 主要方式有两种即大端字节序(Big Endian)和小端字节序(Little Endian) 端(endian)的起源 “endian” 一词来源于 Jonathan Swift 在1726年写的讽刺小说 “Gulliver’s Travels”(《格利佛游记》)。小说中,小人国为水煮蛋该从大的一端(Big-End)剥开还是小的一端(Little-End)剥开而争论,并由此曾经发生过6次叛乱,其中一个皇帝送了命,另一个丢了王位。争论的双方分别被称为”大端派”和”小端派”。 1980年, Danny Cohen,一位网络协议的早期开发者,在其著名的论文”On Holy Wars and a Plea for Peace”中,为平息一场关于字节该以什么样的顺序传送的争论,而第一次引用了该词。 什么是 Big Endian 和 Little Endian 大端字节序:在内存中,低地址存放数据的高位,高地址存放数据的低位 小端字节序:在内存中,低地址存放数据的低位,高地址存放数据的高位 LE little-endian 最符合人的思维的字节序, 地址低位存储值的低位, 地址高位存储值的高位 因为从人的第一观感来说, 低位值小, 就应该放在内存地址小的地方, 也即内存地址低位; 反之, 高位值就应该放在内存地址大的地方, 也即内存地址高位 BE big-endian 最直观的字节序, 地址低位存储值的高位, 地址高位存储值的低位 不要考虑对应关系, 只需要把内存地址从左到右按照由低到高的顺序写出, 把值按照通常的高位到低位的顺序写出, 两者对照,一个字节一个字节的填充进去 网络字节序 网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。 […]

  • c/c++ 中 double 和 float 在内存中的存储结构

    浮点数,是指小数点在数据中的位置可以左右移动的数据。 计算机内存中都是以二进制 (0 或 1) 的形式储存数据, 每个 0 或 1 被称为 1 位(bit), 在 x86 CPU 中 1 字节(byte)为 8 位(bit); double 和 float 这两种精度不同的地方是 float 是 4 字节即 32 位, double 是占 8 字节为 64 位。 目前 C/C++ 编译器遵照 IEEE-754(IEEE Standard for Floating-Point Arithmetic) 制定的浮点数表示法来进行 float, double 运算。在计算机中, 浮点数通常被表示成以下格式: |__S__|____E____|________M________| 即为 符号位(Sign) + 指数位(Exponent也称阶码) […]

  • 一个数二进制中1的个数(Hamming weight)

    学习一下 https://en.wikipedia.org/wiki/Hamming_weight: 计算一个数二进制非0的个数,直接的思路就是把所有位1相加即为1的个数 以最简单的情况举例, 一个2位二进制数, 比如11(或10或01), 只要把它的第二位和第一位相加, 即 (n & 1) + (n >> 1) [此算法可以视为除余法, 右移即除2余1相加] 这样如果有复杂点的数, 都可以分割成每相邻的两位进行以上的计算, 即把偶数位1加奇数位1 例如有一个数的二进制 abcd (abcd是0或1),1个数为a+b+c+d 按每相邻两位计算为 [a+b]+[c+d], 即我们要把相邻中的偶数位和奇数位分离出来 所以需要与上一个 0101 该数的奇数位 0b0d = abcd & 0101 该数的偶数位 0a0c = (abcd >> 1) & 0101 这样 0b0d + 0a0c 结果就是每相邻2位一组, 每一组保存的都是最初在这2位的1的个数(假设结果为 efgh, ef为a+b gh为c+d) 取低位两位的1的个数 gh= efgh && […]