04 Mar 2018, 05:16

個人用ライフログ環境をmattermostで構築しました

はじめに

現在、ひとりslackにハマっている。チャンネルを話題ごとに分けることができたり、記事のメモを気軽に投稿できるのがよく、ひとりで大盛り上がりである。以下のようなチャンネルを作っている。

  • book
  • diary
  • tech
  • gtd
  • kaggle
  • mooc
  • work

しかし、あまりハマりすぎて、フリープランの壁にぶつかる。独りslackはフリープランで10000件の履歴という制限があるので、これはライフログの観点からよくない。独りtwitterも検討したのだけれどもチャンネルが分かれていないのが使いづらい。

そこで、slackのクローンのOSSである mattermost を導入することにした。

mattermostのインストール方法は、Linux Nativeな環境にインストールする方法と、dockerをつかう方法がある。今回は、Linuxに直にインストールする方法を選んだ。

環境

  • Ubuntu 16.04 LTS
  • mattermost 4.7.2
  • mysql

preview

まずは、mattermostがどんなものか確認してみよう。mattermostがどんな感じかは、demo用お試しサーバにアクセスすると確認することができる。

または、 preview用の dockerを imageを試すことで確認できる。

インストール

mysqlのインストール

mysqlのインストールをし、mysqlの設定をする。

sudo  apt-get  install  mysql-server
mysql -u root -p


mysql>  create  user  'mmuser'@'%'  identified  by  'mmuser-password';
mysql>  create  database  mattermost;
mysql>  grant  all  privileges  on  mattermost.*  to  'mmuser'@'%';
mysql>  exit

mattermostサーバのインストール

最新版の アーカイブをダウンロードする。

ダウンロードしたものは、解凍して、/opt配下に置く。

sudo mv mattermost /opt
sudo  mkdir  /opt/mattermost/data
sudo  useradd  --system  --user-group  mattermost
sudo  chown  -R  mattermost:mattermost  /opt/mattermost
sudo  chmod  -R  g+w  /opt/mattermost

/opt/mattermost/config/config.jsonを MySQL用に編集する。

"DriverName""mysql" に。 DataSource を以下のように変える。

"mmuser:mmuser-password@tcp(127.0.1.1:3306)/mattermost?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s"

さあ、ここまできたら試してみよう。

cd /opt/mattermost
sudo  -u  mattermost  ./bin/platform

これて起動して、 matter mostがたちあがれば成功! 簡単だね!

mattermostサービス起動

手動起動が成功したならば、次は自動起動。サービスに登録して、システム起動時に起動する。

/lib/systemd/system/mattermost.serviceを修正する。

\[Unit\]
Description=Mattermost
After=network.target
After=mysql.service
Requires=mysql.service

\[Service\]
Type=simple
ExecStart=/opt/mattermost/bin/platform
Restart=always
RestartSec=10
WorkingDirectory=/opt/mattermost
User=mattermost
Group=mattermost
LimitNOFILE=49152

\[Install\]
WantedBy=mysql.service


