avatar1 avatar
@{[{user.name}]}
希腊·圣域
since February 1500
柳宗元的江雪 20 May 2017 21:00:00

千山鸟飞绝
万径人踪灭
孤舟蓑笠翁
独钓寒江雪


太喜欢这首五言绝句了,每次都在脑海里描绘一下诗中所描绘那种空旷的境地,下着雪,然后有点呼呼的北风,空旷的被雪覆盖的山岭以及偶尔传来的鸟叫声,有一个老翁独自坐在我岸边披着草衣带着斗笠在江边垂钓...୧(˶‾᷄ ⁻̫ ‾᷅˵)୨ 哇..这种场景实在太美妙了。

可能跟我喜欢下雪天有关系吧,因为一些原因,以及好多年没有看到过雪了,今年又将注定是看不到雪的一年,唉 ( ⸝⸝⸝°_°⸝⸝⸝ ), 希望有机会能够尽快再看到下雪天吧。。。 保佑┌|°э°|┘

先吐个槽୧(˶‾᷄ ⁻̫ ‾᷅˵)୨

LetsEncrypt是由ISRG互联网安全研究小组发起的一个免费、开发、自动化的证书颁发机构,所以安全性毋庸置疑,不像某些毫无节操的证书签发机构或者服务商通公然发放伪造证书,给某些原本毫无信用的垃圾机构的无耻行径添贡献厚厚的一笔,有句话怎么说来着,貌似叫弄巧成拙...

LetsEncrypt现在提供了SSL证书自动授权和管理的一个客户端,并且提供的详细的步骤等等是可以非常容易的安装和管理,不过我用的是Nginx做反向代理服务器,按照官网的nginx配置方法怎么都不成功,在阅读了大量相关文章后终于成功配置成功,一下是详细的配置步骤。

环境信息

服务器:   ubuntu 14.04/16.04
反向代理: Nginx 
Ghost:   0.11.8  

安装certbot

可以参考certbot的官方网站

$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot 

第一次配置nginx

通过certbot自动授权证书的时候certbot服务器需要验证服务器的有效性,该步骤即为配置nginx以便certbot服务器可以通过验证。

首先备份你nginx的配置文件

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_backup

编辑default文件,添加如下信息, 把yourdomain.com/www.yourdomain.com换成你自己的域名。

server {  
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    location ~ /.well-known {
        allow all;
    }
}

重启nginx

service nginx restart

certbot自动验证和签发SSL数字签名

确保你的服务器可以通过80端口访问。同样yourdomain.com和www.yourdomain.com换成你自己的域名。

如果第一次使用certbot命令时推荐在模拟环境模式运行,certbot现在加入了请求频率限制,一个小时内最多重试5次,如果5次全部失败则要等一个小时后才可以进行下一次请求,在模拟环境下测试通过后再取消模拟模式。启用模拟模式非常简单在certbot后添加

晋太元中,武陵人,捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之。复前行,欲穷其林。

林尽水源,便得一山。山有小口,髣髴若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑、竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人;黄发、垂髫,并怡然自乐。

见渔人,乃大惊,问所从来。具答之。便要还家,设酒, 杀鸡, 作食。村中闻有此人,咸来问讯。自云:先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏、晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”

既出,得其船,便扶向路,处处志之。及郡下,诣太守, 说如此。太守即遣人随其往,寻向所志,遂迷, 不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。


今天不经意间看到了陶渊明的这篇诗记,每次读完都内牛满面,描述的场景实在是太美好了(╥﹏╥)。内心一直有个阴谋论,为什么这个武陵人出来一路做记号最后却没有再找到回去的路,我想是因为里面的人对他说:不足为外人道也。然后他走后并不放心这个武陵人是否守信用就派人跟踪他,发现他留记号后就一边跟踪一边擦除记号,一边伪造记号,所以.... ╮(′~‵〞)╭

