2005.11.22

待ち遠しい春


11月17日にマイクロソフトからVisualStudio2005の発表がありました。
発表は良いのですが、発売はまだまだ先のよう。特に2005に対応したコントロール類の発売はさらに先。春が待ち遠しいという感じです。
とりあえず来月に公開されそうなExpress版を待つことにします。

地道に続く自宅サーバーの構築ですが。
IISの設定をやっています。 今週はFTPサーバーのインストールと設定。
IIS6の特徴であるユーザー毎にフォルダーを分ける機能を使ってみました。設定の参考にしたのは@ITのこの記事。
IIS 6.0のFTPサーバでユーザー・フォルダを分離する(基本編)
ドメイン名をFQDNでlan100.localdomainとしていたので、ユーザーフォルダーの名前をどうするべきか迷いましたが、結局lan100\usernameでうまくいきました。
そしてアップロード許可はNTFSのセキュリティー設定のほうで設定することにしました。

VBの新しいバージョンと、サーバーの構築。
どちらを先にやるか迷ってしまいますが、サーバー構築を先に完成させてしまいたいと思っています。

| Comments (0) | TrackBack (0)

2005.10.30

ドメイン構築テスト


サーバーとドメインを構築するテストをやってみました。
DNSサーバー、アクティブディレクトリーのドメインコントローラーは、参考書に書いてあるとおりに進めていくとほぼ問題なくインストールが出来ました。

グループポリシーの機能はじっくりと時間をかけてやってみたいとおもいます。
それでもまずは、ドメインにログオンするとインターネットエクスプローラーのホームページが強制的に自宅サーバー上のページになる様にしてみました。
ホームページの設定がきちんと自宅サーバーの方に変わり、少し感動でした。クライアントのエクスプローラーのセキュリティー設定も決めることが出来るので、この機能は有効に利用できそうです。

先日入手したServer2003RC2はOSが発売された今となっては、アクティベーションが出来なくなっていました。その為2週間ほどしか使えないので、マイクロソフトから180日間試用できる評価版を購入しました。
価格は1500円ほどで月刊の専門誌を買うくらいの価格です。
マイクロソフトのサイトで発注して2週間ほどで到着。これでゆっくり落ち着いてテストと練習が出来ます。
次は同じドメイン内に2つめのドメインコントローラーをつくるテストをやってみます。

| Comments (0) | TrackBack (0)

2005.10.15

Server2003RC2インストール


先週組み立てが終わった新しい自宅サーバーにServer2003RC2をインストールしてみました。
ジュンク堂で売られていた雑誌のバックナンバーの付録に付いていたものをゲット。さっそくインストールです。
実は組み立てたサーバー機ではServer2003はサポート対象外なので、インストールできなくてもまったく不思議ではありません。望みをたくしてのインストールになりました。
マザーボードのチップセット915GMがモバイルパソコン用なのでサーバーOSを動かすことは想定されてないのかも知れません。

☆☆結果はインストールほぼ成功☆☆
サーバー機の本体に付属していたビデオチップのドライバーはインストールできませんでしたが、OSがあらかじめ持っているドライバーでなんとか画面は表示できています。
LANドライバーはサーバー機に付属のもので快適に動いています。通信速度は300Mbpsは出ているようです。
しかし、電源のシャットダウンが上手くいかず、再起動してしまいますが正式版で改善されることに期待することにします。

それから、9割方あきらめていたモバイル用プリンターのキヤノン製PIXUS iP90はインストールに成功しました。これでプリントサーバーも兼ねることができそうな感じになってきました。
今のところテスト印刷が成功しただけですが、サーバーからの印刷、共有にしてクライアントPCからの印刷も成功しました。

実機へのインストールはMSDNからの正式版が入手できるまでこのままとします。
これからはバーチャルのPC(VMware)をテスト用サーバーにして、RC2でアクティブディレクトリーとかドメイン構築の準備をしていきます。

| Comments (0) | TrackBack (0)

2005.10.13

自宅サーバー組み立て


3連休の初日に新しい自宅サーバーの本体が届きました。
ベアボーンPCでグラフィックの方もオンボード。比較的失敗しにくいのですが、初めてのベアボーンなのでドキドキしながらの組み立てでした。
非常に小型のケースなのでケーブルの収納に注意が必要で、最初はケース内のファンにケーブルが接触し、ファンが回らないトラブルがありました。しかし、その他は無事に組み上がり、XPのインストールも問題なくできました。

PentiumMの特徴であるCPUの周波数と電圧を負荷に合わせて変更する機能ですが、「CrystalCPUID」というフリーソフトで機能させることができました。
これを使うといくらは節電になるようです。

ベンチマーク(HDBENCH)による処理能力テストをしてみると、期待をほぼ満足する結果になっていました。
そして、今のサーバーを使う上で一番問題になっている自作のWEBアプリケーションの動作は、動作環境が実際の使用状況と違うので比較はできませんがかなり早くにはなりそうです。

と、ここまで動かしてふと気づくと、CPUクーラーの取り付けに必要な放熱のためのグリスを忘れてることに気づきました。これは大変、このままではCPUを壊してしまいます。
急いでグリスをつけなおし、CPUは思わぬ試練を乗り越えてくれたようです。
フリーソフトでCPUの温度を測ってみると40℃前後。放熱はできているみたいです。

| Comments (0) | TrackBack (0)

2005.10.09

自宅サーバー更新


今使っている自宅サーバーの処理能力が遅すぎるのでサーバーを新しくすることにしました。
今のサーバーはLibretto L2。1kg以下のノートパソコンで軽いのが取り柄ですが、今となっては処理能力の非力さが目立ちます。
自作の簡単なWEBアプリでさえも起動するのに1分近くかかり、さすがに使い勝手はちょっときびしい。
そろそろLibrettoさんは引退していただいて、モバイル用のパソコンとして余生を過ごしてもらうことにしました。

そして、新しいサーバーに選んだのはベアボーンの小型パソコン。
WiNDyの「Olphes Rhapsody」
大きさはお正月料理を入れるの重箱の1個分くらい☆
CPUはノートパソコン用のPentiumMです。クロック周波数が低い割に処理能力が高い不思議なCPUだそうです。
ただ問題は資金。 予定していた買い物をやめて節約し予算をあてることにしました。お姉ちゃんのコンサートDVD『Happy☆Seventeen DVD』も来年までガマンです。

OSは、この秋に買う予定にしているVisual Studio 2005+MSDNからプログラム開発用のSERVER2003を入手できるので、それを入れる予定です。
もちろん購入するパソコンにサーバーOSをインストールできたらの話ですが。

| Comments (0) | TrackBack (0)

2005.07.20

は~とデーターベース計画


試運転は順調にスタートしました。
バグや実際に使ってみて使いにくいところを少しずつ直していっています。
プログラムを修正したら、実際に音楽を流して楽しんでいます。自分が作ったプログラムを使って音楽を楽しむ自己満足のひとときであります♪

今までのプログラム作りを振り返ると、本当はこうするともっといいプログラムになったかもと思うところが出てきます。
使うぶんには困らないので試運転中に修正するか、それとももう少し後に修正するか迷うところです。

若干後悔している部分は、
アルバムタイトルを曲のタイトルとおなじ場所に保存するようにしたところと、曲の印象の保存の仕方。
アルバムタイトルと曲のタイトルを同じテーブルに保存しているせいでプログラムが若干複雑になっているような気がします。
また、曲の印象の保存の仕方をフリーキーワードのように保存したら、キーワードの種類を増やしやすいので違うジャンルの曲の印象も保存しやすかったのではと思っています。
少なくとも次回のプログラミングの参考にはしたいと思っています。

