Blog

Walkthrough of Fibonacci Golf

Jan 13, 2018
CHECKIO, PYTHON

题目需求 题目的原意可以总结为:以尽量简洁的方式,完成各种类Fibonacci计算。 提到的类型有: fibonacci: f(0)=0, f(1)=1, f(n)=f(n-1)+f(n-2) tribonacci: f(0)=0, f(1)=1, f(2)=1, f(n)=f(n-1)+f(n-2)+f(n-3) lucas: f(0)=2, f(1)=1, f(n)=f(n-1)+f(n-2) jacobsthal: f(0)=0, f(1)=1, f(n)=f(n-1)+2*f(n-2) pell: f(0)=0, f(1)=1, f(n)=2*f(n-1)+f(n-2) perrin: f(0)=3, f(1)=0, f(2)=2, f(n)=f(n-2)+f(n-3) padovan: f(0)=0, f(1)=1, f(2)=1, f(n)=f(n-2)+f(n-3) 题目的原始代码非常简单: def fibgolf(type, num): return 0 if __name__ == '__main__': assert fibgolf('fibonacci', 10) == 55 assert fibgolf('tribonacci', 10) == 149 assert fibgolf('lucas', 10) == 123 assert fibgolf('jacobsthal', 10) == 341 assert fibgolf('pell', 10) == 2378 assert fibgolf('perrin', 10) == 17 assert fibgolf('padovan', 10) == 9 思路 其实从题目给出的例子来看,各种数列在计算方式上都是高度类似的。我们只需要将计算方式和初始数值确定,就能确定各种f(n)的值。 ...

Walkthrough of Probably Dice

Jan 13, 2018
CHECKIO, PYTHON

题目需求 题目的原意可以总结为:求N个M面骰子(骰子点数为1-M)掷出X点数的概率。 其中,N,M,X依次为我们需要编写的函数的三个参数。返回值是0~1的一个数字,需要4舍5入保留四位小数。 这是题目的原始代码: def probability(dice_number, sides, target): return 0.0 if __name__ == '__main__': #These are only used for self-checking and are not necessary for auto-testing def almost_equal(checked, correct, significant_digits=4): precision = 0.1 ** significant_digits return correct - precision < checked < correct + precision assert(almost_equal(probability(2, 6, 3), 0.0556)), "Basic example" assert(almost_equal(probability(2, 6, 4), 0.0833)), "More points" assert(almost_equal(probability(2, 6, 7), 0.1667)), "Maximum for two 6-sided dice" assert(almost_equal(probability(2, 3, 5), 0. ...

一些你不为熟知的运动知识

May 29, 2016
Healthy, Workout

即使完全不运动的人,也明白运动对身体的好处。但是这里我想列举一些平时不为熟知的运动知识: 大约80%的健身会员是完全没有使用过的 仰卧起坐会增强你的腹肌力量,但是确不会给你希望的6块腹肌。因为腹肌是否明显主要取决于体脂肪比 随着心肺功能的提升,你的resting HR会越来越低。(我自己现在是平均52左右) 高强度运动45分钟,最多可能会加速身体新陈代谢14小时。这样会在运动之后额外燃烧150~200大卡的热量 合理锻炼7分钟,可能比不合理的60分钟锻炼对身体帮助更大 锻炼会产生新的脑细胞 会让你心情更好 不吃饭=让身体饥饿=告诉身体储存脂肪 尽管都之道运动有益健康,但是能坚持锻炼的人很少

实例配置分布式Smokeping

May 17, 2016
Distribution, Linux, SmokePing, Tutorial

