├── .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 | 50 |
51 |
52 | 53 |
54 | 55 | 56 |
57 | 58 |
59 |

大会议程

60 | 62 |
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 |

    地址: 北京万达索菲特大饭店7层大宴会厅3厅

    33 |
    34 | 35 |
    36 |

    37 | 46 |
    47 |
    48 | 49 |
    50 | 51 | 52 |
    53 | 54 |
    55 |

    大会议题

    56 | 58 |
    59 | 60 |
    61 |

    精彩瞬间

    62 | 63 | 80 |
    81 | 82 | 83 | 105 |

    OpenResty 基金会 发起,珠海开源软件技术促进中心 联合主办

    106 |

    Powered by monkindey

    107 |
    108 | 109 | 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 |

    地址: 杭州市滨江区网商路599号网易大厦

    33 |
    34 | 35 |
    36 | 37 | 38 |
    39 |

    40 |
    41 | 42 |
    43 |
    44 |
    45 | 46 | 47 |
    48 |
    49 | 50 | 51 |
    52 |

    大会议题

    53 |

    11.17

    54 | 55 |

    11.18

    56 | 57 |
    58 | 59 |
    60 |

    精彩瞬间

    61 | 62 | 98 |
    99 | 100 | 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 --------------------------------------------------------------------------------