01 Jun 2014, 08:20

TaskJugglerを利用してorg-modeからガントチャートを作成してみる

はじめに

org-modeでタスク管理をしているのだけれども、 いくつかのプロジェクトをガントチャートで見る方法がないか調べてみた。

TaskJugglerというツールが使えそうなので、ちょっくら試してみた。

TaskJugglerについて

TaskJugglerは、オープンソースのプロジェクト管理ツール。

特徴は、以下。

  • ガントチャート
  • コマンドラインベース
  • プレーンテキスト管理

なんとも自分にとってはうれしい内容。

10年以上つづいているプロジェクトらしく、 ドキュメントが充実しているところがさらにうれしい。

Install

<div class="outline-text-3" id="text-2-1">
  <p>
    Rubyでかかれているので、gem installでいける。簡単簡単。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">% gem install taskjuggler

% tj3 –version TaskJuggler v3.5.0 - A Project Management Software

  <ul class="org-ul">
    <li>
      <a href="http://www.taskjuggler.org/tj3/manual/Installation.html#Installation">Installation</a>
    </li>
  </ul>

  <p>
    サンプルプロジェクトを試してみる。
  </p>

  <div class="org-src-container">
    <pre class="src src-language">wget http://taskjuggler.org/tj3/examples/Tutorial/tutorial.tjp

tj3 tutorial.tjp

  <p>
    htmlが生成される。Overview.htmlを開いてみる。
  </p></p>
</div></p>

Org-modeでつかう

org-modeには、taskjugglerを使うためのelがすでにはいっている。以下をrequireする。