在 前一篇文章中,简单的介绍了如何在Ubuntu 14.04中安装smokeping,安装之后smokeping是以单机的形式来运行。但是在这样的情况下,安装smokeping的主机测试的是自己到被检测点之间的状态。又或者单独一台主机的性能已经完全不能满足监控的需求。这时,我们需要考虑采用分布式smokeping来进行监控。分布式smokeping相比单点有这样一些重要的优势: 分担单台主机负担。 可以通过不同的网络环境监控对于同一监控点。 避免干扰因素。 分布式Smokeping架构 Smokeping采用Master/Slave的主从结构架构进行分布式部署。默认开启Master和Slave所有的探针检测远程主机(Master监测功能可以通过配置关闭)。一个Master可以管理多个Slave,而且Slave配置起来也很简单。 Slave从master上获取自己的配置信息,所有的检测数据以及web呈现都在Master上。Slave只负责按照从Master获取的配置信息进行数据检测,所以Master/Slave的架构也只需要维护Master的配置文件即可,其他的信息Slave都会动态获取到。 简单说,一个Slave就是一个单独的实例。Slave的配置信息来自于Master,不是来自于本地配置文件,这样就减少了大量的维护成本。Slave在完成每一轮的作业任务后,就会尝试连接Master提交自己的结果。如果无法连接到Master,这个结果将会和下一轮的结果一块发送给Master,Master收到结果后,将检测的数据存储在本地的数据文件中,以便于重启了Smokeping实例后,不会丢失这些数据。 Smokeping分布式的检测方式是被动模式,由Slave启动时向Master发起连接。主从通信验证是通过类似于rsync的密码认证方式,在启动slave节点时指定–shared-secret=filename来和主进行密码验证。 从官方获取的Master/Slave的架构图可以看出,Slave是将采集的结果汇集给Master。 [slave 1] [slave 2] [slave 3] | | | +-------+ | +--------+ | | | v v v +---------------+ | master | +---------------+ 分布式Smokeping配置 Master配置部分 配置一个主从结构,需要在Master的配置文件中添加Slave的部分,所有Slave需要被定义在Master的Slave section中。 1.在配置文件中定义Slave *** Slaves *** secrets=/usr/local/smokeping/etc/smokeping_secrets.dist # 定义通信用的秘钥文件,里面包含slave的名字以及对应密码 + Slave1 # slave的名字 display_name=Slave1 # slave的别名 location=changzhou # 这个字段用来定义slave主机的位置,类似于description color=0000ff # slave收集的数据在图像中显示的颜色, 2.将定义的Slave节点分配给你需要监控的主机 *** Targets *** # 定义一个菜单,这个值将会作为data下的一个目录名被创建,属于这个菜单下所有数据都会被存放在这个目录下 ++ changzhou # 定义web上显示的菜单名 menu = 常州机房 # 定义web上显示的头部名 title = 常州机房 # 定义一个主机,这个主机的数据将会被存放在 data/changzhou/29gui目录下 +++ 29gui<-(xxx. ...

smokeping中DNS监控配置

May 15, 2016
SmokePing, DNS

smokeping的一个很大的优势是其丰富的probe。最近根据客户需求,需要监控DNS解析的延时情况。不过smokeping中DNS监控配置遇到了一些预想之外的问题。 根据 官方的文档,一共需要两个步骤: 在Probes配置中增加相应的DNS probe 在Targets中增加自己的需要监控的DNS域名 本来应是很简单的过程,不过实际实际的配置过程中,没有对每个参数的意义完全理解,导致自己走了一点点弯路。 以使用dig作为probe为例,最小化配置如下: 在Probes中增加相应的配置 +DNS binary = /usr/bin/dig 在Targets中增加需要监控的目标 + mytarget probe = DNS #以下三个参数都必须配置,否则无法采集数据 host = my.host lookup = www.example.org server = ns1.someisp.net 自己尝试的过程中,由于host, lookup, server三个参数没有配置齐全。所以导致很长时间都没有出图。所以,如果你需要配置使用dig作为probe来监控DNS服务质量,请一定要配置这三个参数。

自动翻墙路由器制作 Part. 3

May 13, 2016
DIY, GFW, Router

前面两篇( Part.1 和 Part. 2)中,我们完成了路由器的刷机和基础设置。这一篇作为收尾,我们需要完成剩下的部分——脚本配置。 chnroutes 我们为了实现流量的自动分流,需要通过设置路由将访问国外的流量通过VPN,访问国内流量通过原有网关来实现。 虽然获取所有注册国家为中国的IP地址不难,但既然我们很幸运的已经有了现成脚本,也就不要再重复发明轮子了。chnroutes是一个非常不错的项目来导出所有的中国IP。 #!/bin/sh set -x export PATH="/bin:/sbin:/usr/sbin:/usr/bin" LOG='/tmp/autoddvpn.log' LOCK='/tmp/autoddvpn.lock' PID=$$ INFO="[INFO#${PID}]" DEBUG="[DEBUG#${PID}]" ERROR="[ERROR#${PID}]" echo "$INFO$(date "+%d/%b/%Y:%H:%M:%S")chnroutes.sh started" >> $LOG for i in 1 2 3 4 5 6 7 8 do if [ -f $LOCK ]; then echo "$INFO$(date "+%d/%b/%Y:%H:%M:%S")got $LOCK, sleep 15 secs. #$i/6" >> $LOG sleep 15 else break fi done OLDGW=$(nvram get wan_gateway) route del default gw $OLDGW sleep 1 route add default gw $OLDGW metric 100 sleep 1 route add -net 10. ...

自动翻墙路由器制作 Part. 2

