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)

プログラミング講座(16) インポートの注意事項

ここでちょっと発行・インポートについての注意事項についてお伝えします。発行したプログラムをインポートすると変更が加えられていることが分かりました。この連載で発行したプログラムも File.ReadLine() を使っている行がコメントアウトされていました。

例えば、WordList v0.5 (プログラムID XLQ213)の場合、

14 ' The following line could be harmful and has been automatically commented.
15 ' line = File.ReadLine(filename, lno)

37 ' The following line could be harmful and has been automatically commented.
38 ' line = File.ReadLine(filename, lno)

がそれに該当します。このような行がある場合は、コメントを外し、

line = FileReadLine(filename, lno)

としてから実行してください。

(つづく)

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

2010/06/12

プログラミング講座の目次作りました

プログラミング講座の目次を作りました。Small Basic関連サイトへのリンク集も付けました。

プログラミング講座目次

※左下のリンクからも行けます。

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

プログラミング講座(15) 性能測定

プログラムの処理速度を改善する前に、現状がどうなのか調べてみたいと思います。今回リスト5にある時間測定のサブルーチンを追加し、比較的短いv0.3の単語帳プログラムのクロスリファレンスを作ってその時間を測ってみました。結果は以下の図にあるとおり3分41秒でした。

05
【図13 改善前の実行結果】

実行してみて気づくのは行番号付きのプログラムの表示が44行目あたりから、徐々に遅くなっていくことです。行数が増えれば増えるほど遅くなるようです。どこが遅いのか見当がつきますか?

プログラム全体についてはプログラムID XLQ213 で公開してあります。

【リスト5 単語帳プログラム v0.5 変更部分】

1 '単語帳プログラム WordList v0.5
2 '
3 '時計開始
4 StartClock()
5 'タブの文字コード
6 TAB = 9
7 '英文のテキストを入力ファイルとして開く。(Small Basicでは不要)
8 filename = "WordList03.sb"

:
:

42 '時計終了
43 StopClock()
44 '時計表示
45 PrintClock()

:
:

183 'サブルーチン StartClock (時計を開始する)
184 'output: begintime
185 Sub StartClock
186 begintime = Clock.ElapsedMilliseconds
187 ems = begintime
188 TextWindow.Write("Start: ")
189 PrintTime()
190 EndSub
191 '
192 'サブルーチン StopClock (時計を終了する)
193 'output: endtime
194 Sub StopClock
195 endtime = Clock.ElapsedMilliseconds
196 ems = endtime
197 TextWindow.Write("Stop: ")
198 PrintTime()
199 EndSub
200 '
201 'サブルーチン PrintClock (時計を出力する)
202 'input: begintime
203 'input: endtime
204 'work: ems
205 Sub PrintClock
206 ems = endtime - begintime
207 TextWindow.Write("Time: ")
208 PrintTime()
209 EndSub
210 '
211 'サブルーチン ConvertEmsToTime (Emsを時分秒に変換する)
212 'input: ems (elapsed milliseconds)
213 'work: hmsms (時分秒ミリ秒)
214 'work: msms (分秒ミリ秒)
215 'work: sms (秒ミリ秒)
216 'output: time[] (時分秒)
217 Sub ConvertEmsToTime
218 hmsms = Math.Remainder(ems, 24 * 60 * 60 * 1000)
219 time["Hour"] = Math.Floor(hmsms / (60 * 60 * 1000))
220 msms = Math.Remainder(hmsms, 60 * 60 * 1000)
221 time["Munite"] = Math.Floor(msms / (60 * 1000))
222 sms = Math.Remainder(msms, 60 * 1000)
223 time["Second"] = Math.Floor(sms / 1000)
224 EndSub
225 '
226 'サブルーチン PrintTime (時刻を出力する)
227 'input: ems
228 'work: time[]
229 Sub PrintTime
230 ConvertEmsToTime()
231 TextWindow.WriteLine(time["Hour"] + ":" + time["Munite"] + ":" + time["Second"])
232 EndSub

(つづく)

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

より以前の記事一覧