09 Sep 2015, 13:00

対話力が足りない

年月を重ねると、5年、10年先の先輩に追いつくことができるのだろうか?

最近、このことをよく考える. プログラミングスキルだけを磨いていても、 一人前のプログラマにはなれない気がしてきた. 自分に足りないものはなんだろうか? それは、対話力のような気がしてきた.

対話力が足りない

もともと、会話することに苦手意識がある. 会話のない家庭に育ったからだと思う. 最近、自分の会話力のなさをよく痛感するようになった. 対話する力が自分には欠けている.

対話力は、理解力と説明力に分解できる. 両者に共通していることは、一番大切なことを伝えるということだ.

理解力

<div class="outline-text-3" id="text-orgheadline2">
  <p>
    理解力は、相手の言っていることを理解すること. 話の中で、一番言いたいことを見つけ出して、 それを一段高い視点からとらえる行為. たとえば、進捗報告を聞くとすると、なにが原因で遅れが生じているのか、 ということが、もっとも聞きたいことだ。
  </p>
</div>

説明力

<div class="outline-text-3" id="text-orgheadline3">
  <p>
    説明力は、相手に言いたいことを伝えること. 話の中で、一番言いたいことを相手に伝えなければいけない. 伝えたいことと、その根拠を論理立てて相手に伝える行為.
  </p>
</div>

対話力をつけるにはどうすればいいか?

以下が、対話力克服のために考えた改善方法だ.

  • 失敗記録をつける
  • 反復練習をする
  • 話を高い視点から眺める
  • 一番言いたいことを意識する

理解力

<div class="outline-text-3" id="text-orgheadline5">
  <p>
    理解力をつけるためには、 論理的に話の流れを分解するクセをつける. 目の前の言葉の羅列から一歩ひいて、 相手の言いたいことを理解するように努める.
  </p>
</div>

説明力

<div class="outline-text-3" id="text-orgheadline6">
  <p>
    説明力をつけるには、 はじめに結論を言ってそのあとに理由を述べるクセをつける. 話の流れが、支離滅裂にならないように注意する. 失敗したら、その結果をメモ帳につける. 再び失敗しないように家でシミュレーションをするようにする.
  </p>

  <p>
    小さな努力を積み重ねないと、なにも自分は変わらない.
  </p>
</div>

04 Sep 2015, 15:07

プログラミングの喜びを集めてみた

プログラミングがつまらない. 人生、行き詰まった感がある. ブログもあまり書いてない.

そこで、今日はプログラミングの楽しさを集めてみて、 そこからプログラミングの楽しさを演繹的に導いてみよう.