| Comments (0) | TrackBack (0)

2005.06.20

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

データーベースの日本語の設定、sjisで無事に漢字の保存と検索ができるようになりました。
正確にはサーバーの方でsjisで保存するように設定するのと合わせて、プログラムがsjisで漢字を処理している事をサーバーに通知することで上手くいくようになりました。

前々から不思議に思っていたのは、.netのプログラムの中ではutf8の文字コードなのですが、いつのまにやらsjisに変換されているのです。
おそらくデーターベースと通信しているdllの辺りで変換をしてそうなのですが。ちょっと分かりません。
.netのプログラムの中=utf8。

サーバーまでのどこかでutf8->sjisに変換?

データーベースにsjisで保存。

念を入れて、保存した文字が.netのプログラムで正常に検索できることと、他のソフトでsjis指定して文字が正確に検索できることを確認しました。

| Comments (0) | TrackBack (0)

2005.06.13

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

プログラムの方は、先週でいったんキリが付いたので、今週からは自宅サーバーの設定をするテストをしています。

まずは、データーベースのバージョンアップ。
データーベースの公式サイトを見てみるとバージョンが0.1上がっていたので、興味本位でバージョンを上げてみました。
でもしかし、この0.1(4.0と4.1)の差が実は結構大変な差だったようで、特に日本語の設定関係が大きく変わっているようです。
ココログでもお馴染みのutf-8で設定してみましたが、文字化け発生でなかなか上手くいかず。
今度は無難にsjis(shift-jis)で再挑戦です。

| Comments (2) | TrackBack (0)

2005.06.01

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

プレイリストの保存機能。
フォルダー階層に整理してプレイリストを保存できるように作っていますが、今週はフォルダーを作ったり名前を変えたり削除したりする機能を作りました。
フォルダーの移動とコピーの機能も作ろうかと思いましたが、しばらく使った後で作ることにしました。

さて後は「おべんとう」機能。
自宅専用サーバーに登録したmp3ファイルをプレイリストの順番にダウンロードしてファイルに保存する機能です。
ファイルを携帯プレーヤーに入れて外出するのが目的なので、「おべんとう」機能と名付けました。
この機能は、.netのライブラリーのおかげでおそらくあっという間に出来上がると思います。

| Comments (0) | TrackBack (0)

2005.05.19

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

プレイリストの保存機能。
プレイリストの保存機能で、サーバー側のプログラムとの通信が上手くつながり、この計画のゴールが見え始めました。
本当はもう少しじっくりプログラムを作りたいのですが、このプログラムの使い勝手には我ながら期待しているのでとにかく早く使えるようにしたいので、ゴールが見え始めたのがうれしいです。

最近ゲームのデモムービーとか主題歌をインターネットで集めているのですが、mp3ファイルに変換したものが400曲を超えるようになってきました。
400曲にもなってくると、今日はこんな感じの曲を聴きたいとかいうときには曲を探しにくくなってくるので、このデーターベースの出番となってくるのです。
「今日は思いっきり電波な曲を聴きたい!」というときにも、操作ひとつで400曲の中から検索されてくる、そして検索結果をプレイリストにして保存することもできる。
そんな感じのプログラムがもうすぐ出来上がります。


ちなみに、mp3ファイルへのファイル変換は「ぷっちでここ」を使ってます。
変換中にかわいいアニメーションが表示されて楽しいソフトです。

| Comments (0) | TrackBack (0)

2005.04.25

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

いまだにマイペースで作っていますが、今はプレイリストのような機能をつくっています。

プレイリストはサーバーのデーターベースの中にフォルダー階層を作って保存するようにするので、プレイリストのタイトルとともにフォルダー階層を指定する為にフルパスを設定する必要があります。
その設定をする部分をつくりました。

'タイトルのフルパス
'パスの書式:親フォルダーのフルパス + "\" + 自分のタイトル
'      ルートフォルダーのフルパスは""(文字なし)
Public Property fullPath() As String
 Get
  If Not (Me.parent Is Nothing) Then
   fullPath = (New StringBuilder).Append(Me.parent.fullPath).Append(Favorite.DELIMITER).Append(Me.title).ToString()
  Else
   fullPath = ""
  End If
 End Get
 Set(ByVal aPath As String)
  '自分をルートフォルダーにセット
  Me.Init()
  'サブフォルダーへ移動、タイトルを設定する
  Dim subNames As String() = aPath.Split(Favorite.DELIMITER.ToCharArray)
  For i As Int32 = 1 To subNames.GetUpperBound(0)
   '自分のフォルダー階層にあるサブフォルダーを取得(自分のコピーを親に設定する)
   Dim subFlds As clsTitle() = Me.GetNewSubTitles(subNames(i), Me.MakeNewCopy)
   If subFlds.Length = 1 AndAlso subFlds(0).title = subNames(i) Then
    '自分をサブフォルダーに移動させる
    subFlds(0).CopyMembersTo(Me)
   Else
    '存在しないパスまたは複数の検索あり →例外を発生させる 未完成
    Exit For
   End If
  Next i
 End Set

| Comments (0) | TrackBack (0)

2005.03.27

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週は、検索してきた曲をリストにして、その曲のリストの上から順番に再生していく部分を作りました。
曲の再生をするフォームは、ウインドウズメディアプレーヤーをフォームに貼り付けて作りました。

曲の再生フォームは複数が同時に表示されてしまうと何かとまずいので、1つだけが表示されるようにします。
まず、フォームのコンストラクターのPublic Sub NewのPublicを、Privateに変えてしまいます。
そして再生フォームクラスの唯一のインスタンスを格納する共有変数
Private Shared theForm As frmPLAY
を作り、NEWのかわりにインスタンスを返す共有関数を作ります。
Public Shared Function GetSingleton() As frmPLAY
If theForm Is Nothing Then theForm = New frmPLAY
GetSingleton = theForm
End Function
また、フォームが閉じるときのCLOSEDイベントが発生したときに
theForm = Nothingにします。

フォームを表示するときは、new frmPLAYはなしで、いきなり
frmPLAY.GetSingleton.Show()とします。
これで、何回Show()をやっても表示されるフォームは1つだけになりました。

次は、作った曲のリストをお気に入りの曲として保存する部分を作ります。

| Comments (0) | TrackBack (0)

2005.03.14

は~とデーターベース計画


今週は再生する曲順を手操作で並び替える部分を作りました。

並び替えの操作方法は簡単。
曲順を変えたい曲を表示されているリストの中から選び、隣に表示しているスクロールバーを動かすと、選んだ曲がスクロールバーにしたがってリストの中を上下に動くという方法です。
複数の曲をまとめて選んだときは、スクロールバーのlargeChangeプロパティーに選んだ曲の数を設定します。
イメージ図。
20050313_scroll_sort

リストの選択範囲がスクロールバーに、スクロールバーの動きが選択範囲の順番に、双方向にうまく同調するようになるにはコツがいりますが、何とか出来ました。
20から30個程度のデータを手操作で並び替えるには使いやすいかも。

| Comments (0) | TrackBack (0)

2005.01.15

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

最近は曲を検索する部分を作っていますが、ようやく条件を入力して検索することができはじめました。
今まで別々に作ってきた機能をつなぎ合わせるような部分なので、機能をつなぎやすいようにいろいろと細かい調整をしながら少しずつ作っていってます。

一番調整が必要だったのは、検索条件をサーバーで動くプログラムに伝える仕組み。自分で少し難しい方法を選んだのですが、やはりその通り作るのは難しかったです。
でも、時間さえかければ出来そうなので、このままがんばります。

