あのねノート

せんせいあのね、パソコンで字が書けるようになったよ

ラ・ラ・ランドを観ました

昨晩ラ・ラ・ランドを観に行きました。とってもいい映画だったのでみんなぜひ観てほしいなと思います。
特に音楽好き・ミュージカル好きな人におすすめだと思いました。ジャズ好きな方は絶対観るとよいのでは。でももうみんな観て。
映画『ラ・ラ・ランド』公式サイト
あらすじは公式サイトを読むとよいと思うのですが、ざっと書くと、今よりちょっと前のハリウッドで売れないジャズピアニストと売れない女優さんが出会って恋に落ち、励まし合ったりぶつかりあったりしながらお互いの夢に向かって進んでいく話です。2人がそれぞれ壁にぶつかって少しぶれることはあってもしっかり夢を持って叶えようとする姿が印象的でした。明るい気持ちになれるけど最後にはほろりとくるのがとてもよかったです。
今はサントラがほしいです。昨晩の上映はレイトショーだったのでグッズ売り場が閉まっていたのです…

この先は長文ネタバレするので切ります。観てない人は読まないで、観てから気が向いたら読んでほしい感じです。

続きを読む

春休みです

おととい実験の最終課題を無事終えたので春休みに入ることができました。新学期始まるごとに学校原因でいろんな言語に手を出して、半期終わるごとに疲れた、次は別のってなってるのよくないなって思います。
今までいつどの言語を触ってきたかというのを書き出してみると次のようになります。

  • '13:高校の情報の授業でJavaScriptを一瞬
  • '14前半:大学に入った。1回生向けゼミでArduinoを触ったのでArduino言語
  • '14後半:Scheme。Jakldという処理系を使った。Javaで動いてるらしい(Javaアプリケーション組み込み用のLispドライバ)
  • '15前半:'14前半の授業の続きでScheme、実験でC(いろいろなソートをしました)
  • '15後半:実験でWebサーバクライアントを作るってことでCかと思いきや、最後になって「今までCで作ってきたものをJavaで作ってみましょう!」ってなる。サンプルプログラムを書き替えるものだったからあれだけど
  • '16前半:実験で、Racket*1を使ってSmall-Cコンパイラを作った。Schemeやん。
  • '16後半:実験2種*2Java+SQLで簡単なWebシステムを作るもの、C言語QRコードの読み書きするプログラムを作るもの。あと他講義でCoq(Gallinaという言語を使ってるらしい証明支援システム。OCamlに似てるらしい)。

書いてたら「あ、これLispやればいいんじゃね」ってなるぐらいにはSchemeの印象が強かったです。でも'16後半でJavaとC触ったせいか何か吹っ飛んでる。やばいぞ
うちの学校、1個下の学年からは実験がJavaで統一されてるらしいので改革を感じます(最後の実験は選択式なのでものによって言語も違うと思いますが)。ていうかRacketとかSchemeがカリキュラムから消えたらしい。

春休みの予定としましては、バイトをしつつ応用情報技術者(秋落ちました)の勉強をしたいと思っているのですがまだ申し込みをしておりません。あとTOEIC/TOEFLあたりの勉強もしないといけない気はします(うちのパソコン、TOEICは変換できるのにTOEFLは変換できないんだけどなんで?)。とりあえず今のところとしましてはバレンタインのお菓子を作るために実家に戻ってきています。
また何かしたらここに少し書けたらいいなと思います。

*1:ほかの言語を使ってる人もいた。2個上まではCを使ってたらしい

*2:前半3種、後半3種から1つずつ自由選択。人数が偏ると抽選で希望とは違うところに移ることになる

試験が終わりました

