A step forward to Time Series Forecasting
Time series forecasting is challenging, escpecially when working with long sequences, noisy data, multi-step forecasts and multiple input and output variables. Deep learning methods offer a lot of promise for time series forecasting, such as the automatic learning of temporal dependence and the automatic handling of structures like trends and seasonnality. In this crash course, you will discover how youo can get started and confidently develop deep learning models for time series forecasting problems usig Python. This is a big and important post. you might want to bookmark it. Let’s get started. Overview This tutorial is broken down into 7...
linux下制图工具graphviz
鉴于官网有有许多很好的例子,所以这里就不对一些简单的语法进行说明了。 问题: 关于中文显示的问题! 在label中直接使用""引用中文是存在问题的,但是如果在""里前后各加一个半角的空格,中文是可以成功显示的(笔者 在Ubuntu16.04下这样是能显示的)。 如何去改变箭头的表现形式! 1. 箭头以及箭尾的位置 digraph G{ node [shape=record]; A : ne -> B : nw; } A 的东北(右上角)指向 B 的 西北(右上角).四个方位分别用英文首字母n/s/e/w表示,并且可以组合。 2. 改变箭头箭尾的形状 ``` digraph G{ node [shape=record]; A -> B [arrowtail = ediamond arrowhead = diamond]; } ``` A 箭尾位置为实心菱形, B箭头位置为空心菱形。
Redis
客户端连接 本地连接 $ redis-cli 远程连接 $ redis-cli -h host -p port -a password 数据类型 Redis支持五种数据类型:string(字符串), hash(哈希),list(列表),set(集合),zset(有序集合); * string是redis最基础的类型,此类型是二进制安全的。也就是说string可以包含任何数据。比如jpg图片或序列化的对象。 * hash是以个string类型的filed和value的映射表,hash特别适合用于存储对象。 * list是简单的字符串列表,按照插入顺序排列。 * set是string类型的无序集合,set是通过哈希表实现的,所以添加、删除、查找的复杂度都是O(1)。 * zset是string类型的有序集合,且不允许有重复的成员 键(key/value) | Command | Description | | :–: | :–: | | set key val| 设置key值为val, key和val都是string类型 | | get key | 获取键key的值 | | del key | 删除key | | exists key | 检查key是否存在 | | keys pattern | 查找符合正则pattern的key值 | | expire key seconds | 为key设置过期时间 | | expireat key timestamp | 设置key过期时间,timestamp为unix时间戳 | | pexpire key milliseceinds | 设置过期时间,单位毫秒 | | persist key | 移除key的过期时间,key将持久保存 | | ptll key | 以毫秒为单位返回key剩余的过期时间...
Nginx 信号处理流程
Nginx进程间通信使用了三种方式:信号,共享内存以及socket pair 本节主要讲Nginx信号通信流程 首先简化Nginx流程,去掉所有其他无关的操作,留下信号相关和一些必须的函数,main函数看起来就简单了 int ngx_cdecl main(int argc, char *const *argv) { if(ngx_get_options(argc, argv) != NGX_OK){ return 1; } if(ngx_signal){ return ngx_signal_process(cycle, ngx_signal); } if(ngx_init_signals() != NGX_OK){ return 1; } if(ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK){ return 1; } ngx_master_process_cycle(cycle); } 说明 ngx_get_options()获取命令行参数,赋值给相应的全局变量。与信号相关的就是ngx_signal变量。假如输入命令nginx -s SIGHUB,那个ngx_signal就是 “SIGHUB”字符串。(在nginx以及开启的情况下); ngx_signal_process()在nginx已近开启的情况下才会调用; ngx_init_signals()初始化信号,绑定信号处理函数; ngx_create_pidfile()创建pid文件,在运行nginx后可以发现有个nginx.pid文件,里面记录了当前master进程的pid; ngx_master_process_cycle()创建子进程 ngx_init_signals() typedef struct{ int signo; char *signame; char *name; void (*handler)(int signo); }ngx_signal_t; ngx_signal_t signals[] = { { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), "SIG" ngx_value(NGX_RECONFIGUTE_SIGNAL), "reload", ngx_signal_handler}, { ... ...}, { 0, NULL, "", NULL} }; ngx_int_t ngx_init_signals() { ngx_signal_t *sig; struct sigaction sa; for(sig = signals; sig->signo != 0; sig++){ sa.sa_handler = sig->handler; sigempty(&sa.sa_mask); if(sigaction(sig->signo,...
git merge
Refference: https://git-scm.com/docs/git-merge Recommend: merge&rebase git commit –amend git merge - 合并两个及以上的开发分支 假设分支如下 master | C0 <-- C1 <-- C2 在此基础上创建两个分支,并做一些修改和提交 master bugfix | | C0 <-- C1 <-- C2 <-- C3 <-- C4 \ C5 <-- C6 | dev 合并 首先切换到目标分支,以master为例 $ git checkout master 合并bugfix分支 $ git merge bugfix 合并dev分支 $ git merge dev bugfix master | C0 <-- C1 <-- C2 <-- C3 <-- C4 \ C5 <-- C6 | dev bugfix master | | C0 <-- C1 <-- C2 <-- C3 <-- C4 <-- C7 \ / C5 <------------- C6 | dev