| Comments (0) | TrackBack (0)

2004.11.19

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週は検索条件を入力する部分を作りました。
アーティスト名やアルバムタイトル、それから今回のプログラム作りのメインの目的、楽しい曲や静かな曲など曲の印象を検索条件として指定する部分です。

20041119heartdatabase.jpg

ボタンの色とかはまだ付けていませんが、仕上げの時に色を付けます。
検索条件をサーバー側に送る部分はほぼ出来上がり、来週からは検索処理をするサーバー側の機能を作り始めます。

| Comments (0) | TrackBack (0)

2004.11.12

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥配列変数の宣言。
ふと気が付いたのですが、私、配列変数を宣言する部分は例えば
Dim a as string()
なんてことをやってました。
解説書にはDim a() as stringなどと変数名のすぐ後に()を付けるように書いてます。
でも、型名の後に()をつける方法でもコンパイルエラーなしに動くのです。
たぶん以前に何かを見て勘違いしていたのがたまたまうまくいっていたのでしょう。

.NETのプログラムでは配列は○○の配列型という元の○○とは別の型としてあつかわれるし、
Dim a as string() = new string(){}
とかいう風に「文字列の配列型変数に、新しい文字列の配列型を代入する」という書き方にもなるので、この方が好きなんですが。

趣味のプログラミングなんで、しばらくはクセのあるプログラムコードになってるってことを意識した上で今のまま続けてみようと思います。

| Comments (0) | TrackBack (0)

2004.10.28

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週はプログラムのフォームの部分を作りました。
ウインドウの外観がどんな感じになるか、操作がどんな感じになるか確かめながら作りました。
今度のプログラムはエクセルなどと同じようにメインのウインドウの中に子ウインドウがあるMDIタイプのウインドウです。

メインウインドウのメニューに子ウインドウのメニューを混ぜる部分で若干手間取りましたが、要領がわかってきました。
メインメニューコントロールのプロパティーMergeOrderを整理して、混ぜたいメニューのMergeOrderを同じにするとできるようになりました。

何となくこんな感じの画面になるのかなという感じか見え始めました。
この画面からお姉ちゃんの歌が流れてくる日が待ち遠しいです♥

| Comments (0) | TrackBack (0)

2004.10.18

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

検索条件を入力する部分の試作をしています。
入力欄は「El Tabelle for .NET 2.0」を使っています。
エクセルのシートにそっくりのプログラムの部品ですが、趣味のプログラム用にしては高額なものなので、どんどん活躍してもらわないと元が取れないというものです。
この部品を使うコツは、値を表示させるときには複数のセルに一気に値を入れるということのようです。
TextBlockなどを使って、できるだけまとめて値を入れてやらないと実行速度がだいぶん遅くなってしまいます。

さらに、サーバーとの通信部分を試作してみました。
複数の検索結果を送受信する部分を追加して、試作は成功。
先週までに試作した検索条件を格納する部分は、すでに完成したクラスライブラリーに追加するなどしてまとめたいと思います。

次は、あんまり試作ばかりしているのもなんなんで、本番を作り始めることにします。

| Comments (0) | TrackBack (0)

2004.10.07

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今回はサーバー側が検索条件を受け取る部分をテストで作りました。
#Region "BUILD"
Private Sub Build(ByVal op As String)
Dim op1 As clsCONDbase
Dim op2 As clsCONDbase
Dim s1 As String
Dim s2 As String

Select Case op
Case clsWHERE.Symbol 'WHERE
Me.operand = CType(stack.Pop, clsCONDbase)
Case clsAND.Symbol 'AND
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsAND(op1, op2))
Case clsOR.Symbol 'OR
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsOR(op1, op2))
Case clsEQUAL.Symbol '等号
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsEQUAL(op1, op2))
Case clsNOTEQUAL.Symbol '不等号
op2 = CType(stack.Pop, clsCONDbase)
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsNOTEQUAL(op1, op2))
Case clsOPEN.Symbol 'カッコ開く
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsOPEN(op1))
Case clsCLOSE.Symbol 'カッコ閉じる
op1 = CType(stack.Pop, clsCONDbase)
stack.Push(New clsCLOSE(op1))
Case clsFIELD.Symbol 'データーベースのフィールド名
s2 = CType(stack.Pop, String)
s1 = CType(stack.Pop, String)
stack.Push(New clsFIELD(s1, s2))
Case clsVALUE.Symbol '値
s1 = CType(stack.Pop, String)
stack.Push(New clsVALUE(s1))
Case Else
stack.Push(op)
End Select
End Sub

#End Region
#Region "IEnumerable"
'XMLの文字列にしたものをoに代入して順に実行される
Public Overrides Sub Add(ByVal o As Object)
Build(CType(o, String))
End Sub
#End Region

送られてきた条件を受け取る(XMLの文字列を逆シリアル化する)ときに、自動的にAddルーチンが必要回数だけ実行されます。
Addルーチンの引数oにはXMLの文字列の通りに条件式の各要素が逆ポーランド記法の順に入れられてきます。

上のプログラムのSELECT文にある
Case clsAND.Symbol とか Case clsOR.Symbol
ですが、
Public Shadows Const Symbol As String = "AND"
Public Shadows Const Symbol As String = "OR"
のように基本クラスの同じ名前の定数を各クラスでShadowsを使って隠してそれぞれの文字を新しく定義しなおしています。

少しばかりテストしてみて、ちゃんと動きそうだったので、この方法を本番のプログラムに採用することにしました。

| Comments (0) | TrackBack (0)

2004.10.01

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥条件式をサーバーに送る部分
今週は検索条件をサーバーに送るための部分を考えてみました。
検索は、アーティスト名、アルバムタイトル、印象データーなどを検索キーワードにします。
(アーティスト=お姉ちゃん)かつ
(印象データー=楽しい曲または印象データー=明るい曲)
のように検索するわけです。

その方法は、
私にはうまく説明できないのでGoogleで見つけたホームページに代わりに説明していただきます。
課題1「文字列の操作」: 電卓プログラムの作成 - 構文解析
(宇都宮大学工学部情報工学科さんのページ内)
上のページの+-×÷を検索条件のANDやORに変えて使います。
サーバーに送る時には逆ポーランド記法の順にANDやORを並べてXMLの文字列に変換します。

手法がすこしオーバーな気もしますがやってみることにします。
けっこう手間がかかりそうなので年内完成の予定は少し延びるかも。
焦らずにやってみます。

| Comments (0) | TrackBack (0)

2004.09.15

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週は、検索&再生プログラムを作る基本的な部分のテストをしてみました。
♥複数の条件による検索をするためMDIタイプのプログラムを作る部分。
♥検索結果をXML文字列で送受信するための部分。

検索結果をXML文字列にする部分は
Public Class heartXmlWriter
Inherits System.Xml.XmlTextWriter

Public Sub New(ByVal w As System.IO.TextWriter)
MyBase.New(w)
End Sub
と、
Public Class heartXmlReader
Inherits XmlTextReader

Sub New(ByVal input As TextReader)
MyBase.New(input)
End Sub
を追加するだけで簡単にできました。

こんな感じで使います。
'XML文字作成
Dim XML As StringBuilder = New StringBuilder
Dim xmlStrWriter As StringWriter = New StringWriter(XML)
Dim outXml As heartXmlWriter = New heartXmlWriter(xmlStrWriter)
outXml.WriteData(data)
outXml.Flush()
outXml.Close()
xmlStrWriter.Close()
'XML文字からデータ読み込み
Dim xmlStrReader As StringReader = New StringReader(XML.ToString)
Dim inXml As heartXmlReader = New heartXmlReader(xmlStrReader)
Dim hd_in As heartData = inXml.ReadNewHeartData(ErrMsg)
inXml.Close()
xmlStrReader.Close()