まだ実験の最終課題を終えていないので春休みには入れないのですが、試験が終わったので軽く振り返ります。

  • マルチメディア:正直範囲も量も多いので、持ち込み可にしてほしい科目ベスト5ぐらいには入ると思いました。過去問の解答を作ったり先生が用意してくれた演習問題を解いてみたりして準備したのですが、なんか思ってたのと少し違う感じだったので対策足りなかったな~という感じ。資料内の用語の自分なりの説明を作っておくのがいい対策になりそうです。
  • HI:これも資料が多いのですが、先生が最終回で言ってくれた範囲に絞って該当の過去問を解くとしあわせになれるなあと思いました。
  • 集積システム:来年はなくなる科目。カンペ持ち込み可がありがたかったです。でも一部予想と違うところが出たのであああああって叫びました。
  • A1:複素微積分の科目でした。演習を解いておけば割とテスト対策になるし平常点にも入るし優しい…演習がどれぐらいの点数になっているかが鍵という感じ。
  • 応用代数学:去年単位取得済みの友人たちから、講義ノートの証明とか例題とかを見ておくのが対策になると言われていたのですが本当にその通りで頭が上がりません。あとめっちゃ抽象的な話だから行列の掛け算とかなんか適当に具体例を想像しながら内容理解するといいよってアドバイスをもらったのもめっちゃよかった。
  • アキテク1:再履。演習問題の解答をひたすら覚えるのみでありました。一発合格の知らせをもらったのでありがたいです。
  • パターン認識:演習問題が普通に難しかったし数学の授業じゃないのに数学の話がいっぱい出てくるし、自分の数学の素養の足りなさを実感してました。演習問題とテストが似てたのかすらよくわからなかった。
  • 情報システム:持ち込みしたいよう~~~ってなりましたが過去問を解いたり資料の式を覚えたりしたら何とかなったような気分です。
  • ソフトウェア工学:過去問を解いたらなんとかなりました。ほとんど同じだったし…でも来年から先生が変わるみたいなので過去問使えなくなるんですね
  • 計算と論理:むちゃくちゃ細かい字でカンペを書いたのですが理解が足りなくてダメだったところがいくつか。と思ったけどあとから落ち着いて救済レポートとして解き直してたら、時間をかければできるなあという感じで複雑な気持ちになりました。

力不足な感じは否めませんががんばったと信じたいです。下の学年は必修科目が減ってるらしいのはうらやましいなあ。

あけましておめでとうございます

本年もなにとぞよろしくお願いします。今年はできるだけマイナスのことを書かないように心がけたいです。特段進捗がないので年越しのことを書きます。
今回の年越しは母の実家で紅白を見て過ごしました。ゴジラのくだり、わたしはとっても好きだったんですけどどうなんでしょう。PPAPに第九コーラスが重なってゴジラが苦しむところなど、妙な力を感じて涙なしでは見られませんでした(嘘です。めっちゃ笑いました)。
紅白が終わった後幼いいとこたちと近くのお寺まで行き、除夜の鐘をついてきました。何か思いのほか力入っちゃって思ったより大きい音が出てしまい、自分の鳴らした音に自分がびっくりするというよくわからないことになりました。
日付が変わると海岸で花火が上がるのですが、鐘をついていたら日付が変わったので海辺まで全力疾走して花火の写真を撮りに行きました。初走りです。
f:id:momo_moemoe:20170102202811j:plain
花火の写真を撮るのは難しいですね。

日の出が7時過ぎだというのですぐ寝て6時半に起きて待機しました。屋根の上に登って待っていたのですが周りが山なのでなかなか太陽が見えませんでした。結局8時過ぎになってやっと太陽が顔を出したのでもう少し遅くまで寝ててもよかったなあ。
f:id:momo_moemoe:20170102202819j:plain

そのあと父の実家に行って親戚たちとおせちを食べました。祖父母がかわいがっている文鳥が死んだ相方にいじめられてボロボロなのですが(つがいだったんだけどつつかれまくった。片目はつぶれてしまっているしお尻ははげている)何とか生きていて、ケージを覗くと前見た時よりだいぶ元気そうだったのでよかったです。
f:id:momo_moemoe:20170102202804j:plain
もがいたり眠ったりしているのを見ているとなんだか妙に可愛くて元気が出ました。止まり木にのせてもすぐに落ちてしまうのですが長生きしてほしいです。

今年もなんだか支離滅裂なものを書いてしまいましたがそれはさておきいい年にしたいです。

温まりたい

懐も気候も寒いので温まるために自炊したりいろいろしました。

最近の自炊

