Hatena::ブログ(Diary)

似非プログラマの覚え書き RSSフィード Twitter

2011-11-30 ものぐささんに捧ぐ

適当な長さのランダム英数文字列を生成する

#!/ruby/bin/ruby

numbers = ('0'..'9').to_a
alphabets = ('a'..'z').to_a
characters = numbers + alphabets
length = rand(3) + 6

includeNum = false
includeAlph = false

until includeNum && includeAlph do
    pass = (
        Array.new(length) do
            characters[rand(characters.size)]
        end
    ).join

    numbers.each { |num|
        if pass.include?(num) then
            includeNum = true
            break
        end
    }

    alphabets.each { |alph|
        if pass.include?(alph) then
            includeAlph = true
            break
        end
    }
end

p pass

1 行目は Ruby の実行ファイルの場所を指定する。Windows なら C:\Ruby\bin にあるのでこのままで動く。これを適当なファイル名(拡張子は .rb とする)で保存すればコマンドプロンプトでファイル名を打つだけで動作する。

長さは 6 〜 8 でランダム、数字とアルファベットの両方が含まれているものだけが 1 個生成され表示されます。大文字のアルファベットも使いたい場合は

upperAlphabets = ('A'..'Z').to_a
characters = numbers + alphabets + upperAlphabets

とかやればいいです。含まれているかどうかのチェック方法は以下同文なので省略。

2011-11-25 そもそもの話

Web アプリケーションとは

いきなりフレームワークとか紹介しちゃって、そもそも「Web アプリケーションとは何か」って話をすっ飛ばしてたのでここで改めて。

ウェブアプリケーション - Wikipedia

そもそも Web アプリケーションとは「ブラウザから送信されたリクエストに基づいてサーバ上にあるプログラムが処理を行い、結果をレスポンスとしてブラウザフィードバックする」ものを言います。サーバ上で動作することが要件なので、ブラウザ上で動作するものであっても JavaScript のように一旦クライアントダウンロードされてから実行されるものは含みません。また、Java アプレットFlash のように、ブラウザ以外の何かしらのソフトが必要となるものも Web アプリケーションとは言いません。*1

ここで CGI を作ったことのある人なら「CGI と Web アプリケーションは何が違うの ?」と思われるでしょうが、Wikipedia にもある通り、CGI も立派な Web アプリケーションです。

Wikipedia にもある通り、Web アプリケーションには「ブラウザさえあれば使用できる」「特別なソフトはいらない」「メンテナンスが容易」という利点があります。一方で「サーバがダウンすると使えない」「通信環境がないと使えない」「GUIブラウザ依存」などの欠点もあります。もちろんこれらの欠点を補うための方法はいくつかありますが、「通信環境がないと使えない」は如何せんどうしようもないので、Web アプリケーションは何らかの通信手段を確立している人が使用することが大前提となります。

続きを読む

*1:ただし Web アプリケーションとこれらの技術を組み合わせる手法はよくある。

2011-11-04 今更ですが

Python で文字列反転

文字列を反転させる方法として、例えば Java ならば StringBuffer クラスの reverse メソッドがあるが、Python で「いかにも Python っぽい !」という書き方があったので紹介しつつ考察したい。

まずは正解から言ってしまうと、ここに書いてある。

文字列を逆順にする - ひきメモ

>>> str = "abcdefg"
>>> str[::-1]
'gfedcba'

ではなぜこれが正解なのか。以下考察。

続きを読む

2011-11-03 こんなこともできるのね

長さ 0 の配列

int [] a = new int[0];

とすると長さ 0 の配列が生成される。長さが 0 なので、もちろん a[0] などにアクセスしようとすると ArrayIndexOutOfBoundsException になるが、Object としては null ではないので NullPointerException にはならない。実際 a.length はちゃんと 0 を返す。当然だが後から a に何かしらの配列を代入することができるので、長さがいくつになるか分からない配列を受け取る変数初期化しつつ NullPointerException を避ける方法としてはアリかな。

2011-11-01 恥の上塗り

Struts のサンプル(解説)

前に掲載した Struts のサンプルの解説です。軽く Q & A も付けます。

続きを読む