使用过iReport做过报表或者各种report的同学都知道,iReport对中文的支持非常差,可以说不经过任何配置的话是不支持中文的。因为iReport是基于iText生产PDF的,所以最简单的做法是导入iTextAsian包来解决中文文问题,但是这个包只支持宋体,在现在支持clearType的中文字体那么多,比如微软雅黑,如果可以随意更换自己喜好的字体就完美了。经过Kido的不断测试,终于找到一个简单可行的随意更换字体的办法。

  • 创建一个font文件夹,这个文件夹的位置可以不需要在工程目录下,比如可以在C盘下创建一个 C:/font, 如果是Mac则可以创建于当前用户目录下,比如:~/font

  • 添加刚刚创建的文件夹到你的iReport中的classpath中,如图

  • 下载你想要添加的中文字体,注意,iReport只支持.ttf格式的字体,下载时请留意,字体一般有两个文件,一个对应普通字体另一个粗体。

  • 将下载好的字体保存到font文件夹,注意:不要包含子目录,直接将字体文件拷贝到font根目录。

  • 安装字体到iReport,如下图



  • 完成上述几步就可以在iReport中使用中文字体了,使用时跟iReport中默认的英文字体一样,不需要设置任何地方可直接使用,PDF font name, embeded等等统统不要设置。

  • 如果你想在Java中调用iReport动态生成PDF报告,那么你还需要将刚刚添加到iReport的字体打包成jar并添加到Java工程的classpath中,具体打包方法如图:

Kido成功用以上方法随意的切换了中文字体,总结一记录一下吧,有需要的同学也可以参考一下。

JS中只有一种数字类型: Number

不像其他的编程语言,JS中的数字没有 int, long, float, double等等,所有的数字类型都被存储为64位字节中。

精度 Precision
console.log(999999999999999);  
//打印出:999999999999999

console.log(9999999999999999);  
//打印出10000000000000000

整数型的数字最大可表示15位,超过15位后即变为不精确的数字。

Integers (numbers without a period or exponent notation) are considered accurate up to 15 digits.

console.log(0.11111111111111111)  
//打印出0.11111111111111111 -- 共17位
console.log(0.111111111111111111)  
//打印出0.11111111111111111 -- 共17位

可以看出小数位的最大精度为小数点后17位, 超过17位的则不再精确,注意是不再精确,而不是丢弃, 假如超过17位,0.111111111111111112会输出什么呢,有时会输出0.11111111111111111,有时是0.111111111111111112,即不再精确

小数运算不总是精确的!!!
  0.1 + 0.2 == 0.300000000000000004

这种问题的出现是因为0.1与0.2在计算前会被存储到64位的字节中会有一定的精度损失,或变大或变小,因为损失的精度在小数后很多位,对于实际生产不会造成任何问题,如果两个数字说产生的精度损失不能互相抵消的话,就会产生上面的情况。这个时候如果用于实际生产中可以使用.toFixed(2)来确定小数点后保留2位

