折りたたみを展開する

おぼえ書き、まとめ、発表など

ポモドーロ・テクニックの実装

ポモドーロしたい

ポモドーロ・テクニックというものがある。

f:id:Rlan:20170828100438p:plain

有名なので知っている人もいるかと思う。簡単にいえば、

  • 30分1セットで25分集中したら5分休憩する

  • 4セットしたあと、長めに休憩する

というルーティンをまわしていくLife Hackである。1セットにつきやるタスクを1つと決めるのがオーソドックスなやり方らしい。こういうものはオリジナルの方法から離れていくものなので諸説あるかもしれない。

このポモドーロという名前はキッチンタイマーから名付けられたということらしい。つまり、25分 + 5 分という時間配分をキッチンタイマーで管理するということだ。

詳しくはここらへんに書いている模様。

gigazine.net

キッチンタイマーなど使えない

さて、これを実生活で実行するとなると1つ問題がある。自宅ならいざしらず、外でキッチンタイマーを使うのが難しいという問題である。職場や図書館、カフェでジリリリと鳴らしてみようものならいつ後ろから刺されるかわからないというものである。刺されなくても、うしろゆびさされ組くらいにはなるだろう。

アプリを使おう

現在、ポモドーロ・テクニックを実践している。これには、 スマホをやめれば魚が育つ というアプリを利用している。スマホを触らない時間を貯めると魚が育っていくというアプリである。

  • 何分触らないか決める

  • 決めた時間すぎると自分で定めた休憩時間中はスマホを触れる

という仕組みである。これはポモドーロ・テクニックにうってつけの仕組みなのである。

  • 何分触らないか決める → 25分に設定

  • 決めた時間すぎると自分で定めた休憩時間中はスマホを触れる → 5分の休憩時間を設定

とできるからである。

しかも、

  • 決めた時間スマホを触らなければその分ポイントとコインが貯まる

  • 魚が完全に成長すると放流し、別の魚をコインで買って育てる

  • レベルの高い魚を育て上げるにはたくさんポイントを貯める必要がある(最長120時間)

というたまごっち的な要素もある。

しかも、マナーモードにしておけばバイブで知らせてくれるので*1静寂で神聖な場所でもポモドーロ・テクニックを使うことができる。

後はいかにして集中するか、限られた時間でタスクを消費するかだけになった。

*1:マナーモードでバイブが鳴るように設定することが必要

CLionを使う

IDEを使ったことがなかったのだが、そうもいってられないので、使っている。 Macなので、安直にXcodeを使用しようとおもったのだが、どうも思いし、C++の勉強には不向きだと思う。 全部、MacでVisual Studiogが使えないのが悪い。

いろいろと物色していたのだが、とりあえずCLionを使用してみることにした。

qiita.com

有料ソフトなのだが、eduやacがつくメールアドレスをもっている人は無料で使えるらしい。 また、vimのコマンドも使えるのでvimの練習にもなる。 画面もイイ感じだ。

f:id:Rlan:20170803093446p:plain

とりあえず、前にブログで話題にしたC++の本の練習問題を解いている。

基礎からしっかり学ぶC++の教科書 C++14対応

基礎からしっかり学ぶC++の教科書 C++14対応

色々と発見があっておもしろい。

話題が変わるが、Macの掃除などをしたい人は以下を参考にするといいだろう。


埃だらけ…MacBook Proの分解掃除!

Visual Studioが使えないけど、Macを末永く使いたいものである。

論文の書き方

アウトリーチ

人工知能は人間を超えるか、という本がある。この本は昨今の一般メディアの人工知能ブームよりも前に出版された本であり、ベストセラーにもなった本である。

研究者も個人サイトがある

作者は東大の松尾豊という研究者の方である。サイトもある。以前のエントリーでも書いたが、こういう第一線の研究者が私のような一般市民に向けて啓蒙をしてくださるのはありがたい限りである。

be-dazzled.hatenablog.com

論文の書き方

ところで、第一線の研究者なので当然、研究室があり、院生がおり、ジャーナルや国際会議への投稿を盛んにしている。そういったノウハウもHPで公開されているのだ。一般市民だけではなく、院生・若手研究者への情報公開をされているとは。すごいの一言である。

松尾ぐみ | 松尾 豊

