-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathindex.html
More file actions
1319 lines (866 loc) · 61.7 KB
/
index.html
File metadata and controls
1319 lines (866 loc) · 61.7 KB
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
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>zzzhc's Blog</title>
<meta name="author" content="zzzhc">
<meta name="description" content="Ack是一个给程序员用的grep, 使用perl regular expressions, 而不是POSIX/GNU subset. why ack? 使用perl regular expressions, 忘掉grep那套不人性的pattern吧
速度快, 默认只搜索程序代码文件
自动忽略. …">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://blog.zzzhc.com">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<link href="/atom.xml" rel="alternate" title="zzzhc's Blog" type="application/atom+xml">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="./javascripts/lib/jquery.min.js"%3E%3C/script%3E'))</script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<!-- <link href="http://fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
-->
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-337047-3']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
</head>
<body >
<header role="banner"><hgroup>
<h1><a href="/">zzzhc's Blog</a></h1>
<h2>stay curious</h2>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="http://google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:blog.zzzhc.com" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Home</a></li>
<li><a class='category' href='/categories/rails/'>Rails</a></li>
<li><a class='category' href='/categories/vim/'>Vim</a></li>
<li><a class='category' href='/categories/lucene/'>Lucene</a></li>
<li><a class='category' href='/categories/amqp/'>AMQP</a></li>
<li><a class='category' href='/categories/misc/'>Misc</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div class="blog-index">
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-16-ack-better-grep/">Ack - Better Grep</a></h1>
<p class="meta">
<time datetime="2011-12-16T11:17:00+08:00" pubdate data-updated="true">Dec 16<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><p>Ack是一个给程序员用的grep, 使用perl regular expressions, 而不是POSIX/GNU subset.</p>
<h2>why ack?</h2>
<ul>
<li>使用perl regular expressions, 忘掉grep那套不人性的pattern吧</li>
<li>速度快, 默认只搜索程序代码文件</li>
<li>自动忽略.svn, .git, CVS这类目录, 默认递归搜索子目录</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># with grep</span>
</span><span class='line'><span class="nv">$ </span>grep pattern <span class="k">$(</span>find . -type f | grep -v <span class="s1">'\.svn'</span><span class="k">)</span>
</span><span class='line'>or
</span><span class='line'><span class="nv">$ </span>grep -R --exclude-dir .svn pattern
</span><span class='line'><span class="c"># with ack</span>
</span><span class='line'><span class="nv">$ </span>ack pattern
</span></code></pre></td></tr></table></div></figure>
<ul>
<li>支持搜索指定文件类型</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># 只搜索ruby code</span>
</span><span class='line'><span class="nv">$ </span>ack --ruby pattern
</span></code></pre></td></tr></table></div></figure>
<h2>install</h2>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># mac</span>
</span><span class='line'><span class="nv">$ </span>brew install ack
</span><span class='line'><span class="c"># ubuntu</span>
</span><span class='line'><span class="nv">$ </span>sudo apt-get install ack-grep
</span></code></pre></td></tr></table></div></figure>
<h2>integrate into vim</h2>
<ul>
<li>install ack.vim</li>
<li>set grepprg=ack in vimrc</li>
</ul>
<h2>custom ack</h2>
<p>Ack默认包含很多filetype => extensions的设置,但新出现的语言不一定支持。好在ack提供—type-add TYPE=.EXTENSION[,.EXT2[,…]], —type-set TYPE=.EXTENSION[,.EXT2[,…]]来扩展。经常用的可以加到~/.ackrc里, 我的.ackrc:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>cat ~/.ackrc
</span><span class='line'>--type-add
</span><span class='line'><span class="nv">ruby</span><span class="o">=</span>.haml,.ru
</span><span class='line'>--type-add
</span><span class='line'><span class="nv">css</span><span class="o">=</span>.scss,.sass,.less
</span><span class='line'>--type-add
</span><span class='line'><span class="nv">js</span><span class="o">=</span>.coffee
</span></code></pre></td></tr></table></div></figure>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-12-you-dao-zi-dian-httpjie-kou/">有道字典 Chrome Extension</a></h1>
<p class="meta">
<time datetime="2011-12-12T11:17:00+08:00" pubdate data-updated="true">Dec 12<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><p>有道字典的chrome extension会把鼠标下的词log到console里,debug的时候让人烦, 看了下code, 直接用的console.log, 发布的时候也没注释掉. 跑到~/Library/Application Support/Google/Chrome/Default/Extensions/nbndkplefmmhmcmfjanjaakhhkiegogd/1.0_0下把content.js,background.html里的console.log都注释掉,安静了。</p>
<p>大概看了下extension code, 发现两个有意思的地方:</p>
<ul>
<li>打包的时候连.svn目录都没放过</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>svn info
</span><span class='line'>Path: .
</span><span class='line'>URL: https://dev.corp.youdao.com/svn/outfox/products/desktop/incubator/mac/GetWordExtension/Chrome/extension
</span><span class='line'>Repository Root: https://dev.corp.youdao.com/svn/outfox
</span><span class='line'>Repository UUID: 36a6777f-fe3c-0410-890b-904d6044f29d
</span><span class='line'>Revision: 285097
</span><span class='line'>Node Kind: directory
</span><span class='line'>Schedule: normal
</span><span class='line'>Last Changed Author: huangdx
</span><span class='line'>Last Changed Rev: 277738
</span><span class='line'>Last Changed Date: 2011-09-13 14:00:17 +0800 <span class="o">(</span>二, 13 9 2011<span class="o">)</span>
</span></code></pre></td></tr></table></div></figure>
<ul>
<li>取词的时候调用的是本机有道字典app提供的http接口</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
</pre></td><td class='code'><pre><code class='javascript'><span class='line'><span class="c1">//in background.html</span>
</span><span class='line'> <span class="kd">function</span> <span class="nx">SendResult</span><span class="p">(</span><span class="nx">word</span><span class="p">,</span> <span class="nx">pos</span><span class="p">,</span> <span class="nx">type</span><span class="p">)</span> <span class="p">{</span>
</span><span class='line'> <span class="kd">var</span> <span class="nx">s</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">XMLHttpRequest</span><span class="p">;</span>
</span><span class='line'> <span class="nx">s</span><span class="p">.</span><span class="nx">open</span><span class="p">(</span><span class="s2">"GET"</span><span class="p">,</span> <span class="s2">"http://localhost:32445/getword?word="</span> <span class="o">+</span> <span class="nx">word</span> <span class="o">+</span> <span class="s2">"&pos="</span> <span class="o">+</span> <span class="nx">pos</span> <span class="o">+</span> <span class="s2">"&type="</span> <span class="o">+</span> <span class="nx">type</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span>
</span><span class='line'> <span class="c1">//console.log('sending...')</span>
</span><span class='line'> <span class="nx">s</span><span class="p">.</span><span class="nx">send</span><span class="p">()</span>
</span><span class='line'> <span class="p">};</span>
</span></code></pre></td></tr></table></div></figure>
<p>用curl试了下,可以发送请求,但响应为空</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>curl -vv <span class="s1">'http://localhost:32445/getword?word=for%20suppliers&pos=8&type=0'</span>
</span><span class='line'>* About to connect<span class="o">()</span> to localhost port 32445 <span class="o">(</span><span class="c">#0)</span>
</span><span class='line'>* Trying ::1... Connection refused
</span><span class='line'>* Trying 127.0.0.1... connected
</span><span class='line'>* Connected to localhost <span class="o">(</span>127.0.0.1<span class="o">)</span> port 32445 <span class="o">(</span><span class="c">#0)</span>
</span><span class='line'>> GET /getword?word<span class="o">=</span><span class="k">for</span>%20suppliers&pos<span class="o">=</span>8&type<span class="o">=</span>0 HTTP/1.1
</span><span class='line'>> User-Agent: curl/7.21.4 <span class="o">(</span>universal-apple-darwin11.0<span class="o">)</span> libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
</span><span class='line'>> Host: localhost:32445
</span><span class='line'>> Accept: */*
</span><span class='line'>>
</span><span class='line'>* Empty reply from server
</span><span class='line'>* Connection <span class="c">#0 to host localhost left intact</span>
</span><span class='line'>curl: <span class="o">(</span>52<span class="o">)</span> Empty reply from server
</span><span class='line'>* Closing connection <span class="c">#0</span>
</span></code></pre></td></tr></table></div></figure>
<p>word, pos, type这三个参数只要少一个有道字典就会crash</p>
<p>这次http request只是一个trigger, 有道字典会向dict.youdao.com发一个request:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span>
<span class='line-number'>44</span>
<span class='line-number'>45</span>
<span class='line-number'>46</span>
<span class='line-number'>47</span>
<span class='line-number'>48</span>
<span class='line-number'>49</span>
<span class='line-number'>50</span>
<span class='line-number'>51</span>
<span class='line-number'>52</span>
<span class='line-number'>53</span>
<span class='line-number'>54</span>
<span class='line-number'>55</span>
<span class='line-number'>56</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>curl -vv <span class="s1">'http://dict.youdao.com/fsearch?q=for%20suppliers&pos=8&keyfrom=mac.scrtrans.0&id=E33EC7736AFDCABB184051CD3757CA73&vendor=cidian.youdao.com&client=macdict'</span>
</span><span class='line'>* About to connect<span class="o">()</span> to dict.youdao.com port 80 <span class="o">(</span><span class="c">#0)</span>
</span><span class='line'>* Trying 61.135.218.32... connected
</span><span class='line'>* Connected to dict.youdao.com <span class="o">(</span>61.135.218.32<span class="o">)</span> port 80 <span class="o">(</span><span class="c">#0)</span>
</span><span class='line'>> GET /fsearch?q<span class="o">=</span><span class="k">for</span>%20suppliers&pos<span class="o">=</span>8&keyfrom<span class="o">=</span>mac.scrtrans.0&id<span class="o">=</span>E33EC7736AFDCABB184051CD3757CA73&vendor<span class="o">=</span>cidian.youdao.com&client<span class="o">=</span>macdict HTTP/1.1
</span><span class='line'>> User-Agent: curl/7.21.4 <span class="o">(</span>universal-apple-darwin11.0<span class="o">)</span> libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
</span><span class='line'>> Host: dict.youdao.com
</span><span class='line'>> Accept: */*
</span><span class='line'>>
</span><span class='line'>< HTTP/1.1 200 OK
</span><span class='line'>< Server: nginx
</span><span class='line'>< Date: Tue, 13 Dec 2011 07:10:55 GMT
</span><span class='line'>< Content-Type: text/xml; <span class="nv">charset</span><span class="o">=</span>utf-8
</span><span class='line'>< Connection: keep-alive
</span><span class='line'>< Cache-Control: private
</span><span class='line'>< Content-Language: en-US
</span><span class='line'>< Set-Cookie: <span class="nv">OUTFOX_SEARCH_USER_ID</span><span class="o">=</span>-447518408@123.117.56.163; <span class="nv">domain</span><span class="o">=</span>.youdao.com; <span class="nv">expires</span><span class="o">=</span>Thu, 05-Dec-2041 07:10:55 GMT
</span><span class='line'>< Set-Cookie: <span class="nv">JSESSIONID</span><span class="o">=</span>abcdjNBcCWPPK4igOq2qt; <span class="nv">domain</span><span class="o">=</span>youdao.com; <span class="nv">path</span><span class="o">=</span>/
</span><span class='line'>< Vary: Accept-Encoding
</span><span class='line'>< Content-Length: 1477
</span><span class='line'><
</span><span class='line'><?xml <span class="nv">version</span><span class="o">=</span><span class="s2">"1.0"</span> <span class="nv">encoding</span><span class="o">=</span><span class="s2">"UTF-8"</span>?>
</span><span class='line'>
</span><span class='line'><yodaodict>
</span><span class='line'> <<span class="k">return</span>-phrase><!<span class="o">[</span>CDATA<span class="o">[</span>suppliers<span class="o">]]</span>></return-phrase>
</span><span class='line'>
</span><span class='line'> <phonetic-symbol>sə<span class="err">'</span>plaiəz</phonetic-symbol>
</span><span class='line'> <dictcn-speach>suppliers</dictcn-speach>
</span><span class='line'> <custom-translation>
</span><span class='line'> <<span class="nb">type</span>>ec</type>
</span><span class='line'> <translation><content><!<span class="o">[</span>CDATA<span class="o">[</span>n. 供应商(supplier的复数)<span class="o">]]</span>></content></translation>
</span><span class='line'> </custom-translation>
</span><span class='line'>
</span><span class='line'> <yodao-web-dict>
</span><span class='line'> <web-translation>
</span><span class='line'> <key><!<span class="o">[</span>CDATA<span class="o">[</span>Suppliers<span class="o">]]</span>></key>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>供应商<span class="o">]]</span>></value></trans>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>供货商<span class="o">]]</span>></value></trans>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>数据库<span class="o">]]</span>></value></trans>
</span><span class='line'> </web-translation>
</span><span class='line'> <web-translation>
</span><span class='line'> <key><!<span class="o">[</span>CDATA<span class="o">[</span>Overview Suppliers<span class="o">]]</span>></key>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>概览<span class="o">]]</span>></value></trans>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>供应商<span class="o">]]</span>></value></trans>
</span><span class='line'> </web-translation>
</span><span class='line'> <web-translation>
</span><span class='line'> <key><!<span class="o">[</span>CDATA<span class="o">[</span><span class="k">select </span>suppliers<span class="o">]]</span>></key>
</span><span class='line'> <trans><value><!<span class="o">[</span>CDATA<span class="o">[</span>挑选供应商<span class="o">]]</span>></value></trans>
</span><span class='line'> </web-translation>
</span><span class='line'> </yodao-web-dict>
</span><span class='line'>
</span><span class='line'> <recommend><!<span class="o">[</span>CDATA<span class="o">[</span>supplier<span class="o">]]</span>></recommend>
</span><span class='line'> <sexp>0</sexp>
</span><span class='line'></yodaodict>
</span><span class='line'>* Connection <span class="c">#0 to host dict.youdao.com left intact</span>
</span><span class='line'>* Closing connection <span class="c">#0</span>
</span></code></pre></td></tr></table></div></figure>
<p>拿到结果后由有道字典显示一个提示窗口.</p>
<p>这种实现方式倒也算精巧, 其他app要用这个http接口也比较方便,只是32445端口连个http 200都不返回粗暴了点.</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-11-speed-up-rails-asset-pipeline/">Speed Up Rails Asset Pipeline</a></h1>
<p class="meta">
<time datetime="2011-12-11T20:48:00+08:00" pubdate data-updated="true">Dec 11<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><p><a href="http://guides.rubyonrails.org/asset_pipeline.html">Asset pipeline</a>是Rails 3.1里引入的一个特性, 用来帮助拼接,压缩js/css,同时对缓存asset提供了更好的支持.</p>
<p>Asset pipe本身只是对<a href="https://github.com/sstephenson/sprockets">Sprockets</a>做了一层封装, 通过<code>Rails.application.assets</code>可以得到Sprockets自己的rack app.</p>
<p>如果application.js里用到了一堆的js, 在development模式下会发现页面很慢, 即使用了<a href="https://github.com/paneq/active_reload">active_reload</a>来加速.在chrome console里看下network tab,每次js请求都在100ms以上。慢的原因在于每次请求都要过一次Rails/application里定义的middleware, 跳过这些middleware之后就快多了. 改下config.ru, 世界又和谐了:</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
</pre></td><td class='code'><pre><code class='ruby'><span class='line'><span class="c1"># This file is used by Rack-based servers to start the application.</span>
</span><span class='line'><span class="nb">require</span> <span class="o">::</span><span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="s1">'../config/environment'</span><span class="p">,</span> <span class="bp">__FILE__</span><span class="p">)</span>
</span><span class='line'>
</span><span class='line'><span class="n">map</span> <span class="s1">'/assets'</span> <span class="k">do</span>
</span><span class='line'> <span class="n">assets</span> <span class="o">=</span> <span class="no">Rails</span><span class="o">.</span><span class="n">application</span><span class="o">.</span><span class="n">assets</span>
</span><span class='line'> <span class="n">run</span> <span class="n">assets</span>
</span><span class='line'><span class="k">end</span>
</span><span class='line'>
</span><span class='line'><span class="n">map</span> <span class="s1">'/'</span> <span class="k">do</span>
</span><span class='line'> <span class="n">run</span> <span class="no">Rails</span><span class="o">.</span><span class="n">application</span>
</span><span class='line'><span class="k">end</span>
</span></code></pre></td></tr></table></div></figure>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-10-gao-xiao-neng-wen-ben-bian-ji-de-7ge-xi-guan/">高效能文本编辑的7个习惯</a></h1>
<p class="meta">
<time datetime="2011-12-10T12:59:00+08:00" pubdate data-updated="true">Dec 10<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><p><a href="http://www.moolenaar.net/habits.html">Seven habits of effective text editing</a></p>
<h2>编辑单个文件</h2>
<h3>1. 快速移动</h3>
<ul>
<li>查找光标下单词在当前文件的其它位置
<ol>
<li>* 向后查找</li>
<li># 向前查找</li>
</ol>
</li>
<li>搜索文本, /pattern</li>
<li>使用%跳转到对应块的结尾/开头,安装<a href="http://www.vim.org/scripts/script.php?script_id=39">matchit</a>插件效果更好</li>
<li>使用gd跳转到变量定义</li>
</ul>
<p>掌握更多高效编辑命令的三个基本步骤:
* 留意编辑过程中的重复动作和花时间较多的地方
* 找出一个可以更快完成这些操作的命令
* 反复练习,直到形成习惯,不需要思考靠直觉就能敲出命令</p>
<h3>2. 不要重复输入两次</h3>
<ul>
<li>善用.命令重做前一个修改</li>
<li>使用自动补全, 安装<a href="https://github.com/ervandew/supertab">supertab</a>后可用tab键补全</li>
<li>录制宏, qa开始录制,q结束宏, @a重放宏</li>
</ul>
<h3>3. 自动修复拼写错误</h3>
<ul>
<li>abbr</li>
<li>syntax hightlight</li>
</ul>
<h2>编辑多个文件</h2>
<h3>4. 很少只在单独一个文件上工作</h3>
<ul>
<li>ctags, Ctrl+] 跳转到定义处</li>
<li>:grep, :cn</li>
</ul>
<h3>5. 与其它程序协同工作</h3>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>:!command</span></code></pre></td></tr></table></div></figure>
<h3>6. Text is structured</h3>
<p>自动化编译,修改过程</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>:make
</span><span class='line'>:set errorformat=xxx</span></code></pre></td></tr></table></div></figure>
<h2>磨快你的矩</h2>
<h3>7. 养成习惯</h3>
<p>这一点最重要,花大把时间找到合适的命令但很快就忘掉是很不划算的。</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-10-crontab-tips/">Crontab Tips</a></h1>
<p class="meta">
<time datetime="2011-12-10T12:02:00+08:00" pubdate data-updated="true">Dec 10<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><h2>crontab command</h2>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># 设置编辑器</span>
</span><span class='line'><span class="nv">$ </span><span class="nb">export </span><span class="nv">EDITOR</span><span class="o">=</span>vim
</span><span class='line'><span class="c"># 编辑</span>
</span><span class='line'><span class="nv">$ </span>crontab -e <span class="o">[</span>-u user<span class="o">]</span>
</span><span class='line'><span class="c"># 列出crontab内容</span>
</span><span class='line'><span class="nv">$ </span>crontab -l <span class="o">[</span>-u user<span class="o">]</span>
</span><span class='line'><span class="c"># 删除crontab文件</span>
</span><span class='line'><span class="nv">$ </span>crontab -r <span class="o">[</span>-u user<span class="o">]</span>
</span></code></pre></td></tr></table></div></figure>
<h2>crontab syntax</h2>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>* * * * * <span class="nb">command</span>
</span><span class='line'>| | | | |
</span><span class='line'>| | | | |- day of week<span class="o">(</span>0-6<span class="o">)</span> 0 means sunday
</span><span class='line'>| | | |--- month<span class="o">(</span>1-12<span class="o">)</span>
</span><span class='line'>| | |----- day of month<span class="o">(</span>1-31<span class="o">)</span>
</span><span class='line'>| |------- hour
</span><span class='line'>|--------- minute<span class="o">(</span>0-59<span class="o">)</span>
</span><span class='line'>
</span><span class='line'>* 表示的项可以用,分隔指定多个值<span class="o">(</span>如5,15,25<span class="o">)</span>,也可以指定周期,如在minute项上写*/5表示每5分钟执行一次
</span></code></pre></td></tr></table></div></figure>
<h2>crontab environment</h2>
<p>cron脚本执行的环境跟正常用户执行的有区别,~/.bashrc不会被执行, 这一点经常会引起问题, 可以在crontab里设置环境变量来减少影响.</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># PATH, SHELL, MAILTO比较常用, 如</span>
</span><span class='line'><span class="nv">PATH</span><span class="o">=</span>/usr/bin:/usr/sbin:/bin:/sbin
</span><span class='line'><span class="nv">SHELL</span><span class="o">=</span>/bin/bash
</span><span class='line'><span class="nv">MAILTO</span><span class="o">=</span>xxx@xxx.com
</span><span class='line'>
</span><span class='line'>1 * * * * find /var/data/upload/ -mtime 30 -exec rm -- <span class="o">{}</span> +
</span></code></pre></td></tr></table></div></figure>
<p>默认情况crontab按OS时区调度, 而不是用户时区,可以通过指定TZ环境变量设实际要用的时区</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">TZ</span><span class="o">=</span>UTC
</span><span class='line'>1 * * * * find /var/data/upload/ -mtime 30 -exec rm -- <span class="o">{}</span> +
</span></code></pre></td></tr></table></div></figure>
<h1>crontab notification</h1>
<p>如果command有输出(stdout/stderr),crond会发送通知邮件, 具体发送给谁可以通过MAILTO定义,默认发送给当前用户。
一般情况stdout可以忽略,所以经常会看到crontab里有 command >/dev/null; stderr一定不要忽略,否则cron job有错误无法正常执行都不知道。</p>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-09-bash-tips-0/">Bash Tips - 0</a></h1>
<p class="meta">
<time datetime="2011-12-09T20:18:00+08:00" pubdate data-updated="true">Dec 9<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><ul>
<li>为变量设置缺省值</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'>: <span class="k">${</span><span class="nv">BIND_PORT</span><span class="p">:=9999</span><span class="k">}</span>
</span></code></pre></td></tr></table></div></figure>
<ul>
<li>取得前一个在后台运行的进程pid</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">$ </span>sleep 10 &
</span><span class='line'><span class="nv">$ </span><span class="nb">echo</span> <span class="nv">$!</span>
</span></code></pre></td></tr></table></div></figure>
<ul>
<li>当前脚本的绝对路径</li>
</ul>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="nv">SCRIPT_PATH</span><span class="o">=</span><span class="sb">`</span>readlink -f <span class="s2">"$0"</span><span class="sb">`</span>
</span></code></pre></td></tr></table></div></figure>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/posts/2011-12-09-rvm-global-gems/">Rvm Global Gems</a></h1>
<p class="meta">
<time datetime="2011-12-09T19:07:00+08:00" pubdate data-updated="true">Dec 9<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><p>用rvm安装多了ruby版本后,一些经常用的gem需要在多个版本下都重装一次,很费事。不过还好rvm早有<a href="http://beginrescueend.com/gemsets/initial/">解决方案</a>,可以通过编辑~/.rvm/gemsets/global.gems来添加全局的gemsets, 比如必不可少的bundler</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>bundler</span></code></pre></td></tr></table></div></figure>
<p>也可以指定版本</p>
<figure class='code'><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
</pre></td><td class='code'><pre><code class=''><span class='line'>bundler -v~>1.0.21</span></code></pre></td></tr></table></div></figure>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blogs/115">Lucene 3下最快的中文分词器</a></h1>
<p class="meta">
<time datetime="2011-06-19T00:00:00+08:00" pubdate data-updated="true">Jun 19<span>th</span>, 2011</time>
</p>
</header>
<div class="entry-content"><h1>包包分词器 – 一个基于字典的快速中文分词器</h1>
<h2>source code</h2>
<ul>
<li><a href="https://github.com/zzzhc/baobao-analyzer">github project</a></li>
</ul>
<h2>features</h2>
<ul>
<li>简单 1000LOC</li>
<li>高效 7M+ chars/second</li>
<li>支持中文,英语,数字</li>
<li>自动识别未登录词</li>
<li>支持OffsetAttribute</li>
<li>支持TypeAttribute</li>
<li>支持PositionIncrementAttribute</li>
</ul>
<h2>usage</h2>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">Dict</span> <span class="n">dict</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Dict</span><span class="o">();</span>
</span><span class='line'><span class="n">dict</span><span class="o">.</span><span class="na">addAllSpecialTypes</span><span class="o">();</span>
</span><span class='line'><span class="n">BufferedReader</span> <span class="n">dictReader</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BufferedReader</span><span class="o">(</span><span class="k">new</span> <span class="n">InputStreamReader</span><span class="o">(</span>
</span><span class='line'> <span class="k">new</span> <span class="nf">FileInputStream</span><span class="o">(</span><span class="s">"dict.txt"</span><span class="o">),</span> <span class="s">"UTF-8"</span><span class="o">));</span>
</span><span class='line'><span class="n">dict</span><span class="o">.</span><span class="na">load</span><span class="o">(</span><span class="n">dictReader</span><span class="o">);</span>
</span><span class='line'><span class="n">dictReader</span><span class="o">.</span><span class="na">close</span><span class="o">();</span>
</span><span class='line'><span class="n">dict</span><span class="o">.</span><span class="na">optimize</span><span class="o">();</span>
</span><span class='line'><span class="n">DictAnalyzer</span> <span class="n">dictAnalyzer</span> <span class="o">=</span> <span class="k">new</span> <span class="n">DictAnalyzer</span><span class="o">(</span><span class="n">dict</span><span class="o">);</span>
</span></code></pre></td></tr></table></div></figure>
<h2>benchmark</h2>
<p>ant benchmark</p>
<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span>
<span class='line-number'>9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
</pre></td><td class='code'><pre><code class='java'><span class='line'><span class="n">supported</span> <span class="nl">features:</span>
</span><span class='line'> <span class="n">CharTerm</span> <span class="n">Offset</span> <span class="n">PositionIncrement</span> <span class="n">Term</span> <span class="n">Type</span>
</span><span class='line'> <span class="n">IKAnalyzer</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">N</span> <span class="n">Y</span> <span class="n">N</span>
</span><span class='line'> <span class="n">MMSegAnalyzer</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">N</span> <span class="n">Y</span> <span class="n">Y</span>
</span><span class='line'> <span class="n">PaodingAnalyzer</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">N</span> <span class="n">Y</span> <span class="n">Y</span>
</span><span class='line'><span class="n">StandardAnalyzer</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span>
</span><span class='line'> <span class="n">BaoBaoAnalyzer</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span> <span class="n">Y</span>
</span><span class='line'>
</span><span class='line'><span class="n">test</span> <span class="mi">1</span><span class="o">,</span> <span class="n">sample</span> <span class="n">length</span><span class="o">=</span><span class="mi">26265</span>
</span><span class='line'> <span class="n">name</span> <span class="n">chars</span> <span class="n">time</span> <span class="n">tokens</span> <span class="nf">speed</span><span class="o">(</span><span class="n">chars</span><span class="o">/</span><span class="n">second</span><span class="o">)</span>
</span><span class='line'> <span class="n">PaodingAnalyzer</span> <span class="mi">26265</span> <span class="mf">0.610</span> <span class="mi">12542</span> <span class="mf">43036.87</span>
</span><span class='line'> <span class="n">MMSegAnalyzer</span> <span class="mi">26265</span> <span class="mf">0.314</span> <span class="mi">14007</span> <span class="mf">83566.52</span>
</span><span class='line'> <span class="n">IKAnalyzer</span> <span class="mi">26265</span> <span class="mf">0.262</span> <span class="mi">16016</span> <span class="mf">100177.91</span>
</span><span class='line'><span class="n">StandardAnalyzer</span> <span class="mi">26265</span> <span class="mf">0.141</span> <span class="mi">22366</span> <span class="mf">185727.87</span>
</span><span class='line'> <span class="n">BaoBaoAnalyzer</span> <span class="mi">26265</span> <span class="mf">0.038</span> <span class="mi">18185</span> <span class="mf">695682.16</span>
</span><span class='line'>
</span><span class='line'><span class="n">test</span> <span class="mi">2</span><span class="o">,</span> <span class="n">sample</span> <span class="n">length</span><span class="o">=</span><span class="mi">262650</span>
</span><span class='line'> <span class="n">name</span> <span class="n">chars</span> <span class="n">time</span> <span class="n">tokens</span> <span class="nf">speed</span><span class="o">(</span><span class="n">chars</span><span class="o">/</span><span class="n">second</span><span class="o">)</span>
</span><span class='line'> <span class="n">PaodingAnalyzer</span> <span class="mi">262650</span> <span class="mf">0.187</span> <span class="mi">125420</span> <span class="mf">1402139.61</span>
</span><span class='line'> <span class="n">IKAnalyzer</span> <span class="mi">262650</span> <span class="mf">0.163</span> <span class="mi">160160</span> <span class="mf">1613693.16</span>
</span><span class='line'> <span class="n">MMSegAnalyzer</span> <span class="mi">262650</span> <span class="mf">0.158</span> <span class="mi">140070</span> <span class="mf">1664009.53</span>
</span><span class='line'> <span class="n">BaoBaoAnalyzer</span> <span class="mi">262650</span> <span class="mf">0.041</span> <span class="mi">181850</span> <span class="mf">6362134.44</span>
</span><span class='line'><span class="n">StandardAnalyzer</span> <span class="mi">262650</span> <span class="mf">0.020</span> <span class="mi">223660</span> <span class="mf">12905789.80</span>
</span><span class='line'>
</span><span class='line'><span class="n">test</span> <span class="mi">3</span><span class="o">,</span> <span class="n">sample</span> <span class="n">length</span><span class="o">=</span><span class="mi">2626500</span>
</span><span class='line'> <span class="n">name</span> <span class="n">chars</span> <span class="n">time</span> <span class="n">tokens</span> <span class="nf">speed</span><span class="o">(</span><span class="n">chars</span><span class="o">/</span><span class="n">second</span><span class="o">)</span>
</span><span class='line'> <span class="n">IKAnalyzer</span> <span class="mi">2626500</span> <span class="mf">2.251</span> <span class="mi">1601600</span> <span class="mf">1166564.72</span>
</span><span class='line'> <span class="n">PaodingAnalyzer</span> <span class="mi">2626500</span> <span class="mf">1.462</span> <span class="mi">1254200</span> <span class="mf">1796381.55</span>
</span><span class='line'> <span class="n">MMSegAnalyzer</span> <span class="mi">2626500</span> <span class="mf">1.043</span> <span class="mi">1400700</span> <span class="mf">2519010.94</span>
</span><span class='line'> <span class="n">BaoBaoAnalyzer</span> <span class="mi">2626500</span> <span class="mf">0.352</span> <span class="mi">1818500</span> <span class="mf">7458959.20</span>
</span><span class='line'><span class="n">StandardAnalyzer</span> <span class="mi">2626500</span> <span class="mf">0.202</span> <span class="mi">2236600</span> <span class="mf">13015280.16</span>
</span></code></pre></td></tr></table></div></figure>
</div>
</article>
<article>
<header>
<h1 class="entry-title"><a href="/blogs/107">Mysqld 5.1.41的一个神奇bug</a></h1>