そして、そこから自分の NextAction を考えてみる.

  <div id="outline-container-orgheadline2" class="outline-2">
    <h2 id="orgheadline2">
      プログラミングの喜びとは
    </h2>

    <div class="outline-text-2" id="text-orgheadline2">
      <p>
        以下の5つにまとめられる.
      </p>

      <ul class="org-ul">
        <li>
          創造: Create
        </li>
        <li>
          解決: Solve
        </li>
        <li>
          成長: Grow
        </li>
        <li>
          動作: Move
        </li>
        <li>
          奉仕: Serve
        </li>
      </ul>
    </div>

    <div id="outline-container-orgheadline3" class="outline-3">
      <h3 id="orgheadline3">
        創造の喜び
      </h3>

      <div class="outline-text-3" id="text-orgheadline3">
        <p>
          創り出す. それは、ワクワクする, 楽しいものだ. 自分のアイデアを、動作するコードとして実現できる.
        </p>

        <p>
          なにかをつくることに夢中になり、時間を忘れて没頭する. 人は夢中でなにかを作り上げている時に、幸せになれる.
        </p>

        <p>
          また、それは、自分だけのもの.オリジナルな作品, マスターピース.
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline4" class="outline-3">
      <h3 id="orgheadline4">
        解決の喜び
      </h3>

      <div class="outline-text-3" id="text-orgheadline4">
        <p>
          問題を解決したときの喜び.
        </p>

        <p>
          バグや不具合の原因調査をして、解決できたときはうれしい. 難しい論理を考えて、実装できたときはうれしい.
        </p>

        <p>
          数学の問題が解けたような気分. 頭の中が晴れ渡るような、いわゆる Aha 体験が味わえる.
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline5" class="outline-3">
      <h3 id="orgheadline5">
        成長の喜び
      </h3>

      <div class="outline-text-3" id="text-orgheadline5">
        <p>
          学生のときの勉強と違って、プログラミングの勉強は実務に直結する. 数学や国語と違って、今日学んだことが、明日の仕事に役立つ. 知識は力なり. 学んだことを仕事で応用できると思うと、やる気が出る.
        </p>

        <p>
          また、知識と知識がつながって、新しい発見をする. わからないことが、わかるようになる. 新しい世界が開ける. 過去の自分よりもスマートなプログラムがかけるようになる&#x2026; これらはとてもうれしい.
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline6" class="outline-3">
      <h3 id="orgheadline6">
        動作の喜び
      </h3>

      <div class="outline-text-3" id="text-orgheadline6">
        <p>
          プログラムは、つくったものが目の前で動作する. フィードバックがすぐに得られるところが魅力.
        </p>

        <p>
          自動化された処理が連続して、流れていくのを見るのは快感だ.
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline7" class="outline-3">
      <h3 id="orgheadline7">
        奉仕の喜び
      </h3>

      <div class="outline-text-3" id="text-orgheadline7">
        <p>
          つくったプログラムは、他人に利用してもらうことで、 他人の役に立つことができる. 人々に幸福と感動を与えることだってできるかもしれない.
        </p>

        <p>
          誰かに喜んでもらえる、これってうれしいことだ.
        </p>
      </div>
    </div>
  </div>

  <div id="outline-container-orgheadline8" class="outline-2">
    <h2 id="orgheadline8">
      つまらない
    </h2>

    <div class="outline-text-2" id="text-orgheadline8">
      <p>
        次に、プログラミングがつまらない原因を考えてみた.
      </p>
    </div>

    <div id="outline-container-orgheadline9" class="outline-3">
      <h3 id="orgheadline9">
        仕事がつまらない
      </h3>

      <div class="outline-text-3" id="text-orgheadline9">
        <p>
          平日、休日、時間があるときは、努めてプログラミングの勉強に時間を 割いてきた. しかし、仕事ではもう4ヶ月もプログラミングをさせてくれない.
        </p>

        <p>
          今日、ようやくプログラミングの仕事が与えられた. 1メソッド1000行のうんコードのテストコードを書く作業. テスト通るわけなく挫折感だけ味わう.これで気が滅入った.
        </p>

        <p>
          こんな作業をするために、自分は、プログラミングの勉強をしてきたのだろうか? 現実は、破綻した工程のなかでうんコードを生み出す自由しかない。
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline10" class="outline-3">
      <h3 id="orgheadline10">
        勉強がつまらない
      </h3>

      <div class="outline-text-3" id="text-orgheadline10">
        <p>
          つまらない、その理由は、理解できないから.
        </p>

        <p>
          ここ数ヶ月、いろんな本を読んでは挫折し続けてきた. 自分の理解力のなさをいやというほど痛感した. 自分は、頭が悪い.
        </p>

        <p>
          薄く浅く、いろんな知識に触れてきたものの、 自分の血肉となっている知識が見つからない. 薄い知識はやがて時間とともに忘れてしまう. 虚しさだけが残る.
        </p>
      </div>
    </div>
  </div>

  <div id="outline-container-orgheadline11" class="outline-2">
    <h2 id="orgheadline11">
      自分への処方箋
    </h2>

    <div class="outline-text-2" id="text-orgheadline11">
      <p>
        ここからどうするか?
      </p>

      <p>
        プログラマをやめちまうという選択肢もあるが、 もう少しだけ頑張ってみたい. 自分の可能性を捨てたくない.
      </p>
    </div>

    <div id="outline-container-orgheadline12" class="outline-3">
      <h3 id="orgheadline12">
        アプリケーションをつくり公開する
      </h3>

      <div class="outline-text-3" id="text-orgheadline12">
        <p>
          自分のアイデアを実現するアプリケーションをつくろう.おもちゃをつくろう. そして、そのアプリを公開して、みんなに使ってもらいたい.
        </p>
      </div>
    </div>

    <div id="outline-container-orgheadline13" class="outline-3">
      <h3 id="orgheadline13">
        平易な本をしっかり理解する
      </h3>

      <div class="outline-text-3" id="text-orgheadline13">
        <p>
          挫折感をあじ合わない程度の本に挑戦して、読み切ろう. 達成感と自信が、今の自分には必要だ.
        </p>
      </div>
    </div>
  </div>

