ポモドーロ・テクニックのためのタイマーアプリを作った

表題の通り、時間管理術「ポモドーロ・テクニック」の実践に特化したタイマーアプリを作ったので公開します。ポモドーロ・テクニックって何?って人は下に説明を書いたので見てね。

下記にリンクしたページからインストール不要で使えるので、ぜひ使ってください。ただし、残念ながらスマホ等のモバイル端末だと画面は崩れてるし、画面閉じたらタイマーが機能しないので使えないです。とは言ってもスマホで集中して仕事する人って少なそうなので多分スマホ対応はしません。

ポモドーロ・テクニック用タイマー

作成までの経緯

キッチンタイマーって意外と壊れるハードなので、何らかのアプリで代用したいという気持ちがまずありました。しかしGoogleで検索して見つかる既存のPCのアプリやスマホアプリなどは、チクタク音やアラーム音がうるさかったり、休憩直後にタイマーが強制的にスタートする仕様だったり、動作が重かったりして、未だに個人的に気に入るものが見つからない。なので結局はスマホにプリインストールされているタイマーアプリを使うことに落ち着くものの、これも毎回時間をセットするのが手間に思えてくる。そういうわけで自分用にポモドーロ・テクニックの実践に特化したシンプルなタイマーアプリを作ったというわけです。普通のタイマーを使うより、ほんのわずかだけ便利なものになっているはず。

ポモドーロ・テクニックとは

ポモドーロ・テクニックとは1980年後半にFrancesco Cirillo氏が考案した時間管理術。集中力を維持しながら、やるべきことを効率よく処理していくことが出来る。

Pomodoro Technique – Wikipedia
(リンク先: Wikipedia)

具体的な方法

下記の手順を繰り返す。用意するものは紙、ペン、キッチンタイマーの3つだけ。

  1. 処理するタスクを決める。
  2. 25分のタイマーをスタートする。
  3. タイマーが鳴るまで、作業を行う。
  4. タイマーが鳴ったら紙にチェックマークを1つ記入する。
  5. チェックマークが3個以下なら5分の休憩を取り、上記2.に戻る。
  6. チェックマークが4個になったら15〜30分の長い休憩を取り、これまでのチェックマークを全て取り消して上記1.に戻る。

家にあるもので気軽に始められるテクニックなので、「作業に集中できないな〜」と思うことがあるならぜひお試しを。

CodeIgniter3でSQLite3を使ってチュートリアルに挑戦したら苦戦した

CodeIgniter3.xのユーザガイドにあるチュートリアルをSQLite3を使って試してみたのだが、設定ミスとエラーでDBが読み込まれず、解決まで思わぬ時間を使ってしまった。
同じ問題に突き当たった人のために解決方法をここに書き残しておく。

前提

開発環境

OS: Windows7 SP1
サーバ: Apache/2.4.23
PHPバージョン: 7.0.15
CodeIgniterバージョン: 3.1.0

サーバ、PHPなどの環境は、BitNamiで構築したWordpressと一緒に入っているものを使用した。

DBファイルの配置

・DBファイルはtest_db.sqlite3という名前で既に用意してあるものとする。
・下記ツリーの通り、applicationディレクトリの下にsqlite3というディレクトリを作成し、そこにDBファイルを置く。

CodeIgniter-3.x
└ application
  └ sqlite3
    └ test_db.sqlite3

私の失敗その1 database.phpの設定

インストール直後はMySQLの設定がされており、ユーザガイドのデータベースリファレンスにもMySQLの例しか載っていない。
また、サーバ要件の記載でSQLiteの項には

・SQLite、 sqlite(バージョン 2)、 *sqlite3(バージョン 3)そして *pdo ドライバを利用

と書いてあり、「そして *pdo ドライバを利用」?pdoを使って設定したほうがいいのか?と思ってしまったりして不慣れな私は迷った。
当然のごとくググってみるとsqlite3を設定する方法とpdoで設定する方法のどちらも出てくるのでさらに迷った。

失敗その1を解決