昨日の夜はこちら。
f:id:momo_moemoe:20161130211926j:plain
玉ねぎとマッシュポテトとツナのグラタンです。適当にレシピをメモします。

  1. 玉ねぎを食べやすいサイズに切って500Wのレンジで5分ぐらいチンする。
  2. 同じ入れ物にマッシュポテトの粉を適当に入れて豆乳を浸るぐらいいれて2分ぐらいチンする。
  3. ツナ缶を空けて汁ごと入れ、ピザ用チーズを好きなだけかけて普通のグラタンと同様にオーブンで焼く(グラタン用の自動メニューを使いました)。

ホワイトソース感を出したかった。ポテトはなかなかお腹にたまってよかったです。あと玉ねぎが甘くなりました。

今日の夜はこちら。
f:id:momo_moemoe:20161130211931j:plain
ツナ玉ねぎコーンの豆乳みそうどん。

  1. 玉ねぎを食べやすいサイズに切って、冷凍コーンとツナ缶と一緒に炒める。
  2. 冷凍うどんを解凍しておく。
  3. 具材を炒めたところに豆乳を少し入れ、味噌を少し溶かす。
  4. とろみがついたらうどんをいれて混ぜる。

豆乳つゆのうどんにするつもりだったのになんでクリームパスタみたいになったのかはよくわかりませんが(作ってる途中に方針転換しまくったのが悪い)、クリーミーでおいしかったです。

あとレンジ茶碗蒸しにチャレンジしました。


やってみた。めんつゆがなかったので醤油とほんだしを入れました。
f:id:momo_moemoe:20161130211935j:plain
うちのレンジだと2分40秒でいい感じのぷるぷるになりました。もう少しだしと醤油を入れてもよかったかも。すごく暖まりました!

温かい飲み物

寒すぎるのでいろいろしました。

  • 白湯:低カロリーで安いスーパードリンク!って、お湯じゃん!おふろ上がりに飲むとほかほかです。寝起きと寝る前に飲むといいそうです。

sp.lalu.jp

  • 豆乳生姜湯:豆乳を温めて飲みたかったのですが、ちょうど持っていたのが成分無調整のものでそのままだと少し飲みにくいかなと思ったのでいろいろ調べると、生姜湯を入れると意外と合うと出てきたのでやってみました。少ないお湯に生姜湯を溶かして豆乳を混ぜてレンジでほどよく温めて飲みます。ほんのり甘くなって飲みやすくなりました。あと生姜なので体が暖まる。

cookpad.com
これです。おいしかったよ。

  • 紅茶:懸賞でもらったティーパックを放置していたのでいれてみました。カフェインを寝る前にとると眠れなくなりそうなので朝方がよさそう。スパイス入りのものがあったので試しにいれてみたらちょっと暖まったような?チャイっぽい感じだったので今度はミルクティーにしてみたいです。

www.harney.jp
これをもらっていた。なんかすごそう。

その他

ルームシューズを出し、はんてんを着てこたつで丸くなっています。
あと寝るときの就寝用靴下が欠かせません。

とにかく懐が寒い。ラーメンが食べたい。だれかカンパ…(おい)

RacketでpostgreSQLをさわってみる

実験でjavapostgreSQLを使ってデータベースを用いたwebアプリケーションを作っているのですが、そういえばRacketでもそういうのできるって書いてた気がするなと思って少しだけやってみました。
Racketにはデータベースを扱うためのモジュールがあるので読みこんでもらいます。

(require db)

詳しくはドキュメントを見ましょう。わたしは最初の方しか読んでいませんし最初の方のことしかしていません。
DB: Database Connectivity
PostgreSQL,MySQL,SQLite,ODBCというのに対応しているみたいです。ここではPostgreSQLを使いますが接続のやり方が違うだけでSQLの実行は同じようにできそうです(要出典)。

ユーザー名、データベースの名前、パスワードを入れてデータベースに接続します。

