masatoz’s blog

プログラミングのメモ、日常の記録

らくだメソッドで割り算再入門した

「らくだメソッド」

「らくだメソッド」を2月から始めて、4か月目になりました。
これは、平井雷田さんが開発された学習法です。その中でぼくがやっているのは算数のプリントです。
問題は、かつて小学校でやったことと基本としては同じ(だとおもう)。
らくだメソッドでは、「できた」「できてない」をきわめて客観的に評価します。
基準は、1)目安の時間内にできたこと、2)ミスが3個以下であること、のふたつ。
はっきりしているから、自分で評価できます。
自分でおもいたって実行し(プリントをやる)、結果が見えて(採点)、評価(反省)する。
基準が人間の感情みたいにふらふら揺れることなくいつも同じなので、納得して評価を受け入れられます。
このことによって自主的な取り組みができるようになっていると感じます。

割り算っておとなならできるんじゃないの?

2桁とか3桁の割り算ですけど、大人ならできて当然みたいにおもっていました。
というか、できたからこそ小学校を卒業して高校に行ったりして、いま大人になってるわけで。っていう前提。
実は、割り算できてなかったかもしれないってことを隠ぺいしているわけです。
それで大人といわれる年齢(今年で32)になったいま、再び小学生がやる割り算に取り組む。 で、できない。
うすうす予感していましたが、現実に直面。
それでできなかったから、できるようになりたくて練習するようになりました。
するとできるようになっていった。
こういうすごくシンプルに段階を踏んで、「できない」状態から「できる」状態へ移行できた。
重要なのは、先生やら親やらの評価目線を気にせずに、ピュアな学習意欲でやっているということです。
これは自分がやりたいからやっていて、それで充実感をもてているということではないでしょうか。

算数って生活で使わないのでは?

と、おもったこともありました。
けど、算数が少しできるようになると、日常生活がなにかとスムーズに運ぶことが多いようなのです。
なんで?っていうところは、また考えてみたいとおもいます。
今日はここまで。

なんで相手から責められると落ち込むのかとか考えてみる機会があった。

仮説はこうだ。

過去に責められた体験のあとに嫌な出来事が続いた。 それを繰り返していく中で、他人に責められること→良くないことが起こる、という短絡が起きた。 実はこの良くないことということに根拠はなく、たまたまその相手がそれを嫌っただけなのだが。 しかし、道徳とか常識とか良識とかあれこれ味付けがされると、わからなくなるものだ。 そして、責められるということは、何か自分に非があるからだという罪悪感を持つようになる。 こんな気持ちはしんどいので、責められないように言動を調整するよう動機づけが起こる。

そうしたらあとはどんどん学習が強化される 汗

と、妄想してすっきりしたようなしないような。ヒヤリ。

最近早起きしている

自分の時間が増える。早起きすると、いいことのひとつはこれかと思う。 朝5時に上司から仕事を振られることはない。メール来ない、電話こない、だれもいない。 全部自分の好きにできるのは、休日と似ている。

早起きすれば、毎日絶対的自分スペースをもてる。

仕事帰りでくたくたになった身体で活動することには困難がある。 逆風のなかで頑張っているみたいだ。

でも、早起きの場合、寝て起きてすぐだからまだくたびれていない。 活動できる余力がある。たとえ疲れていても、その日の中ではいちばん余裕がある。

今、だいたい5時~6時に起きている。ほんとうは4時に起きたい。 4時に起きたら家をでるまで3時間以上も時間をもてる。

それと、早起きするようになってから定時でサクッと帰るようになった。 早く寝て、早く起きたいというのと、時間が大切だと感じるようになったからだ。

朝の5分は貴重っていう。その人の感覚では夜の5分はそれより貴重ではない。 でも早く起きると、夜の5分もやっぱり貴重って思う。 だからサクッと帰っちゃうようになった。

よく早起きは良いって言われていて、なるほどそうかあ、と傍観していたが、実際自分でやってみると感覚として何が良いかがわかってくるのがとてもおもしろい。

ヒマだったので電車で移動してきた

今日の昼すぎからヒマな感じになってきて、とくにすることがなく、空白の時間を過ごしたいでもなかったので、何かすることを決める必要に迫られた。 近頃、時間ができると仕事の勉強とかを詰め込んでしまうのだけど、それはやらない。 そればっかやってると、よくない方に煮詰まるということが薄々感じられてきている。 とにかく、そのまま部屋に居続けるわけにはいかなかったので、どこへか当てはないものの、外に出ようということには決める。 で、スマホでウェブブラウジングして、お出かけレコメンドを探してみる。なかなか気分に合う提案が見つからない。 自転車を持ってるので、「サイクリング」とかで探すと、本格的すぎるコースが出てきてしまうのだ。ちょっと気楽に出掛けたいだけの人には向いていない。 二、三のテーマで迷った末、「電車にのって、田舎の景色を楽しみたい」という気になって、試しにてきとうに出掛けてみた。

コース

堀田→名古屋→藤が丘→八草→高蔵寺→金山→堀田

以上、乗り換え駅。

概要

所要時間:約3時間(部屋を出て戻ってくるまで)

運賃:2000円はしない

おすすめの場所:高蔵寺

感想

出掛ける前は、これからやることが決まってちょっとしたワクワク感があった。 お出かけは出掛ける前からはじまっているというのはこういうことかという気づきが得られた。

今回のお出かけのテーマとしては、実は以下をぼんやりと想定していた。

  • いい景色
  • 想定外の何か
  • 活動した感