結局のところ、下記のように設定すれば成功した。ここまで辿り着くことは出来ていたのだが次の項目に書いた「失敗その2」によって間違っているかもしれないと勘違いし、別の方法を試したりして無駄な時間を過ごしてしまった。同様に迷っている人はさっさとこれを丸パクリしてしまえばいい。
「’database’」のところの「APPPATH」というのは、applicationディレクトリまでのパスを現す定数である。

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '',
    'username' => '',
    'password' => '',
    'database' => APPPATH.'sqlite3/test_db.sqlite3',
    'dbdriver' => 'sqlite3',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

私の失敗その2 sqlite3拡張モジュールの有効化

database.phpの設定で「’dbdriver’」のところを‘sqlite3’と設定したら下記のようなエラーが起きた。

An uncaught Exception was encountered

Type: Error

Message: Class 'SQLite3' not found

Filename: C:\Bitnami\wordpress-4.7.2-0\apache2\htdocs\ci\system\database\drivers\sqlite3\sqlite3_driver.php

Line Number: 89

Backtrace:

File: C:\Bitnami\wordpress-4.7.2-0\apache2\htdocs\ci\application\models\News_model.php
Line: 6
Function: database

File: C:\Bitnami\wordpress-4.7.2-0\apache2\htdocs\ci\application\controllers\News.php
Line: 7
Function: model

File: C:\Bitnami\wordpress-4.7.2-0\apache2\htdocs\ci\index.php
Line: 315
Function: require_once

開発環境は違うが下記のサイトに同様の事例が載っている。
このエラーは設定が間違っていたわけではなく、PHPのsqlite3拡張モジュールが有効でなかった場合に起きるようだ。

CodeIgniter 3でSQLite3を使用する(Debian 7 + php-fpm)
(リンク先:Symfoware – Symfowareについての考察blog)

失敗その2を解決

php.iniの編集

Windowsでこのエラーが出る場合、PHPをインストールしているディレクトリにある設定ファイルphp.iniにてsqlite3拡張モジュールを有効化する変更が必要。
この状態ではphpinfo()を実行してもsqlite3の項目が出てこないはずである。

同じくPHPをインストールしているディレクトリにあるextディレクトリを確認してみるとphp_sqlite3.dllというDLLが存在することがわかる。
この名前をphp.iniの中から探すと下記のように先頭にセミコロンが付いている行が見つかる。

;extension=php_sqlite3.dll

このセミコロンを除去し、下記のような状態にする。

extension=php_sqlite3.dll

これが出来たらphp.iniを保存する。

Apacheのリスタート

これをやらなければphp.iniを編集しても反映されないのでいつまでたってもエラーは消えない。
やり方はいろいろあると思うがBitnamiなら下の画像のようなツールが付属しているので、Restartボタンを押すだけだ。

私の場合、php.iniを編集したらApacheをリスタートしなければ反映されないことを知らなかったためここでさらに時間を使ってしまった……。

そして成功

ここまでの操作でphpinfo()を実行した場合には下記画像のようなsqlite3の項目が表示されるようになっているはず。

そして無事にチュートリアルの通り作成出来たニュース表示サイトの画面がこちら。

ググってもつまずいている人がそんなにいないようだったがPHPの開発に慣れている人達はこんなの余裕なのだろうか。
自分は不慣れだったのでここまでがけっこう苦労した。
一応、CodeIgniter3とSQLite3が使えるようになったので、まずは何か小さいWebアプリから挑戦してみたいところ。

Pythonで改行コードを統一する関数

先日、個人的に使うツールをプログラミングしているときに改行コードを気にする場面があった。
文字列中の改行コード(改行文字列)を統一してくれる関数が欲しいが、1から自分で作ってバグったら時間がもったいない。
たぶんどこかにあるだろうとネットで探してみたが、今回使っているPythonで作られたコードはすぐに見つからない。
一方で、PHPのコードはすぐに見つかった。

PHPで改行コードを統一する関数: CRLF, CR, LF が混在してる文字列を LF に変換するなど
(リンク先:Qiita 2012.02.22の記事)

言語は違うが求めていたものと一致している。
短いし、これなら再現できるかな~、なんて思って真似して作ってみた。
結果、あっさり問題は解決。
元コードの作者様とインターネットに感謝!

需要があるかわからないが、今回作ったコードはここで公開しておく。
Python 3.5.1の環境で動作を確認した。

本体

# convert_eol.py
import re

def convert_eol(string, to="\n"):
    return re.sub(r'\r\n|\r|\n', to, string)

