読者です 読者をやめる 読者になる 読者になる

【ruby】Rationalで分数を扱う

数学パズルをやっていて、Rationalというモジュールが出てきた。
用途としては「分数を実現する」というもので、Pythonで言うところのfractionsと同等(だと思う)。

r1 = Rational(1, 3)
r2 = Rational(2, 3)

puts r1 + r2 # => 1/1
puts r1 - r2 # => -1/3
puts r1 * r2 # => 2/9
puts r1 / r2 # => 1/2

【Backbonejs】listenToとstopListeningで対象のイベント監視を行う

BackboneのlistenToとstopListeningについて。
これらを使うと「特定のオブジェクト上で発生したイベントを監視する/監視をやめる」というのを実装することができる。

var listener = _.extend({}, Backbone.Events);
var target = _.extend({}, Backbone.Events);

listener.listenTo(target, 'event', function (event) {
    console.log('event happened');
});

target.trigger('event'); // event happened

listener.stopListening();
target.trigger('event'); // 何も表示されない

listenerにlisternToを使い、targetの「event」というイベントが発生したら特定の動作を行うようにしている。
第1引数が監視対象、第2引数が監視したいイベント、第3引数に実行する動作を指定する。
そして、stopListeningを実行すると呼び出したオブジェクトに紐付いている監視動作を全て削除する。

イベントの紐付きを解除することはガベージコレクションの関係上メモリリーク対策として重要だそうで。
適切にstopListeningで削除するようにしましょう。

【javascript】Backbone.jsの勉強をはじめました

諸事情によりBackbone.jsの勉強をはじめました。

Backbone.jsはjavascriptMVCフレームワークです。
物自体は数年前から存在しており、最近のjsフレームワークラッシュもあってすでに過去のものになりつつあります。
とはいえ、使っている現場はあるわけで…そうなると知らないといけなくなるわけで…

MVCフレームワークと言っていますが、モデル・ビュー・コレクションの3つになります。
コレクションについては複数のモデルを活用しやすくしている、というイメージ。
この辺はこれから勉強します。

ちなみに学習には以下の本を使ってます。
まずは写経ですかね。

【python】random.choice()で配列の中身をランダムに選ぶ

Pythonのrandomモジュールには「choice」という関数がある。 これは配列を引数として受け取り、配列に含まれている要素から1つをランダムに選んで返すというもの。

import random

ary = [1,2,3,4,5,6,7,8,9,0]
for _ in range(5):
    print(random.choice(ary))
python

最後の出力のところで<code>random.choice</code>を使用している。
事前に定義されたaryという配列から要素を一つ選びだしてコンソールに出力している。

これを実行した場合の出力は以下の通り。

$ python3 random-choice.py 5 6 9 2 2

なお、出力される数字はランダムに選ばれているので、実行するたびに出力結果は異なる。

【html】videoタグの動画に字幕を表示する

HTML5で動画を表示させる時、videoタグを使用する。 これで表示させた動画に対して字幕を付ける場合、videoタグの中にtrackタグを設定することで実現できる。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Video Sample</title>
</head>
<body>
    <video width="320" height="240" controls>
        <source src="sample.mp4" type="video/mp4">
        <track kind="subtitles" label="subtitle" src="subtitle.vtt" srclang="ja">
    </video>
</body>
</html>

こんな感じでtrackタグを実装する。 ちなみにvttファイルは字幕やキャプションのための標準規格で、一定のフォーマットに従っている必要がある。(参考: https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API

WEBVTT

00:01.000 --&gt; 00:04.000
Never drink liquid nitrogen.

00:05.000 --&gt; 00:09.000
- It will perforate your stomach.
- You could die.

上記のように、表示されるタイミングと内容をvttファイルに記述する。 すると、動画再生中に指定された時間の間、設定した文字列が字幕やキャプションとして表示される。

【読書】「Pythonからはじめる数学入門」読了しました。

全て読みきったのは2回目。 一度目よりもかなり勉強になることが多かった。

この本でわかったことは、「数学は楽しい」ということと「Pythonなら複雑な数式もプログラムにできる」ということ。

学生時代から好きだったが、改めて数学は楽しいと思った。 今回の本は主に高校生レベルの数学を題材にしている。 簡単な数式の記述に始まり、データの可視化、統計的計算、代数、集合論を経て微積分に辿り着く。 それぞれのトピックについて絵やグラフが多く用いられているため、下手な教科書よりもわかりやすくイメージがし易い。

また、Pythonを使えば多少複雑な数式であれば簡単に解答を導いたり図示できることがわかった。 何よりも、sympyの偉大さに気がつくことができる。 式と変数を定義し極限・微分積分を計算するための関数にそれらを渡し値域を決定する。 これだけで、学生時代に苦労していた計算も簡単に済んでしまう。 sympyを使って定義された式は、sympyが持っている図示するための関数に渡すことでグラフ化される。 これらはnumpyやmatplotlibと扱い方が似ているため、今後にも様々に知識を活かしていくことができる。

この本の惜しい点は、「機械学習関連の入門書にするには物足りない」ということ。 昨今の数学人気・Python人気は機械学習ブームによるところが大きいと思う。 そういうことを考えると、多次元配列を扱っていない・統計処理が深掘りされていない・pandasやPILなど機械学習系でよく使われるライブラリを扱っていない、というところに物足りなさを感じる。 ただ、この本自体が「数学学習のための補助教本」という立場を取っているため、この本を入門書として次の数学関連の技術書にステップアップしていけばいいと思う。

何よりも、「数式はPythonを使えば答えを導くことができる」という考えに至ることができたことこそ、この本を読んだ価値だと思う。


【javascript】数値の切り上げ・切り捨て・四捨五入を行う

javascriptで数値を扱っていて、切り捨て・切り上げ・四捨五入をしたくなった。 調べてみたところ、ここに書いてあるようにMathオブジェクトがそれを実現してくれる関数をもっているとのこと。

使い方はこんな感じ。

// 切り捨て
console.log(Math.floor(1.2345)); # => 1

// 切り上げ
console.log(Math.ceil(1.2345)); # => 2

// 四捨五入
console.log(Math.round(1.2345)); # => 1
console.log(Math.round(9.8765)); # => 10

特に何かをインポートする必要もなく、標準のオブジェクトを使って実現できた。 非常に有益だけれども、javascript標準のオブジェクトについて調べ直さないとな、と思いました。