「ipython notebook」を使って簡単にタスク管理してみる。

ipython notebook便利と思っていたんですが、
これで、そのままタスク管理も出来たらいいなと思って試しに作ってみました。
かなり簡単に作ったというのもありますが、サクッと出来てしまいます。

前提として、ipython notebookはもちろんですが
pandasもインストールが必要になります。
（説明は省略します・・・）

それでは、早速ですが
ipython notebookの３つのセルに下記を入力していきます。

```
import pandas
from IPython.display import Javascript
from IPython.display import HTML
```

```
title_name = 'Tasks'
file_name = 'tasks.csv'
css_name = '//cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css'
js_name = '//cdn.datatables.net/1.10.12/js/jquery.dataTables.min'
```

```
def read_task():
  if os.path.exists(file_name):
    return pandas.DataFrame.from_csv(file_name)
  else:
    return pandas.DataFrame()

def save_task(data):
  pandas.DataFrame(data).to_csv(file_name)

def add_task(name, content):
  data = read_task()
  df = pandas.DataFrame([{'name':name,'content':content,'status':'new'}], columns = ['name','content','status'])
  data = data.append(df, ignore_index=True)
  save_task(data)

def show_task():
  data = read_task()
  js = '''
    <link rel='stylesheet' type='text/css' href='%s'>
    <script>
      require.config({
        paths: {
          dataTables: '%s'
        }
     });
      require(['dataTables'], function(){
        $('.dataframe').DataTable();
      });
    </script>
  '''%(css_name, js_name)
  return HTML('<h2>%s</h2>'%(title_name) + data.to_html() + js)

def update_task(id, **kwargs):
  data = read_task()
  if kwargs.get('name'):
    data['name'][id] = kwargs.get('name')
  if kwargs.get('content'):
    data['content'][id] = kwargs.get('content')
  if kwargs.get('status'):
    data['status'][id] = kwargs.get('status')
  save_task(data)

def delete_task(id):
  data = read_task()
  data = data.drop(id)
  save_task(data)
```

そして４つ目のセルに下記を入力して、実行（Shift + Enter）してみましょう。

```
show_task()
```

<img width="600" alt="20160724174344 (1).png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/4d8c4a05-2d3b-b861-3745-60517b5dac52.png">

まだ、何のタスクもありませんが
もうタスク管理っぽいものが出来ていますね。
５つ目のセルで、タスクを追加してみましょう。

```
add_task('最初のタスク','githubに、repositoryを準備する')
```

これを実行（Shift + Enter）した後で、
また４つ目のセルに戻って実行（Shift + Enter）します。

<img width="600" alt="20160724174346.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/238cc8ca-366c-3cdf-c16b-6f98d77ef86d.png">

タスクが追加されました。
taskwarriorっぽい雰囲気ですね。https://taskwarrior.org/
これを繰り返していくと、タスクがどんどん追加されます。

<img width="600" alt="20160724174347.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/8fa3c929-d486-4888-7a44-5d46fa51040e.png">

ステータスの更新については、下記の感じです。

```
update_task(0, status='done')
```

１つ目の引数はIDです。

```
update_task(1, name='次のタスク【優先】', content='pythonで、コードを書く。')
```

こうすると名前と内容が更新出来ます。

<img width="700" alt="20160724174348.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/6aa6681d-e001-c9a1-8f8e-ea9862c59302.png">

そして削除は下記の感じです。

```
delete_task(1)
```

<img width="700" alt="20160724174349.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/f8c6700a-474e-5477-38c7-0cff98e54a77.png">

削除したIDは欠番になります。
（ただし、add_taskするとリセットされます。）

<img width="600" alt="20160724174350.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/332028c9-f982-b589-0c04-1a39e35adc1b.png">

という訳で、PyPIに登録してみました。

```
pip install tasks-for-notebook
```

これでインストール出来ます。
使い方は下記の感じです。

```
from tasks_for_notebook import *
```

```
show_task()
```

ごちゃごちゃしたものが無くなって、すっきりします。

<img width="600" alt="20160724174351.png" src="https://qiita-image-store.s3.amazonaws.com/0/94179/4b44c27a-9565-f896-9e90-315032db3388.png">

もうちょっと機能追加してみたいと思います。
こちらも宜しくお願いします。

https://pypi.python.org/pypi?%3Aaction=pkg_edit&name=tasks-for-notebook
https://github.com/llby/tasks-for-notebook