Ruby (5) カウンターの改良

懸案だった、Ruby のカウンターを改良しました。Ruby で作ったカウンターは合計6か所で運用していたのですが、リセットされたのはおそらく1つだけだったのではないかと思います。まずは新たな版をこちらに1つ追加しました。

前回、ログも残したいと書いたのですが、とりあえず io.flock という機能を使って、多重に開けないように対策しました。前回公開したものを除き、それ以外のカウンターは新しい版に順次入れ替える予定です。

前回、Ruby カウンターを書いたのが、2016年。Aptana Studio 3 で開発し、Apache Server でテストしていました。今使っている PC にはどちらもインストールされていません。今は Aptana Studio 3 より、Visual Studio Code (VSCode) のほうが使いやすいかもしれないと思い、今回は VSCode で開発しました。VSCode からもローカルサーバーを起動する方法があるのですが、CGI で Ruby を起動してブラウザと Ajax 通信するような拡張機能を見つけられなかったので、テストは実環境で行いました。

CGI ファイル(今回は counter02.rb)のモードを実行可能にする必要があるのですが、前回どうやったのか覚えていません。chmod というコマンドを使ったような気もするのですが、Windows の FTP コマンドには chmod がないとのことで、調べた結果、ファイル エクスプローラーのパス入力に FTP サイトのアドレスを入力し、アップロードしたファイルのプロパティで実行可能にするという方法を取りました。

関連項目

固定ページを追加

固定ページ「のんきさんについて」を追加しました。ダッシュボードの固定ページ > 新規追加 でページを追加し、外観 > ウィジェットで固定ページをサイドバーに追加しました。

サイドバーにはカレンダーも追加しました。サイドバーの順番はウィジェットの中でドラッグアンドドロップで簡単に変更できました。

ちなみに、WordPress のバージョンは 4.8.14 で、5.5.1 が利用可能と出ています。しばらくは 4.8.14 のまま使ってみるつもりです。

WordPress はじめました

@nifty ホームページサービスに「簡単インストーラー」というのがあり、「PukiWiki」「phpMyAdmin」「WordPress」の3つがインストールできます。以前、棋譜のデータベースを作ろうとして「phpMyAdmin」はインストール済みだったのですが、今日は「PukiWiki」と「WordPress」の2つをインストールしてみました。

そして、この投稿が WordPress の記念すべき第1号記事です。

ブログは元々ココログやBloggerに書いています。このブログは今のところ WordPress の実験を主な目的にしようと思います。ココログはスマホで見ると広告がちょっとうっとうしいので、もしかしたらこちらに移行するのもありかもしれません。Bloggerはスマホでもうまく表示されます。WordPress もうまく表示されそうです。

追加リソース

プログラミング講座 (202) 1次元セルオートマトン

以前、Facebook の Small Basic グループに公開した1次元セルオートマトンのプログラムがあったので、これを Small Basic オンライン用に改造しました。

1dca_18

プログラムはこちらに公開しました。描画が終わるまで多少の時間がかかります。上図はルール18の1次元セルオートマトンについて y 方向に各世代を並べたものです。ルール18を含むいくつかのルールでは上図のようなシェルピンスキーのギャスケットと呼ばれるフラクタル図形を生成します。

関連項目

プログラミング講座 (201) パラメーター

数学のパラメーター

最近の連載で、直線の方程式をパラメーター k で表したり、スーパー楕円をパラメーター θ で表したりしました。このパラメーターは数学用語で媒介変数(ばいかいへんすう)とも言います。確率統計の母数(ぼすう)も英語では parameter です。

y = f(x) において、x を独立変数 (independent variable)、y を従属変数 (dependent variable) と言います。y を x の関数で表せればいいのですが、例えば円の方程式 x2 + y2 = r2 のように y = f(x) で表しずらいとき、媒介変数を使って x = g(θ), y = h(θ) のように従属変数を独立変数の関数で表せると計算がしやすくなったりします。

プログラミングのパラメーター

一方で、プログラミングでは仮引数(かりひきすう)が英語で (formal) parameter です。Small Basic では例えばヘルプ画面に出てくる GraphicsWindow.DrawRectangle(x, y, width, height) の x、y、width、height は仮引数です。これに対して実際に与える値を実引数(じつひきすう)と言い、英語では actual parameter と言います。例えば GraphicsWindow.DrawRectangle(150, 100, 400, 300) の 150、100、400、300 は実引数です。

引数を使うことで、その部分は外から変えられるのでより一般化されることになります。例えば3次関数の y = x3 を計算する関数より y = ax3 + bx2 + cx + d を計算するほうがより一般的な解が得られます。