May 12, 2016
DIY, GFW, Router

在 上一篇文章中,我们已经搞定了路由器刷机问题,这一次我们需要做的是进行路由器的基本配置。 基本配置 我们首先不考虑NAS BT下载设备的存在。我们无法正常访问国外的一些网站,除了链接被reset之外,还有一个原因是DNS污染。DNS污染让域名不能解析正确的IP地址,而是给出黑洞IP,让我们所有的链接都超时。不过也正式这样的黑洞IP,让我们在后面可以用来做健康检查。为了避免DNS污染,我们所有的DNS解析都要通过国外的DNS服务器进行解析。常用的有OpenDNS和Google DNS两个,用哪个没有本质区别,全看个人喜好。baidu差的原因,就是文章都是重复的。如果你搜索ddwrt翻墙的DNS设置,我相信你很难找到有实际参考价值的文章。DD-WRT内置了两种DHCP服务器,标准的uDHCPd和DNSMasq。由于我们需要使用DNSMasq来实现防DNS污染的功能,所以DNSMasq是必须打开的。设置如下:为了让AP下面所有的设备都能获得我们设置的外国DNS服务器,我们通常有两种方式进行设置。 DHCPd 默认情况下,DD-WRT会启用DNSMasq作为DHCP服务端,这就导致了在设置页Setup->Basic Setup->Network Setup->**Network Address Server Settings (DHCP)**部分的三条Static DNS设置后不起作用。 因为这里的选项是对应标准uDHCPd服务端的,就算设置了分配给DHCP客户端的DNS服务器地址还是路由器的内网IP,也就是还会默认以ISP提供的DNS解析服务器为准。这时就需要取消下面选项中的Use DNSMasq for DNS,让标准服务提供客户端DNS解析服务器地址。 虽然当然这样会消耗更多的内存,不过现在路由器性能强劲,这点消耗其实不算什么。 DNSMasq 上策就是到Services->Services->DNSMasq->Additional DNSMasq Options中填入如下内容:dhcp-option=6, 8.8.4.4, 8.8.8.8,这样应用设置并让客户端重新连接刷新DHCP信息后,就可以看到已经在使用指定的DNS解析服务器地址了。 打开JFFS2 我们已经完成了基本的设置,接下来需要做的就是开辟一个即使重启也能保存我们脚本的空间——JFFS2。在Administration->Management->JFFS2 Support中,选择Enable JFFS2 虽然启用了JFFS2,不过默认情况下可用空间是0,我们需要选择Enable Clean JFFS2,然后在页面的最下方选择Apply。如果没有问题,就能看到可用空间已经不为0 KB了。 PS: 实际数字可能和图上不同。PS 2: 每次Enable Clean JFFS2,然后Apply之后。Clean JFFS2都会自动变成Disable。PS 3: 有些型号的路由器需要无论怎么Clean JFFS2都是无法使用的。这时请Google。 SSH 虽然我们默认可以telnet上路由器来写脚本,但这远没有直接打开SSH服务用SFTP上传本地完成的脚本方便。虽然这不是必须配置的内容,但我还是强烈建议打开SSH。在Services->Services->Secure Shell中,打开SSHd。 这里最重要的就是SSHd必须打开,其他的可以按照自己的需要来设置。当然,有了SSH,下面的telnet就别忘记关闭了。在下一篇文章中,我们就要开始配置脚本让我们的流量能够自动根据我们访问的内容使用不同的网关。

自动翻墙路由器制作 Part. 1

May 11, 2016
DIY, GFW, Router