26 Aug 2015, 13:12

Playで JSONを扱う方法のメモ(Java)

Play Frameworkの JSONを扱う方法についてのメモです.

  • JSONデータを受け取る方法
  • JSONデータを返す方法

やること

以下の3ステップ.

  1. conf/routesでエントリポイントを定義
  2. app/controllersに コントローラ追加
  3. URL アクセス

Environment

  • Play 2.4.2

Jsonデータを受け取る方法

  1. conf/routesでエントリポイントを定義 ————————————–
POST    /test/jsonreq               controllers.MyJsonSample.sayHello2()
  1. app/controllersに コントローラ追加 ————————————-

name を受け取って、Hello をつけて返す.

public Result sayHello2() {
    JsonNode json = request().body().asJson();
    if(json == null) {
        return badRequest("Expecting Json data");
    } else {
        String name = json.findPath("name").textValue();
        if(name == null) {
            return badRequest("Missing parameter [name]");
        } else {
            return ok("Hello " + name);
        }
    }       
}   
  1. URL アクセス —————
curl -H "Content-Type: application/json" -d '{"name":"tsu-nera"}' http://localhost:9000/test/jsonreq

Jsonデータを返す方法

  1. conf/routesでエントリポイントを定義 ————————————–
GET     /test/jsonresp              controllers.MyJsonSample.sayHello()
  1. app/controllersに コントローラ追加 ————————————-

テストした構造は、ObjectNodeの中にObjectNodeを渡す.

public Result sayHello() {
    ObjectNode result = Json.newObject();
    result.put("exampleField1", "Hello world!");
    result.put("name", "tsu-nera");

    ObjectNode result2 = Json.newObject();
    result2.put("subField1", "foo");
    result2.put("subField2", "bar");
    result.put("exampleField3", result2);

    return ok(result);
}   
  1. URL アクセス —————
 curl  http://localhost:9000/test/jsonresp

{"exampleField1":"Hello world!","name":"tsu-nera","exampleField3":{"subField1":"foo","subField2":"bar"}}

Code

package controllers;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import play.*;
import play.mvc.*;

import play.libs.Json;

public class MyJsonSample extends Controller {

    public Result index() {
        return ok();
    }

    public Result sayHello() {
        ObjectNode result = Json.newObject();
        result.put("exampleField1", "Hello world!");
        result.put("name", "tsu-nera");

        ObjectNode result2 = Json.newObject();
        result2.put("subField1", "foo");
        result2.put("subField2", "bar");
        result.put("exampleField3", result2);

        return ok(result);
    }   

    public Result sayHello2() {
        JsonNode json = request().body().asJson();
        if(json == null) {
            return badRequest("Expecting Json data");
        } else {
            String name = json.findPath("name").textValue();
            if(name == null) {
                return badRequest("Missing parameter [name]");
            } else {
                return ok("Hello " + name);
            }
        }       
    }   
}

24 Aug 2015, 13:27

Play frameworkでHello World (Java)

Javaで有名な Webフレームワーク、Playで Hello Worldをしてみました. (=\^ー゜)ノ

Install

参考: install

最新版のactivator バイナリを以下から取得.

ダウンロードした圧縮ファイルを解凍し、任意のディレクトリに配置. Playの実行ファイルactivator へ環境変数PATHを設定.

