証明: 数列が収束する必要十分条件


数列が収束する必要十分条件を証明します。 (ここで証明するのは Cauchy(コーシー)の判定法ではありません。)

まずは収束の定義の確認です。

定義

数列 ( {alpha _n } ) が実数 ( alpha ) に収束するとは、 任意の正の実数 ( varepsilon ) に対応して 自然数 ( n_0 ( varepsilon ) ) が定まって次を満たすことをいう。

[ n > n_0 (varepsilon) Rightarrow | alpha _n – alpha | < varepsilon ]

数列 ( { alpha _n } ) が ( alpha ) に 収束する必要十分条件は次のようになります。

続きを読む 証明: 数列が収束する必要十分条件

AngularJS と Rails の form_for を組み合わせる


AngularJS と Rails の form_for を組み合わせて使ってみました。 何より厄介なのは action 属性 が 自動でついてしまうことです。

環境

  • Rails 4.1.8
  • Ruby 2.2.2
  • AngularJS 1.4.7
  • Ubuntu 15.04

状況

Rails の form_for を使うと、 Rails が action 属性 から すべて 設定してくれます。 もちろん、 form タグ の属性を 追加することもできます。 ただし AngularJS を使う上では問題がありました。

問題になるのは次のコードです。

このコードでは、 ボタンをクリックすると AngularJS による処理が実行された後で 本来の form の処理が実行されます。

AngularJS は、 action 属性 がないときは 本来の form の処理を行わないのですが、 Rails で action 属性 が自動でつけられている以上どうしようもありません。 いや、 action 属性 を消す方法があるのかもしれませんが、 私は見つけることができませんでした。

解決法

form タグ に onsubmit="return false;" を付け加えます。

button タグ で type="button" とすると、 ボタンクリック時はどうにか二重処理を防げますが、 入力欄で Enter を押されたときは防げません。

また AngularJS: How to prevent form submission after click on button? に記載されているような方法もありますが、 javascript として 他のところで使えないので、 上に書いたやり方の方がきれいに見えます。


証明: 無限小数になる有理数は循環小数


無限小数になる有理数は循環小数になることを証明します。 無限小数になる有理数というのは、 有理数になる小数の中で有限小数でないものになります。

割り算の操作をよく観察すればわかりそうなものですが、 感覚的なものを証明としてしっかり書いてみます。

感覚

たとえば 89 を 13 で小数の位まで順次割った場合、 余りは次のようになります。

\begin{eqnarray*} 89 \div 13 & = & 6 \; \textrm{余り} 11 \\ 110 \div 13 & = & 8 \; \textrm{余り} 6 \\ 60 \div 13 & = & 4 \; \textrm{余り} 8 \\ 80 \div 13 & = & 6 \; \textrm{余り} 2 \\ 20 \div 13 & = & 1 \; \textrm{余り} 7 \\ 70 \div 13 & = & 6 \; \textrm{余り} 5 \\ 50 \div 13 & = & 3 \; \textrm{余り} 11 \\ 110 \div 13 & = & 8 \; \textrm{余り} 6 \end{eqnarray*}

7 回目 の割り算で 1 回目 と同じ余りが出てきました。 13 で 割った時の余りの数は 1 から 12 の 12 種類しかありませんから、 13 回 割り算をやっても割り切れなかったら どこかで同じ余りが出ていて循環小数になることがわかります。

続きを読む 証明: 無限小数になる有理数は循環小数

Perl でメールを送信する方法


Perl でメールを送信する方法を紹介します。 私はこの仕組みを、サーバの状態を必要な時にメールで通知するスクリプトなどで利用しています。 (参考: Perl の経験皆無の私が作ったサーバ監視スクリプト)

環境

スクリプトを実行するコンピュータ

今回は2種類の環境でやってみました。

ケース1

  • Ubuntu 15.04
  • Perl 5.20.2

ケース2

  • EC2 Amazon Linux 2015.03
  • Perl 5.16.3

SMTPサーバ

  • EC2 Amazon Linux 2015.03
  • Postfix
    • CRAM-MD5 でパスワード認証を行う。

コード

一番単純なサンプルコードを掲載します。

パスワード認証をしない場合は、 Digest::MD5Authen::SASL も必要ありません。 もちろん auth と書いてある行も不要です。 しかし今回は CRAM-MD5 でパスワード認証をしているので、 モジュールが必要になります。 Net::SMTPauth メソッド が Authen::SASL を利用し、 Authen::SASL の中で Digest::MD5 が利用されるという流れです。

Authen::SASL が入ってないと auth を実行しても認証がおこなわれません。 Digest::MD5 が入っていないと、 Error: No SASL mechanism found と表示されます。

パスワードの認証方式は 自動で判別されています。 認証サーバで Digest-MD5 が有効であれば CRAM-MD5 よりも Digest-MD5 を優先的に使います。

そして、認証をするにはインストールしなければならないパッケージがあります。

  • Ubuntu の場合
    • libdigest-hmac-perl
    • libauthen-sasl-perl
  • Amazon Linux の場合
    • perl-Authen-SASL

Amazon Linux の場合、 MD5 のモジュールが入っているパッケージ perl-Digest-MD5 はあらかじめインストールされています。

perl は最初からインストールされていることが多く、 Net::SMTP モジュール は最初から使えるのですが、 認証するとなると別途インストールが必要になります。


A Life Summary of an Gypsy