ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Archive for 12月 2013

Microsoft Surface RT と Microsoft Surface 2 で写真を見るには「インポート」機能を使わず写真データをフォルダに入れて Pictures フォルダにコピーするといい。写真の解像度は Surface の解像度にあわせてリサイズしておく。

leave a comment »

Microsoft Surface RT や Microsoft Surface 2 で写真を管理するとき、一般的には Photos アプリを開き import 操作で写真ファイルを取り込むことになるだろう。しかし写真の管理は、写真ファイルが Pictures フォルダにあれば良いので、単にファイルをフォルダごとまとめて Pictures フォルダにコピーするのが簡単だ。

このとき、写真が入った元のフォルダ名がそのまま Photos アプリのアイコン名で表示される。

Screenshot_003_mid_640

<Fig.1 : Microsoft Surface 2 で Photos アプリで写真ファイルを import する>

Screenshot_004_mid_640

<Fig.2 : Microsoft Surface 2 で micro SD の写真ファイルをフォルダごと Pictures フォルダにコピーする>

ところで Photos アプリで写真を管理するためには、OS がインストールされている Windows ドライブに写真ファイルをコピーすることになる。写真ファイルのサイズが大きければ OS のディスクスペースを圧迫してしまう。とりわけ昨今のデジカメは撮影時の解像度が高く、多くの写真ファイルを OS ドライブに入れるのは良くないだろう。実は Surface RT や Surface 2 の Photos アプリは、フォルダに写真ファイルを単にコピーするだけでリサイズはしてくれない。

そこで写真ファイルを Microsoft Surface RT や Microsoft Surface 2 にコピーする際に、それぞれのデバイスで最適な解像度に変更しておくのが良い。

デジカメによって撮影時の解像度は様々かもしれない。たとえば撮影時の解像度が 4,608 × 3,456、3,264 × 2,448、1,600 × 1,200、640 × 480、といった場合、これは 4 : 3 の比率だが、Microsoft Surface RT の画面解像度は 1,366 × 768 (約 16 : 9 Full-Wide-XGA )、Microsoft Surface 2 の解像度は 1,920 × 1,080 ( 16 : 9 Full-HD) であり、いわゆるワイド画面で比率があわない。

そこで写真の上下をトリミングしてワイド画面にあわせるか、左右の余分を我慢して縦だけを画面サイズにあわせるかのどちらかになるだろう。写真のトリミングは好きではないので、縦サイズだけを Surface の画面にあわせると、Surface RT の場合は、横 1,024 × 縦 768、Surface 2 の場合は、横 1,440 × 縦 1,080 のサイズに合わせることになる。それぞれ解像度をあわせて画面に表示すると次のようになる。縦の画面サイズにぴったり収まっている。左が Surface RT で右が Surfae 2 だ。

IMG_5916_mid_640_480

<Fig.3 : Microsoft Surface RT (左) と Microsoft Surface 2 (右) でデジカメ写真のサイズを最適化して表示した>

ところで、このようにして Pictures フォルダに大量の写真ファイルをコピーしたとき、Photos アプリが写真のサムネールを作成する作業に一定の時間がかかる。極端な場合、大量の写真ファイルを Pictures フォルダにコピーしてすぐに Photos アプリを起動しても、写真がない、と言われる場合がある。またサムネールが一部分の写真だけ表示され、足りないように見えることもある。

Photos アプリがどんなタイミングでサムネールの生成を行っているかが不明なので説明はできないが、その挙動を見ていると、どうやらCPUのアイドル時間を見ながら作業をしているようだ。なにもしないで Surface を放置しておくと、そのうちサムネールを順次作成してくれるようだ。

たとえば次の写真は 2013 年の秋に Microsoft MVP Global Summit でシアトルのマイクロソフト社を訪問したときの写真を整理して Surface 2 にインポートしたものだが、このときの写真ファイルは 10,776 ファイルで、サイズを 1,440 × 1,080 にリサイズしておりファイルサイズは全部で約 1.25 GB になっている。この写真ファイルを Pictures フォルダにコピーし、Photos アプリを起動したところ、あるべき写真のサムネールが欠落している状態になった。