以下を実行し、しばらくまつ(結構時間かかる). ツールのダウンロードが走る.

$ activator ui

http://localhost:8888 にアクセスしてドキュメントが見えればインストール完了.

Hello Play !!

Hello worldをしてみる.以下の手順にしたがいます.

まずは、プロジェクト作成 (=\^ー゜)ノ

$ activator new my-first-app play-java

activatorを起動して、いろいろダウンロード.

$ cd my-first-app
$ activator run

これで http://localhost:9000 にアクセスすると、Welcome ページが見える.

view で hello world

app/view/index.scala.htmlをひらき、Hello Worldを追記.

@(message: String)

Hello, Play!!

再度 Webにアクセスすると、 Hello, Playの文字が (´∇`)

controllers で hello world

次に、 app/controllers/Application.javaを開き printlnを追記.

package controllers;

import play.*;
import play.mvc.*;

import views.html.*;

public class Application extends Controller {

    public Result index() {
        System.out.println("Hello, Play!!");

        return ok(index.render("Your new application is ready."));
    }

}

再度, http://localhost:9000 にアクセスしてみると、 コンソール画面に. Hello, Playの文字が (´∇`)

ここでの感動ポイントは、*リコンパイル不要* ということ. Javaだろ?! 動的言語かよ!! (=\^ー゜)ノ

オリジナルのエントリポイント

オリジナルのエントリポイントをつくってみる. conf/routesを編集する. ここでエントリポイントを定義する.

以下の行を追加. 記法は、Scalaのようだ.

# My Sample
GET     /test/:number               controllers.MySample.index(number: String)

つづいて、オリジナルの controllerを作成. app/controllers/MySample.java

package controllers;

import play.*;
import play.mvc.*;

public class MySample extends Controller {

    public Result index(String number) {
        System.out.println("number is " + number);
        return ok();
    }
}

これで、たとえば、http://localhost:9000/test/200 にアクセスすると、 “number is 200” という文字がコンソールに出力される.

おわりに

Special Thanks

以上、Happy Hacking!!

24 Aug 2015, 10:53

Java Web Framework, Spring & Play Frameworkの比較

Javaの Web フレームワークで有名な Spring と Play について調べてみました.

Spring

Spring Framework - Wikipedia

  • DIとAOP(アスペクト指向)を中核とした豊富な機能.
  • 効率的に複雑なアプリケーションを作成するのに必要な機能を提供
  • ドキュメントも豊富.
  • OSSとしての歴史も長い, 実績あり.

Spring Boot

  • 複雑で豊富なSpring Frameworkを結合したもの.

参考:

Play

Play Framework - Wikipedia

  • 小規模な開発に向いている.
  • 導入が簡単なことや機能がシンプル.
  • Ruby on RailsとDjangoから大きな影響を受けた Scalaでかかれている.
  • Play Frameworkを導入したデフォルトの状態で開発に必要なツールはほとんどそろっている
  • 開発スピードを重視する企業やJava以外の開発者を中心に人気.
  • Spring Frameworkと比較すると実績が少なめ.
  • 生産性に注目し、RESTfulアーキテクチャを目指して開発.
  • ソースの変更時にコンパイルやサーバーの再起動が不要.
  • JSONライブラリ内臓.(jackson/jerkson).

両者の比較

両者をマトリックスで比較してみた.

             Spring    Play

実績 2002 ~ 2007 ~ 開発規模 中−大 小−中 ドキュメント 豊富
コード量 軽量 生産性 高い

まとめ

中規模開発で実績重視ならば、Spring

小規模で素早く開発をするならば、Play

といったところだろうか.

Special Thanks

Javaの Web フレームワークで有名な Spring と Play について調べてみました.

23 Aug 2015, 15:47

シンプルさが前に進む力となる Clojure

最近、Clojureに惹かれる. なぜだろうか? 以下、ポエム.

自分にはプログラミングの思想があるのだろうか?

