@keyframes
基本写法是一个开始状态和一个结束状态:
css
@keyframes demo-anim {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
See the Pen QNbBOy by Oliver (@ochukai) on CodePen.
其中 animation-iteration-count: number or infinite; 可以设置循环次数,infinite为无限次
还可以定义的很详细:
```css
@keyframes demo-anim {
from {
transform: translate
继续阅读 »
2.6.16后的内核, 对于查看进程内存使用分布, 更方便了. 在/proc/{pid} 路径下有一个smaps文件, 记录了进程内存使用情况, 在老的内核系统上, 这个文件是maps或memap , 而且老的内核下maps或memap文件记录的数据真不是人读的.
继续阅读 »
hubot的announce通知所有在线联系人
hubot在使用挂接到其他平台时, 是支持room的方式了, 这样就支持了由一个用户发送announce通知所有在线联系人的方式了.
因为想到以后或许可以使用hubot来作为监控通知, 当你指定的监控项目告警时, 使用hubot把信息发送到所有在线订阅人.
继续阅读 »
使用datetime, 构造一个cron task定期执行给定的函数方法
一个Plan类, 包含next_datatime, execute, 两个方法, init方法指明在实例化的时候,需要给定一个func作为参数, 其他参数可以是时间间隔, 或具体的时间点,
继续阅读 »
pptp服务器:
pptp下发下去的ip网段: 10.168.0.0/24
iptables配置: (注意打开ip_forward转发):
-A FORWARD -s 10.168.0.0/24 -j ACCEPT
-A POSTROUTING -s 10.168.0.0/24 -j MASQUERADE
继续阅读 »
说起来题目比较拗口, 比较常见到的是IP地址, 由8个2进制位, 转换成十进制最大为255, 这都知道.
以前学网络的时候, 经常碰到, 一个ip的一段, 比如 192.168.1.211中的211, 211转换成2进制是11010011,
继续阅读 »
FlameGraph的例图,解释如下:
图中每一个方块代表栈里的一个函数。
Y轴代表调用深度,最上面的是当前正在CPU上执行的函数,下面的都是其祖先。每个函数都是由它下方的函数调用的。
X轴不是按照时间先后排列的,它只代表样本数目。方块越宽,代表该函数出现的次数越多。
在有多个并发线程同时被采样,样本总数可能超过采样所用的时间。
继续阅读 »
源码里的结构:
tornado
├── auth.py
├── autoreload.py
├── ca-certificates.crt
├── curl_httpclient.py
├── database.py
├── escape.py
├── gen.py
├── httpclient.py
├── httpserver.py
├── httputil.py
├── init.py
├── ioloop.py
├── iostream.py
├── locale.py
├── netutil.py
├── options.py
├── platform
│ ├── auto.py
│ ├── common.py
继续阅读 »
kvm的guest镜像可以mount到本地
首先使用qemu-img info img_file查看镜像使用的文件格式, 通常默认的是raw
[root@ttt data]# qemu-img info vm1.img
继续阅读 »
为hubot机器人脚本增加python扩展
昨天顺利把hubot跑起来了, 能回答了. 也通过nodejs的exec命令执行shell的方式, 将消息以参数的形式传给process.py处理, 以形成用py写脚本的形式.
不过上面方式有缺陷:
1, nodejs不是真正的调用py, 同时py执行的返回或直接print或写stdout(print在某种程度上就是stdout), 然后nodejs什么都不用干, 就直接相当于把stdout使用msg.send回复给gtalk了.
2, 整体结构不优美, nojs跟py还得靠exec执行shell的形式, 这种调用方式挺丑陋.
继续阅读 »