24 May 2015, 17:32

ハードウェアの仕組みを学ぶ!coursera で From Nand To Tetris Part1 を受けた

数か月前に コンピュータシステムの理論と実装 という本が発売された.

そして、この本の発売とちょうど同じタイミングに coursera で From NAND to Tetris の講義が始まった.

あまりにグッドタイミングなめぐり合わせに喜びつつ、講座を受けてみました.

FROM NAND TO TETRIS の紹介

有名なコンピュータ講義とその教材

これは、海外では有名なコンピュータ講義である

TED にも登場して講座の紹介をしているよう.

特徴

講座の特徴は、NAND というもっとも基本的な論理素子から、 毎週自分の手でコンピュータに必要な部品を作成していくところ. 難しく聞こえるかもしれないけれども、 そこはよく講座ができているので、なんとかなる.

実際の VHDL や C 言語などをつかうのではなくて、 学習用に開発された Hack 言語というものを利用する. この Hack 言語というものが、実際のコンピュータのエッセンスを残しつつ、 余分な仕様をはぎおとしてシンプルにしているため、 学習者は最低限の努力と知識で部品をつくることができる.

また、各週ごとに部品が完成しなくても、次の週に進むと、 あらかじめ用意された、前回までのツールが利用できるので、 途中で挫折することはない. 毎週、あらたな気分で挑戦できる.

著者直々の講義

Noam 先生と Shimon 先生直々に動画で説明をしてくれる. ここに、coursera とともに学習を進めることのうれしさがある.

自分は、動画を一通り見た後に、参考程度にコンピュータシステムの理論と 実装の本をながめるようにしていた.

coursera の講義は、Part1, Part2 にわかれて提供される. 今回は、Part1 で、ハードウェアの部分を学習した.

毎週の講義と参考書の章は 1 対 1 で対応していて、 毎週 1 章を読んでいく.

また、毎週 assignment として、部品の作成をして、 成果物は coursera の採点システムに提出する.

感想

山登りに似た達成感

コンピュータの部品を一歩一歩部品を作成して行くことで、 途中から自分の作成した成果を見直すと、山の頂上に立ったような達成感、 全能感を感じることができた.

抽象によるコンピュータの構築

また、NAND という単純なゲートから、徐々に部品を組み上げていく様は、 まるで、単純な公理から定理を導いていくような趣きもある.

一つの部品を作成すると、部品がどうやって動くのかということを ブラックボックスにすることができて、部品は何をするのかだけを知ればよい.

それは、ソフトウェアでもよくでてくる抽象化というやつだ。

邦訳の 抽象と実装 という意味を実感した.

ハードウェアがなんなのかということがわかった

自分は組み込みソフトの開発者なので、ハードウェアを理解していないこと で、話について行けなくなることがたまにある.

先日も、ハードよりの講演会に参加したのだが、話を聴いていてもまったく わからずに悔しい思いをした.

CPU, レジスタ, メモリ, などなど、説明を読んで理解していた気になっ ていた. 今回、自分の手で作り上げることによって、それらがいったいなに をやっているのか、理解できた気がした.

それらは知らなくてもいいこと

しかし、ハードウェアの知識はソフトウェア開発に必要かといえば、 必要ないことだ。

自分自身の人体の仕組みをしらなくたって、人間は生きていける. 機械語を理解することと、DNA を理解することは、 同じことだとともう. それらは、必要ない.

では、なぜ学ぶのかといえば、一つは好奇心、もう一つは不安感のため. 知らなくたってなんとかなるものの、得体のしれないブラックボックスの 中身を知らずに使いつづけるのもあまり気分がいいものではない. なので、不安感を解消するために、安定感を得るために、学ぶ.

自分の組んだプログラムがハードウェア上でどのようにして 動作するかを知ることにより、ソフトウェアに自信を得ることができる.

勉強メモ

以下、作成した部品のメモ.

week1: ゲートへ