こんなに簡単にできるのは、XmlTextWriterなどのクラスを継承してるからです。
なんだか、親の七光りのようなありがたさ♥
とりあずさいさきのよいスタートを切ってます。

| Comments (0) | TrackBack (0)

2004.09.05

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。


検索&再生プログラムの設計。
次に作る曲の検索と再生をするプログラムには次のような機能を持たせることにしました。
♥検索
♥再生(メディアプレーヤー再生とその他の再生)
♥タイマー(めざまし)
♥ダウンロード&保存(おべんとう機能)
♥お気に入り作成

タイマーは設定した時間に自動的に曲を再生する機能です。 自分の好きな曲を聴きながらステキな朝をむかえるための機能です。
ダウンロード&保存機能はMP3プレーヤーなどにコピーして持ち歩く為に検索した曲をファイルに保存する機能です。
MP3プレーヤーに詰め込んで外に持ち出す機能なので「おべんとう」機能と名付けます。
お気に入り作成機能は検索結果を保存しておいて、後で検索し直さなくてもよいようにする機能です。

このプログラムの完成でとりあえず一段落です。 年内には仕上げたいですね。

| Comments (0) | TrackBack (0)

2004.08.16

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥試運転開始
自宅専用サーバーへアップロードしたmp3ファイルを試聴する機能が完成しました。
これで試運転開始ができました。 本運転までに曲をアップロードしながら使い勝手を調整していきます。

そして、そろそろ曲の印象で検索をする機能の設計に入ります。

| Comments (0) | TrackBack (0)

2004.07.24

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥曲の送信ページを作る
曲を登録するプログラムの最後は、曲をきちんと登録できたか確認する機能です。
登録した曲を送信するWEBページを作りました。
登録がきちんと出来ていれば、IDを入力したら曲が流れてくる仕組みです。
こんなページです。
request_page.jpg
画像サイズを小さくするためボケボケの画像ですが、こんな風なページにしました。
お姉ちゃんの歌の「夢見るコスチューム」を試聴中の画像です。

曲の登録プログラムからはボタンをクリックすると、曲の送信ページに登録したIDが送られ、直接音楽が流れるように作る予定です。
この部分も含め、曲の登録プログラムは8月中にほぼ仕上げが出来る予定♥

| Comments (0) | TrackBack (0)

2004.07.22

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥もうバージョンアップの準備?
使い始める前からバージョンアップに備えてみました。
楽しい曲や静かな曲をという検索をするために、印象データーを登録するわけですが。
将来的に違うジャンルの曲の異なったタイプの印象データーを登録したくなるのは目に見えている状況なのでデーターを保存するxmlファイルに拡張性を持たせるための細工をしました。
xmlファイルのスタートエレメントの名前で判断して、データーを格納する適切なオブジェクトを選んで作成します。

♥♥♥♥♥
'自分のルート要素を読む
.ReadStartElement()
'印象データーのバリエーションを増やすときはここで分岐する
Select Case True
Case .IsName("heartDataImpress") : ret = New heartDataImpress
'case .IsName("heartDataImpressDEMOMOVIE") : ret=New heartDataImpressDEMOMOVIE
Case Else : ret = Nothing
End Select
'データー読み込み
ReadData(ret, errMsg)
'自分のルートに対する終了タグを読み込み
.ReadEndElement()
♥♥♥♥♥

つまりゲームのデモムービーを登録するときには、「エロ/健全」とか「妹/お姉さん」とか、今のとは異なる種類の印象データーを入力できるようになります。
(そのはずです♥)

それと、
SELECT文のCASEの部分でルーチンを実行出来たりするのはVBの便利なとこですね♥

| Comments (0) | TrackBack (0)

2004.07.15

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥曲の登録部分ほぼ完成
サーバー側とクライアント側双方のプログラムの調整をして曲が登録できるようになりました。

サーバー内のフォルダーのアクセス権の設定。
サーバープログラムを配置しているフォルダーとその中のファイルにはユーザー=ASP.NETとログインユーザーに対してアクセス権を設定する必要があるようです。
しかし、それ以外のフォルダーにはユーザー=ASP.NETに対してのみのアクセス権設定で良いようです。
なぜこのような微妙な違いがあるのかよく分かりませんが、どうもそのようです。

♥自宅サーバーへ本番インストール。
ついに、自宅サーバーへのインストールを行ってみました。
心配していたレスポンスもやや遅いものの使えるレベルにおさまりました。
なんとか形が見えてきた感じて、一安心です。
登山の途中でふと風景を見てしばし感動する気分です。

1.音楽ファイルの名前を登録用プログラムに読み込む
2.検索用のデーターを入力
 メディアプレーヤーコントロールからもデーター読込み
3.入力したデーターをXMLファイルに保存
4.音楽ファイルとXMLファイルをFTPで自宅サーバーへ転送
5.サーバー側でデーターベースに格納
♥ここまでの処理が出来るようになりました。

| Comments (0) | TrackBack (0)

2004.07.06

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。


VMWareの仮想パソコンによるサーバーへのインストールの練習。
難なく行くだろうと思っていたのですが、意外なエラーに手こずりました。

System.IO.FileNotFoundException: ファイルまたはアセンブリ名 wkcwt-dd.dll、またはその依存関係の 1 つが見つかりませんでした。
ファイル名 : "wkcwt-dd.dll"
・・・略・・・
=== Pre-bind state information ===
LOG: Where-ref bind. Location = C:\WINNT\TEMP\wkcwt-dd.dll
LOG: Appbase = file:///c:/inetpub/wwwroot/heartdb/kokoron
LOG: Initial PrivatePath = bin
Calling assembly : (Unknown).
===
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/WINNT/TEMP/wkcwt-dd.dll.

こんなエラーメッセージです。
ファイル名の「wkcwt-dd.dll」はエラーが出るたびに違う名前なので一時ファイルらしいです。

最後の方のメッセージが英語なもので、あれこれ思いつくままいろんな設定を変えまくって、やっと答えが見つかりました。
C:/WINNT/TEMPのフォルダーに、アクセスしているユーザーが読み取りが出来るようにアクセス権を設定することで解決。
しかし、なぜC:/WINNT/TEMPのフォルダーにアクセスするのかはナゾのまま。


変えまくった設定を元に戻すためVMWareの復元機能で最初の状態にもどし、再度インストールの練習。
今度は一発でOK。

次は、実際の自宅サーバーでレスポンスがどんなものか実験です。

| Comments (0) | TrackBack (0)

2004.06.28

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。


曲の登録部分は、実際に使いながら調整していく作業に移ります。
一番懸念していたファイルの転送方法は、インターネットエクスプローラーのファイル転送機能を使い、ドラッグ&ドロップの操作でサーバーに転送することで解決しました。
難関は無事に乗り越えることが出来ました。
後はそれほど難しい部分はないでしょう。

これからは実際に使う状態とほぼ同じ状態をVMWareの仮想パソコン上に作り動かしてみます。

次の課題はレスポンスの早さとサーバー上のファイルのアクセス権の設定です。
特に、は~とデーターベースのWEBサービスは、曲の登録時にサーバー上のファイルやフォルダーを移動したり作成したりするのでアクセス権の細かい設定にチャレンジしてみます。
自宅のLAN内のみの公開なのでアクセス権にこだわる必要はないのですが、興味があるのでやってみることにしました。

| Comments (0) | TrackBack (0)

