ここは個人の趣味のページです。
昭和49年生まれ、血液型B型、男。
名前は、かわ、kawa、d_kawakawa、cookiepuddingman、平行四辺形 などいろいろあります。
文書を書くときの助詞や助動詞、副詞などが苦手で、記事を書いて後から「不自然だな」と思ったりします。
私がプログラミングを好むのは、プログラミングは私の「物づくり」に対する探求心と創造性を十分に満たしてくれるから、、です。
憧れに向かう、形にする。そんなわけで、この個人ページではプログラミングの話をすることが多いです。
ここの管理人、
AI の利用やめるってよ。
AI の問題点:
これらが向こう10年解決されないだろうと見込んで、やめることにしました。(2025年5月23日~)
私は AI に頼らず「自分の力」を大切にしたいです。
…とはいえ、人間は新しく見つけた技術を手放すということは基本的にやらないと思います。
だから私も後々 AI を利用することにはなると思います。
でも上記の問題点は確かなもので、将来 AI ロボが私の家の扉をコンコンと叩いて
「市からの要請で、お手伝いするため おうかがいしました」
と言うまでの間は、この AI 技術を導入せず、頑張ってみようと思います。
でもこの考え方、キツイと思うのでマネしなくていいです。


先月 11 月 16 日の記事「プログラミング 最近、その後2」で
『本番の「人体描画システム」のほうで使うときのヒントが得られました』
と書いたとおり、ヒントが得られて、下図のように作りました。
▼Excel で図を描きボタンを押し…![]() |
▼JavaScript の 人体描画システムで表示![]() |
JavaScript にて、3D モデルの任意の面に、ドロー(ベクタ)の図形を描画することができます。
▼Excel で少し変更してボタンを押し…![]() | ▼ブラウザの更新ボタンで反映![]() |
▼凝った配置でも…![]() | ▼ちゃんと反映![]() |
▼Excel の「フリーハンド」図形も![]() | ▼基本は同じドロー(ベクタ)なので可![]() |
▼線を太字にすると![]() | ▼Excel の線の太さ設定を拾うので反映![]() |
▼和同開珎かよと思ったので![]() | ▼せっかくだから、おにゃんこさん![]() |
Excel のすべての図形に対応させようと、いろいろやったんですが、結局データフォーマット(の全貌)が分からないので、ある図形をきれいに描画できるようにすると、別の図形で崩れ、それを直すとまた別の図形で崩れ、、とどうしようもなかったので、すべての図形に対応させるのはあきらめました。
あきらめるまで1週間くらい、データフォーマットを探る作業を続けて苦しみました。
悟空(ドラゴンボール)が重いおもりを両手両足につけて修行した結果、おもりをはずすといつの間にか楽々になっていた…
というのと似ています。
苦しみ抜いたので、もはや Excel 図形データを自分の JavaScript プログラムの中で扱うのは苦になりませんでした。
でもデータフォーマットの解明には至っていないので、必要最低限の図形に対応、ということで妥協しました。
妥協しないと今年中に終わらないぞと思ったので…。
今日は仕事が終わって、アパートの自室のドアの前まで来たら、ポケットに部屋の鍵が入っていませんでした。
仕事場に置き忘れたので、取りに戻りました。(歩きと電車で片道1時間)
また歩くのは嫌だったので、タクシーを呼びましたね。往復5700円。
最近ボケてますからね。難しいプログラミングをやるくせにボケてる。
ボケてはいるけど、繰り返すわけにはいかないと思って、スペアキーを準備するという対応はちゃんと行うことができました。
それでも別の何かでオオボケするだろうな。。。