論理ゲートとは、ブール関数を実現するための物理デバイス.

ゲートをまとめたものを回路, チップという.

トランジスタ

2 値のデータ表現を電気で実現する物理デバイス. スイッチング技術.

電気であることが一つのポイント. 別の物理性質を用いてゲートを作成することもできる.

NAND

もっとも基礎的な論理ゲート.

論理ゲート

すべてのブール関数は NAND NOT をつかって表現できる. (AND, OR, NOT ) を含む.

  • NOT (x) = (x NAND x)
  • AND (x, y) = NOT (x NAND y)
  • OR (x,y) = NOT (NOT (x) AND NOT (y))

NAND を実現した物理デバイスが自由に利用できれば, どのようなブール関数もハードウェアとして作成できる.

マルチプレクサ

ふたつ以上の入力をひとつの信号として出力する機構.

マルチプレクサによって、ハード的に if 文を表現することができる.

作成した成果物

これらの部品は、HDL で作成していく.

  • And
  • Or
  • Xor
  • Not
  • Not16, And16, Or16, Mux16 … 16 進数の 論理ゲート

  • Mux … マルチプレクサ

  • DMux … デマルチプレクサ

  • Mux8Way16, DMux8Way, DMux4Way .. 16 進数のマルチプレクサ

week2: ALU へ

算術ゲートは、算術計算をおこなうためのゲート.

コンピュータの命令は 2 進数の加算に還元できることが多い.

算術計算を行うゲートは、ALU という CPU 内部の論理算術ゲートに集約される

作成した成果物

  • HalfAdder … 半加算器
  • FullAdder … 全加算器
  • Add16 … 16 進加算
  • Inc16 … 16 進インクリメンタ
  • ALU … 論理算術ゲート

week3: Memory へ

この章で、*状態* という概念がでてくる.

順序回路

ひとつ以上のフリップフロップ回路が組み込まれているもの.

以下のような機能をもつ.

  • 状態を保つ
  • 状態を操作する

状態がかわるのは, クロックが次の周期に移行したとき. (c.f. 組み合わせ回路は即時)

(D) フリップフロップ回路

順序回路の中でもっともプリミティブなもの. NAND とともに, もっともプリミティブなものとして考えられる.

フリップフロップ回路の実装方法はいろいろある. NAND から構築する方法もある.

レジスタ

データを記憶したり取り出したりすることができる順序回路. - レジスタ (コンピュータ) - Wikipedia

メモリ(RAM)

レジスタがたくさんあつまったもの.Random access Memory.

各レジスタには、一位のアドレスが割り振られている.

作成した成果物

  • Bit, Register … レジスタ
  • RAM8, RAM16, RAM64, RAM512, RAM4K, RAM16K … RAM
  • PC … プログラムカウンタ

week4: 機械語へ

機械語

機械語とは、コンピュータの CPU で直接実行される一連の命令.

一つ一つの命令が行う仕事は極めて限定されており、 CPU のレジスタやメモリ上の単位データに対して、 読み込みやジャンプ、ALU といった操作を実行する。

機械語は, レジスタ、プロセッサを用いて、メモリを操作する.

作成した成果物

  • 乗算プログラム
  • 入出力操作プログラム

week5: コンピュータアーキテクチャへ

CPU

中央処理装置, プロセッサとも.

仕様で決められた一連の命令セットを実行できる.

記憶装置上にあるプログラムと呼ばれる命令列を順に読み込んで 解釈・実行することで情報の加工を行う.

ノイマン型アーキテクチャ

CPU を中心として、メモリデバイスを操作し、 入力デバイスからデータを受け取り、出力デバイスへデータを送信する.

  • メモリ
    • データメモリ
    • 命令メモリ メモリ上にプログラムを保持するところがノイマン的.
  • CPU
    • ALU
    • レジスタ
    • 制御ユニット
  • レジスタ
    • データレジスタ
    • アドレスレジスタ
    • プログラムカウンタレジスタ 次にフェッチする命令メモリ上のアドレスを保持して、 一つ命令を実行する度にインクリメントしていく.
  • 入出力装置 メモリマップド I/O によってメモリ操作のように制御