原因 互联网技术与英语在网络上被称为现时了解世界的两大必要手段,这其中的互联网技术也就是翻墙。虽然翻墙的技术已经非常的多,而且也非常成熟,但是基本都是对应了单机如何配置。现今在家里只有一台设备需要上网的情况已经几乎不存在了,所以一台能够自由访问网络的翻墙路由器才是最需要。 前些时候的autodvpn是一个不错的方案,但是碍于更新问题,有很多地方没有说清楚。如果自己制作翻墙路由器,在没有技术背景的前提下,往往是很难解决的。 这篇教程希望通过一个最简单的方式告诉大家,如何从购买路由器开始,做一款能够自动翻墙的路由器。 设备选择 硬件比较 要自己的路由器能够自动的完成这一系列的动作,自己能够在家里轻松享受互联网,是需要一定的基本条件的——路由器支持高级的配置。支持高级配置无非即是脚本,或者一些其他非web方式的配置方式。满足这样条件的路由器通常有这样几种方案: ddwrt。通过将普通的家用路由器刷上ddwrt来实现ssh登录路由器的配置方式。这样的成本相对比较低。说相对是因为现在一些家用路由器已经比较昂贵,买下来实际可能不便宜。 Cisco ASA5505。是的,你没有看过,这也是一个备选方案。当然我不会让你去和Cisco的代理商去购买一台新的设备再加上天价的License,我说的就是 TB上的二手货们。别看这些二手货成色不怎么样,本身定位于商用(虽然是低端)让他各方面的器件都有很不错的生命周期。只要买到的设备没有故障,可以使用很长的时间。而且ASA本身配置很简单,硬件到手之后很快就能完成所有的工作。不过,5505自身不带wifi,所以你可能自己要准备一个接在后面的家用路由器来做wifi接入。 如果你家有不用的老主机,可以用VSR这样的东西来实现。如果你看得懂我在说什么,你也应该知道怎么配置来实现自己的想法。 这次我用最常见的ddwrt来写这篇教程,需要ASA和VSR的同学,你们多半自己能搞定,不要找我。 硬件购买 要使用ddwrt,最好的方式就是在 官网上查看什么样的设备是支持的。技术上选择的标准当然是性能越强越好,毕竟ddwrt扩展了应用性,也相应增加了对设备硬件的压力。选择好了就用自己最喜欢的方式买到手就行,如果不出意外,TB依然是最省力的方式。 后面按照Linksys E4200为例来讲解。这个设备很漂亮,而且非常稳定。除了贵之外没有缺点……=_= 刷机 拿到了设备第一件事就是按照官方教程刷机。为什么我要强调官方两个字,就是因为总有人喜欢baidu一些乱七八糟的文章——不知道是哪一年或者拼凑的哪里的文章,搞得最后一堆麻烦。 如果你顺利完成刷机,我们就准备进入配置阶段了。

在Ubuntu上部署Smokeping

May 10, 2016
Linux, SmokePing, Ubuntu

Smokeping是rrdtool的作者Tobi Oetiker的作品,是用Perl写的,主要是监视网络性能,包括常规的ping,用echoping监www 服务器性能,监视dns查询性能,监视ssh性能等。底层也是rrdtool做支持,特点是画的图非常亮,网络丢包和延迟用颜色和阴影来表示。 #部署smokeping ##基础系统安装 这里并不需要特别说明。我选用的是Ubuntu Server 14.04。 ##配置时间同步 既然是监控,第一步当然还是需要配置好时间,让我们所有的数据在时间上能进行统一。方便我们以后需要的时候能够多个数据进行综合比较。 $ sudo apt-get install ntp 其实到这里我们就完成了。可以检查一下: $ ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== -mail.fspproduct 209.51.161.238 2 u 50 128 377 1.852 2.768 0.672 *higgins.chrtf.o 18.26.4.105 2 u 113 128 377 14.579 -0.408 2.817 +mdnworldwide.co 108.71.253.18 2 u 33 128 377 47.309 -0.572 1.033 -xen1.rack911.co 209.51.161.238 2 u 44 128 377 87.449 -5.716 0. ...

工作场合如何穿衣?

May 5, 2016
career, dressing

我在工作中看过各种各样我个人认为并不合适的服饰,有些实在过于个性或者怪异;有些虽是想表现出庄重的感觉,但是无奈总体现出了一种廉价感。 知乎上葛巾有个不错的专题,谈到了各种穿衣的选择。虽然我个人并不100%的认同,但确实是对于缺乏穿衣知识的人有莫大的帮助。除此之外,我认为几点是需要特别注意的: 选择经典款式。如果购衣有明显的预算,或者你不敢保证自己独特的时尚能让人欣然接受,那么经典的款式和颜色绝对是不会错误的选择; 买高质量产品。做好计划,买预算内最好品质的衣物。一件好的衣物价值大于10件普通的。但是价格往往比那10件还便宜; 学会保养。除了车以外,好的衣物也是需要保养的; 少而精。当然,如果女性的话,可以稍微多一些。但是有品质的衣服才是最重要的,一个大衣柜里找不出好的衣服才真的是“杯具”; 合身。衣物务必合身,不合身的衣物会让你穿着后的效果大打折扣。如果是男士,定做西服和衬衣并不比买一套成衣贵多少。但品质却好了很多。 选择适应性广泛的衣物。如果一套衣服什么都很好,但是一年只能穿3天,那么这可能真的不适合买。这点对于居住在四季分明地方的人尤为重要。 最后一点,我想单独说明:不要按照你现在的地位来打扮,而是按照你希望达到的地位来尽力。 PS: 我刚上去找了找,发现葛巾已经退出知乎了。