还有一个巧妙的办法可以得到精确的 0.1 + 0.2 的结果 0.3, 就是计算前将两个被加数转化为整型,然后在用除法还原:(0.1 * 10 + 0.

运行

$ npm update minimatch
$ npm -v minimatch
$ npm install -g npm@3
$ npm -v minimatch
到底什么是HASH和HASH算法? 25 October 2016 00:00:29

讲到 哈希(HASH) 就必然会讲到 哈希算法哈希值

做程序的难免会经常听到看到HASH,印象中只知道HASH运算就是把一串字符转换成一种不重复的字符串,不论是文件,数字,字符串等等都可以进行哈希运算而得到一个唯一的哈希值。当然这样理解是有恰当或者不对的。

它们之间的关系非常简单

一段任意长度的数据 -> 哈希算法 -> 哈希值

哈希算法并不是一个特定的算法,而是一类算法的统称。常见的哈希算法实现有MD5SHA

哈希算法的定义

哈希算法也叫做散列算法,一般来说只要一个算法满足关系:f(data)=value, 输入任意长度的data数据,经过该算法运算后输出一个定长的数据value,同时这个过程是不可逆的,即无法由value推导出data,该算法就可以称作为一个哈希算法。如果对一组数据集做哈希处理,将得到的结果与原始数据集做一一映射后就可以得到一个哈希表。

哈希的两个重要性质

基于哈希的定义而已归纳总结为: 不可逆无冲突

关于哈希值的“重复”

哈希的性质之一为无冲突, 但根据哈希算法的定义,...运算后会输出一个定长的数据..., 即一个哈希算法的值域是有限的,然而输入的原始数据可以是任意长度任何的组合,即原始数据是无穷的,那么这样“重复”是不可以避免的,也就是说有可能两个不同的输入会得到相同的哈希值。那么这样就违背了我们的无冲突的性质,其实冲突是不可避免的,业界内称作 碰撞(Collision),所以这里的无冲突其实是指明:一个好的成熟的哈希算法会有较好的抗冲突性

安全性

总之,如果两个相同的原始输入数据,在同一个哈希算法下一定会得到相同的哈希值,但是哈希值相同的两个原始输入数据不一定相同,即 不可逆

一个简单的哈希算法的例子

以前看过一个简单的例子,讲的是如果你存储了很多歌曲,但是当你要添加新的歌曲的时候为了节省资源要检测一下是否已经存在了,但是同样的歌可以命名不一样的歌曲名字,为了避免这样的事情发生,我们通过计算(哈希算法)获得歌曲的大小(哈希值),通过与新歌的大小对比从而区分出是否该歌曲已经存在。当然不严格的讲计算文件大小的过程也可以称作一个哈希算法,只是这个哈希算法非常脆弱罢了。

总的来说

f(data) = value, 不可逆,抗冲突

Ubuntu随机启动脚本 13 August 2016 04:00:59

前段时间把web应用发布到了ubuntu服务器,除此之外该服务器上还运行着几个python的脚本,每次做完安全更新之后都需要重新启动web应用和脚本,就配了一个随机启动的脚本,今天整理出来吧。

有好几个办法可以实现这个目的,这里我使用的是LSB init script的办法

什么是LSB

LSB的全称是Linux Standard Base, 从名称可以看出它是一个标准化的东西,linux有很多的发型版本,每个发型版本不尽相同,如果没有一套标准的东西约束这么多发型版本,那么开发者无法保障他们可以写出一种脚本在任何发型版本上都没有问题,为解决这个问题一个标准LSB就诞生了,LSB实际上描述了一组任何发型版本必须实现的API。

什么是LSB Init Script

用标准的API设计的初始化脚本

如何使用LSB Init Script

直接举例来讲吧,例如我想我的机器reboot的时候自动运行~/sayHello.py 的脚本.

首先创建一个脚本文件 say_hello (没有拓展名)

#!/bin/bash

### BEGIN INIT INFO
# Provides:          say_hello
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Short description
# Description:          Full description
### END INIT INFO

start() {  
 nohup python ~/sayHello.py & #后台运行脚本
}

stop() {  
  #do nothing
}

case $1 in  
  start|stop) $1;;
  restart) stop; start;;
  *) echo "Run as $0 <start|stop|restart>"; exit 1;;
esac
猛烈的一次头痛(ಥ﹏ಥ) 02 August 2016 23:00:06

偏头痛困扰了许多年了,昨天经历了少有的几次强烈的偏头痛,简直可以用痛不欲生来形容,看来真的需要认真的调理一下了吧。(ಥ﹏ಥ) ( ⸝⸝⸝°_°⸝⸝⸝ )

发现一个不错的壁纸 26 July 2016 22:00:06

今天打开window 10的时候发现锁屏壁纸非常好看,感觉非常适合Mac使用,果断想办法下载下来。

你也喜欢的话欢迎下载:

