2020/09/29

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 サイトのアドレスを入力し、アップロードしたファイルのプロパティで実行可能にするという方法を取りました。

関連項目

| | コメント (0)

2020/09/20

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

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

1dca_18

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

関連項目

| | コメント (0)

2020/08/19

プログラミング講座 (190) Small Basic オンライン

Small Basic(スモールベーシック)の公式サイト http://smallbasic.com にはマスコットのシェルダン(左)とシェリー(右)がいます。その右側(画面サイズによっては上)に [Download Small Basic](上)というボタンと [Start Conding Online](下)というボタンがあります。上が Small Basic デスクトップをダウンロードするボタンで、下が Small Basic オンラインをブラウザ上で開始するボタンです。今回は下のボタンを押して進めていきます。

Smallbasicweb

次に現れるのが Small Basic オンラインのエディター画面です。ここには予めサンプルのプログラムが表示されています。このプログラムを動かしてみましょう。メニューの一番右にある [Run] ボタンを押します。

Sboeditor

このサンプルプログラムは名前を聞いてそれを表示するようになっています。名前を入力し [Enter] キーを押してみましょう。

Sbosample

[Back] ボタンを押して、エディター画面に戻ります。このサンプルはテキストを表示するプログラムでしたが、今度はグラフィックスを表示するプログラムを書いてみましょう。メニュー左端の [New] ボタン、[OK] ボタンを押し、以下のプログラムを打ち込んで [Run] ボタンを押してみます。

GraphicsWindow.BrushColor = "Orange"
GraphicsWindow.FillEllipse(10, 10, 200, 200)

Circle

[Back] でエディターに戻ります。左サイドにある Small Basic の3つの立方体のアイコンをクリックしてリファレンスを表示してみます。現在、Small Basic デスクトップと同じリファレンスが表示されますが、前回お伝えしたように、実装されていない機能もかなりあります。

Sboreference

今回は本当に簡単な説明でしたが、次回に続きます。

関連項目

| | コメント (0)

2013/05/22

Mac mini

先日 Mac mini を購入しました。iPad2 を持っていたので、いろいろと連携できて楽しめています。

Silverlight や Java をインストールし、JavaScript の開発環境 Aptana Studio 3 もインストールしました。

Windows と Mac で似たような機能があるので、比較すると、とても面白いです。Windows の「コマンドプロンプト」に対応するのが、Mac では「ターミナル」。なつかしい unix のコマンドが入っていることが分かり、ちょっと興奮しています。「ターミナル」だけでも、しばらく遊べそうです。

Mac mini の写真

| | コメント (0) | トラックバック (0)

2012/10/02

フリーソフト紹介: Aptana Studio 3

Aptana Studio 3(アプタナ スタジオ スリー)は、Java と JavaScript の開発に使っていた IDE(アイデーイー:統合開発環境) Eclipse (エクリプス)をベースとした IDE です。

Java (ジャバ:プログラミング言語)の開発はできないのですが、HTML(エイチティーエムエル:ウェブの記述言語)、CSS(シーエスエス:ウェブのスタイル記述言語)やブラウザ上で利用できるプログラミング言語 JavaScript(ジャバスクリプト)、サーバー上で利用できるプログラミング言語 Ruby(ルビー)の開発ができます。

Aptana Studio 3

最近バージョンアップがあったらしく、アップデートしたところ、エディタが起動しなくなってしまいました。仕方が無いので、一旦アンインストールして、インストールし直したところ、ちゃんと動きました。現在の Aptana Studio 3 のバージョンは、3.2.2.201208201020 です。

Eclipse と同様、Pleiades(プレアデス)という日本語化するアドインがあるのですが、エラーメッセージが日本語になってしまうと、インターネットを検索してもなかなかヒットしないので、英語のまま使うことにしました。

ホームページの更新のとき、@niftyのマイキャビ ネットワークドライブ連携機能というのを長年使ってきたのですが、そのサービスが今年の8/20に終わってしまいました。それ以降、コマンドプロンプトの FTP コマンドを使ってファイルをサーバーにアップロードしていたのですが、Aptana Studio 3 にファイルのアップロード機能があるので、今後はこちらを使うことになると思います。

| | コメント (0) | トラックバック (0)

2012/10/01

iOS6、Windows共通のフォント

iPad2 の iOS を iOS6 にアップグレードしました。ブラウザ safari の標準のフォントが明朝体になったらしく、私の作ったホームページも一部明朝体になっていました。これまで、iOS のフォントは全く気にしていなかったので、仕方ない話なのですが。

ということで、ホームページのフォントを見直す予定です。iPhone / iPad 用の Typefaces というフリーソフトで iOS6 のフォントを調べてみました。75ファミリ、217種類もフォントが入っていました。そのうち Windows と同じ名前のフォントを基本的に使っていきたいと思います。iOS6 と Windows (Vista)で共通の名前のフォントは、

Arial [Bold] [Italic]
Courier New [Bold] [Italic]
Georgia [Bold] [Italic]
Symbol
Times New Roman [Bold] [Italic]
Verdana [Bold] [Italic]

の6種類でした。日本語のフォントは共通のものはないので、iOS用とWindows用を双方指定する必要がありそうです。

[iOS6]
ヒラギノ角ゴ ProN W3
ヒラギノ角ゴ ProN W6
ヒラギノ明朝 ProN W3
ヒラギノ明朝 ProN W6

