■■===============【プログラムメールマガジン 色彩】===============■■■ 日本語プログラミング言語なでしこ&ひまわり、WEB開発環境葵情報マガジン ┏━━━━━━━━┓ ┃No3     ┗━━━━━━━━┛  春を感じる季節となり、先日には毎年恒例、日本語プログラミング言語なでしこの  出展を行っているオープンソースカンファレンスというイベントが開催されました。  なでしこのブースにもユーザーの方がたくさん訪れていただき、ユーザー同士の  交流が盛んに行われたしだいです。ユーザーとの交流することで知識が身につき  情報を共有できるということは重要ですね。  では、今回のラインナップはこちらです。  【01】 Word/Excel/Powrpointとの連携 第3回 文字列「0001」を扱う(つづき)  【02】 なでしこで使うと便利そうなWinAPI 第2回 多重起動を防止しよう!  【03】 RPG感覚で「なでしこ本」を学習中  第3回 何でサンプルプログラムを改造するの?  【04】 GUIマスターへの道 第3回 バー  【05】 なでしことd3libraryで3Dやろう! 第2回 簡単なモデルをポリゴンで描画してみよう  【06】 ポ・イ・ン・ト 第3回 マイクロを知ろう! ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃01  テーマ名:Word/Excel/Powrpointとの連携              ┃      第3回 文字列「0001」を扱う(つづき)  執筆:粗茶 ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ こんにちは。粗茶です。 Excelを中心に「なでしこ」で仕事を効率化するテクニックを紹介しています。 Excelや「なでしこ」で頭にゼロの付く数字を扱う際の注意について 前回のおさらいを兼ねて、以下のプログラムを見ながら説明していきます。 まずはExcelの新規ブックを開いて、A列の書式設定を「文字列」にします。 そしてセル「A1」から「A5」に、「0001」から「0005」と入力します。 これをデスクトップに「number.xls」として保存してください。 number.xls(実行前)の中身: A列(文字列)   0001   0002   0003   0004   0005 #--------+---------+---------+---------+---------+---------+ エクセル起動して「{デスクトップ}number.xls」をエクセル開く。 # 1 「A1」から「A5」までエクセル一括取得してデータに代入。    # 2 データの0から「0003」を配列検索して表示。 #文字列として検索 # 3 データの0から「3」を配列検索して表示。   #文字列として検索 # 4 データの0から3を配列検索して表示。     #数値として検索  # 5 もしデータ[2]=「3」ならば「あ」を表示。  #文字列として比較 # 6 もしデータ[2]=「0003」ならば「い」を表示。 #文字列として比較 # 7 もしデータ[2]=3ならば「う」を表示。    #数値として比較  # 8 もしデータ[2]<10ならば「え」を表示。    #数値として比較  # 9 データ[2]=データ[2]+10。データを表示。   #数値として計算  #10 データ[2]=データ[2]を4でゼロ埋め               #11 「B3」へ「'{データ[2]}」をエクセルセル設定          #12 「{デスクトップ}number.xls」へエクセル保存してエクセル終了。 #13 #--------+---------+---------+---------+---------+---------+ まず、「なでしこ」がExcelから取得した時点では、 値は文字列として保持されています。(#2の結果) ですから、文字列で検索するときは頭のゼロまで完全に一致しなければなりません。 これは数値として検索する場合でも同様です。(#3〜#5の結果) 検索するだけでは、値は変更されません(書き換えられません)。 次に値を比較してみます。 文字列として比較した場合は頭のゼロまで比較対象となりますが、 数値として比較した場合は、頭のゼロは無視されます。(#6〜#9の結果) 比較したときも、値は変更されません。 ただし、前回も説明したように、値を計算した後で代入したときには、 当然ながら変更されてしまいます。(#10の結果) このように通常の数値となった値の頭にゼロを付けるには「ゼロ埋め」を使います。 全体の桁数を4桁にして「3」をゼロ埋めすると、「0003」となります。(#11の結果) でもこれだけではExcelに貼り付けたときに、また頭のゼロが取れてしまいます。 そこで、Excelに値を渡すときに「'」を付けてエクセルセル設定すると、 Excelは文字列として判断してくれますので、頭にゼロが付いたまま正しく表示されます。 セルの書式が文字列に設定されていないときは、このようにします。(#12の結果) セルの書式が文字列に設定されているならば、「'」は付けなくても構いません。 結果: 2 -1 -1 い う え 0001 0002 13 0004 0005 number.xls(実行後)の中身: A列(文字列) B列(標準)   0001   0002   0003    '0013   0004   0005 せっかくプログラミングしたのに、思うような結果が得られないことがよくあります。 そんなときは、変数の値がどのように変化しているかに注目すると、 プログラムのミスや習性に気付くことがあります。試行錯誤を何度も繰り返して、 検証することによって、プログラミングのスキルは上達すると思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃02  テーマ名:なでしこで使うと便利そうなWinAPI               ┃      第2回 多重起動を防止しよう!  執筆:SIGO@TOPOZO ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ プログラムを作っているとき多重起動を防止したいときが時々あるかと思います。 そこで今回はWinAPIの"CreateMutex"と"GetLastError"を使って簡単な多重起動 の検知を行います。 1:今回使うWinAPI  ・CreateMutex   ミューテックスオブジェクトを作成するための関数です。   第3引数で指定したミューテックスオブジェクトが既に存在する場合、   それをオープンします。  ・GetLastError   呼び出したスレッドが持つ最新のエラーコードを取得する関数です。   -システムエラーコード一覧    http://www.geocities.jp/fjtkt/download/sample/SysError20030914.html 2:使い方  ・CreateMutex    ●CreateMutex(p,b,{参照渡し}n)=DLL("kernel32.dll","HANDLE CreateMutexA(PSECURITY_ATTRIBUTES psa,BOOL bInitialOwner,PCTSTR pszMutexName);")   と定義すれば使えます。引数は前から、    セキュリティ指定子(SECURITY_ATTRIBUTES構造体のアドレス)    所有権指定フラグ    オブジェクトの名前文字列へのポインタ   となっています。色々とややこしそうですが今回はオブジェクトの名前以外は0で構いません。  ・GetLastError   ●GetLastError=DLL("kernel32.dll","DWORD GetLastError(void);")  と定義すれば使えます。引数はありません。単純に呼び出せばエラーコードを返してくれます。 3:実際に書いてみる  今回のプログラムの流れとしては   CreateMutexでミューテックスを作成   →既に作成されていたらGetLastErrorがERROR_ALREADY_EXISTS (183)を返す   →ERROR_ALREADY_EXISTならば終了  のようになります。  なお、CreateMutexで取得したハンドルはプロセスの終了時に自動的に閉じられ、  最後のハンドルを閉じた際ミューテックスオブジェクトは破棄されます。  /*ここから*/  ●CreateMutex(p,b,{参照渡し}n)=DLL("kernel32.dll","HANDLE CreateMutexA(PSECURITY_ATTRIBUTES psa,BOOL bInitialOwner,PCTSTR pszMutexName);")  ●GetLastError=DLL("kernel32.dll","DWORD GetLastError(void);")  !ERROR_ALREADY_EXISTS=183  CreateMutex(0,0,"Nako_Mutex")  もし(GetLastError=ERROR_ALREADY_EXISTS)ならば    「既に起動してます」と言って終了  /*ここまで*/  CreateMutexを使うと多重起動防止の他にもファイルロック等が簡単に  実装出来ると思います。多重起動防止の方法は他にも色々あるので  試してみると面白いかもしれません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃03  テーマ名: RPG感覚で「なでしこ本」を学習中 ┃ 第3回  何でサンプルプログラムを改造するの?  執筆:matumatu ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.何でサンプルプログラムを改造するの?   一番大きい理由は、くじら飛行机さんの「日本語で10行プログラミング」   (2) なでしことはその2で、下記のようにプログラムの改造を推奨されて   いるからです。    この言葉を励みにして、単に「なでしこ本」のプログラムを転載して、   正常に動作するかテストするのでなく、部分改造で良いので、自分の工夫で   オリジナルなプログラムを作りたいと思っています。   >||   本連載では、これから10行以内という短いプログラムで、   役に立つプログラムを紹介していこうと思いますが、   カッコ「...」の中や数値をちょっと書き換えるだけで、   自分の役に立つプログラムに改造ができると思います。   改造こそプログラミング上達の最良の方法です。   ぜひ、今後の連載をお楽しみに!   ||< 2.改造に熱中すると、学習スピードが落ちませんか?   この記事を書くために、最近8日間の学習時間を   詳細に記録し、分析しました。   ・ サンプル学習  平均時間 :    22分 (24%)   ・ 改造学習    平均時間 :    56分 (60%)   ・ 日記作成時間  平均時間 :    15分 (16%)     ------------------------------------------------------     なでしこ本学習 合計時間 : 1時間33分(100%)   学習の初期の頃は、なでしこ本の特定のサンプルの改造に熱中し、   全然進まなくなりました。   最近は、「なでしこ本学習レベル判定プログラム」のおかげで、   特定のサンプルの改造に熱中した場合、数値が悪化するので、   原則として、なでしこ本1ページ分のサンプルプログラムの   改造は、1日以上かかるような、凝った改造はしていません。   上記分析の結果、なでしこ本を1ページ学習するのに、   約1時間半かかっています。   その内の、約6割が改造時間です。   現在、なでしこ本学習完了予想日数 = 427   つまり、まだ1年以上学習しないと、完了しない原因は、   改造に時間をかけすぎているからだと、痛感しました。   仮に一切改造しない学習方法に切り替えると、   単純計算ですが、 2.5倍学習スピードが速くなるので、   なでしこ本学習完了予想日数 = 171   で、学習が完了する可能性があります。   それでも、くじら飛行机さんの「改造こそプログラミング上達の   最良の方法です。」の言葉を信じて、学習スピードは遅くなっても   改造を続けています。 3.今年の努力目標(挫折分)   ・ 休日は、なでしこ本を1日2ページ学習し、上記と同じ方法で公表する。  (仕事が、超多忙になり、土曜も仕事をしているので、休日は休養しています。) 4.メルマガ学習理解度   創刊号(No1)   学習完了2件 / 記事8件 = 25%      学習完了した記事 : 【02】執筆:matumatu              【08】執筆:EZMAVI.netさん   (No2)   学習完了2件 / 記事5件 = 40%      学習完了した記事 : 【03】執筆:matumatu              【05】執筆:EZMAVI.netさん   つまり、ほとんど学習が進んでいません。 (^^;) 5.現在の、なでしこ本学習レベル判定結果   ・ 「 RPGレベル判定8.nako 」は、現在Ver 0.8     まで進化しました。   ・ 学習レベルの判定機能と、日記作成支援機能を兼ねています。   ・ 下記は、日記作成支援機能で、自動的に作成されたデーター     を少し加工したもので、はてな記法で出力しています。     * 学習レベルを判定した結果 LV = 4: HP = 114 : MP = 400     - 完了予想日数 = 429 → 427 改善     --完了予想年月日 = 2009/05/11 → 2009/05/10 改善     --- はてなカウンター値 = 22233     ----学習開始日から本日までの日数 =116日   ☆★ サイト:http://nadesiko.g.hatena.ne.jp/matumatuh18/   ■□ はてなキーワード = なでしこ本学習レベル判定 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃04  テーマ名:GUIマスターへの道  ┃      第3回 バー 執筆:はやしま ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ なでしこは、GUIベースのアプリが簡単に書けることも大きな魅力のひとつです が、マスターするのはなかなか大変です。 このコーナーでは、GUI部品の説明を、GUI部品を習得するためのコツも含めご紹 介したいと思います。基本姿勢は、「習うより慣れろ!」です。 今回のテーマは、「バー」です。 さて、まずは なでしこエディタを起動してみましょう。 そして、「命令検索」と書かれたタブをクリックしてみてください。 現れた検索ボックスに「バー」と書いて「列挙」ボタンをクリックすると・・・、 「バー」という文字が含まれた命令が一覧で出てきます。 その中から「バー」を見つけて、右クリックしてみましょう。 そして、ポップアップしたメニューから、「命令の解説を見る(on)」を選択して ください。 すると、オンラインマニュアルがブラウザで表示されますね。 (ちなみにネットワークにつながっていないとダメですが) すると、サンプルがありました。 #サンプル サンプルバーとはバー。 サンプルバーを変更した時は〜   母艦のタイトルはサンプルバーの値。 早速、これを なでしこエディタ にコピーして実行してみましょう。 ・・・すると、何か、横スクロールバーのようなものが表示されましたね。 これが、「バー」です。 で、ではこれが何なのかというと、バーとは、最大値と最小値の間の数値を感覚 的に設定しやすいインターフェイスを持ったGUI部品です。例えば、音量を設定 するような時に使用できます。 単純に数字を入力するようなインターフェイスであれば、エディタでもできるわ けですが、少しでも簡単に、感覚的に設定できるように、様々なインターフェイ スが存在するわけです。 みなさんも、何かの情報を入力するための部品を用意するときには、いかに入力 しやすいインターフェイスを選択できるかについても、こだわってみてはいかが でしょうか。 ━[PR]━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ なでしこを学習するなら・・・なでしこ学習帳@はてな http://nadesiko.g.hatena.ne.jp/ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃05  テーマ名:なでしことd3libraryで3Dやろう! ┃  第2回 簡単なモデルをポリゴンで描画してみよう 執筆:ゆちボン ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ こんにちは、ゆちボンです! 前回はワイヤーフレームの立方体を描画しましたが、今回は簡単なモデルを ポリゴンで描画してみようと思います。 ...そこで、かなり悩んだのですが「身近にある」+「簡単」ということで、 横断歩道を選びました。 初めて描画するにはもってこいのものだと思います。 早速、なでしこのエディタをひらいて、以下のプログラムを打 ち込んでください。 !「d3lib.nako」を取り込む。 d3init(母艦の背景ハンドル,640,400)'d3libraryを初期化 これは、d3libraryを使うために初期化(=準備)するプログラムです。 これを指定しないと、どのぐらいの高さ,幅に、どの色で描画するかが判別 できないからです。 横断歩道といえばあの白い四角形が何個か横に並んでいる姿が目に浮かぶと 思います。白いやつより、まずアスファルトの道路ですね。 灰色に色を設定したあとにカメラを移動して実際に描画して見ましょう。 塗り色は$CCCCCC。BOX(-1,-1,-1,-1) '色の設定(これがない と描画できない) d3setcam(300.0,300.0,300.0,0.0,0.0,0.0,1.0) 'カメラの設定 Xとは実数。Yとは実数。Zとは実数。 '変数を宣言(わかりやすくするため) X[0]=180.1;X[1]=-180.1;X[2]=-180.1;X[3]=180.1 'X座標の代入。 Y[0]=180.1;Y[1]=180.1;Y[2]=-180.1;Y[3]=-180.1 'Y座標の代入 4回、Z[回数-1]=0.1 'Z座標の代入。高さ(Z座標)は変わらないので0を代入します。 d3square(X,Y,Z) '道路の描画 まずは、色の設定のところです。ペンなどを指定した後はなでしこの 描画命令を座標外でいいので描画してください。 これでペンなどが設定されるらしいです。(*1) カメラの設定は最初の3つが「カメラの位置」で、次の3つが「ターゲット位置」です。 そこに向かってカメラを向けます。最後のひとつは視野角です。 本当はスケールのことなのですが、わかりやすくするため視野角 という言葉を使っています。描画するのですが、 座標をX,Y,Zそれぞれ実数の配列変数に代入してd3squareで描画します。 実は内部関数で「d3square」命令を実装していますがd3sq_nakoを使えば 直で座標指定が可能になります。 ただ、わかりにくくなるのでこの状態にしています。 実行してみたら画面の真ん中に、四角形が描画されたと思います。 さて、次は白い四角形ですが、とりあえず4つ描画してみましょう。 何個も座標を打つのは大変なので「回」を使って繰り返して描画すると便利です。 塗り色は白色。BOX(-1,-1,-1,-1) '色の設定 X[0]=-240.1;X[1]=-200.1;X[2]=-200.1;X[3]=-240.1 'X座標の代入。 Y[0]=100.1;Y[1]=100.1;Y[2]=-100.1;Y[3]=-100.1 'Y座標の代入。 4回  4回   X[回数-1]=X[回数-1]+90.0  d3square(X,Y,Z) 色変更、座標代入についてはもうほぼ完璧ですね? 繰り返すところ構造がわかりにくいとは思いますが、X座標を 全部ずらしてから描画するという手順を踏んでいるだけです。 今回はここまでです。次回は円などを使って動く画面を作ってみましょう! なお、d3libraryを使えばどんな風なゲームが作れるかを知りたい場合は 「d3library」の中に入っている「shoot.nako」で遊んでみてください。 最新版の「d3library」はこちらから入手できます。 http://www.geocities.jp/yutibonsoft_jp92/d3lib.html *1:Delphiがちょっとしか読めないのでなでしこのソースを見れません。   なのでわかりません。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┏━┓ ┃06  テーマ名:ポ・イ・ン・ト ┃      第3回 マイクロを知ろう  執筆:EZMAVI.net ┗━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ どうも、EZNAVI.netです。 メールマガジンを購読している方の中には花粉症という方もいるのでは!? 私自身もその一人なのですがこの時期自宅でいることが多く憂鬱(ゆううつ) だったりするものですね。 皆さんは花粉どの程度の大きさの物か知っている方はいるでしょうか。 代表的な花粉(スギ)では直径約20マイクロメートル(μm)あるとの事です。 ここでマイクロメートルという単位が出てきましたが、1μmは 0.000001メートルという意味で相当なほど小さいものです。 例えば、新聞紙の厚さ(一枚)約80μmということで小ささが想像できます。 最後に日本語プログラミング言語なでしこでは、単位として マイクロメートルがあるので紹介したいと思います。   70μmを表示 結果表示が「7E-5」と表示されます。  * 意味としては、7×10^-5m=0.00007m  約70μmの例として、日本人の平均的な髪の毛の太さだったりします。    では、また来月お楽しみに!。 ■■===============【プログラムメールマガジン 色彩】===============■■■   ・ メールマガジン登録・解除はこちら (http://mm.himanavi.net/)