http://pan.baidu.com/s/1qYmwlwo (电脑)

http://pan.baidu.com/s/1nvzt2A1 (手机)

之前有一次启动tocmat之后无法访问页面,并且也没有任何错误信息输出,但奇怪的发现有些启动日志并没打印完全,后来等了5分钟左右的时候日志就全部打印完了,tomcat也变得可以访问了,但是足足等了5分钟。

出现这个问题的原因是Tomcat 版本非常依赖于SecureRandom这个类去生成随机的串用作seesion ids等等,而SecureRandom依赖于熵(entropy)的输入。

熵(entropy)是描述系统混乱无序程度的物理量

如果系统熵过低,tomcat启动过程中(加密程序)就会等待系统产生足够的熵才进行一下一步启动从而导致启动过程变慢。

所以解决方案就是指定一个非空的熵(entropy)给SeureRandom。

方案1:

-Djava.security.egd=file:/dev/./urandom

方案2 (推荐):

apt-get install haveged  

Haveged 的目的是提供一个简单易用的不可预测随机数生成器,基于 HAVEGE 算法。Haveged 可以解决在某些情况下,系统熵过低的问题。

使用下面命令查看当前系统收集到的熵,如果低于1000那么说明系统的熵比较底,那么最好能够安装haveged

cat /proc/sys/kernel/random/entropy_avail

macOS Sierra默认壁纸下载 14 June 2016 22:00:01

苹果2016 WWDC开发者大会已经落下帷幕,此次大会带来了系统的全面升级(其实我感觉并没有多大变化),不过目前大家可以安装的只是预览版,多半只为娱乐和尝鲜,距离正式版发布的日期还有好几个,那么我们先下载几张壁纸体验一下最新的Sierra系统吧

下载链接

点击下载Mac版

点击下载iPhone版

点击下载iPad版

点击下载4K版

Mac系统下安装Consolas字体 14 June 2016 10:00:40

Consolas是一套等宽的字体,属于无衬线字体,由Lucas de Groot设计。这个字体使用了微软的ClearType字型平滑技术,并随同windows Vista,Office 2007及Microsoft Visual Studio中发行。

默认情况下Mac系统是不带Consolas字体的, 需要手动安装,以下步骤是基于你的Mac已经配置了Homebrew(OS X下的套件管理器)前提下进行,如果没有配置,请先移步如何安装配置Homebrew

配置完成后依次输入以下命令:

$ brew install cabextract
$ cd ~/Downloads
$ mkdir consolas
$ cd consolas
$ curl -O http://download.microsoft.com/download/f/5/a/f5a3df76-d856-4a61-a6bd-722f52a5be26/PowerPointViewer.exe
$ cabextract PowerPointViewer.exe
$ cabextract ppviewer.cab
$ open CONSOLA*.TTF

出现安装字体的弹窗后点击“安装字体”即可完成。

参考链接:http://ikato.com/blog/how-to-install-consolas-font-on-mac-os-x.html

IELTS词汇 14 June 2016 06:00:37

名词 动词 形容词 (none, verb, adjective)

production produce productive

analysis analyse

industry industrialize industrial

词与反义词 (words with its opposite)

comedy tragedy

同义词 (synonym), 词义相近,并非百分百同义,写作或者口语中可以替换

important significant critical

good positive promising

disadvantage demerit drawback

enough sufficient

Voiceover

Four kilometers below the waves, at the bottom of the Atlantic, investigators search for the reminds of Air France Flight 447.

228 people are gone.

Air crash investigators face a monumental task. The answers may lie in the wreckage. But finding that evidence will take years.

Air France 447 is crossing the Atlantic ocean,the Airbus A330 is flying an 11-hour direct route to Paris.

58 years old Captain Marc Dubois is in command, he's been a pilot for well over half his life, and now he's one of the most senior captains at Air France.

First officer Pieere-

当前第 1页,一共 2页