プログラミングの引数にはもう一つメリットがあります。仮引数がローカル変数として扱われる点です。コピーしたものを変数として使うので、中身を上書きしても実引数は壊れません。

Small Basic では関数の定義ができず、全ての変数がグローバル変数なので、サブルーチンに変数を渡す場合、壊さないようにしたり、事前にコピーするようにするなどの工夫が必要です。また、何を外から渡しているかは、コメントなどで明示したほうが読みやすくなります。

GitHub Gist に Small Basic のサブルーチン群をスニペット (snippet) として公開しています。ここでは疑似的な引数については、

‘ param x, y – Cartesian coordinate

のように記述しています。この param はもちろん parameter の略ですが、伝統的なドキュメント形式として、JavaDoc、JSDoc 3、Doxigen などの(ソースコードからドキュメントを出力する)ツールで @param 仮引数名 と書いているものを真似ました。 ちなみに C# や VB でも <param id=”仮引数名”></param> という記法が使われています。

なお、Gist に上げているサブルーチン群は今のところ Small Basic デスクトップ用なので、Small Basic オンラインでは動かないものもあります。

関連項目

プログラミング講座 (200) 3次ベジエ曲線

2次ベジエ曲線は n = 0.5 のスーパー楕円や放物線が描けることが判りました。3次ベジエ曲線は両端と2つの制御点で描く曲線ですが、どんな曲線が描けるのでしょうか。

3次ベジエ曲線で描ける曲線

まず y = x3 – x が描けるかやってみました。

Cubicbezier_20200913235701

プログラムはこちらに公開しました。y = ax3 + bx2 + cx + d という形の3次曲線は描けそうです。その他に3次曲線の仲間がいろいろあるのですが、試してみたところ |x/a|1/3 + |y/b|1/3 = 1 という式のスーパー楕円、y2 = ax3 という式の半3次放物線、y2 = x3 +3x2 という式のチルンハウス3次曲線は描けることが判りました。

3次ベジエ曲線は2次ベジエ曲線を含む

なお、3次ベジエ曲線は2次ベジエ曲線を含んでいるので、制御点をうまく配置すれば2次ベジエ曲線と同じ曲線が描けます。

3次ベジエ曲線で描けない曲線

こちらも色々試しました。n = 1, n = 1/2, n = 1/3 以外のスーパー楕円は描けません。n = 2 のとき楕円(円)も近似するしかありません。双曲線 y = x-1 も描けません。デカルトの葉曲線 (folium of Descartes) x3 + y3 = 3axy も描けません。サイクロイド (cycloid) x = a(θ – sinθ), y = a(1 – cosθ) も描けませんでした。

あと、試していないのですが、描けなさそうなのが、シッソイド (cissoid of Diocles) (x2 + y2)x = 2ay2 や アーネシの曲線 (witch of Agnesi) (x2 +c2)y – c3 = 0 です。xy の項があると双曲線 (xy = 1) と同様描けないんだと思います。

関連項目

プログラミング講座 (199) スーパー三角関数?

円を一般化したのが楕円、楕円を一般化したのがスーパー楕円なので、円もスーパー楕円の一種です。半径1の円をパラメーターθで表した式が、

x = cos θ

y = sin θ

です。三角関数のコサインとサインです。スーパー楕円をパラメーターθで表した式、

x = sgn(cos θ) a |cos θ|2/n

y = sgn(sin θ) b |sin θ|2/n

はスーパー三角関数と呼んでもいいかもしれません。今回はこれをグラフにしてみましょう。当然ながら a = 1, b = 1, n = 2 のときは半径1の円と同じ式になります。a, b は振幅を表しているだけなので今回は 1 に固定して n を変化させながらグラフを描いていきます。スーパーコサイン (?) の n = 0.5 のときが下図。

Supercosine05

スーパーサイン (?) の n = 1.0 のときが下図になります。

Supersine10

プログラムはこちらに公開しました。

関連項目

プログラミング講座 (198) スーパー楕円

前回、2次ベジエ曲線はスーパー楕円の n = 0.5 のときの形という話をしました。今回はそのスーパー楕円を描くプログラムを作りました。プログラムはこちらです。下図は n = 0.5 のときのスーパー楕円で星形に凹んだ形になります。

Superellipse05

今回は DrawGrid を変更し、方眼線の座標系を数学でおなじみの原点が中心にあって、y 座標が上向きにしました。また、スーパー楕円が見やすいように方眼線の色も変更しました。

追記:n = 2/3 のときのスーパー楕円 x2/3 + y2/3 = 1 は星芒形 (astroid) と呼ばれています。ちなみに小惑星 (asteroid) とは綴りが違うそうです。また、芒(ぼう)はススキや草木のトゲを表す字で草かんむりの下は亡でなはく、左上が付き出ないようです。

関連項目