Screenshot_001_mid_640

<Fig.4 : Microsoft Surface 2 の Pictures フォルダに 10,776 枚の写真ファイルをコピーした直後のサムネール>

サムネールが小さいのでわかりにくいが、中央にみえる緑色の看板の写真は、シアトル・タコマ国際空港の通路に掲示された、工事中の看板写真だ。左側にはペットボトルがつぶれた写真があるが、これは飛行機が空港に着陸した直後に、気圧が下がって空のペットボトルが押しつぶされた写真で、この間には空港の写真が何枚もあるはずなのだ。また右にはシャトルバスに乗っている俺の写真があるが、この間にもタコマ国際空港ロビーに飾られた飛行機の実物大模型の写真などがあるはずなのだ。

このようにサムネールは欠落した状態になったが、写真の実態はちゃんと Pictures フォルダにコピーされている。サムネールだけが反映されていないのだ。そこで Pictures フォルダを最新の状態にしたり、Photos アプリを閉じたり開いたりし、また Surface を再起動するがサムネールは反映されない。ただ、しばらくじっと Surface を放置しておくと、少しずつサムネールができていくことが見えた。

しばらく経つと、次のようにサムネールが正しく反映されるようになった。

Screenshot_002_mid_640 

<Fig.5 : Photos アプリが正しくサムネールを表示した>

Surface は写真や動画などコンテンツを見るのに都合がいい。ネット環境がいつでもあるとは限らないので、Surface には効率よく写真や動画を保存し活用したい。

広告

Microsoft MVAで自宅にいながらインターネットでトレーニングを受けることができる。ビデオ教材もあり、日本語コンテンツもある。

leave a comment »

「Microsoft MVA」は「マイクロソフト・バーチャル・アカデミー」の略。インターネットでマイクロソフト製品の使い方などを学ぶことができる。

Microsoft Virtual Academy
http://www.microsoftvirtualacademy.com/?mtag=MVP10329

Microsoft_Virtual_Academy_mid_640

コンテンツはWebテキスト、PDF、ビデオ教材などさまざまなものが用意されている。日本語だけではなく英語のコンテンツも多いが、ビデオ教材では英訳がついたものもある。

ビデオ教材では、マイクロソフトの著名なエバンジェリストから講義を受けることができる。たとえば「いまさら聞けないWindowsストアアプリ開発入門」では、「Windows Phoneゲーム プログラミング」や「ゼロからはじめるプログラミング 第2版 ソフトウェア実践講座」、「Silverlight大全(共著)」などの著者で、マイクロソフトのエバンジェリスト田中達彦氏からレクチャーを受けることができる。

ビデオ教材では実際に開発をする場面を見ることができ、文章や話し言葉ではわかりにくい開発の実際に触れることができる。これからは自宅で、あるいは職場で、時間の持てるときにこのようなWeb教材で学習する時代になる。今後ますますコンテンツが充実し、開発や運用のトレーニングがしやすくなることを期待し、また楽しみにしている。ぜひ体験してもらいたい。

SQL Server : サーバーサイドでデータの変更日付をテーブルに自動的に記録するために、AFTER UPDATEトリガを利用する。変更データの絞込みにはサブクエリではなく in 句を使う。

leave a comment »

「SQL Server : サーバーサイドでデータの作成日付をテーブルに自動的に記録するために、フィールドの列のプロパティで規定値を設定し、INSTEAD OF INSERTトリガを利用する」では、テーブルのフィールドに「作成日」のフィールドを作り、データの生成日と時間を自動的に記録する方法を説明した。データの生成日と時間をサーバー側で記録するには、フィールドのプロパティに既定値を設定する方法と、INSTEAD OF INSERTトリガで強制的にデータを与える方法があった。では、既に生成しているデータの「更新日」をSQL Server側で自動的に記録するにはどうすればよいだろう。これもテーブルに「トリガ」を設定することで実現できるが、少し工夫が必要だ。