ほとんどの区間で景色的におもしろいところは、ざんねんながらなかった。唯一、高蔵寺近くで川が見え、駅のホームからすこし向こうに丘があったりなど、いい感じの自然があったのが、割りに良かった。藤が丘→八草はリニモだが、景色は意外にあまり楽しめなかった。個人的にリニモの乗り心地があまり好きでない。電車特有のゆれがあったほうがいいのかもしれない。あと、クーラーが寒かった。

出掛けたら何かわからないけど、おもしろいことがあるかもしれないという期待。特段なにもなかったけど、高蔵寺駅周辺の雰囲気がけっこうよかったことは今日まで知らなかった。駅から出たらまた違う雰囲気なのかもしれない。あと、路線の端っこ(始発/終点)なところもいい。そこからはじまるという感じで、途中の駅よりも特別だ。

3時間くらい無目的に電車にのって、それなりに疲れたので活動した感はあった。ただし、何しに行ったんだろう感も同様にあったことは、正直に認めなければならない。たしかなのは、部屋にずっとこもって3時間をすごすよりは有意義に過ごせたということだ。

で結局、電車で田舎の景色は楽しめたか?というと星2つくらいです。 名古屋市内の電車でいい景色は期待できないかも。 今度は知多の方とか、岐阜とかにでかけてみることも考えよう。

OmegaTの分節化規則: ピリオドの後で分節化するのを避けるには<正規表現の戻り読み>

OmegaTの分節化規則をもっと細かく調整してやりたい場合があります。 例えば、特定の文字列が先に来る場合は分節化したくない、など。 正規表現の先読み(lookahead)、戻り読み(lookback)を使えばそんな希望がかなえられます。

そういうことができるらしい、ということは前から知ってたんですが、ようやく実際に使えるようになりました。

やりたいこと

ピリオド(.)で分節化するけど、"Pos.“、"e.g."とかでは分節化しない。

分節化規則

「初期値」に設定してみました。選択されている項目のところで「否定の戻り読み」と呼ばれるやつを使ってます。

f:id:masatoz:20170616104854p:plain

「前方の正規表現」はこういうやつ。

(?<!Pos|approx|e\.g)[\.\?\!]+

「後方の正規表現」。

\s

感想

正規表現はわかると便利だけど、それまでが大変な場合が多いように感じます。 上のやりたいことで書いた分節化の仕様は、戻り読みとか先読みとか使わなくてもできた、とも記憶しています。 OmegaTのプレセット値にMr.とかe.g.とかの後に分節化しないというものがありました。

だけど、色々な条件を組み合わせているうちに、毎回わけがわからなくなってるので、正規表現で一発ばしっと決めてやるのもアリではないでしょうか。

参考

qiita.com

正規表現の「先読み」「戻り読み」についてかみ砕いて解説してくれてます。 「先」とか「後」とかのニュアンスと実際の動作がどうしても結びつかなくて、「???」になってましたが、これを読んでようやくイメージがつかめました。

高速ソート手法のシュワルツ変換はわりと簡単に実装できることがわかった

「すぐわかる Perlオブジェクト指向」からシュワルツ変換を取り上げます。

シュワルツ変換は、ソートを高速化するための方法です。

ソート対象の文字列の長さを最初に調べてインデックスをつくり、ハッシュの値にします。そのハッシュのキーにはソートする文字列そのものを入れます。

それでインデックスを比較した結果に応じてハッシュのキーを取り出すことでソートすることができます。 こうすることで、たぶん、文字列の長さをしらべる処理回数を減らすことができるため速度が上がるのだと思います。

数MB程度以上のテキストをソートする際に威力を発揮するようです。

いきなり完成コード

mapを使うと短く書けます。また玄人っぽい雰囲気がでます。

慣れないと読みづらいのが難点かも。

    my @sorted = map { 
        $_->[0], "\n" }  # 文字列を取り出す
        sort { $b->[1] <=> $a->[1] }  # 文字列の長さを比較
        map  [$_, length($_)], @lines; # 文字列とその長さのリストをつくる
    }

違う書き方

mapをforに置き換えてみます。

my @sorted = ();
for (@lines) {
    push(@sorted, [$_, length($_)]);
}
@sorted = sort { $b->[1] <=> $a->[1] } @sorted;

my @sorted2 = ();
for (@sorted) {
    push(@sorted2, $_->[0])
}

print map { $_,"\n" } @sorted2;

こんなんだっけ…ものすごくごちゃごちゃになってしまいました。

やっぱりmapを使った方がよいかもしれない!

Tie::Fileでテキストファイルをもっとかんたんに配列のように扱う

テキストファイルを全部読み込んで(または読込ながら)、文字列に処理を加える機会は多いと思います。

そんなとき、普通にテキストファイルを読みこむこともできるのですが、Tie::Fileモジュールを使うともっと簡単でした。

これもまたPerlクックブックで発見しました(ボリューム1)。

ちなみにTie::FileモジュールはPerlバージョン5.8以降で標準モジュールとして組み込まれています。

my @lines = ();
my $file_name = 'f1.txt';

tie @lines, "Tie::File", $file_name or die "Can't tie to $file_name: $!\n";

# 逆順にしてみる
@lines = reverse @lines;

# 特定の文字列を含む行をろ過
my @filtered = grep { /perl/i } @lines;
print "Found: @filtered\n";

# 行数(配列の要素数)
print "Line count: $#lines";

1行でテキストファイルを変数に入れられるですごいラク。

つまづきポイント

use strictしている場合、ファイルを読み込むときにTie::Fileをダブルクオートで囲む必要がありました。

Perlクックブックのサンプルコードでは、裸で使用されていたので、そのとおりやってみたら、Bareword "Tie::File" not allowed while "strict subs"というエラーをもらいました。