SQLの比較条件にスペースを入れたとき

最近、久方ぶりにがっつりとSQLを書いていたりするのですが、いろいろと忘れているというか、細かい仕様を理解しきれていないというか^^;

今日も一通り書き終えて動作確認もし、最後にもう一度だけコードを確認しておくかーと見直してみていると、一致しないはずのデータが取得できていることに気が付いてしまいました・・。

テーブルに格納された値は前後のスペースを除いたきれいな状態。それに対して検索をかけるときの条件には余分なスペースが残ったまま、こんな感じ。

ID NAME
1 ahiru_sp

SELECT ID FROM USERS WHERE NAME = 'ahiru_sp△'

これ、文字列として一致しないと思っていたのですが、調べてみると後ろの空白は無視されるとのこと。

比較検索条件 - TechNet.aspx)

比較では後続の空白は無視されます。たとえば、以下はすべて同じです。

WHERE LastName = 'White' WHERE LastName = 'White ' WHERE LastName = 'White' + SPACE(1)

なるほどそうだったのか。という感じで、また一つ賢く(?)なりました。

SQL Server 2014 にサンプルデータを投入してみた

久しぶりにSQLServerを使う機会を得たので、もろもろ復習するためにローカルにセットアップしてみました。

しかし、最初にインストーラをDLするところから躓き、お任せで簡単ぽんな感じではなかったので、やったことをメモしておこうと思います。

SQL ServerとManagement Studioをインストールする

#ダウンロード画面から既に迷子です(^^;

x86とx64は分かるのですが、思ったよりも選択肢が多くて迷いました・・。

とりあえず(64ビット環境で)、最小限で試すのに必要なのは、以下の2つだと思います。

  • Express 64BIT\SQLEXPR_x64_JPN.exe
  • MgmtStudio 64BIT\SQLManagementStudio_x64_JPN.exe

セットアップは基本的にそのまま「次へ」を連打してで構わないかと。

ちなみに、Management StudioのインストーラSQLServerと余りにそっくりな画面構成(というか文言が酷似し過ぎw)だったので2度見しましたが、選択できる機能は管理ツールだけだったので間違いはなさそうです。

サンプルデータを投入する

さすが、きよくら先生。即答でした!

で、ここまでは順調?だったのですが、ここからが少し面倒というか、最新の情報に対応しているまとまった情報がなくてかなり迷子になりました・・。

結論として、2012までであれば上記のサイトから、.msiをダウンロードして簡単にセットアップできるようですが、2014用のサンプルデータは手動で投入する必要があるようです。

私は最初、適当に(一番新しそうな)2008用のデータをセットアップしたのですが、データベースが追加されず??となりました・・。

2014用データのダウンロードはこの辺りから → Adventure Works 2014 Sample Databases - CodePlex

セットアップの手順は(日本語なら)ここのT-SQLを参考にすれば可能 → インメモリ OLTP を実証する AdventureWorks の拡張 - MSDN

一応、CodePlexの方にも手順書の.docxがありますが、MSDNの方がシンプルだったので私はそっちを参考にしました(違いは調べていない)

そのうち.msiが提供されそうな気もしますが、とりあえずまとめておくことで何かしら役に立つのではないかと思って書きだしてみました。

Visual Studio Community 2015 RC で困ったこと

ユニバーサルアプリの開発でエラーになる

プロジェクトのサブタイプがありません。

セットアップ時に標準的な構成を選択したつもりでしたが、後で確認してみると、チェックが外れていてインストールされていない機能がいくつかありました。

手動で追加すればなんとかなりそうだったので、以下のような手順でやってみました。

  • コントロールパネルから、"プログラムと機能"を選択。
  • "Visual Studio Community 2015 RC" を選択し、「変更」を実行する。
  • "ユニバーサルWindwos アプリ開発ツール"にチェックを入れてセットアップする。

新規PJのテンプレートにユニバーサルアプリがあったので、もしかすると「修復」でも症状が治ったのかもしれませんが、とりあえず私の環境では動くようになりました。

Enable Developer Mode for Windows 10 ← できない・・

ネットで情報を漁った感じ、設定の "Update & security" から "For developers" の画面で変更できそうな雰囲気なのですが、何度選択してもウィンドウが勝手に閉じて落ちました・・。

どうやら 既知の問題 っぽいので、この辺↓を参考にグループポリシーを弄ったりしました。

Enable your device for development - MSDN

  • Use gpedit to enable your device
  • Use regedit to enable your device
  • Use PowerShell to enable your device

私はよく分からずに全部試したのですが、やってる事を見るとどれか一つで良かったような・・。 (少なくともレジストリエディタの手順と、PSの処理は同じ気がします。グループポリシーは必要なのかな?)

恐らく近日中には修正されるでしょうが、嵌ると面倒なので備忘録程度ですが書きだしておきます。

.NET Micro frameworkに入門してきた