作成した成果物

  • CPU
  • メモリ
  • コンピュータ

week6: アセンブラへ

アセンブリ言語

機械語を人間にわかりやすい形で記述する、代表的な低水準言語である.

作成した成果物

  • アセンブラ

これは、Ruby で実装してみた.

23 May 2015, 15:06

自分はプログラミングが好きなのだろうか?

自分は、果たしてプログラミングが好きなのだろうか?

ドラクエをしているほうが楽しい.

快感からプログラミングをしている…それは欺瞞

プログラムが動いたときの喜びを味わいたいからプログラミングをするんだ.

なにかを作り上げたという達成感のためにプログラミングをするんだ.

知的探求心を満たすためにプログラミングをするんだ.

たしかに、それはあるだろう。 しかし、それはきれいごとで、他人の目を気にした言い分ではないだろうか?

快感からやっている、知的好奇心からやっている、それらは言い訳ではないだろうか?

無能さを感じる

デバッグが苦痛だ. どうして解決できないのか… 自分の無能さを舌なめずりしている苦さを感じる.

また、他人のブログを読んでいると、世の中には、たくさん優秀な人たちがいるなぁと思う.

自分は学生のころから、それほど頭がいいわけではない。 どうやっても、頭のいい人においつけない.

義務感と焦燥感からプログラミングをしている

昔から、いつも自分の進むべき道を探してきた.

自分ば、将来一体なにになるのだろうか?とても不安だった.

いろいろあって、プログラマという道を選んだのだった. それは、つい最近だった. もっと、学生のときからプログラミングをまなんでいればよかったと、 いつも思う.

長年かかったけれども、ようやく絞った自分の道だ、 これを誤った選択だとしたくない.

プログラミングの先になにがあるのか

プログラミングの先になにがあるのか?目指すべき目標は?

虚しさを埋めるためにプログラミングをしている気がする.

結局、自分の存在が虚しくて、 それを埋めるためにプログラミングという旗をめがけて生きている. なにかを目指して頑張っていないと、空虚さに押しつぶされてしまう.

自分は好きでプログラミングをしているわけではない.

  • 意図的にプログラミングという目標を定めて、
  • 義務的にしている気がしてならない、

これが今日の結論.

プログラミングの先にはなにもない。もともとが空虚なところから始まっているのだ.

シーシュボスの神話のようだ。

17 May 2015, 10:47

Actor モデル初体験! Akka で Hello World してみる

Scala

Scala の Akka で Hello World をしてみました.

スレッドとはちょっと違う、Actor モデルの初体験!

Akka とは

Akka とは、Scala で Actor モデルベースの平行処理を書くときの、 デファクトスタンダードなライブラリだ.

Hello Akka!!

ソース

以下のファイルを src/main/scala/HelloScala.scala に作成.

import akka.actor.Actor
import akka.actor.ActorSystem
import akka.actor.Props

class HelloActor extends Actor {
  def receive = {
    case "hello" => println("World!")
  }
}

object Main extends App {
  // デフォルトの Actor を作成
  val system = ActorSystem("HelloSystem")

  print("Hello, ")

  // 送信先 Actor を作成
  val helloActor = system.actorOf(Props[HelloActor], name = "helloactor")

  // メッセージ送信
  helloActor ! "hello"
}

build.sbt 作成

以下の build.sbt ファイルを作成

name := "My Project"

version := "1.0"

scalaVersion := "2.10.0"

resolvers += "Typesafe Repository" at "http://repo.typesafe.com/typesafe/releases/"

libraryDependencies += "com.typesafe.akka" % "akka-actor_2.10" % "2.2-M1"

実行

コンソールより実行

> sbt run

[info] Running Main 
Hello, World!

返信ありのケース