(define 接続の名前
  (postgresql-connect #:user "ユーザー名"
                      #:database "データベース名"
                      #:password "パスワード"))

自分の設定に合わせて入れましょう。
あとは(query-exec 接続名 "実行したいSQL文")でとりあえず実行できます。結果はベクタのリストで返ってきます。
わたしは先に作ってあるデータベースを使ったのでselect文で試していますが、createもできます。

> (query pgc "select * from books limit 10")
(rows-result
 '(((name . "id") (typeid . 23) (type-size . 4) (type-mod . -1))
   ((name . "name") (typeid . 25) (type-size . -1) (type-mod . -1))
   ((name . "author") (typeid . 25) (type-size . -1) (type-mod . -1))
   ((name . "price") (typeid . 23) (type-size . 4) (type-mod . -1)))
 '(#(1 "813ae1" "d1e9bc" 2818)
   #(2 "4e3f48" "886a6d" 455)
   #(3 "fbaa38" "e0bbf2" 58)
   #(4 "571abf" "4a31bf" 1670)
   #(5 "9abd27" "6f5da6" 1375)
   #(6 "a0a9b0" "0693a0" 2242)
   #(7 "999d44" "f91e51" 1596)
   #(8 "b32aea" "3306cf" 1298)
   #(9 "d5d5ac" "437abc" 2867)
   #(10 "4a0f77" "9d166c" 1748)))

explain analyzeもできます。

> (query pgc "explain analyze select * from books order by price limit 10")
(rows-result
 '(((name . "QUERY PLAN") (typeid . 25) (type-size . -1) (type-mod . -1)))
 '(#("Limit  (cost=37979.64..37979.67 rows=10 width=22) (actual time=207.371..207.372 rows=10 loops=1)")
   #("  ->  Sort  (cost=37979.64..40479.64 rows=1000000 width=22) (actual time=207.370..207.370 rows=10 loops=1)")
   #("        Sort Key: price")
   #("        Sort Method: top-N heapsort  Memory: 25kB")
   #("        ->  Seq Scan on books  (cost=0.00..16370.00 rows=1000000 width=22) (actual time=0.016..95.671 rows=1000000 loops=1)")
   #("Planning time: 0.113 ms")
   #("Execution time: 207.396 ms")))

なんだか見にくいのでprintfを使います。

(for (((n d) (in-query pgc "select id, price from books limit 10")))
  (printf "~a: ~a\n" n d))

select文でとってきた2つの結果をそれぞれn,dとしてprintfで出力できるみたいです。

> (for (((n d) (in-query pgc "select id, price from books limit 10")))
  (printf "~a: ~a\n" n d))
1: 2818
2: 455
3: 58
4: 1670
5: 1375
6: 2242
7: 1596
8: 1298
9: 2867
10: 1748

取り急ぎここまでやりました。落ち着いたらちゃんとやりたいです。

編集距離を求めようとしてみた

情報系なのでパターン認識の授業を受けているのですが、編集距離の求め方がよくわからなかったので調べて書いてみることにしました。

そもそも編集距離とは

2つの文字列を用意したとき、一方の文字列に対して1文字削除、1文字挿入、1文字置換の作業を最低何回行えばもう一方の文字列になるかを計算したもので、2つの文字列がどれぐらい似ているかを数値化することができる。レーベンシュタイン距離とも言う。

ウィキペディア(レーベンシュタイン距離 - Wikipedia)に編集距離を求める擬似コードが載っていて、それをRacketに書きかえるうちに何が分からなかったのかよく分からなくなってしまったのでとりあえずコードを貼っておきます。

実装した

#lang racket
(define (l-distance s1 s2)
  (define (cost c1 c2) ;;置換によるコストを1とする
    (if (eq? c1 c2) 0 1))
  (let* ((l1 (string-length s1))
         (l2 (string-length s2)))
    (cond
      ((= l1 0) l2) ;;長さ0の文字列と長さlの文字列の距離はl
      ((= l2 0) l1)
      (else
       (let*
           ((s1sub (substring s1 0 (- l1 1)))
            (s2sub (substring s2 0 (- l2 1)))
            (c1 (string-ref s1 (- l1 1)))
            (c2 (string-ref s2 (- l2 1)))
            (l-cost (cost c1 c2))
            (a (+ (l-distance s1sub s2) 1)) ;;挿入コスト
            (b (+ (l-distance s1 s2sub) 1)) ;;削除コスト
            (c (+ (l-distance s1sub s2sub) l-cost)) ;;置換コスト
            )
         (min a b c)
         )
       ))))

元の擬似コードでは配列を使っていたのですがRacketにそれらしきものがなかった気がしたのでどうしようと思っていたのですが、string-refとかsubstringとかで同じことができるっぽいことがわかってよかったです(ほんとかな)。
実行するとこんな感じになります。

> (l-distance "kitten" "sitting")
3

間違ってたらごめんなさい。