ユニットテスト

# test_convert_eol.py
import unittest
from convert_eol import convert_eol

class TestConvertEol(unittest.TestCase):
    def test_convert_eol_cr(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \r CR: \r LF: \r"
        actual = convert_eol(value, "\r")
        self.assertEqual(expected, actual)

    def test_convert_eol_lf(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \n CR: \n LF: \n"
        actual = convert_eol(value, "\n")
        self.assertEqual(expected, actual)

    def test_convert_eol_crlf(self):
        value = "CR + LF: \r\n CR: \r LF: \n"
        expected = "CR + LF: \r\n CR: \r\n LF: \r\n"
        actual = convert_eol(value, "\r\n")
        self.assertEqual(expected, actual)

if __name__ == "__main__":
    unittest.main()

「そんな歯医者で大丈夫か?」歯医者さん選びに重要なこと

歯医者さんの「外来環」届け出状況を確認しよう

歯科医院での機器の使い回しで肝炎やHIVなど重大な病気に感染するリスクがある、というのは聞いたことがある人が多いと思う。そうは言っても対策が思いつかず、通っているところの歯医者さんを信用するしかないだろうと自分は半ば諦めていた。そんな中で先日、少しは安心に近付けるであろう方法を紹介してくれている下記の記事を発見。

機器を使い回さない歯科を探すには
(リンク先:YOMIURI ONLINE ヨミドクター 2017.07.07の記事)

この記事では歯科医院が「歯科外来診療環境体制加算(外来環」という、緊急対応や感染症対策に関して厚生労働省の指定した施設基準をクリアしているということを届け出ているかどうかを確認する方法を紹介してくれている。自分が通っている歯科医院がその届け出をしていないのであれば、通院先を変えることを検討したほうがいいというわけだ。届け出をしている医院であっても、なんらかの悪意や事故で万全の体制でない場合もあるかもしれないが、届け出がされていないところよりは安心できるはず。こういった具体的な情報は大変にありがたい。

というわけで、紹介されていた地方厚生局のサイトで自分の通っている歯科医院が外来環の届け出を行っているかどうかを実際に確認した手順を以下に公開する。けっこう見つけにくかったので、これから確認する人の参考になるはずである。

せっかちな人は一番下のPDF公開ページへのリンクだけ見てもいいかもしれない。

地方厚生局のサイトへアクセスする

下記に各地域別のサイトへのリンクがある。

地方厚生(支)局所在地一覧
http://www.mhlw.go.jp/kouseiroudoushou/shozaiannai/chihoukouseikyoku.html

地方厚生局の一覧

私の住んでいるのは近畿なので、近畿厚生局のサイトに入る。このあたりは、自分の通っている医院にあわせて管轄地域のサイトを選択してほしい。

近畿厚生局サイトトップ

施設基準の届出受理状況を公開しているページを探す

これが個人的には面倒くさかった。地域差はあると思うが上に貼った画像の通りトップページにお知らせのような情報がたくさん出ていて、今回欲しい「外来環」の情報にはすぐにはたどり着けない。
画面をスクロールすると下に貼った画像のようなメニューがあるので、赤で示した「保険医療機関・保険医など」をクリックする。

「保健医療機関・保険医など」をクリック

メニューが一段開くので、さらに「保険医療機関・保険薬局の方へ」をクリックする。実はこれ、いろいろと項目はあるが、「特定医療法人を運営する方へ」以外は全部同じページにリンクされていた。(ややこしいな!)

一段開いたメニューをさらにクリック

そして珍しい整列をした黄色いメニューが登場。さらに「保険医療機関等の情報(指定状況など)」をクリックする。

黄色いメニュー

やっとPDF等をダウンロードできるページに到達したけど、まだ続く。

「保険医療機関・保険薬局の管内指定状況等について」

この中から、「施設基準の届出受理状況(全体)」の項目を探そう。ちなみにここで私は関係ないPDFをダウンロードしてしまったりして余計な時間を使ってしまった。

「施設基準の届出受理状況(全体)」

ここの「歯科」と書いてある行から自分に合う地域のPDFか、Excelファイルをダウンロードする。なお、今回はPDFファイルをダウンロードした前提で進めていく。

「歯科」の行からダウンロード

PDFファイルの中から自分の通っている歯科医院を見つける

PDFファイルを開くと下の画像のように歯科医院の名簿が表示される。この中から自分の通っている歯科医院の名前を検索しよう。地域が間違ってなければ必ず存在するはずだ。

開いたPDF

目当ての歯科医院が見つかったら、「受理番号」の欄を見て、「外来環」の文字があるかどうか確認。けっこう、記載のない歯医者さんが多いねえ~……ええ……。

外来環の文字

こういった形で外来環という記載が有れば一応、大丈夫。無かった人は……次からは外来環の記載のある歯医者さんに変えたほうが……。

私の通っている歯科医院はちゃんと外来環の届け出がされていたので一安心。と言っても比較的安心っていう程度なのが悲しいところだけど。

【おまけ】全地方局のPDF公開ページへのリンク

ここまで書いてみて、PDFに辿り着くまでがやはり面倒くさいと思ったので各地域ごとのPDF公開ページへのリンクを貼っておきますね。
各地域で該当ページに辿り着くまでが全然違うので面倒くさすぎ。なんで統一しないんだ?

北海道厚生局

施設基準等の届出事項(「届出受理医療機関名簿」(届出項目別))
http://kouseikyoku.mhlw.go.jp/hokkaido/gyomu/gyomu/hoken_kikan/todokede_komokubetsu.html

ページの下の方の「2.保険医療機関(歯科)」という項目の「(その1)」に、PDFをダウンロードするボタンがある。

東北厚生局

施設基準の届出等受理状況一覧
http://kouseikyoku.mhlw.go.jp/tohoku/gyomu/gyomu/hoken_kikan/sisetukijyun.html

ページを開いてすぐに見える「施設基準の届出受理状況(全体)」の項目のところに、各県別のPDFをダウンロードするリンクがある。

関東信越厚生局

保険医療機関・保険薬局の施設基準の届出受理状況及び保険外併用療養費医療機関一覧
http://kouseikyoku.mhlw.go.jp/kantoshinetsu/chousa/kijyun.html

ページを開いてすぐに見える「施設基準の届出状況(全体)(届出受理医療機関名簿)」の項目のところに、各県別のPDFをダウンロードするリンクがある。

東海北陸厚生局

保険医療機関・保険薬局の指定状況等
http://kouseikyoku.mhlw.go.jp/tokaihokuriku/gyomu/gyomu/hoken_kikan/shitei.html

ページの下の方の「東海北陸厚生局管内の施設基準の届出受理状況(全体)」という項目に、各県別のPDFをダウンロードするリンクがある。

近畿厚生局

保険医療機関・保険薬局の管内指定状況等について
http://kouseikyoku.mhlw.go.jp/kinki/gyomu/gyomu/hoken_kikan/shitei_jokyo.html

ページの下の方の「施設基準の届出受理状況(全体)」の項目のところに、各県別のPDFをダウンロードするリンクがある。

中国四国厚生局

保険医療機関等の施設基準の届出受理状況等について
http://kouseikyoku.mhlw.go.jp/chugokushikoku/chousaka/shisetsukijunjuri.html

ページを開いてすぐに見える「中国四国厚生局管内の施設基準の届出受理状況(全体:平成29年6月1日現在)」の項目のところに、各県別のPDFをダウンロードするリンクがある。

なお、ここの厚生局は名前が「中国四国厚生局」となっているが管轄は中国地方だけの模様。四国を管轄するところは別に「四国厚生支局」がある。

四国厚生支局

施設基準の届出の確認について(定例報告)
http://kouseikyoku.mhlw.go.jp/shikoku/shinsei/shido_kansa/shisetsu_kijun_teirei/index.html

ページを開いてすぐに見える「【報告①】施設基準の届出の確認について(報告)」の項目の「届出受理医療機関名簿(平成29年7月1日現在)」という表に、各県別のPDFをダウンロードするリンクがある。

九州厚生局

保険医療機関・保険薬局の管内指定状況及び届出受理状況について
http://kouseikyoku.mhlw.go.jp/kyushu/gyomu/gyomu/hoken_kikan/index.html

ページの中段にある「届出受理医療機関名簿(全体版)(平成29年7月4日更新)」の項目のところに、各県別のPDFをダウンロードするリンクがある。