2004.06.22

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥最大のピンチ発生
このプログラム、自作のパソコンで作っているのですが。
別のことをしている時にOS(WIN2000pro)フリーズ。

そして、
信じられないことに・・・
C:\Documents and Settingsの中のログオンしていたユーザーのフォルダーが消滅。
つまり、ディスクトップなどが一気に消えたということで・・・
しかも、administratorの。
おーまいごっど!!

もう、ほえ~って感じでしたよ~っっ
いえOSは何とか生きてますが、いろんなプログラムの設定が飛んでました。
けっこういろんな情報が保存されているのですね、あのフォルダー。
壁紙の妖精さんの絵も見れなくなってるし、
あ゛~

いや~、前々から負荷をかけるとフリーズしてしまう自作パソコン。
だましだまし使ってたのですが、今回ばかりはもう買い換えたくなってしまいました。

でもでも、お財布の中から「だめ♥」って声が聞こえてきます。 お正月にえびす神社にきちんとお参りしておくべきでした。

| Comments (0) | TrackBack (0)

2004.06.14

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

♥例外処理のチェック。
エラーが発生した時の処理ルーチンが出来ているかをチェックしました。
ちょうど良いタイミングでこんな連載記事が掲載されました。

@IT
連載:改訂版 プロフェッショナルVB.NETプログラミング
Chapter 09 例外処理

この記事の中の特に「Finallyブロックの確実性」は参考になりました。
例えばファイルへのアクセス中にエラーが発生した時には、catchブロックで例外補足したあとルーチンを抜けてしまいたいのだけど、その前にファイルを閉じないといけないという場面です。
catchブロックでexitしてもルーチンを抜ける前に必ずFinallyブロックは実行されるという事なのでFinallyブロックでファイルを閉じればOKです。

Dim xml As heartXmlReader = New heartXmlReader(xmlFile)
Try
If ShowXMLdata(xml.ReadNewHeartData()) = False Then
...
End If
Catch ex As Exception
MsgBox(ex.ToString)
Exit Sub 'Finallyが実行されてからExitする
Finally
If Not (xml Is Nothing) Then xml.Close()
End Try

考えてみればそうでなければおかしいのですが、この機能があるおかげでプログラムが組みやすいです。

| Comments (0) | TrackBack (0)

2004.05.30

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週でファイルをサーバーに登録する部分までがざっと出来上がりました。
登録したアルバムID番号をサーバーに送ると、アップロード先のURLが通知されます。
インターネットエクスプローラーのFTP通信機能を使って、通知されたURLにファイルを転送して、転送終了をサーバーに通知すると登録完了です。

'GetUploadPathでアップロード先URL取得
Dim url As String = webSrv.GetUploadPath(album.ID)
Dim brws As Process = New Process
With brws
.StartInfo.FileName = url
.Start()'エクスプローラー起動
.Close()
End With

webSrv.GetUploadPath(album.ID)の部分でWEBサービスを呼び出していて、アップロード先を取得するところです。
サーバーからは"ftp://192.168.0.2/0000001"のようなURLが通知されます。
WEBサービスが趣味のプログラムでも活用できるかチョコット試してみましたが、クライアントプログラムだけで作るより作りやすくなりそうな部分もあるかな?って感じです。

さて、ここまで急いで作ってきたので、6月はゆっくりと今まで作ってきた部分を見直してみる事にします。

| Comments (0) | TrackBack (0)

2004.05.24

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

今週はIDを作ってデーターベースに登録するサーバープログラムを作りました。
ID登録の部分は基本の処理が出来るようになりました。
データーベースへ登録する曲数と曲のファイル名のリストをサーバーへ送るとアルバム用のIDと各曲用のIDが戻ってきます。
無事にデーターベースにデーターが登録されているのを確認して一安心♥

ちなみに今持っている音楽&ムービーのファイルのサイズは合計すると6G程度あります。
今持っている自宅サーバーはノートパソコンのリブレット。
ハードディスクの空き容量は多少余裕はあるのです。
しかし、普通のノートパソコンを24時間電源入れっぱなしで3年目に入っているのでそろそろ寿命が近づいているって事にして、ハードディスクがより大容量のノートパソコンに買い換えてしまおうかと思ってます。
今40kBPSで保存しているMP3ファイルも若干音質を上げたいし、大容量の外付けハードディスクの導入も考えてみたいです。
でもそれはすべて今作っているプログラムが首尾良く出来上がってからの事。
そう思うと、プログラム作りにもますます力が入ります。

| Comments (0) | TrackBack (0)

2004.05.18

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索して聴く事が出来るデーターベースプログラムを作る様子を公開しています。

サーバー側のプログラムを作り始めました。
曲に割り当てるID番号を登録する部分で、WEBサービスで作ります。
WEBサービスを作るのは初めてなのでテスト版を作って動かしてみましたが、やはりサービスが起動するのに若干時間がかかります。
通常のWINDOWSプログラムを使っている時にも感じるのですが、.NETで作ったプログラムは起動に要する時間が少し長いです。
まあ、これを理由にわが家のサーバーもパワーアップ??

WEBサービスへのアクセスはパスワードにより制限し、サーバーのアドレスは設定ファイルに保存して後で変更できるようにします。
'パスワードによるアクセス
webSrv.Credentials = New System.Net.NetworkCredential("USER", "PASS")
'実行時にサーバーを決める
webSrv.Url = "http://192.168.0.2/heartdb/kokoron/regid.asmx"
'サービス実行テスト
MsgBox(webSrv.HelloWorld())

サービスの名前は『こころん』♥
アニメのココロ図書館に出てきたとっても可愛い3姉妹のいちばんちっちゃな女の子のこころちゃんからとった名前です。
曲の登録をする受け付けの女の子は、こころちゃんに決定♥

バックアップファイルの復旧用の画面としてこんなWEBアプリケーションの画面も作ってみようかなと思ってます。
<看板娘予想図>
看板娘ちゃん

| Comments (0) | TrackBack (0)

2004.05.05

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

MP3ファイルから曲情報を取り出して画面に表示する部分は事前の実験通りうまく出来ました。
これで曲名をキー入力する手間が省けるだけでなく、曲の演奏時間も自動的に入力されていくのでなかなか良い感じです。
そして、楽しい曲とか静かな曲などで検索する為のデーターの印象データーもいまエクセルに保存しているものをコピペで入力できるようにしました。

これで曲をデーターベースへ登録するためのプログラムはおよそ外形が固まってきました。
次は、いよいよサーバー側の仕組みを固めていきます。

| Comments (0) | TrackBack (0)

2004.04.26

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

ファイル一覧を作り、一覧の中で選択されたファイルを再生する部分を作りました。
画面の一覧表は
グレープシティーの
「 El Tabelle for .NET 2.0 (エル タブレ)」
というコントロールを使っています。
このコントロールに文字を表示するときには、文字列の配列の配列を使って目的の範囲に1度に表示する方法があります。
.NETでは配列の扱いがVBの時とは違っています。
文字列の配列は、文字列の配列型というように変わったんですね。

Private Sub ShowFiles()
'ファイル名リスト作成
Dim s As String()() = New String(fileList.GetUpperBound(0))() {}
For i As Int32 = 0 To s.GetUpperBound(0)
s(i) = New String() {fileList(i).Name}
Next

With Me.WBHeartData
For i As Int32 = shtNoMusic To shtNoFile
With .Sheets(i)
.MaxRows = fileList.Length
.CellRange = New Range(0, 0, 0, .MaxRows - 1)
.ValueBlock = s
End With
Next i
End With
End Sub


次は再生が始まった後にmp3ファイルのデーターを取り出し、画面の所定の場所に表示する部分です。

