/
index.html
485 lines (350 loc) · 22.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的 | 唐巧的博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta name="author" content="唐巧">
<meta name="description" content="版权说明本文为 InfoQ 中文站特供稿件,首发地址为:文章链接。如需转载,请与 InfoQ 中文站联系。 前言第一次听到 ibireme 这个名字,是看到他在 微博上分享 了 YYText 开源库。当时我第一眼见到 YYText 的功能示意 GIF 图时(下图所示),就被它丰富的功能吸引了。YYText 应该是我见到过的功能最强大的基于 CoreText 的排版框架了。 令人惊讶的是,YYTe">
<meta property="og:type" content="article">
<meta property="og:title" content="专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的">
<meta property="og:url" content="https://blog.devtang.com/2015/11/26/yykit-auther-interview/index.html">
<meta property="og:site_name" content="唐巧的博客">
<meta property="og:description" content="版权说明本文为 InfoQ 中文站特供稿件,首发地址为:文章链接。如需转载,请与 InfoQ 中文站联系。 前言第一次听到 ibireme 这个名字,是看到他在 微博上分享 了 YYText 开源库。当时我第一眼见到 YYText 的功能示意 GIF 图时(下图所示),就被它丰富的功能吸引了。YYText 应该是我见到过的功能最强大的基于 CoreText 的排版框架了。 令人惊讶的是,YYTe">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://camo.githubusercontent.com/fb454f77c109e6ac671e8fdb3220ade92238715b/68747470733a2f2f7261772e6769746875622e636f6d2f69626972656d652f5959546578742f6d61737465722f417474726962757465732f59595465787420457874656e6465642f5959546578744174746163686d656e742e676966">
<meta property="article:published_time" content="2015-11-26T04:47:13.000Z">
<meta property="article:modified_time" content="2020-02-08T18:08:22.165Z">
<meta property="article:author" content="唐巧">
<meta property="article:tag" content="Interview">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://camo.githubusercontent.com/fb454f77c109e6ac671e8fdb3220ade92238715b/68747470733a2f2f7261772e6769746875622e636f6d2f69626972656d652f5959546578742f6d61737465722f417474726962757465732f59595465787420457874656e6465642f5959546578744174746163686d656e742e676966">
<link rel="alternative" href="/atom.xml" title="唐巧的博客" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/%02.css">
<link rel="stylesheet" href="/.css">
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header>
<div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="唐巧的博客">唐巧的博客</a></h1>
<h2 class="blog-motto">记录下自己学习的点滴</h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/archives">归档</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
<input type="hidden" name="q" value="site:blog.devtang.com">
</form>
</li>
</ul>
</nav>
</div>
</header>
<div id="container">
<div id="main" class="post" itemscope itemprop="blogPost">
<article itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2015/11/26/yykit-auther-interview/" title="专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的" itemprop="url">专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的</a>
</h1>
<p class="article-time">
<time datetime="2015-11-26T04:47:13.000Z" itemprop="datePublished"> 发表于 2015-11-26 04:47</time>
</p>
</header>
<div class="article-content">
<div id="toc" class="toc-article">
<strong class="toc-title">文章目录</strong>
<ol class="toc"><li class="toc-item toc-level-3"><a class="toc-link" href="#版权说明"><span class="toc-number">1.</span> <span class="toc-text">版权说明</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#前言"><span class="toc-number">2.</span> <span class="toc-text">前言</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#采访"><span class="toc-number">3.</span> <span class="toc-text">采访</span></a></li><li class="toc-item toc-level-3"><a class="toc-link" href="#结束语"><span class="toc-number">4.</span> <span class="toc-text">结束语</span></a></li></ol>
</div>
<h3 id="版权说明"><a href="#版权说明" class="headerlink" title="版权说明"></a>版权说明</h3><p>本文为 InfoQ 中文站特供稿件,首发地址为:<a href="http://www.infoq.com/cn/news/2015/11/ibireme-interview" target="_blank" rel="noopener">文章链接</a>。如需转载,请与 InfoQ 中文站联系。</p>
<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>第一次听到 <a href="http://weibo.com/239801242" target="_blank" rel="noopener">ibireme</a> 这个名字,是看到他在 <a href="http://weibo.com/2477831984/D2ujxj5Vx?type=comment#_rnd1448528368875" target="_blank" rel="noopener">微博上分享</a> 了 <a href="https://github.com/ibireme/YYText" target="_blank" rel="noopener">YYText</a> 开源库。当时我第一眼见到 YYText 的功能示意 GIF 图时(下图所示),就被它丰富的功能吸引了。YYText 应该是我见到过的功能最强大的基于 CoreText 的排版框架了。</p>
<p><img src="https://camo.githubusercontent.com/fb454f77c109e6ac671e8fdb3220ade92238715b/68747470733a2f2f7261772e6769746875622e636f6d2f69626972656d652f5959546578742f6d61737465722f417474726962757465732f59595465787420457874656e6465642f5959546578744174746163686d656e742e676966" alt="YYText示意图"></p>
<p>令人惊讶的是,YYText 虽然代码量很大(超过一万行),但它只是 ibireme 的作品之一。ibireme 利用业余时间完成了 <a href="https://github.com/ibireme/YYKit" target="_blank" rel="noopener">YYKit</a> 工具库,包括:</p>
<ul>
<li><a href="https://github.com/ibireme/YYModel" target="_blank" rel="noopener">YYModel</a> — 高性能的 iOS JSON 模型框架。</li>
<li><a href="https://github.com/ibireme/YYCache" target="_blank" rel="noopener">YYCache</a> — 高性能的 iOS 缓存框架。</li>
<li><a href="https://github.com/ibireme/YYImage" target="_blank" rel="noopener">YYImage</a> — 功能强大的 iOS 图像框架。</li>
<li><a href="https://github.com/ibireme/YYWebImage" target="_blank" rel="noopener">YYWebImage</a> — 高性能的 iOS 异步图像加载框架。</li>
<li><a href="https://github.com/ibireme/YYText" target="_blank" rel="noopener">YYText</a> — 功能强大的 iOS 富文本框架。</li>
<li><a href="https://github.com/ibireme/YYKeyboardManager" target="_blank" rel="noopener">YYKeyboardManager</a> — iOS 键盘监听管理工具。</li>
<li><a href="https://github.com/ibireme/YYDispatchQueuePool" target="_blank" rel="noopener">YYDispatchQueuePool</a> — iOS 全局并发队列管理工具。</li>
<li><a href="https://github.com/ibireme/YYAsyncLayer" target="_blank" rel="noopener">YYAsyncLayer</a> — iOS 异步绘制与显示的工具。</li>
<li><a href="https://github.com/ibireme/YYCategories" target="_blank" rel="noopener">YYCategories</a> — 功能丰富的 Category 类型工具库。</li>
</ul>
<p>我和一些朋友挑选了一些其中的组件代码阅读,大家都认为质量非常高,大家对它的评语是这样的:</p>
<blockquote>
<p>打算自己撸一个 JSON 转 model 的,专门看了 YYModel 的代码,果然屌。</p>
<p>YYKit 超级好用。 </p>
<p>对比一下,感觉自己一年都没写代码。</p>
<p>怎么会有如此完美的工程师?真想抽一周时间宅在家里把 YYKit 的源码重敲一遍。</p>
</blockquote>
<p>之后我抽空学习了一下 ibireme 的博客(<a href="http://blog.ibireme.com/" target="_blank" rel="noopener">http://blog.ibireme.com/</a>),上面有多篇介绍他对于 iOS 开发中各种问题的研究,例如他在开发 YYModel 时,<a href="http://blog.ibireme.com/2015/10/23/ios_model_framework_benchmark/" target="_blank" rel="noopener">调研和评测</a> 了包括 Mantle 和 MJExtension 在内的多款开源库。这种专业认真的做事态度让我非常佩服,也让我对 YYModel 的质量充满信心。</p>
<p>然后,我有幸得到了 ibireme 的 QQ 和微信号,所以和他交流了多次。这时我才知道 ibireme 是一个 90 后,在优酷从事 iOS 开发工作。而这些所有的开源库,都是他在业余时间完成的。</p>
<p>我想大家很可能对 ibireme 的学习和成长的经历感兴趣,而且 ibireme 的故事很可能会激励更多有激情的 iOS 开发新人,利用业余时间学习、Coding 和分享,最终让国内的 iOS 开发技术氛围更好。所以,我向 ibireme 发出了采访邀请,ibireme 欣然接受了。于是,让我们来一起揭开这位神秘人物的面纱吧。</p>
<h3 id="采访"><a href="#采访" class="headerlink" title="采访"></a>采访</h3><blockquote>
<p>唐巧:你好 ibireme,能否先向读者简单介绍一下自己?</p>
</blockquote>
<p>ibireme:大家好,我叫郭曜源,是一个 iOS 开发者,现居北京,就职于优酷土豆。喜欢代码,爱好设计与音乐。</p>
<blockquote>
<p>唐巧:我发现 YYKit 是在这个月初上传到 github 上的,但是它的代码量非常大,能否介绍一下每个部分大概花了你多长时间?</p>
</blockquote>
<p>ibireme:Category 等工具类大部分都是这一两年工作和业余时间攒下来的。文本和图片相关的那几个项目是今年年初开始写起的,陆陆续续写了半年多。YYModel 花的时间最少,只有大概两个周末。</p>
<blockquote>
<p>唐巧:为什么选择一次性开源这么多代码,而不是一个一个开源呢?</p>
</blockquote>
<p>ibireme:最初这些代码我都是写在一个工程里,代码量比较多,相互之间也有很多依赖。准备发布时,我觉得这样很不方便别人使用,这才按功能拆开成一个个小的组件,然后一起发布的。</p>
<blockquote>
<p>唐巧:这些开源库在国内外都收到了大量的好评,这个有没有超出你的预期?</p>
</blockquote>
<p>ibireme:发布前我有预期会收到不少关注,但是发布后收到的好评还是大大超出我的预料。最令我惊讶的是 Facebook 和 Uber 等国外的工程师也关注到这个项目,并且还以此向我发出了工作邀请,这让我非常激动。</p>
<blockquote>
<p>唐巧:你对 YYKit 后续的发展上有什么计划吗?</p>
</blockquote>
<p>ibireme:现在只是计划进行一些正常的维护工作,保证稳定性。未来如果有合适的东西,我也会尝试加到里面的,但应该不会有太大改变了。</p>
<blockquote>
<p>唐巧:YYKit 是你的业余作品,我很好奇你是如何保证工作之余还有这么高产的?</p>
</blockquote>
<p>ibireme:最近一年我工作不太忙,很少加班,空闲时间比较多。另外我比较宅,平时喜欢待在家里做一些喜欢的事情。说起来,应该是充足的时间加上个人兴趣让我完成了这些项目吧。</p>
<blockquote>
<p>唐巧:你如何看待 Swift 语言,有没有计划过用 Swift 重写你的 YYKit?</p>
</blockquote>
<p>ibireme:相对于 Objective-C 来说,我觉得 Swift 无疑是更优秀、更现代的语言。目前我对 Swift 研究并不多,工作中也没有用到,但未来我会把时间更多投入到 Swift 中去。YYKit 中不少东西更适合于 C/Objective-C,所以我没有计划用 Swift 重写整个项目。我可能会用 Swift 写一些新的东西,以充分发挥 Swift 的特性。</p>
<blockquote>
<p>唐巧:你在 iOS 开发上是如何快速成长起来的?有没有什么心得可以分享给 iOS 开发新手?</p>
</blockquote>
<p>ibireme:我接触 iOS 开发的时间很早,但是一直都是在工作之余靠着兴趣自学的。14 年我还在人人网时,部门内部有个新项目需要 iOS 开发,我才得以有机会在工作中使用 iOS 相关的技术。全职转为 iOS 开发后,我花费了大量的时间阅读和学习各种开源的代码、研究其中的实现原理、尝试自己实现相关技术、尝试在工作中使用,这使得我在 iOS 开发技术上进步很快。对于 iOS 开发来说,我觉得自学能力是很重要的。主动去研究一些优秀的开源项目、多在工作中实践和学习,这样就能逐步提升个人技术水平了。</p>
<blockquote>
<p>唐巧:你觉得哪些开发者对你影响最大?</p>
</blockquote>
<p>ibireme:可能平时我更喜欢看代码,对于开发者我倒是了解的不多吧。如果要选一位的话,我会选 Linus Torvalds。他的一句话我很喜欢:”Talk is cheap, show me the code”。</p>
<blockquote>
<p>唐巧:在技术领域,你对未来有什么学习规划吗?</p>
</blockquote>
<p>ibireme:在 iOS 方面,我可能会针对 Swift、音频处理和合成等方面投入更多精力。另外我第一份工作是 Java 后台开发,工作时前后端、数据库相关的东西也都接触过,所以如果有时间的话我也会继续学习这些技术,即使不用在工作上,也能开拓眼界吧。</p>
<h3 id="结束语"><a href="#结束语" class="headerlink" title="结束语"></a>结束语</h3><p>刚刚 ibireme 在介绍自己学习方法的时候,提到了两点我认为非常关键,一个就是大量地阅读优秀项目的源代码,另一个就是自己动手实践来尝试。</p>
<p>我在很久以前,分享过我认为 iOS 开发者可以提高自己能力的各种方法,见 <a href="/2014/07/27/ios-levelup-tips/">《iOS 开发如何提高》</a>,里面也提到阅读开源代码和多写代码。我感觉 ibireme 将这一点做到了极致,因此他在短短一年多的时间,就能够成长成为在业界有影响力的开源项目作者。</p>
<p>我们处在一个信息爆炸的时代,每一天都有大量的 iOS 开发文章出现,我们对这些文章如饥似渴,但是很多时候又浅尝辄止。像 ibireme 这样,专心阅读几个开源项目,然后自己动手真正实践,或许才是正确的学习方式。</p>
<p>希望 ibireme 的故事能够激励那些渴望成长成为牛人的 iOS 开发新人,也希望在中国能够出现更多像 YYKit 这样的优秀的开源项目,与大家共勉。</p>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-categories">
<span></span>
<a class="article-category-link" href="/categories/iOS/">iOS</a>
</div>
<div class="article-tags">
<span></span> <a href="/tags/Interview/">Interview</a>
</div>
</div>
<div class="article-share" id="share">
<div data-url="https://blog.devtang.com/2015/11/26/yykit-auther-interview/" data-title="专访 YYKit 作者 ibireme: 开源大牛是怎样炼成的 | 唐巧的博客" data-tsina="" class="share clearfix">
</div>
</div>
</footer>
</article>
<nav class="article-nav clearfix">
<div class="prev" >
<a href="/2015/12/18/from-dev-to-manager/" title="涅槃重生:我的技术转管理之路">
<strong>上一篇:</strong><br/>
<span>
涅槃重生:我的技术转管理之路</span>
</a>
</div>
<div class="next">
<a href="/2015/11/21/apps-damaged-bug/" title="Mac 应用出现「已损坏」问题,苹果到底犯了什么傻逼错误?">
<strong>下一篇:</strong><br/>
<span>Mac 应用出现「已损坏」问题,苹果到底犯了什么傻逼错误?
</span>
</a>
</div>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="sponsor">
</div>
<div class="categorieslist">
<p class="asidetitle">分类</p>
<ul>
<li><a href="/categories/books-summary/" title="books summary">books summary</a></li>
<li><a href="/categories/iOS/" title="iOS">iOS</a></li>
<li><a href="/categories/iOS-weekly/" title="iOS weekly">iOS weekly</a></li>
<li><a href="/categories/mac/" title="mac">mac</a></li>
<li><a href="/categories/shell/" title="shell">shell</a></li>
<li><a href="/categories/summary/" title="summary">summary</a></li>
</ul>
</div>
<div class="weixin">
<br />
<p class="asidetitle">微信公众号</p>
<p>关注我的微信公众号,和我一起成长:</p>
<img src="/images/weixin-qr.jpg" width="230px" />
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
</aside>
</div>
</div>
<footer><div id="footer" >
<div class="social-font" class="clearfix">
</div>
<p class="copyright" style="margin-top: 10px;">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2020
<a href="/about" target="_blank" title="唐巧">唐巧</a>
</p>
</div>
</footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var ai = $('.article-content>iframe'),
ae = $('.article-content>embed'),
t = $('#toc'),
ta = $('#toc.toc-aside'),
o = $('.openaside'),
c = $('.closeaside');
if(ai.length>0){
ai.wrap('<div class="video-container" />');
};
if(ae.length>0){
ae.wrap('<div class="video-container" />');
};
c.click(function(){
ta.css('display', 'block').addClass('fadeIn');
});
o.click(function(){
ta.css('display', 'none');
});
$(window).scroll(function(){
ta.css("top",Math.max(140,320-$(this).scrollTop()));
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var $this = $('.share'),
url = $this.attr('data-url'),
encodedUrl = encodeURIComponent(url),
title = $this.attr('data-title'),
tsina = $this.attr('data-tsina'),
description = $this.attr('description');
var html = [
'<div class="hoverqrcode clearfix"></div>',
'<a class="overlay" id="qrcode"></a>',
'<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
'<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
'<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
'<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
'<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
'<span title="Share to"></span>'
].join('');
$this.append(html);
$('.hoverqrcode').hide();
var myWidth = 0;
function updatehoverqrcode(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
var qrsize = myWidth > 1024 ? 200:100;
var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
var p = $('.article-share-qrcode').position();
$('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
.css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
.qrcode(options);
};
$(window).resize(function(){
$('.hoverqrcode').hide();
});
$('.article-share-qrcode').click(function(){
updatehoverqrcode();
$('.hoverqrcode').toggle();
});
$('.article-share-qrcode').hover(function(){}, function(){
$('.hoverqrcode').hide();
});
});
</script>
<!-- Analytics Begin -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28029597-1', '');
ga('send', 'pageview');
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"/></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>
</html>