Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

ポモドーロタイマー

ポモドーロタイマー

omoiyari.fmというpodcastが面白しろくて、最近は毎日聴講しています.

Web業界は異分野ですが、マネージメントやチームビルディング等、分野に関わらず活用できそうな"意識の高い"お話が聴ける貴重なコンテンツだと感じています

(有料でもよさそうだけど. 無料のまま続けて欲しい..)

さて、第0回から聴き進めて着ましたが、第22回が衝撃で3日連続で聴いてしまいました。

kakakakakuさんのインパクトにやられてます

#22 「Trello があるので眠れない」 | #omoiyarifm

ツールや自己管理の手法が参考になる部分が多く. リピートしてました.

このブログも今年は触ってなかったのですが。kakakakakuさんに大分刺激を受けたので、なにも考えずブログをスタートしようとおもったしだいです

「ブログを書く技術」を発表した - kakakakakku blog

そこででてくるポモドーロ・テクニックというkakakakakuさんも実践されているお話がありました

自己流ポモドーロを実践している話 - kakakakakku blog

私は30分刻みで休憩無しでやっていたのですが、やはり上の方々は休憩まで考えるのかと勉強になりました。ほとんど勢いで90分ぐらいコーディングしてしまうので、自分を止めてくれるような仕組みが欲しいと思ったので、「作業を強制的に止めてくれる」ポモドーロ タイマーを作ってみます。

とりあえず作る

まずはプロジェクトを立ち上げる。 既存ツールは調べない。手段が目的。

一応ちょい設計

  • 要件1: 25分後にメッセージを表示
  • 要件2: 強制的に作業を止めるように仕向ける
  • 要件3: 強制的に5分間休憩させる

フォームサイズは固定の方がいいでしょう。 「それしかできないがカッコイイ」

フォームのサイズを変更できないようにする - .NET Tips (VB.NET,C#...)

必要な要素は以下のような感じでしょうか

5休憩の部分で上手い設計が必要となりそうですが 手段が目的なので、ひたすら描き続けます。

まずはタイマーを二つ作ります

タイマー処理の利用 - 一定間隔で処理を実行する (C#プログラミング)

とおもったら、ストップウォッチクラスがあった

Stopwatch.Elapsed Property (System.Diagnostics) | Microsoft Docs

カスタム TimeSpan 書式指定文字列 | Microsoft Docs

private int WorkingTimeLimitMin = 25; //分 25;
private int RelaxTimerLimitMin = 5; //分  5;

private Stopwatch stopwatch;

public Form1()
{
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
    // ストップウォッチを初期化
    this.stopwatch = new Stopwatch();
    this.stopwatch.Start();

    // 残り時間を初期化
    label_lasttime.Text = "25";
}
    
private void timer_every1s_Tick(object sender, EventArgs e)
{

    TimeSpan elapsed = this.stopwatch.Elapsed;
    TimeSpan timeLimit = new TimeSpan(0, WorkingTimeLimitMin, 0);
    TimeSpan lastTime = timeLimit - elapsed;



    // 経過時間を表示
    this.label_lasttime.Text = elapsed.ToString(@"mm\:ss");

    // 残り時間 表示
    //this.label_lasttime.Text = timeLimit.ToString(@"mm\:ss");

}

これでカウントアップ(ダウン)ができた.

さて、いくらか25分たったら、アラートを出す

  • 状態遷移
    • wait
    • [Start Action]
    • Working
    • [elapsed > workingTimeLimit]
    • Relaxing
    • [elapsed > RelaxingTimeLimit]
    • wait

enumで状態を作ってそれで管理するか... 行き当たりばったりで、enumで管理するとコードがごちゃごちゃする. それでも最後までいけるか。

enum TimerState
{
    Wait,
    Working,
    Relax
}

private TimerState AppState = TimerState.Wait;

デザイン

色々色をいじっていたら、いうことを聴かなくなった。。。

C# WindowsFormはよくこうなる。よく分からん。

Re[2]: ボタンの背景色がデフォルトに戻らない

C#でColorの値をリストアップしてみる - takoashiの開発記録

なんとかできました。 強制的に最前面表示になり、操作できないようになります。 強制的に最前面・最大画面になるので、他の操作が出来ません。 本アプリ落とすのも大変かもしれません。

フォームを最小化あるいは最大化する - .NET Tips (VB.NET,C#...)

  1. 待機画面

  1. タスク30分タイマ

  1. 休憩5分タイマ

icon

icon作ります 小さいのでこだわっても見えません

でも有るのとないのでは大違いなので気楽に作ります

iconはこちらで作ります

マルチアイコン生成ウェブアプリ - ウェブアプリ - カンタローCGI

Illustratorから500x500のPNGを吐き出し、.icoファイルに変換してもらいます

良い感じではないでしょうか とりあえず小さくなるので、何かあれるだけでいい

READMEを描いてたらアイキャッチ画像が欲しくなってきた。。。

眠い..

癒しのスカイブルーで統一

README

READMEを描かないと。。。

動かせば分かる。はず。。

わかりやすいREADME.mdを書く | SOTA

READMEの良さそうな書き方・テンプレート【GitHub/Bitbucket】 - karaage. [からあげ]

わかりやすい README 駆動開発 - Qiita

これがGo言語とかなら、OSS的な感じになるんだろうなー

リリース

https://github.com/peace098beat/PomodoroTimer

githubにあげました. もし使ってもらえましたら嬉しいです

明日から会社で試してみよう

ふぃ

関連

プログラマならキッチンタイマぐらい作れないと」

初心の頃、キッチンタイマを作ったことを思い出した。

hope-is-dream.hatenablog.com

アジャイルな時間管理術 ポモドーロテクニック入門

アジャイルな時間管理術 ポモドーロテクニック入門

ポモドーロタイマー

ポモドーロタイマー