[Windows]
MS Pゴシック または メイリオ
MS P明朝

| | コメント (0) | トラックバック (0)

2012/02/28

ホームページをリニューアル

以前の記事「ホームページを復活」にトラックバックしています。

ホームページをリニューアルしました。
ホームページ

まず、ドメイン名をドメイン@niftyで取りました。

これまで@homepageというサービスを使っていましたが、新たに@niftyホームページサービスのLaCoocanスタンダードに加入しました。

取得したドメイン名をLaCoocanの別名に指定しました。

そして、index.htmlを書き換えました。これまではHTML 4.01準拠のものでしたが、HTML 5準拠(といっても仕様がまだ確定していないのですが)にしました。

HTML 5の勉強も兼ねて時々アップデートしようと思います。

| | コメント (0) | トラックバック (0)

2011/09/18

Facebook始めました。

Facebookにアカウントを作成しました。まだ、どのように使うのかイメージできていません。
ココログのブログを書きつつ、Twitterのアカウントがあって、Facebookもある。
便利なような、冗長なような、よく分からない状態です。

とりあえず、現在、このブログの内容はTwitterに通知され、Twitterの内容はFacebookに送られるようになっています。ブログの記事を書けば全てに行きわたるわけです。

このブログでは、Javaアプレットで三目並べや囲碁などのプログラミングをして、エッセンスを公開しています。ココログ、Twitter、Facebookを通してプログラミングに興味を持ってくれる人が増えたらいいな、と考えています。

| | コメント (0) | トラックバック (0)

2010/06/16

ホームページを復活

久しぶりにホームページを更新しました。9年前に作ったホームページです。この間@niftyのサービスもだいぶ変化したようです。

・@homepageの新規加入はできなくなっていました。
・ホームページ作成ツール「サクサク作成君」はなくなり、「サクサクかきあげ君」に変わっていました。
・メッセージボードはなくなっているようです。

リンク切れも起こしているような状態ですが、追々、直していこうと思います。

| | コメント (0) | トラックバック (1)

2010/06/15

プログラミング講座(17) チューニング

では、どこが遅いのか当りをつけて直してみましょう。単語帳プログラムは入力ファイルを読み込むうちにだんだんと遅くなっていましたね。1行読むたびにその行から単語を切り出して、単語帳に登録していました。どうやらその登録の処理がだんだんと重くなっているようです。以下のリストはそのプログラムの部分の抜粋です。

【リスト6 InsertWordListサブルーチン】
97 'サブルーチン InsertWordList (単語帳に単語を登録する)
98 'input: word (単語)
99 'input: wordlist[] (単語帳: 単語)
100 'input: lnolist[] (単語帳: 行番号)
101 'input: wno (登録した単語数)
102 'work: i, j (単語帳の引数)
103 'output: wordlist[] (単語帳: 単語)
104 'output: lnolist[] (単語帳: 行番号)
105 'output: wno (登録した単語数)
106 Sub InsertWordList
107  For i = 1 to wno
108   CompareWord()
109   If (cwresult = "<") Then
110    For j = wno to i step -1
111     wordlist[j + 1] = wordlist[j]
112     lnolist[j + 1] = lnolist[j]
113    EndFor
114    wordlist[i] = word
115    lnolist[i] = lno
116    Goto exitiwl
117   EndIf
118  EndFor  
119  wordlist[wno + 1] = word
120  lnolist[wno + 1] = lno
121 exitiwl:
122  wno = wno + 1
123 EndSub

ここでは何をしているかというと、切り出した単語を wordlist[] という配列に登録しているのですが、アルファベット順になるように挿入すべき場所が見つかったら、それ以降の単語リストを1つ分すべてコピーしています。このコピーは単語の数が多くなるほどコピー回数が増えて行くので、ここが遅い原因だろうと目星を付けました。

Photo
【図14 配列構造】

そこで、この配列をコピーしないで済むような、ポインタを使った構造に変えてみることにします。

Photo_2
【図15 ポインタ構造】

その結果できたのがWordList v0.6で、例によって[発行]の機能でアップロードしました。プログラムIDはHBQ757です。「プログラミング講座(16)」でも述べたとおり、

30 ' line = File.ReadLine(filename, lno)
57 ' line = File.ReadLine(filename, lno)

の2行はコメントになっているのでシングルクォートを消して元に戻してください。そして、

11 '改善後のポインタ構造を使用するか?
12 improved = "True"

の12行目の変数 improved が "True" に設定してありますが、この場合はチューニング後のポインタを使った(コピーを行わない)サブルーチンを呼び出します。これを "False" に変更すると、チューニング前の配列を使った(コピーを行う)サブルーチンを呼び出します。

また、v0.5では入力ファイルはプログラム中で WordList03.sb を指定していましたが、v0.6ではコマンドラインから入力するように変更しました。

File name?

と出るので、ここで WordList03.sb をタイプしてEnterキーを押します。v0.6の12行目の変数を "True" と "False" で実行した結果は、以下の通りです。環境によって数値は変化すると思いますが、配列のコピーを止めることで、実用的なスピードになったと思います。

改善前のタイム 0:0:56

改善後のタイム 0:0:4

(つづく)

| | コメント (0) | トラックバック (0)

より以前の記事一覧