(訪問者のどんなニーズと この記事がつながるか)
面に描く Excel 図形データを切り替えられるようにしました。
パラパラアニメではなく、図形から図形へのモーフィング(昔行ったベジェ曲線同士のモーフィング)にすればリアルになりそうですが、とりあえずそこまでやらなくても良いので、これで OK として次へ進むことにします。
図形から図形へのモーフィングができる、昔やった、と言うだけではどういうことなのか分からないので、、
これです。
つまり、目をあけている顔から、目を閉じている顔へモーフィングすれば、なめらかにまばたきするリアルなアニメが期待できるということです。
でも目的(ページ上でキャラを動かしてプログラミングを教える)を考えると絶対に必要というわけではないのでひとまず見送ります。
人体表示システムは今月中にある程度使える状態にしないと。。。
次はフキダシかな。。
どうして 3DCG プログラミングができたり、その 3DCG の面に図を描いたり、その図を「切り替えよう」と言って切り替えたり、図のモーフィングをしたり、、あれやこれやといろいろできるのか不思議ではないでしょうか。
好きでやってるからかな。嫌いだったらこうはなりません。
他にもいろいろありますが、はっきりと言えるのはとりあえずそんなところですね。
(訪問者のどんなニーズと この記事がつながるか)
iTunes を制御する VBS プログラムを紹介します。
VBS(VBScript)はすべての Windows で使用できるプログラミング言語で、主に OS を制御するために使われ、アプリがインターフェース(API)を用意していればアプリも制御できます。
ただし、VBS は数年後に廃止予定なので、それまでの間の使用に限られます。
同じことは、C++、C#、VisualBasic、Perl でもできるようです。
※ 下図スクリーンショット中の作品名、個人名と当サイトとは何ら関係はございません。
▼VBS で iTunes を演奏開始し、プレイリスト中の全2曲を演奏して終了した様子

▼別のコマンドプロンプトを開いて、演奏中の情報を取得して表示した様子