sender を利用して、折り返し処理を実施.

import akka.actor.Actor
import akka.actor.Props
import akka.actor.ActorSystem

class HelloActor extends Actor {
  def receive = {
    case "introduce" => 
      print(",")
      sender ! "world"
  }
}

class CounterMain extends Actor {
  val system = context.actorOf(Props[HelloActor], "hellocounter")

  print("Hello")
  system ! "introduce"

   def receive = {
     case "world" =>
       println(" World!!")
       context.stop(self)
   }
}

object Main extends App {
  val system = ActorSystem("HelloSystem")
  val actor = system.actorOf(Props[CounterMain], name = "counterMain")
}

参考

14 May 2015, 12:51

近い未来のリアルな技術!自動運転技術の動画ブックマーク

本日は東京ビッグサイトにて、一年に一回のイベント、ESEC へ. 車の自動運転に関するセミナーを受講しました.

車の技術に疎い自分には、 きくことみることとても刺激的で楽しい時間を過ごせました.

車の運転技術、今や成熟の時です。*2020 年には市街で自動運転が実現する* そうです.

こういう技術は以下のように呼ばれているらしい

ここだけの話、車に乗ることが怖いペーパードライバーの自分にも、 ビュンビュン車をかっ飛ばすことができるんだという夢を抱きつつ、 今日は、自動車技術の話題や動画を収集してみました.

Google(Google Car)

Google がデモ動画を発表したことによって、 自動運転が世間からに注目されるようになりました.

TED でのプレゼン

ニューヨークでは、デモ車が街中を走っているとか.

Apple(iCar)

iPhone の次は、iCar を製造するとか.

BMW

世界初、ドリフト走行ができる自動運転.

ウェアラブルな装置とも連携するものをかんがえているよう.

トヨタ

時速 100km の自動運転に成功. 高速道路の自動運転はもう目前?!

自動運転技術が成熟する 2020 年、トヨタと Google の戦いが幕を切る.

その他

安部首相が自動運転自動車にのって日本の技術に驚いている.

つい先日、DeNA が自動車業界に決死の覚悟で飛び込み.

おわりに

自分が知らないうちに、 自動運転がここまで実現可能になっていることにまず驚いた. そして、近い将来に、世の中の車も変わっていくことにワクワクする.

きっと、未来の人は、*車を自分で運転していたなんて時代もあったんだよ* なんといって、驚く時代もくるのだろう.

車業界の競争は、とてつもなく厳しいものになりそうだ. 自分はこの波に、どういう形で巻き込まれていくのだろうか?

06 May 2015, 15:41

寝ヤセするぞ!食事を工夫して寝ている間に脂肪を燃やす方法まとめ

太った.

体重計にのってビックリした. 半年間で 5kg 太ってしまった.ズボンもきつい.

これは大変だ、なにか対策を!とおもいいろいろ調べた結果、 食事制限でのダイエットに挑戦することにした.

この記事は、その宣言と、戦略のまとめです.

原因として考えられることは….

そもそも、なぜ太ってしまったのか? というのも、いつもあまり食べていないのだ.

原因としては、2 つ考えられる.

運動しない

半年前、会社から家まで 3 分のところに引っ越してから、 運動はしないどころか、ほとんど歩きすらしなくなった.

まったく、カロリーが燃えないような日常だった.

食生活メチャクチャ

朝食と昼食を一緒にとり、夜は一日の中で一番がっつり食べる. これがいけないのだろう.

また、ここ最近は、昼はパスタ、夜はレトルトカレーを週 5 くらい食べてた. 食事の栄養が偏り過ぎている.

また、夜マックでポテトを食べてたりした. この辺が原因.

寝るだけダイエットを目指す

話かわって、最近は、ライフログにハマっている.

なので、この危機も、_カロリーログで乗りきろう_ と思う.

いろいろしらべていくと、夜までにブドウ糖を使い切ってしまったら、 寝ている間に脂肪が燃えるらしい??!!.