この啓示をありがたく読ませて頂いている。特に、日本人が英文のジャーナルや国際会議に投稿するためにどのようなステップを踏めばいいかということが書かれている。また、作者は情報系なので他分野とは事情が違うところもあると思う。国際会議への投稿の採択が最重要であったりするところは、国際会議という概念がなかったり、トップのジャーナルからの採択が最重要だったりする分野とは事情が異なるだろう。

f:id:Rlan:20170616095809p:plain

lyxで何も考えずに画像をいれたい

もう普通何も考えたくないからTexShopではなくLyxを使っている。texを使っていたころの名残からなのか、epsに画像を変換してからlyxで読み込んでいたのでたいした不都合をかんじていなかった。方法としては、ImageMagicで変換して使うというあるまじきローテク魂である。

f:id:Rlan:20170608174109p:plain

しかし、このLyx、画像変換の方法をしていしてあげれば勝手に読み込んだ画像をepsに変換してくれるのだそう。今回は、png→epsについて書く。といっても、参考になるブログ等が多数あったのでそちらを読んでいただければという話だ。

El CapitanでのLyXの画像挿入 – Konno Log

なんの因果か、こちらの方法でもImageMagickを使用している。ただ、インストールの方法はHome Brewでもokだ。どちらでも同じことなのでお好きな方をどうぞという感じである。この方法を拡張するればImageMagickが対応している画像をepsに変換することができる。すごく便利である。

もう、ベタ打ちのtexにはますます戻れなくなった。

pandasで日付を扱う

日付を扱うには

pandasで日付を扱うには、TimeStampが便利である。というより、そうやって扱うことになっている。

qiita.com

適当にparserだかなんだかを指定しなくては行けないこともある。しかし、たいていは何もしないでもいい感じに読み込んでくれる。上の記事の方はcsv形式のファイルを読み込んでいるが、excelでも同じことができる。

現実は厳しい

しかし、今日触ったデータは和暦.月.日という謎フォーマットだった。しかも、時々全角の「.」や半角のスペースが入っていて最悪のシロモノだった。和暦.月.日という謎フォーマットで年月日を表すと、2015年2月14日が27.02.14のようになる。しかも時々、27.02.14とか27. 02.14になるのだ。

f:id:Rlan:20170608174100p:plain

結局、うまくTimeStampに変換する方法がわからなかったから無理やりに変換した。流れは、

  1. 謎の表記の年月日から「.」や半角のスペースをreplaceで置き換える

  2. to_datetime( 謎の表記の年月日, format='%y.%m.%d') で無理やり和暦を西暦として認識する

3. すると、平成27年は2027年として認識される

  1. これを修正するために- pd.DateOffset(years=12) としてずれた12年を引く

こういう流れである。まったくもって非効率的な話である。どうにかしていい方法はないものだろうか。

勉強法が全然わからない

f:id:Rlan:20170706192522p:plain

勉強

勉強というのはある意味手順があって、専門分野を勉強したければその教科書を読めばいい。授業の資料なども沢山インターネットに上っている。どの教科書を読めば良いかもシラバス等を見ればわかるだろう。

もし、その教科書を読む素養がなければもっと基礎的なとこから始めれば良い。中学数学→高校数学→大学教養とかだ。できるかどうかはともかくとして、こういう筋道は立つだろう。

しかし、これはコロンブスの卵的だ。抽象的というかある意味、その道順を知っているからそう言えるのである。バックグラウンドや基礎的な技能が無い人からすれば、何をすれば良いのか文字通りno ideaでなにもわからないのだ。

英文ライティング

f:id:Rlan:20170706192522p:plain

自分にとってそれが英文ライティングである。数多くの英文ライティングの本が出版されているが、なにをとってもわからない。まず、英文を書くということがわからない。ましてや、パラグラフ内部での構造や複数のパラグラフ同士の構成などを理解することもできない。

添削などを受けてみても、なぜその減点・修正が必要なのかわからない。書いてある理由などが理解できないので、次回書く時にその添削を反映させることもできない。

いくつかの本を読んでみた

即戦力がつく英文ライティング

即戦力がつく英文ライティング

新版TOEFL TEST対策iBTライティング

新版TOEFL TEST対策iBTライティング

英語ライティング講座入門

英語ライティング講座入門

しかし、何もわからない。書いてあることを理解することはできるが、血肉となる感覚が全くない。断っておくが、これは私に理解する能力がないだけで作者の能力によるものでも無ければ、本が悪いといっているわけでもない。ただ理解できないのだ。

どうする