| Comments (0) | TrackBack (0)

2004.04.18

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

今週はいきなり画面作成。
WindowsMediaPlayerをフォームに貼り付けて、データーを入力する部分を作り、ボタンをぺたぺたくっつけました。
こんな感じです。
20040418form.jpg

WindowsMediaPlayerで動画も見れます。
まだまだ中身は何もないモックアップ同然の画面ですが、とりあえずOK♥

さてとこれからはサーバー側の仕組みを練ってそれに合わせて中身を作っていきます。

フォームのサイズを変えた時に中身のサイズや位置を変える処理はこんなです。
Private Sub frmMAIN_Resize(...略...
Static oldW As Int32 = Me.Width
Static oldH As Int32 = Me.Height
'サイズの差を計算
Dim dW As Int32 = Me.Width - oldW
Dim dH As Int32 = Me.Height - oldH
'画面右端に伴って移動するもの
Me.GBOpe.Left += dW
'画面右端に伴って幅が変わるもの
Me.GBPlayer.Width += dW
'画面下端に伴って移動するもの
Me.GBPlayer.Top += dH
Me.GBOpe.Top += dH
'画面下端に伴って高さが変わるもの
'ありません
'現在の画面サイズを保存
oldW = Me.Width
oldH = Me.Height
End Sub

| Comments (0) | TrackBack (0)

2004.04.11

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

今週はXMLファイルからデーターを読み込む部分を作りました。

工夫が必要だったのは任意の個数の子要素を読み込む部分でした。
なにせXMLの読み込みは初めてのことなので、正しく作れているのかちょっと不安です。
でも、とりあえず0個以上の子要素を読み込めたのでOKとしましょう。

'0個以上のトラック要素の配列を作る
Private Function MakeNewHeartDataTracks() As heartDataTracks
Dim ret As heartDataTracks = New heartDataTracks
With Me
'自分のルート要素を読む
.ReadStartElement()
'トラック要素があれば読み込む
While .NodeType <> XmlNodeType.EndElement
.Read()
Select Case .NodeType
Case XmlNodeType.Element
'子要素からトラックデータ作成して配列に追加
ret.Add(MakeNewHeartDataTrack())
Case Else
'スペースなどをスキップ
End Select
End While
'自分のルートに対する終了タグはトラック要素読み込みループで読めている?
'.ReadEndElement()
End With
MakeNewHeartDataTracks = ret
End Function

さて、次は実際にMP3からデーターをとってくる部分を作り始めましょうか。

| Comments (0) | TrackBack (0)

2004.04.04

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

XMLファイルへのデーター保存は成功です。
サブプロジェクト@コードネーム=くるるちゃん@は順調に進んでます。

クラスheartDataBaseから派生させた6種類のクラスに格納するすべてのデーターをこのメソッドで保存してしまいます。
heartXmlWriterクラスのWriteDataメソッド
'
'要素のツリーを書き込む
'引数:外部からの最初のコール時は、heartData
Public Function WriteData(ByRef aData As heartDataBase) As Boolean
'自分のルートを書き込み
Me.WriteStartElement("", aData.GetMYname, "")
'子要素を処理
For i As Int16 = 0 To aData.GetCHILDcount - 1
WriteData(aData.CHILD(i))
Next i
'要素を処理
For i As Int16 = 0 To aData.GetDATAcount - 1
Me.WriteStartElement("", aData.GetDATAname(i), "")
Me.WriteString(aData.DATA(i))
Me.WriteEndElement()
Next i
'自分のルートを閉じる
Me.WriteEndElement()
End Function

メソッドの使い方はこうです。
'データー作成
Dim data As heartData = NewHeartData()
'ファイル名heartdata.xmlに書き込み
Dim outXml As heartXmlWriter = New heartXmlWriter("heartdata.xml", Nothing)
outXml.WriteData(data)
outXml.Flush()
outXml.Close() 'クローズし忘れてはいけません
heartDataオブジェクトにはタマネギのように入れ子にデーターが入ってます。
WriteDataメソッドではそのタマネギを、ひと皮むいてはデーター保存、むいてはデーター保存を次々にくりかえします。
その繰り返し処理は再帰呼び出しでくるくるっとやっちゃいます。
コードネーム=くるるちゃんってわけです♥

ちなみに、
'シリアライズ
Dim sXml As XmlSerializer = New XmlSerializer(GetType(heartData))
Dim of As FileStream = New FileStream("SERIAL.XML", FileMode.Create)
sXml.Serialize(of, data)
これでデーターの保存をする方法もあるのですが、
既定の(引数がない)コンストラクターが(Publicになっている)必要がある。
保存したいデーターをPublicなメンバーに格納する必要がある。
という条件を一部のクラスが満たしてないので出来ませんでした。

P.S.
瓶詰妖精では黄色い瓶の妖精さんの
「ちりりちゃん」がスキです♥ てへっ

| Comments (0) | TrackBack (0)

2004.03.28

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

データーを格納するクラスは今週でとりあえず完成。
次はクラスライブラリーのドライバープログラムを使って、実際にアルバムのデーターを格納できるかテストします。
そして、引き続きXMLファイルにアクセスする部分を作ります。
うまくいけば、再帰呼び出しを使ってくるくるっでファイルを作れるでしょう。

ところで、このクラスライブラリーを作るプロジェクトに名前を付けることにしました。
サブプロジェクト=くるるちゃん
クラスライブラリー → 「クラ」ス「ラ」イブラリー → クララ
ちょっとひねって ∽> くるる
あ~ぁ
私はヒマですか? 自分でも情けない気がします、このネーミング。

でも作業は少しずつ進行中。

| Comments (0) | TrackBack (0)

2004.03.21

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

引き続きデーターを格納するクラスを作成中です。
今日はデーターをソートする機能を作りました。 ソート機能そのものは.NETでは配列型のオブジェクトに最初から備えられてます。
作るのは備え付けのソート機能からコールバックのように使われる大小を比較する部分です。

♥いろんなソートキーに対応したソート機能をつくる
曲の並び替えでは曲番号順、タイトル順、アーティスト順などいろんなソートのキーが考えられます。
そこで、比較機能を担当するクラスを作って、そこからソートキーを変えたクラスを派生させるという方法をとりました。


'
'heartDataBase派生クラス用 データソート用比較クラス データID順(基本クラス)
Public Class heartDataComparer
Implements System.Collections.IComparer
Public Overridable Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
Dim xID As Int32 = CType(x, heartDataBase).ID
Dim yID As Int32 = CType(y, heartDataBase).ID
If xID < yID Then
Compare = -1
ElseIf yID < xID Then
Compare = 1
Else
Compare = 0
End If
End Function
End Class
'
'heartDataBase派生クラス用 データソート用比較クラス タイトル順
Public Class heartDataComparer_ByTitle
Inherits heartDataComparer
Public Overrides Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Dim xM As heartDataMusic
Dim yM As heartDataMusic
Select Case x.GetType.FullName'型名によるデータ型チェック
Case "heartDatabaseIO.heartDataMusic"
xM = CType(x, heartDataMusic)
yM = CType(y, heartDataMusic)
Case "heartDatabaseIO.heartDataTrack"
xM = CType(x, heartDataTrack).music
yM = CType(y, heartDataTrack).music
Case Else
Compare = 0
Exit Function
End Select
Compare = String.Compare(xM.title, yM.title)
End Function
End Class


♥それらの使い方
Dim tracks As heartDataTrack()
...
'デフォルトのソート
tracks.Sort(mtracks, New heartDataComparer)
'タイトル順のソート
tracks.Sort(mtracks, New heartDataComparer_ByTitle)

| Comments (0) | TrackBack (0)

2004.03.14

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

♥クラスライブラリーを作り始める(つづき)
先週に引き続き、XMLファイルを読み書きするクラスライブラリーを作っています。
今週は、データーを格納するクラスを作成し始めました。

CDのデーターを丸ごと格納するクラスですが、XMLファイルを読み書きするクラス(heartXmlWriter)へデーターを渡しやすくするためにクラスの構造を工夫します。
XMLファイルにある多くの要素の親子関係や兄弟関係をデーターのツリー構造であらわします。

データー関係のクラスは、
♥アルバムの全データーを格納するデータークラス
♥アルバム名・リリース日などを入れるアルバムデータークラス、
♥複数のトラックデーターを格納し管理するトラックの配列データークラス、
♥1曲ごとの曲情報・印象情報・ファイル情報を格納するトラックデータークラス
♥曲名、演奏時間などを格納する曲データークラス、
♥1曲ごとの印象を格納する印象データークラス、
♥ファイル名、ファイルサイズなどを格納するファイルデータークラス、
♥それから、上の7つすべてのクラスの基本クラスになる基本データークラス。

基本クラスのメソッドはC++の純粋仮想関数のようになるMustOverrideを指定しました。

8つのクラスを仕上げて一応のテストをするのは結構大変です。
まあ趣味で自分が使うものですから、テストはとりあえず動く程度で良いのですが。

'
'基本クラス
Public MustInherit Class heartData_Base 'heartDataの基本クラス
Public ID As Int32 'ID番号

#Region "XML用機能 オーバーライド"
'このクラスの要素名
Public MustOverride Function GetMYname() As String

'子要素の個数を返す
Public MustOverride Function GetCHILDcount() As Int16

'インデックスに対応する子要素名を返す
Public MustOverride Function GetCHILDname(ByVal index As Int16) As String

'インデックスに対応する子要素を返す
Public MustOverride ReadOnly Property CHILD(ByVal index As Int16) As heartDataBase

'兄弟要素の要素数を返す
Public MustOverride Function GetDATAcount() As Int16

'インデックスに対応する兄弟要素名を返す
Public MustOverride Function GetDATAname(ByVal index As Int16) As String

'インデックスに対応する兄弟要素の値
Public MustOverride Property DATA(ByVal index As Int16) As String

  'あと各クラスでCopyメソッドを定義する

#End Region

End Class

| Comments (0) | TrackBack (0)

2004.03.06

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

♥クラスライブラリーを作り始める
曲やアルバムの情報を保存するXMLファイルを読み書きするクラスと、データーベースにアクセスするクラス、データーそのものを入れるクラスをまとめてクラスライブラリーにします。
今までは実験でしたが、今回は実際にプログラムで使う部分を作ります。

♥クラスライブラリーの開発&デバグではドライバープログラムと同時かつシームレスにステップ実行出来ると便利です。
VisualStudio.NETではそれが簡単にできます。
まず、ドライバープログラムのソリューションを作成しておきます。
♥ドライバープログラムのソリューションに「プロジェクトの追加」でクラスライブラリーのプロジェクトを追加します。
♥ドライバープログラムをスタートアッププロジェクトにすればOK♥
♥F11キーでステップインしていけばドライバープログラムのコードからクラスライブラリーのコードへ、まるで1つのプログラムかのようにプロジェクトを超えてシームレスにステップ実行されていきます。
この方法はWEBアプリケーションでもWEBサービスでも同じように出来るようですから、2個1で動くタイプのプログラムを開発するには頼りになる機能です。

クラスライブラリーに割り振られる名前空間はデフォルトでプロジェクト名と同じになりました。
クラスライブラリーに付けた名前は"heartDatabaseIO"。
しっかりと役割を果たしてくれることを願います♥

| Comments (0) | TrackBack (0)

2004.02.29

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

♥カスタムXMLライターを作成する。

先週に引き続きXMLファイルをあつかう部分を作ります。
XmlTextWriterクラスを継承しては~とデーターベースのデーターを書き込みやすいようにカスタマイズします。
アルバムのデーターと複数の曲のデーターを格納するクラスを、カスタマイズしたXMLライタークラスに渡して、一気に書き込んでしまうようにする予定です。

♥VisualStudio.NETのヘルプにちょうど渡りに船の情報がありました。
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003APR.1041/cpguide/html/cpconcustomizedxmlwritercreation.htm
保存する文字がXMLで使える文字かどうかのチェックやXmlTextWriterクラスの継承の仕方が書かれています。
サンプルプログラムでは文字チェックの部分で一般的な例外クラスを使っていますが、ユーザー定義の例外クラスを作成して利用しても良いでしょう。

うまくいけば、それらのクラスをまとめてクラスライブラリーを作り、複数のプログラムで利用する予定です。

| Comments (0) | TrackBack (0)

2004.02.28

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

♥Norton製品との競合を解決する。

NortonAntiVirusとVisualStudio.NET、NortonInternetSecurityとIISはそれぞれ競合を起こす事があるようです。
Norton製品側の設定を変更することで解決できました。
各製品のバージョンはNortonInternetSecurity2004とそれに付属するNortonAntiVirus、VisualStudio.NET2003です。
OSはWINDOWS2000Pro+SP4です。

♥NortonAntiVirusのスクリプト遮断機能を停止する。
これで、VisualStudio.NETの新規プロジェクトが作成できないとか新しいモジュールなどを追加できないなどの障害が取り除けました。
NortonAntiVirusのマニュアルにはデバグ機能との競合すると書かれてましたから、他の言語・開発ツールでも同様の障害があるのかもしれません。

♥NortonInternetSecurityの起動を手動にする。
OS起動時に毎回手動でNortonInternetSecurityを有効にしなければなりませんがWEBアプリケーションを作成できないなどの障害は取り除けました。

なお、不具合を解決できた実例の一つとしてここに挙げさせて頂いています。
この方法を実施される場合は、よく検討の上各自の自己責任にてお願いします。

| Comments (0) | TrackBack (1)

2004.02.21

は~とデーターベース計画


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

♥XMLを勉強する。

いろんなデーターの保存方法として新しく登場したXML。 ココログでもおなじみの形式です。
パソコンで入力した曲のデーターを自宅専用サーバーへ登録するには、XMLファイルを使ってファイルのアップロードでやってみることにしました。
さっそくVB.NETでテストプログラムの作成です。 とりあえずプログラムでXMLファイルを読み書きする実験は成功しました。
ですが、根本的にXMLってなんでしょ? いろいろと約束事がありそうなんですが。
まずXMLの一般的なこと、それからプログラムで処理するときのことをそれぞれ勉強する必要がありそう。

まずは、ここでも読んでみます。
@IT > Insider.NET > .NETで簡単XML > 第1回 XML超入門
http://www.atmarkit.co.jp/fdotnet/easyxml/easyxml01/easyxml01_01.html
本も買いました。
「最新 XMLがわかる」
http://www.gihyo.co.jp/books/syoseki-query.php/4-7741-1065-5

XMLが出来たら次はアップローダーページを作ります。

| Comments (0) | TrackBack (0)

2004.02.15

は~とデーターベース計画 8


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

バックアップをふまえてファイルの保存方法を考える。

は~とデーターベースではMP3などのファイルと曲の感想・印象のデーターをたくさん保存するためバックアップが重要になります。
♥バックアップファースト
バックアップ用データーを先に作ってしまい、データーを守りやすい仕組みにしたいという作戦です。
この作戦では、新しいデーターを保存する処理とバックアップからデーターの復元する処理を共通化する必要がありそうです。
まだ机上の空論のこの作戦が言葉通りにうまくいくかどうか検証はこれからです。

| Comments (0) | TrackBack (0)

2004.02.11

は~とデーターベース計画 7


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

入力補助機能を考える。
データーベースへの情報入力はひたすら根気あるのみですが、いちいち手入力はやってられないということで自動化できないか実験してみることにしました。

♥実験:MP3ファイルのデータをとれるか
以前、エクセルのフォームにWINDOWSメディアプレーヤーを貼り付けたものを利用します。
メディアプレーヤーでMP3を再生させて曲名やアーティスト名がとり、エクセルにリストアップできるかやってみました。

♥実験結果
MP3を作るときに音楽情報を入れた場合、次のデーターをとることが出来ました。
アーティスト名、曲名、演奏時間、ビットレート、ファイルサイズ、メディアタイプ(audio/video)、ファイルタイプ(ファイルの拡張子と同じ)、ファイルサイズ。
これだけあればは~とデーターベース的には十分です。

Set SHT = ActiveSheet
UserForm1.Show vbModeless
FNAM = Dir(PATHNAME & "*.*")
ROW = 2
While FNAM <> ""
With UserForm1.WindowsMediaPlayer1
'ファイルオープン
.Url = PATHNAME & FNAM
'再生が始まるまでデーターがとれない
While .PlayState <> wmppsPlaying
DoEvents
Wend
SHT.Cells(ROW, 1) = FNAM
'アーティスト名
SHT.Cells(ROW, 2) = .currentMedia.getItemInfo("Author")
'曲名
SHT.Cells(ROW, 3) = .currentMedia.getItemInfo("Title")
'演奏時間
V = .currentMedia.getItemInfo("Duration")
SHT.Cells(ROW, 4) = Int(V / 3600) & ":" & Int((V Mod 3600) / 60) & ":" & Int(V Mod 60)
'ビットレート
SHT.Cells(ROW, 5) = .currentMedia.getItemInfo("Bitrate")
'メディアタイプ
SHT.Cells(ROW, 6) = .currentMedia.getItemInfo("MediaType")
'ファイルタイプ
SHT.Cells(ROW, 7) = .currentMedia.getItemInfo("FileType")
'ファイルサイズ
SHT.Cells(ROW, 8) = Format(.currentMedia.getItemInfo("FileSize") / 1024, "###,###")
End With
FNAM = Dir
ROW = ROW + 1
Wend

ということで、実験は大成功。♥
データーベースへの入力もきっと楽ちんになることでしょう。

| Comments (0)

2004.02.08

は~とデーターベース計画 6


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

さて、実験です。
♥『自宅専用』サーバーから曲を送信できるかやってみよう。
Visual Basic .NET でWEBアプリケーションを作る要領でこうすれば、できます。

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' ページを初期化する ユーザー コードをここに挿入します。
Dim id As String

With Me.Request
id = CStr(.Params.Item("id"))
End With

With Me.Response
.ContentType = "audio/x-mp3"
Select Case id
Case "1" : .WriteFile("D:\temp\test_data\み○み○ナース.mp3")
Case "2" : .WriteFile("D:\temp\test_data\き○るるんK○ssでジ○ンボ♪.mp3")
Case Else : .WriteFile("D:\temp\test_data\ダメだよおにいたんByみいたん.mp3")
End Select
End With
End Sub

これで、
http://localhost/download/form1.aspx?id=1
にインターネットエクスプローラーからアクセスしても、いつも聴くmp3プレーヤーソフトからアクセスしても見事"み○み○ナース"が聴けます。
実験はじつにサクサクっと出来ました。♥
ものの30分で今週の実験は大成功のうちに終了。 あまりにサクサクっと出来たので感涙です。

なお、著作権所有者の許可なくインターネットから曲をダウンロードできる状態にすると、その時点で法に触れ即『逮捕』されますのであしからず。
私はそんなことは絶対にしません。今回のプログラムは自分だけが使うのでぎりぎりセーフというところですか。
いちお、身の潔白をアピールしておきます。

♥誓い♥
私はこのプログラムを個人の使用のみに限定し、
プログラムの曲の送信機能を決してインターネット上に公開しないことを誓います。

| Comments (0)

2004.02.07

は~とデーターベース計画 5


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

データーベースとプログラム言語

♥データーベースはMySQLに決めました。
♥プログラム言語はVisual Basic .NETにしました。

既にこのコンビは、ブックマーク整理&表示ソフトの自作の時にうまく動いてくれているので問題はないはずです。
データーベースと通信するにはMySQLDriverCSを使っています。

実際、VBのフォームにメディアプレーヤーの画面を貼り付けられるかはやったことがないですが、
インターネットエクスプローラーの画面を貼り付けれたときと同じ方法で出来るでしょ、きっと。

| Comments (0)

2004.02.06

は~とデーターベース計画 4


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

検索できたらそのまま聴けるとなお良い。

今持っているCDを、『個人で楽しむため』(この目的、重要)にMP3で録音したものを聴く方法。
プログラムから「この曲を聴く」と指定したら、その曲を再生する方法です。

試しにエクセルのフォームにWINDOWSメディアプレーヤーの画面を貼り付けてMP3を再生できるかやってみました。
これならMP3だけでなくMPEGムービーでも再生可能です。
つまり、カワイイ女の子がたくさんでてくるゲーム♥のデモムービーも見たいときに見れるようになるはずです。

ちゃんと見れました。
自分が作ったフォームの上でゲームのキャラクターが動いたり歌ったりするのを見てしばし感動。♥
登山の途中で一休みして良い景色にしばし感動するような、プログラム作成中のステキなひととき。

♥決定♥
メディアプレーヤーを貼り付けた画面をプレビュー画面に採用する。

| Comments (0)

2004.02.05

は~とデーターベース計画 3


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

本格的なデーターベースを使う。
は~とデーターベース計画2で書いた今ある曲の感想データーはエクセルに入っています。
今回はそれを本格的なデーターベースに移します。

♥利用するデーターベース:MySQL
♥理由:名前がおもしろい
個人で作るプログラムなんてそんな理由で十分です。
(本当はMySQLはちゃんと実用になるすばらしいデーターベースソフトなんです)

このデーターベースに名前をつけます。 は~とデーターベース。
曲の感想が入っているので、は~とデーターベースと名付けてみました。

| Comments (0)

2004.02.04

は~とデーターベース計画 2


楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるデーターベースプログラムをつくるぞ。

データーベースエンジン。
曲の感想をデーターベースいれるのは既に実証済みです。
感想をデーターベースに入れるのはこんな感じです。

楽しい-悲しい という欄を作り、楽しい曲にはO悲しい曲にはXを入れます。
楽しい感想が○で悲しい感想が×という訳ではないのですが、とりあえずそうします。
同じように愛する-憎むとか、熱烈-静寂などの反対の感想の10こほどペアを作っていき曲に当てはまるものにOXを入れていきます。 どちらにも当てはまらないときは空欄です。

こうやって、今私が持っている2000曲以上の曲に対して入力したものが既にあります。
これが結構役に立ってくれるんです。

| Comments (0)

2004.02.03

は~とデーターベース計画 1


2月からちっちゃなプログラムを作ることにしました。

コンセプト。
楽しい曲を聴きたいときは楽しい曲を、静かな曲を聴きたいときは静かな曲を検索できるプログラムが欲しい。
検索できたらそのまま聴けるとなお良い。

道具。
プログラム作成ソフト
データーベースエンジン
自宅専用サーバー

目標。
夏頃までに完成したらいい。
良いのができたらサーバー専用パソコン新調か?

| Comments (0)