-
Notifications
You must be signed in to change notification settings - Fork 1
/
notmuch.html
600 lines (522 loc) · 23.4 KB
/
notmuch.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
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
<!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>emacs+notmuchでメールを読み書きする — Daydreaming in Greater Boston</title>
<meta name="author" content="Kyos">
<!-- 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 href="/favicon.png" rel="icon">
<link href="/theme/css/main.css" media="screen, projection"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
</head>
<body>
<header role="banner"><hgroup>
<h1><a href="/">Daydreaming in Greater Boston</a></h1>
</hgroup></header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
</ul>
<ul class="main-navigation">
<li><a href="/pages/about.html">About Me</a></li>
<li >
<a href="/category/blog.html">Blog</a>
</li>
<li >
<a href="/category/english.html">English</a>
</li>
<li >
<a href="/category/linux.html">Linux</a>
</li>
<li >
<a href="/category/python.html">Python</a>
</li>
<li class="active">
<a href="/category/tech.html">Tech</a>
</li>
</ul></nav>
<div id="main">
<div id="content">
<div>
<article class="hentry" role="article">
<header>
<h1 class="entry-title">emacs+notmuchでメールを読み書きする</h1>
<p class="meta">
<time datetime="2022-06-02T00:00:00-04:00" pubdate>Thu 02 June 2022</time> </p>
</header>
<div class="entry-content"><div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#orgc89e493">1. はじめに</a></li>
<li><a href="#org0f91f3c">2. インストール、設定</a>
<ul>
<li><a href="#org268cc64">2.1. 構成</a></li>
<li><a href="#org4a80c00">2.2. mbsync</a></li>
<li><a href="#org25ee514">2.3. notmuch</a></li>
<li><a href="#orgce6c9ac">2.4. afew</a></li>
<li><a href="#org3299811">2.5. smtp</a></li>
<li><a href="#org49f7f8a">2.6. Macからリモートのメールボックスを使う</a></li>
</ul>
</li>
<li><a href="#org665ffae">3. 終わりに</a></li>
</ul>
</div>
</div>
<div id="outline-container-orgc89e493" class="outline-2">
<h2 id="orgc89e493"><span class="section-number-2">1</span> はじめに</h2>
<div class="outline-text-2" id="text-1">
<p>
私はメーラーとしてgmailを使っていますが、gmailのUIにどうしても馴染めません。そこで、emacsでemailを読み書きできるようにしてみました。
</p>
<p>
メーラーは一番人気のmu4e、、、ではなく、次点の <a href="https://notmuchmail.org/">notmuch</a> を選びました。notmuchがtramp-modeに対応していて、リモートのメールボックスにアクセスできることが決め手でした。notmuchの日本語情報は意外と少ないようなので、参考になれば幸いです。
</p>
</div>
</div>
<div id="outline-container-org0f91f3c" class="outline-2">
<h2 id="org0f91f3c"><span class="section-number-2">2</span> インストール、設定</h2>
<div class="outline-text-2" id="text-2">
<p>
notmuchはそれだけではメールの読み書きができるようになりません。その他に以下のツールを使用します。
</p>
<ul class="org-ul">
<li><a href="https://isync.sourceforge.io/">isync/mbsync</a> - isyncがパッケージ名でmbsyncはコマンド名です。クラウドにあるgmailのデータをimap経由でローカルディレクトリに同期します</li>
<li><a href="https://github.com/afewmail/afew">afew</a> - メール取り込み時に、ルールに従って自動でタグを付けるヘルパーツールです。今回はインストールだけしました。おいおい拡充していくつもりです</li>
<li>smtp - メール送信はemacs標準のsmtpライブラリを使います。</li>
</ul>
</div>
<div id="outline-container-org268cc64" class="outline-3">
<h3 id="org268cc64"><span class="section-number-3">2.1</span> 構成</h3>
<div class="outline-text-3" id="text-2-1">
<p>
Macのemacs上でメールを読み書きすることが目的ですが、メールボックスをプレーンテキストでMac上にじか置きしたくないので、VirtualBoxのFedora 36 VMにメールを取り込み、そこにtrampを使ってリモートアクセスします。このため、まずはFedora上に一式環境を作り、その後Macのemacs設定をします。
</p>
<p>
trampを使ってリモートのメールボックスにアクセスすることは、複数のメールクライアント(eg, emacs+notmuch)から共通のメールボックスにアクセスしたい、というユースケースがありそうですね。
</p>
</div>
</div>
<div id="outline-container-org4a80c00" class="outline-3">
<h3 id="org4a80c00"><span class="section-number-3">2.2</span> mbsync</h3>
<div class="outline-text-3" id="text-2-2">
<p>
パッケージマネージャーを使ってisyncをインストールします。
</p>
<div class="org-src-container">
<pre class="src src-bash">sudo dnf install isync
</pre>
</div>
</div>
<ol class="org-ol">
<li><a id="orgba8ba87"></a><span class="timestamp-wrapper"><span class="timestamp"><2023-06-29 Thu></span></span>追記<br />
<div class="outline-text-5" id="text-2-2-0-1">
<p>
AlmaLinux 9ではdnf installできませんでした。ので、公式のソースから入れます。
</p>
<ul class="org-ul">
<li><a href="https://isync.sourceforge.io/">https://isync.sourceforge.io/</a> > Download > Releasesから最新版をダウンロード</li>
<li>解凍</li>
</ul>
<pre class="example">
tar xzf isync-1.4.4.tar.gz
</pre>
<ul class="org-ul">
<li>INSTALLファイルを見てインストール</li>
</ul>
<pre class="example">
./configure
make
sudo make install
</pre>
<p>
なお、後から気がついたのですが、epelには isync がおいてありました。最初にepelの設定をしておけばよかったです。。。
</p>
<p>
今回は使いませんが、macの場合は以下です。
</p>
<pre class="example">
brew install isync
</pre>
<p>
次に、googleのimapサーバーが信頼できることを証明するgmail certificateが必要になるので、取得してファイルにセーブします。このファイルは、後でmbsyncのconfigファイルで指定します。
<a href="https://apple.stackexchange.com/questions/256898/ssl-error-with-mbsync">https://apple.stackexchange.com/questions/256898/ssl-error-with-mbsync</a>
</p>
<div class="org-src-container">
<pre class="src src-bash">openssl s_client -connect imap.gmail.com:993 -showcerts 2>&1 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | head -n 27 > gmail.crt
sudo mv gmail.crt /etc/ssl/certs/
</pre>
</div>
<p>
上記は、 <code>imap.gmail.com:993</code> がアドバタイズしているcertから、サーバーcertのみを切り出しています。追記: Macから実行したときは <code>head -n 31</code> でした。どうして???
</p>
<p>
そして、googleのappパスワード(16文字)を <a href="https://support.google.com/mail/answer/185833?hl=en-GB">このリンク</a> を参考に生成、値を控えておきます。googleのimapサーバーにアクセスするためには、普段使っているgoogleパスワードは使えないので。
</p>
<p>
最後に、mbsyncのconfigファイル <code>~/.mbsyncrc</code> を作成します。これなしではmbsyncは動きません。configファイルを理解するためには、 <code>man mbsync</code> に一通り目を通しておくことをおすすめします。
</p>
<pre class="example">
# 参考: https://troglobit.com/post/2021-01-13-my-email-setup/
# Name Account
IMAPAccount gmail
Host imap.gmail.com
User <your_gmail>@gmail.com
Pass "<16文字のappパスワード>"
SSLType IMAPS
SSLVersion TLSv1.2
# AuthMechs PLAIN # エラーが出るようになったのでコメントアウトします(6/29/2023)
CertificateFile /etc/ssl/certs/gmail.crt
#PipelineDepth 1 # デバッグ時にコメントアウトします
IMAPStore gmail-remote
Account gmail
MaildirStore gmail-local
SubFolders Verbatim
# The trailing "/" is important
Path ~/mail/gmail/
Inbox ~/mail/gmail/Inbox
Channel sync-gmail-default
Far :gmail-remote:
Near :gmail-local:
# Select some mailboxes to sync
Patterns "INBOX"
Channel sync-gmail-sent
Far :gmail-remote:"[Gmail]/Sent Mail"
Near :gmail-local:sent
Create Near
SyncState *
MaxMessages 1000
ExpireUnread yes
Channel sync-gmail-trash
Far :gmail-remote:"[Gmail]/Trash"
Near :gmail-local:trash
Create Near
SyncState *
# Get all the channels together into a group.
Group gmail
Channel sync-gmail-default
Channel sync-gmail-sent
Channel sync-gmail-trash
</pre>
<p>
早速、実行してみます。
</p>
<pre class="example">
mbsync -a
</pre>
<p>
しばらく動いた後で、下記のエラーで止まってしまいました。
</p>
<pre class="example">
IMAP error: unexpected BYE response: Invalid character in literal
Socket error: secure read from imap.gmail.com (172.253.62.109:993): error:0A000126:SSL routines::unexpected eof while reading
</pre>
<p>
最初のエラーは、正しくフォーマットされていないメールがある、というもの。
</p>
<pre class="example">
PipelineDepth 1
</pre>
<p>
の行をコメントアウトして多重度を1にし、デバッグしやすくします。
</p>
<p>
デバッグモードで再度mbsync実行します。
</p>
<pre class="example">
mbsync -a -V -DCmMNs &> mbsync_log.txt
</pre>
<p>
エラーの元となったメールがヘッダー共に表示されたので、メッセージIDでgmailを検索します。
</p>
<pre class="example">
rfc822msgid:<メッセージID>
</pre>
<p>
2015年(!)の某テニススクールからのメールでした。ここのスクールは、私宛リマインダーメールのfrom行を私のメールアドレスに設定したり、よくgmailから怪しいメール認定されているところです(迷惑)。確かに、ここならあり得る。。。
</p>
<p>
当該メールを完全に削除して、 <code>mbsync -a</code> を再度実行してもエラーは消えません。おかしいな。。。
さんざんネットを検索、トラブルシュートしたところ、既に取り込み済みの同メールがひっかかっていることに気が付きました。一通りローカルのメールフォルダを空にして <code>mbsync -a</code> で全取り込み。やっと最初のエラーがでなくなりました。
</p>
<p>
unexpected eofのソケットエラーは相変わらず出ていますが、全て取り込み終わり、ログアウトしてから出ているようなので、無視しても良さそうです。とりあえず放置します。これで、gmailのメールをFedora VMに持ってくることができるようになりました。
</p>
<p>
なお、ここでは比較的さらっと問題解決したように書きましたが、実際には2週間ほどはまり、ギブアップ直前まで行きました。やみくもにエラーメッセージを検索するだけでは限界がありますね。。。
</p>
<p>
参考
</p>
<ul class="org-ul">
<li><a href="https://emacs.stackexchange.com/questions/74386/mbsync-and-mu4e-problems">https://emacs.stackexchange.com/questions/74386/mbsync-and-mu4e-problems</a></li>
</ul>
</div>
</li>
</ol>
</div>
<div id="outline-container-org25ee514" class="outline-3">
<h3 id="org25ee514"><span class="section-number-3">2.3</span> notmuch</h3>
<div class="outline-text-3" id="text-2-3">
<p>
mbsyncでメールのデータを取り込んだので、notmuchでそれらのデータベースを作ってアクセス可能にします。
</p>
<p>
Fedora上でインストールと初期化します。
</p>
<div class="org-src-container">
<pre class="src src-bash">sudo dnf install notmuch
notmuch setup # 名前やメールアドレスの情報を聞かれます
notmuch new
</pre>
</div>
<p>
emacsの設定をします。 <code>~/.emacs.d/init.el</code> に以下を追記します。
</p>
<div class="org-src-container">
<pre class="src src-elisp">;; ====== email ============================================
(use-package notmuch
:commands notmuch-hello
:bind (("C-c m" . notmuch-hello)))
</pre>
</div>
<p>
<del>いつものように、</del> use-packageがうまくnotmuchパッケージをダウンロードしてくれず、 <code>M-x list-packages</code> から手動で <code>notmuch</code> をインストールしました。
</p>
<p>
emacs上で <code>M-x notmuch</code> とするとメールが読めるようになりました。ものすごく原始的な感じです。。
</p>
</div>
</div>
<div id="outline-container-orgce6c9ac" class="outline-3">
<h3 id="orgce6c9ac"><span class="section-number-3">2.4</span> afew</h3>
<div class="outline-text-3" id="text-2-4">
<p>
自動タグ付けツールです。とりあえずインストールだけします。
</p>
<div class="org-src-container">
<pre class="src src-bash">sudo dnf install python-notmuch
cd ~/py
python -m venv --system-site-packages .venv
source .venv/bin/activate
pip install afew
</pre>
</div>
</div>
</div>
<div id="outline-container-org3299811" class="outline-3">
<h3 id="org3299811"><span class="section-number-3">2.5</span> smtp</h3>
<div class="outline-text-3" id="text-2-5">
<p>
ここまででメールは読めるようになりましたが、メールを出すにはsmtpの設定が必要です。
<code>~/.emacs.d/init.el</code> に追記します。
</p>
<div class="org-src-container">
<pre class="src src-elisp">(setq user-full-name "<your fullname>")
(setq user-mail-address "<yourgmail>@gmail.com")
(setq message-directory "~/mail"
notmuch-fcc-dirs nil
read-mail-command (quote notmuch)
message-citation-line-format "On %a, %b %d, %Y at %R, %f wrote:"
message-citation-line-function 'message-insert-formatted-citation-line
)
(setq message-send-mail-function 'smtpmail-send-it
smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-auth-credentials '(("smtp.gmail.com" 587 "<yourgmail>@gmail.com" nil))
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
starttls-use-gnutls t
)
</pre>
</div>
<p>
いよいよメールを送るテストをします。emacs から <code>M-x notmuch</code> > <code>m</code> (send email)としてメールを書き、 <code>C-c C-c</code> で送ります。すると、imap.gmail.comの認証のために以下を聞かれるので入力します。
</p>
<pre class="example">
username: <full gmail address>
password: <app password>
Save auth info to file ~/.authinfo? y
</pre>
<p>
app passwordはgoogleが用意している仕組みで、純正gmailクライアント以外からgoogleのSMTPサーバーを使う際に使う、16文字の特別なパスワードです。これはgoogleのアカウントページ上で作成します。 <code>https://myaccount.google.com/</code> > Security > Signing in to Google > App passwords。
</p>
<p>
上記パスワードには、通常のgoogleアカウントパスワードでなく、このappパスワードを使わないと <code>535 5.7.8</code> エラーが出ます。<a href="https://stackoverflow.com/questions/62302054/smtp-error-535-5-7-8-username-and-password-not-accepted-for-gmail-in-go">参考</a>
</p>
<pre class="example">
Sending failed: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com...<snip>
</pre>
<p>
無事にFedora VM上のemacsでメールが送付できました。
</p>
</div>
</div>
<div id="outline-container-org49f7f8a" class="outline-3">
<h3 id="org49f7f8a"><span class="section-number-3">2.6</span> Macからリモートのメールボックスを使う</h3>
<div class="outline-text-3" id="text-2-6">
<p>
やっと、本来やりたかったMac上の設定に入ります。リモート(と言ってもMacホスト上で動くVMですが)のメールボックスをtrampを使ってアクセスします。基本は: <a href="https://notmuchmail.org/remoteusage/">Using notmuch remotely</a> に従って設定します。人気のmu4eでなくnotmuchを選んだのは、最初からこれを使うつもりだったからです。mu4eはtrampと相性が悪い(動かない)という書き込みを目にしていたので。。。
</p>
<p>
Mac(client)にnotmuchインストールします。
</p>
<pre class="example">
brew install notmuch
</pre>
<p>
Mac上でssh設定します。 <code>~/.ssh/config</code> に以下を追記:
</p>
<pre class="example">
Host notmuch
HostName 127.0.0.1
Port 2223
User <remote_username>
ControlMaster auto
ControlPath ~/.ssh/master-%h@%p:%r
ControlPersist 15m
</pre>
<p>
注意: Fedora VMは、localhost (127.0.0.1)のポート 2223にマップしてあります。
</p>
<p>
ここで、いったんMacからリモートにパスワードなしでsshできるか確認しておいてください。
</p>
<p>
Mac上で <code>~/bin</code> ディレクトリが無ければ作って、そこに <code>remote-notmuch.sh</code> として以下をセーブし、実行可能に(<code>chmod +x</code>)します。
</p>
<div class="org-src-container">
<pre class="src src-bash">#!/bin/bash
printf -v ARGS "%q " "$@"
exec ssh notmuch notmuch ${ARGS}
</pre>
</div>
<p>
<code>~/.emacs.d/init.el</code> 追記:
</p>
<div class="org-src-container">
<pre class="src src-elisp">(use-package notmuch
:commands notmuch-hello
:bind (("C-c m" . notmuch-hello)))
(setq notmuch-command "~/bin/remote-notmuch.sh")
(setq message-send-mail-function 'smtpmail-send-it
smtpmail-starttls-credentials '(("smtp.gmail.com" 587 nil nil))
smtpmail-auth-credentials '(("smtp.gmail.com" 587 "<yourgmail>@gmail.com" nil))
smtpmail-default-smtp-server "smtp.gmail.com"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
starttls-use-gnutls t
)
</pre>
</div>
<p>
4行目でnotmuch-commandに上で作成したbashスクリプトを指定している以外はそのままFedora emacsのinit.elからコピペしています。
</p>
<p>
それでは、試してみます。Macのemacsから <code>M-x notmuch</code> で、何の問題もなくFedora上に取り込んであるメールが見られました。さすが trampさん、すごいです! メールを閲覧している時に <code>r</code> で返信できます。返事を書いて <code>C-c C-c</code> で送信すると、これもうまくいってしまいました。
</p>
</div>
<ol class="org-ol">
<li><a id="org3ee290b"></a><span class="timestamp-wrapper"><span class="timestamp"><2022-09-15 Thu></span></span>追記<br />
<div class="outline-text-5" id="text-2-6-0-1">
<p>
notmuch setupしていないんじゃない? のようなエラーがでてM-x notmuchに失敗した場合は、リモートにパスワードなしで問題なくsshできるか確認してみてください。これが原因で長いことはまりましたが、おそらく初回ssh接続時にknown_hostsに登録するための確認プロンプトが出ると失敗するようです。
</p>
</div>
</li>
</ol>
</div>
</div>
<div id="outline-container-org665ffae" class="outline-2">
<h2 id="org665ffae"><span class="section-number-2">3</span> 終わりに</h2>
<div class="outline-text-2" id="text-3">
<p>
今回は、Mac上のemacs+notmuch から、Linux VM上に同期したgmailのメールを読み書きする構成を試してみました。タグ付けなどまだ使いこなしていませんが、曲りなりにemacsでメールの読み書きができるようになって満足しています。
</p>
</div>
</div>
</div>
<footer>
<p class="meta">
<span class="byline author vcard">
Posted by <span class="fn">
きょうす
</span>
</span>
<time datetime="2022-06-02T00:00:00-04:00" pubdate>Thu 02 June 2022</time> <span class="categories">
<a class='category' href='/category/tech.html'>Tech</a>
</span>
<span class="categories">
<a class="category" href="/tag/emacs.html">emacs</a>, <a class="category" href="/tag/tech.html">Tech</a> </span>
</p><div class="sharing">
</div> </footer>
</article>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/tello.html">アメリカ格安SIMをSpeedtalkからTelloに変えました</a>
</li>
<li class="post">
<a href="/improve_eng2.html">上級者向け英語学習法(実践編)</a>
</li>
<li class="post">
<a href="/improve_eng1.html">上級者向け英語学習法(考察編)</a>
</li>
<li class="post">
<a href="/vocabulary.html">オススメのボキャビル方法</a>
</li>
<li class="post">
<a href="/emacs_build.html">Rokcy LinuxとM1 MacBook上でemacsをソースからビルドしてみる</a>
</li>
</ul>
</section>
<section>
<h1>Categories</h1>
<ul id="recent_posts">
<li><a href="/category/blog.html">Blog</a></li>
<li><a href="/category/english.html">English</a></li>
<li><a href="/category/linux.html">Linux</a></li>
<li><a href="/category/python.html">Python</a></li>
<li><a href="/category/tech.html">Tech</a></li>
</ul>
</section>
<section>
<h1>Tags</h1>
<a href="/tag/blog.html">Blog</a>, <a href="/tag/amerikasheng-huo.html">アメリカ生活</a>, <a href="/tag/tech.html">Tech</a>, <a href="/tag/ying-yu.html">英語</a>, <a href="/tag/emacs.html">emacs</a>, <a href="/tag/sekiyuritei.html">セキュリティ</a>, <a href="/tag/investment.html">Investment</a>, <a href="/tag/python.html">Python</a>, <a href="/tag/english.html">English</a>, <a href="/tag/linux.html">Linux</a>, <a href="/tag/mac.html">Mac</a>, <a href="/tag/toraburu.html">トラブル</a>, <a href="/tag/game.html">game</a>, <a href="/tag/vacation.html">Vacation</a>, <a href="/tag/ying-yu-jiao-yu.html">英語教育</a>, <a href="/tag/ying-jian.html">英検</a> </section>
<section>
<h1>Social</h1>
<ul>
<li><a href="#" target="_blank">You can add links in your config file</a></li>
<li><a href="#" target="_blank">Another social link</a></li>
</ul>
</section>
<section>
<h1>Blogroll</h1>
<ul>
<li><a href="https://getpelican.com/" target="_blank">Pelican</a></li>
<li><a href="https://www.python.org/" target="_blank">Python.org</a></li>
<li><a href="https://palletsprojects.com/p/jinja/" target="_blank">Jinja2</a></li>
<li><a href="#" target="_blank">You can modify those links in your config file</a></li>
</ul>
</section>
</aside> </div>
</div>
<footer role="contentinfo"><p>
Copyright © 2020–2024 Kyos —
<span class="credit">Powered by <a href="http://getpelican.com">Pelican</a></span>
</p></footer>
<script src="/theme/js/modernizr-2.0.js"></script>
<script src="/theme/js/ender.js"></script>
<script src="/theme/js/octopress.js" type="text/javascript"></script>
</body>
</html>