15 Apr 2015, 16:20

Emacs で自動ライフログできる! プログラマのためのタイムトラッキング WEB サービス Wakatime がスゴい

はじめに

最近, ほとんどの時間を Emacs の中で過ごす. Emacs で実施している作業を, Wakatime をつかうと自動で記録することができる.

これを, つかって一日の行動を自動でライフログしたお話.

[toc]

Wakatime とは

Wakatime とは, プログラマのためのタイムトラッキング Web サービス.

エディタ上での作業を自動で記録, 分析して, おしゃれに可視化してくれる.

さまざまなエディタのプラグインが用意されている.

Emacs 連携

Emacs のための Elisp はこちら.

基本設定.

(require 'wakatime-mode)
  (global-wakatime-mode)

(defun browse-wakatime ()
  (interactive)
  (browse-url "https://wakatime.com/dashboard"))

スナップショット

ダッシュポード.

自分がどのプロジェクトに関わっていたかが, リポジトリごとに表示される. 私は, あらゆるテキストファイルをなるべく git で管理しようと心がけてい るので, Emacs で作業するいろいろなものが各プロジェクトごとに記録され る.

file:./../img/2015-04-16-011145_1131x453_scrot.png

一日のタイムライン. 自分が何時になにををしていたかが, 分かってしまう.

org-clock と併用することにする

今まで, タイムトラッキングには幾度と挑戦してきた. org-clock や toggl を試したが, 結局挫折してしまった.

その理由は, 計測し忘れ にあった.

この wakatime が気に入った点は, 自分では計測を意識しないということだ. 自動で, 記録してくれるところがありがたい.

ただし, 最大の欠点は, 無料版は昨日制限されているところ. 優良だと 1 ヶ月 1000 円程度かかるので, さすがにこんなお金は出せない.

そこで, org-clock での時間トラッキングと併用しようと考えた. 計測し忘れがないかどうかを一日の終わりに, wakatime をつかってチェックする.

このことによって, 一日の成果を確認するともに, 計測しわすれをチェックできる.

12 Apr 2015, 13:43

仕事に関わる知識を MOOC で! Coursera で Cloud Computing Concepts Part2 を受けた

file:./../img/IMG_3914.JPG

はじめに

Coursera で, クラウドコンピューティングの講座を受けました. これは, Part2 です.

Part1 の感想は以下です.

内容

講義

以下の内容を扱う.

  • Leader Election, Mutual Exclusion
  • Concurrency Control, Replication Control
  • Stream Processing, Graph Processing, Structure of Networks, Scheduling
  • Distributed File Systems, Distributed Shared Memory, Sensor Networks
  • Security, Datacenter Outage Studies, Wrap-up

コースの進みかたは Part1 と同じだ.

たくさんのコンセプトや考え方が次から次へと紹介されるので, すべてを消化できない..そして, 早口の英語の説明が困る.. \^-\^;

内容や課題は, Part1 を引用していることもあり, Part2 は Part1 が終わってから取り組んだ方がよい.

宿題

プログラミングの宿題は, Key-Value Store の実装. この課題に取り組むことで,

  • replica の扱いかた,
  • key-value store の考え方.
  • quorum consistency level の考え方.

などが学べる. 言語は C++. 自分には難しくて, 満点をどうしてもとれずに途中で諦めた.

こころにのこった考え方

こころにのこった考え方をコメントともに書く.

Leader Election

こういうロジックを考える仕事をしていたので, Leader Election ロジック は感銘を受けた. 以下, 記事にした.

Replication Control

もともとがストレージ屋なので, レプリケーションの技術とは馴染みがある.

昨今, 急激に台頭してきた分散ストレージのなかで使われている KVS や Replication の知識を補充することができたことは価値があった.

以下, 勉強メモ.

分散 KVS

分散 Key-Value ストア. スケールアウト技術の基幹技術.

同じデータを複数のコンピューターに複製して保存し, それぞれのコンピューター上のデータに変更が起きていないかどうかを 随時チェックすることによって整合性を確保. リアルタイム性はない.

Key で担当サーバを分ける.

たいていはいくつかのサーバ上に複製 (replica) を作成することによって 耐故障性を高めている.

Replication

レプリケーション. 複製.

データ複製.オブジェクトをコピーし, ノード間で複製を保持することで 冗長性を高める手法.

システム障害時の継続運用が目的となります. 災害時に接続しているシステ ムが壊れてしまったとき, 遠隔地にある複製データを利用し事業継続を実現 する DR (ディザスタリカバリ) に有効.

コンテンツ配信する方法は二つある.

  • Passive Replicatoin .. Master Replica だけを更新
  • Active Replicatoin .. id ごとにすべてを更新.

Distributed File Systems

現在の業務は, SMB プロトコルの高速化についての研究開発.

講義では, NFS を例に, 分散ファイルシステムの特徴や, NFS における高速 化技術を解説していた. 仕事にからんでいる領域なので, きいていておもしろい. 印象としては, NFS は高速化のための仕組みがた くさん試されている用に見えた. SMB は….

以下, 簡単な勉強メモ.

分散ファイルシステムの特徴

分散ファイルシステムの目的は, ユーザから ファイルかリモートにあるかローカルにあるか意識しなくていいよう にすること.

2 つのアクセスモデルがある.

  • 遠隔アクセスモデル … リモートサーバにあるファイルを読み書き
  • アップロードダウンロードモデル … 一旦ローカルにダウンロードして 編集してからアップロード.

ローカルファイルにアクセスするときは, file discripter を指定する. file discripter には, read/write に必要な pointer が保持されているので, ユーザは, offset を指定しない.

リモートファイルにアクセスするときは file id と offset を指定する.

これからどうするか?

フォールトトラレントの情報をあつめる

信頼性の高い製品の開発に関わっていく以上, これからもフォールトトラレントは必要な, より深めるべき知識だろう.

フォールトトラレントについては, この領域で研究が盛んで本や論文もた くさんでている. こういうものをどんどん読み込んでいきたい.

特許ノルマが仕事で課せられているので, 集めた情報の Output として, 特許に結びつけたい.

日経コンピュータをよむ

今まで, お昼休みにフロアにおいてある日経コンピュータを読んでいた. しかし, 職場で席を引っ越したので, 現在日経コンピュータを読む 機会がない.

日経コンピュータは, クラウドコンピューティングの最新動向をつかむた めのとてもいい情報源なので, これからも読みたい. これはここでブログ に宣言することによって, 自分にプレッシャーを.

12 Apr 2015, 06:13

Gacco で 社会人のためのデータサイエンス入門をうけた

日本の MOOC はどんなものかと思って, gacco で統計学を学んでみました.

内容

統計学の基礎知識を学ぶことができる.

内容は, 中学生でも理解で切るような平易な内容.

  • 第 1 週:統計データの活用 … 統計データの活用事例
  • 第 2 週:統計学の基礎 … 統計の基礎知識を学ぶ
  • 第 3 週:データの見方 … グラフの見方を学ぶ
  • 第 4 週:公的データの入手とコースのまとめ … e-Stat の使い方の紹介.

以下に詳細が書いてある.

感想

やりきった感なし

実際のデータの計算などはほとんどでてこなかったり, 一度きいたことがあるような基礎概念を説明しているので, まったく物足りなかった.

1 週の内容が 1 時間もかからずに終わってしまう軽いもの. さらに, 4 週で終わってしまう. coursera や edX は 一科目 5 時間とか 10 時間学習を強いるし, 平均で 8 week くらい続くので, 負荷の度合いがまったく違う.

MOOC は大学で学ぶ講義を一般に開放しているところに魅力があるのだが, 中学校の授業を立ち見しているような気分なのだ.

コンテンツがよく吟味されている

ただ, 内容が欲吟味されていて, 動画の構成のよさや内容のわかりやすさはとてもよかった. 動画の長さも 10 分ごとに分かれているし, 各動画で要点がまとまっているし

また, 構成社会人のための! ということで, 話題の選び方がビジネスよりなところがよかった. 扱う統計の題材は, 現実に即したもの.(売上とか, 人口比とか) 話のたとえも, マーケティングに関わるようなものが使わたり. 題名が “社会人のために”ということなのでこの辺を意識したことが伺える.

gacco 初体験の感想は…ビミョウ

日本語であるところが, とてもうれしかった.

しかし, とても物足りない. 負荷の度合いが coursera/edX にくらべると違いすぎる. 例えばこれとくらべたら負荷が軽すぎて, やりきった感がまったくない.

こんなものなのか??

日本の MOOC はどんなものかと思って, gacco で統計学を学んでみました.

11 Apr 2015, 06:52

C 言語/C++ における イベントハンドラの定石 (switch/ 関数ポインタ配列/lambda)

はじめに

C/C++ における イベントハンドラの書き方について,定石を整理してみた.

[toc]

前提

<div class="outline-text-3" id="text-unnumbered-2">
  <p>
    以下のようなコードがあるとする.
  </p>

  <p>
    [sourcecode language=&#8221;cpp&#8221; title=&#8221;&#8221; ]<br /> #include <iostream><br /> typedef enum {START, STOP} COMMAND;
  </p>

  <p>
    void check (COMMAND command) {<br /> std::cout << (int) command << " is called" << std::endl; } int main (int argc, char *argv[]) { check (START); check (STOP); return 0; } [/sourcecode] 

    <p>
      出力結果は以下のようになる.
    </p>

    <p>
      [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221; ]<br /> 0 is called<br /> 1 is called<br /> [/sourcecode]
    </p>

    <p>
      この出力結果は以下のようにしたい.
    </p>

    <p>
      [sourcecode language=&#8221;text&#8221; title=&#8221;&#8221; ]<br /> start is called<br /> stop is called<br /> [/sourcecode]
    </p></div> </div> </div> 

    <div id="outline-container-unnumbered-3" class="outline-2">
      <h2 id="unnumbered-3">
        方法
      </h2>

      <div class="outline-text-2" id="text-unnumbered-3">
      </div>

      <div id="outline-container-unnumbered-4" class="outline-3">
        <h3 id="unnumbered-4">
          switch を使う
        </h3>

        <div class="outline-text-3" id="text-unnumbered-4">
          <p>
            一番単純な方法は, switch をつかって, 表示を分岐する
          </p>

          <p>
            [sourcecode language=&#8221;cpp&#8221; title=&#8221;&#8221; ]<br /> void onStart () { std::cout << "start is called" << std::endl; } void onStop () { std::cout << "stop is called" << std::endl; } void check (COMMAND command) { switch (command) { case START: onStart (); break; case STOP: onStop (); break; } } }; [/sourcecode] </div> </div> 

            <div id="outline-container-unnumbered-5" class="outline-3">
              <h3 id="unnumbered-5">
                関数ポインタ配列を使う
              </h3>

              <div class="outline-text-3" id="text-unnumbered-5">
                <p>
                  別の定石は, 関数ポインタ配列をつかう.
                </p>

                <p>
                  [sourcecode language=&#8221;cpp&#8221; title=&#8221;&#8221; ]<br /> #include <iostream>
                </p>

                <p>
                  typedef enum {START, STOP} COMMAND;
                </p>

                <p>
                  void onStart () { std::cout << "start is called" << std::endl; } void onStop () { std::cout << "stop is called" << std::endl; } typedef void (*HANDLER) (); static HANDLER handle_tbl[2] = {&onStart, &onStop}; void check (COMMAND command) { handle_tbl[command] (); } [/sourcecode] </div> </div> 

                  <div id="outline-container-unnumbered-6" class="outline-3">
                    <h3 id="unnumbered-6">
                      lambda をつかう
                    </h3>

                    <div class="outline-text-3" id="text-unnumbered-6">
                      <p>
                        関数テーブルに関数を登録するために, 関数を作成する必要があるけれども, 一行なので, 関数を作成するのは面倒.
                      </p>

                      <p>
                        そんなときは,c++11 からつかえるようになったラムダ式を利用する.
                      </p>

                      <p>
                        [sourcecode language=&#8221;cpp&#8221; title=&#8221;&#8221; ]<br /> #include <iostream><br /> #include <functional>
                      </p>

                      <p>
                        typedef enum {START, STOP} COMMAND;
                      </p>

                      <p>
                        static std::function<void ()> handle_tbl[2] = {<br /> [] (){ std::cout << "start is called" << std::endl;}, [] (){ std::cout << "stop is called" << std::endl;} }; void check (COMMAND command) { handle_tbl[command] (); } int main (int argc, char *argv[]) { check (START); check (STOP); return 0; } [/sourcecode] 

                        <p>
                          やっぱり, これからは関数型の時代だよね!
                        </p></div> </div> </div> 

                        <div id="outline-container-unnumbered-7" class="outline-2">
                          <h2 id="unnumbered-7">
                            Special Thanks
                          </h2>

                          <div class="outline-text-2" id="text-unnumbered-7">
                            <p>
                              この記事によると, switch 型と関数テーブル型では, スピードは変わらないとか.
                            </p>

                            <ul class="org-ul">
                              <li>
                                <a href="http://dixq.net/forum/viewtopic.php?f=3&t=13875">関数ポインタテーブルと switch 文 • C 言語交流フォーラム ~ mixC++ ~</a>
                              </li>
                            </ul>

                            <p>
                              委譲をつかう方法もある (Strategy Pattern)
                            </p>

                            <ul class="org-ul">
                              <li>
                                <a href="http://www7b.biglobe.ne.jp/~robe/pf/pf016.html">プログラマの友 第十六報:イベントハンドリングとデリゲート</a>
                              </li>
                            </ul>

                            <p>
                              C++11 の方法.
                            </p>

                            <ul class="org-ul">
                              <li>
                                <a href="http://qiita.com/shiro_naga/items/5967f6cd1710e7b78677">C++ &#8211; メンバー関数ポインタと配列を使って, メンバー関数を番号で指定して呼び出す方法 &#8211; Qiita</a>
                              </li>
                              <li>
                                <a href="http://kaworu.jpn.org/cpp/std::function">std::function &#8211; C++ 入門</a>
                              </li>
                            </ul>
                          </div>
                        </div>

10 Apr 2015, 13:19

Wayland/weston を ArchLinux で動かして遊んでみた

はじめに

仕事で, GUI プログラミングに関わることになりそうです.

そこで, 次世代 ウィンドウシステム wayland/weston を Arch Linux にいれて遊んでみました.

[toc]

Environmet

$ sudo pacman -Qe weston linux
weston 1.7.0-2
linux 3.19.2-1

インストール

以下のコマンドでインストール.

sudo pacman -S wayland weston

wayland

x window にかわる, 次世代ウィンドウマネージャー.

Arch Wiki が詳しい.

x window にくらべて, 高速で, 実装がシンプルらしい.

以下の比較動画をみると, xorg と wayland/weston の違いが歴然としていおもしろい.

Weston

Wayland はただのライブラリなので, それだけでは使い物になりません. X サーバーを置き換えるには, (Weston などの) コンポジタが必要.

遊んでみる

weston 起動.

$ weston

左上のターミナルアイコンをクリックすると, weston-terminal が起動する.

いろいろなデモが用意されている.

  • weston-flower
  • weston-smoke
  • weston-editor

レンダリングが鮮やかな気がする.

以下で, デモが見られる.

x window アプリを wayland で動作させる

Wayland は, 描画に OpenGL ES を用いていている. 一方, Linux のデスクトップアプリは, X クライアント.

xorg-server-xwayland をインストールすれば, 従来の Linux アプリを wayland で動かす方法がある.

.config/weston.ini に以下を書くと, weston-terminal からアプリを立ち上 げたときに, weston 内でアプリが起動する.

[core]
modules=xwayland.so,desktop-shell.so

weston.ini の マニュアルは以下.

# xorg アプリを動作させる
[core]
modules=xwayland.so

# 日本語設定
[keyboard]
keymap_layout=jp

# ターミナルアイコン
[launcher]
icon=/usr/share/icons/gnome/24x24/apps/utilities-terminal.png
path=/usr/bin/weston-terminal

# firefox アイコン
[launcher]
icon=/usr/share/icons/hicolor/24x24/apps/firefox.png
path=/usr/bin/firefox

# フルスクリーン
[output]
name=X1
mode=1600x900

パフォーマンスについての考察.

Bookmarks

Linux conf 2013 におけるプレゼン.

08 Apr 2015, 13:39

ミライの スマートカーの エンジニアになる

はじめに

日記です.

昨日会社で席替えをして, 新しい部署に移動した. しかし, 所属はいまのまま変わらずに席だけ移動した.

4/21 から, 新しい仕事が始まる.

ミライの IT 自動車のお仕事

今度の仕事は, 自動車関連だ.

現在, 自動車の IT 化が急速に進んでいる. その波にうまくのろうというお仕事.

しかし, 困ったことに, 自分はまったく車に興味がないということだ!! これはイタい.

興味があるとすれば, Back to the future ででてきたようなデロリアンを開発すること. 空飛ぶ車は映画では 2015 年にあるはずなのに, おかしいなぁ.

あと, レースクィーンに興味がある.

外にでていく勇気

移動した部署は, 社外活動が活発な部署だ. たくさんのひとが気軽に展示会に足を運ぶ. そこが内気でなかなか外にでていけない自分には不安だ.

オープンソースのコミュニティに関わる機会もあるみたいだけれども, 果たして自分に一体なにができるのだろうかと, 不安になる.

しかし, 逆に考えれば, これは今までの自分から変わるための転機ともとらえられる.

社交性や社会性のなさはいつも自覚しているのだが, そんな自分を変えたいといつも思う. 弱い自分の声に負けないように, いつも気を強くもとう.

08 Apr 2015, 11:24

Hackernews や Reddit で 海外の技術情報をギャンギャン収集するのだ

はじめに

Hackernews と Reddit で英語の技術情報を漁る方法, およびそれを Emacs からみる方法の紹介.

[toc]

きっかけ

社内で, 英会話のサークル活動をすることなった. 初日の今日は, 半年後の目標を英語で 1 分話した. 自分が話したことは,

英語の技術情報を素早く収集する力をつけること

そのためには hackernews を毎日速読すること

と言うわけなのだ. 今現在は, 主にはてなブックマークで話題になったものを読んでいる. それは日本に閉じている.

海外サイトのほうが

  • ユーザ数が圧倒的におおい.
  • よりおもしろい情報だったり,
  • 技術の最新情報は英語ででてくるだろう

という理由から, 海外で話題の hackernews と reddit を毎日読むことにした.

Web サイトで読む

reddit

reddit とは, 2ch のような掲示板の海外版. 最近人気が急上昇.

reddit は default では, いろんなキーワードをもとに情報を集めている. 以下のサイトを参考にして, 一旦すべてのキーワードを unsubscribe にする.

その後, Programming と Emacs のみを購読するように設定.

hackernews

世界中のハッカー・ギークが読んでいるウェブサイト. 英語圏で話題になったニュースやブログ投稿が集まっていて, 日々更新される.

最近, Hackernews で話題になった記事を翻訳するサイトも現れた.

Hackernews で話題になった記事のタイトルだけ翻訳されているものもあった.

Emacs で読む

Emacs を利用しているひとは, なんでも Emacs ですませたいはず. さがしてみると, Emacs で reddit や hackernews を読むための elips があった.

おわりに

よーし, これで準備は整った. たくさん読むぞー.

02 Apr 2015, 13:17

障害発生時のログ解析のコツはなに?

はじめに

今日は, 昨日テストした内容のログ解析を一日 (+ 残業時間含む) やってた.

途中でよくわからなくなってきて, WireShark のバグを疑ったりしたけれども残念ながら自分のバグだった.

どうすれば, ログ解析を素早くできるようになるのだろうか?

そこで, 思いつくままにアイデアを書いてみる.

[toc]

事象を把握する

まずは, エラーメッセージ見るところからスタート.分析の前提となる

  • 試験手順
  • 環境

を確認する.メールで依頼がきたら欲メールを読む.これは, まずは頭の中に前提を把握したほうが分析がしやすいから.

前提を見逃していて全然関係ないところを防ぐためでもある.

分析

ロジカルシンキングの方法で有名なものが 2 つある.

  • 仮説思考
  • なぜなぜ分析

この二つは真逆のアプローチだが, 両者を状況によってつかいわけるのがいい.

仮説を立てる

一番大事なことは, アタリ をつけること.

障害が入り組んでいるときは, 注意深くログをチェックする部分を絞り込む必要がある.

これが原因だろう というアタリをつけて調べることで, 時間を節約することができる.

コンサルの世界では, 仮説思考がもてはやされているのも, 限られた時間内で, 素早く成果にたどり着くため.

なぜなぜ分析

これが王道の手段.

エラーログから始まって,

  • なぜ -> なぜ -> なぜ ->

と原因を探っていく.複雑な事象の場合は, 複数のバグがいりまじっていた り, 二次障害, 三次障害と絡み合っている.ロジカルに注意深く, 事象を追いかける.

追いかけているうちに迷子になったら次の項へ.

時系列にテキストに整理する

やみくもにログをおっていると, ときどき迷子になる.

そういうときは, テキストとログを交互に並び替えながら事象を列挙していく.

ログを別のテキストに転記することは, やや面倒ではあるものの, これをすると, わからなくなったときの地図になる.

その他

相談する

これは自分の悪いところではあるけれども, わからなくても一人で悩みつづけることがある.

きいてしまったほうがはやいときは, 相談したほうがいい. 実は, 相手はもう答えを知っているかもしれない.

そのためには, 普段からよい人間関係を保つことも必要.

諦めない

原因を曖昧にしたまま先に進んではいけない. その場で発生したことは最低限原因判明させてから次へいくクセをつける.

それはかならず再発する. 定時で帰りたくたって, 原因を判明させるまで は会社に残って頑張るほうがいい. 明日になるとわすれてしまうので.

この姿勢は, 最近チームメンバの先輩から学んだ.

ツールを揃える

ログを解析するには, ログ解析を助けるツールがあると便利.

  • ログをダウンロードするためのコマンドラインツール.
  • キーワードによる検索, フィルタリング
  • ログのハイライト.
  • 容易なテキスト抜きだし & 整形
    • これは,時系列にテキストに整理するため

今のプロジェクトでは, 決まりきったログツールがないので, テキストで吐き出されたプログラムのログを解析している.

自分は Emacs を駆使しているけれども, Emacs は大規模ファイルに大して遅い のが最近のストレス. 軽さでは秀丸に勝てない.

30 Mar 2015, 23:41

Emacs で家計簿をつけよう! プログラマブル複式簿記, Ledger.

はじめに

コマンドラインから 家計簿をつけることができる ledger を試してました.

ledger は

Ledger は, *nix システムのコマンドラインで動作する, 複式簿記記録ツール.

メリットは,

  • command line
  • 複式簿記
  • データはプレーンテキストで保存
  • シンプル

以下から, ダウンロードできる. マルチプラットフォーム.

つかいかた

.dat 形式の独自 ledger フォーマットで記録していく.

以下, 3 日間の自分の記録. budger.dat で保存する.

; -*- ledger -*-

2015/03/30 .
    食費:外食:主食                              4.00
    食費:外食:飲み物                            2.00
    食費:自炊                                  17.00
    資産

2015/03/28 .
    光熱費:水道                                25.00
    食費:外食:カフェ                            3.00
    食費:外食:カフェ                            3.00
    食費:外食:主食                              6.00
    食費:自炊                                   3.00
    資産    

2015/03/27 .
    食費:外食:カフェ                            3.00
    食費:外食:カフェ                            3.00
    資産

バランスシート

集計は, bal を指定する.

$ ledger -f budget.dat bal
                  25  光熱費:水道
                 -69  資産:支出
                  44  食費
                  24    外食
                  12      カフェ
                  10      主食
                   2      飲み物
                  20    自炊
--------------------
                   0

トランザクション

項目の支出の確認には, reg を指定する. もちろん reg (項目) でフィルタリングできる.

$ ledger -f budget.dat reg 外食
15-Mar-30 .                      食費:外食:主食                        4             4
                                 食費:外食:飲み物                      2             6
15-Mar-28 .                      食費:外食:カフェ                      3             9
                                 食費:外食:カフェ                      3            12
                                 食費:外食:主食                        6            18
15-Mar-27 .                      食費:外食:カフェ                      3            21
                              食費:外食:カフェ                      3            24

Emacs 連携 (ledger-mode)

Emacs 用の lisp もある.

ledger のデータファイルを編集するときのメジャーモード. Emacs から ledger コマンドを発行するための 関数がとても豊富に容易されている.

よく利用するのが, M-x ledger-report (C-c C-o C-r) これで, いろいろな情報を簡単にまとめることができる.

org-capture との連携

(require 'ledger-mode)
(add-to list 'load-path  "~/.emacs.d/el-get/repo/ledger-mode/lisp")
(add-to-list 'auto-mode-alist '("\\.dat$" . ledger-mode))

flycheck-ledger

ledger ファイルを flycheck でチェックすることもできる.

(with-eval-after-load 'flycheck
  '(require 'flycheck-ledger))

org-mode (org-babel) 連携

legder -f xx org とかくと, org-table 形式で出力.

これをやると, コマンドラインから使えなくなってしまうのが欠点.

以下の設定を追加. これで, org-babel で ledger が利用可能になる.

(org-babel-do-load-languages
 'org-babel-load-languages
 '((R . t)
   (shell . t)
   (ledger . t)))  ;; ★

#begin_src ledger :cmdline bal とかいてコードを書く. これを評価する と balance コマンドが発行される. :cmdline というオプションにいろい ろと指定すれば, 自由に ledger のコマンドが発行できる.

#begin_src ledger :cmdline org :results raw とかくと, org-table 方式でテーブル出力が可能だ. org-table からならば, R を利用し てデータ集計が可能.

まとめ

デメリット

ledger の最大のメリットは, データを簡単にフィルタリングできるという ことだと思う. しかし, 以下のようなデメリットもある.

  • データの加工は不自由 (ledger 仕様)
  • グラフもかけない
  • クラウド連携もできない

あわよくば複式簿記をみにつけたい

しかし, 自分はしばらく ledger を利用しつづけようと思う. あわよくば ledger を通じて複式簿記をみにつけたい.

ledger には, 複式簿記用の大量の機能が備わっている. これらはほとんど理解していない. データ加工は, 必要に応じて Excel や Gnu Cash をつかいわけることにする.

environment

  • Arch Linux
  • Ledger 3.1.0

Bookmarks

29 Mar 2015, 11:49

Emacs org-mode と freemind の変換と関係性についての考察

概要

Emacs の org-mode と freemind の連携について書きます.

また, 両者の関係性について考察します.

[toc]

背景

以前の自分は freemind ジャンキーだった. なんでもかんでも freemind を利用して管理していた.

Emacs を 利用しはじめてから, または, 以下を読んでから.

…. やっぱプレーンテキストだよな!!

と思って, freemind は使わなくなってしまった.

最近になって, ふと freemind を久しぶりに思わず便利さを思いだしたので, ここで, org-mode と freemind 連携を長短や連携をかんがえた.

freemind to org-mode

目的

freemind はよくわからない独自フォーマットだ. プレーンテキストでないところが気にくわない. しかもバージョンがあがると開けなくなるかもしれない.

そこで, 保存のため には freemind から org-mode への変換が必要.

障害解析に freemind を

最近, とくに freemind の効果を感じるのは, バグを出して, 障害解析をしているとき.

障害解析は 仮説をたてて, ログを確認して, 原因をかんがえる というプロセスを繰り替えし続ける. 難しいバグだと, このサイクルをまわしているうちに, 自分が今どこにいるか輪からなくなってしまう. 自分がなにを調べていたの かわすれてしまうこともある.

そこで, freemind を利用して, 何でもかんでもどんどんまとめていくことで, 障害調査中に迷子にならずにすむ.

ブログ記事の下書きを freemind で 推敲を org-mode で

このブログ記事は org-mode で書いている.

アイデアをだすのは freemind を利用して, それを org-mode に変換して ブログ記事として完成させてみるというアイデアはよい.

手段

freemind から org-mode への直接的な変換方法はない. freemind は html への export をサポートしているので, html から org-mode へ変換しようと試みた. (pandoc 利用) しかし, 変換したものは, org-mode でなかった!!

諦めずに別の方法を探してみると, vym という mindmap ツールが mindmap から org-mode への変換をサポートしていた.

vym は freemind 0.9 version を開くことができる. なので,

  • freemind 0.9 -> vym -> org-mode

という変換ルートで変換ができた.

追記:

もっといい方法を見つけた. 必要なノードを選択して org-mode へ 直接 コピペ 必要に応じて整理すればいい.

てか, これすごい.

org-mode to freemind

目的?

いろいろかんがえたのだが, org-mode から freemind にわざわざ変換する 利用シーンが思いつかなかった.

手段

目的がないのに手段があるというのもへんだけど, org-mode には 標準で freemind へ変換する手段がある.

また, この方法だと, freemind を利用して, org-mode で作成した freemind のリアルタイムプレビューなんかもできる.

(require 'ox-freemind)

以下を評価して, M-x org-export すれば freemind が選択肢にでる.

おわりに

org-mode と freemind の比較

org-mode はいわゆるアウトラインエディタだ. mindmap が アウトラインエディタに比べて優れている点は, 自由さ にあるとおもう.

逆に言えば, org-mode が freemind に対して優れている点は, 軸がある 点にあるだろう.

結論

両者, 必要に応じてつかいわければいい.

今までは org-mode にこだわすぎた. もっと柔軟にツールをわけたほうがいい.

または, freemind から org-mode へは

  • 保存
  • まとめ

のために変換する利用シーンがありそう.

  • freemind は, アイデアをだすための 使い捨てのフォーマット.
  • org-mode は保存のためのフォーマット.