まず次のようなテーブルを作ろう。

——————————————————

フィールド名 データ型 備考
ID int 主キー、IDENTITY(はい)、シード(1)、増分(1)
データ int
作成日 datetime
更新日 datetime

——————————————————

SQLSV_blog_update_datetime_001_mid_640

<Fig.1 : サンプルの「テスト」テーブルを作る>

テーブルができたら、いくつかサンプルのデータを作っておこう。

SQLSV_blog_update_datetime_003_mid_640

<Fig.2 : 「テスト」テーブルにサンプルのデータを作っておく>

次に、この「テスト」テーブルに次のクエリでAFTER UPDATEトリガを設定する。

——————————————————

CREATE trigger trig_02 on テスト after update

as

update テスト set 更新日 = getdate() where ID = (select ID from inserted)

——————————————————

SQLSV_blog_update_datetime_002_mid_640

<Fig.3 : 「テスト」テーブルにトリガを設定する>

SQLSV_blog_update_datetime_004_mid_640

<FIg.4 : 「テスト」テーブルにトリガを設定した>

このトリガは、「テスト」テーブルにUPDATE文が発行されたとき、変更されたデータが入っている「inserted」一時テーブルのIDを調べ、そのIDと同じIDのデータに対して「更新日」のフィールド値を gerdate() 関数で現在の日付と時間を取得して更新するというものだ。

では、このトリガを設定した「テスト」テーブルのデータを更新してみよう。次のクエリを試してみる。

——————————————————

UPDATE テスト SET データ = 101 where データ = 100

——————————————————

SQLSV_blog_update_datetime_005_mid_640

<Fig.5 : トリガを設定した「テスト」テーブルに UPDATE 文を実行する>

UPDATE 文は1件のデータを更新するものだが、処理結果のメッセージが2行表示されている。トリガが動いたのだ。ではテーブルのデータを確認してみよう。

SQLSV_blog_update_datetime_006_mid_640

<Fig.6 : データを更新した「テスト」テーブルのデータを確認する>

トリガによって「更新日」のデータが自動的に記録されたことがわかる。だが、実はこのトリガには問題がある。試しに、次のクエリを実行してみよう。このクエリでは、データが 800 のデータを更新しているが、サンプルデータには 800 のデータが2件あるのだ。

——————————————————

UPDATE テスト SET データ = 801 where データ = 800

——————————————————

SQLSV_blog_update_datetime_007_mid_640

<Fig.7 : 「テスト」テーブルの2件のデータを更新しようとしてエラーになった>

トリガに設定した UPDATE 文はサブクエリだ。サブクエリでは複数の値を処理することができない。これでは困るので、トリガを変更する。変更するには、テーブルを展開してトリガを表示し、右クリックで「変更」をクリックする。

SQLSV_blog_update_datetime_010_mid_640

<Fig.8 : 「テスト」テーブルに設定したトリガを変更する>

——————————————————

update テスト set 更新日 = getdate() where ID in (select ID from inserted)

——————————————————

= でつないだサブクエリを in 句に変更するのだ。

SQLSV_blog_update_datetime_011_mid_640

<Fig.9 : トリガのサブクエリを in 句に変更する>

変更できたら、もういちどデータを2件変更する UPDATE 文を実行してみよう。うまくいくはずだ。

SQLSV_blog_update_datetime_012_mid_640

<Fig.10 : データを2件変更する UPDATE 文を実行する>

変更したデータを確認しよう。

SQLSV_blog_update_datetime_013_mid_640

<Fig.10 : UPDATE 文を変更したテーブルを確認する>

このように更新日の日付と時間をサーバー側で自動的に記録するには、テーブルにトリガを設定すればよい。そのとき、変更をうけたデータを絞り込むにサブクエリではなくて in 句を利用する。サブクエリでは複数のデータを更新する UPDATE 文でエラーがおこるためだ。