自分がをプログラミングをするとき、よりどころとなる思想がない。

別に、思想なんかなくたって、プログラミングはできる. でも、どこか、虚しい。それは、人生の意味と同じだ.

つらいときも、苦しいときも、よりどころとなる思想があれば、 立ち向かっていけるような気がする. どんなにつらい境遇にいようとも、たちどころに力がみなぎってくる. 言葉には、そういう力があると信じている.

そんな、力がみなぎる思想が自分のプログラミングにも欲しいのだ.

プログラミング Clojure

プログラミング Clojureの 文章に心を打たれた.

  • Clojureはエレガントだ。
  • Clojureは「Lisp・リローデッド」だ。
  • Clojureは関数型言語だ。
  • Clojureは並行プログラミングを簡単にする。
  • ClojureはJavaを歓迎する。
  • Clojureは速い。

[sourcecode language=”text” title=”” ]
Clojureのあらゆる要素は、次の2つの概念から導かれる — 簡潔さと力だ
[/sourcecode]

カッコいいと思った. それは、理屈なく、感覚的にだ. この憧れの気持ちを大切にしよう. こういう気持ちが、熱意になるんだ.

簡潔さと力

小さいこと、一つずつのステップが大きなことへとつながっていくこと. そのような、考え方が好きだ.

それは、以前, 以下の文章にまとめた.

この文書にも感銘を受けた.

シンプルさが前に進む力となる. Clojureの思想は、魅力的だ. Clojureには、TDDやGTDに似たような魅力を感じている.

簡潔さと力、これを自分の拠り所にしようと思った.

小さく、一つずつ シンプルな関数を積み上げていく. それはやがて、大きな構造をなす. 全体は大きく、しかし秩序だっていて、シンプルにまとまっている. そんな、世界をClojureはみさせてくれるのだろうか?

22 Aug 2015, 14:50

org-modeでマイクロブログ!! org-agendaに twitterのつぶやきを表示する方法

org-agendaに twitterのつぶやきを表示してみました.

これらの関連記事のまとめになります.

方法

以下のようなRuby スクリプトをかいて、自分のつぶやきをorg形式で保存. rubyからtwitterのtweetを取得するために、twitter gemを利用.

#!/usr/bin/ruby
require 'twitter'
require 'pp'

client = Twitter::REST::Client.new do |config|
  config.consumer_key        = ""
  config.consumer_secret     = ""
  config.access_token        = ""
  config.access_token_secret = ""
end

lines = nil

# ファイルに保存してあるツイートを一旦読込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "r") do |file|
  lines = file.readlines
end

# ツイートを配列に挿入
client.user_timeline("tsu_nera").each do |tweet|
  t = tweet.created_at.dup.utc.localtime
  lines << "** <#{t.strftime("%Y-%m-%d %H:%M")}> #{tweet.text}\n"
end

# 重複除去
lines.uniq!

# 書き込み
File.open("/home/tsu-nera/gtd/journal/twitter.org", "w") do |file|
  lines.each do |line|
    file.puts line
  end
end

以下のような感じで保存される.

