木木抬高腿,刚要一脚踩下去,突然想起谁给她说过,小强不能用脚踩。她顺手就取下墙角的夹子,把小强夹住放在了水槽里,她封住出水口后打开水龙头。水声流着哗哗的,她看着水槽的水位慢慢升高,看着小强在水里漂浮着。
仔仔悄无声息的走到后面,说:“你干嘛呢?”
木木浑身哆嗦一下,吼道:“你干嘛呢?走路都不带声儿。想吓死我呀!”
仔仔:“你开着水都站这儿半天了,不浪费呀?”
木木:“我淹小强。听说小强不能直接踩死。”
仔仔:“拍死不就好了嘛”
木木:“拍死和踩死不就一样了吗?”
仔仔:“那淹死和踩死又有什么区别?”
木木:“……”
仔仔:“之所以说不能踩死,是因为小强的卵会附在鞋底上,然后你到那儿,卵就被带到那儿。”
木木:“所以我淹死它。”
仔仔:“可是你就算淹死了小强,小强的卵也还是存活的呀。”
木木:“小强这么强的吗?”
仔仔:“不然呢?人家可是繁殖力超群,你这水冲冲的,浪费。”
木木:“……有多强?”
仔仔:“你知道吗?小强只需要交配一次就可以终生产生受精卵的。”
木木:“不知道,这么厉害吗?”
仔仔:“小强的卵在它的卵荚里面,卵荚光滑,质较坚硬,还具有防水功能,你说你能淹死它们?”
木木:“就跟豆荚一样吗?那它的一个卵荚里面是不是也有很多卵?”
仔仔:“……嗯,可以这样说,小强一次产生卵荚的数量平均约50个,少的话10多个,多的话90多个。然后一个卵荚里面含卵约16个。”
木木:“啊,那按平均的算,50乘以16,平均一次产卵800个,800只小小强。”
仔仔:“哟,你计算能力还有提高嘛。”
木木摸着脑袋嘿嘿笑着,问道:“那一只小强一生要产几次卵呢?”
仔仔:“每隔7到10天就可以产一次。”
木木一脸惊讶,歪着脑袋思考计算着……
仔仔:“别算了,一只小强一年可繁殖几十万只,最多可达百万只。”
木木:“我**,那小强的寿命是多长呀?”
仔仔:“2到3年吧。”
木木看着水槽里的小强还安逸的漂浮着,说:“算了,我还是踩死它吧。”
仔仔:“嗯,你踩死不踩死,它现在体内的800只小小强也多活着。”
木木:“可是,如果我踩死的是男小强,它们就少了一个交配对象了。”
仔仔:“日本北海道大学研究团队在17年3月13日公布了一个新的研究成果。”
木木:“什么结果?”
仔仔:“分布在日本的美洲小强只要有3只以上的雌性,就可在不与雄性交配的情况下进行单性生殖。”
木木:“什么意思?”
仔仔:“就是小强们可以从两性繁殖切换到单性繁殖。”
木木:“我**,这么厉害。”
仔仔:“对呀,所以你踩死、打死、淹死,都没有啥区别。”
木木:“那我烧死它。”
仔仔:“……可以。”
(The End)
注:未经授权不得转载,更多请关注微信公众号“木木微言”
注:连载系列(一)
小苏站在女生宿舍楼下,低着头看着手机,一只脚踩着石地上的小石子旋转着,偶尔抬头看看二楼,偶尔抬头看看路过的女生。过了10分钟后,小飞蹦蹦跳跳地出现在了他面前,问:“小猫是不是很可怜?你看我昨天在网上给他买的东西。”说完就把手机递给了小苏。
晚上,小飞看着小猫睡在窝里懒动懒动的,食盒里的饭一口也没有动。心想,不会是昨天洗澡给洗感冒了吧。于是发了个微信给小苏:亲爱的,今天晚自习我不去了,小猫好像感冒了。小苏回道:好的,我自己去。
第二天,小苏仍旧在小飞寝室楼下等着她,等着她一起去食堂吃饭。小飞下了楼,慢慢地走到小苏跟前,对小苏说:“昨晚小猫死了,你送的红绳子,我和小猫一起埋在花丛下了。”小苏很惊讶,刚想开口问为什么,小飞打断他说:“你可以正大光明地去参加化妆舞会了。”说完,小飞头也不回地朝宿舍奔去。留下小苏一个人愣愣地站在楼下,当小苏看到小飞上到二楼,他大声喊到:“还吃不吃饭呀!”
小飞一路冲回到寝室,躺着被窝里大声哭起来。这时手机短信提示声响起,她急忙拿起手机看到:取货码G-301,您的快递已到校园北门传达室,由于快件较多,请速速取走。小飞扔下手机,起身坐起,用手擦干眼泪说:“小猫都死了,还要什么快递。”
(The End)
注:未经授权不得转载,更多请关注微信公众号“木木微言”
|
|
|
|
|
|
|
|
|
|
|
|
(The End)
]]>对原始图片大小等进行缩放,以便达到需要输出的合适尺寸
|
|
最终效果
原图
文件名pixel2Char.py
(The End)
]]>Mac最好能安装Homebrew,这样你安装软件会方便得多,当然也可以手工类似Linux下进行编译安装,这个看个人喜好。
|
|
注意:这个命令因github地址调整过一次,因此和大部分文章提到的地址不太一样,可去官网查看https://brew.sh
|
|
|
|
因Mac OS X 10.11中引入Rootless机制,作用如下:
关闭
开启
|
|
|
|
原因:Apple has deprecated use of the system-supplied OpenSSL libraries and with the latest releases no longer supply the header files needed to build with them. They are very old anyway. So, you need to supply a version of them. The easiest way is to get them from a third-party package manager like Homebrew or MacPorts but you certainly can download an OpenSSL source release from https://www.openssl.org and build the libraries themselves. If you do not have administrator access, you will probably need to modify the OpenSSL build using at least –prefix to install to a non-system location and then rerun Python’s ./configure with CFLAGS and LDFLAGS pointing to the installed location of your OpenSSL.
(大致意思就是说,Apple已经在高版本系统中移除了系统提供的OpenSSL库,新版本不再提供与它们一起构建所需的头文件
解决方案:下载Mac版的Python包https://www.python.org/ftp/python/3.6.1/python-3.6.1-macosx10.6.pkg ,安装成功后执行如下命令
|
|
然后卸载pkg包即可。
原因: Python3.x不向下兼容出现TypeError: Cannot cast ufunc subtract output from dtype(‘float64’) to dtype(‘int64’)
解决方案:将数据进行astype(“float64”)转换
如 ARMA(data, order = (p, q)) 转换为
ARMA(data.astype(“float64”), order = (p, q))
如果后面遇到问题继续补充!
(The End)
]]>因MySQL我们通常采用跨平台编译cmake,而不是make编译,因此需要下载cmake包,另外从MySQL 5.7.5开始Boost库是必需的,因此也需要下载boost包:
cmake:wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz
boost:wget https://jaist.dl.sourceforge.net/project/boost/boost/1.64.0/boost_1_64_0.tar.gz
mysql5.7:wget https://dev.mysql.com/get/archives/mysql-5.7/mysql-boost-5.7.16.tar.gz
如果之前已经安装过cmake的可以跳过这步
|
|
|
|
|
|
|
|
(The End)
]]>
|
|
|
|
|
|
|
|
|
|
|
|
–enable-languages //指定 gcc 能编译哪些语言的文件,每种语言用逗号分隔, 例如 c,c++,Java。
–disable-multilib //默认 gcc 能在32位系统上将代码编译成64位程序,或者在64位系统上编译成32位程序,如果加上这个编译选项则表示关闭这个gcc的交叉编译功能。
|
|
注:如果机器是单核就直接make && make install ,参数-j4是利用多核编译,便以速度要快很多。
|
|
(bs=32k指定每个扇区占用32kb,读入了32768个区段,输出了32768个区段,bs参数的目的在于指定每次读取及输入多少个bytes;由于磁盘存取的最小单位为扇区,因此设置bs也等于设置每个扇区的大小;而count的目的则在指定可以使用多少个扇区.因此,可以使用的硬盘空间就等于bscount.以上范例为例,可以使用的硬盘空间等于3232768=1048576(KB),亦等于1G)
格式化swap文件执行mkswap命令,将myswap文件格式化成s文件系统,系统才能使用,切换到/tmp目录,并执行以下命令:
启动swap分区
如果需要停止则执行 swapoff /tmp/myswap
检查swap分区
执行如下命令:
|
|
删除原软链
拷贝GCC编译的新版本libstdc
创建软链
(The End)
]]>
|
|
如果返回OK则说明内核支持 MPPE,否则内核就没有集成,需要升级内核高于2.6.15。
|
|
则说明可以安装。
|
|
如果centos6.4内核版本大于2.6.15则可以不做上面的检查,否则需要自行安装PPP
|
|
如果返回0则表示不支持;输出为30或更大的数字就表示支持。
PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了
对于32位CentOS,执行
对于64位CentOS,执行
安装pptp过程中可能会出现异常,常见的是pptp于ppp版本不兼容,这样就只能选择合适的ppp版本或者pptd 版本来相互兼容了。
首先修改ppp配置信息,它在/etc/ppp/options.pptpd
如下图:
然后修改配置/etc/ppp/chap-secrets,这里面就是设置vpn账号和密码的文件
其中格式:username pptpd password **
//username是你的vpn帐号,password是你的vpn的密码,表示对任何ip,记得不要丢了这个星号。如下图:
接着需要修改pptp配置信息
修改内容如下图:
另外还需要修改一个内核配置让其支持转发,否则是不能上网的。
修改内容如下图:
|
|
启动防火墙需要特别注意,我们上面指定了一个专用网络ip段,因此需要设置转发规则
如我的防火墙设置:
将上面红色圈中的vpsip修改成自己的vps ip即可,如果vps有多个网卡就需要使用-o ethxx来指定可以上网的网卡,如上图最上面红色框中的2行中使用了-o 来指定网卡。
最好保存并重启防火墙。
然后重启pptp服务即可。
另外也可以将pptp和防火墙设置成开机自启
最后展示2张链接成功的图:
(The End)
]]>处理器:惠普Folio 9470m采用了Ivy Bridge i5 335u处理器
内存:8G 金士顿1600MHZ + 4G 海力士1600MHZ
显示器:Intel HD Grpjics 4000 1366 x 768
硬盘:120G SSD
声卡:Intel HDA(Intel High Definition Audio )
网卡:本身自带inter,无解,淘宝买块usb无线网卡驱动,记得一定是能支持10.11的。
系统:WIN10+MAC10.11。
下载如下工具:
win下面使用系统自带磁盘管理或磁盘工具DiskGenius进行分割大概8G的分区,不要格式化了。用来将mac 10.11写入该引导分区,另外还需要准备一块较大的空间用来安装Mac系统(>30G以上吧,不然你会后悔的)。
使用硬盘助手ddmac并以管理员权限运行 ,选择懒人版镜像和上面未被格式化的分区(分区别选错了,可以看分区大小区分),只保留写入复选框,其他去掉,然后写入镜像,如果无法写入的,可以先去掉写入选项,选择其他分区,再选择回未格式化的分区勾上写入。
硬盘分区写入后,可使用分区软件DiskGenius调整分区参数为AF。
安装hfs+ for windows或者macdriver,用来在win下面管理hfs+格式分区,也就是苹果分区。安装完之后就可以在win下面看到上面写入分区的引导镜像内容。
将键盘驱动和鼠标驱复制到上面写入的硬盘分区下的/Extra/Extensions/下面,删除System/Library/Extensions/下面的IOBluethooth开头的蓝牙驱动(不然安装过程会要求接入苹果的蓝牙键盘和鼠标),后续该路径简写为/S/L/E/。
将下载的win版版色龙复制到win系统根目录C盘新建文件夹HJMac下,使用easybcd将变色龙引导写入到win系统引导中。
重启系统后可以看到引导中多了一个刚才创建的引导,选择进入选择我们上面写入的硬盘分区,使用命令行模式启动-v -f -x (这样如果出现无国可以方便排查)
顺利的话能进行安装,但是这里我们看看进入到安装界面时屏幕分辨率是否正常,如果不正常的,可以在顶部选择磁盘工具中的查看系统信息,找到对应的图形卡中对应的两组id值(设备ID和修正版ID)纪录下来,我这里分别是0x0166,0x0009,如图:
点击顶部的黑苹果选择重启系统到win,将刚才纪录的两组ID值注入到/Extra/org.chameleon.Boot.plist中。如可添加
注:Graphics Mode 可以指定分辨率,EthernetBuiltIn 是否内建网卡,GraphicsEnabler 是否开启显卡侦测,HD4000PlatformId显卡驱动id , 如果是HD5000就改成5000,ID值就是0x0009,解释下为什么我这里是9,在计算机内部指令是0x0009 对应0x09和0x00,这里所以就是值9,ig-platform-id 这个值就是刚才的纪录的两组合ID,注意顺序。InjectIntel-ig这个值需要注意顺序为09006601(分解为0x09,0x00,0x66,0x01)。IntelCapriFB 这个是1366 x 768 分辨率的都写3,其他分辨率的值不一样。最后一个值比较重要,是一组显卡神奇string注入代码,直接使用即可。
修改完之后,重启上面第8步操作,此时来到安装界面分辨率应该是正常的,另外可以到磁盘工具下面的系统信息中找到刚才的图形卡,可以看到是总线是内建状态(表示驱动成功)。
点击磁盘工具,将上面准备的大于30G的分区抹掉,选择日志类型分区格式,退出磁盘工具后选择刚才创建的Mac分区进行安装,一般安装过程需要等待接近15-20分钟。
安装完成后会重启系统,先进入到win系统,将Mac引导盘中的/Extra 复制到Mac安装好的分区根目录下,然后到安装盘中删除/Extra/Extensions ,/Extra/SMBIOS.plist,这里说下为什么要删除,因为,本身/S/L/E/下面已经有/Extra/Extension/下面的驱动,删除SMBios.plist是防止无法登录iMessage,将鼠标驱动AppleACPIPS2Nub.kext和键盘驱动ApplePS2Controller.kext以及fsckSM.kext复制到/S/L/E/。
安装完成后会重启,来到刚才安装Mac分区,选择安装的Mac分区,并使用命令行模式-v -f -x 进行继续安装后续的操作,这个过程基本上不会出现问题。
这样应该可以顺利进入桌面,分辨率这时候应该是正常的,安装multibease,和kext wizard,前者是包含了一部分的驱动如以太网卡驱动、声卡驱动等等,可以方便的直接安装。到此为止电脑基本上就算正常了,如果无线网卡没办法驱动的,就买个usb的吧!
最后上一张安装完成的截图:
对于很多无法登录AppStore的看客,可以试着先内建以太网卡,或者使用蓝牙驱动创建en0,避免先安装无线网卡导致无线网卡变成en0,无法登录AppStore。
最后说下为什么上面介绍时说系统安装分区一定要大于30G,因为系统安装完之后基本上就到了20G+,剩余的空间就不会很多了,苹果系统下面进行无损扩容分区非常不方便,所以建议大家开始就将分区设置大一些。
然后说下怎么进行无损扩容,首先你需要有块移动硬盘或者普通硬盘能接入到电脑上的都行,将这块硬盘分一个区大概不要小于Mac目前的系统分区就够了,然后再Mac系统下使用磁盘工具把这个分区格式和成日志式。选择我们需要备份的Mac系统盘,在磁盘工具顶部选择“文件->新建镜像->Mac的镜像”,选择后填写好镜像的名称和备份的磁盘路径(刚格式化出来的分区),这个过程需要半小时左右,具体看导出的分区大小决定。结束后会在目标分区上生成一个名称.dmg格式的镜像文件。然后在win下面使用磁盘工具将分区进行合并好后,重新创建新的分区。使用win版变色龙来引导Mac到安装界面,选择磁盘工具,点击上方的“编辑->恢复”后,选择上面生产的dmg格式文件,恢复到新创见的分区上即可,如果分区格式不对,可以使用磁盘工具格式化为日志式分区类型。等待大概10分钟左右就可以将之前的系统恢复过来了,过程比较麻烦,所以建议之前将分区设置大一些。
(The End)
]]>下载地址可以到官方下载或者下载本站地址
修改redis配置文件/home/work/redis/bin/redis.conf 如下内容
为保证集群的稳定性,数据冗余为1则至少需要3台Master和3台Slave(即一主对应一从),那么我们将开启6个端口来支持这6个redis服务(端口分别为6380-6385)。因此需要将redis配置拷贝6份,我们将配置也重命名为redis.conf.端口号,如图:
可以按照/home/work/redis/bin/redis.server /home/work/redis/bin/conf/redis.conf.xxx 方式来启动6个实例,也可以批量启动
为了方便我提供了一个快速启动的脚本(见文末附件),即可以用如下方式启动、重启、或者停止服务。
如果执行顺利可以查看6个服务进程是否都已经启动。如果有问题可以按照日志进行排查(往往因为pid或log无权限写入,而导致启动失败)。
查看进程是否正常:
查看进程pid是否生成到对应文件:
上面操作完成后,6个实例之间并没有任何关联,现在需要用到redis-trib管理器,但它依赖于ruby,因此需要先安装ruby以及rubygems
安装ruby之前需要先安装开发包支持
|
|
|
|
格式如:/home/work/soft/redis-3.0.3/src/redis-trib.rb create –replicas ip1:port1 ip2:port2 ….
2)查看集群节点:
接下来我们向集群中添加一些数据,执行命令:
启动redis-cli时要加-c选项,不加-c选项如果查询到某个值不在该节点上会提示error
就能看到以错误形式显示出的MOVED重定向信息。
现在我们向集群中增加2个节点,一个Master和一个Salve节点,端口分别为(6386和6387)
首先和刚才一样复制2份redis配置,如下:
接下来启动新增的2个redis服务:
查看进程pid已经写入成功:
现在我们将端口为6386的节点作为Master添加到集群中,执行命令如:
我们再次查看集群节点可以看到端口为6386的node已经成为了Master.
接下来我们将端口为6387的作为Slave节点添加到端口为6386的Master下面,需要记录上图中的第一列中的MasterId执行命令如下:
查看一下添加的节点:
接下来我们可以对集群中的slots重新分配,比如我们需要将端口为6380的Master中的5000slot分配给6386端口的Master,则可以执行如下命令:
我们再次查询key为”yh_2”时发现已经重定向到了6386端口上。
我们在来看下一下集群节点:
最后附上本文资源:redis启动脚本, redis-3.0.3 , rubygem 。
(The End)
]]>这个长假对于我来说还是比较充实的,本次旅行的终点便是大家熟悉而又不陌生的五岳之首-泰山。下面看看泰山的位置吧
泰山位于山东省会济南市正南方向50km左右的泰安市(车道估计有70km)。
如果大家想想直接旅行去泰山,估计就只能去泰山了,因为登泰山肯定是一件费劲的事儿,到时候从泰山下来估计哪儿也不想去了,因此我们制定的路线并不是直接去泰山,而是先去周边的旅游景点。
泰山之前续-第一站:济南市
10月1日傍晚18:27在北京南站乘坐G2601踏上此次旅行的第一步,高铁在月黑的夜晚开着300KM/h的速度一路向南,在21:50分左右到达济南站,并入住离火车站300m左右的天虹商务酒店(当时的酒店费用是188/天),由于到时已经比较晚了,到处看不到商店买零食和水,结果在济南车火车站东侧的世纪华联超市(邮政宾馆旁)买了一瓶6元的水,结果被骗了,让我觉得山东人的豪气顿时全无。骗子居然利用世纪华联超市名义在济南火车站行骗,骗走大洋70,后果断报警,平生第一次打110,追回大洋,发现落难者竟络绎不绝的前来讨债,无语的发现卖的东西都是2012年的。警察同志告诉我,之前记者都来采访过但愁于没有证据无法断案,现在只好遇到一次报案就帮忙追回一次。还原现场:达到济南站晚上10点左右,到处看不到买零食和水的地方,仅仅注意到济南站东侧邮政宾馆旁的“世纪华联超市”,买了一瓶水6大洋,给他100,没注意到他竟然把100悄悄给撕掉一个角,并告诉我说这钱少了一个角,是真钱,让我在钱包里面找那个角,并把钱包拿来里面的钱翻出来,他看我钱包里面还有100的大洋,于是说他家进货全是零钱,换100大洋的零钱给我,事先觉得以为自己的钱有问题,这老板都不在乎,就答应了他换,于是乎开始了骗局找我184,我接过钱数了一下少10大洋,让他再数,他数了确实少,然后看见他补了10大洋,呃呃呃没有数钱拿着钱就走了,这就被坑爹了。骗子花样很多,有些情况是把你钱包翻个底,然后随手套走大洋。基于带着警察同志到店询问,骗子说忙刚才找错了,或者说你自己落下了,他帮你捡着的,没有可靠证据,无法立案。唉百度一把,结果一大把被骗都忍气吞声了。这是济南的第一印象!
第二天一大早便抽身去了传说中的大明湖(门票30元/位),也可以买通票(75元/位,包含大明湖景区30元、五龙湖景区5元、趵突泉景区40元),大明湖风景确实不错,如果围绕着湖转一圈估计的费一上午的时间,主要是水上娱乐,快艇、划船的人真不少,里面游玩的就像普通的游乐场没有两样,一般情况下不想去玩,主要是看湖畔风景。10月的大明湖吹着一阵阵的凉风,让人精神顿时抖擞,不愧是5A景点。后来去参观了老舍纪念馆、超然楼等等地方。
由于我们走的比较快,一上午过去了,我们差不多围绕着转了一个圈,其中的东湖是免费参观的。中午就在开元广场随便吃了点东西,便进入广场的一个鸿星尔克专卖店购物,当时的甩卖价让我心动的买了两件衣服,结果证明还是买对了。
一下子就到下午2点多了,由于时间关系,本想去五龙潭公园参观的,但是由于考虑时间因素,我们接着去了附近的趵突泉,这里的门票要比大明湖贵(门票40元/位),买票进园,一路都是都是泉(话说有888个泉眼,目前有史书记载的就有72个),清澈透明,风水宜人,真是适合养老啊。
于是这一天时间就这样过去了,水也就看完了,于是去看山~
泰山之前续-第二站:泰安市
10月2日8:05乘坐K8281次列车由济南站出发前往泰山站,由于这之间路程较短差不多不到一个小时的车程就到了。吃完饭,在泰山站寄存行李(车站都没有寄存的地方,只好在一个超市寄存,12元还是挺便宜的),立马前往附近的岱庙景点(门票30元/位),岱庙具体位置如下:
大约离泰山站不到5km,乘坐k37可以到附近(但是由于实在不太明白泰安乘车路线,第一次坐反了车,于是在那儿等了好久好久的车才坐回去)。岱庙可以堪称小皇宫,就像是故宫的缩影,在这里可以肉眼直接眺望泰山山顶,据说是皇帝专门修建眺望泰山的“别墅”。看看是不是像故宫
岱庙一游,约了下午5点的车去泰山看封禅(shan)大典(10月1日后第一场是在18点15分开始,进行2小时),多数人都是看第一场的,因为第二场晚上20点开始都要等到22:00去了,晚上山上特别冷,所以那时候的票价要便宜些,于是3点多就转车回火车站拿上行李到了泰山脚下–天外村,坐等预约大巴(票价10元/位来回)前往封禅大典目的地,因为我们买的套票(泰山门票127元/位+封禅大典门票D区168元/位),因此门票都在天外村广场取票,从天外村到封禅大典大概需要30多分钟的车程。
封禅大典确实是非常精彩,建议去登泰山的伙伴都去看看,各种表演凸显了各个朝代皇帝到泰山祭祀山神的壮观景象,而且在天烛峰的夜景也比较迷人,在这里一种复古的感觉悠然而生。
晚上8点多了,乘来的车又会到了太外村,在这里我们在KFC吃了夜宵,做了登山前的准备工作,大致晚上10点左右,由于太外村是车道上中天门,而登山的道在红门,于是提前买上登山杖,打车(15元)前往红门登山口。来到红门一看夜间来登山的人还是比较多,各种山上下山的人都在步行着,各种灯光照得路面台阶清晰可见。
大约晚上10点左右开始登山的前奏,由于自己带了帐篷,而检票处不让带帐篷,于是顺道带着溜进去,背着20公斤的行李移步青云,一波一波的人被我们甩在身后了,为了保持体力,没过多久我们放慢了节奏,慢慢登山,一路沿斗母宫、壶天阁、步天桥走走停停到达半山腰中天门,已经是凌晨12点多了,人此时也累的不行了,也没有再注意什么夜间景色,休息中顺便补充了一点食物,我们开始寻找搭帐篷的地方,由于很多地方都不太适合,十分钟之后继续前行,沿着云步桥、望人松、对松亭达到南天门,由于前半程已经非常疲惫不堪,因此下半程花了可以搭帐篷的地方,足足3个小时才到达南天门,在这里人山人海,到处都是睡着人,也找不到搭帐篷的地方,最后选择铺上防潮垫、裹着睡袋休息了2个小时,5点多左右爬起来开始看日出,结果由于山上雾霭蒙蒙满山阔,看不到什么云海,于是选择在继续前往玉皇顶,中途在山上吃了10元的“丰盛”早餐,大致步行了20分钟左右来到山顶,风相当大,在这里有祭祀,有求神、有购物的人群,看了看遍四处游玩去了,警告后天坞索道、桃花源索道,没过多久我们便又回到了南天门,在这里时而遇到小雨急下,时而大风凛冽。由于看日出的期望基本已经破灭,于是逗留到上午10点多左右开始下山。
由山顶下山,可谓是痛苦万分,每一步台阶都是多么的痛苦不堪,脚在不断的抖散,柱着登山杖步履蹒跚的一步一步往下摞,此时由于已经白天,夜间没有看到的景象此时也可以一收眼底,边走边停,快到中午的时候我们来到了半山腰中天门,由于实在苦不堪言,便在中天门买汽车票(30元/位)坐车下山了,此时的人又累又饿脚也痛,舒服的在车上度过了那么短暂的20多分钟,达到山脚下-天外村。
下午时分便乘坐k39路车去高铁站,在哪儿找了好几个地方吃饭,最后在一个超时里面自营的小饭店吃了一顿,饥饿难耐最终也吃得一干二净,傍晚18:15分我们乘坐G142次车从泰安乘车回到北京南,最终到家已经是晚上10点左右,自己做了一点东西吃了,就休息了。
总结:此次出行,首遇火车站骗子,这是第一印象;在山东吃的每一顿饭,我注意到都没有提供过餐巾纸,这是第二大印象;热情好客、乐于助人的场景亲身经历,这是第三印象。总之还是值得去的一个地方。。。
附上本次出行的各种门票:
大明湖门票:
趵突泉门票:
岱庙门票:
封禅大典门票:
泰山门票:
车票:
(The End)
]]>
|
|
如果在数据量较少的情况下上面的语句是ok,没有可以挑剔的地方,但是当数据量较大或者是超过了1000W以上呢? 这样的语句还ok 吗?这样的语句就没有一点问题吗?或许你可以执行
|
|
看看这样的SQL执行的效率有多高,很多程序员都会这样写,包括我看到的部分代码也一样。其实我们还是可以换一种方式来处理这样的问题,比如这样的SQL
|
|
其实有了这样一个条件,则可以过滤除开条件以外的数据,从而减少了扫描数千万的数据带来性能影响,在数据量较大的情况下,你的收益还是蛮高的,不信你就试试看吧~ 另外还有几种模式,一起介绍给大家。 mysql查询今天,昨天,近7天,近30天,本月,上一月数据的sql语句的优化,具体可参看如下: 查询当日的数据
|
|
查询昨天的数据
|
|
查询近7天的数据
|
|
查询近30天的数据
|
|
查询本月的数据
|
|
查询上一月的数据
|
|
希望能帮助各位路人。
(The End)
]]>
|
|
具体可以到官方(http://search.cpan.org/~capttofu/DBD-mysql-4.020/) 选择版本下载,我这里选择的是截止目前为止的最高版本DBD-mysql-4.020,好了下载我们一如既往的编译安装
|
|
安装完成之后,我们就可以去下载mystat脚本了,可以到本文末下载或者去作者博客(http://www.penglixun.com/) 站下载,下载好脚本到我们的服务器上即可运行它,执行脚本
结果如下图:
mystat.pl 下载
(The End)
]]>其实市场上的监控工具已经多得数不胜数了,现在比较流行的都是站长利用第三方进行监控自己的站点,很少自己来维护一套监控方案了,但是我觉得zabbix还是有必要了解和知道的,因为它的确很优秀,不仅能监视各种网络参数,保证服务器系统的安全运营;还能提供柔软的通知机制以让系统管理员快速定位/解决存在的各种问题。不管你是否关心,但是它真的做到了。
简单介绍一下zabbix:由主要由两部分构成,即zabbix server与可选组件zabbix agent,大家一看便知道其中一个是用作为服务端,一个是作为客户端代理。
zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台之上。而zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。zabbix agent可以运行在Linux ,Solaris, HP-UX, AIX, Free BSD,Open BSD,OS X, Tru64/OSF1, Windows NT4.0,Windows 2000/2003/XP/Vista/Win7/Win8…..)等系统之上,支撑平台多样化,满足了广大群众的渴求。
zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(trapping方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。
另外zabbix server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用,集有这么多功能于一身的zabbix确实很强大,看看它是否能帮你做到你需要的事儿。
zabbix的主要功能:CPU负荷监控、 内存使用监控、磁盘使用监控、 网络状况监控、端口监视、日志监视
zabbix的主要特点: 安装与配置简单,学习成本低、支持多语言(包括中文)、免费开源、自动发现服务器与网络设备、分布式监视以及WEB集中管理功能、 可以无agent监视、用户安全认证和柔软的授权方式、通过WEB界面设置或查看监视结果、email等通知功能。
到这里或许你已经被它的功能所屈服,接下来我们一起走一遍它吧~
我们可以去其官方 下载zabbix 服务端的tar包到自己的机器上来或者到本文末进行下载:
安装zabbix_server之前我们需要安装mysql和其依赖的一些lib库,这些你懂的,如mysql-devel依赖,net-snmp依赖,libcurl依赖、perl-DBI。
mysql安装不在本篇介绍范围内,具体可以移步各大论坛博客查阅。好了我们继续….
|
|
|
|
进行install,如果遇到各种error基本上都是依赖包没有安装造成,可以各种翻墙GG;
接下来你需要创建一个zabbix用户来启动zabbix服务,因此需要先执行
|
|
新增如下代码
到这里其实zabbix_server的工作就做完了,我们可以执行如下命令来启动服务:
|
|
安装agent没有server这么麻烦,只需要解压包就行了,下载地址可以去官方下载或者到本文末下载:
|
|
然后直接解压到/usr/local/zabbix,然后需要修改vi /usr/local/zabbix/etc/zabbix_agent.conf配置,新增如下代码
|
|
到这里也完成了agent的工作,我们可以启动agent了。
|
|
我们可以将zabbix_server解压目录中的frontends文件copy到我们的站点根目录,比如
然后根据自己的选择的服务(nginx、apache、ligttpd)进行配置。
完成之后我们就可以通过web进行访问了,因为zabbix源码是php ,我们需要安装php解析器(环境),安装php由于篇幅限制,本文不做介绍,具体可以移步各大论坛博客求攻略,web访问进入如下界面:
接下来需要,在php配置文件中修改如下配置以满足zabbix的需要,max_execution_time、max_input_time、time zone
修改php.ini文件之后重启php,看到如下配置都ok,然后next。
根据提示填写基本配置信息并点击测试,pass之后继续next。
到这一步,可能就要报错了,原因是我们需要先把数据表导入到数据库才能继续了,好吧,我们那就去导数据吧~,点击next
如果遇到无法创建zabbix.conf.php,可以将站点根目录文件夹权限修改一下chown -R www:www /usr/local/nginx/html/zabbix
需要将zabbix_server解压目录中的database文件夹中相应文件导入db,zabbix目前支持mysql、Oracle、sqllite、db2,我们把对应的文件夹中的文件导入db即可,这里我们选择mysql,则把mysql下面的3个文件(data.sql、images.sql、schema.sql)导入mysql中 ,完成之后我们就可以继续完成安装了,到这步就已经结束了,因为是导入的数据,因此zabbix默认登陆名是zabbix口令也是zabbix。我们登陆进入之后可以看到整个后台布局如下
zabbix_agents_2.2.5.linux2_6_23.amd64.tar.gz下载
(The End)
]]>接下来提到的Token(令牌)使用的RSA加密无非就是一种安全钥匙,目前也广泛的运用在各种企业,比如国家银行、私企、事业单位等等。下面我们就来一起探讨一下这个神奇的令牌是怎样实现安全认证的。
首先说到Token,有必要先了解一下RSA是什么?RSA是基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。具体可以移步 这里 观摩。通过了解RSA我们知道它也并不是万能的,因为早在之前就已经有人将RSA-155(512bits)成功分解,花了五个月时间(约8000 MIPS 年)和224 CPU hours 在一台有3.2G中央内存的Cray C916计算机上完成。2002年,RSA-158也被成功因数分解。2009年12月12日,编号为 RSA-768 (768bits,232 digits)数也被成功分解。北京时间2013年2月15日上午消息,据《纽约时报》周二报道,欧美数学家和密码学家偶然发现,被全世界广泛应用的公钥加密算法RSA存在漏洞。因此RSA的破解也只是一个时间问题,但是目前为止还没有科学家能够破解RSA足够长的加密秘钥,因此相对来说还是比较安全的,不然为啥银行还要用它~~
我们常看见的Token可以算是银行的令牌,Token上有一个LED的显示屏,显示的数字每一分钟变化一次,其实也就是它内部芯片每分钟都会使用一种算法,组合该因子与当前时间,生成一个随机的数字。当然在银行内部服务器也需要采取和这个Token同一种算法产生该随机数字,以便保证Token和银行内部服务器生成的口令单一认证,就像每个客户都有了世界上独一无二的身份认证,来保证用户使用Token的安全性。服务器端和每个对应的Token都使用同样的一套算法,可以自定义计算生成秘钥的时间间隔。每批次生产的Token都拥有唯一的序列号,和有效时间,然后服务器端和Token执行相同的计算程序,在设定好的相同的更新时间计算出新的一组数字,这样就达到了认证的目的,当然也还是有人会问,如果不一致怎么办,其实在有效期内Token还是较安全的,如果发现Token无法认证,基本上应该是它和银行内部服务器的心跳出现了差异,因此导致无法验证通过,这样的Token只能返厂,不过还是有一部分厂家会将Token的心跳时间设置较大,以便保证即使出现心跳差异也能够继续使用,当然这个心跳设置的时间周期越短对于用户来说越安全。
(The End)
]]>话说到官方提交完工单之后,顺便浏览了一下官方最近的活动,心想能遇有什么优惠政策。于是就在站内各种扫描,确实看到有一些令人心痒的活动,比如说官方推出的“0元拥抱云计算”,看着就点进去了。进去之后里面做的很花哨啊!各种养眼的惠民政策,看着就顺势往下走,由于个人习惯喜欢在触摸板左右滑动,结果偶然屏幕右侧多出一块空白区域(下面给出),觉得很好奇啊~,想一下不应该啊,毕竟是阿里云,前端工作应该还是比较到位的,于是刷新了几下在看,仍然出现该情况,这下我就好奇了,于是去看源码发现,不知道那个粗心大意的攻城狮把宽度写错了(本来是100%的宽度,结果不知道啥情况手抖了一下增加了一个0,变成1000%),也许犯着糊涂的时候他本身不是故意的,但就是不知怎么回事儿的情况下就成这样了(我们这一行经常这样说),好吧说了这么多还是上一张图为证吧!
另外在来看一下淘宝订单交易记录吧~,这里的效果更奇葩,还是上图为证;
再如,淘宝的虚拟充值平台交易时弹出的对话框,都是一些细小的问题没有规范导致。
总结:每个人过多过少都会犯糊涂,疏忽大意是难免的,只能说是尽量避免不要出现严重的后果,影响用户的体验。有些时候就想着为了去解决一件事情而去做这件事儿,但是呢,结果事情没解决反而捅了篓子,惹出一摊子事儿来,就像我们曾经一起犯过的错,踩了前人留下的坑,各种坑爹的坑,填填补补,伤痕累累,最终劳民伤财啊。当然还是希望自己不要给后人留下坑否则后来者也会同样的抱怨曾经的缔造者。终规终矩,还是说明一个问题,规范,如果自己把自己的事儿做好,就不会让其他人为你头疼了。
(The End)
]]>在写作本文之前有必要说明一下索引的优缺点,使用索引本身是为了解决问题,但是如果使用者滥用索引或者使用不当,索引也会让你付出惨痛的代价,因此我们有必要合理正确的使用索引,来解决遇到的问题,而不是带来新的问题。简单的说使用索引可以帮助我们:
索引大大减少了服务器需要扫描的数据量;
索引可以帮助服务器避免排序和临时表;
索引可以将随机I/O变为顺序I/O;
本文主要介绍关于索引的类型,索引可分为:B-Tree、哈希索引(hash index)、空间数据索引(R-Tree)、全文索引、其他索引类型。
如果在没有指定索引类型的情况下,多数都是指B-Tree索引(实际情况下是使用的B+Tree),不同的存储引擎之间B-Tree性能也是各有不同,如MyISAM使用的前缀压缩技术使得索引变小,但是InnoDB则按照原数据格式进行存储,再如MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键引用被索引的行。如下图所示:
由上图可知,B-Tree对索引是按照顺序组织数据存储的,所以很适合查找范围数据,例如一个基于文本域的索引树上,按照字母顺序传递连续的值进行查找非常适合,所以像查找以某个字母开头的方式效率非常高。通常这种B-Tree索引有如下六种查询方式(这里主要介绍联合索引的形式):
全值匹配:和索引中的所有列进行匹配,联合索引或者单列索引;
匹配最左前缀:联合索引中只匹配第一列;
匹配列前缀:联合索引或者单列索引中匹配第一列的首位;
匹配范围值:查找值是一个范围区间,如小于一个值或者大于一个值;
精确匹配某一列并范围匹配另一列:即如在联合索引中第一列精确匹配,第二列范围匹配;
只访问索引的查询:查询只需要访问索引,不需要访问数据,即覆盖索引;
当然针对以上的几种查询方式,在B-Tree联合索引中也有一些限制,如果不是按照最左列开始查找,则无法使用索引,另外也不能跳过索引中的列进行查找,即在联合索引中,可能跳过中间列进行查找,这样也只能使用跳过列之前的索引列查找,如果查询某个列是范围查找,则其右边的列都不能使用索引,这些限制并非是B-Tree本身的限制,而是MySQL优化器和存储引擎使用的方式导致,看到这里也许大家应该清楚了创建联合索引的顺序至关重要,因此我们也需要优化我们的SQL来满足不同的查询需求。
基于哈希表实现,只有精确匹配索引所有列的查询才有效,对于每一行数据,存储引擎都会对所有的索引列进行计算一个哈希码(hash code),哈希码是一个较小的值,并且不同的键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时哈希表中保存指向每个数据行的指针。如下介绍一个列子具体说明:
假设某一数据表中有数据
如果使用哈希索引函数func(),他们返回值假设如下
则哈希索引的数据结构如下:
通过上面可以看出槽是按照顺序排列,但是值并非是按照顺序进行,如果MySQL查询WangWu则先进行计算WangWu的哈希值,并使用该值寻找对应的记录指针,因为func(‘WangWu’) = 9999 ,所以MySQL在索引中查找9999就可以找到对应的指针是第3行,最后比较查找第三行的值是否是WangWu,以确保是要找的行。
因为哈希索引自身只存储对应的哈希值,所以索引的结构非常紧凑,这也让哈希索引查找速度非常快,但哈希索引也有它的限制:
哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行(即查找数据行),不过访问内存中的行速度非常快,所以大部分情况造成的影响并不明显;
哈希索引数据并不是按照索引值顺序存储的,也就无法用于排序;
哈希所以也不支持部分索引列的匹配查找,因为哈希索引始终是件索引列的全部内容计算哈希值。例如数据列(A,B)创建了哈希索引,如果只查询数据列A则无法使用哈希索引;
哈希索引只支持等值比较查询,包括=、IN()、<=>(注意<>和<=>是不同的操作),也不支持范围查找。
访问哈希索引的数据非常快,除非很多哈希冲突(不同的索引列值却有相同的哈希值),当出现哈希冲突时,存储引擎必须遍历链表中的所有的行指针,逐行进行比较,直到找到符合条件的行为止;
如果哈希冲突很多,一些索引维护操作的代价就会很高。
基于上述的限制,哈希索引也只适合某些特定的场合,而一旦适合哈希索引,则它带来的性能提升也将非常显著,如“星型”schema。
MyISAM表支持空间索引,可以用来存储地理数据,和B-Tree索引不同,这类索引无需前缀查询。空间索引会从所有维度来索引数据,查询时可以有效的使用任意维度来组合查询,但必须使用MySQL的GIS相关函数如MBRCONTAINS()等来维护数据,由于目前GIS还不算完善,所以大部分人都不会使用这个特性。
全文索引是一种特殊类型的索引,它查找的是文本中的keyword,而不是直接比较索引中的值。全文搜索和其他几种类型索引的匹配方式也完全不一样,它有很多需要注意的细节,如停用词,词干和复数、布尔搜索等,全文索引更类似搜索引擎,而不是简单的where条件匹配查找。因此在相同的列上同时创建全文索引和基于值的B-Tree索引是不会有冲突的,全文索引适用于MATCH AGAINST 操作,而不是WHERE条件操作。
还有很多第三方的存储引擎使用了不同类型的数据结构来存储数据,如TokuDB使用分形树索引(fractal tree index),这是一类较新开发的数据结构,算是B-Tree的改进版。
通过上述介绍的索引类型,我们应该很清楚的了解了MySQL内部的索引方式,如何构建高性能的索引策略我们下一站继续!~
(The End)
]]>个人谈谈这两种方法的弊端吧,对于第一种,如果你是VB高手,那就十分方便,如果你是VB小白,那么也许你会选择第二种。第二种使用非常方便,但唯一的缺点此款插件只能在EXCEL内使用,不能用于幻灯片内;如果你是调研行业的小伙伴也许公司会要求PPT内的图表不能直接从EXCEL粘贴,要从PPT内直接插图表(这主要是方便客户提取或编辑数据)。苦于这种原因,那么你也许就会通过手动插入文本框自己一个个添加标签或者选择数据→添加→选择系列名称、X轴、Y轴,一个一个的添加。如下图所示:
举例数据中共8行,相当于需要重复添加八次。数据添加成功后,我们再添加数据标签,并在设置数据标签格式内勾选系列名称,最终成功添加。
由于小编就属于VB小白,并且也属于不能从EXCEL直接粘图表的一员,因此在这向小伙伴们分享一种简便的方式,高手可以直接飘过。方法很简单,我们只需要在数据上换换格式就OK了。正常做XY散点图的数据源格式如下图:
我们仅需要将数据格式转换成如下的一个矩阵格式,第一行实际上就是X轴,第二行到最后一行实际上就都是Y轴了。然后呢我们只需要选中全部数据→插入→散点图。结果图表如下:
最后一步就是选中数据点→添加数据标签→设置数据标签格式→勾选系列名称(结果图如下)
当然了,这种方法也还是有缺陷的,大家应该很快意识到了,每个系列点都需要添加标签设置标签。但是在应用到幻灯片中有一定的帮助,当用在气泡图的时候就显得很快捷了。所以大家可以结合所需,灵活运用各种方法。
顺便附上气泡图一例(上图为数据源格式,下图为成功的气泡图)
可能亲会想说,调整数据格式是不是太麻烦了呀?其实呢如果数据量少的话当然可以手动调整,如果数据量多,或者要批量处理同样的数据,我们就可以借助EXCEL技巧和IF公式改变数据格式,但考虑这种情况不多见,此处就不多啰嗦了。最最方便的方式当然就是把模板保存好,下次使用就可以直接提取,哈哈。
其实还有另外一种小技巧了呀,当做完XY散点图后,添加数据标签,然后直接将数据标签修改成文字就OK了。是不是很简单?
最后附上工具下载地址 XYChartLabeler
(The End)
]]>一般调研问卷是以WORD或者EXCEL的文档形式保存,这主要是方便整理和可视化管理。因此首先可以将问卷中选项的数值和标签整理出来(当然问卷一般有不同的格式,可以根据问卷规律整理,blablabla,如果对EXCEL非常熟悉,可以直接跳楼到第二部分-SPSS)。
例如处理后的形式可能是如下图:(当然根据您具体的过程而定)
然后我们可以通过分列变成下图:(主要是方便套用公式)
套用公式:如下图
在E2单元格套用公式:$C$1&” “&C2
在E3单元格套用公式:C3&”‘“&D3&”‘“
细心的看客肯定看到小编标黄色的行了,每个题项结束后都会插入空行隔开,这是因为在SPSS里面不同变量赋值所需。SPSS语法编辑器里面一个语法结束后需要回车后再编辑第二个语法。当遇到有非常非常多的题项时可以采用编序号+排序的方式快速插入,同时编序号后在筛选条件下也方便您快速复制以上公式啦,blablabla…
同时看客们是否注意到此处label加了s,其实加s主要是对多个变量但是相同标签批量赋值,但单个变量赋值加s是不会影响的,为了方便大家理解特加以说明。如下图:
那么变量A2-A7的标签都同时赋值为1-非常满意,2-基本满意,3-不满意,4-非常不满意。
接下来就是SPSS发挥强大功用了,继续走起~~~
1、打开SPSS的语法编辑器,点击”文件”->”新建”-> “语法”,如下图(小编用的SPSS19.0)
2、将上述EXCEL内整理得到的标签复制到编辑器,如下图(箭头所指的空白处就是我们在EXCEL内插入的空白行)
3、点击”运行”->”全部”:
4、成功运行效果图(上图为查看器内的显示截图,下图为SPSS变量视图的截图)
备注:如果步骤2中没有空行(回车),如下图:
我们可以看到左侧箭头所示,实际上语法编辑器内只默认了一个变量。现在我们再运行看看效果:(上图为查看器内的显示截图,下图为SPSS变量视图的截图)
根据上面结果可知,查看器内语法报错,并且变量视图内只有A1变量成功赋值。
到了这里,如果没有报错,基本就ok了,上面也看到了最终的效果。希望本文能帮助到正在水深火热中痛苦挣扎的小伙伴们。。。
(The End)
]]>