(require 'ox-taskjuggler)

<p>
  以下のコマンドでorgからtjpに変換できる。
</p>

<ul class="org-ul">
  <li>
    org-taskjuggler-export
  </li>
  <li>
    org-taskjuggler-export-and-
  </li>
  <li>
    org-taskjuggler-export-process-and-open
  </li>
</ul>

<p>
  org-exportの一部として動くのでよい。
</p></p>

サンプル

Resourceを設定しないと、デフォルトでリソースが tsu-neraになるが、 -という文字でsyntax errorになるので、allocate属性をつけた。

 * TaskJuggler search                   :taskjuggler_project:
 ** test
    :PROPERTIES:
    :task_id:  taskjuggler
    :allocate: tsune
    :Effort:   2h
    :END: 
  
 * Resources                           :taskjuggler_resource:
 ** Developers
    :PROPERTIES:
    :resource_id: tsune
    :END:

<p>
  <img src="http://lh4.ggpht.com/-PRa1tPiOxow/U4rhSe3INKI/AAAAAAAABEo/9u73Ez3Pp1s/2014-06-01-171555_796x882_scrot.png" /> </div>
</p>

まとめ

<div class="outline-text-2" id="text-5">
  <p>
    これは、使いこなせば強力なツールになりそうだ。org-modeとの連携がいい。
  </p></p>
</div></p>

その他。

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

<div id="outline-container-sec-6-1" class="outline-3">
  <h3 id="sec-6-1">
    Special Thanks
  </h3>

  <div class="outline-text-3" id="text-6-1">
    <p>
      TaskJuggler Offical Document
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.taskjuggler.org/tj3/manual/toc.html">Index</a>
      </li>
    </ul>

    <p>
      org-manual
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://www.gnu.org/software/emacs/manual/html_node/org/TaskJuggler-export.html">TaskJuggler export &#8211; The Org Manual</a>
      </li>
    </ul>

    <p>
      github
    </p>

    <ul class="org-ul">
      <li>
        <a href="https://github.com/taskjuggler/TaskJuggler">taskjuggler/TaskJuggler</a>
      </li>
    </ul>

    <p>
      ちょっとふるい。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://orgmode.org/worg/org-tutorials/org-taskjuggler.html">Creating Gantt charts by Exporting to TaskJuggler</a>
      </li>
    </ul>

    <p>
      TaskJuggler 3に対応した記事。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://orgmode.org/worg/exporters/taskjuggler/ox-taskjuggler.html">Exporting Gantt charts with Taskjuggler v3 (tj3)</a>
      </li>
    </ul>

    <p>
      日本語の記事。
    </p>

    <ul class="org-ul">
      <li>
        <a href="http://ichiroc.hatenablog.com/entry/2010/05/16/000500#">org-mode で管理しているプロジェクトをガントチャートにする &#8211; ichiroc subset</a>
      </li>
    </ul>
  </div></p>
</div>

<div id="outline-container-sec-6-2" class="outline-3">
  <h3 id="sec-6-2">
    Environment
  </h3>

  <div class="outline-text-3" id="text-6-2">
    <ul class="org-ul">
      <li>
        Ruby 2.0.0
      </li>
      <li>
        TaskJuggler 3.5
      </li>
      <li>
        Linux Mint 16
      </li>
    </ul>
  </div></p>
</div></p>

15 Jan 2014, 12:58

GTDの規律に従い生産性Up!!3分後にデスクトップ通知と音を鳴らすワンラインスクリプト(Linux)

GTDの規律には、3分以内に片付くタスクはその場で処理して、3分以上かかるものはとりあえずInboxにつっこむというものがある。

コマンドラインからストップウォッチを3分だけ起動したいと思い、そのような方法を考えました。

environment

  • Linux Mint 16

sleep を利用

あまり考えない方法だと、sleepコマンドで時間を止めて、指定時間たつとコマンドを実行するというもの。

$ sleep 3 && echo test

echoだと気づかないので、できれば音やデスクトップ通知が欲しいところだ

cvlcを利用して音を出す

VLCプレーヤーのコマンドラインを利用して音を鳴らす。–play-and-exitで一回だけ再生。

$ cvlc --play-and-exit /usr/share/sounds/LinuxMint/stereo/desktop-login.ogg

notify-sendでデスクトップ通知

Linuxでは、send-notifyでデスクトップ通知ができる。

インストール

notify-sendは libnotify-binに含まれている。

$ sudo apt-get install libnotify-bin

以下で実行して、通知か表示されるか確認

$ notify-send test

notification-daemonのインストール

Gnome terminalからコマンドを実行すると動作するが、Guakeターミナルから実行すると、動作しない。

原因は欲分からないが、notification-daemonというものをインストールすると、Guakeからも動作するようになった。

$ sudo apt-get install notification-daemon

デーモンを起動する。

$ /usr/lib/notification-daemon/notification-daemon &

これで通知がでるようになった。時間指定のオプション -t が動作しないのが気になるが。。。

起動時にデーモン起動

notify-osdからnotification-daemonに切り替える | smokycat.infoを参考に、起動時にデーモンを起動するようにしてみる。

$ sudo emacs /usr/share/dbus-1/services/org.freedesktop.Notifications.service

3行目をコメントアウトして、4行目を追加。どうも、デフォルトでは notify-osdが起動していたようだ。notify-osdだと動かなかったと推測

[D-BUS Service] 
Name=org.freedesktop.Notifications
#Exec=/usr/lib/x86_64-linux-gnu/notify-osd
Exec=/usr/lib/notification-daemon/notification-daemon

タイマを改良

コマンドラインから利用できるカウントダウンタイマを探してみた。。結構時間をかけて探したけれども、結論としては、このツールがよい。

コマンドラインからカウントダウンやストップウォッチが起動できる。こんなツールを探していた!ダウンロードしてインストール。

$ ./configure
$ make && make install

たとえば、こんな感じ。

# 3sec countdowwn
% utimer -c 3
Time Remaining: 0 days 00:00:00.000 (0.000 seconds)

結論

このワンラインスクリプトに決定

/bin/sh -c 'sleep 180;notify-send "time over";cvlc --play-and-exit /usr/share/sounds/LinuxMint/stereo/desktop-login.ogg' &

05 Jan 2014, 12:25

ストレスフリーの境地、だからGTDとTDDが好きだ

medium_4774087006

2年以上前の自分のつぶやきをふと見つけたので、これについて書いてみる。

TDDとGTDの共通点

TDDが好きだ。その理由はTDDがGTDに似ているからだ。

[//www.youtube.com/embed/ie_HQwQ5YZE]

以下、似ている点を列挙してみる。GTDでのタスクという言葉は、TDDではテストという言葉に置き換えることができる。

  • [リスト化]TODOリストにしたがってタスクをこなしていく。
  • [最小化]大きな問題を最小単位のタスクまで分解して取り組む。
  • [ボトムアップ]タスクを確実に積み上げて大きなことを成し遂げる。
  • [NextAction]具体的で着手可能なNextActionのタスクを常に意識する。
  • [フロー状態]目の前のタスクに集中する。
  • [規律]規律(Kata)を遵守することでプロジェクトを推進する。

TDDを知らないころ、GTDにしたがってNextActionをこなしていくことを生活の規律にしていた。なので、GTDのように開発もしたいなと思っていた。TDDを知ると、その方法論にすぐに魅了されてしまった。

ストレスフリー

GTDのなかでとくに好きな考え方は、以下のようにたとえられるもの。

  • ストレスフリー
  • 水のように澄み切った状態
  • 働くだけの幸せバカ

空手が両者と関係しているのも、偶然ではないだろう。(6:30の空手パンチ!)

ストレスフリーはGTDの売り文句だけれども、TDDにもその感じは当てはめることができる。フリー状態とはいえないまでも、TDDをしていると、安心と集中を得ることができる。だから、TDDが好きだ。

人生の意味について

人生の意味はなんだろうかと思う。人生の意味はないと思う。

それだと不安に耐えられないので、無理やりにでも目標を定めてその達成を目指し、そこに意味を見出そうとしている。そして、目標の達成のために集中している状態が、幸せだと思っている。

また、目標は達成できない大きな目標ではなくて、小さなもの、達成可能なもの、瑣末なものがよい。ションベンをより遠くまで飛ばすことだって素晴らしい。小さくて具体的な次の一手を決めて、その達成に対して精一杯集中する。その過程におけるストレスフリーな状態が素晴らしい。

ターゲットを決めて前に進むことが大事。そういう人生観に、GTDやTDDの考え方はマッチしている。

だから、GTDやTDDが好きだ。

参孝


photo credit: net_efekt via photopin cc

08 Dec 2012, 02:24

PSP実践のOSS「The Software Process Dashboard」を評価する。

会社のプロジェクトでは、作業時間計測が流行っている。(というより、強制的)
ツールに縛りはないため、みんなはTaskCoachを利用している。

しかし、ヘビーOutlookerな自分はOutlookカレンダーに集計時間をリアルタイムで出力できるTimeEditionを利用している。

時間計測は生産物とセットで評価しないと意味がないと常日頃思っているので、時間計測とともに管理できるツールはないかなと思った。また、Webでチャートを簡単に公開したいと思った。

PSPとは

PSPとは、プレーステーション・ポータブルの略である。
いや、派手に間違えた、Personal Software Processの略。パーソナルソフト開発作法。
個人のソフトウェア開発における時間管理の方法。CMMIの個人バージョン。

詳しくは以下のリンクを参照。

GTDに心酔している自分は、タスクに対して時間を割り当てることは、面倒なのでしない。
大きな枠組みで、時間を計測したい。
ここでは、PSPを実践するためのオープンソースProcess Dashboardを使ってみる。

Process Dashboardをインストール

The Software Process Dashboard | The Software Process Dashboard Initiative

以下のリンクより、ダウンロード。

インストーラを起動して、聞かれるままにOKを押せばよい。
ちなみに、日本語対応しているのが嬉しい。

Process Dashboardを使ってみる

image

UIはシンプル。JAVAでできている。
ホットキーに対応していないのが(一番)つらいところだ。
基本的なタイムトラッキングの機能は揃っている。

  • 階層でのプロジェクト管理
  • 手動での時間修正
  • タイムログの表示
  • 時間集計結果

などなど。時間集計結果のチャートはWEB画面でも出力することができる。

LOC Counter

LOC というのは Life Of Codeの略で、要はステップ数のこと。
時間とコードのステップ数を対応して管理できるみたい。
Subversionがデフォルトでサポートされている。

しかし、自分の要件としてはドキュメント作成時間やテスト項目も管理したいので、これでは足りない。

image

基本機能は、こんな感じ。
拡張機能を利用するためには、アンケートに登録する必要がある。しかし、会社で利用して、さらにはよければ他人の展開することも考えると、これは障害になるかな。

03 May 2012, 09:25

Outlookでタスクシュ-ト

Outlookでタスクシュ-トをする機能を実装した。

と、いっても実際にしたことは大したことではないのだけれど。

選択したタスクの予測時間の合計を現在時間に足して表示しただけ。

本当ならば、今日のタスクも自動的に検索できればいいけれど、

そこはまだスキルが足りない。手動選択が楽だ。

フォ-ム File:TaskChuteForm:

Private Sub UserForm_Initialize()
  Dim End_Time
  Dim End_Hour
  Dim End_Minute
  Dim TotalWork_Time As Long
  
  TotalWork_Time = GetSelectedTotalWorkTime()
  End_Time = DateAdd("n", TotalWork_Time, Time)
  End_Hour = Hour(End_Time)
  End_Minute = Minute(End_Time)
  
  TaskChuteForm.ListBox1.AddItem Hour(Time) & ":" & Minute(Time)
  TaskChuteForm.ListBox2.AddItem End_Hour & ":" & End_Minute
End Sub

TithOutlookSession:

Function GetSelectedTotalWorkTime()
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection
    Dim TotalWork_Sum As Long
    Dim x As Integer
 
    TotalWork_Sum = 0
    
    Set myOlExp = Application.ActiveExplorer
    Set myOlSel = myOlExp.Selection
    For x = 1 To myOlSel.Count
        TotalWork_Sum = TotalWork_Sum + myOlSel.Item(x).TotalWork
    Next x
    
    GetSelectedTotalWorkTime = TotalWork_Sum
End Function

02 May 2012, 12:14

Outlookタスクの実働時間の記録/予定表への出力

以下の機能を新たに実装してみた。

  • Outlookタスクの実働時間の記録
  • Outlookタスクの予定表への出力

タスクの起動をイベントプロシージャで監視して、起動したら起動時間を記録

タスクの終了をイベントプロシージャで監視して、終了したら起動時間と現在時間との差分を実働時間に記録

それとともに、起動時間と現在時間を利用して予定表に予定を出力。

今は1つのタスクにした監視ができないので、ここは要改善!

File: ThisOutlookSection

Dim WithEvents myInspectors As Inspectors
Dim WithEvents myTaskItem As TaskItem
Private Sub Application_Startup()
  Set myInspectors = Outlook.Inspectors
End Sub
Private Sub myInspectors_NewInspector(ByVal Inspector As Inspector)
  If TypeName(Inspector.CurrentItem) = "TaskItem" Then
    Set myTaskItem = Inspector.CurrentItem
  End If
End Sub

'タスク起動
Private Sub myTaskItem_Open(Cancel As Boolean)
  '起動時間を記録
  Call TaskTrace_StartTimer
End Sub

'タスク終了
Private Sub myTaskItem_Close(Cancel As Boolean)
  ' 予定表にログを生成
  Call TaskLog_Create(myTaskItem.Subject)
  '実働時間を獲得
  myTaskItem.ActualWork = (myTaskItem.ActualWork + TaskTrace_GetActualWorkTime())
  Set myTaskItem = Nothing
End Sub

File: TaskTrace

'---------------------------------------------------------------------
'タスクの起動時間を実働時間に記録する
'---------------------------------------------------------------------
Option Explicit

Dim start_time

Public Sub TaskTrace_StartTimer()
  start_time = Now()
End Sub

Public Sub TaskTrace_StopTimer()
  start_time = 0
End Sub

Public Function TaskTrace_GetActualWorkTime()
  Dim current_actualwork_time
  TaskTrace_GetActualWorkTime = DateDiff("n", start_time, Now())
  start_time = 0
End Function

Public Function TaskTrace_GetStartTime()
  TaskTrace_GetStartTime = start_time
End Function

File: TaskLog

'---------------------------------------------------------------------
' 予定を生成
'---------------------------------------------------------------------
Public Sub TaskLog_Create(jobNAME As String)
  Dim fldCalendar As Folder
  Dim aITEM As AppointmentItem
  
  'フォルダ指定
  Set fldCalendar = Session.Folders("Outlook").Folders("予定表").Folders("TaskLog")
  Set aITEM = fldCalendar.Items.Add
  
  With aITEM
    .Subject = jobNAME
    .Body = "Samplebody"
    .Start = TaskTrace_GetStartTime()
    .End = Now
    .Save
  End With
End Sub

参考リンクはココ

http://outlooklab.wordpress.com/category/outlook-vba-%E3%83%9E%E3%82%AF%E3%83%AD/

01 May 2012, 07:36

Outlookで複数タスクを登録するマクロ

Outlookで複数タスクを登録するマクロを作ったので、ソ-スを公開。

たとえは、マインドマップでタスクを洗い出したあと、

登録するためには今までは1つずつ登録が必要だったが、

これで一括登録可能だ。

Module1

Dim InputText As String

'与えられたリストからタスクを複数生成するマクロ
Sub CreateMultiTasks()
Dim max As Integer
Dim Subjects() As String

'入力フォ-ム表示し、複数タスク取得
UserForm1.Show

Subjects() = Split(InputText, vbCr) '複数タスクを分割
max = UBound(Subjects()) 'タスク数を取得

For i = 0 To (max - 1)
  Call CreateTask(Subjects(i)) 'タスク生成
Next i

End Sub

'入力テキスト取得
Function GetTextBox(ByVal text As String)
InputText = text
End Function

Module2

Sub CreateTask(jobNAME As String)
 'タスクオブジェクト生成 (olTaskItem=3 TaskItemオブジェクト)
  Dim oITEM As TaskItem
  Set oITEM = Application.CreateItem(olTaskItem)
    
  With oITEM
    '.Display  '画面表示

    'データセット
    .Subject = jobNAME  '件名
    .Categories = "!Inbox" '分類項目に!Inboxを追加
    
    'タスクを登録
    .Close 0  'olSaveで閉じるときに保存(セーブして終了)
  End With
End Sub

UserForm1

Private Sub OK_Click()
Call GetTextBox(TextBox1.text)
Unload Me
End Sub
Private Sub Cancel_Click()
End
End Sub

30 Apr 2012, 23:19

Outlookのタスクをショ-トカットから生成するマクロ

Outlookのタスクをショ-トカットから生成するVBScriptを作った。

参考にしたのはこのペ-ジ

http://www.ken3.org/cgi-bin/group/vba_outlook_Task.asp

上記リンクのスクリプトを少しカスタマイズした。

具体的には

  • 分類項目にInboxを割り当てる機能を追加
  • ツꀀ開始日や期限の割り当てを解除
  • タスク件名を入力するメッセ-ジで[ GTD Prosess Start!!]と表示

さらにvbsのショ-トカットにショ-トカットキ-を割り当てて(Ctrl+Alt+Tとか)

どこからでも起動できるようにした。

ショ-トカットキ-を起動するにはショ-トカットをデスクトップかスタ-トメニュ-に置かなければいけないらしい。

http://support.microsoft.com/kb/134552/ja

デスクトップに置くのは自分の美学が許さないので??

[ スタ-トメニュ-] > [すべてのプログラム]を右クリックして、その先の[プログラム]の下にショ-トカットをセット。

これで頭に浮かんだアイデアを即座に Outlookという GTD システムへキャブチャ-できる。