** <2015-08-22 22:43> 投稿テスト
** <2015-08-22 22:23> twitterの投稿をorg-agandaからみることができるかどうかテスト
** <2015-08-22 21:51> clojureを写経してばかりいるけど、自分で一からかける気がしないなぁ。
** <2015-08-22 19:21> test
** <2015-08-20 21:59> 名言を書き溜めてEmacsからランダムに参照するというライフハック。https://t.co/DYmuvM3Faq
** <2015-08-16 23:19> courseraの講義受けて同じようにアルゴリズム取引に挑戦したけど、全く儲からずに泣いている自分がここにいます。 / “自家製プログラムでアルゴリズム取引に励む個人投資家 - WSJ” http://t.co/VzE8Rl9aTc
** <2015-08-10 01:06> ドラクエ3の性格占い、しあわせものだった。
** <2015-08-09 22:17> 集中力がおちたと最近とても感じる。
** <2015-08-09 20:51> clojureで為替レートを取得する処理を書いてみた。https://t.co/lUgKXdfp2o
** <2015-08-09 14:45> walkcar http://t.co/xakyqwcqid
** <2015-08-09 14:42> walkcarほしい。会社の通勤使いたい。これで遅刻しなくてすむ。https://t.co/Tu0trSq4tf
** <2015-08-09 13:34> ニューラルネットワークによる自動作曲。信じられない…。http://t.co/WD2NAwFXxN
** <2015-08-08 14:22> 最近、無駄についつい本を買って積ん読してしまう。でも、FXで湯水のごとくお金がなくなっていくので、もうどうでもいいやと思えてきた。
** <2015-08-08 05:58> @kanata_56 違う言語を学ぶと見える世界も変わりますね。
** <2015-08-08 04:00> ネストの深さは悪しきものだと思っていたが、今はカッコの深さがカッコいいと思う今日この頃。
** <2015-08-08 01:33> もう3か月も仕事でプログラミングしてない。こんな状態が続くなら畜生転職だ。
** <2015-08-08 01:29> 今週も仕事が暇で辛かった。
** <2015-08-06 19:19> かった!よむ! http://t.co/306Ai5M6LF
** <2015-08-04 04:19> 4時なのに眠れない。明日の会社のC言語テストはズタボロだな。
** <2015-08-03 23:16> ランボー怒りのシャワー浴びよ

このファイルを org-agenaの対象ファイルに指定する.

(setq org-agenda-files '("~/gtd/main.org"
                         "~/gtd/inbox.org"
                         "~/gtd/journal/journal.org"
                         "~/gtd/journal/twitter.org"
                         "~/gtd/habits.org"))

これで、org-agenda view をみると、 twitterのコメントが時間つきで表示されているのだ.

なにができるようになったか

以前, org-journalに書き溜めたコメントを org-agendaでみるハックを書いた.

今回、twitterのつぶやきが org-agendaで見られるようになった. このことによって、

  • 公開したいつぶやきは、twitterへ
  • 非公開のつぶやきは、 org-journalへ

というように分けることができるようになった. どちらの書き込みにも、ミニバッファから投稿できるようにした.

twitterをミニバッファ経由での書き込みにするには、以下の記事を.

org-journalへミニバッファからコメントを書くには、 以下の関数を呼べばいい.