神戸三宮の駅前で定期的に開催する神戸SQL Server Users Group(KSSUG)のSQL Serverセミナーは第二回「初級1」と「初級2」を終了した。

leave a comment »

神戸三宮の駅から歩いて数分の貸会議室を借りて、実習形式のSQL Serverセミナーを開催している。昨日は第二回目のセミナーで、「初級1」と「初級2」を連続で実施した。

神戸SQL Serverセミナー「初級1」2013年12月14日(土)http://kobesqlserverusersgroup.wordpress.com/2013/11/26/sql-server%e3%82%bb%e3%83%9f%e3%83%8a%e3%83%bc%e5%88%9d%e7%b4%9a%ef%bc%91-2013%e5%b9%b412%e6%9c%8814%e6%97%a5%ef%bc%88%e5%9c%9f%ef%bc%89-900%ef%bd%9e1030-%e4%b8%89%e5%ae%ae/

神戸SQL Serverセミナー「初級2」2013年12月14日(土)http://kobesqlserverusersgroup.wordpress.com/2013/11/28/sql-server%e3%82%bb%e3%83%9f%e3%83%8a%e3%83%bc%e5%88%9d%e7%b4%9a2-2013%e5%b9%b412%e6%9c%8814%e6%97%a5%ef%bc%88%e5%9c%9f%ef%bc%89-1030%ef%bd%9e1150-%e4%b8%89%e5%ae%ae/

「初級1」はSQL Serverをやってみたいが触ったことのない人を想定して、データベースの作成、テーブル作成から始める実習、「初級2」はユーザー定義関数とストアドプロシージャ作成の基本実習、を行った。1回のセミナーは1時間20分で、ノートパソコンを使った実習形式だ。

今後は高度なSQL文、実務的なストアドプロシージャ、カーソルの使い方、直積やPIVOPビュー、そしてユーザー管理とActiveDirectoryの連携、またVisual Studioを使ったクライアントアプリケーションの開発、など少しずつ内容を深めていきたいと思っている。

ほぼ月1回、できれば月2回程度開催し、少しでも多くの人にSQL Serverに興味と関心を持ってもらいたい。私自身、自学自習の一般ユーザーにすぎないが、この6年間、実務でSQL Serverによるデータベースシステムの開発と運用、管理をやってきた経験をふまえ、ユーザーに知識と技能を伝えられたらと思っている。

電子工作でエレキギター用ファズFoxey Ladyを作る(その2) – 組み立てたパーツをケースに装填する – 教科書は大塚明著の「サウンド・クリエーターのためのエフェクタ制作講座」

leave a comment »

大塚明著の「サウンド・クリエーターのためのエフェクタ制作講座」を見ながらエレキギター用ファズ「Foxey Lady」を作った。回路の組み立てまでを前回紹介したが、その後、パーツをケースに装填するところを紹介する。

電子工作でエレキギター用ファズFoxey Ladyを作る – 教科書は大塚明著の「サウンド・クリエーターのためのエフェクタ制作講座」
https://matsumotoyoshio.wordpress.com/2013/07/20/%e9%9b%bb%e5%ad%90%e5%b7%a5%e4%bd%9c%e3%81%a7%e3%82%a8%e3%83%ac%e3%82%ad%e3%82%ae%e3%82%bf%e3%83%bc%e7%94%a8%e3%83%95%e3%82%a1%e3%82%bafoxey-lady%e3%82%92%e4%bd%9c%e3%82%8b-%e6%95%99%e7%a7%91/

IMG_4734_mid_640_480

<Fig.1 : エレキギター用ファズ「Foxey Lady」の全体>

ケースに取り付けなければならないパーツのうち、外部に出るボリュームと標準ジャックの位置を考える。たいていのエフェクターはこのように本体表面の上部にボリューム類が並び、本体側面にインプット、アウトプットの標準ジャックがある。また多くの場合は本体表面の上部、足で踏んで安定する中央部分にスイッチが取り付けられるが、今回は常時ONのエフェクターとしてスイッチなしとした。スイッチをなくすことで結線が簡単になるし、なんといってもスイッチは高価なのでコスト削減になる。音の切り替えが必要ならば、セレクトスイッチをエフェクター外部で結線することで対応できる。

