-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
598 lines (592 loc) · 61.8 KB
/
index.html
File metadata and controls
598 lines (592 loc) · 61.8 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
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><meta name="description" content=""><meta name="keywords" content=""><meta name="author" content="xpgeng"><meta name="copyright" content="xpgeng"><title>XP's blog</title><link rel="shortcut icon" href="/melody-favicon.ico"><link rel="stylesheet" href="/css/index.css?version=1.7.0"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/font-awesome@latest/css/font-awesome.min.css?version=1.7.0"><meta name="format-detection" content="telephone=no"><meta http-equiv="x-dns-prefetch-control" content="on"><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"><meta http-equiv="Cache-Control" content="no-transform"><meta http-equiv="Cache-Control" content="no-siteapp"><script>var GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: undefined,
copy: {
success: 'Copy successfully',
error: 'Copy error',
noSupport: 'The browser does not support'
}
} </script><meta name="generator" content="Hexo 4.2.1"></head><body><i class="fa fa-arrow-right" id="toggle-sidebar" aria-hidden="true"></i><div id="sidebar" data-display="false"><div class="author-info"><div class="author-info__avatar text-center"><img src="/img/avatar.png"></div><div class="author-info__name text-center">xpgeng</div><div class="author-info__description text-center"></div><hr><div class="author-info-articles"><a class="author-info-articles__archives article-meta" href="/archives"><span class="pull-left">Articles</span><span class="pull-right">5</span></a><a class="author-info-articles__tags article-meta" href="/tags"><span class="pull-left">Tags</span><span class="pull-right">4</span></a><a class="author-info-articles__categories article-meta" href="/categories"><span class="pull-left">Categories</span><span class="pull-right">4</span></a></div></div></div><nav class="no-bg" id="nav"><div id="page-header"><span class="pull-left"> <a id="site-name" href="/">XP's blog</a></span><i class="fa fa-bars toggle-menu pull-right" aria-hidden="true"></i><span class="pull-right menus"> <a class="site-page" href="/">Home</a><a class="site-page" href="/archives">Archives</a><a class="site-page" href="/tags">Tags</a><a class="site-page" href="/categories">Categories</a></span><span class="pull-right"></span></div><div id="site-info"><div id="site-title">XP's blog</div><div id="site-sub-title"></div><div id="site-social-icons"><a class="social-icon" href="https://github.com/xpgeng" target="_blank" rel="noreferrer noopener nofollow"><i class="fa-github fa"></i></a><a class="social-icon" href="https://twitter.com/xinpgeng" target="_blank" rel="noreferrer noopener nofollow"><i class="fa-twitter fa"></i></a></div></div></nav><div id="content-outer"><div class="layout" id="content-inner"><div class="recent-post-item article-container"><a class="article-title" href="/2016/09/11/2016-9-11-Remote-note/">Remote 读书笔记</a><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2016-09-11</time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fa fa-inbox article-meta__icon" aria-hidden="true"></i><a class="article-meta__categories" href="/categories/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/">读书笔记</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fa fa-tag article-meta__icon" aria-hidden="true"></i><a class="article-meta__tags" href="/tags/%E8%BF%9C%E7%A8%8B%E5%8A%9E%E5%85%AC/">远程办公</a></span><div class="content"><p>我相信很多码农都读过这本书: REMOTE. Jason Fried和David Heinemeier Hansson所写. 两位是<a href="https://37signals.com/" target="_blank" rel="noopener">37Signals</a>的联合创始人. 值得一提的是, Jason在芝加哥, David在哥本哈根. 这也REMOTE这本书诞生的原因.</p>
<p>REMOTE通篇都围绕着远程办公这个主题,阐述两位作者在这方面的理念, 经验, 建议等等. 对于我而言, REMOTE为我打开一扇新的大门, 让我知道了这样的工作方式是可以实现的, 并且他非常的吸引我.</p>
<h2 id="REMOTE的好处"><a href="#REMOTE的好处" class="headerlink" title="REMOTE的好处"></a>REMOTE的好处</h2><ul>
<li>REMOTE一大优点就是<strong>能够自己选择工作环境</strong>, 我们可以为自己创造一个完全安静的环境, 保证自己在工作过程中不会被外界干扰. 比如同事的讨论, 上司的询问, 无意义的开会等等. 很自然, 我们就可以有大段的时间进行深度思考, 继而工作效率得到极大的提高. </li>
<li>而且REMOTE可以<strong>减少通勤时间</strong>. 想想炎热的夏天, 大家都拥挤在北京的地铁里, 来回工作通勤时间就是两个小时, 而你在这段时间里正吹着空调愉快的看书写代码. 啧啧…</li>
<li>不仅如此, 我们还可以<strong>自由选择自己的工作时间</strong>, 比如凌晨3点开始工作(我发现好像很多人喜欢凌晨起床工作), 工作到中午. 这样下午的时间我们就可以尽情的发展自己的业余生活, 健身, 会友, 学习新的技能…这也是远程非常诱惑的一点, 想想就觉得幸福指数蹭蹭上扬啊!</li>
</ul>
<p>以上只是部分对个人的好处, 对公司而言</p>
<ul>
<li>远程可以<strong>让公司尽可能的轻量化</strong>. 比如省去了租赁场地的开支.</li>
<li>可以<strong>吸引世界各地最优秀的人才</strong>. 一线城市的待遇, 可以在消费更低的城市生活, 这对人才来说也是很大的诱惑.</li>
<li>而且可以<strong>更清楚的看到员工的工作量</strong>.</li>
</ul>
<h2 id="良好的工作习惯是远程的基础"><a href="#良好的工作习惯是远程的基础" class="headerlink" title="良好的工作习惯是远程的基础"></a>良好的工作习惯是远程的基础</h2><p>可是如果我们只看到远程工作的好处就决定要改变自己的工作方式, 立马开始远程起来. 那就大错特错了. REMOTE这本书也提醒我们, 并不是每个人都适合远程工作. 尤其是在我们没有一个良好的工作习惯下, 远程工作很有可能让我们的生活工作一团糟.</p>
<p>想要真正从远程工作中受益, 需要我们有非常好的工作习惯, 清晰的规则来约束自己的行为, 甚至可能比在公司里工作还要更严格. 因为此时的我们并没有老板的监督, 完全是自己为自己负责. 懒惰是人类的天性, 在渡过了远程工作的兴奋期后, 随之而来就是懈怠, 计划好的凌晨3点起来工作, 可能变成了一觉睡到午后. 刚刚工作一个小时, 打局LOL放松一下? 上会网, 聊会天, 发个微博, 反正我现在很自由! </p>
<p>所以远程工作某种意义上其实并不自由, 因为我们要为自己负责, 要为工作负责, 因此就一定要约束自己的很多行为, 将工作生活划清界限, 甚至给自己一些硬性规定. 为了防止很多人莽撞的开始自己的远程工作生涯, REMOTE也提到远程工作最好不要一蹴而就, 它需要一个长期不断调整,逐渐适应的过程. 比如一周有一天是远程工作的, 其余时间在公司工作, 慢慢的随着习惯的养成, 渐渐过度到全职远程. 当然还多人的公司可能是不允许远程的, 这时我们可以利用业余时间做些远程的兼职, 或自己开发一些项目, 为远程工作积累经验, 了解自己在工作过程中是否有不好的习惯, 应该设置怎样的规则来约束自己. </p>
<p>如果你是一个聪明且高效的人, 并且确信自己可以适应远程工作, 那么下面这个奇特的点就是说个你听的.</p>
<h2 id="不要过度工作"><a href="#不要过度工作" class="headerlink" title="不要过度工作"></a>不要过度工作</h2><p>没错, 太自由是会引起工作狂们过度工作的. REMOTE里讲到, 正常的工作时间是每周40h, 如果你达到这个工作量, 要及时控制自己, 不要陷入无休无止的工作中. 尤其作为一个码农, 这要兴奋起来, 真是刹不住车啊! 长期的持续超负荷工作, 迟早会让你崩掉. 37signals 未来防止员工们过度工作, 提供了很多福利, 比如公司出钱支持员工发展业余爱好, 为员工办健身卡, 出钱让员工出去旅行等等. </p>
<p>在我看来, 远程工作的一部分目的就是为了让自己有更多时间去支配,利用效率留出时间, 去不断发展完善自己. 如果你的想法和我一样, 我相信你会很好的规划好自己的时间, 不会让自己一直陷入过度工作. 希望高效工作的人们也能有意识的反思自己是不是过度工作了.</p>
<p>还多人可能会认为, 对于远程工作, 员工是爽了, 可以作为一个管理者可就头疼了. 他这会儿是不是在玩游戏? 他这会是不是还么起床? 他现在有没有好好工作??</p>
<h2 id="这种情况怎么办呢"><a href="#这种情况怎么办呢" class="headerlink" title="这种情况怎么办呢?"></a>这种情况怎么办呢?</h2><p>其实很简单, 如果作为管理者的你不能够信任你的员工可以很好的远程工作, 那就炒了他嘛! 人与人之间最基本的信任呐! </p>
<p>远程工作的一个基础就是信任. 其实这也是很多远程工作的公司更有战斗力的原因. 大家彼此信任, 在信任基础上形成自己的公司文化. 当然光靠信任来管理远程公司是远远不够的. REMOTE给出了很多切实可行的操作, 比如如何协同工作(员工之间工作要有重叠时间), 如何有效沟通(语音, 视频, 电话, 录屏等等), 如何增加互动(虚拟茶水间)等等. 还有一点也很重要, 一切以结果为导向(潜台词就是, 只要员工能出色的完成交付的任务, 他一天工作一小时又何妨. 当然, 如果真的工作一小时就搞定了分配的任务, 那就得问问分配任务的人是不是有问题了). </p>
<p>同时作为一个管理者, 也要能够很好的划分任务, 尽量避免在流程上遇到各种问题.</p>
<h2 id="远程并不是永不相见"><a href="#远程并不是永不相见" class="headerlink" title="远程并不是永不相见"></a>远程并不是永不相见</h2><p>尽管远程工作让员工可以分布全球各地, 但是这并不意味着大家不需要线下的沟通. 37signals每年都会组织至少两次聚会, 所有员工来到他们Chicago的总部(你看, 虽然你远程公司, 也还是有实体办公室的). 这么做的目的, 就是让员工们通过线下进一步的熟悉起来, 了解每个人的真实性格. </p>
<p>我自己的体会也是觉得线下的聚会很有必要. 之前参加开智的python班, 虽然大家能够线上一起完成项目, 可是缺少了线下面对面的沟通, 仅仅通过线上的那点信息量,对一个人的了解始终是不够的. 后来经过线下见面交流, 获得的信息量简直是线上的数倍! 我想, 这也是开智虽然是线上课程, 可是还是会花很多精力组织线下聚会的原因. </p>
<h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>因为我现在还在读书的关系, 未来三年都要在大连蹲着. 所以, 我希望能够争取到一些远程的兼职工作, 去正真的体验这种工作方式, 看看他是不是像路意说的”会上瘾!” </p>
<p>感谢REMOTE为我打开了一扇大门! </p>
<p>最后附上<a href="http://www.jianshu.com/notebooks/41672/latest" target="_blank" rel="noopener">REMOTE中文版</a></p>
</div><hr></div><div class="recent-post-item article-container"><a class="article-title" href="/2016/06/29/2016-7-4-PostgreSQL-Note/">PostgreSQL 学习笔记</a><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2016-06-29</time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fa fa-inbox article-meta__icon" aria-hidden="true"></i><a class="article-meta__categories" href="/categories/%E7%AC%94%E8%AE%B0/">笔记</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fa fa-tag article-meta__icon" aria-hidden="true"></i><a class="article-meta__tags" href="/tags/postgresql/">postgresql</a></span><div class="content"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><ul>
<li><p>知识图谱学习小组Week3的重点就是学习使用PostgreSQL+JSON, 作业是储存自己的W3C邮件JSON. 所以边做作业, 边记录自己整个的学习过程, 一是及时记录自己遇到的问题方便回顾, 二是希望过程可以复用, 帮助其他人少走些弯路.</p>
</li>
<li><p>具体关于为什么要选择PostgreSQL, 可以看看知识图谱学习小组的<a href="https://github.com/memect/kg-beijing/wiki/%E7%AC%AC%E4%B8%80%E6%9C%9Fw3%EF%BC%9A%E7%9F%A5%E8%AF%86%E5%AD%98%E5%82%A8" target="_blank" rel="noopener">wiki</a></p>
</li>
<li><p><a href="https://functionwhatwhat.com/json-in-postgresql/" target="_blank" rel="noopener">Why JSON in PostgreSQL is Awesome</a></p>
</li>
</ul>
<h2 id="安装并创建database"><a href="#安装并创建database" class="headerlink" title="安装并创建database"></a>安装并创建database</h2><ul>
<li><p>系统为Mac OS, 虽然在Download里找到了安装方法, 可是在官方文档的Installation里竟然没有给出具体的Mac系统下的安装方法. 表示不解. 难道大家上来不是先看官网文档?</p>
<pre><code>$ brew update; brew install postgres</code></pre></li>
</ul>
<ul>
<li><p>初始化</p>
<pre><code>$ initdb -D /usr/local/pgsql/data</code></pre></li>
</ul>
<ul>
<li><p>启动Server</p>
<pre><code>$ pg_ctl -D /usr/local/pgsql/data -l logfile start</code></pre></li>
</ul>
<ul>
<li><p>创建database</p>
<pre><code>$ createdb mydb</code></pre></li>
<li><p>删除database</p>
<pre><code>$ dropdb mydb</code></pre></li>
<li><p>打开Database</p>
<pre><code>$ psql mydb</code></pre></li>
<li><p>关闭Server</p>
<pre><code>$ kill -INT `head -1 /usr/local/pgsql/data/postmaster.pid`</code></pre></li>
</ul>
<p>每次启动关闭Server很麻烦, 可以把写个alias方便操作.</p>
<ul>
<li><p>更简单的方法是直接下载<a href="http://postgresapp.com/" target="_blank" rel="noopener">PostgreSQL.app</a>, 像安装应用一样, 启动和关闭server就是打开或关闭应用, 同时在<code>~/.bash_profile</code>中添加如下代码来设置PATH, 即可进行命令行交互.</p>
<pre><code>export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin</code></pre></li>
</ul>
<h2 id="psycopg2"><a href="#psycopg2" class="headerlink" title="psycopg2"></a>psycopg2</h2><ul>
<li><p>安装psycopg2</p>
<pre><code>$ pip install pscopg2</code></pre><ul>
<li><p>这里遇到了一点小坑:pscopg是依赖于PostgreSQL的, 所以只有在PostgreSQL装好后才可以安装.</p>
</li>
<li><p>在调用过程中出现了如下错误</p>
<blockquote>
<p>Library not loaded: libssl.1.0.0.dylib<br>Referenced from: /Users/xpgeng/anaconda/lib/python2.7/site-packages/psycopg2/_psycopg.so<br>Reason: image not found</p>
</blockquote>
</li>
<li><p>原因是不能加载<code>libssl.1.0.0.dylib</code>, stackflow上有相关的答案</p>
</li>
<li><p><a href="http://stackoverflow.com/questions/32978365/how-do-i-run-psycopg2-on-el-capitan-without-hitting-a-libssl-error" target="_blank" rel="noopener">How do I run psycopg2 on El Capitan without hitting a libssl error</a></p>
</li>
<li><p><a href="http://stackoverflow.com/questions/27264574/import-psycopg2-library-not-loaded-libssl-1-0-0-dylib" target="_blank" rel="noopener">import psycopg2 Library not loaded: libssl.1.0.0.dylib</a></p>
</li>
<li><p>但是第一个我使用了不好用, 方法就是建立<code>libssl.1.0.0.dylib</code>的symlink. 于是我用了第二个方法, 在<code>~/.bash_profile</code>中添加如下代码.</p>
<pre><code>export DYLD_FALLBACK_LIBRARY_PATH=$HOME/anaconda/lib/:$DYLD_FALLBACK_LIBRARY_PATH</code></pre></li>
<li><p>Done!</p>
</li>
</ul>
</li>
<li><p><a href="http://initd.org/psycopg/docs/" target="_blank" rel="noopener">Basic Module usage</a></p>
<ul>
<li>如果你熟悉python的sqlite3, 想必再看psycopg2会很容易, 由于段老师已经非常详细的介绍了用法, 这里就不一一说明,具体请看<a href="https://github.com/memect/kg-beijing/tree/master/KG-PostgreSQL/KG-PostgreSQL" target="_blank" rel="noopener">这里</a>.</li>
<li>不过有些地方还想强调一下.<ul>
<li><code>conn.commit()</code>: 修改数据库后一定要记得提交…</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="PostgreSQL-基本语法"><a href="#PostgreSQL-基本语法" class="headerlink" title="PostgreSQL 基本语法"></a>PostgreSQL 基本语法</h2><h3 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h3><ul>
<li>查看数据库列表: <code>user=#\l</code></li>
<li>进入数据库: <code>user=#\c databasename</code></li>
<li>查看数据库表结构: <code>user=#\d databasename</code></li>
<li>退出: <code>user=#\q</code></li>
</ul>
<h3 id="写入JSON"><a href="#写入JSON" class="headerlink" title="写入JSON"></a>写入JSON</h3><ul>
<li><p>读取+ 创建TABLE</p>
<figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"> <span class="comment"># -*- coding: utf-8 -*-</span></span><br><span class="line"><span class="keyword">import</span> json</span><br><span class="line"><span class="keyword">import</span> psycopg2</span><br><span class="line"><span class="keyword">import</span> psycopg2.extras </span><br><span class="line"> </span><br><span class="line"> <span class="comment"># Read data</span></span><br><span class="line"> data = []</span><br><span class="line"><span class="keyword">with</span> open(<span class="string">'W3C_data.json'</span>, <span class="string">'r'</span>) <span class="keyword">as</span> f:</span><br><span class="line"> <span class="keyword">for</span> line <span class="keyword">in</span> f:</span><br><span class="line"> data.append(json.loads(line, encoding=<span class="string">'utf-8'</span>))</span><br><span class="line">f.close()</span><br><span class="line"></span><br><span class="line"> <span class="comment"># CREATE TABLE</span></span><br><span class="line">conn = psycopg2.connect(<span class="string">"dbname=W3C user=xpgeng"</span>)</span><br><span class="line">cursor = conn.cursor()</span><br><span class="line">cursor.execute(<span class="string">'''</span></span><br><span class="line"><span class="string"> CREATE TABLE IF NOT EXISTS</span></span><br><span class="line"><span class="string"> W3C(id serial primary key, data jsonb);</span></span><br><span class="line"><span class="string"> '''</span>)</span><br></pre></td></tr></table></figure></li>
<li><p>写入数据. 这里从我遇到的坑入手写下如何写入JSON数据.</p>
<ul>
<li><p>直接将读取的字典写入到数据库失败</p>
</li>
<li><p><code>str()</code>后出现如下问题</p>
<pre><code>psycopg2.DataError: invalid input syntax for type json
DETAIL: Token "u" is invalid.
CONTEXT: JSON data, line 1: {u... </code></pre></li>
<li><p>我以为是编码的问题, 于是在读取JSON数据的时候加了 <code>encoding="utf-8"</code>, 还是不行.</p>
</li>
<li><p>Google 之后发现一个日文的<a href="http://symfoware.blog68.fc2.com/blog-entry-1258.html" target="_blank" rel="noopener">答案</a>. 他使用了psycopg2.extras这个模块的method:Json. 于是采用之. </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cursor.execute('''</span><br><span class="line"> INSERT INTO W3C (data) VALUES (%s);</span><br><span class="line"> ''', [psycopg2.extras.Json(item)])</span><br></pre></td></tr></table></figure></li>
<li><p>注意: <code>[]</code>很重要, 最开始受python语法的影响, 想当然的忘记了加<code>[]</code>, 走了弯路…</p>
</li>
<li><p>Done!</p>
</li>
</ul>
</li>
<li><p>Query.</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">SELECT * FROM json_test WHERE data #> '{b,c}' = '"d"';</span><br></pre></td></tr></table></figure>
<ul>
<li><p>这里只写了一个, 针对如下情况:</p>
<blockquote>
<p>{“a”: 1, “b”: {“c”: “d”, “e”: true}}</p>
</blockquote>
</li>
<li><p>通过这个语句我们就可以查询W3C中的信息.例如, headers->From = “Bobby Tung <<a href="mailto:bobbytung@wanderer.tw">bobbytung@wanderer.tw</a>>”</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">SELECT data FROM W3C </span><br><span class="line">WHERE data #> '{headers, From}' = '"Bobby Tung <bobbytung@wanderer.tw>"'</span><br></pre></td></tr></table></figure>
</li>
<li><p>还有很多姿势, 由于<a href="http://schinckel.net/2014/05/25/querying-json-in-postgres/" target="_blank" rel="noopener">Schinckel写的教程</a>已经非常完整, 大家可以继续深入学习.</p>
</li>
</ul>
</li>
</ul>
<h2 id="References"><a href="#References" class="headerlink" title="References"></a>References</h2><ul>
<li><p>PostgreSQL官方文档(这官方文档…呵呵)</p>
<ul>
<li><a href="https://www.postgresql.org/download/macosx/" target="_blank" rel="noopener">https://www.postgresql.org/download/macosx/</a></li>
<li><a href="https://www.postgresql.org/docs/9.5/static/index.html" target="_blank" rel="noopener">PostgreSql Official Documentation</a></li>
<li><a href="https://www.postgresql.org/download/macosx/" target="_blank" rel="noopener">Install PostgeSQL on Mac OSX</a></li>
<li><a href="http://postgresapp.com/documentation/gui-tools.html" target="_blank" rel="noopener">GUI Tools of PostgreSQL.app</a></li>
<li><a href="https://www.postgresql.org/docs/current/static/datatype-json.html" target="_blank" rel="noopener">PostgreSql Official Documentation–8.14. JSON Types</a></li>
<li><a href="https://www.postgresql.org/docs/current/static/functions-json.html" target="_blank" rel="noopener">PostgreSql Official Documentation–9.15. JSON Functions and Operators</a></li>
</ul>
</li>
<li><p>psysopg2</p>
<ul>
<li><a href="http://initd.org/psycopg/docs/extras.html" target="_blank" rel="noopener">psycopg2.extras</a><ul>
<li>Very Useful!! </li>
</ul>
</li>
<li><a href="http://initd.org/psycopg/docs/faq.html" target="_blank" rel="noopener">Frequently Asked Questions</a></li>
</ul>
</li>
<li><p><a href="http://schinckel.net/2014/05/25/querying-json-in-postgres/" target="_blank" rel="noopener">Querying JSON in Postgres</a></p>
<ul>
<li>大部分关于如何querying的语法, 代码都来自于这篇.</li>
<li>Schinchel 很厉害?</li>
</ul>
</li>
<li><p><a href="http://chenxiaoyu.org/2014/07/25/postgresql-json.html" target="_blank" rel="noopener">PostgreSQL JSON 数据类型–Author: Smallfish</a></p>
</li>
<li><p><a href="http://stackoverflow.com/questions/21740359/python-mysqldb-typeerror-not-all-arguments-converted-during-string-formatting" target="_blank" rel="noopener">http://stackoverflow.com/questions/21740359/python-mysqldb-typeerror-not-all-arguments-converted-during-string-formatting</a></p>
</li>
<li><p><a href="http://symfoware.blog68.fc2.com/blog-entry-1258.html" target="_blank" rel="noopener">http://symfoware.blog68.fc2.com/blog-entry-1258.html</a></p>
</li>
<li><p><a href="http://wiki.zoomquiet.io/pythonic/PsycopgJson" target="_blank" rel="noopener">有Python的地方, 就有大妈!!!</a></p>
<ul>
<li>这是大妈写的关于psycopg2与json的文档.</li>
</ul>
</li>
</ul>
</div><hr></div><div class="recent-post-item article-container"><a class="article-title" href="/2016/06/13/2016-6-13-install_Java/">记录一次安装Java的入坑出坑之旅</a><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2016-06-13</time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fa fa-inbox article-meta__icon" aria-hidden="true"></i><a class="article-meta__categories" href="/categories/%E9%85%8D%E7%BD%AE/">配置</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fa fa-tag article-meta__icon" aria-hidden="true"></i><a class="article-meta__tags" href="/tags/%E5%9D%91/">坑</a></span><div class="content"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>在学习NLP的工具-<a href="http://www.nltk.org/api/nltk.tag.html#module-nltk.tag.stanford" target="_blank" rel="noopener">NLTK</a>, 因为NLTK是Java写的, 所以核心的计算过程要调用Java, 于是安装之. 本以为以一次非常简单的安装过程, 可是运行NLTK的demo的时候一再的报关于Java的错. 所以一步一步就有了入坑出坑之旅…T_T</p>
<h2 id="过程"><a href="#过程" class="headerlink" title="过程"></a>过程</h2><ul>
<li><p>没有注意Java的版本, 直接在Apple的官网上下了1.6, 但是发现NLTK调用不了, 经查阅NLTK的官方文档发现要求1.8+…而Apple官网给出了是1.6, 更高版本就指向Oracle去下载.</p>
</li>
<li><p>于是去Oracle上去下载最新版本.但是发现卸载不了之前的1.6.</p>
</li>
<li><p>google 关键词: <code>mac</code>, <code>osx</code>, <code>uninstall java</code></p>
</li>
<li><p>使用如下命令行卸载</p>
<blockquote>
<p>sudo rm -fr /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin<br>sudo rm -fr /Library/PreferencesPanes/JavaControlPanel.prefpane</p>
</blockquote>
</li>
<li><p>不好用. 虽然在system preferences里已经看不到Java的图标, 可以在Terminal里仍然显示1.6还在.</p>
</li>
<li><p>经历过各种搜索后, 最后关键词带了<strong>版本号</strong>, 于是找到下面的命令.</p>
<blockquote>
<p>% sudo rm -rf /System/Library/Java/JavaVirtualMachines/1.6.0.jdk<br>% sudo rm -rf /Library/Java/JavaVirtualMachines/1.6.0*.jdk</p>
</blockquote>
</li>
<li><p>终于将其卸载, 然后下载最新版本, 安装.</p>
</li>
<li><p>满以为可以的时候, 结果在Terminal里查看Java 版本<code>java -version</code>:</p>
<blockquote>
<p>No Java runtime present, requesting install</p>
</blockquote>
</li>
<li><p>再次google, 找到以下解决办法</p>
<blockquote>
<p>sudo rm /usr/bin/java<br>sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin</p>
</blockquote>
</li>
<li><p>可以问题又来了, 执行命令后给出如下反馈.</p>
<blockquote>
<p>rm: /usr/bin/java: Operation not permitted</p>
</blockquote>
</li>
<li><p>再再次google, 了解到需要做以下操作</p>
<blockquote>
<ol>
<li>reboot, 狂按<code>command+R</code></li>
<li>点击<code>Utilities</code>, 进入Terminal</li>
<li>输入: csrutil diable; reboot</li>
</ol>
</blockquote>
</li>
<li><p>然后重复命令</p>
<blockquote>
<p>sudo rm /usr/bin/java<br>sudo ln -s /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java /usr/bin</p>
</blockquote>
</li>
<li><p>Done!!!</p>
</li>
<li><p>我去面会壁, 不要理我…… </p>
</li>
</ul>
<h2 id="References"><a href="#References" class="headerlink" title="References"></a>References</h2><ul>
<li><a href="https://www.java.com/zh_CN/download/help/mac_uninstall_java.xml" target="_blank" rel="noopener">https://www.java.com/zh_CN/download/help/mac_uninstall_java.xml</a></li>
<li><a href="http://stackoverflow.com/questions/12757558/installed-java-7-on-mac-os-x-but-terminal-is-still-using-version-6/14875241#14875241" target="_blank" rel="noopener">http://stackoverflow.com/questions/12757558/installed-java-7-on-mac-os-x-but-terminal-is-still-using-version-6/14875241#14875241</a></li>
<li><a href="http://mail.openjdk.java.net/pipermail/macosx-port-dev/2014-February/006388.html" target="_blank" rel="noopener">http://mail.openjdk.java.net/pipermail/macosx-port-dev/2014-February/006388.html</a></li>
<li><a href="http://stackoverflow.com/questions/33007889/move-usr-bin-java-in-terminal" target="_blank" rel="noopener">http://stackoverflow.com/questions/33007889/move-usr-bin-java-in-terminal</a></li>
</ul>
</div><hr></div><div class="recent-post-item article-container"><a class="article-title" href="/2016/02/02/2016-2-3-Squirrel-Guide/">鼠鬚管折騰指南北西东</a><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2016-02-02</time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fa fa-inbox article-meta__icon" aria-hidden="true"></i><a class="article-meta__categories" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fa fa-tag article-meta__icon" aria-hidden="true"></i><a class="article-meta__tags" href="/tags/%E6%95%99%E7%A8%8B/">教程</a></span><div class="content"><blockquote>
<p>鼠鬚管<br>爲物雖微情不淺<br><奉送原甫侍讀出守永興> 歐陽修</p>
</blockquote>
<p>最近學霸群里一直在安利小鶴雙拼, 於是慢慢開始上手練習, 然後聊天的過程中大媽冒出個鼠鬚管輸入法來. 你要知道向大師學習就得模仿大師嘛, 所以立即上手折騰一番. 还有, 大妈还提了表形码. 这个还没get到.</p>
<p>以下是我对网上各种文档的摘录以及自己的一些折腾.</p>
<h2 id="鼠鬚管-RIME-輸入法"><a href="#鼠鬚管-RIME-輸入法" class="headerlink" title="鼠鬚管(RIME)輸入法"></a>鼠鬚管(RIME)輸入法</h2><ul>
<li><p>先摘一段wikipedia上的一段介绍.</p>
<blockquote>
<p>中州韻輸入法引擎(Rime Input Method Engine, 又稱Rime 輸入法)是由<a href="https://github.com/lotem" target="_blank" rel="noopener">佛振</a>編寫的開源中文輸入法. 基於同一個核心架構, 該輸入法分爲三個發行版: </p>
<ol>
<li>Linux 發行版中州韻(ibus-rime,另有fcitx-rime) </li>
<li>Windows發行版小狼毫(Weasel) </li>
<li>OS X 發行版鼠鬚管(Squirrel) </li>
</ol>
</blockquote>
</li>
<li><p><a href="http://rime.im/" target="_blank" rel="noopener">Rime 官网</a></p>
</li>
<li><p><a href="https://github.com/rime/home/wiki" target="_blank" rel="noopener">Github</a></p>
</li>
<li><p>摘自RIME-wiki </p>
<ul>
<li>Rime 不是一種輸入法。是從各種常見鍵盤輸入法中提煉出來的抽象的輸入算法框架。因爲 Rime 涵蓋了大多數輸入法的「共性」,所以在不同的設定下,Rime 可化身爲不同的輸入法用來打字。</li>
</ul>
</li>
</ul>
<ul>
<li>为什么要使用RIME<ul>
<li>大家都说快.</li>
<li>可以根据个人习惯各种定制.</li>
</ul>
</li>
</ul>
<h2 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h2><pre><code>brew cask install squirrel</code></pre><h2 id="必要的背景知识"><a href="#必要的背景知识" class="headerlink" title="必要的背景知识"></a>必要的背景知识</h2><ul>
<li><p>RIME的配置基本背景</p>
<ul>
<li>因为Rime的配置文件、輸入方案定义及词典文件,均为特定格式的文本文档。</li>
<li>所以相关的各种配置都是基于文本文档进行的, 并不像主流输入法的GUI配置界面. 这也给新手配置带来的一定的麻烦.</li>
<li>配置文件扩展名大都为<code>.yaml</code>, 所以配置过程中还要涉及一些YAML语法. 不过都比较简单, 无需深入学习.</li>
<li>同时也会用到<code>正则表达式</code>实现一些高级功能.</li>
<li><strong>注意: 因为每次升级很可能会覆盖掉之前的配置, 所以配置某个文件如<code>XXXX.yaml</code>, 可以新建一个<code>XXXX.custom.yaml</code>, 在这里进行相应的配置能够避免升级带来的麻烦.具体方法详见下面的配置过程</strong></li>
</ul>
</li>
<li><p>文件夹位置</p>
<ul>
<li><p>共享文件夹</p>
<ul>
<li><code>/Library/Input Methods/Squirrel.app/Contents/SharedSupport/</code> </li>
</ul>
</li>
<li><p>User文件夹</p>
<ul>
<li><code>~/Library/Rime/</code> </li>
</ul>
</li>
<li><p>由于文件夹中的文件很多, 就不逐一介绍了, 在后面用到什么文件我们再随时介绍.</p>
</li>
</ul>
</li>
<li><p>每次配置完后要重新部署一下.</p>
<ul>
<li><p>如图点击<code>Deploy</code>.<br><img src="http://7xqopp.com1.z0.glb.clouddn.com/deploy.png" alt=""></p>
</li>
<li><p>如果部署失败, 需查看日志, 具体方法参加<a href="https://github.com/rime/home/wiki/RimeWithSchemata#%E9%97%9C%E6%96%BC%E8%AA%BF%E8%A9%A6" target="_blank" rel="noopener">这里</a></p>
</li>
</ul>
</li>
<li><p>由于本指南只是介绍了我自己的一些定制需求, 所以如果想详细的了解定制功能, 请点击阅读<a href="https://github.com/rime/home/wiki/RimeWithSchemata#%E9%97%9C%E6%96%BC%E8%AA%BF%E8%A9%A6" target="_blank" rel="noopener"><strong>官方定制指南</strong></a>.</p>
</li>
</ul>
<h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><h3 id="繁体转简体-全角转半角"><a href="#繁体转简体-全角转半角" class="headerlink" title="繁体转简体 + 全角转半角"></a>繁体转简体 + 全角转半角</h3><ul>
<li><p>在RIME输入法下, <code>Ctrl</code>+ <code>Grave</code>(<code>Tab</code>上方)</p>
<p> <img src="http://7xqopp.com1.z0.glb.clouddn.com/fan-jian.png" alt=""></p>
<p> <img src="http://7xqopp.com1.z0.glb.clouddn.com/quan-ban.png" alt=""></p>
</li>
</ul>
<h3 id="外观调整"><a href="#外观调整" class="headerlink" title="外观调整"></a>外观调整</h3><ol>
<li><p><strong>设置候选词数量</strong>:</p>
<ul>
<li><p>点击RIME图标, 打开settings.</p>
</li>
<li><p>新建<code>default.custom.yaml</code> </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"># default.custom.yaml </span><br><span class="line">patch:</span><br><span class="line"> menu/page_size: 7 #设置候选字数量.</span><br></pre></td></tr></table></figure></li>
</ul>
</li>
<li><p><strong>调整候选栏样式</strong>:</p>
<ul>
<li>新建<code>squirrel.custom.yaml</code>.</li>
</ul>
</li>
</ol>
<pre><code><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"> </span><br><span class="line"> # squirrel.custom.yaml</span><br><span class="line"> patch: </span><br><span class="line"> # us_keyboard_layout: true # 键盘选项:应用美式键盘布局</span><br><span class="line"> # show_notifications_when: growl_is_running # 狀態通知,默認裝有Growl時顯示,也可設爲全開(always)全關(never)</span><br><span class="line"> style/color_scheme: demo # 选择配色方案</span><br><span class="line"> style/horizontal: true # 候选窗横向显示</span><br><span class="line"> # style/inline_preedit: false # 关闭内嵌编码,这样就可以显示首行的拼音(MAC下不建议开启)</span><br><span class="line"> style/corner_radius: 3 # 窗口圆角半径</span><br><span class="line"> style/border_height: 4 # 窗口边界高度,大于圆角半径才有效果</span><br><span class="line"> tyle/border_width: 4 # 窗口边界宽度,大于圆角半径才有效果</span><br><span class="line"> # style/line_spacing: 1 # 候选词的行间距</span><br><span class="line"> # style/spacing: 5 # 在非内嵌编码模式下,预编辑和候选词之间的间距</span><br><span class="line"> style/font_face: "Lantinghei TC Extralight" # 预选栏文字字体,使用中文字体:兰亭黑-纤黑</span><br><span class="line"> style/font_point: 17 #预选栏文字字号</span><br><span class="line"> style/label_font_face: "Myriad Pro Light" # 预选栏编号字体,使用西文字体:Myriad Pro Light</span><br><span class="line"> style/label_font_point: 17 #预选栏编号字号 </span><br><span class="line"> </span><br><span class="line"> #上述是候选栏的基本设置,确定了文字的大小和候选栏的外观样式。</span><br><span class="line"> #下面是"demo"样式文件的配置,主要确定候选栏颜色配置。</span><br><span class="line"> </span><br><span class="line"> preset_color_schemes:</span><br><span class="line"> demo: #样式名称,就是上述“style/color_scheme: demo”</span><br><span class="line"> author: "***** <****@gmail.com>" #作者</span><br><span class="line"> name: "XXX/*****" #作者名字</span><br><span class="line"> label_color: 0xf2a45a #预选栏编号颜色</span><br><span class="line"> back_color: 0x333333 #背景颜色</span><br><span class="line"> candidate_text_color: 0xb9b9b9 #非第一后选项文字颜色</span><br><span class="line"> comment_text_color: 0xa5a5a5 #注解文字颜色</span><br><span class="line"> hilited_candidate_back_color: 0x333333 #第一后选项背景颜色</span><br><span class="line"> hilited_candidate_text_color: 0xff7d00 #第一后选项文字颜色</span><br><span class="line"> hilited_comment_text_color: 0x00a5ea #注解文字高亮</span><br><span class="line"> hilited_text_color: 0x7fffff #拼音串高亮(需要开启内嵌编码)</span><br><span class="line"> text_color: 0xa5a5a5 #拼音串颜色(需要开启内嵌编码) </span><br><span class="line"> </span><br><span class="line"> ``` </span><br><span class="line"></span><br><span class="line">- 以上配置摘自[这里](http://www.jianshu.com/p/cffc0ea094a7)</span><br><span class="line">- Remark:</span><br><span class="line"> - 关于配色方案, 默认的配色方案可以在`squirrel.yaml`中查看, 如果自己定制配色方案, [这里](http://pan.baidu.com/share/link?shareid=1116561757&uk=2635838991)是一个小工具, 可以直接生成配色代码.</span><br><span class="line"></span><br><span class="line">- 我的配置如下</span><br></pre></td></tr></table></figure></code></pre><h1 id="Squirrel-settings"><a href="#Squirrel-settings" class="headerlink" title="Squirrel settings"></a>Squirrel settings</h1><h1 id="encoding-utf-8"><a href="#encoding-utf-8" class="headerlink" title="encoding: utf-8"></a>encoding: utf-8</h1><p> patch:<br> style/horizontal: true # 候选窗横向显示<br> style/color_scheme: luna #候选窗配色<br> style/font_point: 17 #候选窗字体大小<br> style/label_font_point: 17 # 候选窗数字大小<br> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"> - 具体如图</span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line">### 添加小鹤双拼+emoji</span><br><span class="line">- 打开`default.custom.yaml`, 在patch下添加</span><br></pre></td></tr></table></figure><br> schema_list:<br> - schema: double_pinyin_flypy<br> - schema: emoji</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">- 利用切换繁简体的方法即可使用小鹤双拼以及emoji.</span><br><span class="line"></span><br><span class="line">###在特定程序里关闭中文輸入</span><br><span class="line">- 这个非常实用, 因为例如`iTerm`等Apps基本上要全程英文.</span><br><span class="line">- 首先查看该应用`Info.plist`中的`CFBundleIdentifier`.</span><br><span class="line"> - 在`Applications`中鼠标右键查看该应用的`Show Package Contents`</span><br><span class="line"> - 打开`Info.plist`, 找到`CFBundleIdentifier`对应的id套入以下格式.</span><br><span class="line">- 在`squirrel.custom.yaml`中`patch`下继续输入</span><br></pre></td></tr></table></figure>
<pre><code>app_options/app_CFBundleIdentifier:
ascii_mode: true
app_options/com.apple.Terminal:
ascii_mode: true
app_options/com.sublimetext.3:
ascii_mode: true
app_options/com.googlecode.iterm2:
ascii_mode: true
app_options/com.macromates.TextMate.preview:
ascii_mode: true</code></pre><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">###调整快捷键</span><br><span class="line">- 输入过程中经常中英文互切, 通过设置快捷键可以减少切换的按键次数.</span><br><span class="line">- 在`default.custom.yaml`中`patch`下继续输入</span><br></pre></td></tr></table></figure>
<p>#中英文切换的方式<br> ascii_composer/good_old_caps_lock: true<br> ascii_composer/switch_key:<br> Caps_Lock: noop<br> Shift_L: commit_text<br> #Control_L: inline_ascii</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">- 解释</span><br><span class="line"></span><br><span class="line">> `inline_ascii` :在输入法的临时英文编辑区内输入字母、数字、符号、空格等,回车上屏后自动复位到中文 </span><br><span class="line">> `commit_text` :已输入的候选文字上屏并切换至英文输入模式 </span><br><span class="line">> `noop` :屏蔽该切换键</span><br><span class="line"></span><br><span class="line">### 在拼音里实用emoji</span><br><span class="line">- 新建`double_pinyin_flypy.custom.yaml`</span><br><span class="line">- 输入</span><br></pre></td></tr></table></figure>
<p>patch:<br> schema/dependencies:<br> - emoji<br> abc_segmentor/extra_tags:<br> - reverse_lookup<br> reverse_lookup:<br> dictionary: emoji<br> enable_completion: false<br> prefix: “`” #可以任意修改<br> tips: 〔表情〕</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">- 如图</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">### 創建自定义詞組</span><br><span class="line">- 打开`double_pinyin_flypy.custom.yaml`</span><br><span class="line">- `patch`下添加</span><br></pre></td></tr></table></figure>
<p> ‘punctuator/half_shape/+’:<br> - ‘沈浪 <a href="mailto:shenlang.zyxyz@gmail.com">shenlang.zyxyz@gmail.com</a>‘<br> - ‘<a href="http://xpgeng.github.io'" target="_blank" rel="noopener">http://xpgeng.github.io'</a><br> - 在平坦的路面上曲折前行</p>
<pre><code>
- 目前deploy不成功...
### 导入词库
- 待折腾...
## 体会
- 真快...
## References
- [RIME-UserGuide](https://github.com/rime/home/wiki/UserGuide)
- [Rime with Schemata](https://github.com/rime/home/wiki/RimeWithSchemata)
- [Wikipeidia-中州韻輸入法引擎](https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%B7%9E%E9%9F%BB%E8%BC%B8%E5%85%A5%E6%B3%95%E5%BC%95%E6%93%8E)
- [Schema.yaml 詳解](https://github.com/LEOYoon-Tsaw/Rime_collections/blob/master/Rime_description.md)
- [鼠须管,“神级”输入法](http://www.ifanr.com/156409)
- [使用 Control 鍵切換中西文](https://gist.github.com/lotem/2981316)
- [在【朙月拼音】裏使用Emoji表情](https://gist.github.com/lotem/3705586)
- [Rime输入法—鼠须管(Squirrel)词库添加及配置](http://www.jianshu.com/p/cffc0ea094a7)</code></pre></div><hr></div><div class="recent-post-item article-container"><a class="article-title" href="/2015/11/06/2015-11-12-Tmux-Guide/">Tmux配置指南北西东</a><time class="post-meta__date"><i class="fa fa-calendar" aria-hidden="true"></i> 2015-11-06</time><span class="article-meta"><span class="article-meta__separator">|</span><i class="fa fa-inbox article-meta__icon" aria-hidden="true"></i><a class="article-meta__categories" href="/categories/%E5%B7%A5%E5%85%B7/">工具</a></span><span class="article-meta tags"><span class="article-meta__separator">|</span><i class="fa fa-tag article-meta__icon" aria-hidden="true"></i><a class="article-meta__tags" href="/tags/%E6%95%99%E7%A8%8B/">教程</a></span><div class="content"><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><ul>
<li><p>为什么使用Tmux?</p>
<ul>
<li>当我们进行多Terminal开发project时, 不同的Terminal有不同的开发任务, 比如我在开发一个Web版的极简交互日记系统时, 一个负责处理server端, 一个要运行client脚本, 还要一个负责执行其他命令.</li>
<li>这时候痛点就出现了, 我们在窗口间不停的切来切去, 很影响工作效率. 这时候聪明的同学会将窗口摆开,可是我们每天开始工作的时候, 第一件事就是摆窗口, 这岂不是很麻烦?</li>
<li>所以, 我们选择用Tmux这样一个工具, 只需要几个口令, 就可以在同一个Terminal界面分成我们需要的各个窗口. </li>
</ul>
</li>
<li><p>照例</p>
<pre><code>系统: OS X 10.11
Terminal: Iterm2
Tmux版本: version 2.1</code></pre></li>
</ul>
<h2 id="什么是Tmux"><a href="#什么是Tmux" class="headerlink" title="什么是Tmux"></a>什么是<a href="https://tmux.github.io/" target="_blank" rel="noopener">Tmux</a></h2><ul>
<li>“Terminal Multiplexer”的简称</li>
<li>简单来说, Terminal分窗工具. 一个窗口, 分成几部分, 可以让我们即编程, 又调试, 多端同窗口协同工作.</li>
<li>类似的工具还有dvtm, GNU Screen(1987发布第一版), splitvt等等.</li>
<li>这里推荐一个工具Byobu, 这个工具已经默认Tmux为后端, 对于不想折腾Tmux的人来说, 简直懒人福音啊.</li>
<li>想要熟练使用Tmux, 需要掌握Tmux各个模块的含义:</li>
</ul>
<table>
<thead>
<tr>
<th>server</th>
<th>服务器</th>
<th>输入tmux命令时就开启了一个服务器</th>
</tr>
</thead>
<tbody><tr>
<td>session</td>
<td>会话</td>
<td>一个服务器可以包含多个会话</td>
</tr>
<tr>
<td>window</td>
<td>窗口</td>
<td>一个会话可以包含多个窗口</td>
</tr>
<tr>
<td>pane</td>
<td>面板</td>
<td>一个窗口可以包含多个面板</td>
</tr>
</tbody></table>
<h2 id="下载与安装"><a href="#下载与安装" class="headerlink" title="下载与安装"></a>下载与安装</h2><p>在 Mac OS 中安装:</p>
<ul>
<li><p>安装 Homebrew</p>
<p> ruby -e “$(curl -fsSL <a href="https://raw.githubusercontent.com/Homebrew/install/master/install)"" target="_blank" rel="noopener">https://raw.githubusercontent.com/Homebrew/install/master/install)"</a></p>
<p>有关安装 homebrew 的详细的信息可以参考这里。</p>
</li>
<li><p>安装 Tmux</p>
<p> $ brew install tmux</p>
</li>
</ul>
<p>在 Ubuntu 中安装:</p>
<ul>
<li><p>在终端输入如下命令:</p>
<p> sudo apt-get install tmux</p>
</li>
</ul>
<p>W$呢? Sorry…..</p>
<h2 id="快捷键"><a href="#快捷键" class="headerlink" title="快捷键"></a>快捷键</h2><p>要想熟练使用Tmux, 一定要熟记一些必要快捷键, 这里列出了大部分快捷键, 但并不是都要记住.<br><code>C</code>= <code>Ctrl</code></p>
<p>|tmux |开启| sever |<br>|—|——|:—–:||<br>| tmux ls| 显示已有tmux列表(C-b s)|session|<br>|tmux attach-session -t 数字| 选择tmux|session|<br>|tmux new -s session |建立会话|session|<br>|tmux new -s session -d|在后台建立会话 |session|<br>|tmux ls |列出会话| session|<br>|tmux attach -t session|进入某个会话| session|<br>|C+b s | 现有会话列表|session|<br>|C+b c | (creat)创建一个新的窗口|window|<br>|C+b n| (next)切换到下一个窗口|window|<br>|C+b p| (previous)切换到上一个窗口|window|<br>|C+b l| (last)最后一个窗口|window|<br>|C+b w |通过上下键选择当前窗口中打开的会话|window|<br>|C+b 数字 |直接跳到你按的数字所在的窗口|window|<br>|C+b &| 退出当前窗口|window|<br>|C+b d |临时断开会话 断开以后,还可以连上的哟:)|window|<br>|C+b “ |上下划分|pane|<br>|C+b % |垂直划分|pane|<br>|C+b o |在小窗口中切换|pane|<br>|C+b (方向键)| 在小窗口中切换|pane|<br>|Ctrl+b,不松开Ctrl,方向键 | 调整窗格大小|pane|<br>|C+b !| 关闭所有小窗口|pane|<br>|C+b x |关闭当前光标处的小窗口|pane|<br>|C+b t |钟表 |pane|<br>|C+b , |修改窗口名|pane|</p>
<p>注意: Tmux的快捷键开启都是先按<code>Ctrl</code>+<code>b</code>,放开后再按命令按键.</p>
<h2 id="配置"><a href="#配置" class="headerlink" title="配置"></a>配置</h2><p>说实话, Tmux默认的快捷键操作起来十分不方便. 所以需要重新更改常用快捷键.</p>
<ul>
<li><p>更改启动快捷键前缀<code>C+b</code>为<code>C+a</code></p>
<blockquote>
<p>#remap prefix from ‘C-b’ to ‘C-a’<br>unbind C-b<br>set -g prefix C-a<br>bind-key C-a send-prefix</p>
</blockquote>
</li>
<li><p>如果没有session,自动新建session</p>
<blockquote>
<p>#tmux attach 如果无分离终端则新建<br>new-session</p>
</blockquote>
</li>
<li><p>更改分屏快捷键</p>
<blockquote>
<p># split panes using | and -<br>bind | split-window -h<br>bind - split-window -v<br>unbind ‘ “ ‘<br>unbind % </p>
</blockquote>
</li>
<li><p>不同窗口间移动改成<code>Alt+ 箭头</code> </p>
<blockquote>
<p># switch panes using Alt-arrow without prefix<br>bind -n M-Left select-pane -L<br>bind -n M-Right select-pane -R<br>bind -n M-Up select-pane -U<br>bind -n M-Down select-pane -D </p>
</blockquote>
</li>
<li><p>用<code>C+a</code> + <code>r</code>更新配置, 使得无需重启就令配置及时生效</p>
<blockquote>
<p># reload config file (change file location to your the tmux.conf you want to use)<br>bind r source-file ~/.tmux.conf; display-message “Config reloaded..”</p>
</blockquote>
</li>
<li><p>使用鼠标切换窗口</p>
<blockquote>
<p>set-option -g mouse-select-pane on</p>
</blockquote>
</li>
</ul>
<p>如果每次打开Terminal都要重新为了习惯的布局各种快捷键撸一遍, 显然非常的不优雅, 于是我们有了下面的配置, 或者说脚本.</p>
<ul>
<li><p>新建一个路径, 用来存储与Tmux 相关的各种文件</p>
<blockquote>
<p>mkdir ~/.tmux</p>
</blockquote>
</li>
<li><p>新建一个文件命名为<code>layout1</code>(根据未来project的不同, 可以有很多不同的layout)</p>
<blockquote>
<p>nano ~/.tmux/layout1 </p>
</blockquote>
</li>
<li><p>写入如下内容:</p>
<blockquote>
<p>selectp -t 0 # select the first (0) pane<br>splitw -h -p 50 # split it into two halves </p>
</blockquote>
<blockquote>
<p>selectp -t 1 # select the new, second (1) pane<br>splitw -v -p 50 # split it into two halves<br>selectp -t 0 # go back to the first pane </p>
</blockquote>
</li>
<li><p>在<code>~/.tmux.conf</code>中再添加如下命令</p>
<blockquote>
<p>bind D source-file ~/.tmux/layout1</p>
</blockquote>
</li>
<li><p>用<code>C+a</code> +<code>r</code>更新下配置. </p>
</li>
<li><p><code>C+a</code> + <code>D</code>就会出现配置好的界面.</p>
</li>
</ul>
<h2 id="日常使用"><a href="#日常使用" class="headerlink" title="日常使用"></a>日常使用</h2><ul>
<li>每次打开Terminal之后操作非常简单<ul>
<li>运行口令<code>tmux</code></li>
<li>然后用快捷键<code>C+a</code> + <code>D</code>迅速调出自己配置好的layout.</li>
<li>迅速进入coding状态.</li>
<li>在窗口见切换只需要<code>Alt + Arrow</code></li>
<li>一切操作都可以在各个panes中进行, 属实很方便呐!</li>
</ul>
</li>
</ul>
<h2 id="Debug"><a href="#Debug" class="headerlink" title="Debug"></a>Debug</h2><ul>
<li><p>找不到<code>~/.tmux.conf</code>.(注意,这是个<code>文件</code>不是<code>文件夹</code>)</p>
<ul>
<li><p>安装完Tmux之后, 发现找不到<code>~/.tmux.conf</code>这个文件, 因此没办法进行更进一步的配置.</p>
</li>
<li><p>搜索后才搞清楚, 如果没有这个文件, 就可以自己建一个. 于是用了下面的命令</p>
<pre><code>nano ~/.tmux.conf</code></pre></li>
<li><p>配置好后保存, 退出.然后问题又来了.</p>
</li>
</ul>
</li>
<li><p>配置不生效.</p>
<ul>
<li><p>保存好配置文件后, 重新开启Terminal, 但是配置并没有生效. </p>
</li>
<li><p>Google 关键词<code>~/.tmux.conf affect</code></p>
</li>
<li><p>找到了答案, 尽管关闭了Terminal, 但并没用重启Tmux server. 可以用这个命令<code>tmux kill-server</code> 杀死进程,然后使用如下命令</p>
<pre><code>tmux source ~/.tmux.conf </code></pre></li>
<li><p>Done!</p>
</li>
</ul>
</li>
<li><p>反复试验Tmux很久之后发现自己开了很多session, 意识到原来关闭了Terminal之后并不会关闭Tmux-server.</p>
<ul>
<li><p>于是使用命令<code>tmux kill-server</code> 杀死server.</p>
</li>
<li><p>但是问题来了, 每次重新开启之后并没有新建session.</p>
</li>
<li><p>Google 关键词<code>tmux session</code>后找到了答案.</p>
<ul>
<li><p>在<code>~/.tmux.conf</code>中添加一行代码</p>
<blockquote>
<p>#tmux attach 如果无分离终端则新建<br>new-session</p>
</blockquote>
<ul>
<li>Done!</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="感受"><a href="#感受" class="headerlink" title="感受"></a>感受</h2><ul>
<li>虽然Tmux给的快捷键很多, 一直间也记不过来, 但是只要把常用的几个熟练掌握, 把一些机械的流程配置好, 上手起来会非常快.</li>
<li>因为目前coding经验还不足, 随着未来做更多project, 相信对Tmux的配置也会帮助自己越来越高效!</li>
<li>写了几个教程之后发现, 其实写教程不仅仅是为了给别人看, 更是质问自己是否已经明白了教程中所有的点, 如果有没明白的地方, 就会发现那个地方怎么也写不清楚. 不写是真不知道自己写的有多差… 继续练习! </li>
</ul>
<h2 id="更新"><a href="#更新" class="headerlink" title="更新"></a>更新</h2><p>151107 编辑<br>151110 修改了参考文献.添加了官方文档, 并对参考文献做了适当说明.<br>151112 修改了背景介绍.</p>
<h2 id="References"><a href="#References" class="headerlink" title="References"></a>References</h2><ul>
<li>[1]<a href="http://www.openbsd.org/cgi-bin/man.cgi/OpenBSD-current/man1/tmux.1?query=tmux&sec=1" target="_blank" rel="noopener">官方文档</a></li>
<li>[2]*<a href="http://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/" target="_blank" rel="noopener">http://www.hamvocke.com/blog/a-guide-to-customizing-your-tmux-conf/</a><ul>
<li>很多中文教程都是参考的这篇博文, 其中的解释非常清楚. </li>
</ul>
</li>
<li>[3]*<a href="http://www.cnblogs.com/congbo/archive/2012/08/30/2649420.html" target="_blank" rel="noopener">http://www.cnblogs.com/congbo/archive/2012/08/30/2649420.html</a><ul>
<li>这是一篇中文的指南, 其中对server, sesseion, window, pane解释的非常清楚. </li>
</ul>
</li>
<li><a href="https://gist.github.com/barbour-em/e6fffc31482625cc4e0c" target="_blank" rel="noopener">https://gist.github.com/barbour-em/e6fffc31482625cc4e0c</a><ul>
<li>这篇一个非常完整的配置文件, 但是没有详细的解释, 对于配置有更高要求的同学可以看看.</li>
</ul>
</li>
<li><a href="http://lukaszwrobel.pl/blog/tmux-tutorial-split-terminal-windows-easily" target="_blank" rel="noopener">http://lukaszwrobel.pl/blog/tmux-tutorial-split-terminal-windows-easily</a><ul>
<li>很多教程也参考了这篇文章的内容. </li>
</ul>
</li>
<li><a href="http://blog.chinaunix.net/uid-26285146-id-3252286.html" target="_blank" rel="noopener">http://blog.chinaunix.net/uid-26285146-id-3252286.html</a></li>
<li><a href="http://os.51cto.com/art/201410/453671.htm" target="_blank" rel="noopener">http://os.51cto.com/art/201410/453671.htm</a></li>
<li><a href="http://blog.jobbole.com/87584/" target="_blank" rel="noopener">http://blog.jobbole.com/87584/</a><ul>
<li>这篇又有些新的东西值得日后挖掘. </li>
</ul>
</li>
<li><a href="http://blog.csdn.net/jianbinhe1012/article/details/7741727" target="_blank" rel="noopener">http://blog.csdn.net/jianbinhe1012/article/details/7741727</a></li>
<li><a href="http://media.pragprog.com/titles/bhtmux/code/config/tmux.conf" target="_blank" rel="noopener">http://media.pragprog.com/titles/bhtmux/code/config/tmux.conf</a></li>
<li><a href="http://unix.stackexchange.com/questions/66606/tmux-not-sourcing-my-tmux-conf" target="_blank" rel="noopener">http://unix.stackexchange.com/questions/66606/tmux-not-sourcing-my-tmux-conf</a><ul>
<li>配置无法生效的时候参考了这篇的解决办法. </li>
</ul>
</li>
</ul>
</div><hr></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span></div></nav></div></div><footer><div class="layout" id="footer"><div class="copyright">©2015 - 2020 By xpgeng</div><div class="framework-info"><span>Driven - </span><a href="http://hexo.io" target="_blank" rel="noopener"><span>Hexo</span></a><span class="footer-separator">|</span><span>Theme - </span><a href="https://github.com/Molunerfinn/hexo-theme-melody" target="_blank" rel="noopener"><span>Melody</span></a></div><div class="busuanzi"><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><span id="busuanzi_container_site_uv"><i class="fa fa-user"></i><span id="busuanzi_value_site_uv"></span><span></span></span><span class="footer-separator">|</span><span id="busuanzi_container_site_pv"><i class="fa fa-eye"></i><span id="busuanzi_value_site_pv"></span><span></span></span></div></div></footer><i class="fa fa-arrow-up" id="go-up" aria-hidden="true"></i><script src="https://cdn.jsdelivr.net/npm/animejs@latest/anime.min.js"></script><script src="https://cdn.jsdelivr.net/npm/jquery@latest/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@latest/dist/jquery.fancybox.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-animate@latest/velocity.min.js"></script><script src="https://cdn.jsdelivr.net/npm/velocity-ui-pack@latest/velocity.ui.min.js"></script><script src="/js/utils.js?version=1.7.0"></script><script src="/js/fancybox.js?version=1.7.0"></script><script src="/js/sidebar.js?version=1.7.0"></script><script src="/js/copy.js?version=1.7.0"></script><script src="/js/fireworks.js?version=1.7.0"></script><script src="/js/transition.js?version=1.7.0"></script><script src="/js/scroll.js?version=1.7.0"></script><script src="/js/head.js?version=1.7.0"></script><script>if(/Android|webOS|iPhone|iPod|iPad|BlackBerry/i.test(navigator.userAgent)) {
$('#nav').addClass('is-mobile')
$('footer').addClass('is-mobile')
$('#top-container').addClass('is-mobile')
}</script></body></html>