どうするかほとほと悩んでいる。困った。これは、しつこく添削などを受けるしか無いのだろうか。

f:id:Rlan:20170706192516p:plain

そういうことで、ここのブログを使ってすこし勉強していこうと思います。

numpy arange と linspaceのちがい

細かくて、気付かない

あまり気にしないで使っていたが、numpy には arangelinspace がある。似ているが、違う性質を持っている。

f:id:Rlan:20170531234035p:plain ドキュメントを引用してみると、

numpy.arange — NumPy v1.13 Manual

numpy.arange

Return evenly spaced values within a given interval.

Values are generated within the half-open interval [start, stop) (in other words, the interval including start but excluding stop). For integer arguments the function is equivalent to the Python built-in range function, but returns an ndarray rather than a list.

であって、

numpy.linspace — NumPy v1.13 Manual

numpy.linspace

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source] Return evenly spaced numbers over a specified interval. Returns num evenly spaced samples, calculated over the interval [start, stop].

The endpoint of the interval can optionally be excluded.

であるそう。ただ、どちらの関数も引数にとった範囲を刻んで array で返してくれる関数だ *1 。

気になった違いをまとめる

ドキュメントを読んで気になった違いをまとめてみる。各関数はデフォルトでは、

numpy.arange

  • 最後の値は含まない配列を返す
  • 最初の値を指定しなくても良い
  • ステップの数を指定しなくてもよい

numpy.linspace

  • 最後の値は含む配列を返す
  • 最初と最後の値を指定する必要がある
  • ステップの数を指定する(デフォルトでは50ステップになっている)

のような点が違う点であると思う。

最後の値を含むかどうか

arrangeは最初の値は含むが、最後の値は含まない*2

np.arange(1, 10)
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

linespaceは最初と最後の値を含む

np.linspace(1,10, 10)
>>> array([  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.])

最初と最後を指定する必要があるかどうか

arrangeは必ずしも最初と最後の値を引数に取る必要はない

np.arange(10)
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

しかし、linspaceは最初と最後の値を引数に取る

np.linspace(10)
>>> ---------------------------------------------------------------------------
>>> TypeError                                 Traceback (most recent call last)
>>> <ipython-input-12-e01aa1d69cee> in <module>()
>>>> ----> 1 np.linspace(10)

>>> TypeError: linspace() missing 1 required positional argument: 'stop'

ステップ数を指定する必要があるかどうか

arrangeでは前のブロックで見たように引数が一つだけの場合は、1からその数まで1ずつステップを踏む

np.arange(10)
>>> array([1, 2, 3, 4, 5, 6, 7, 8, 9])

しかし、linspaceはステップ数を指定する必要がある。だが、ステップ数を指定しなかったとしてもエラーが出るわけではない。

np.linspace(1, 10)
>>> array([  1.        ,   1.18367347,   1.36734694,   1.55102041,
         1.73469388,   1.91836735,   2.10204082,   2.28571429,
         2.46938776,   2.65306122,   2.83673469,   3.02040816,
         3.20408163,   3.3877551 ,   3.57142857,   3.75510204,
         3.93877551,   4.12244898,   4.30612245,   4.48979592,
         4.67346939,   4.85714286,   5.04081633,   5.2244898 ,
         5.40816327,   5.59183673,   5.7755102 ,   5.95918367,
         6.14285714,   6.32653061,   6.51020408,   6.69387755,
         6.87755102,   7.06122449,   7.24489796,   7.42857143,
         7.6122449 ,   7.79591837,   7.97959184,   8.16326531,
         8.34693878,   8.53061224,   8.71428571,   8.89795918,
         9.08163265,   9.26530612,   9.44897959,   9.63265306,
         9.81632653,  10.        ])

なぜなら、デフォルトではステップ数が50に指定されているからだ。

numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)[source]

他について

細かな違いがあるので気をつけたいところ。返すarrayの要素の型についてはどちらの関数でも指定できる。しかし、arrangeint型の要素を持ったarrayを返す場合がある一方で linspaceはfloat型の要素を持つarrayを返す *3 。「少数を使うときは、linspaceが推奨らしい」という記述を見かけたが、この点を根拠として言っているのかもしれない。

*1:linspace はステップ数を返すようにするとかもできる

*2:デフォルトでは

*3:この点はよくわからなかった。つまり、linspaceは指定しない限り常にfloat型の要素を持つarrayを返すのだろうか