├── .gitignore
├── README.markdown
└── cn
├── 2016
├── CNAME
├── README.md
├── gulpfile.js
├── images
│ ├── QRcode.jpg
│ ├── bg.jpg
│ ├── chun.png
│ ├── lecturers
│ │ ├── thefosk.png
│ │ ├── wangchunyu.png
│ │ ├── wenming.png
│ │ ├── xiangwei.png
│ │ ├── yejing.png
│ │ ├── zhangshun.png
│ │ ├── zhaoyu.png
│ │ └── zhoujing.png
│ ├── line.png
│ ├── logo.png
│ ├── sf.png
│ └── sponsors
│ │ ├── 360.jpg
│ │ ├── bearychat.jpg
│ │ ├── cc.jpg
│ │ ├── coding.png
│ │ ├── it.png
│ │ ├── kong.png
│ │ ├── or.png
│ │ ├── qiniu.png
│ │ ├── smartisan.png
│ │ ├── stuq.png
│ │ ├── tx.png
│ │ └── yf.png
├── index.css
├── index.html
├── index.js
├── mobile.js
└── package.json
├── 2017
├── CNAME
├── README.md
├── books
│ ├── Intruduction to the NGINX stream subsystem and OpenResty's support.pdf
│ ├── Lua 5.1.4 GC 原理.key
│ ├── Lua 5.1.4 GC 原理.pdf
│ ├── OpenResty Commercialization and DSL Era - V3.pdf
│ ├── OpenResty 在微博服务化进程中的应用.pdf
│ ├── OpenResty在Strikingly网站集群中的应用.pdf
│ ├── developing a friendly openresty application.pdf
│ ├── 基于openresty构建im后台.pdf
│ └── 基于openresty构建im后台.pptx
├── gulpfile.js
├── images
│ ├── QRcode.jpg
│ ├── bg.jpg
│ ├── lecturers
│ │ ├── chun.png
│ │ ├── coredump.png
│ │ ├── datong.png
│ │ ├── hui.png
│ │ ├── likai.png
│ │ ├── thi.png
│ │ ├── yong.png
│ │ └── zhoujing.png
│ ├── line.png
│ ├── logo.png
│ ├── moments
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ ├── 3.jpg
│ │ ├── 4.jpg
│ │ ├── 5.jpg
│ │ ├── 6.jpg
│ │ ├── 7.jpg
│ │ ├── 8.jpg
│ │ └── 9.jpg
│ └── sponsors
│ │ ├── 360.jpg
│ │ ├── high.png
│ │ ├── it.png
│ │ ├── or.png
│ │ ├── sf.png
│ │ ├── smartisan.png
│ │ ├── tx.png
│ │ └── weibo.png
├── index.css
├── index.html
├── index.js
├── mobile.js
└── package.json
└── 2018
├── CNAME
├── README.md
├── gulpfile.js
├── images
├── QRcode.jpg
├── bg.jpg
├── conference
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ ├── 12.jpg
│ ├── 13.jpg
│ ├── 14.jpg
│ ├── 15.jpg
│ ├── 16.jpg
│ ├── 17.jpg
│ ├── 18.jpg
│ ├── 19.jpg
│ ├── 2.jpg
│ ├── 20.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ └── 9.jpg
├── lecturers
│ ├── anonymous.jpg
│ ├── chun.jpg
│ ├── ck.jpg
│ ├── cs.jpg
│ ├── dgl.jpg
│ ├── gxp.jpg
│ ├── hxl.jpg
│ ├── lzx.jpg
│ ├── thi.png
│ ├── wfk.jpg
│ ├── wky.jpg
│ ├── wlc.jpg
│ ├── wzy.jpg
│ ├── zc.jpg
│ └── zj.jpg
├── line.png
├── logo.png
└── sponsors
│ ├── 360.png
│ ├── net.png
│ ├── openresty.png
│ ├── smartisan.png
│ └── upyun.jpg
├── index.css
├── index.html
├── index.js
├── mobile.js
├── package.json
└── ppt
├── Kong做微服务网关的实践--蔡书.pdf
├── OpenResty 企业网关应用--袁开.pdf
├── OpenResty 在同程艺龙的应用--吴中骅.pdf
├── OpenResty 实践 CC 攻击防护--周俊.pdf
├── OpenResty在腾讯游戏营销技术中的应用--顾小平.pdf
├── Welcome to Navlang--路佳.pdf
├── layered_caching_in_openresty--Thibault.pdf
├── 又拍云服务优化实践--张超.pdf
├── 大规模OpenResty SaaS服务的搭建与运维技巧--戴冠兰.pdf
├── 如何编写正确且高效的OpenResty应用--罗泽轩.pdf
├── 把 Lisp 代码塞进 OpenResty--王克毅.pdf
├── 深度玩转NGINX监控--洪晓龙.pdf
└── 阿里七层流量入口Tengine硬件加速探索之路--王发康.pdf
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by .ignore support plugin (hsz.mobi)
2 | ### Node template
3 | # Logs
4 | logs
5 | *.log
6 |
7 | # Runtime data
8 | pids
9 | *.pid
10 | *.seed
11 |
12 | # Directory for instrumented libs generated by jscoverage/JSCover
13 | lib-cov
14 |
15 | # Coverage directory used by tools like istanbul
16 | coverage
17 |
18 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
19 | .grunt
20 |
21 | # node-waf configuration
22 | .lock-wscript
23 |
24 | # Compiled binary addons (http://nodejs.org/api/addons.html)
25 | build/Release
26 |
27 | # Dependency directory
28 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
29 | node_modules
30 | dist/bundle.js
31 | dist/app.css
32 | .idea/
33 | pub
34 |
35 | .DS_Store
36 |
37 | images.original
38 | sprites.css
39 | src
40 | data.json
41 | todo.md
42 | .*
43 |
--------------------------------------------------------------------------------
/README.markdown:
--------------------------------------------------------------------------------
1 | # openresty conference
2 |
3 | webpages for con.openresty.org
4 |
--------------------------------------------------------------------------------
/cn/2016/CNAME:
--------------------------------------------------------------------------------
1 | www.iresty.com
--------------------------------------------------------------------------------
/cn/2016/README.md:
--------------------------------------------------------------------------------
1 | #### 一、分析
2 | 1. `Chrome Network`面板显示**HTTP**请求有**20**条左右;
3 | 2. `bg.jpg`背景图片加载为`23.85s`左右, _参考解决方案3_;
4 | 3. 其他头像的图片都是在 `40K` 左右,并且都是`png`, _参考解决方案2_;
5 | 4. 外部资源大概有`660KB`
6 |
7 | #### 二、解决方案
8 | 1. **减少http请求:**
9 | - 尽量把`js`和`css`内联到`HTML`,用`gulp-inlinesource`来实现;
10 | - `CSS精灵`: 在该项目中还是有点**问题**,故不采用;
11 | - 使用`Base64` [(编码BASE64)](http://tool.css-js.com/base64.html):小的图片使用`Base64`,尝试用了二维码的Base64,感觉加载速度上并没有太多地变化;
12 | - 图片置灰 [使用CSS将图片转换成黑白](http://www.zhangxinxu.com/wordpress/2012/08/小tip-使用css将图片转换成黑白的/)
13 | 2. **压缩:**
14 | - JavaScript/CSS压缩:用`gulp-inlinesource`;
15 | - 图片压缩:`PNG` `jpg` `webp`,用了`gulp`的图片压缩`gulp-imagemin`插件,可以使得`saved 283.96KB - 66.4%`
16 | 压缩率达到了 `66.4%`,之前的图片大小为`417KB`,一共有`10`张图片,然后压缩之后变成了之后`140KB`;
17 | - 参考资料和工具:
18 | * [智图工具](http://zhitu.isux.us/)
19 | * [图片格式那点事儿](http://ued.taobao.org/blog/2010/12/jpg_png/)
20 | 3. 不要用`CSS3`代码去`高斯模糊`图片,图片还是那么大,`兼容性`又不好
21 | 所以对首页背景图片的,我们采用PS处理高斯模糊图片,从`180K` 变成了 `57K`;
22 |
23 | #### 三、结果
24 | 1. **外部资源(主要是图片)**
25 | `660KB左右` → `417KB` → `140KB`
26 |
27 | 2. **加载速度**
28 | `23.83s` → `14.00s左右` → `5.99s`
29 |
30 | 3. **HTTP 请求**
31 | `20` → `13` → `11`
--------------------------------------------------------------------------------
/cn/2016/gulpfile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 实现把js压缩放置在html的script标签 用inlinesource
3 | */
4 | 'use strict'
5 |
6 | var gulp = require('gulp');
7 | var uglify = require('gulp-uglify');
8 | var concat = require('gulp-concat');
9 | // var clean = require('gulp-clean');
10 | var cache = require('gulp-cache');
11 | var inlinesource = require('gulp-inline-source');
12 | var imagemin = require('gulp-imagemin');
13 | var pngquant = require('imagemin-pngquant');
14 |
15 | gulp.task('test', function() {
16 | return gulp.src(['index.js', 'test.js'])
17 | .pipe(concat('testandindex.js'))
18 | .pipe(gulp.dest('scripts'));
19 | });
20 |
21 | // gulp.task('inlinesource', function() {
22 | // return gulp.src('pre_index.html')
23 | // .pipe(inlinesource())
24 | // .pipe(gulp.dest('./index.html'));
25 | // });
26 |
27 | gulp.task('imagemin', function() {
28 | return gulp.src('images/lecturers/*')
29 | .pipe(imagemin({
30 | // 无损压缩jpg
31 | // progressive: true,
32 | use: [pngquant()]
33 | }))
34 | .pipe(gulp.dest('images/lecturers'));
35 | });
36 |
37 | // gulp.task('default', ['imagemin']);
38 | // gulp.watch('src/**', ['inlinesource']);
--------------------------------------------------------------------------------
/cn/2016/images/QRcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/QRcode.jpg
--------------------------------------------------------------------------------
/cn/2016/images/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/bg.jpg
--------------------------------------------------------------------------------
/cn/2016/images/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/chun.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/thefosk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/thefosk.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/wangchunyu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/wangchunyu.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/wenming.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/wenming.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/xiangwei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/xiangwei.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/yejing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/yejing.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/zhangshun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/zhangshun.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/zhaoyu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/zhaoyu.png
--------------------------------------------------------------------------------
/cn/2016/images/lecturers/zhoujing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/lecturers/zhoujing.png
--------------------------------------------------------------------------------
/cn/2016/images/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/line.png
--------------------------------------------------------------------------------
/cn/2016/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/logo.png
--------------------------------------------------------------------------------
/cn/2016/images/sf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sf.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/360.jpg
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/bearychat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/bearychat.jpg
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/cc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/cc.jpg
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/coding.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/coding.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/it.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/it.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/kong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/kong.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/or.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/or.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/qiniu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/qiniu.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/smartisan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/smartisan.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/stuq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/stuq.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/tx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/tx.png
--------------------------------------------------------------------------------
/cn/2016/images/sponsors/yf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2016/images/sponsors/yf.png
--------------------------------------------------------------------------------
/cn/2016/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | height: 100%;
3 | position: relative;
4 | min-width: 1280px;
5 | min-height: 530px;
6 | font-family: consolas, 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
7 | }
8 |
9 | /*reset*/
10 | body {
11 | margin: 0;
12 | }
13 |
14 | ul {
15 | list-style: none;
16 | -webkit-padding-start: 0;
17 | }
18 |
19 | a {
20 | text-decoration: none;
21 | }
22 |
23 | /*工具类*/
24 | .w110 {
25 | width: 110px;
26 | }
27 |
28 | .w250 {
29 | width: 250px;
30 | }
31 |
32 | .red {
33 | color: red;
34 | }
35 |
36 | .green {
37 | color: green;
38 | }
39 |
40 | .blue {
41 | color: rgb(61, 103, 166);
42 | }
43 |
44 | .fr {
45 | float: right;
46 | }
47 |
48 | .mt20 {
49 | margin-top: 20px;
50 | }
51 |
52 | .mt30 {
53 | margin-top: 30px;
54 | }
55 |
56 | body:before {
57 | width: 100%;
58 | height: 515px;
59 | background-image: url(images/bg.jpg);
60 | background-repeat: no-repeat;
61 | background-size: cover;
62 | display: block;
63 | z-index: -1;
64 | content: '';
65 | }
66 |
67 | .intro {
68 | width: 100%;
69 | color: white;
70 | position: absolute;
71 | top: 18%;
72 | right: 0;
73 | left: 0;
74 | margin: auto;
75 | text-align: center;
76 | }
77 |
78 | .or-logo {
79 | height: 50px;
80 | width: 50px;
81 | vertical-align: -10px;
82 | }
83 |
84 | .address {
85 | color: #ccc;
86 | cursor: pointer;
87 | }
88 |
89 | .join {
90 | color: #FFF;
91 | font-size: 100%;
92 | display: inline-block;
93 | background-color: #00B220;
94 | padding: .8em 1.8em;
95 | margin: 0.5em 0 0 0;
96 | line-height: 1;
97 | border-radius: 1.2em;
98 | text-decoration: none;
99 | border: none;
100 | outline: none;
101 | cursor: pointer;
102 | box-shadow: 0 .1em .2em rgba(0, 0, 0, .3);
103 | transition: .7s;
104 | }
105 |
106 | .lecturer {
107 | /*position: absolute;*/
108 | position: relative;
109 | /*top: 50%;*/
110 | width: 100%;
111 | height: 420px;
112 | }
113 |
114 | .lecturer-list {
115 | text-align: center;
116 | width: 100%;
117 | margin: 0;
118 | height: 150px;
119 | }
120 |
121 | .lecturer-list:after {
122 | content: '';
123 | height: 100%;
124 | width: 0;
125 | display: inline-block;
126 | vertical-align: middle;
127 | }
128 |
129 | .lecturer-list li {
130 | vertical-align: middle;
131 | display: inline-block;
132 | height: 98px;
133 | width: 98px;
134 | margin-left: 20px;
135 | -webkit-transition: .2s;
136 | transition: .2s;
137 | }
138 |
139 | .lecturer-list li:first-child {
140 | margin-left: 0;
141 | }
142 |
143 | .line {
144 | position: relative;
145 | height: 10px;
146 | background: url(images/line.png) repeat-x;
147 | top: 105px;
148 | z-index: -10;
149 | }
150 |
151 | #about {
152 | width: 50%;
153 | margin: 0 auto;
154 | text-align: center;
155 | color: #999;
156 | font-size: 15px;
157 | margin-top: 35px;
158 | position: relative;
159 | /*min-width: 520px;*/
160 | }
161 |
162 | #about .title {
163 | font-weight: 300;
164 | margin-bottom: 0;
165 | }
166 |
167 | .title strong {
168 | color: #000;
169 | font-size: 20px;
170 | padding-right: 20px;
171 | }
172 |
173 | #about .brief {
174 | line-height: 30px;
175 | margin-top: 5px;
176 | }
177 |
178 | /*置灰*/
179 | .gray {
180 | -webkit-filter: grayscale(50%);
181 | -moz-filter: grayscale(50%);
182 | -ms-filter: grayscale(50%);
183 | -o-filter: grayscale(50%);
184 | filter: grayscale(50%);
185 | filter: gray;
186 | }
187 |
188 | /*变大*/
189 | .lecturer-list li.largen {
190 | height: 140px;
191 | width: 140px;
192 | }
193 |
194 | .lecturer-list li {
195 | border-radius: 50%;
196 | /*border: 1px solid #ccc;*/
197 | }
198 |
199 | /*1*/
200 | .zhaoyu {
201 | background: url(images/lecturers/zhaoyu.png) 0% / cover no-repeat;
202 | }
203 |
204 | /*2*/
205 | .zhangshun {
206 | background: url(images/lecturers/zhangshun.png) 0% / cover no-repeat;
207 | }
208 |
209 | /*3*/
210 | .xiangwei {
211 | background: url(images/lecturers/xiangwei.png) 0% / cover no-repeat;
212 | }
213 |
214 | /*4*/
215 | .chun {
216 | background: url(images/chun.png) 0% / cover no-repeat;
217 | }
218 |
219 | /*5*/
220 | .thefosk {
221 | background: url(images/lecturers/thefosk.png) 0% / cover no-repeat;
222 | }
223 |
224 | /*6*/
225 | .yejing {
226 | background: url(images/lecturers/yejing.png) 0% / cover no-repeat;
227 | }
228 |
229 | .wenming {
230 | background: url(images/lecturers/wenming.png) 0% / cover no-repeat;
231 | }
232 |
233 | .zhoujing {
234 | background: url(images/lecturers/zhoujing.png) 0% / cover no-repeat;
235 | }
236 |
237 | .wangchunyu {
238 | background: url(images/lecturers/wangchunyu.png) 0% / cover no-repeat;
239 | }
240 |
241 |
242 | .QRcode {
243 | position: absolute;
244 | top: 240px;
245 | right: 11.5%;
246 | height: 108px;
247 | width: 108px;
248 | }
249 |
250 | /*详细内容包含日程表 & 赞助商*/
251 | .detail {
252 | width: 700px;
253 | margin: 20px auto;
254 | }
255 |
256 | /*日程表*/
257 | .schedule {
258 | width: 740px;
259 | }
260 |
261 | .schedule h1 {
262 | text-align: center;
263 | color: #34495e;
264 | text-shadow: 2px 2px 4px #34495e;
265 | }
266 |
267 | #schedule-list {
268 | color: #999;
269 | font-weight: bold;
270 | }
271 |
272 | #schedule-list > li {
273 | font-size: 0;
274 | margin-top: 10px;
275 | }
276 |
277 | .schedule-item {
278 | padding-top: 10px;
279 | padding-bottom: 10px;
280 | font-size: 16px;
281 | display: inline-block;
282 | width: 49%;
283 | background-color: #f8f8f8;
284 | text-indent: 20px;
285 | line-height: 24px;
286 | box-shadow: 1px 1px #ccc;
287 | border-radius: 3px;
288 | }
289 |
290 | .doing {
291 | display: block;
292 | font-style: normal;
293 | width: 90%;
294 | margin: 0 auto;
295 | /*color: #2674BA;*/
296 | color: black;
297 | /*太多显示不下*/
298 | text-overflow: ellipsis;
299 | overflow: hidden;
300 | white-space: nowrap;
301 |
302 | text-indent: 0;
303 | }
304 |
305 | .ppt, .video {
306 | color: #42b983;
307 | }
308 |
309 | /*合作伙伴*/
310 | .sponsor {
311 | width: 700px;
312 | text-align: center;
313 | height: 450px;
314 | color: #34495e;
315 | text-shadow: 2px 2px 4px #34495e;
316 | }
317 |
318 | .tx, .or {
319 | width: 150px;
320 | }
321 |
322 | .stuq {
323 | width: 120px;
324 | margin-left: 10px;
325 | margin-right: 10px;
326 | }
327 |
328 | /*合作伙伴 logo*/
329 | .logo {
330 | width: 190px;
331 | }
332 |
333 | .powered-by, .provided-by {
334 | text-align: center;
335 | color: #ccc;
336 | }
337 |
338 | .powered-by {
339 | margin-bottom: 10px;
340 | }
341 |
342 | .provided-by {
343 | padding: 0 10px;
344 | /*font-size: 14px;*/
345 | }
346 |
347 | .foundation,
348 | .tencent,
349 | .zhuhai-open,
350 | .my-github {
351 | color: #2674BA;
352 | }
353 |
354 | @media (max-width: 420px) {
355 | html {
356 | min-width: 0;
357 | }
358 | body:before {
359 | height: 400px;
360 | background-position: center 50%;
361 | }
362 |
363 | .intro {
364 | transform: scale(.8);
365 | }
366 |
367 | .or-logo {
368 | height: 40px;
369 | width: 40px;
370 | vertical-align: -8px;
371 | }
372 |
373 | /*不要线*/
374 | .line {
375 | display: none;
376 | }
377 |
378 | .lecturer {
379 | height: auto;
380 | }
381 |
382 | .lecturer-list {
383 | display: none;
384 | }
385 |
386 | #about {
387 | width: 80%;
388 | }
389 |
390 | #about .brief {
391 | line-height: 1.5;
392 | }
393 |
394 | #about .avatar {
395 | /*border: 2px solid #ccc;*/
396 | border-radius: 50%;
397 | height: 150px;
398 | width: 150px;
399 | margin: 0 auto;
400 | }
401 |
402 | .detail {
403 | width: 100%;
404 | }
405 |
406 | .schedule {
407 | width: 100%;
408 | }
409 |
410 | #schedule-list > li {
411 | text-align: center;
412 | }
413 |
414 | .schedule-item {
415 | text-align: left;
416 | width: 90%;
417 | }
418 |
419 | .doing {
420 | white-space: pre-wrap;
421 | }
422 |
423 | .sponsor {
424 | height: auto;
425 | width: 100%;
426 | }
427 |
428 | .logo-set {
429 | margin: 0;
430 | }
431 |
432 | .logo-set a {
433 | display: block;
434 | margin-top: 10px;
435 | }
436 |
437 | .logo {
438 | width: 250px;
439 | }
440 | }
441 |
442 |
--------------------------------------------------------------------------------
/cn/2016/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
9 | OpenResty Con 2016
10 |
11 |
19 |
26 |
27 |
28 |
29 |
30 |
OpenResty Con 2016
31 |
32 |
2016年12月10日 9:00 AM @深圳
33 |
34 |
点击参会
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
63 |
64 |
65 |
117 |
OpenResty 基金会 发起,腾讯大讲堂 和 珠海开源软件技术促进中心 联合主办
118 |
Powered by monkindey
119 |
120 |
121 |
122 |
126 |
127 |
128 |
134 |
135 |
136 |
144 |
145 |
152 |
153 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/cn/2016/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 感想:
3 | * (1). 过度依赖jquery等库($, on,很多原生的API不认识,DOM操作封装)
4 | * (2). 使用模板、reset.css, 正则表达式
5 | * (3). 上下左右居中
6 | * (4). 浏览器兼容、设备兼容(响应式)
7 | * (5). 性能上优化 (http://web.jobbole.com/82551/)
8 | * (6). 两个数据源对应一个模板
9 | **/
10 |
11 | (function(global, document) {
12 |
13 | var PDF_PATH = 'download/ebook/2015_con/';
14 | var lecturerAbout = [];
15 | var schedule = [];
16 |
17 | /**
18 | * @嘉宾简介(需要修改简介文案直接在下面修改即可)
19 | * name:名字
20 | * job:职务
21 | * brief:简介
22 | *
23 | * 暴露出数据为了兼容移动端
24 | */
25 | global.__LECTURER_ABOUT__ = lecturerAbout = [{
26 | class: 'zhaoyu',
27 | name: '吴兆玉',
28 | job: '今日头条高级工程师',
29 | brief: '连续创业者,涉及比特币、在线教育、商务社交等领域。专注后端\
30 | 高可用架构设计和开发,对基于OpenResty的web开发有较多实践经验'
31 | }, {
32 | class: 'zhangshun',
33 | name: '张顺',
34 | job: 'AISpeech开发总监',
35 | brief: '专注于将人机语音交互技术应用到生活中,设计了语音云和AIOS等语音交互基础架构。OpenResty贡献者'
36 | }, {
37 | class: 'wenming',
38 | name: '温铭',
39 | job: 'OpenResty 软件基金会 主席',
40 | brief: ''
41 | }, {
42 | class: 'thefosk',
43 | name: 'Marco Palladino',
44 | job: 'CTO @Mashape',
45 | brief: 'One of the core maintainer of Unirest and Kong, the most popular open-source API gateway for Microservices. Creator of the largest API marketplace in the world.\
46 | Co-founded Mashape, the company behind Kong and the API marketplace.'
47 | }, {
48 | class: 'chun',
49 | name: '章亦春',
50 | job: 'OpenResty 开源项目创建者',
51 | brief: '喜欢不务正业,Nginx 与 SystemTap 贡献者。以写程序为主,喜欢摆弄各种 UNIX 风格的工具,\
52 | 以及不同的编程语言,例如 C/C++、Lua、Perl 等等'
53 | }, {
54 | class: 'zhoujing',
55 | name: '周晶',
56 | job: '微博平台研发部高级架构师',
57 | brief: '前新浪移动系统架构组负责人,新浪移动期间负责有移动后端平台架构,致力于OpenResty在公司的落地,\
58 | 目前主要关注各种高性能服务化相关架构,生命在于折腾,爱技术、爱分享'
59 | }, {
60 | class: 'yejing',
61 | name: '叶靖',
62 | job: '又拍云系统开发工程师',
63 | brief: '对 Python/Lua/Go 等语言有较深入的研究,在 ngx_lua 和OpenResty模块开发方面有较多经验,\
64 | 专注于高并发高可用服务架构设计。平时热衷于参与开源社区分享开源经验'
65 |
66 | }, {
67 | class: 'wangchunyu',
68 | name: '王春雨',
69 | job: '腾讯研发管理部 产品总监',
70 | brief: '12年研发管理实战经验,专注于敏捷研发工程实践,腾讯开源联盟(TOSA)组织者。'
71 | }];
72 |
73 | global.__SCHEDULE__ = schedule = [{
74 | time: "8:30",
75 | doing: '签到'
76 | }, {
77 | time: "9:00",
78 | doing: "开场"
79 | }, {
80 | time: '9:10',
81 | name: '温铭',
82 | doing: 'OpenResty 软件基金会的过去、现在和未来',
83 | ppt_url: 'http://resty.b0.upaiyun.com/OpenResty%E8%BD%AF%E4%BB%B6%E5%9F%BA%E9%87%91%E4%BC%9A%20%E7%9A%84%E8%BF%87%E5%8E%BB%E3%80%81%E7%8E%B0%E5%9C%A8%E5%92%8C%E6%9C%AA%E6%9D%A5.pdf',
84 | pdf: 'Slide1',
85 | ppt_url_1: 'http://resty.b0.upaiyun.com/%E9%AB%98%E6%80%A7%E8%83%BD%E6%9C%8D%E5%8A%A1%E7%AB%AF%E7%9A%84%E5%87%A0%E4%B8%AA%E6%83%8A%E4%BA%BA%E7%9C%9F%E7%9B%B8.pdf',
86 | pdf_1: 'Slide2'
87 | }, {
88 | time: '9:40',
89 | name: '章亦春',
90 | doing: 'OpenResty 2016 新发展',
91 | ppt_url: 'http://openresty.org/slides/New-development-of-OpenResty-in-2016.pdf',
92 | pdf: 'Slide',
93 | video_url: 'http://openresty.org/videos/openresty-con-2016.mp4',
94 | video: 'Video'
95 | }, {
96 | time: '11:00',
97 | doing: '闪电演讲'
98 | }, {
99 | time: '11:15',
100 | name: 'Marco Palladino',
101 | title: 'Microservices & API Gateways with Kong and OpenResty',
102 | doing: 'Microservices & API Gateways with Kong and OpenResty',
103 | ppt_url: 'http://resty.b0.upaiyun.com/KONG_OPENRESTY.pdf',
104 | pdf: 'Slide'
105 | }, {
106 | time: '13:00',
107 | name: '王春雨',
108 | doing: '腾讯开源探索之路',
109 | ppt_url: 'http://resty.b0.upaiyun.com/%E8%85%BE%E8%AE%AF%E5%BC%80%E6%BA%90%E6%8E%A2%E7%B4%A2%E4%B9%8B%E8%B7%AF.pdf',
110 | pdf: 'Slide'
111 | }, {
112 | time: '13:45',
113 | name: '吴兆玉',
114 | doing: 'Orange:一个基于OpenResty的API Gateway',
115 | ppt_url: 'http://resty.b0.upaiyun.com/orange.pdf',
116 | pdf: 'Slide'
117 | }, {
118 | time: '14:30',
119 | name: '周晶',
120 | doing: '新浪移动 OpenResty 应用开发实践',
121 | ppt_url: 'http://resty.b0.upaiyun.com/%E6%96%B0%E6%B5%AA%E7%A7%BB%E5%8A%A8OpenResty%E5%BA%94%E7%94%A8%E5%BC%80%E5%8F%91%E5%AE%9E%E8%B7%B5.pdf',
122 | pdf: 'Slide'
123 | }, {
124 | time: '15:15',
125 | doing: '茶歇'
126 | }, {
127 | time: '15:30',
128 | name: '张顺',
129 | doing: 'OpenResty与语音交互',
130 | ppt_url: 'http://resty.b0.upaiyun.com/openresty-con2016-aaashun.pdf',
131 | pdf: 'Slide'
132 | }, {
133 | time: '16:15',
134 | name: '叶靖',
135 | doing: 'OpenResty在云处理服务集群中的应用',
136 | ppt_url: 'http://yejingx.b0.upaiyun.com/OpenResty%E5%9C%A8%E4%BA%91%E5%A4%84%E7%90%86%E6%9C%8D%E5%8A%A1%E9%9B%86%E7%BE%A4%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8.pdf',
137 | pdf: 'Slide'
138 | }]
139 |
140 | var byClass = function(className) {
141 | return document.getElementsByClassName(className);
142 | };
143 |
144 | var byId = function(id) {
145 | return document.getElementById(id);
146 | };
147 |
148 | function renderSchedule() {
149 | var scheduleTmpl1 = byId('schedule-tmpl-1').innerHTML;
150 | var scheduleTmpl2 = byId('schedule-tmpl-2').innerHTML;
151 | var scheduleHtml = '';
152 | schedule.forEach(function(value, index) {
153 | if (index % 2 == 0) {
154 | scheduleHtml += '';
155 | scheduleHtml += scheduleTmpl1.replace(/{(\w+)}/g, function($1, $2) {
156 | // if ($2 == 'pdf' && value[$2]) {
157 | // return '演讲稿'
158 | // }
159 | return value[$2] ? value[$2] : '';
160 | });
161 | } else {
162 | scheduleHtml += scheduleTmpl2.replace(/{(\w+)}/g, function($1, $2) {
163 | // if ($2 == 'pdf' && value[$2]) {
164 | // return '演讲稿'
165 | // }
166 | return value[$2] ? value[$2] : '';
167 | });
168 | scheduleHtml += '';
169 | }
170 | });
171 | byId('schedule-list').innerHTML = scheduleHtml;
172 | }
173 |
174 | // 初始化页面触发click事件, 显示章亦春图片
175 | var initPage = function() {
176 | var aboutHtml = byId('about-tmpl').innerHTML;
177 | var event = new Event('click');
178 |
179 | event.INIT_PAGE = true;
180 | lecturerList.dispatchEvent(event);
181 |
182 | lecturerList.addEventListener('mouseover', function(e) {
183 | var target = e.target;
184 | if (target.classList.contains('gray')) {
185 | target.classList.remove('gray');
186 | target.addEventListener('mouseout', function addGray(e) {
187 | if (!this.classList.contains('largen')) {
188 | this.classList.add('gray');
189 | target.removeEventListener('mouseout', addGray);
190 | }
191 | }, false);
192 | // 停止事件冒泡
193 | e.stopPropagation();
194 | }
195 | }, false);
196 |
197 | // document.addEventListener("DOMContentLoaded", function(event) {
198 | // 需要重构
199 | renderSchedule()
200 | // });
201 |
202 | };
203 |
204 | var about = byId('about');
205 | var lecturerList = byClass('lecturer-list')[0];
206 | // 记录前一个被点击的头像
207 | var preClickedAvatar = null;
208 | var preClickedIndex = -1;
209 |
210 | // 使用事件委托,减少事件绑定
211 | lecturerList.addEventListener('click', function(e) {
212 | var target = e.target;
213 | var index = parseInt(target.getAttribute('data-index'));
214 | var aboutHtml = byId('about-tmpl').innerHTML;
215 |
216 | // 检测是否头像为140像素, 即是放大的图片
217 | if (target.classList.contains('avatar-140')) {
218 | return false;
219 | }
220 |
221 | // 初始化显示头像为章亦春
222 | if (e.INIT_PAGE) {
223 | target = target.children[4];
224 | index = 5;
225 | preClickedIndex = index;
226 | }
227 |
228 | if (index === 0) {
229 | return false;
230 | }
231 |
232 | // 使用简单的HTML模板
233 | aboutHtml = aboutHtml.replace(/{(\w+)}/g, function($1, $2) {
234 | return lecturerAbout[index - 1][$2];
235 | });
236 |
237 | if (preClickedAvatar && preClickedIndex != index) {
238 | // preClickedAvatar.firstElementChild.style.display = 'none';
239 | preClickedAvatar.classList.add('gray');
240 | preClickedAvatar.classList.remove('largen');
241 | }
242 |
243 | target.classList.remove('gray');
244 | target.classList.add('largen');
245 | // target.firstElementChild.style.display = 'inline-block';
246 |
247 | about.innerHTML = aboutHtml;
248 | preClickedAvatar = target;
249 | preClickedIndex = index;
250 |
251 | }, false);
252 |
253 | initPage();
254 |
255 | window.addEventListener('resize', function() {
256 | if (window.matchMedia('(min-width: 421px)').matches) {
257 | initPage();
258 | }
259 | })
260 | })(this, document)
261 |
--------------------------------------------------------------------------------
/cn/2016/mobile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author monkindey
3 | * @date 2016.11.6
4 | * @description 为了兼容移动端
5 | */
6 |
7 | function renderLecturerAtMobile() {
8 | var aboutHtml = document.getElementById('about-m-tmpl').innerHTML;
9 | var about = document.getElementById('about');
10 |
11 | about.innerHTML = __LECTURER_ABOUT__.map(function(l) {
12 | return aboutHtml.replace(/{(\w+)}/g, function($1, $2) {
13 | return l[$2]
14 | })
15 | }).join(' ');
16 | }
17 |
18 | function renderScheduleAtMobile() {
19 | var scheduleTmpl = document.getElementById('schedule-tmpl-1').innerHTML;
20 | // document.addEventListener("DOMContentLoaded", function() {
21 | // })
22 | document.getElementById('schedule-list').innerHTML = __SCHEDULE__.map(function(s, i) {
23 | return '' + scheduleTmpl.replace(/{(\w+)}/g, function($1, $2) {
24 | return s[$2] ? s[$2] : ''
25 | }) + ''
26 | }).join(' ')
27 |
28 | }
29 |
30 | /**
31 | * 414 iphone6 plus
32 | * 320 iphone 5
33 | * 375 iphone 6
34 | * 360 galaxy $5
35 | */
36 |
37 | function matchPageMedia() {
38 | if (window.matchMedia('(max-width: 420px)').matches) {
39 | renderLecturerAtMobile();
40 | renderScheduleAtMobile();
41 | }
42 | }
43 |
44 | matchPageMedia();
45 |
46 | window.addEventListener('resize', function() {
47 | matchPageMedia();
48 | })
--------------------------------------------------------------------------------
/cn/2016/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "openresty",
3 | "dependencies": {
4 | "jpegtran-bin": "^3.1.0"
5 | },
6 | "devDependencies": {
7 | "gulp": "^3.9.0",
8 | "gulp-cache": "^0.3.0",
9 | "gulp-clean": "^0.3.1",
10 | "gulp-concat": "^2.6.0",
11 | "gulp-imagemin": "^3.1.1",
12 | "gulp-inline-source": "^2.1.0",
13 | "gulp-uglify": "^1.4.1",
14 | "imagemin-pngquant": "^4.2.0"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/cn/2017/CNAME:
--------------------------------------------------------------------------------
1 | www.iresty.com
--------------------------------------------------------------------------------
/cn/2017/README.md:
--------------------------------------------------------------------------------
1 | ## 2017 OpenResty 大会
2 |
--------------------------------------------------------------------------------
/cn/2017/books/Intruduction to the NGINX stream subsystem and OpenResty's support.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/Intruduction to the NGINX stream subsystem and OpenResty's support.pdf
--------------------------------------------------------------------------------
/cn/2017/books/Lua 5.1.4 GC 原理.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/Lua 5.1.4 GC 原理.key
--------------------------------------------------------------------------------
/cn/2017/books/Lua 5.1.4 GC 原理.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/Lua 5.1.4 GC 原理.pdf
--------------------------------------------------------------------------------
/cn/2017/books/OpenResty Commercialization and DSL Era - V3.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/OpenResty Commercialization and DSL Era - V3.pdf
--------------------------------------------------------------------------------
/cn/2017/books/OpenResty 在微博服务化进程中的应用.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/OpenResty 在微博服务化进程中的应用.pdf
--------------------------------------------------------------------------------
/cn/2017/books/OpenResty在Strikingly网站集群中的应用.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/OpenResty在Strikingly网站集群中的应用.pdf
--------------------------------------------------------------------------------
/cn/2017/books/developing a friendly openresty application.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/developing a friendly openresty application.pdf
--------------------------------------------------------------------------------
/cn/2017/books/基于openresty构建im后台.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/基于openresty构建im后台.pdf
--------------------------------------------------------------------------------
/cn/2017/books/基于openresty构建im后台.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/books/基于openresty构建im后台.pptx
--------------------------------------------------------------------------------
/cn/2017/gulpfile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 1. js压缩放置在html的script标签 用inlinesource
3 | * 2. 图片压缩 imagemin
4 | */
5 | 'use strict';
6 |
7 | var gulp = require('gulp');
8 | var uglify = require('gulp-uglify');
9 | var concat = require('gulp-concat');
10 | var cache = require('gulp-cache');
11 | var inlinesource = require('gulp-inline-source');
12 | var imagemin = require('gulp-imagemin');
13 | var pngquant = require('imagemin-pngquant');
14 |
15 | // gulp.task('inlinesource', function() {
16 | // return gulp.src('pre_index.html')
17 | // .pipe(inlinesource())
18 | // .pipe(gulp.dest('./index.html'));
19 | // });
20 |
21 | gulp.task('imagemin', function() {
22 | return gulp
23 | .src('images/**/*')
24 | .pipe(
25 | imagemin({
26 | // 无损压缩jpg
27 | // progressive: true,
28 | use: [pngquant()]
29 | })
30 | )
31 | .pipe(gulp.dest('images/'));
32 | });
33 |
34 | // gulp.watch('src/**', ['inlinesource']);
35 |
--------------------------------------------------------------------------------
/cn/2017/images/QRcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/QRcode.jpg
--------------------------------------------------------------------------------
/cn/2017/images/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/bg.jpg
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/chun.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/chun.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/coredump.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/coredump.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/datong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/datong.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/hui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/hui.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/likai.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/likai.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/thi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/thi.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/yong.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/yong.png
--------------------------------------------------------------------------------
/cn/2017/images/lecturers/zhoujing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/lecturers/zhoujing.png
--------------------------------------------------------------------------------
/cn/2017/images/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/line.png
--------------------------------------------------------------------------------
/cn/2017/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/logo.png
--------------------------------------------------------------------------------
/cn/2017/images/moments/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/1.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/2.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/3.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/4.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/5.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/6.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/7.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/8.jpg
--------------------------------------------------------------------------------
/cn/2017/images/moments/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/moments/9.jpg
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/360.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/360.jpg
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/high.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/high.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/it.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/it.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/or.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/or.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/sf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/sf.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/smartisan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/smartisan.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/tx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/tx.png
--------------------------------------------------------------------------------
/cn/2017/images/sponsors/weibo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2017/images/sponsors/weibo.png
--------------------------------------------------------------------------------
/cn/2017/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | height: 100%;
3 | position: relative;
4 | min-width: 1280px;
5 | min-height: 530px;
6 | font-family: consolas, 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
7 | }
8 |
9 | /*reset*/
10 | body {
11 | margin: 0;
12 | }
13 |
14 | ul {
15 | list-style: none;
16 | padding-left: 0;
17 | }
18 |
19 | a {
20 | text-decoration: none;
21 | }
22 |
23 | /*工具类*/
24 | .w110 {
25 | width: 110px;
26 | }
27 |
28 | .w250 {
29 | width: 250px;
30 | }
31 |
32 | .red {
33 | color: red;
34 | }
35 |
36 | .green {
37 | color: green;
38 | }
39 |
40 | .blue {
41 | color: rgb(61, 103, 166);
42 | }
43 |
44 | .fr {
45 | float: right;
46 | }
47 |
48 | .mt20 {
49 | margin-top: 20px;
50 | }
51 |
52 | .mt30 {
53 | margin-top: 30px;
54 | }
55 |
56 | body:before {
57 | width: 100%;
58 | height: 515px;
59 | background-image: url(images/bg.jpg);
60 | background-repeat: no-repeat;
61 | background-size: cover;
62 | display: block;
63 | z-index: -1;
64 | content: '';
65 | }
66 |
67 | .intro {
68 | width: 100%;
69 | color: white;
70 | position: absolute;
71 | top: 18%;
72 | right: 0;
73 | left: 0;
74 | margin: auto;
75 | text-align: center;
76 | }
77 |
78 | .or-logo {
79 | height: 50px;
80 | width: 50px;
81 | vertical-align: -10px;
82 | }
83 |
84 | .address {
85 | color: #ccc;
86 | cursor: pointer;
87 | }
88 |
89 | .join {
90 | color: #fff;
91 | font-size: 100%;
92 | display: inline-block;
93 | background-color: #00b220;
94 | padding: 0.8em 1.8em;
95 | margin: 0.5em 0 0 0;
96 | line-height: 1;
97 | border-radius: 1.2em;
98 | text-decoration: none;
99 | border: none;
100 | outline: none;
101 | cursor: pointer;
102 | box-shadow: 0 0.1em 0.2em rgba(0, 0, 0, 0.3);
103 | transition: 0.7s;
104 | }
105 |
106 | .lecturer {
107 | /*position: absolute;*/
108 | position: relative;
109 | /*top: 50%;*/
110 | width: 100%;
111 | height: 350px;
112 | }
113 |
114 | .lecturer-list {
115 | text-align: center;
116 | width: 100%;
117 | margin: 0;
118 | height: 150px;
119 | }
120 |
121 | .lecturer-list:after {
122 | content: '';
123 | height: 100%;
124 | width: 0;
125 | display: inline-block;
126 | vertical-align: middle;
127 | }
128 |
129 | .lecturer-list li {
130 | vertical-align: middle;
131 | display: inline-block;
132 | height: 98px;
133 | width: 98px;
134 | margin-left: 20px;
135 | -webkit-transition: 0.2s;
136 | transition: 0.2s;
137 | }
138 |
139 | .lecturer-list li:first-child {
140 | margin-left: 0;
141 | }
142 |
143 | .line {
144 | position: relative;
145 | height: 10px;
146 | background: url(images/line.png) repeat-x;
147 | top: 105px;
148 | z-index: -10;
149 | }
150 |
151 | #about {
152 | width: 50%;
153 | margin: 0 auto;
154 | text-align: center;
155 | color: #999;
156 | font-size: 15px;
157 | margin-top: 35px;
158 | position: relative;
159 | /*min-width: 520px;*/
160 | }
161 |
162 | #about .title {
163 | font-weight: 300;
164 | margin-bottom: 0;
165 | }
166 |
167 | .title strong {
168 | color: #000;
169 | font-size: 20px;
170 | padding-right: 20px;
171 | }
172 |
173 | #about .brief {
174 | line-height: 30px;
175 | margin-top: 5px;
176 | }
177 |
178 | /*置灰*/
179 | .gray {
180 | -webkit-filter: grayscale(50%);
181 | -moz-filter: grayscale(50%);
182 | -ms-filter: grayscale(50%);
183 | -o-filter: grayscale(50%);
184 | filter: grayscale(50%);
185 | filter: gray;
186 | }
187 |
188 | /*变大*/
189 | .lecturer-list li.largen {
190 | height: 140px;
191 | width: 140px;
192 | }
193 |
194 | .lecturer-list li {
195 | border-radius: 50%;
196 | /*border: 1px solid #ccc;*/
197 | }
198 |
199 | /* 嘉宾, 不用名字了做class了 */
200 |
201 | .lec1 {
202 | background: url(images/lecturers/hui.png) 0% / cover no-repeat;
203 | }
204 |
205 | .lec2 {
206 | background: url(images/lecturers/thi.png) 0% / cover no-repeat;
207 | }
208 |
209 | .lec3 {
210 | background: url(images/lecturers/coredump.png) 0% / cover no-repeat;
211 | }
212 |
213 | .lec4 {
214 | background: url(images/lecturers/chun.png) 0% / cover no-repeat;
215 | }
216 |
217 | .lec5 {
218 | background: url(images/lecturers/datong.png) 0% / cover no-repeat;
219 | }
220 |
221 | .lec6 {
222 | background: url(images/lecturers/likai.png) 0% / cover no-repeat;
223 | }
224 |
225 | .lec7 {
226 | background: url(images/lecturers/zhoujing.png) 0% / cover no-repeat;
227 | }
228 |
229 | .QRcode {
230 | position: absolute;
231 | top: 240px;
232 | right: 11.5%;
233 | height: 108px;
234 | width: 108px;
235 | }
236 |
237 | /*详细内容包含日程表 & 赞助商*/
238 | .detail {
239 | width: 700px;
240 | margin: 20px auto;
241 | }
242 |
243 | /*日程表*/
244 | .schedule {
245 | width: 740px;
246 | }
247 |
248 | .schedule h1,
249 | .moment h1 {
250 | text-align: center;
251 | color: #34495e;
252 | text-shadow: 2px 2px 4px #34495e;
253 | }
254 |
255 | #schedule-list {
256 | color: #999;
257 | font-weight: bold;
258 | }
259 |
260 | #schedule-list > li {
261 | font-size: 0;
262 | margin-top: 10px;
263 | }
264 |
265 | .schedule-item {
266 | padding-top: 10px;
267 | padding-bottom: 10px;
268 | font-size: 16px;
269 | display: inline-block;
270 | width: 49%;
271 | background-color: #f8f8f8;
272 | text-indent: 20px;
273 | line-height: 1.5;
274 | box-shadow: 1px 1px #ccc;
275 | border-radius: 3px;
276 | }
277 |
278 | .doing {
279 | display: block;
280 | font-style: normal;
281 | padding: 0 20px;
282 | /*color: #2674BA;*/
283 | color: black;
284 | text-indent: 0;
285 | }
286 |
287 | .ppt,
288 | .video {
289 | color: #42b983;
290 | }
291 |
292 | /* 精彩瞬间 */
293 | #moment-list img {
294 | height: 150px;
295 | box-shadow: 5px 5px 5px #ccc;
296 | border-radius: 5px;
297 | }
298 |
299 | #moment-list img:hover {
300 | cursor: zoom-in;
301 | }
302 |
303 | .mask {
304 | position: fixed;
305 | top: 0;
306 | left: 0;
307 | right: 0;
308 | bottom: 0;
309 | background-color: #fff;
310 | text-align: center;
311 | vertical-align: middle;
312 | opacity: 0;
313 | transition: opacity 1s ease-out;
314 | }
315 |
316 | .mask.active {
317 | opacity: 1;
318 | }
319 |
320 | .mask:hover {
321 | cursor: zoom-out;
322 | }
323 |
324 | /* 为了居中 */
325 | .mask:after {
326 | display: inline-block;
327 | content: '';
328 | height: 100%;
329 | width: 1px;
330 | vertical-align: middle;
331 | }
332 |
333 | #expand-image {
334 | vertical-align: middle;
335 | }
336 |
337 | /*合作伙伴*/
338 | .sponsor {
339 | width: 700px;
340 | text-align: center;
341 | height: 250px;
342 | color: #34495e;
343 | text-shadow: 2px 2px 4px #34495e;
344 | }
345 |
346 | .tx,
347 | .or {
348 | width: 150px;
349 | }
350 |
351 | .stuq {
352 | width: 120px;
353 | margin-left: 10px;
354 | margin-right: 10px;
355 | }
356 |
357 | /*合作伙伴 logo*/
358 | .logo {
359 | width: 190px;
360 | }
361 |
362 | .powered-by,
363 | .provided-by {
364 | text-align: center;
365 | color: #ccc;
366 | }
367 |
368 | .powered-by {
369 | margin-bottom: 10px;
370 | }
371 |
372 | .provided-by {
373 | padding: 0 10px;
374 | /*font-size: 14px;*/
375 | }
376 |
377 | .foundation,
378 | .tencent,
379 | .zhuhai-open,
380 | .my-github {
381 | color: #2674ba;
382 | }
383 |
384 | @media (max-width: 420px) {
385 | html {
386 | min-width: 0;
387 | }
388 | body:before {
389 | height: 400px;
390 | background-position: center 50%;
391 | }
392 |
393 | .intro {
394 | transform: scale(0.8);
395 | }
396 |
397 | .or-logo {
398 | height: 40px;
399 | width: 40px;
400 | vertical-align: -8px;
401 | }
402 |
403 | /*不要线*/
404 | .line {
405 | display: none;
406 | }
407 |
408 | .lecturer {
409 | height: auto;
410 | }
411 |
412 | .lecturer-list {
413 | display: none;
414 | }
415 |
416 | #about {
417 | width: 80%;
418 | }
419 |
420 | #about .brief {
421 | line-height: 1.5;
422 | }
423 |
424 | #about .avatar {
425 | /*border: 2px solid #ccc;*/
426 | border-radius: 50%;
427 | height: 150px;
428 | width: 150px;
429 | margin: 0 auto;
430 | }
431 |
432 | .detail {
433 | width: 100%;
434 | }
435 |
436 | .schedule {
437 | width: 100%;
438 | }
439 |
440 | #schedule-list > li {
441 | text-align: center;
442 | }
443 |
444 | .schedule-item {
445 | text-align: left;
446 | width: 90%;
447 | }
448 |
449 | #moment-list img {
450 | display: block;
451 | margin: 10px auto;
452 | width: 90%;
453 | height: initial;
454 | }
455 |
456 | .sponsor {
457 | height: auto;
458 | width: 100%;
459 | }
460 |
461 | .logo-set {
462 | margin: 0;
463 | }
464 |
465 | .logo-set a {
466 | display: block;
467 | }
468 |
469 | .logo {
470 | width: 250px;
471 | }
472 | }
473 |
474 | @media (min-width: 421px) {
475 | .doing {
476 | min-height: 3em;
477 | }
478 | }
479 |
--------------------------------------------------------------------------------
/cn/2017/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | OpenResty Con 2017
9 |
10 |
18 |
25 |
26 |
27 |
28 |
29 |
OpenResty Con 2017
30 |
31 |
2017年10月21日 9:00 AM @北京
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
59 |
60 |
81 |
82 |
83 |
105 |
OpenResty 基金会 发起,珠海开源软件技术促进中心 联合主办
106 |
Powered by monkindey
107 |
108 |
109 |
110 |
![]()
111 |
112 |
113 |
114 |
118 |
119 |
120 |
126 |
127 |
128 |
136 |
137 |
144 |
145 |
146 |
147 |
148 |
--------------------------------------------------------------------------------
/cn/2017/index.js:
--------------------------------------------------------------------------------
1 | (function(global, document) {
2 | var PDF_PATH = 'download/ebook/2015_con/';
3 | var lecturerAbout = [];
4 | var schedule = [];
5 |
6 | /**
7 | * @嘉宾简介(需要修改简介文案直接在下面修改即可)
8 | * name:名字
9 | * job:职务
10 | * brief:简介
11 | *
12 | * 暴露出数据为了兼容移动端
13 | */
14 |
15 | global.__LECTURER_ABOUT__ = lecturerAbout = [
16 | {
17 | class: 'lec1',
18 | name: '龚凌晖',
19 | job: 'Strikingly 首席架构师',
20 | brief:
21 | '2013 年加入硅谷初创企业 Strikingly, 是 Strikingly 招聘的第一个工程师, 目前在团队中负责后端架构, \
22 | 自动化运维以及数据平台等团队的项目研发和团队管理。当前在技术领域主要关注 Web 应用的弹性伸缩、高可用以及安全性。\
23 | 工作之外最大的爱好是科幻小说和电影'
24 | },
25 | {
26 | class: 'lec2',
27 | name: 'Thibault Charbonnier',
28 | job: '',
29 | brief:
30 | 'Lead Engineer of Kong (Open Source API Gateway) and OpenResty Contributor'
31 | },
32 | {
33 | class: 'lec3',
34 | name: 'codedump',
35 | job: '游戏服务器后台开发者',
36 | brief:
37 | '长期从事互联网后端服务开发工作。曾经在网易等公司从事游戏服务器后台开发,在网络游戏开发工作期间\
38 | 接触到使用 C++ 编写服务核心引擎和使用 Lua 脚本编写游戏逻辑的技术组合后,对 Lua 产生了浓厚的兴趣,\
39 | 遂开始研究其实现原理,陆续公布于网络。个人博客:www.codedump.info 《Lua 设计与实现》作者'
40 | },
41 | {
42 | class: 'lec4',
43 | name: '章亦春',
44 | job: 'OpenResty 开源项目创建者',
45 | brief:
46 | 'OpenResty 开源项目创始人,OpenResty Inc. 公司创始人兼 CEO,NGINX 和 LuaJIT 等众多开源项目贡献者'
47 | },
48 | {
49 | class: 'lec5',
50 | name: '孙大同',
51 | job: 'OpenResty 公司技术合伙人',
52 | brief:
53 | 'OpenResty 公司技术合伙人,OpenResty 开源项目贡献者。曾在 LinkedIn,Cloudflare 等公司工作。\
54 | 对 NGINX,Linux Kernel 等有深入的研究。痴迷于 Linux 下的高性能网络程序开发以及性能优化'
55 | },
56 | {
57 | class: 'lec6',
58 | name: '李凯',
59 | job: '快乐茄后台研发工程师',
60 | brief:
61 | '专注于高并发场景解决方案,擅长 Python/Java/Lua 语言开发,对 OpenResty 有较多的实践案例,热爱新技术,喜欢折腾'
62 | },
63 | {
64 | class: 'lec7',
65 | name: '周晶',
66 | job: '微博平台研发技术专家',
67 | brief:
68 | '微博平台研发技术专家、OpenResty 官方委员会成员,高性能 OpenResty 开发框架 Vanilla 作者,目前主要负责微博平台服务化框架的研发,主攻跨语言方向'
69 | }
70 | ];
71 |
72 | global.__SCHEDULE__ = schedule = [
73 | {
74 | name: '龚凌晖',
75 | doing: 'OpenResty 在 Strikingly 集群架构的应用',
76 | ppt_url: 'books/OpenResty在Strikingly网站集群中的应用.pdf',
77 | pdf: '幻灯片'
78 | },
79 | {
80 | name: 'Thibault Charbonnier',
81 | doing: 'Developing a user-friendly OpenResty application',
82 | ppt_url: 'books/developing a friendly openresty application.pdf',
83 | pdf: '幻灯片'
84 | },
85 | {
86 | name: '章亦春',
87 | doing: 'OpenResty 的商业化和小语言',
88 | ppt_url: 'books/OpenResty Commercialization and DSL Era - V3.pdf',
89 | pdf: '幻灯片'
90 | },
91 | {
92 | name: '孙大同',
93 | doing: 'NGINX Stream 简介及 OpenResty 对其支持',
94 | ppt_url: 'books/Intruduction to the NGINX stream subsystem and OpenResty\'s support.pdf',
95 | pdf: '幻灯片'
96 | },
97 | {
98 | name: 'codedump',
99 | doing: 'Lua 5.1.4 GC 原理',
100 | ppt_url: 'books/Lua 5.1.4 GC 原理.pdf',
101 | pdf: '幻灯片'
102 | },
103 | {
104 | name: '李凯',
105 | doing: '基于 OpenResty 实现 IM 后台',
106 | ppt_url: 'books/基于openresty构建im后台.pdf',
107 | pdf: '幻灯片'
108 | },
109 | {
110 | name: '周晶',
111 | doing: 'OpenResty 在微博服务化进程中的应用',
112 | ppt_url: 'books/OpenResty 在微博服务化进程中的应用.pdf',
113 | pdf: '幻灯片'
114 | }
115 | ];
116 |
117 | var byClass = function(className) {
118 | return document.getElementsByClassName(className);
119 | };
120 |
121 | var byId = function(id) {
122 | return document.getElementById(id);
123 | };
124 |
125 | function renderSchedule() {
126 | var scheduleTmpl1 = byId('schedule-tmpl-1').innerHTML;
127 | var scheduleTmpl2 = byId('schedule-tmpl-2').innerHTML;
128 | var scheduleHtml = '';
129 | schedule.forEach(function(value, index) {
130 | if (index % 2 == 0) {
131 | scheduleHtml += '';
132 | scheduleHtml += scheduleTmpl1.replace(/{(\w+)}/g, function($1, $2) {
133 | // if ($2 == 'pdf' && value[$2]) {
134 | // return '演讲稿'
135 | // }
136 | return value[$2] ? value[$2] : '';
137 | });
138 | } else {
139 | scheduleHtml += scheduleTmpl2.replace(/{(\w+)}/g, function($1, $2) {
140 | // if ($2 == 'pdf' && value[$2]) {
141 | // return '演讲稿'
142 | // }
143 | return value[$2] ? value[$2] : '';
144 | });
145 | scheduleHtml += '';
146 | }
147 | });
148 | byId('schedule-list').innerHTML = scheduleHtml;
149 | }
150 |
151 | // 初始化页面触发click事件, 显示章亦春图片
152 | function initPage() {
153 | var aboutHtml = byId('about-tmpl').innerHTML;
154 | var event = new Event('click');
155 |
156 | event.INIT_PAGE = true;
157 | lecturerList.dispatchEvent(event);
158 |
159 | lecturerList.addEventListener(
160 | 'mouseover',
161 | function(e) {
162 | var target = e.target;
163 | if (target.classList.contains('gray')) {
164 | target.classList.remove('gray');
165 | target.addEventListener(
166 | 'mouseout',
167 | function addGray(e) {
168 | if (!this.classList.contains('largen')) {
169 | this.classList.add('gray');
170 | target.removeEventListener('mouseout', addGray);
171 | }
172 | },
173 | false
174 | );
175 | // 停止事件冒泡
176 | e.stopPropagation();
177 | }
178 | },
179 | false
180 | );
181 |
182 | // document.addEventListener("DOMContentLoaded", function(event) {
183 | // 需要重构
184 | renderSchedule();
185 | // });
186 | }
187 |
188 | function isPC() {
189 | return window.matchMedia('(min-width: 421px)').matches;
190 | }
191 |
192 | var about = byId('about');
193 | var lecturerList = byClass('lecturer-list')[0];
194 | var momentList = byId('moment-list');
195 | var imageMark = byId('image-mask');
196 | var expandedImage = byId('expand-image');
197 |
198 | // 记录前一个被点击的头像
199 | var preClickedAvatar = null;
200 | var preClickedIndex = -1;
201 |
202 | // 使用事件委托,减少事件绑定
203 | lecturerList.addEventListener(
204 | 'click',
205 | function(e) {
206 | var target = e.target;
207 | var index = parseInt(target.getAttribute('data-index'));
208 | var aboutHtml = byId('about-tmpl').innerHTML;
209 | var whereIsChun = 3;
210 |
211 | // 检测是否头像为140像素, 即是放大的图片
212 | if (target.classList.contains('avatar-140')) {
213 | return false;
214 | }
215 |
216 | // 初始化显示头像为章亦春
217 | if (e.INIT_PAGE) {
218 | target = target.children[whereIsChun];
219 | index = whereIsChun + 1;
220 | preClickedIndex = index;
221 | }
222 |
223 | if (index === 0) {
224 | return false;
225 | }
226 |
227 | // 使用简单的HTML模板
228 | aboutHtml = aboutHtml.replace(/{(\w+)}/g, function($1, $2) {
229 | return lecturerAbout[index - 1][$2];
230 | });
231 |
232 | if (preClickedAvatar && preClickedIndex != index) {
233 | // preClickedAvatar.firstElementChild.style.display = 'none';
234 | preClickedAvatar.classList.add('gray');
235 | preClickedAvatar.classList.remove('largen');
236 | }
237 |
238 | target.classList.remove('gray');
239 | target.classList.add('largen');
240 | // target.firstElementChild.style.display = 'inline-block';
241 |
242 | about.innerHTML = aboutHtml;
243 | preClickedAvatar = target;
244 | preClickedIndex = index;
245 | },
246 | false
247 | );
248 |
249 | // 如果是移动端的话就不要监听click了
250 | if (isPC()) {
251 | momentList.addEventListener(
252 | 'click',
253 | function(e) {
254 | imageMark.style.display = 'block';
255 | imageMark.classList.add('active');
256 | expandedImage.setAttribute('src', e.target.getAttribute('src'));
257 | },
258 | false
259 | );
260 |
261 | imageMark.addEventListener(
262 | 'click',
263 | function(e) {
264 | imageMark.classList.remove('active');
265 | imageMark.style.display = 'none';
266 | },
267 | false
268 | );
269 | }
270 |
271 | initPage();
272 |
273 | window.addEventListener('resize', function() {
274 | if (isPC()) {
275 | initPage();
276 | }
277 | });
278 |
279 | })(this, document);
280 |
--------------------------------------------------------------------------------
/cn/2017/mobile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author monkindey
3 | * @description 为了兼容移动端
4 | */
5 |
6 | function renderLecturerAtMobile() {
7 | var aboutHtml = document.getElementById('about-m-tmpl').innerHTML;
8 | var about = document.getElementById('about');
9 |
10 | about.innerHTML = __LECTURER_ABOUT__
11 | .map(function(l) {
12 | return aboutHtml.replace(/{(\w+)}/g, function($1, $2) {
13 | return l[$2];
14 | });
15 | })
16 | .join(' ');
17 | }
18 |
19 | function renderScheduleAtMobile() {
20 | var scheduleTmpl = document.getElementById('schedule-tmpl-1').innerHTML;
21 | // document.addEventListener("DOMContentLoaded", function() {
22 | // })
23 | document.getElementById('schedule-list').innerHTML = __SCHEDULE__
24 | .map(function(s, i) {
25 | return (
26 | '' +
27 | scheduleTmpl.replace(/{(\w+)}/g, function($1, $2) {
28 | return s[$2] ? s[$2] : '';
29 | }) +
30 | ''
31 | );
32 | })
33 | .join(' ');
34 | }
35 |
36 | /**
37 | * 414 iphone6 plus
38 | * 320 iphone 5
39 | * 375 iphone 6
40 | * 360 galaxy $5
41 | */
42 |
43 | function matchPageMedia() {
44 | if (window.matchMedia('(max-width: 420px)').matches) {
45 | renderLecturerAtMobile();
46 | renderScheduleAtMobile();
47 | }
48 | }
49 |
50 | matchPageMedia();
51 |
52 | window.addEventListener('resize', function() {
53 | matchPageMedia();
54 | });
55 |
--------------------------------------------------------------------------------
/cn/2017/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "openresty",
3 | "scripts": {
4 | "imin": "gulp imagemin"
5 | },
6 | "dependencies": {
7 | "jpegtran-bin": "^3.1.0"
8 | },
9 | "devDependencies": {
10 | "gulp": "^3.9.0",
11 | "gulp-cache": "^0.3.0",
12 | "gulp-clean": "^0.3.1",
13 | "gulp-concat": "^2.6.0",
14 | "gulp-imagemin": "^3.1.1",
15 | "gulp-inline-source": "^2.1.0",
16 | "gulp-uglify": "^1.4.1",
17 | "imagemin-pngquant": "^4.2.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/cn/2018/CNAME:
--------------------------------------------------------------------------------
1 | www.iresty.com
--------------------------------------------------------------------------------
/cn/2018/README.md:
--------------------------------------------------------------------------------
1 | ## 2018 OpenResty 大会
2 |
--------------------------------------------------------------------------------
/cn/2018/gulpfile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * 1. js压缩放置在html的script标签 用inlinesource
3 | * 2. 图片压缩 imagemin
4 | */
5 | 'use strict';
6 |
7 | var gulp = require('gulp');
8 | var uglify = require('gulp-uglify');
9 | var concat = require('gulp-concat');
10 | var cache = require('gulp-cache');
11 | var inlinesource = require('gulp-inline-source');
12 | var imagemin = require('gulp-imagemin');
13 | var pngquant = require('imagemin-pngquant');
14 |
15 | // gulp.task('inlinesource', function() {
16 | // return gulp.src('pre_index.html')
17 | // .pipe(inlinesource())
18 | // .pipe(gulp.dest('./index.html'));
19 | // });
20 |
21 | gulp.task('imagemin', function() {
22 | return gulp
23 | .src('images/**/*')
24 | .pipe(
25 | imagemin({
26 | // 无损压缩jpg
27 | // progressive: true,
28 | use: [pngquant()]
29 | })
30 | )
31 | .pipe(gulp.dest('images/'));
32 | });
33 |
34 | // gulp.watch('src/**', ['inlinesource']);
35 |
--------------------------------------------------------------------------------
/cn/2018/images/QRcode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/QRcode.jpg
--------------------------------------------------------------------------------
/cn/2018/images/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/bg.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/1.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/10.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/11.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/12.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/13.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/14.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/15.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/16.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/17.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/18.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/19.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/2.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/20.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/3.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/4.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/5.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/6.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/7.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/8.jpg
--------------------------------------------------------------------------------
/cn/2018/images/conference/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/conference/9.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/anonymous.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/anonymous.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/chun.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/chun.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/ck.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/ck.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/cs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/cs.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/dgl.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/dgl.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/gxp.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/gxp.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/hxl.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/hxl.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/lzx.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/lzx.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/thi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/thi.png
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/wfk.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/wfk.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/wky.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/wky.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/wlc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/wlc.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/wzy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/wzy.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/zc.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/zc.jpg
--------------------------------------------------------------------------------
/cn/2018/images/lecturers/zj.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/lecturers/zj.jpg
--------------------------------------------------------------------------------
/cn/2018/images/line.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/line.png
--------------------------------------------------------------------------------
/cn/2018/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/logo.png
--------------------------------------------------------------------------------
/cn/2018/images/sponsors/360.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/sponsors/360.png
--------------------------------------------------------------------------------
/cn/2018/images/sponsors/net.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/sponsors/net.png
--------------------------------------------------------------------------------
/cn/2018/images/sponsors/openresty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/sponsors/openresty.png
--------------------------------------------------------------------------------
/cn/2018/images/sponsors/smartisan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/sponsors/smartisan.png
--------------------------------------------------------------------------------
/cn/2018/images/sponsors/upyun.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/images/sponsors/upyun.jpg
--------------------------------------------------------------------------------
/cn/2018/index.css:
--------------------------------------------------------------------------------
1 | html {
2 | height: 100%;
3 | position: relative;
4 | min-height: 530px;
5 | font-family: consolas, 'Source Sans Pro', 'Helvetica Neue', Arial, sans-serif;
6 | }
7 |
8 | /*reset*/
9 | body {
10 | margin: 0;
11 | }
12 |
13 | ul {
14 | list-style: none;
15 | padding-left: 0;
16 | }
17 |
18 | a {
19 | text-decoration: none;
20 | }
21 |
22 | /*工具类*/
23 | .w180 {
24 | width: 180px;
25 | }
26 |
27 | .w150 {
28 | width: 120px;
29 | }
30 |
31 | .w250 {
32 | width: 250px;
33 | }
34 |
35 | .red {
36 | color: red;
37 | }
38 |
39 | .green {
40 | color: green;
41 | }
42 |
43 | .blue {
44 | color: rgb(61, 103, 166);
45 | }
46 |
47 | .fr {
48 | float: right;
49 | }
50 |
51 | .mt20 {
52 | margin-top: 20px;
53 | }
54 |
55 | .mt30 {
56 | margin-top: 30px;
57 | margin-bottom: 30px;
58 | }
59 |
60 | .date {
61 | text-align: center;
62 | }
63 |
64 | body:before {
65 | width: 100%;
66 | height: 515px;
67 | background-image: url(images/bg.jpg);
68 | background-repeat: no-repeat;
69 | background-size: cover;
70 | display: block;
71 | z-index: -1;
72 | content: '';
73 | }
74 |
75 | .nav-container {
76 | margin-top: 10px;
77 | text-align: center;
78 | }
79 |
80 | #nav {
81 | margin: 0;
82 | margin-top: 20px;
83 | padding: 0;
84 | color: #ccc;
85 | display: inline-block;
86 | font-size: 0;
87 | }
88 |
89 | #nav li {
90 | text-align: center;
91 | font-size: 16px;
92 | padding: 10px;
93 | display: inline-block;
94 | width: 60px;
95 | border: 1px solid #ccc;
96 | cursor: pointer;
97 | }
98 |
99 | #nav li.active {
100 | background-color: rgba(0, 0, 0, 0.8);
101 | border: 1px solid rgba(0, 0, 0, 0.8);
102 | }
103 |
104 | #nav li:first-child {
105 | border-top-left-radius: 3px;
106 | border-bottom-left-radius: 3px;
107 | }
108 |
109 | #nav li:last-child {
110 | border-left: none;
111 | border-top-right-radius: 3px;
112 | border-bottom-right-radius: 3px;
113 | }
114 |
115 | .intro {
116 | width: 100%;
117 | color: white;
118 | position: absolute;
119 | top: 10%;
120 | right: 0;
121 | left: 0;
122 | margin: auto;
123 | text-align: center;
124 | }
125 |
126 | .topic {
127 | width: 960px;
128 | margin: 0 auto;
129 | color: #999;
130 | text-indent: 20px;
131 | }
132 |
133 | .topic dt {
134 | border-left: 2px solid #2674ba;
135 | }
136 |
137 | .topic dd {
138 | margin-left: 20px;
139 | font-size: 14px;
140 | margin-top: 5px;
141 | }
142 |
143 | .or-logo {
144 | height: 100px;
145 | width: 100px;
146 | vertical-align: -10px;
147 | }
148 |
149 | .attent_button {
150 | border: 2px solid rgba(255,255,255,0.8);
151 | background: rgba(255,255,255,0.1)!important;
152 | color: rgba(255,255,255,1);
153 | font-weight: bold;
154 | padding: 10px;
155 | padding-left: 20px;
156 | padding-right: 20px;
157 | }
158 |
159 | .address {
160 | color: #ccc;
161 | cursor: pointer;
162 | }
163 |
164 | .join {
165 | color: #fff;
166 | font-size: 100%;
167 | display: inline-block;
168 | background-color: #00b220;
169 | padding: 0.8em 1.8em;
170 | margin: 0.5em 0 0 0;
171 | line-height: 1;
172 | border-radius: 1.2em;
173 | text-decoration: none;
174 | border: none;
175 | outline: none;
176 | cursor: pointer;
177 | box-shadow: 0 0.1em 0.2em rgba(0, 0, 0, 0.3);
178 | transition: 0.7s;
179 | }
180 |
181 | .lecturer {
182 | position: relative;
183 | width: 100%;
184 | height: 400px;
185 | }
186 |
187 | .lecturer-list-wrapper {
188 | width: 890px;
189 | margin: 0 auto;
190 | overflow: hidden;
191 | }
192 |
193 | #lecturer-list {
194 | text-align: center;
195 | height: 150px;
196 | white-space: nowrap;
197 | -webkit-transition: 0.8s;
198 | transition: 0.8s;
199 | font-size: 0;
200 | }
201 |
202 | #lecturer-list:after {
203 | content: '';
204 | height: 100%;
205 | width: 0;
206 | display: inline-block;
207 | vertical-align: middle;
208 | }
209 |
210 | #lecturer-list li {
211 | vertical-align: middle;
212 | display: inline-block;
213 | height: 100px;
214 | width: 100px;
215 | margin-left: 25px;
216 | -webkit-transition: 0.2s;
217 | transition: 0.2s;
218 | background-size: contain;
219 | cursor: pointer;
220 | }
221 |
222 | #lecturer-list li:first-child {
223 | margin-left: 0;
224 | }
225 |
226 | #lecturer-list li:nth-child(8) {
227 | margin-left: 0;
228 | }
229 |
230 | /*置灰*/
231 | .gray {
232 | -webkit-filter: grayscale(50%);
233 | -moz-filter: grayscale(50%);
234 | -ms-filter: grayscale(50%);
235 | -o-filter: grayscale(50%);
236 | filter: grayscale(50%);
237 | filter: gray;
238 | }
239 |
240 | /*变大*/
241 | #lecturer-list li.largen {
242 | height: 140px;
243 | width: 140px;
244 | }
245 |
246 | #lecturer-list li {
247 | border-radius: 50%;
248 | /*border: 1px solid #ccc;*/
249 | }
250 |
251 | #lecturer-list li > img {
252 | height: 100%;
253 | width: 100%;
254 | border-radius: 50%;
255 | }
256 |
257 | #switcher {
258 | text-align: center;
259 | position: absolute;
260 | bottom: 0px;
261 | width: 100%;
262 | padding-top: 100px;
263 | }
264 |
265 | #switcher i {
266 | display: inline-block;
267 | border: 10px solid #ccc;
268 | border-radius: 50%;
269 | cursor: pointer;
270 | margin: 5px;
271 | }
272 |
273 | #switcher i.active {
274 | border-color: #1f63af;
275 | }
276 |
277 | .line {
278 | position: relative;
279 | height: 10px;
280 | background: url(images/line.png) repeat-x;
281 | top: 105px;
282 | z-index: -10;
283 | }
284 |
285 | #about {
286 | width: 50%;
287 | margin: 0 auto;
288 | text-align: left;
289 | color: #222;
290 | font-size: 15px;
291 | margin-top: 20px;
292 | position: relative;
293 | }
294 |
295 | #about .title {
296 | font-weight: 300;
297 | margin-bottom: 0;
298 | }
299 |
300 | .title strong {
301 | color: #000;
302 | font-size: 20px;
303 | padding-right: 20px;
304 | }
305 |
306 | #about .brief {
307 | line-height: 26px;
308 | margin-top: 5px;
309 | }
310 |
311 | /*日程表*/
312 | .schedule {
313 | width: 72%;
314 | margin: 35px auto;
315 | }
316 |
317 | .schedule h1,
318 | .moment h1 {
319 | text-align: center;
320 | color: #34495e;
321 | text-shadow: 2px 2px 4px #34495e;
322 | }
323 |
324 | .schedule-list {
325 | color: #999;
326 | font-weight: bold;
327 | }
328 |
329 | .schedule-list > li {
330 | font-size: 0;
331 | margin-top: 10px;
332 | }
333 |
334 | .schedule-item {
335 | padding-top: 10px;
336 | padding-bottom: 10px;
337 | font-size: 16px;
338 | display: inline-block;
339 | width: 49%;
340 | background-color: #f8f8f8;
341 | text-indent: 20px;
342 | line-height: 1.5;
343 | box-shadow: 1px 1px #ccc;
344 | border-radius: 3px;
345 | }
346 |
347 | .doing {
348 | display: block;
349 | font-style: normal;
350 | padding: 0 20px;
351 | /*color: #2674BA;*/
352 | color: black;
353 | text-indent: 0;
354 | }
355 |
356 | .ppt,
357 | .video {
358 | color: #42b983;
359 | }
360 |
361 | #moment-list {
362 | text-align: center;
363 | }
364 |
365 | /* 精彩瞬间 */
366 | #moment-list img {
367 | height: 150px;
368 | width: 224px;
369 | box-shadow: 5px 5px 5px #ccc;
370 | border-radius: 3px;
371 | }
372 |
373 | #moment-list img:hover {
374 | cursor: zoom-in;
375 | }
376 |
377 | .mask {
378 | position: fixed;
379 | top: 0;
380 | left: 0;
381 | right: 0;
382 | bottom: 0;
383 | background-color: #fff;
384 | text-align: center;
385 | vertical-align: middle;
386 | opacity: 0;
387 | transition: opacity 1s ease-out;
388 | }
389 |
390 | .mask.active {
391 | opacity: 1;
392 | }
393 |
394 | .mask:hover {
395 | cursor: zoom-out;
396 | }
397 |
398 | /* 为了居中 */
399 | .mask:after {
400 | display: inline-block;
401 | content: '';
402 | height: 100%;
403 | width: 1px;
404 | vertical-align: middle;
405 | }
406 |
407 | #expand-image {
408 | vertical-align: middle;
409 | }
410 |
411 | /*合作伙伴*/
412 | .sponsor {
413 | width: 700px;
414 | text-align: center;
415 | height: 300px;
416 | color: #34495e;
417 | margin: 0 auto;
418 | text-shadow: 2px 2px 4px #34495e;
419 | }
420 |
421 | .tx,
422 | .or {
423 | width: 150px;
424 | }
425 |
426 | .stuq {
427 | width: 120px;
428 | margin-left: 10px;
429 | margin-right: 10px;
430 | }
431 |
432 | /*合作伙伴 logo*/
433 | .logo {
434 | width: 190px;
435 | }
436 |
437 | .powered-by,
438 | .provided-by {
439 | text-align: center;
440 | color: #ccc;
441 | }
442 |
443 | .powered-by {
444 | margin-bottom: 10px;
445 | }
446 |
447 | .provided-by {
448 | padding: 0 10px;
449 | /*font-size: 14px;*/
450 | }
451 |
452 | .foundation,
453 | .tencent,
454 | .zhuhai-open,
455 | .my-github {
456 | color: #2674ba;
457 | }
458 |
459 | @media (max-width: 420px) {
460 | html {
461 | min-width: 0;
462 | }
463 |
464 | body:before {
465 | height: 400px;
466 | background-position: center 50%;
467 | }
468 |
469 | .intro {
470 | transform: scale(0.8);
471 | top: 6%;
472 | }
473 |
474 | .or-logo {
475 | height: 40px;
476 | width: 40px;
477 | vertical-align: -8px;
478 | }
479 |
480 | #switcher {
481 | display: none;
482 | }
483 |
484 | /*不要线*/
485 | .line {
486 | display: none;
487 | }
488 |
489 | .lecturer {
490 | height: auto;
491 | }
492 |
493 | .lecturer-list-wrapper {
494 | display: none;
495 | }
496 |
497 | .avatar {
498 | border-radius: 50%;
499 | height: 150px;
500 | width: 150px;
501 | margin: 0 auto;
502 | background-size: contain;
503 | }
504 |
505 | #about .brief {
506 | line-height: 20px;
507 | font-size: 14px;
508 | }
509 |
510 | .detail {
511 | width: 100%;
512 | }
513 |
514 | .schedule {
515 | width: 100%;
516 | }
517 |
518 | .schedule-list > li {
519 | text-align: center;
520 | }
521 |
522 | .schedule-item {
523 | text-align: left;
524 | width: 90%;
525 | }
526 |
527 | .sponsor {
528 | height: auto;
529 | width: 100%;
530 | }
531 |
532 | .logo-set {
533 | margin: 0;
534 | }
535 |
536 | .logo-set a {
537 | display: block;
538 | }
539 |
540 | .logo {
541 | width: 250px;
542 | }
543 | }
544 |
545 | @media (min-width: 421px) {
546 | .doing {
547 | min-height: 3em;
548 | }
549 | }
550 |
--------------------------------------------------------------------------------
/cn/2018/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | OpenResty Con 2018
9 |
10 |
18 |
25 |
26 |
27 |
28 |
29 |
OpenResty Con 2018
30 |
31 |
2018 年 11 月 17-18 日 @杭州
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
大会议题
53 |
11.17
54 |
55 |
11.18
56 |
57 |
58 |
59 |
99 |
100 |
101 |
![]()
102 |
103 |
104 |
129 |
130 | OpenResty 基金会 发起,珠海开源软件技术促进中心 联合主办
131 | Powered by monkindey
132 |
133 |
134 |
137 |
138 |
142 |
143 |
144 |
152 |
153 |
154 |
163 |
164 |
173 |
174 |
175 |
176 |
177 |
--------------------------------------------------------------------------------
/cn/2018/index.js:
--------------------------------------------------------------------------------
1 | (function(global, document) {
2 | /**
3 | * @嘉宾简介(需要修改简介文案直接在下面修改即可)
4 | * name:名字
5 | * icon: 头像
6 | * job:职务
7 | * brief:简介
8 | *
9 | * 暴露出数据为了兼容移动端
10 | */
11 | var lecturers = [
12 | {
13 | name: '张超',
14 | icon: 'zc.jpg',
15 | job: '又拍云',
16 | brief:
17 | '又拍云系统开发工程师,负责又拍云 CDN 平台反向代理层组件的开发和维护。Nginx/OpenResty 等开源软件爱好者。
本次分享会着重于介绍又拍云 CDN 平台在不断的更新迭代中总结出的关于 OpenResty/Nginx 服务优化的经验,包括构建容器化的生产环境性能分析环境、集成 SSL 硬件加速至 OpenResty及其陷阱等案例。'
18 | },
19 | {
20 | name: '顾小平',
21 | icon: 'gxp.jpg',
22 | job: '腾讯',
23 | brief:
24 | '顾小平,腾讯游戏营销技术后台负责人,从事Ad-Tech&Mar-Tech技术,专注于通过数据,算法,以及技术的力量来改变营销的效率和效果的提升。本次分享为大家带来OpenResty在腾讯内部的2个应用案例,一个是社区和内容营销中内部API网关luffy,重点讲述利用火焰图指导性能优化;另一个是OpenResty在腾讯游戏广告营销投放系统中的应用,通过构建RTB实时竞价网关,实时竞价引擎,轻松支持10万+QPS,支持数亿/年广告投放放费用。'
25 | },
26 | {
27 | name: '洪晓龙',
28 | icon: 'hxl.jpg',
29 | job: '阿里巴巴',
30 | brief:
31 | '阿里巴巴技术专家,负责阿里云CDN节点核心系统基础组件研发,Tengine开源社区maintainer。团队在过去多年服务客户过程中,在NGINX/Tengine研发历程中遇到各种新场景新问题,为定位和解决问题,系统性地提出了多种解决方案,沉淀出多种监控技巧和监控工具,帮助我们快速定位海量用户问题和系统故障。我们期望通过技术进行极致优化,为所有的互联网用户提供极致的体验。'
32 | },
33 | {
34 | name: '章亦春',
35 | class: 'god-lecturer',
36 | icon: 'chun.jpg',
37 | job: 'OpenResty Inc',
38 | brief:
39 | 'OpenResty 开源项目创始人,OpenResty Inc. 公司创始人兼 CEO,NGINX 和 LuaJIT 等众多开源项目贡献者'
40 | },
41 | {
42 | name: '戴冠兰',
43 | icon: 'dgl.jpg',
44 | job: 'Kong Inc',
45 | brief:
46 | 'OpenResty 贡献者。现就职于Kong, 担任工程经理与技术负责人,带领 Kong Cloud 、人工智能以及机器学习团队,负责产品研发与落地。他之前曾在Cloudflare 担任Tech Lead, 参与过达到万亿级别每月请求规模能力的 WAF 与 CDN 的研发。本次他将结合多年实战经验,与大家分享基于 OpenResty 大规模 SaaS 服务的架构设计、优化与运维技巧。'
47 | },
48 | {
49 | name: '吴中骅',
50 | icon: 'wzy.jpg',
51 | job: '同程艺龙',
52 | brief:
53 | '目前在同程艺龙机票事业群担任资深架构师,在公司内部推动了多项 OpenResty 应用,包括 API gateway 多功能负载,其包括了反代,限流,缓存,防爬,灰度等诸多功能、使用 OpenResty 开发了基于ws协议的实时推送平台、基于OpenResty开发了waf软防火墙等项目。本次主要分享API gateway在同程艺龙的实战经历,讲述OpenResty如何在每天10几亿请求量里完成ab灰度测试,如何利用OpenResty来和爬虫对抗,让业务轻松接入风控系统。'
54 | },
55 | {
56 | name: '蔡书',
57 | icon: 'cs.jpg',
58 | brief:
59 | '越来越多的项目基于 spring cloud 或者 kubernetes 做微服务,这里我们分享一些用 Kong 做服务网关的经历。在这里,你可以了解到,如何用 Kong 替代 zuul 做服务网关,以及如何在 kubernetes 上做更广泛的服务治理。'
60 | },
61 | {
62 | name: '罗泽轩',
63 | icon: 'lzx.jpg',
64 | job: 'OpenResty Inc',
65 | brief:
66 | '多个开源项目的活跃贡献者,OpenResty Inc. 工程师。以编写正确且高效的 OpenResty 应用为目的,谈谈 OpenResty/LuaJIT 中的一些内部实现,包括一些鲜为人知/值得注意的地方。'
67 | },
68 | {
69 | name: '王发康',
70 | icon: 'wfk.jpg',
71 | job: '阿里巴巴',
72 | brief:
73 | '阿里巴巴技术专家、负责阿里集团WEB统一接入层的开发及维护。秉着软硬件结合的性能优化思想,阿里七层流量入口核心系统Tengine/Nginx 是如何使用硬件加速卸载一些 CPU 密集型运算(比如 HTTPS 和 GZIP)从而取得性能提升、成本优化。'
74 | },
75 | {
76 | name: 'Thibault Charbonnier',
77 | icon: 'thi.png',
78 | job: 'Kong Inc',
79 | brief:
80 | 'Principal Engineer at Kong Inc. and OpenResty contributor. In this talk, we will dive into the new "mlcache" library, which aims at providing a powerful abstraction for layered caching in OpenResty. We will explore several practical use-cases for it that will help you achieve high-performance goals for your applications.'
81 | },
82 | {
83 | name: '王克毅',
84 | icon: 'wky.jpg',
85 | brief:
86 | '介绍 Urn 语言 (一种用 Lua 实现的 Lisp 方言),以及其在实际工作中与 OpenResty 搭配使用的经验。Lisp 是一种历史悠久,使用灵活的编程语言,适当使用可以有很高的开发效率,结合 OpenResty 的优良性能,会使开发过程更加行云流水。'
87 | },
88 | {
89 | name: '周俊',
90 | icon: 'zj.jpg',
91 | brief:
92 | '安全从业人员,本次议题主要是把在日常工作中处理的攻击防护事件总结整理,和大家分享交流'
93 | },
94 | {
95 | name: '袁开',
96 | icon: 'ck.jpg',
97 | job: '华数传媒',
98 | brief:
99 | '就职于华数传媒网络有限公司,新媒体事业部总架构师。介绍使用 OpenResty 建造企业网关整合企业服务,打通登录认证的方法,并介绍该设计的底层设计思路。介绍生产力工具 emmylua 及使用其文档格式建立 HTTP RPC 服务。'
100 | }
101 | ];
102 | var schedule = [
103 | {
104 | time: '8:30',
105 | name: '签到'
106 | },
107 | {
108 | time: '9:00',
109 | name: '张超',
110 | doing: '又拍云 OpenResty/Nginx 服务优化实践',
111 | ppt_url: 'ppt/又拍云服务优化实践--张超.pdf',
112 | pdf: '幻灯片',
113 | youku_url: 'http://v.youku.com/v_show/id_XMzk0MzkwMDczMg==.html?spm=a2h3j.8428770.3416059.1',
114 | youtube_url: 'https://www.youtube.com/watch?v=cCjYAaXMpu8'
115 | },
116 | {
117 | time: '9:50',
118 | name: '顾小平',
119 | doing: 'OpenResty在腾讯游戏广告投放系统中的应用',
120 | ppt_url: 'ppt/OpenResty在腾讯游戏营销技术中的应用--顾小平.pdf',
121 | pdf: '幻灯片',
122 | youku_url: 'http://v.youku.com/v_show/id_XMzk0MzkzOTAwNA==.html?spm=a2h3j.8428770.3416059.1',
123 | youtube_url: 'https://www.youtube.com/watch?v=3qfDnyqW66U'
124 | },
125 | {
126 | time: '10:40',
127 | name: '章亦春',
128 | doing: 'OpenResty 开源世界新发展',
129 | ppt_url: 'http://t.cn/E25hVBy',
130 | pdf: '幻灯片',
131 | video_url: 'http://t.cn/E25hVBU',
132 | },
133 | {
134 | time: '13:00',
135 | name: '洪晓龙',
136 | doing: '深度玩转 NGINX 监控',
137 | ppt_url: 'ppt/深度玩转NGINX监控--洪晓龙.pdf',
138 | pdf: '幻灯片',
139 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzk3MTk3Mg==.html?spm=a2h3j.8428770.3416059.1',
140 | youtube_url: 'https://www.youtube.com/watch?v=hTLYtcbdqkg'
141 | },
142 | {
143 | time: '13:45',
144 | name: '戴冠兰',
145 | doing: '大规模OpenResty SaaS服务构建实践与技巧',
146 | ppt_url: 'ppt/大规模OpenResty SaaS服务的搭建与运维技巧--戴冠兰.pdf',
147 | pdf: '幻灯片',
148 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzk3NzI3Mg==.html?spm=a2h3j.8428770.3416059.1',
149 | youtube_url: 'https://www.youtube.com/watch?v=dEGBES_q2To'
150 | },
151 | {
152 | time: '14:30',
153 | name: '吴中骅',
154 | doing: 'OpenResty 在同程艺龙的应用',
155 | ppt_url: 'ppt/OpenResty 在同程艺龙的应用--吴中骅.pdf',
156 | pdf: '幻灯片',
157 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzk4MDI4OA==.html?spm=a2h3j.8428770.3416059.1'
158 | },
159 | {
160 | time: '15:15',
161 | name: '蔡书',
162 | doing: 'Kong 做微服务网关的实践',
163 | ppt_url: 'ppt/Kong做微服务网关的实践--蔡书.pdf',
164 | pdf: '幻灯片',
165 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzk4MzI0OA==.html?spm=a2h3j.8428770.3416059.1',
166 | youtube_url: 'https://www.youtube.com/watch?v=VG5QF7CvSVA'
167 | },
168 | // 11.18
169 | {
170 | time: '9:00',
171 | name: 'Thibault Charbonnier',
172 | doing: 'Layered caching in OpenResty',
173 | ppt_url: 'ppt/layered_caching_in_openresty--Thibault.pdf',
174 | pdf: '幻灯片',
175 | youku_url: 'http://v.youku.com/v_show/id_XMzk0MzcyMDMwMA==.html?spm=a2h3j.8428770.3416059.1',
176 | youtube_url: 'https://www.youtube.com/watch?v=QF1Gtj3ahB0'
177 | },
178 | {
179 | time: '9:50',
180 | name: '罗泽轩',
181 | doing: '如何编写正确且高效的OpenResty应用',
182 | ppt_url: 'ppt/如何编写正确且高效的OpenResty应用--罗泽轩.pdf',
183 | pdf: '幻灯片',
184 | youku_url: 'http://v.youku.com/v_show/id_XMzk0MzcyNTg4NA==.html?spm=a2h3j.8428770.3416059.1',
185 | youtube_url: 'https://www.youtube.com/watch?v=kIYa5Ff7IOA'
186 | },
187 | {
188 | time: '10:40',
189 | name: '章亦春',
190 | doing: '开源 OpenResty 的商业技术支持与 OpenResty Trace 平台',
191 | ppt_url: 'http://t.cn/E2SfrsX',
192 | pdf: '幻灯片',
193 | video_url: 'http://t.cn/E2Sfrsx',
194 | },
195 | {
196 | time: '13:00',
197 | name: '王发康',
198 | doing: '阿里七层流量入口Tengine硬件加速探索之路',
199 | ppt_url: 'ppt/阿里七层流量入口Tengine硬件加速探索之路--王发康.pdf',
200 | pdf: '幻灯片',
201 | youku_url: 'http://v.youku.com/v_show/id_XMzk0MzczMDY5Ng==.html?spm=a2h3j.8428770.3416059.1',
202 | youtube_url: 'https://www.youtube.com/watch?v=KhQNKCUhseE'
203 | },
204 | {
205 | time: '13:45',
206 | name: '王克毅',
207 | doing: '把 Lisp 代码塞进 OpenResty',
208 | ppt_url: 'ppt/把 Lisp 代码塞进 OpenResty--王克毅.pdf',
209 | pdf: '幻灯片',
210 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzg1Nzk5Ng==.html?spm=a2h3j.8428770.3416059.1'
211 | },
212 | {
213 | time: '14:30',
214 | name: '袁开',
215 | doing: 'OpenResty 企业网关应用',
216 | ppt_url: 'ppt/OpenResty 企业网关应用--袁开.pdf',
217 | pdf: '幻灯片',
218 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzc1NjE2OA==.html?spm=a2h3j.8428770.3416059.1',
219 | youtube_url: 'https://www.youtube.com/watch?v=M2vb94t1pLU'
220 | },
221 | {
222 | time: '15:15',
223 | name: '周俊',
224 | doing: 'OpenResty 实践 CC 攻击防护',
225 | ppt_url: 'ppt/OpenResty 实践 CC 攻击防护--周俊.pdf',
226 | pdf: '幻灯片',
227 | youku_url: 'http://v.youku.com/v_show/id_XMzk0Mzc2Mjc0NA==.html?spm=a2h3j.8428770.3416059.1',
228 | youtube_url: 'https://www.youtube.com/watch?v=7rZlr-s0RRc'
229 | }
230 | ].map(function(s) {
231 | if (s.youku_url) {
232 | s.youkuVideo = '优酷';
233 | }
234 |
235 | if (s.youtube_url) {
236 | s.youtubeVideo = 'YouTube';
237 | }
238 |
239 | if (s.video_url) {
240 | s.video = '视频';
241 | }
242 |
243 | return s;
244 | });
245 |
246 | global.__LECTURER_ABOUT__ = lecturers;
247 | global.__SCHEDULE__ = schedule;
248 |
249 | function byId(id) {
250 | return document.getElementById(id);
251 | }
252 |
253 | function toArray(collection) {
254 | return [].slice.apply(collection);
255 | }
256 |
257 | var lecturerList = byId('lecturer-list');
258 | var momentList = byId('moment-list');
259 | var imageMark = byId('image-mask');
260 | var expandedImage = byId('expand-image');
261 | var switcher = byId('switcher');
262 | var about = byId('about');
263 | var lecturerTmpl = byId('lecturer-tmpl').innerHTML;
264 | var aboutTmpl = byId('about-tmpl').innerHTML;
265 |
266 | // 记录前一个被点击的头像
267 | var preClickedAvatar = null;
268 | var preClickedIndex = -1;
269 | // 890 - (140 - 100)
270 | var screen = 850;
271 | var whereIsChun = 3;
272 | var whereIsOther = 9;
273 | var whereIsPerson = [whereIsChun, whereIsOther];
274 |
275 | function generateScheduleHTML(schedule) {
276 | var scheduleHTML = '';
277 | var scheduleTmpl1 = byId('schedule-tmpl-1').innerHTML;
278 | var scheduleTmpl2 = byId('schedule-tmpl-2').innerHTML;
279 |
280 | schedule.forEach(function(value, index) {
281 | if (index % 2 == 0) {
282 | scheduleHTML += '';
283 | scheduleHTML += scheduleTmpl1.replace(/{(\w+)}/g, function($1, $2) {
284 | return value[$2] ? value[$2] : '';
285 | });
286 | } else {
287 | scheduleHTML += scheduleTmpl2.replace(/{(\w+)}/g, function($1, $2) {
288 | return value[$2] ? value[$2] : '';
289 | });
290 | scheduleHTML += '';
291 | }
292 | });
293 |
294 | return scheduleHTML;
295 | }
296 |
297 | function renderSchedule() {
298 | var schedule17 = schedule.slice(0, 8);
299 | var schedule18 = schedule.slice(8);
300 | byId('schedule-list-17').innerHTML = generateScheduleHTML(schedule17);
301 | byId('schedule-list-18').innerHTML = generateScheduleHTML(schedule18);
302 | }
303 |
304 | function renderLecturerList(lecturers) {
305 | var lecturerHTML = lecturers
306 | .map(function(lecturer, index) {
307 | lecturer.index = index + 1;
308 | return lecturerTmpl.replace(/{(\w+)}/g, function($1, $2) {
309 | return lecturer[$2] ? lecturer[$2] : '';
310 | });
311 | })
312 | .join(' ');
313 | lecturerList.innerHTML = lecturerHTML;
314 | }
315 |
316 | function isPC() {
317 | return window.matchMedia('(min-width: 421px)').matches;
318 | }
319 |
320 | // 初始化页面触发click事件, 显示章亦春图片
321 | function initPage() {
322 | var event = new Event('click');
323 | renderLecturerList(lecturers);
324 | initEvents();
325 |
326 | event.AUTO_INDEX = whereIsChun;
327 | lecturerList.dispatchEvent(event);
328 | renderSchedule();
329 | }
330 |
331 | function initEvents() {
332 | switcher.addEventListener(
333 | 'click',
334 | function(e) {
335 | var target = e.target;
336 | var offset = target.dataset['offset'];
337 | var event = new Event('click');
338 |
339 | if (offset === undefined) {
340 | return;
341 | }
342 |
343 | toArray(switcher.children).forEach(function(dot) {
344 | dot.classList.remove('active');
345 | });
346 | target.classList.add('active');
347 | lecturerList.style.transform = `translate3d(-${screen *
348 | offset}px, 0px, 0px)`;
349 |
350 | event.AUTO_INDEX = whereIsPerson[offset];
351 | lecturerList.dispatchEvent(event);
352 | },
353 | false
354 | );
355 |
356 | // 使用事件委托,减少事件绑定
357 | lecturerList.addEventListener(
358 | 'click',
359 | function(e) {
360 | var target = e.target;
361 | var index = parseInt(target.getAttribute('data-index'));
362 | var autoIndex = e.AUTO_INDEX;
363 |
364 | if (autoIndex) {
365 | target = target.children[autoIndex];
366 | index = autoIndex + 1;
367 | }
368 |
369 | if (isNaN(index)) {
370 | return;
371 | }
372 |
373 | if (preClickedAvatar && preClickedIndex != index) {
374 | // preClickedAvatar.classList.add('gray');
375 | preClickedAvatar.classList.remove('largen');
376 | }
377 |
378 | // target.classList.remove('gray');
379 | target.classList.add('largen');
380 |
381 | about.innerHTML = aboutTmpl.replace(/{(\w+)}/g, function($1, $2) {
382 | return lecturers[index - 1][$2] || '';
383 | });
384 |
385 | preClickedAvatar = target;
386 | preClickedIndex = index;
387 | },
388 | false
389 | );
390 | }
391 |
392 | initPage();
393 |
394 | // 如果是移动端的话就不要监听click了
395 | if (isPC()) {
396 | momentList.addEventListener(
397 | 'click',
398 | function(e) {
399 | if (e.target.nodeName === 'IMG') {
400 | imageMark.style.display = 'block';
401 | imageMark.classList.add('active');
402 | expandedImage.setAttribute('src', e.target.getAttribute('src'));
403 | }
404 | },
405 | false
406 | );
407 |
408 | imageMark.addEventListener(
409 | 'click',
410 | function(e) {
411 | imageMark.classList.remove('active');
412 | imageMark.style.display = 'none';
413 | },
414 | false
415 | );
416 | }
417 |
418 | // window.addEventListener('resize', function() {
419 | // });
420 | })(this, document);
421 |
--------------------------------------------------------------------------------
/cn/2018/mobile.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @author monkindey
3 | * @description 为了兼容移动端
4 | */
5 |
6 | function renderLecturerAtMobile() {
7 | var aboutHtml = document.getElementById('about-m-tmpl').innerHTML;
8 | var lecturer = document.getElementById('about');
9 |
10 | lecturer.innerHTML = __LECTURER_ABOUT__
11 | .map(function(l) {
12 | return aboutHtml.replace(/{(\w+)}/g, function($1, $2) {
13 | return l[$2] || '';
14 | });
15 | })
16 | .join(' ');
17 | }
18 |
19 | function generateScheduleHTML(scheduleTmpl, schedule) {
20 | return schedule
21 | .map(function(s, i) {
22 | return (
23 | '' +
24 | scheduleTmpl.replace(/{(\w+)}/g, function($1, $2) {
25 | return s[$2] ? s[$2] : '';
26 | }) +
27 | ''
28 | );
29 | })
30 | .join(' ');
31 | }
32 |
33 | function renderScheduleAtMobile() {
34 | var scheduleTmpl = document.getElementById('schedule-tmpl-1').innerHTML;
35 | document.getElementById('schedule-list-17').innerHTML = generateScheduleHTML(
36 | scheduleTmpl,
37 | __SCHEDULE__.slice(0, 8)
38 | );
39 |
40 | document.getElementById('schedule-list-18').innerHTML = generateScheduleHTML(
41 | scheduleTmpl,
42 | __SCHEDULE__.slice(8)
43 | );
44 | }
45 |
46 | /**
47 | * 414 iphone6 plus
48 | * 320 iphone 5
49 | * 375 iphone 6
50 | * 360 galaxy $5
51 | */
52 | function matchPageMedia() {
53 | if (window.matchMedia('(max-width: 420px)').matches) {
54 | renderLecturerAtMobile();
55 | renderScheduleAtMobile();
56 | }
57 | }
58 |
59 | matchPageMedia();
60 |
61 | window.addEventListener('resize', function() {
62 | matchPageMedia();
63 | });
64 |
--------------------------------------------------------------------------------
/cn/2018/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "openresty",
3 | "scripts": {
4 | "imin": "gulp imagemin"
5 | },
6 | "dependencies": {
7 | "jpegtran-bin": "^3.1.0"
8 | },
9 | "devDependencies": {
10 | "gulp": "^3.9.0",
11 | "gulp-cache": "^0.3.0",
12 | "gulp-clean": "^0.3.1",
13 | "gulp-concat": "^2.6.0",
14 | "gulp-imagemin": "^3.1.1",
15 | "gulp-inline-source": "^2.1.0",
16 | "gulp-uglify": "^1.4.1",
17 | "imagemin-pngquant": "^4.2.0"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/cn/2018/ppt/Kong做微服务网关的实践--蔡书.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/Kong做微服务网关的实践--蔡书.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/OpenResty 企业网关应用--袁开.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/OpenResty 企业网关应用--袁开.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/OpenResty 在同程艺龙的应用--吴中骅.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/OpenResty 在同程艺龙的应用--吴中骅.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/OpenResty 实践 CC 攻击防护--周俊.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/OpenResty 实践 CC 攻击防护--周俊.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/OpenResty在腾讯游戏营销技术中的应用--顾小平.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/OpenResty在腾讯游戏营销技术中的应用--顾小平.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/Welcome to Navlang--路佳.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/Welcome to Navlang--路佳.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/layered_caching_in_openresty--Thibault.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/layered_caching_in_openresty--Thibault.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/又拍云服务优化实践--张超.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/又拍云服务优化实践--张超.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/大规模OpenResty SaaS服务的搭建与运维技巧--戴冠兰.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/大规模OpenResty SaaS服务的搭建与运维技巧--戴冠兰.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/如何编写正确且高效的OpenResty应用--罗泽轩.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/如何编写正确且高效的OpenResty应用--罗泽轩.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/把 Lisp 代码塞进 OpenResty--王克毅.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/把 Lisp 代码塞进 OpenResty--王克毅.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/深度玩转NGINX监控--洪晓龙.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/深度玩转NGINX监控--洪晓龙.pdf
--------------------------------------------------------------------------------
/cn/2018/ppt/阿里七层流量入口Tengine硬件加速探索之路--王发康.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/openresty/openresty-con/2be20766b81937fd87a5f202f33e25ad2edb3fa0/cn/2018/ppt/阿里七层流量入口Tengine硬件加速探索之路--王发康.pdf
--------------------------------------------------------------------------------