これだ ヽ(゜ェ゜)ノ

名づけて、 寝ヤセ だ!

これでいこう. というわけで、食事によって変わることにした.

食事のセオリーまとめ

以下、ネットでググった知識を列挙.

血糖値が下がるタイミングに合わせて食事をすると、 消化がスムーズになり、脳もカラダもすぐに活性化します

  • 1回目6~7時ごろ
  • 2回目10~11時ごろ
  • 3回目16~17時頃

(http://pure-la.net/jamu/dietjamu/diet-eat.htm)

夜に炭水化物を控え、寝る前までにブドウ糖を使いきっておけば、 寝ている間も基礎代謝のために、脂肪がエネルギーとして燃える.

  • 朝:ごはんやパン
  • 昼:肉や魚、卵、揚げ物や油っぽいモノなどのメイン料理
  • 夜:野菜中心

朝: 炭水化物を摂取する時間.

朝の食事は体内時計を正常化するのに効果がある.

朝ごはんでブドウ糖をしっかり吸収した脳は、 仕事や勉強に良い影響を及ぼすことが分かっています (http://eonet.jp/health/special/special31_2.html)

メニュー

  • ごはん, パン
  • 野菜(ジュース)
  • ヨーグルト、バナナ

昼: タンパク質を摂取する時間.

昼食の時間は「炭水化物の消費は朝食時ほどではないが、 脂肪やたんぱく質の消費はもっとも盛んになる」

エネルギーをつくる時間

ごはんやパンなどの主食は少なめにして、 そのかわりおかずをたっぷり食べる、というのがポイント (http://matome.naver.jp/odai/2142233945083086101)

メニュー

夜: 食物繊維を入れる時間

  • ご飯とおかずを組み合わせて 500kcl 以内

メニュー

  • 野菜

野菜に含まれる食物繊維が満腹感を与え、食べ過ぎ防止につながります

  • ナイナイの岡村さんが痩せた!サラダボウルダイエット | スキンケア大学

  • 豆腐・納豆 納豆は低脂肪、低カロリーであり、良質な栄養を多く含みます。納豆に 含まれる酵素は、血液をサラサラにする効果があるので、代謝が上がる という嬉しい効果もあります.

    肉や魚、卵、大豆製品などのタンパク質には「トリプトファン」という 必須アミノ酸が含まれており、ストレス緩和に役立ちます

20 時以降でも太らない安心の食事方法8つのポイント【夜ダイエット】 - NAVER まとめ

明日からのメニュー

以上をもとに、明日からのメニューを考える.

基本、朝と夜は固定メニューにする.昼間の食事で満足するようにする.

  • 朝: お茶漬け
  • 昼: 自由
  • 夜: サラダ

  • バナナ
  • ヨーグルト
  • お茶づけ

もともとお茶づけが好きなので、お茶づけを中心にそえる.

バナナとヨーグルトでたんぱく質をとる.

自由. ただし、肉、魚、野菜を中心にする.

自宅に帰って、肉野菜炒めをつくる. ご飯はお茶椀半分.

野菜にドレッシングをかけて食べる + 納豆.

野菜を中心にする. たぶんあきるので、トッピングを工夫する.

以上、Happy Hacking!!

06 May 2015, 12:51

その場の感情を ライフログ!! org-journal でひとりツイッターする

自分は、あまり twitter につぶやかない.

なぜなら、つぶやくとタイムラインが、ドロドロの鬱ったーにかわるので.

感情は、しかし、どこかに吐き出さないと、健康によくない.

そこで、その場の感情を即座に記録するための仕組みを org-journal で実現したので紹介.

org-journal でできること

org-journal は、Emacs から即座に、日記を書くための elisp.

できることは、

  1. ショートカット(C-c C-j)で journal.org を開く.
  2. 日付を挿入する.
  3. 感情を書き留める.
  4. org-journal を去る.

以下、自分の設定例.

(require 'org-journal)

(setq org-journal-date-format "%x")
(setq org-journal-time-format "<%Y-%m-%d %R> ")
(setq org-journal-file-format "journal.org")
(setq org-journal-dir "~/gtd/journal/")

上記設定では、journal.org ファイルにどんどん書き込んでいくが、 日付ごとに記録するファイルをわけることも可能だ.

実は org-capture でもできる

これだけならば、org-capture でもできないことはない. org-journal は、設定が org-capture に比べて特化している.

org-agenda で一日の振り返り

この機能の好きなところは、org-agenda との連携.

以下のようにタイムスタンプを挿入するように設定して、 journal.org を agenda ファイル対象にすることで、 org-agenda view につぶやきを載せることができる.

(setq org-journal-time-format "<%Y-%m-%d %R> ")

howm で過去ログを検索

howm テキストファイルを evernote のように管理するツール.

howm はデータをひとつのフォルダに保存するのだが、 このフォルダから、org-journal のフォルダにシンボリックリンク をはることで、howm から org-journal 結果が検索できる.

howm には、過去のいろいろな情報を溜め込んでいるので、 過去に相談したくなったら、howm から org-journal が引けるのはうれしい.

以上、Happy Hacking!!

05 May 2015, 23:02

Emacs 起動時のオープニング画面にオリジナルメッセージを出そう

半年前くらいから、使っている小ネタ。

Emacs 起動時に、ようこそ画面を出す方法を紹介します.

オープニング画面でテンションアガル

Emacs 起動時の画面をオリジナルにすることで、テンションが上がります.

これから楽しくハッキングするぞというワクワク感を感じるようになります.

設定例

以下がコードです.

(defvar my-startup-display-message "\nHello Emacs!!\nHappy Hacking (^o^)/\n")

(defun my-startup-display-mode ()
  "Sets a fixed width (monospace) font in current buffer"
  (setq buffer-face-mode-face '(:height 1000))
  (buffer-face-mode))

(defun my-startup-display ()
  "Display startup message on buffer"
  (interactive)
  (let ((temp-buffer-show-function 'switch-to-buffer))
    (with-output-to-temp-buffer "*MyStartUpMessage*"  
      (princ my-startup-display-message)))
  (my-startup-display-mode))

(add-hook 'after-init-hook 'my-startup-display)

以上、Happy Hacking!!

05 May 2015, 16:17

Scala の例外処理について調べたメモ(try-catch, Try[T])

Scala には例外処理の書き方としては、

  • try, catch,finally
  • Option 型 Try

の2つがある.

それぞれ、実際に実装してどんな感じか調べてみました.

try-catch

try-catch で例外を処理する方法. これは、Java における例外処理と同じ.

以下のようなコードを書いた. これを、もう一つの Try[T] で書き換える.

object TryCatch {
  def main(args: Array[String]) {
    try {
      val result = divide(0)
      show(result)
    } catch {
      case e: Exception =>
    }
  }

  def divide(num: Int): Double = {
    try {
      val result = 1/num
      result
    }
    catch {
      case e: Exception =>      
        println("Failure!!")
        throw e
    }
  }

  def show(result: Double): Double =  {
    println(result)
    result
  }
}

Try[T]

このスタイルは、try-catch に比べて以下のようなメリットがある.

  • 複数の例外を紡いで処理を書いていくときに、正常系と異常系を綺麗に分 けてかいていくことができる(for 分とかで)
  • つまり、コードが綺麗にかける.

import scala.util.{Try, Success, Failure} を import して利用する.

object TryCatch {
  def main(args: Array[String]) {
    val result = divide(0)
    result match {
      case Success(v) => show(v)
      case Failure(e) => 
    }
  }

  def divide(num: Int): Try[Double] = Try {
    val result = Try{1/num}
    result match {
      case Success(v) => v
      case Failure(e) =>
        println("Failure!!")
        throw e
    }
  }

  def show(result: Double): Try[Double] = Try {
    println(result)
    result
  }
}

もっと Monadic に!!

main 関数は、以下のように flatMap や for 文を利用して書き換えることができる. この書き換えが Monadic なところなのだけれども、理解不足でこれ以上解説できません.

def main(args: Array[String]) {
  val result = for {
    result  <- divide(0)
    result2 <- show(result)
  } yield result2
}

try-catch が手続的なのに対して、flatMap をつかうと、ずっと宣言的に見える.

def main(args: Array[String]) {
  divide(0).flatMap( result => show(result) )
}

以上、Happy Hacking!!

Special Thanks

04 May 2015, 17:03

ボクの考えた Emacs org-mode による TaskChute の実施方法

最近、自分のタスク管理がズタボロである.

数年前は、ライフハックに熱をあげてバリバリ頑張っていたのだが、 いまやタスクに終われてシクハックに熱をあげているという状態.

具体的には、週末に MOOC の課題に追われてしまう. 本来ならば、毎日コツコツと勉強していればよいのだが、 平日に関係ない割り込みのタスクをしてまう結果、週末にバタバタする.

そこで、自分のタスク管理について、見直してみることにした.

なにが問題か? 課題はなにか?

  • どのくらい自由な時間があるのか
  • どのくらいのタスクをかかえているのか

この 2 つを把握していないところが問題だ.

譬えれば、デパートに買い物にいったものの、 自分がいくらお財布にお金を持っているのか知らない状態. 気づけば、買い物をしすぎて、支払いができなくなっていた…

さらに、問題点を深堀りすると、 一日の仕事量は感覚的に分かるのだけれども、 一週間くらいの 長期間での空き時間とタスクの関係 がわからない.

なので、*1 週間の空き時間とタスクの量を見積もること* が今回の課題.

そこでタスクシュートだ!

作業量を見積もるためのタスク管理手法について、 タスクシュートがつかえそうだった.

タスクシュートは、やることをすべて洗い出して、 一列に並べて処理していくツール. 詳しくは、以下.

今回は、みんな大好き?Emacs org-mode でこれらをどう実現するかを考えた.

org-mode による実現方法

時間を見積もる

org-mode には、時間を見積もる機能があるので、これを利用する.

アジェンダビューから C-c C-x C-c で カラムビューを起動して、 閲覧、編集をする.

カラムビューの設定

以下、カラムビューのための基本的な設定.

; global Effort estimate values
(setq org-global-properties (quote ((
      "Effort_ALL" . "00:05 00:10 00:15 00:30 01:00 01:30 02:00 02:30 03:00"))))
;; カラムビューで表示する項目
;; Column の書式は以下.
;; [http://orgmode.org/manual/Column-attributes.html#Column-attributes
(setq org-columns-default-format "%50ITEM(Task) %10Effort(Effort){:} %10CLOCKSUM_T(Clock)")

以下の設定を書くと、見積り時間を合計して表示してくれる.

(setq org-agenda-columns-add-appointments-to-effort-sum t)

見積りのタイミングは一週間に一度

週のはじめに、一週間分のタスクの洗い出しと見積りを実施する.

自分は、その時にタスクに next タグをつけることによって、 agenda view でフィルタリングできるようにした.

agenda-view の設定は以下.

(setq org-agenda-custom-commands 
      '(
       ("n" "Next Action List"
        tags-todo "next"
        ((org-agenda-prefix-format " %6e ")))))

その日のタスクがいつ終わるかをみつもる

agenda-view で、今日のタスクだけを絞り込み、 カラムビューをみることによって、あと何時間タスクの完了にかかるかを 調べることができる.

agenda-view の設定は以下.ここでは、アジェンダを開くと即座にカラム に移行させている.

(setq org-agenda-custom-commands 
      '(
       ("c" ""
        tags-todo "SCHEDULED=\"<+0d>\"" 
        ((org-agenda-overriding-header "TaskChute TODO")
         (org-agenda-overriding-columns-format "%50ITEM(Task) %10Effort(Effort){:}")
         (org-agenda-view-columns-initially t)))))

時間の余裕を把握する

もともとの課題の解決のために以下のような表を作成した.

Day Free Time Amount time Effort Comment


Sat 12
Sun 12
Mon 0 46 GW Tsu 12 34 GW Wed 12 22 GW Thu 5 17
Fri 5 12

  • どのくらい自由な時間があるのか
  • どのくらいのタスクをかかえているのか

ということをこの表で確認する. どのくらいのタスクというところを、 先ほどの effort の合計見積りの値からもとめる.

時間帯を決める

タスクシュートには、時間帯という考え方がある. その時間帯に実施するタスクを決めることによって、 タスク実施の強制力がかかるというもの.

org-mode では、priority の機能によって実現することにした.

  • A: 04:00 - 07:00
  • B: 07:00 - 10:00
  • C: 10:00 - 13:00
  • D: 13:00 - 16:00
  • E: 16:00 - 19:00
  • F: 19:00 - 22:00
  • G: 22:00 - 25:00
(setq org-highest-priority ?A)
(setq org-lowest-priority ?G)
(setq org-default-priority ?G)

時間を計測する

時間計測は、org-mode のデフォルト機能を利用.

計測結果もまた、agenda view でみることができる. 見積りと比較することで、見積りの甘さをチェック.

さらに、agenda view で v c をおすと、 見積りと実績の差分を強調して表示してくれたりする.

おわりに

歴史は繰り返す、ということを書く.

思い返せば、3 年前の GW に、Outlook でタスクシュートをしようとしていた. 3 年経った今、Emacs によるタスクシュートに挑戦している.

なんだか、同じところをグルグル回っている気がするよ.

02 May 2015, 11:19

ブログテーマを更新しました

ゴールデンウィークなので, やりたかったことをば.

このブログのデザインを変更してみました.

上記のとおり, オシャレでイケイケなサイトを目指そうと思ったのだけれども,い つもの自分らしく途中で諦めて,

結局このザマですよ. (_‘Д`)

見やすさを意識した今回の改造

以下の点にこだわった.

  • 背景を明るくする
  • テーマ色を赤めにする
  • シングルカラムにする
  • 文字を大きくする

今までは小さな文字でチマチマと細かく文章を書いていたのだが, 思い切ってシングルのカラムにして, スペースを広くつかうようにした.

いろいろなサイトを参考にしてみたが, Web デザイナー系のサイトは,シングルカラムが多いように見えた.

このブログの色を赤に決めた. 統一感を出したかったから. その裏には, 挑戦 , 情熱 といった意味を込めた.

サイトのテーマを github で管理

自分の修正を github で公開するようにした.

このリポジトリに以下を貯めていくことで, 知識を集約する.

  • コードスニペット
  • 開発ノウハウ
  • プラグイン覚書

公開する理由は, Emacs のように設定ファイルを管理して public に公開したかったから.

Futurismo は 有料の Wordpress テンプレート 賢威 を利用している.

そのため, テンプレートは自分で手を入れた部分のみをモジュール化して, 公開することにする.

くれぐれも, 賢威の部分は公開しないようにする.

ハッカー未来派宣言の署名ボタンを設置

ハッカー未来派宣言.

このブログの立ち上げ時に執筆してから 3 年が経った. いまだ隠しページのような存在だ.

この宣言文はこのブログの本質にある思想なので, これをもっとアピールするために,シェアボタンをつけた.

なんか, アジャイル宣言やリアクティブ宣言のようじゃないか?

これから

実は, 5 月は病院に入院するので, その間にもう一度サイトの修正をしてみようと思う.

モダンイケイケの本質はなにか?

それは, 動きのあるサイト な気がする.

つまり, JQuery を利用したサイトが,自分にとって, カッコいいと感じる.

そのため, 次は JQuery を導入してみようと思う.