【Emacs】ido-mode 導入メモ

ido-mode を使い始めたので、導入・操作メモを残していく。
ファイルオープン、バッファ移動の補完周りがめちゃめちゃ快適になった(もっと早く入れておけばよかった)…

導入

Emacs 標準に入っているため M-x ido-modeido-mode が開始される。
起動時に ido-mode が有効になるように InitFile に書いておく。

(ido-mode t)

これで終わり … だが、補完を見やすくするために ido-vertical-mode を入れておく。

  1. M-x package-install ido-vertical-mode を実行
  2. InitFile に下記追記

    (require 'ido-vertical-mode)
    (ido-vertical-mode 1)
    (setq ido-vertical-define-keys 'C-n-and-C-p-only)
    

(入れてない人向け) MELPA-stableを追加

今回 ido-vertical-mode を入れるために パッケージ管理にMELPA-stableを追加した。

  1. 下記を InitFileに書く。

    (add-to-list 'package-archives
           '("melpa-stable" . "https://stable.melpa.org/packages/") t)
    
  2. emacs の再起動後、 M-x package-list-packages を実行。

使い方

バッファ移動

▼ バッファ移動 C-x b の実行結果

そのまま Enter で"→" の部分のバッファに移動する。
C-n , C-p (上下矢印キー) で候補の移動。

▼文字入力後 Enter でマッチ(部分一致) するバッファに移動。

ファイル検索

▼ ファイル検索 C-x C-f の実行結果

そのまま Enter で"→" の部分のファイルオープン もしくはディレクトリ移動。
C-n , C-p (上下矢印キー) で候補の移動。

▼文字入力後 Enter でマッチ(部分一致) するファイルのオープン もしくはディレクトリの移動。

Python からFitbit のデータを取得する

Table of Contents

  1. はじめに
  2. 準備
    1. client_id, client_secret の取得
    2. refresh_token, access_token の取得
  3. データの取得

はじめに

主にランニング記録用に、去年の9月にFitbit charge2 (official)を購入した。

いわゆる活動量計・スマートウォッチで、歩数や心拍数、ランニングなどの記録を取ってくれる。 スマホと連動して、GPSで取得したランニングコースなども見ることができる。 各記録はスマホアプリ、Webブラウザからも確認可能。

(おすすめのバンドは こちら(Amazon) 。取り外しがとても楽。)


このFitbit、開発者向けの環境が充実している。 Fitbit API が公開されていて、最新機種のFitbit ionic では、専用のSDKまで用意されている。

Fitbit studio

今回は以下の python-fitbit を使って、これまで記録した歩数や心拍数を取得してみる。

環境

  • OS : Windows10
  • Python : 3.6.4

準備

準備の流れは以下の通り。 解説している記事は結構あるので詳細は割愛します。

  1. Fitbitのページで、 client_id, client_secret を発行する。
  2. fitbit-python を用いて refresh_token, access_token を取得する。

client_id, client_secret の取得

画面参考: Connect yout app to Fitbit

Fitbit にログインした状態で、下記にアクセスする。

https://dev.fitbit.com/apps/new

Register an application フォームに記入する。下記パラメータ以外は適当でOK。

  • OAuth 2.0 Application Type: Personal
  • Callback URL: ttp://127.0.0.1:8080/
  • Default Access Type: Read-Only

出てきたOAuth2.0 Client IDと Client Secret をメモする。

refresh_token, access_token の取得

事前にpython-fitbit をDLしておく。

Requirements を参考に以下を実行。

  1. pip install python-dateutil
  2. pip install requests-oauthlib
  3. python-fitbit-masterディレクトリ下で pip install -r .\requirements\base.txt

gather_keys_oauth2.py の実行に必要なパッケージをインストール。

  1. pip install fitbit
  2. pip install cherrypy

gather_keys_oauth2.py を実行する。

  • python gather_keys_oauth2.py [client_id] [client_secret]

出てきた access_token, refresh_token をメモする。

データの取得

今回は 1日の活動の概要を取得する activities メソッドを使用する。

import fitbit
import datetime

# CLIENT_ID, CLIENT_SECRET
CLIENT_ID = "xxx"
CLIENT_SECRET = "xxx"

# ACCESS TOKEN, REFRESH TOKEN
ACCESS_TOKEN = "xxx"
REFRESH_TOKEN = "xxx"

# get activities summary in 2017/11/20
client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN)
date = datetime.datetime.strptime("2017-11-20", "%Y-%m-%d")
print(client.activities(date=date))

cleient.activities(date=date) の返り値は下記のようなmap オブジェクト。 ちなみに、データ取得のためのリクエストには制限がある(1時間に150)。

{'activities': [],
 'goals': {'activeMinutes': 30,
           'caloriesOut': 2542,
           'distance': 5,
           'floors': 10,
           'steps': 10000},
 'summary': {'activeScore': -1,
             'activityCalories': 974,
             'caloriesBMR': 1467,
             'caloriesOut': 2353,
             'distances': [{'activity': 'total', 'distance': 6.51},
                           {'activity': 'tracker', 'distance': 6.51},
                           {'activity': 'loggedActivities', 'distance': 0},
                           {'activity': 'veryActive', 'distance': 4.38},
                           {'activity': 'moderatelyActive', 'distance': 0.3},
                           {'activity': 'lightlyActive', 'distance': 1.82},
                           {'activity': 'sedentaryActive', 'distance': 0}],
             'elevation': 270,
             'fairlyActiveMinutes': 8,
             'floors': 27,
             'heartRateZones': [{'caloriesOut': 857.86064, 'max': 98, 'min': 30, 'minutes': 602, 'name': '範囲外'},
                                {'caloriesOut': 349.27984, 'max': 137, 'min': 98, 'minutes': 64, 'name': '脂肪燃焼'},
                                {'caloriesOut': 332.46304, 'max': 166, 'min': 137, 'minutes': 34, 'name': '有酸素運動'},
                                {'caloriesOut': 62.57888, 'max': 220, 'min': 166, 'minutes': 6, 'name': 'ピーク'}],
             'lightlyActiveMinutes': 101,
             'marginalCalories': 684,
             'restingHeartRate': 67,
             'sedentaryMinutes': 1271,
             'steps': 13862,
             'veryActiveMinutes': 60
 }
}

これを数カ月分とって、 summary > restingHeartRate (安静時心拍数) のグラフをプロットしてみる。

冬は心拍数が高くなるらしい。よかった。

org-mode → Markdown → はてなブログ投稿の実験 まとめ

Table of Contents

  1. Org 8.x のMarkdown がうまくいかない
  2. Org 9.x に上げると殆ど解決した
  3. 残った問題
    1. ソースコードが適用されていない (+ハイライトしたい)
    2. 痒いところに手が届かないところは直Markdownで

Org 8.x のMarkdown がうまくいかない

M-x org-md-export-as-markdown (C-c e m M) でOrg 文章をMarkdown形式に変換できる。 はてなブログMarkdown 記法に対応しているので、これをそのまま貼り付けるだけで記事が投稿できる。

下は Org 8.x でその出力テストを行ったもの。

スケジュールやTODOリストなど、後半部分は記事の構成要素にならなさそうなので、言及しない。 他、記事を書くにあたって問題になりそうな不備を洗い出してみた。

  • (おそらく)空白行を挟まずにリストを作成すると、それをリストと認識しない
  • 表の体裁が崩れている (列グループ化が適用されていない)
  • 内部リンクが機能していない
  • 脚注のリンクが機能していない

Org 9.x に上げると殆ど解決した

どうしてこうなるのか・・・を考える前に Org-mode のバージョンを上げたら大体は解決しました。

ぱっと見たところ不備は残りこれくらい。

  • 表の列グループ化が適用されていない → 使う機会が少なそうなので、今回はスルー
  • new! ソースコードが適用されていない

残った問題

ソースコードが適用されていない (+ハイライトしたい)

リファレンスのタグ付けの部分が悪さをしていたらしい。 以下は正常に出力された。

' #+BEGIN_SRC emacs-lisp -n
' (save-excursion
'    (goto-char (point-min)))
' #+END_SRC

↑org ↓出力

1  (save-excursion
2     (goto-char (point-min)))

欲を言えばシンタックスハイライトしたい。 そこで、コードの部分をMarkdown記法で埋め込む方法をとってみる。

' #+BEGIN_EXPORT html
' ```python
' def hello():
'     str = "Hello World"
'     print(str)
' 
' # Hello!
' hello()
' ```
' #+END_EXPORT

↑org ↓出力

def hello():
    str = "Hello World"
    print(str)

# Hello!
hello()

#+BEGIN_EXPORT html ... #+END_EXPORT で囲まれた部分はMarkdownエクスポートの際、 そのまま出力される。このブロックはOrg-mode のEasy Template機能で <h [TAB] で呼び出せる。

```python ... ```Markdown記法。ソースコードの言語名を指定することで、はてなブログが 対応している言語はシンタックスハイライトしてくれる。

痒いところに手が届かないところは直Markdown

画像やURLリンク(埋め込み形式)も Markdown直打ちで対応したほうが見栄えの調節が便利だったりする。

' #+BEGIN_EXPORT html
' <img src="https://orgmode.org/img/main.jpg" width=200>
'  
' [https://www.google.co.jp/:embed]
' #+END_EXPORT

↑org ↓出力

org-mode からMarkdownにエクスポート、そのままはてなブログに (Org 9.1.6)

Table of Contents

  1. はじめに
  2. 見出し (これは見出し1)
    1. 見出し2
      1. 見出し3
  3. リスト
  4. 文字の装飾、水平線
  5. 特殊文字、上付き文字、下付き文字
  6. 段落、改行、引用
  7. 例示、ソースコード
  8. 表 (列グループ化)
  9. 画像
  10. ハイパーリンク
  11. 内部リンク
  12. 脚注
  13. 日付と時刻
  14. スケジュール、締め切り
    1. タスクA
  15. ドロワー
  16. タグ
    1. Meeting with the French group:work:
      1. Summary by Frank:boss:notes:
  17. リスト
    1. タスク1
    2. タスク2
  18. リスト(優先順位)
    1. タスク1(優先度:高)
    2. タスク2
    3. タスク3(優先度:低)
  19. リスト (タスクの進捗率表示)
    1. Organize Party [33%]
      1. Call people [1/2]
      2. Buy food
      3. Talk to neighbor
  20. リスト (チェックボックス)
    1. Organize party [2/4]

はじめに

ほぼ自分用に Emacs Org文書を org-md-export-to-markdownMarkdown化したものを 、そのままはてなブログに載せた。

一部文章を https://orgmode.org/manual/ から引用させていただいた。

orgの EXAMPLE ブロックの問題で、org側コードは全て行頭に 「'」 を加えている。 ( EXAMPLE ブロック問題の部分についての、 るびきちさんの記事 http://emacs.rubikitch.com/org-src/)

  • Org version: 9.1.6
  • 最終投稿日時: 2018/02/11

見出し (これは見出し1)

' ** 見出し2
' これは見出し2
' *** 見出し3
' これは見出し3
' **** 見出し4
' これは見出し4
' **** 見出し5
' これは見出し5

見出し2

これは見出し2

見出し3

これは見出し3

  1. 見出し4

    これは見出し4

    1. 見出し5

      これは見出し5

リスト

'    My favorite scenes are (in this order)
'    1. The attack of the Rohirrim
'    2. Eowyn's fight with the witch king
'       + this was already my favorite scene in the book
'       + I really like Miranda Otto.
'    3. Peter Jackson being shot by Legolas
'       - on DVD only
'       He makes a really funny face when it happens.
'    But in the end, no individual scenes matter but the film as a whole.
'    Important actors in this film are:
'    - Elijah Wood :: He plays Frodo
'    - Sean Astin :: He plays Sam, Frodo's friend.  I still remember
'      him very well from his role as Mikey Walsh in The Goonies.

My favorite scenes are (in this order)

  1. The attack of the Rohirrim
  2. Eowyn's fight with the witch king
    • this was already my favorite scene in the book
    • I really like Miranda Otto.
  3. Peter Jackson being shot by Legolas

    • on DVD only

    He makes a really funny face when it happens.

But in the end, no individual scenes matter but the film as a whole. Important actors in this film are:

  • Elijah Wood: He plays Frodo
  • Sean Astin: He plays Sam, Frodo's friend. I still remember him very well from his role as Mikey Walsh in The Goonies.
続きを読む

org-mode からMarkdownにエクスポート、そのままはてなブログに (Org 8.2.10)

はじめに

ほぼ自分用に Emacs Org文書を org-md-export-to-markdownMarkdown化したものを 、そのままはてなブログに載せた。

一部文章を https://orgmode.org/manual/ から引用させていただいた。

orgの EXAMPLE ブロックの問題で、org側コードは全て行頭に 「'」 を加えている。 ( EXAMPLE ブロック問題の部分についての、 るびきちさんの記事 http://emacs.rubikitch.com/org-src/)

  • Org version: 8.2.10
  • 最終投稿日時: 2018/02/01

見出し (これは見出し1)

' ** 見出し2
' これは見出し2
' *** 見出し3
' これは見出し3
' **** 見出し4
' これは見出し4
' **** 見出し5
' これは見出し5

見出し2

これは見出し2

見出し3

これは見出し3

  1. 見出し4

    これは見出し4

    1. 見出し5

      これは見出し5

リスト

'    My favorite scenes are (in this order)
'    1. The attack of the Rohirrim
'    2. Eowyn's fight with the witch king
'       + this was already my favorite scene in the book
'       + I really like Miranda Otto.
'    3. Peter Jackson being shot by Legolas
'       - on DVD only
'       He makes a really funny face when it happens.
'    But in the end, no individual scenes matter but the film as a whole.
'    Important actors in this film are:
'    - Elijah Wood :: He plays Frodo
'    - Sean Astin :: He plays Sam, Frodo's friend.  I still remember
'      him very well from his role as Mikey Walsh in The Goonies.

My favorite scenes are (in this order) 1. The attack of the Rohirrim 2. Eowyn's fight with the witch king - this was already my favorite scene in the book - I really like Miranda Otto. 3. Peter Jackson being shot by Legolas - on DVD only

He makes a really funny face when it happens.

But in the end, no individual scenes matter but the film as a whole. Important actors in this film are: - Elijah Wood: He plays Frodo - Sean Astin: He plays Sam, Frodo's friend. I still remember him very well from his role as Mikey Walsh in The Goonies.

続きを読む

ThinkPad X1 Carbon をカスタマイズする

はじめに

Thinkpad X1 Carbon 2017年モデルを購入した。

f:id:maskaw:20180127153331p:plain:w700

スペックは以下の通り。

カスタマイズした部分をメモとして残していく。

Capslock をCtrl に変更

Ctrl2cap を実行した。

Google 日本語入力の導入

Google 日本語入力 を導入した。

導入後、変換・無変換キーを Mac風に (日本語入力のオン・オフ) 設定した。 (参考: http://www.karakaram.com/mac-ime)

デスクトップの場所を修正

デフォルトのデスクトップ画面が C:\Users\ユーザー名\OneDrive\デスクトップ となっていた。

このMicrosoftCommunity の投稿 を参考に C:\Users\ユーザー名\デスクトップ に変更した。

  1. Windows キー + R キー > 「regedit」と入力して [OK]

  2. レジストリ エディターが起動したら左側のツリーを以下のように展開   HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders  

  3. 名前欄「Desktop」のデータ欄が「%USERPROFILE%\Desktop」となっているか確認

Google Chromeの導入

https://www.google.co.jp/chrome/browser/desktop/index.html からインストール。

Microsoft Edge について

速度も他のブラウザと遜色無くできれば使用したかったが、 テキスト右クリックからの検索 に難ありだった。

デフォルトは、画像のように、「Cortana に質問する」という欄が(Google検索が欲しい・・・)。

f:id:maskaw:20180127153325p:plain:w250

窓の杜: 「Microsoft Edge」でも選択テキストのGoogle検索が行えるようにする拡張機能 から、右クリックでGoogle検索は出来るようになる。

f:id:maskaw:20180127153328p:plain:w250

が、ここで 「s」キーを押してもGoogle検索してくれない(マウスカーソルを 「Search with Google」 に合わせてクリックする必要がある!)。

マウスカーソルをなるべく使いたくない自分としては苦痛だったので、ここでChrome に変更することを決心。 ( 当たり前だが ) Chrome はテキスト右クリック→「s」キーでGoogle検索をしてくれる。

f:id:maskaw:20180127153317p:plain:w250

Emacs

IPAゴシックの導入

Emacs 用に、IPAゴシック (サイト) をインストールした。 等幅フォントである。

Emacs の導入

以下に記載。

おわりに

デスクトップアイコンとタスクバーのショートカット、およびスタートメニューのアイコンを全て消去。

f:id:maskaw:20180127153320p:plain:w700

スッキリ。

ThinkPad X1 Carbonをカスタマイズする (Emacs編)

インストールと起動

  1. GNU Emacs から、Windows版 をダウンロード。 今回は emacs-25.2-x86_64.zip にした。 zipを展開して、適当な場所に保存。
  2. Windows emacsの実行exeは 「emacs-XX/bin/runemacs.exe」。 これをショートカットにしてクリック起動でも良いが、 Windowsキー → "emacs" → [RET] で起動できるようにしたい。

    f:id:maskaw:20180126214526p:plain:w200

  3. ここ(ITpro) を参考にして、設定を行った。

    1. エクスプローラーを開き、アドレス欄から「 shell:start menu 」を入力。
    2. 表示されたディレクトリに runemacs.exe のショートカット「emacs」 を入れる。

    f:id:maskaw:20180126214532p:plain:w330

設定

はじめに

フォントから パッケージまで、全て 設定ファイルに手書きしても良いが。 (そこまでemacs-lisp に詳しくないので)GUIで出来る部分はGUIでささっと設定する。

[Option] タブから以下、設定した。

  • [Highlight Matching Parentheses] (対応する括弧をハイライト) をONに。
  • [Show/Hid] タブより
    • [Tool-bar] をOFFに。
    • [Time,Load and Mail] をONに。
    • [Column Numbers] をONに。
    • [Set Default Font] でフォントを「IPAゴシック」に設定する。
  • 設定が終わったら [Save Options] で設定を保存。 (好みに合わせて他の設定もいじってみてください)

f:id:maskaw:20180126214537p:plain:w350

IPAゴシックについて

IPAが公開している等幅フォント (https://ipafont.ipa.go.jp)。 org-mode で表を使用するときに、等幅フォントだと全角半角混じりでも 表の体裁が崩れない。

f:id:maskaw:20180126214523p:plain:w150

同じ等幅フォントとして、Myrica (https://myrica.estable.jp/)もある。 縦棒 (|)の表記が個人的に好きでは無かったので、今回はIPAゴシックを選択した。

f:id:maskaw:20180126214609p:plain:w150

有料だが、個人的にはHGゴシックM がおすすめ。 社用PCはこちらにしている。

http://designpocket.jp/dl_font_category/detail.aspx?bid=19951

.emacs

先程設定した情報は、 %USERPROFILE%/AppDara/Roaming (大体 /Users/%USERNAME%/AppData/Roaming) 配下に .emacsファイルとして保存されている。 この .emacsファイルに追加の設定を加えていく。

非パッケージ、一般

;; --- general ---

;; デフォルトエンコードを utf-8にする
(set-default-coding-systems 'utf-8-dos)

;; 起動時の Emacsロゴ等、メッセージを出ないようにする
(setq inhibit-startup-message t) 

;; メッセージ音を出さないようにする
(set-message-beep 'silent)

;; C-x C-k (Ctrl押しながら "xk") で現在のバッファを閉じる
;; 通常は C-x k (Ctrl押しながら "x"、その後 "k"押下)
(defun my-kill-current-buffer () 
  (interactive) 
  (kill-buffer (current-buffer))) 
(define-key global-map (kbd "C-x C-k") 'my-kill-current-buffer) 

;; 行頭で C-k (kill-line) で行ごと削除する
(setq kill-whole-line t) 

;; 左端に行数を表示させる + 色の設定
(global-linum-mode t) 
(set-face-attribute 'linum nil 
                    :foreground "#fe4b4b" 
                    :height 0.9) 

;; C-Return でCUAモード (矩形選択などができる)
(cua-mode t) 
(setq cua-enable-cua-keys nil) 

;; 初期状態の C-hは help起動
;; これを バックスペースにする
(global-unset-key (kbd "C-h")) 
(global-set-key (kbd "C-h") 'delete-backward-char) 

;; 初期状態の C-l は recenter (スクリーンを再描画してカレント行を中央に置く)
;; 個人的に使用しないコマンドなので解除、よく使うコマンドに割り当てる
(global-unset-key (kbd "C-l"))
;; --- 選択範囲の文字置換
(global-set-key (kbd "C-l C-l") 'replace-string)
;; --- 選択範囲の文字置換 (正規表現)
(global-set-key (kbd "C-l C-p") 'replace-regexp)
;; --- マクロ関係
(global-set-key (kbd "C-l C-8") 'kmacro-start-macro) 
(global-set-key (kbd "C-l C-9") 'kmacro-end-macro) 
(global-set-key (kbd "C-l C-,") 'kmacro-end-and-call-macro) 

;; 個人的に入れたパッケージの保存場所を load-pathに追加
;; 参考: http://www.math.s.chiba-u.ac.jp/~matsu/emacs/emacs-aux.html
(setq load-path (cons "c:/Users/MY_USER_NAME/emacs/my_packages/" load-path))
続きを読む