IMG_4735_mid_640_480

<Fig.2 : ボリュームの取り付け部分>

ボリュームには空回り防止のツメがある。そこでボリュームを固定する穴の横に、もうひとつ小さな穴、空回り防止のツメが入る穴をあけておく。こうすればボリューム固定のナットが緩んでも、ボリューム本体が空回りすることを防止できる。ただ、こうすればケース表面に穴が見えるので、美的には問題があるかもしれない。この穴が気に入らないならば、ボリュームのツメを切り落としてしまう方法もある。その場合はネジの緩みによるボリュームの空回りに気を付けよう。空回りを放置しておくと、内部の結線が引っ張られて線が切れたりする可能性がある。その場合は、内部配線を長めに、余裕をもってつないでおく、など気を付けると良いだろう。

IMG_4736_mid_640_480

<Fig.3 : 標準ジャックの取り付け部分>

インプット、アウトプットの標準ジャックは本体側面の中央あたりに取り付ける。こちらはジャックの大きさに穴を開けてナットを締めるだけだ。

IMG_5035_mid_640_480

<Fig.4 : 基盤取付用の木材をケースに固定する>

基盤を本体に取り付ける工夫はいろいろある。メーカー製ならケースの内側にビス穴をモールドしてネジで固定するだろう。あるいはボリュームやジャック類を基盤に固定して保持する方法もあるだろう。今回は木ネジで基盤を固定することとし、本体に基盤取付用の木材を取り付けた。木材は2液タイプのエポキシ接着剤でしっかりと固定する。完全に固化するまで一昼夜おく。

IMG_4733_mid_640_480

<fIg.5 : 基盤を本体に木ネジで固定する>

完成した基盤に木ネジがとおる穴をあけ、ケースに接着した木材に固定した。写真では見えないが、木ネジの基盤裏側には3mm程度のプラスチック製スペーサーを通してあり、木材から浮き上がるようにしている。

IMG_4738_mid_640_480

<Fig.6 : 006P積層乾電池の収納スペース>

エフェクターには006P、9Vの積層乾電池を使うことが多い。本体に収め固定するために、基盤の位置を積層乾電池が収まる位置に考慮した。このままケースを閉めれば固定されるが、もし不安なら基盤と電池の間にプラ版などを挟むとよいだろう。

IMG_4737_mid_640_480

<Fig.7 : 完成したエフェクターの内部>

これで完成だ。

Written by Yoshio Matsumoto

2013年12月10日 at 10:43 AM

今夜のビール – BAND OF BREWERS CO., THIRD–SHIFT 瓶入り12 FL. OZ.

leave a comment »

今夜はまた旨いビールに出会えた。米国BAND OF BREWERS CO.,のTHIRD – SHIFTだ。ラベルのデザインがカジュアルだったので軽いビールかと思ったがそうではなかった。甘みがあり香りが深く、苦味は少ない。だが濃厚な味ではなく、喉の渇きを癒すにもいい。バランスのとれた味で飽きがこないだろう。

IMG_2026_mid_640_480

このビールは米ユタ州のスーパーで買って飲んだ。特価セールで6本が5ドル99セントだった。アメリカはビールが安い。日本では酒税が高いこともあるが、酒税の高さを割り引いてもアメリカのビールは安い。

IMG_2020_mid_640_480

IMG_2025_mid_640_480

IMG_2021_mid_640_480

このビールは結局6本全部を飲み干すことなく日本に帰ることになった。飛行機で瓶ビールを持ち帰る訳にはいかず、残念ながらレンタカーの返却時に処分することになった。また、いつか、このビールに出会う機会があるのだろうか。そのときを楽しみに待っていたい。

Written by Yoshio Matsumoto

2013年12月10日 at 12:00 AM