(defun org-journal-from-minibuffer (x)
  "write from minibuffer"
  (interactive "sEnter message: ")
  (let ((tweet-message
         (concat "** " (format-time-string org-journal-time-format) x "\n")))
    (write-region tweet-message nil
                  (concat org-journal-dir org-journal-file-format) 'append))))

これで、個人のつぶやきをミニバッファから書き溜めて、 org-agendaという統一 viewで閲覧することができるようになった.

以上、Happy Hacking!!

08 Aug 2015, 10:54

xmobarに org-clockの状態と時刻を表示する超コネタ

org-clockと xmobarを愛用しているひとのための超コネタ.

org-clockの状態を xmobarに表示します.

clock状態を表示する

以下のスクリプトをまずは用意して、パスの通った場所におく.

  • xmobar-clocking-monitor.sh
#!/bin/bash
if [[ $(emacsclient --e '(org-clocking-p)') == 't' ]] ; then
    echo "<fc=grey,#000000>"
else
    echo "<fc=white,#ff0000>"
fi

.xmobarrcの設定はあとで書きます.

clocking時間を表示する

以下のelispを書くと、現在の時間をファイルに吐き出してくれる.

(display-time)
(defun esf/org-clocking-info-to-file ()
  (with-temp-file "~/tmp/clocking"
    ;; (message (org-clock-get-clock-string))
    (if (org-clock-is-active)
        (insert (format "org: %d (%d/%d) min"

                        (- (org-clock-get-clocked-time) org-clock-total-time)
                        org-clock-total-time
                        (org-clock-get-clocked-time))

                )
      ) ;;(org-clock-get-clock-string)
    )
  )
(add-hook 'display-time-hook 'esf/org-clocking-info-to-file)

.xmobarrcの設定

以下のように設定を書く. これで、xmobar上に、clock状態と clocking時刻が表示される.

Config { font = "-misc-fixed-*-*-*-*-10-*-*-*-*-*-*-*"
       , borderColor = "black"
       , border = TopB
       , bgColor = "black"
       , fgColor = "grey"
       , position = TopW L 90
       , lowerOnStart = True
       , persistent = False
       , commands = [ Run Cpu ["-L","3","-H","50","--normal","green","--high","red"] 10
                    , Run Memory ["-t","Mem: <usedratio>%"] 10
            -- , Run Swap [] 10
                    , Run Battery ["Bat0"] 600
                    , Run Com "xmobar-clock-monitor.sh" [] "orgClock" 10
                    , Run Com "sh" ["-c", "cat ~/tmp/clocking"] "orgShow" 10
                , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10
            ]   
       , sepChar = "%"
       , alignSep = "}{"
       , template = "%cpu% | %memory% | %battery% }{ <fc=#ee9a00>%date%</fc> %orgClock%clock</fc> %orgShow%"
       }

以上、Happy Hacking!!

08 Aug 2015, 07:45

org-clockでのタイムトラッキングを絶対に忘れない方法

Emacs org-modeの org-clocking機能は、 とても便利なタイムトラッキングツールで気に入っている.

しかし、よく時間をはかるのを忘れる。なんとかできないかと考えたお話.

時間をはかっていないとgntpでデスクトップ通知

時間計測中かどうかは、org-cloking-pという関数で分かる. この真偽を5秒ごとに監視して、時間計測をしていなかったらデスクトップ 通知をウザったく出すことにした.

EmacsでGrowlデスクトップ通知をするには、以下のライブラリが使える.

以下のように設定を書いた. What are you doing??

(defun org-clocking-alart ()
  (unless (org-clocking-p)
    (gntp-notify 'alert "What are you doing!!"
                 "You should start clocking ('・_・`)"
                 "localhost")))
(run-at-time t 5 'org-clocking-alart)

これはウザい….(‘・_・`)

clock-in / out でも通知

ついでに、clockin,out時にも通知がでるようにした. これはいい.

(add-hook 'org-clock-in-hook
          (lambda ()
            (gntp-notify 'alert "Clock In"
                         "Happy Hacking! (^o^)/"
                         "localhost")))

(add-hook 'org-clock-out-hook
          (lambda ()
            (gntp-notify 'alert "Clock Out"
                         "Good Job!"
                         "localhost")))

clockin で 時間見積り

ついでについでに、clock-inするときに、時間見積りを必ずするようにした.

(add-hook 'org-clock-in-prepare-hook
          'my/org-mode-ask-effort)

(defun my/org-mode-ask-effort ()
  "Ask for an effort estimate when clocking in."
  (unless (org-entry-get (point) "Effort")
    (let ((effort
           (completing-read
            "Effort: "
            (org-entry-get-multivalued-property (point) "Effort"))))
      (unless (equal effort "")
        (org-set-property "Effort" effort)))))

以上、Happy Hacking!!

02 Aug 2015, 10:25

elscreenでeshellを開く小技

elscreenでeshellを開く小技を思いついた.

やりたいこと

elscreenで別タブを開いて、そこに新規にeshellを立ち上げたい.

elscreen-diredやelscreen-wlはあるのに、eshellはなかった.

必要なもの

別のシェルを新規に起動するために、multi-eshellを利用する.

設定

これで、 C-c t bで やりたいことが実現できる.

(require 'multi-eshell)
(setq multi-eshell-shell-function '(eshell))
(setq multi-eshell-name "*eshell*")

(defun elscreen-esh ()
  (interactive)
  (elscreen-create)
  (multi-eshell 1))
(global-set-key (kbd "C-c t b") 'elscreen-esh)

おわりに

最近 eshellをほとんど常用中.

eshell-zがでてきて最近ますます便利になった.

zshよりもeshellだよね!

以上、Happy Hacking!!