▼左上のプロンプトで演奏開始、右下のプロンプトでその演奏について情報表示、停止を実行
このように、VBS を使って iTunes の演奏を制御できます。
そのプログラムリストです。応用する前の「ひな形」のつもりで作ったものです。
' ===== iTunes 制御の基本プログラム サンプル =====
' iTunes COM Interface Documentation(WEBアーカイブ)
' https://web.archive.org/web/20220517004755/http://www.joshkunz.com/iTunesControl/main.html
' itunes 8.1.0.52 以降に対応
' このテキストを control.vbs というファイル名で保存し、
' Windows コマンドプロンプトにて、
' cscript control.vbs play
' のようにして実行します。
' (このプログラムは文字コード Shift-JIS で作成しましたが、UTF8 でも問題なく動作しました)
' (意味が分からない場合は気にしないで良いです)
' ただし、.vbs(VBScript)はそのうち使えなくなります。
' https://ja.wikipedia.org/wiki/VBScript
' >そして、2024年5月にMicrosoftは3段階に分けてVBScriptを廃止すると発表している。
' >なお、3段階とは
' >「オンデマンド機能(FOD)をすべてのWindows 11のバージョン24H2にプリインストールさせ、デフォルトでオンにする」、
' >「2027年頃からオンデマンド機能(FOD)をデフォルトで有効にならなくする」、
' >「VBScriptを廃止する」である。[3]
' 代替としては、C++、C#、VisualBasic、Perl が使えます。(このプログラムをそれらに書き直す)
' (ここに各サンプルがあるからこの4つを挙げましたが、VisualBasic が一番 .vbs に近いのでおすすめです)
' https://web.archive.org/web/20220813205345/http://www.joshkunz.com/iTunesControl/interfaceIiTunes.html
' このプログラムの構造:
' コマンドラインオプションで簡易的な命令を受け取り、各命令ごとに実行して終了するだけ。
' ※ 標準では .vbs(VBScript) は変数,オブジェクト,操作の名前,および定数などの大文字と小文字を区別しません。
' このプログラムはコピーして自由にお使いください。
' ================================================
'check. コマンドラインオプション指定がない
if Wscript.Arguments.Count = 0 then
cecho "usage: cscript control.vbs (play,stop,volup,voldn,next,back,info,plist)"
WScript.Quit
end if
cecho "vbs start"
' iTunes アプリケーションを変数にセットする。
Dim itunes
Set itunes = WScript.CreateObject( "iTunes.Application" )
' コマンドラインオプション指定コマンド別に各処理
' play,stop,volup,voldn,next,back,info,plist
'(play はループに入るので、play 以外のコマンドは別途プロンプトを開くなりして実行する)
if Wscript.Arguments( 0 ) = "play" then
cecho "vbs play command"
' itunes イベントと vbs ユーザー関数(ITEventTest_~)をつなげる
WScript.ConnectObject itunes, "ITEventTest_"
itunes.play()
' itunes イベントを有効にし続けるためにはループする。
' また、1曲の終了イベントはあるが、iTunes の停止イベントは無いのでここで実装する。
' ここで言う「停止」とは「||」ボタンを押したり、プレイリストが演奏終了したときのことを指す。
state0Processed = false
loopFlg = true
cecho "into LOOP"
cecho vbCR & vbLF & "この画面を消すときは、まず iTunes で停止ボタンを押してください。"
cecho "そうしないと、次回このプログラムを起動時したときにイベントが起動しなくなります。"
Do while loopFlg
WScript.Sleep 500
if itunes.PlayerState = 0 then
if not state0Processed then
' itunes が停止したとき
cecho vbCR & vbLF & "player state is 0"
state0Processed = true
' ここに itunes が停止したときの処理を書く
loopFlg = false
WScript.DisconnectObject( itunes )
end if
else
state0Processed = false
end if
Loop
cecho "after LOOP"
WScript.Quit
elseif Wscript.Arguments( 0 ) = "stop" then
cecho "vbs stop command"
itunes.Pause
elseif Wscript.Arguments( 0 ) = "volup" then
cecho "vbs volup command"
itunes.SoundVolume = itunes.SoundVolume + 10
elseif Wscript.Arguments( 0 ) = "voldn" then
cecho "vbs voldn command"
itunes.SoundVolume = itunes.SoundVolume - 10
elseif Wscript.Arguments( 0 ) = "next" then
cecho "vbs next command"
itunes.NextTrack ()
elseif Wscript.Arguments( 0 ) = "back" then
cecho "vbs back command"
itunes.backTrack ()
elseif Wscript.Arguments( 0 ) = "info" then
cecho "vbs info command"
' 演奏中の曲情報
dim track
set track = itunes.CurrentTrack
dim str
str = "Artist:" & vbTab & track.Artist
str = str & vbCR & vbLF
str = str & "Album:" & vbTab & track.Album
str = str & vbCR & vbLF
str = str & "track:" & vbTab & track.Name
cecho str
elseif Wscript.Arguments( 0 ) = "plist" then
cecho "vbs plist command"
' プレイリストへのアクセス例
cecho itunes.sources.count ' 2
cecho itunes.sources(1).name ' ライブラリ
cecho itunes.sources(2).name ' iTunes Store
cecho itunes.sources(1).playlists.count ' 121
cecho itunes.sources(1).playlists(1).name ' ライブラリ
cecho itunes.sources(1).playlists(2).name ' ミュージック
cecho itunes.sources(1).playlists(3).name ' ムービー
cecho itunes.sources(1).playlists(4).name ' ホームビデオ
cecho itunes.sources(1).playlists(5).name ' テレビ番組
cecho itunes.sources(1).playlists(6).name ' ポッドキャスト
cecho itunes.sources(1).playlists(7).name ' オーディオブック
cecho itunes.sources(1).playlists(8).name ' 私のプレイリスト1
cecho itunes.sources(1).playlists(9).name ' 私のプレイリスト2 ...
cecho itunes.sources(1).playlists.itemByName( "ライブラリ" ).name ' ライブラリ
cecho itunes.sources(1).playlists.itemByName( "ミュージック" ).tracks.count ' 2609
cecho itunes.sources(1).playlists.itemByName( "ミュージック" ).tracks(1).play()
' 1 番は itunes 内部 リストのトップのこと
wscript.sleep(5000)
cecho itunes.sources(1).playlists.itemByName( "ミュージック" ).playFirstTrack()
' 現在の画面リストのトップのこと
' その他のメソッド、プロパティ
' IITPlaylist Interface Reference
' https://web.archive.org/web/20220702203408/http://www.joshkunz.com/iTunesControl/interfaceIITPlaylist.html
else
cecho "undefined : " + Wscript.Arguments( 0 )
End If
'以下 イベントハンドラ(関数名「ITEventTest_~」の ~ を itunes が認知する)
sub ITEventTest_OnPlayerPlayEvent( track )
'when a track begins playing.
cecho vbCR & vbLF & "OnPlayerPlayEvent"
' ここに曲が演奏開始されたときにやりたい処理を書く
'sample. 曲情報をコンソールに出力する例
if 1 then
dim str
str = "Artist:" & vbTab & track.Artist
str = str & vbCR & vbLF
str = str & "Album:" & vbTab & track.Album
str = str & vbCR & vbLF
str = str & "track:" & vbTab & track.Name
cecho str
end if
'sample. 曲情報を .js ファイルに書き込む例 (※1)
' 例を利用するには、
' ①レンタルサーバーが必要です。
' ② 最初の行の if 0 を if 1 にする。
' ③ file の ***** 部分を自分のものに変更する。
' ④ この末尾の「なんらかの ftp コマンド」を自分で用意する
if 0 then ' ← ②の最初の行とはこれのこと
dim track2
set track2 = itunes.CurrentTrack
' ③以下の ***** 部分はその人の環境によります。
file = "D:\*****\playing.js"
Set out = CreateObject( "ADODB.Stream" )
out.Open
out.Type = 2 ' テキストファイル
out.Charset = "UTF-8" ' 文字コード
out.LineSeparator = 10 ' 区切り文字 (LF)
out.WriteText "playing = {", 1
out.WriteText vbTab & "name : """ & track2.name & """,", 1
out.WriteText vbTab & "artist : """ & track2.artist & """,", 1
out.WriteText vbTab & "album : """ & track2.album & """,", 1
out.WriteText vbTab & "playListName : """ & track2.Playlist.Name & """,", 1
out.WriteText vbTab & "nowtime : """ & Now & """,", 1
out.WriteText "}", 1
out.SaveToFile file, 2
out.Close
'④「なんらかの ftp コマンド」
'.js ファイルをなんらかの ftp コマンドでサーバーへアップロードする。
' 以下は私個人の環境の場合です。
' 個人的に作成した upload.bat では perl スクリプトの
' FTP コマンドを利用してアップロードしています。
CreateObject( "WScript.Shell" ).Run "upload.bat " + file, 0, True
end if
end sub
sub ITEventTest_OnPlayerPlayingTrackChangedEvent( track )
'現在演奏中の曲の名前とかの情報が変更されたときに呼ばれる。
'when information about the currently playing track has changed.
cecho vbCR & vbLF & "OnPlayerPlayingTrackChangedEvent"
' ここに情報が変更されたときにやりたい処理を書く
end sub
sub ITEventTest_OnPlayerStopEvent( track )
'when a track stops playing.
cecho "OnPlayerStopEvent"
' ここに曲が演奏停止されたときにやりたい処理を書く
' 停止とは、停止ボタンを押した、曲が終了した。
end sub
sub ITEventTest_OnQuittingEvent
'when iTunes is about to quit.
cecho vbCR & vbLF & "OnQuittingEvent"
' ここに iTunes が終了したときにやりたい処理を書く
loopFlg = false
WScript.DisconnectObject( itunes )
cecho "itunes scripting disconnected"
' ただし、LOOP 内の「' itunes が停止したとき」の
' 停止処理の方が早いので、たぶん実行されない。
end sub
'(そのほか以下のイベントがある)
' OnDatabaseChangedEvent
' OnCOMCallsDisabledEvent
' OnCOMCallsEnabledEvent
' OnAboutToPromptUserToQuitEvent
' OnSoundVolumeChangedEvent
' https://web.archive.org/web/20220702201321/http://www.joshkunz.com/iTunesControl/interface__IiTunesEvents.html
'以下 サブルーチン
Sub cecho(text)
' cscript で実行の場合はコンソールに出力
' その他で実行の場合は何もしない
On Error Resume Next
WScript.StdOut.WriteLine text
End Sub
これを元にして、たとえば、
といった具合です。
サーバープログラムを書けない人は、
▼playing.js を読み込み、その内容を HTML へ適用するスクリプト
など、ひな形プログラムをもとに、いろいろできると思います。
ただ、playing.js をサーバーに送ることについては、「なんらかの FTP コマンド」と言っているだけなので、そこはもしかしたら難しいかもしれません。
なので、FTP 機能を持っている別のプログラミング言語、Perl とか Python とかで、別途 FTP をやってもらう形にするしかないようです。
そういうわけで、今回、そのあたりの説明は大変でできませんでした。