sudo  systemctl  daemon-reload`
sudo  systemctl  start  mattermost.service
sudo  systemctl  enable  mattermost.service

これで立ち上げ完了です!

設定

ここからは、mattermostの設定をしていきます。

Slackデータのインポート

まずは、slackの過去データを エクスボートして、mattermostにインポート。

日本語部分検索対応

mattermostでは、日本語検索に難がある。現在、mysqlの方に対処方法があるので、それを試す。postgresは知らない。

/etc/my.conf作成。

systemctl restart mysql
mysql mattermost -u mmuser -p mmuser-passoword


mysql> ALTER TABLE Posts DROP INDEX idx\_posts\_message_txt;  
mysql> ALTER TABLE Posts ADD FULLTEXT INDEX idx\_posts\_message_txt (\`Message\`) WITH PARSER ngram COMMENT 'ngram reindex';

他にもいろいろ設定したけれども、細かいのでココでは省略。

おわりに

結構時間がかかったのだけれども、なんとか個人用のライフログ環境がmattermostで構築できました。

29 Jan 2018, 15:31

Scrapboxによる Futurismo Wiki 復活

https://gyazo.com/79d7eb8d1532bbf9cf317bdfb486018a

はじめに

最近Scrapboxと言うウェブサービスを知った。こは何かと言うとタグで情報をくっつけることができるwikiだ。ちょうどモダンなwikiサービスを探していたところ見つけたのがこのツールだ。

scrapboxのwikiとしての斬新性

Scrapboxの斬新なところは、タグ によって情報をつなげることができるというところ。

フォルダ構造で情報を管理するか、タグによって管理するかというのは、ちょっとした論争を引き起こしてきた。どうやってメールを管理するか、どうやってファイルを管理するか。

今までの潮流は、ディレクトリごとにフォルダを管理したり、メールを管理してきた。しかし、gmailがラベルでメールを管理し始めたり、FennirFSがタグでフォルダを管理しはじめたように、タグによる情報管理というものが、主流になりつつある。それは、ビッグデータに適した情報整理の手法として、フォルダよりもタグのほうが優れていることの現れだと考えている。

そこで、scrapboxである。 wikiというものの起源を考えてみると、ハイパーリンクという仕組みによって情報をつなげるところが魅力であった。

scrapboxは、キーワードをタグ化することで、驚くほど簡単にそのつながりを実現することができる。ここが、今までにない点であり、驚くところだ。

Futurismo Wiki の復活

このブログの裏サイトには、Futurismo wikiというサイトがある。

当時の意気込みをもう一度引用しよう。

最近、以下のような課題を感じる。ブログに知識を集約していくことに限界を感じている。

  • 知識を体系的に整理することが不便
  • 知識を追記して膨らませて発展させていくことが不便
  • 知識と知識をつなげることが不便
  • ちょっとした備忘録をブログの記事にするのは気が引ける
  • 他人にとってはどうでもよいことをブログの記事にするのは気が引ける

なぜ、Futurismo Wikiは停滞していまったのだろうか?それは、org-modeで記事を書いていたのだけれども、Emacsを利用しなくなってしまったからというのが大きな理由だ。

別の理由は、知識をまとめるのが面倒だったからだ。しかし、上記に書いた課題というものは、今も変わらず抱いている。

そこで、である。Futurismo Wikiの Scrapboxによる Rebornである。

Scrapbox プロジェクト立ち上げ

以下のようなプロジェクトを作ってみた。

  • private用プロジェクト ・・・私的なことがらをどんどん記録する
  • work用プロジェクト ・・・ 仕事で利用する情報法をどんどん記録する
  • Futurismo Wiki … ブログのフロー情報を集約するスタック情報サイト
  • きまべん … @gaaamii さんが運営する勉強するための場所。勉強ノートを投稿していく。

おわりに

心地よいツールを使っていると、楽しい。これからどんどんいろんなことを記録していきたい。

work用と、きまべんプロジェクトでは作業ログを、Futurismo Wikiは技術情報の集約を、そしてprivateはまずは日記から。便利さを感じるには、まずは日記からはじめてみてはどうでしょうか?

13 Jan 2018, 16:51

PyCharmの scientific modeがスゴい!Jupyter Notebookいらないかもよ

はじめに

Kaggleで、scriptを書く人と、Jupyter Notebookを書く人がいるのだけれども、どっちが生産性がいいのかなというのが、ふと自分のなかに疑問として湧き上がった。自分は、Jupyter Notebook派だ。しかし、別の方法も試してみるのも、気分転換になるかもとおもい、しばらくぶりにPyCharmを使おうとした。

すると、2017/11に出た最新版 2017.3 で Professional Editionに追加された機能、Scientifc modeがなんだかスゴそうだったので、今回紹介する。

Scientific Mode

まずは、公式サイトからの紹介を翻訳。

[https://www.youtube.com/embed/OHwh0c8UsW4?start=66]

特徴

  • iPyrhon Notebook(Jupyter Notebook)がPyChamに結合。
  • IDEの恩恵を十分に受けて開発できる。自動補完、ナビゲーション、エラーチェックなど。
  • 対話的Python コンソールで REPL駆動開発ができる。
  • NumpyやPandasのデータ構造を見るViewerがある。
  • MatplotlibをインタラクティブにみるViewerがある。
  • Anaconda連携

有効方法

ツールバーの 表示 > Scientifc モードを選択。すると、

  • プロジェクトView
  • Python コンソール
  • ドキュメントView
  • SciView(これがデータビューとグラフビューを兼ね備えている)
  • 実行したオブジェクトリストView

が現れ、まるで RStudio みたいなView配置になる。RでデータサイエンスをするならRStudio一択だけれども、PyCharmはPythonにおけるデータサイエンスのためのIDEになりえるのではないか?

ここがスゴい

例えば、Jupyter Notebookユーザならば、セルごとに処理を実行することができることに魅力を感じるかもしれない。それはPyCharmでもできる。カーソルで選択して、選択範囲を実行すると、選択した部分がPythonコンソールに送られて実行できるのだ。

そうして評価した、numpyやpandasオブジェクトはクリックすると、SciVIewに現れるのだ。なので、いちいちJupyter Notebook上で、 head()関数でデータフレームの中身を確認する必要がない。

少しコードを修正したら、再度範囲を選択して、実行すると式が再評価される。

That’s REPL駆動開発!!

何より嬉しいのは、IDEの恩恵を存分に利用してPyhtonのコードがかけることだ。IDEに必要な条件としては、以下のようなものがある。 PyCharmはすべて兼ね備えている。

  • シンタックスハイライト/ インデント
  • 検索・置換
  • タグジャンプ
  • コード補間
  • エラーチェック
  • リファクタリング
  • インタープリタ・デバッカ
  • プロジェクト管理
  • ドキュメント参照

所感

ここがスゴイでも書いたけれども、コードを部分実行して、そのデータフレームがすぐに見れるViewがあるところがとても気に入った。

Jupyter Notebookを今までずっと使っていたけれども、Jupyter Notebookの代わりとなるかもしれない可能性を感じた。とはいえ、EDAをしたり、他人に見やすくコードを公開するには、まだまだJupyter Notebookが必要だろう。それ以外の部分は、PyCharmでいいんじゃないか?

おわりに

一番気になるのは、お値段。Professional Editionは有料で1年間 89ドル = 1万円くらい。

しかし、日本の代理店?から購入するとちょっと安くなる。

まずは、試用を1ヶ月してみてから判断してみるのもよいのでは?

 

追記

Community Editionでも、選択範囲のみを実行したり、numpyやpandasの中身を見ることができた。なんだ、Professional版いらないかも。

11 Jan 2017, 13:40

ポモドーロテクニックの iPhone アプリ flat tomato が素晴らしい

SoftSkills を読んでから、ポモドーロテクニックを意図的に自分の作業に取り入れている。

ポモドーロテクニックを用いることで、

  • 作業と休憩を明確に分けることができる
  • 作業に集中できる
  • 自分の作業見積ができる

というメリットに気づいたからだ。

以下の機能が必要になった。

  1. iPhone アプリであること
  2. 終了時のアラームがバイブであること

というのも、TOEIC の勉強を自習室でするときに、 パソコンは広げないし、まわりにも迷惑をかけたくない。

この2つの条件を満たすアプリを探していたところ出会ったのが、Flat Tomato だった。

Flat Tomato の紹介

Flat Tomato は数ある iphone ポモドーロ・テクニックアプリの一つ。

特徴は、

  • 美しい UI
  • トマト数・すなわち作業見積・統計機能(有料)
  • 他サービスとの連携(todoist, iPhone Calener, Evernote)
  • バイブアラーム機能

だろうか。iPhone アプリで無音バイブアラーム機能を有しているのはこれのみである。 調べて見ると、

  • Be Focused(Focus Timer)
  • Tomatodo

などがバイブ機能を有していると書いてあったが、試してみたところ嘘っぱちだった。 バイブレーションの設定はあるものの、実際にはバイブしなかった。

他サービスとの連携

とくに素晴らしいと思ったのは、以下の二点。

todoist と連携できる

todoist というタスク管理サービスと連携できる。

todoist に登録してあるタスクからポモドーロを使って作業したいタスクを選ぶことが可能。



iPhone Calender と連携できる

iPhone カレンダーと連携できる。 このことによって、カレンダー上にライフログを残すことができるのだ。


以上、駆け足になってしまったけれども、素晴らしい Flat Tomato の紹介でした。

おまけ

最近見つけた Web ポモドーロテクニックサービスで、以下のサイトがいい。

Web サービスでは、Tomatoes が優秀だったけれども、 最近出てきた、Pomodoro Tracker は Tomatoes を抜いたかもしれない。

なぜか? それは、無料でトマト数の見積と統計機能がついているからだ。 最近出てきたサービスなので、ゆくゆくは有料化してしまうかもしれないが、 つかうなら今がチャンス!素晴らしい。

おまけ2

todoist と連携できるデスクトップアプリは、PomoDone だ。

マルチプラットフォームなので、Windows, Mac, Linux から使うことができる。

todoist だけでなく、いろいろな Web サービスと連携できるところも魅力だ。

08 Dec 2016, 16:38

マウスをつかわずウェブ閲覧!Emacs ライクな Web ブラウザ Conkeror

Conkeror というとてもいいブラウザがあるのだが、日本語情報がすくないので紹介することにした

今回は Ubuntu16.02 の環境にインストールするが、Windows でも Mac でも Conkeror は動くよ。

Conkeror とは

  Conkeror はキーボード−主体、高カスタマイズ可能、拡張可能なウェブブラウザ。

Conkeror is a keyboard-oriented, highly-customizable, highly-extensible web browser based on Mozilla XULRunner, written mainly in JavaScript, and inspired by exceptional software such as Emacs and vi. Conkeror features a sophisticated keyboard system, allowing users to run commands and interact with content in powerful and novel ways. It is self-documenting, featuring a powerful interactive help system.

メリット

私が感じている conkeror のいいところは、

  • Emacs キーバインドなところ(ここ大事!)
  • ほとんどマウスを利用せずにウェブブラウジングができるところ
  • 自由にカスタマイズ可能なところ

デメリット

  • Chrome や Firefox のようなプラグインが入れられない。
  • PDF をみるとき、いちいちダウンロードして開かないといけない。(PDF プラグインないので)
  • Chrome や Firefox に比べると遅い気がする。

conkeror の取得

git で取得して make

git clone git://repo.or.cz/conkeror.git
cd conkeror
make
make install

これで OK.

公式の wiki には xulrunnner をインストールするようにかかれているけれども、インストールしなくても conkeror は使えた。xulrunnner いらないのかな??よくわからない。

キーバインド

Emacs と同じ!!まずは、C-h t を押してチュートリアルを読もう。

その後で、C-h i を押して、細かいキーバインドを見よう。Emacs 使いならば、もうすでにほとんど使いこなせるはず!!!

とくによい機能は f を押すとリンクが 数字でラベリングされる。数字を指定することで、

デスクトップアイコン を用意する(Ubuntu)

以下の記事を参考に、デスクトップアイコンを作成した。

~/.local/share/applications/ に移動

conkeror.desktop というファイルを新規作成して、以下の内容を記述。

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=conkeror
Comment=conkeror
Exec=/home/tsu-nera/opt/conkeror/conkeror
Icon=/home/tsu-nera/opt/conkeror/Green_copyright.svg.png

アイコンは以下の URL から拝借した。著作権は Public Domain なので多分大丈夫。  -

これで、アプリケーションとして認識されるので、 “コンピュータを検索”を実行するとアイコンが現れる。ランチャーにも登録。

Emacs のデフォルトブラウザを Conkeror に設定

(setq browse-url-generic-program (executable-find "conkeror"))

カスタマイズ

Conkeror のいいところは、柔軟なカスタマイズができるところ。

\$HOME/.conkerorrc に設定ファイルを置くと読み込んでくれる。

.zshrc のように、自分だけの .conkeorrc をつくろう。

以下は、自分の設定です。

Tips はここにかかれている。http://conkeror.org/Tips

モードラインにアイコン表示

///////////////////////////////////////////////////////////////
//  Mode-line
//  http://conkeror.org/ModeLine?highlight=%28mode-line%29
///////////////////////////////////////////////////////////////
// funky icons in the modeline
require("mode-line.js");

load_paths.unshift("chrome://conkeror-contrib/content/");
require("mode-line-buttons.js");
mode_line_add_buttons(standard_mode_line_buttons, true);

ホームページ

homepage = "http://www.google.co.jp";

リンクの数字を大きくする

//////////////////////////////////////////
// Big Hint Number
//////////////////////////////////////////
register_user_stylesheet(
    "data:text/css," +
        escape(
            "@namespace url(\"http://www.w3.org/1999/xhtml\");\n" +
            "span.__conkeror_hint {\n"+
            "  font-size: 18px !important;\n"+
            "  line-height: 18px !important;\n"+
            "}"));

ショートカット指定

//////////////////////////////////////////
// shortcut
//////////////////////////////////////////
interactive("open-google", "Go to google.co.jp", "follow",
    $browser_object = "http://www.google.co.jp/");
interactive("open-gmail", "Go to gmail", "follow",
    $browser_object = "http://gmail.com/");
interactive("open-calendar", "Go to calendar.google.com", "follow",
    $browser_object = "http://calendar.google.com/");
interactive("futurismo", "Open Futurismo", "follow",
    $browser_object = "http://futurismo.biz");

interactive("futurismo_wiki", "Open Futurismo", "follow",
    $browser_object = "http://futurismo.biz/dokuwiki");
interactive("youtube", "Open Youtube", "follow",
    $browser_object = "http://www.youtube.com");
interactive("feedly", "Open Feedly", "follow",
    $browser_object = "http://feedly.com");
interactive("tomatoes", "Open Tomatoes", "follow",
    $browser_object = "http://tomato.es/");
interactive("github", "Open Github", "follow",
            $browser_object = "https://github.com/tsu-nera");
interactive("youtube-dl", "download youtube video",
            function (I) {
                shell_command_blind("youtube-dl " + I.buffer.display_uri_string);
            });

// open url with new buffer
define_key(content_buffer_normal_keymap, "d", "follow-new-buffer");
define_key(content_buffer_normal_keymap, "f1", "open-google");
define_key(content_buffer_normal_keymap, "f2", "open-gmail");
define_key(content_buffer_normal_keymap, "f3d", "open-calendar");
define_key(content_buffer_normal_keymap, "f4", "youtube");
define_key(content_buffer_normal_keymap, "f5", "feedly");
define_key(content_buffer_normal_keymap, "f6", "futurismo");
define_key(content_buffer_normal_keymap, "f7", "futurismo_wiki");
define_key(content_buffer_normal_keymap, "f8", "github");

ショートカットからいろいろな機能を呼び出し


//////////////////////////////////////////
// webjump
//////////////////////////////////////////
// evernote
define_webjump("clip","javascript:(function(){EN_CLIP_HOST='http://www.evernote.com';try{var%20x=document.createElement('SCRIPT');x.type='text/javascript';x.src=EN_CLIP_HOST+'/public/bookmarkClipper.js?'+(new%20Date().getTime()/100000);document.getElementsByTagName('head')[0].appendChild(x);}catch(e){location.href=EN_CLIP_HOST+'/clip.action?url='+encodeURIComponent(location.href)+'&title='+encodeURIComponent(document.title);}})();");

// hatenabookmark
// http://b.hatena.ne.jp/register
define_webjump("hatena","javascript:(function(){var%20d=(new%20Date);var%20s=document.createElement('script');s.charset='UTF-8';s.src='http://b.hatena.ne.jp/js/Hatena/Bookmark/let.js?'+d.getFullYear()+d.getMonth()+d.getDate();(document.getElementsByTagName('head')[0]||document.body).appendChild(s);})();");

// twitter
define_webjump("twitter","javascript:(function()%7Bwindow.twttr=window.twttr%7C%7C%7B%7D;var%20D=550,A=450,C=screen.height,B=screen.width,H=Math.round((B/2)-(D/2)),G=0,F=document,E;if(C%3EA)%7BG=Math.round((C/2)-(A/2))%7Dwindow.twttr.shareWin=window.open(%27http://twitter.com/share%27,%27%27,%27left=%27+H+%27,top=%27+G+%27,width=%27+D+%27,height=%27+A+%27,personalbar=0,toolbar=0,scrollbars=1,resizable=1%27);E=F.createElement(%27script%27);E.src=%27http://platform.twitter.com/bookmarklets/share.js?v=1%27;F.getElementsByTagName(%27head%27)%5B0%5D.appendChild(E)%7D());");

// readability
define_webjump("readability","javascript:(%0A%28function%28%29%7Bwindow.baseUrl%3D%27//www.readability.com%27%3Bwindow.readabilityToken%3D%27DsMgYF6muHA9dzMgEGyLPuMVRYGxf5DFBRVtx9kf%27%3Bvar%20s%3Ddocument.createElement%28%27script%27%29%3Bs.setAttribute%28%27type%27%2C%27text/javascript%27%29%3Bs.setAttribute%28%27charset%27%2C%27UTF-8%27%29%3Bs.setAttribute%28%27src%27%2CbaseUrl%2B%27/bookmarklet/save.js%27%29%3Bdocument.documentElement.appendChild%28s%29%3B%7D%29%28%29);");

Google 日本語検索

define_webjump("g", "http://www.google.co.jp/search?q=%s", $alternative = "http://www.google.co.jp/");
define_webjump("@","javascript:(function(){prompt('Copy to Clipboard','['+'['+location.href+']'+'['+document.title.replace(/([\[\]])/g,'\\$1')+']'+']');})();");

Emacs との連携

入力フォームで C-i を押す。emacs-daemon が立ち上がっている状態ならば、 Emacs が起動してきて、テキストを入力することができる。

以下の設定が必要.

editor_shell_command = "emacsclient -c";

履歴検索

url_completion_use_history = true; // should work since bf05c87405

// history webjump
define_browser_object_class(
    "history-url", null, 
    function (I, prompt) {
        check_buffer (I.buffer, content_buffer);
        var result = yield I.buffer.window.minibuffer.read_url(
            $prompt = prompt,  $use_webjumps = false, $use_history = true, $use_bookmarks = false);
        yield co_return (result);
    });

interactive("find-url-from-history",
            "Find a page from history in the current buffer",
            "find-url",
            $browser_object = browser_object_history_url);

interactive("find-url-from-history-new-buffer",
            "Find a page from history in the current buffer",
            "find-url-new-buffer",
            $browser_object = browser_object_history_url);

define_key(content_buffer_normal_keymap, "h", "find-url-from-history-new-buffer");
define_key(content_buffer_normal_keymap, "H", "find-url-from-history");

PDF ファイルを FoxitReader で開く

content_handlers.set("application/pdf", content_handler_open);
external_content_handlers.set("application/pdf", "FoxitReader");

おわりに

他にもたくさん拡張があるけれども、キリがないのでこの辺で。

19 Jan 2014, 13:55

世界最高の開発環境~CUIのリズムとハーモニーが生み出す極上の交響楽

ネットサーフィンをしていて、ふとこんな記事を偶然見つけた。

また、同じ時期にこんなつぶやきも偶然見つけた。

 

これらに強く心を突き動かされ、休日2日を利用して最高の作業環境を構築してみた。

最高の開発ツールの条件

よいツールの条件は、

  • 軽快に動作すること
  • コマンドラインであること
  • 開発が活発であること、勢いがあること
  • カスタマイズが可能であること

世界最高の開発環境

この観点で選んだツールたちを以下に列挙。

zsh tmuxは2014年現在でのデファクトスタンダード。

Emacs vs Vimはどちらもそれぞれ優れているが、自分はEmacs派。

Rictyは美しいフォント、molokaiは美しいテーマ、デザイン大事!

ibus-anthyは自分の隠し兵器、親指シフト用。

WMはいいとこ取りをしたXMonad、ターミナルはxmonadと相性のよいurxvt。

OSは、Linuxが大前提、Windowsはありえない。

Mintを選んでいるのはなりゆきだ。

コアな人はArchLinuxを選ぶが、自分はチキンなので可愛いMintを。

XMonadをつかっているところで、もはやMintである意味がないのだが・・・。

また、これらはdotfilesで管理され、常に進化を遂げていく。

CUIの生み出す音楽

CUIをベースとして、お互いのツールが有機的に絡み合あい、ハーモニーを生み出す。

軽快さとストレスフリーな心地よい、CUIのリズムがとても魅力的だ。

最高の開発環境を駆使しながら作業をすることは、極上の音楽の中に浸るようなものである。

19 Jan 2014, 12:53

タイル型ウィンドウマネージャという新たな世界観に衝撃を受けた!XmonadをつかってワクワクCUI生活

GUIのウィンドウを自由自在に操ることができる タイル型ウィンドウマネージャ、Xmonadを導入しました。

[toc]

タイル型ウィンドウマネージャとは

コマンドラインにこだわりはじめると、なんでもかんでもコマンドラインで完結させたくなる。

screenやtmuxのようなマルチプレクサは、とても快適だがそれをGUIでも実施するにはどうすればいいか調べたところ、タイル型ウィンドウマネージャの存在を知った。

タイル型ウィンドウマネージャとは、ウィンドウをコマンドラインで操ることのできるツール。

説明は、Wikipediaに譲るとして、タイル型ウィンドウマネージャを知ったことは、カルチャーショックだった。初めてコマンドラインの世界にふれて、コンピュータにはこういう側面もあるのか、というような感動を受けた。

タイル型WMには様々な種類があるようだ。XmonadとAwesomeが2大勢力のようなので、XMonadの方を導入してみた。

環境

  • Linux Mint 16 Cinnamon

セットアップ

公式サイトの Documentation – Quick start for the impatientに従いセットアップします。

インストール

Linux MintはUbuntuと同様に3つのパッケージが必要。

$ sudo apt-get xmonad
$ sudo apt-get instasll libghc-xmonad-dev
$ sudo apt-get instasll libghc-xmonad-contrib-dev

設定ファイルの作成

$HOME/.xmonad/xmonad.hsに設定ファイルを新規作成する。

もっとも基本的な設定ファイルは以下。Haskellで記述されている。

import XMonad

main = do
xmonad $ defaultConfig

Xmonadの起動

ログアウトする。ログイン画面で、「セッション」とかかれた部分を選択。「XMonad」を選択し、ログインする。ログインすると、なんと真っ黒な画面!

ここでかなりあせったが、実はこれはXMonadでログインしている証拠。あせらず騒がず【右Alt + Shift + Enter】を入力。これで、ターミナルが起動され、操作が可能になる。

Xmonadの使い方

ここまで着たら、ガイダンスに従って操作を覚えていく。

基本をメモ

– mod-shift-return: ターミナル起動

– mod-shift-q: xmonad終了

– mod-p: dmenu起動

– mod-q: 再起動

– mod-space: レイアウト配置変更

– mod-j/k/m: focus変更

– mod-h/l: サイズ変更

– mod-tab: レイアウト移動

manコマンドでも使い方がわかる。

man xmonad

カスタマイズ

一通り操作を覚えたら、カスタマイズを飽きるまで行う。以下のページをベースにカスタマイズ。

dmenuの導入

アプリケーションランチャーである、dmenuを導入する。

$ sudo apt-get install dmenu

Mod-pで上部にランチャーが表示されるので、適当に検索してツールを実行。例えばchromeで検索すると、google-chromeがすぐに引っかかる。

ショートカットキーの変更

Mod Keyはデフォルト 右Altなので、これをカタカナ・ひらがなキーに変更する。(

~/.Xmodmapを新規作成して、以下を書く。既存のmod3をクリアして、Henkan_Modeを設定。

clear mod3
add mod3 = Hiragana_Katakana

キーに対応する名前は、xevを起動して調べることができる。

xmonad.hsの defaultConfig内に以下を追記。

modMask  = mod3Mask,

最後に、以下で有効にする。

xmodmap $HOME/.Xmodmape

起動時にこの設定を有効にするために、~/.xsessionに追記しておく。

これで、使いやすくなったか???いや・・・微妙だ。

ターミナルの変更

ターミナルはMint defaultのgnome-terminalではなくて、軽量なterminalである、unicode-rvxtを利用。xmonad.hsの defaultConfigに以下を追記。

terminal = "urxvt"

XMobar

ステータスバーを表示させるために、xmobarを入れる。他にも、dzen2というツールがある。

$ sudo apt-get install xmobar

次に、設定ファイル~/.xmobarrcを作成。テンプレートを利用してみる。

$ cp /usr/share/doc/xmobar/examples/xmobar.config ~/.xmobarrc

.xmobar/xmobar.hsの mainのすぐ下の行に以下を追記することで、xmonad起動の延長でxmobarを起動することができる。

xmproc <- spawnPipe "/usr/bin/xmobar /home/tsu-nera/.xmobarrc"

キーボードショートカットの設定

以下のように書くことで、キーボードショートカットが設定できる。ここでは、Winキーとの組み合わせで設定

import XMonad.Actions.WindowGo

-- for keyboard shortcut
modm = mod4Mask

`additionalKeys`
 [
 ((modm, xK_e), runOrRaise "emacs" (className =? "Emacs"))
 , ((modm, xK_t), runOrRaise "urxvt" (className =? "URxvt"))
 , ((modm, xK_g), runOrRaise "chrome" (className =? "Google-chrome-stable"))
 ]

クラス名は、このコマンドを端末から実行して、+ のカーソルで調べたいWindowをクリックする。

xprop | grep WM_CLASS

背景の設定

fehという軽量な画像ビューアーで表示する方法が載っていたので、これを利用。

インストール。

sudo apt-get install feh

以下で背景を設定できる。

feh --bg-scale ~/Pictures/wallpaper/moonlight.png

これを.xsessionに書くと、なぜか動作しなかった。しかたがないので、.profileに記入した。

ファイルマネージャー

Mintのファイルマネージャー、nemoを利用すると、勝手にデスクトップを変更されるので、nemoは –no-desktopモードで起動する。aliasを.zshenvに切る。

alias nemo='nemo --no-display'

ショートカットでフルスクリーン

Mod + Spaceを押したときのデフォルトでは、複数回キーを押さないとフルスクリーンにならないので、これを改善。以下のサイトを参考に設定した。これは便利!

まとめ

ほかにも、いろいろと細かい設定が必要だけれども、きりがないので今日はこんなところで。

いろいろな作業をコマンドラインで実施することができるので、とても快適。しかし、残念ながらマウスを使わざるを得ないところもある。たとえば、ブラウザ操作のコピぺはマウスに頼らざるを得ない。

タイル型WMとの出会いはとても感動的だ。

さらなる精進をつんで、立派なCUIマスターになりたい。

19 Jan 2014, 11:47

省エネ時代の軽快ターミナル!rxvt-unicode(urxvt)でサクサクターミナル生活

軽量なターミナルである、rxvt-unicodeを試してみました

urxvtとは

rxvt-unicode(urxvt)とは、軽量なターミナル。

  • Unicode対応
  • 設定ファイルによって、自由にカスタマイズ可能
  • クラッシュしらず
  • 小メモリ、爆速の軽快さ。

などなどの特徴がある。軽量なためxmonadとの相性がよいと、xmonadのサイトで紹介されていたため、ターミナルを乗りかえてみた。

以下でインストール。

sudo apt-get install rxvt-unicode-256color

カスタマイズ

カスタマイズは、~/.Xdefaultsに設定を記入することで実施する。環境は、Linux Mint.

以下のサイトのXdefaultが大変参考になりました。ありがとうございます。

フォントの設定

Rictyを設定。アンチエイリアスも有効に設定。

URxvt.allow_bold:           false
URxvt*font: xft:Ricty:size=12:antialias=true

背景を透過にする

背景に画像を設定して、ターミナルは半透明にすることにする。以下を参考にした。

以下を追記。

urxvt*shading: 80
URxvt*inheritPixmap: true

色テーマをmolokaiにする

色テーマを鮮やかなmolokaiにする。ここを参照。

.Xdefaults結果

余計なツールバーもないし、軽いし、カスタマイズ自由、なかなかいい感じ。

参考

16 Aug 2013, 10:43

C++でCSVファイルの読み込み、書き込みをする方法メモ

C++でCSVファイルを扱う方法を調べてみましたので、メモします。

ヘッダファイルには、以下のインクルードが必要。

#include<fstream>
#include<iostream>

using namespace std;

出力

ofstreamを使います。

ofstreamでファイルを出力ストリームとして開き、<<演算子で書き出します。

書き出すときに、カンマを入れます。

開くときは、ofs(ファイル名)で開ける。ofs.close()処理はなくてもOK.

入力

ifstreamでファイルを入力ストリームとして開き、>>演算子で読み込みます。

カンマで区切るのが少しテクニックが必要!getlineをつかって、カンマをウマク検出します。getlineのために、

#include<string>

も必要となる。

getline関数は、文字列として読み込むので、文字列から数値に変換が必要な場合は、sstreamを使って変換します。

#include<ssteam>

string token;
int    hoge;
stringstream ss;

ss << token; //数値に変換
ss >> hoge; 

開くときは、ifs(ファイル名)で開ける。ifs.close()処理はなくてもOK.