4/22に開催された IoT Kitハンズオンセミナー@広島 に参加してきました。参加者は10名。お仕事で参加されている風な人も居ましたが、学生さんも交じっていたりで、割と層がばらばらな印象でした。

以下、覚え書き

事前にある程度までセットアップされているお蔭もあるだろうけど、USB接続してVisualStudioでデバックが簡単にできるのは凄くいいなーと。

ひとまずは一通りの手順を流すことができて、自分の中の障壁が少し下がったのが一番の収穫です。

今回はマイクロフレームワーク自体の解説はなかったので、コードを書くには自分で色々と調査が必要だろうけど、先日買ったラズベリーパイも含めて、いろいろと遊べそうです。

RaspberryPi2 + Mono でブザーをならし・・たかった

LEDを光らせることができたので、次はブザーに挑戦。

キットの回路図を見ながら配線し、お手本通りに音が出るのを確認できたので、先日と同じようにmonoでプログラムを書くことにしました。

が、LEDと同じ最小限の制御(ON/OFF)ならば同じコードで実現できるものの、音の高さを変えるのに周波数の制御をしたくてもそれっぽいメソッドが見つからない。。

一通りコードを読んでみたり、ググったりしながら解決方法を探しましたが見つかりませんでした。

で、原点に立ち戻って(?)Readmeを眺めていたところ、そもそも現時点では未対応のご様子・・。

Support for extended I/O (such as SDI, or PWM for motor control) is planned for future releases.

一旦、後回しにして対応されたら試してみたいと思います。

RaspberryPi2 + Mono でLEDチカチカしてみた

時間があるうちにやっておこう、というわけで、ラズベリーパイ本来の使い方というか、電子工作にチャレンジしてみようとキットを購入。 付属のチュートリアルを少し流して雰囲気は分かった(気がする)ので、プログラムから制御してみようと思います。

と、言っても、既に先人によってキレイにまとめられているので、それらを参考にしながらやってみただけですが^^;

Raspberry Pi 2 + Mono 3.12.0 + Raspberry# IO で GPIO を使ったアプリケーションを書いてみる - しばやん雑記

ライブラリは raspberry-sharp-io - GitHub を使用し、サンプルコードは この辺 を参考にしました。

まず、おもむろにVisualStudio2013を開き、コンソールアプリケーションのプロジェクトを作成。Nugetで "Raspberry.IO.GeneralPurpose" をインストールしておきます。

コードはサンプルそのままなので、こんな感じで。

using System;
using Raspberry.IO.GeneralPurpose;

namespace Gpio.SwitchLed
{
  class Program
  {
    static void Main(string[] args)
    {
      var led1 = ConnectorPin.P1Pin07.Output();
      var connection = new GpioConnection(led1);
 
      for (int i = 0; i < 100; i++)
      {
        connection.Toggle(led1);
        System.Threading.Thread.Sleep(250);
      }
      connection.Close();
    }
  }
}

少し迷ったのが、ピンの番号とコード中で指定する ConnectorPin の対応。手元ではGPIO04に繋いでいたのですが、なぜか04番が定義されていないという・・・。ドキュメントをよくよく読んでみると、列挙子で定義されている名前は ココ の PinNumber に対応していそうです。今回だと、GPIO04=P1-07になります(多分)

コードが書けたらビルドします。今回はWindowsに依存する部分がないので、とりあえずそのままVS2013でビルドし、出来上がったバイナリ(実行ファイル+関連DLL)をラズベリーパイへ配置してもOKそう。

コピーしたらラズベリーパイのコンソールから実行してみます。

$ mono ./Gpio.SwitchLed.exe

Unhandled Exception:
Raspberry.IO.Interop.MemoryMapFailedException: Exception of type 'Raspberry.IO.Interop.MemoryMapFailedException' was thrown.
  at Raspberry.IO.Interop.MemoryMap.ThrowOnError[MemoryMapFailedException] (IntPtr result) [0x00000] in <filename unknown>:0 
 (中略)
  at Gpio.SwitchLed.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

Oh...

c# mono raspberry pi GPIO with Raspberry# getting Operation is not valid - Stack Overflow

Execute your Mono program as root. /dev/mem is not accessible to normal users.

あー、そういうことか。。

$ sudo mono 
./Gpio.SwitchLed.exe

これでちゃんとチカチカしてくれました\(^-^)/

RaspberryPiにUSBモニタを接続する2

無限ループが解消できず、仕方なくイメージを作り直したわけですが、ふと、カーネル差し替えずに接続したらどうなるのだろう?と気になってやってみました。

初期設定を終え、何気なくUSBモニタを挿して起動してみると、ん?モニタとして認識してる??あれ?

そこで、おもむろに /etc/X11/xorg.conf を作成してから startx してみると・・・表示されています。カーネルを差し替えてもいないのにorz

結論.ラズパイ2を最新の状態で使えば、特に難しいことをしなくてもUSBモニタ出力が可能(っぽい)