布団が俺を呼んでいる

丘山大一のぶろぐ

無線環境から有線環境へアクセスできない

原因はお粗末でしたが、結構ハマった。

環境としては下記のような状態です。
(他にもマシンが幾つかありますが、必要最低限のところだけ記しています)

無線マシン-------
                        |
                   ルータ ------WAN
                        |
有線マシン-------

発生した現象は、
・同じセグメントに存在する無線LAN接続のマシンから、有線LAN接続のマシンにpingが飛ばない。
・同じセグメントに存在する無線LAN接続のマシンから、有線LAN接続のマシンの共有が参照できない。
同じセグメントに存在する無線LAN接続のマシンから、有線LAN接続のホームグループに参加できない。
・同じセグメントに存在する無線LAN接続のマシンのネットワークの表示からは、有線LAN接続のマシンが見えている。
・ルータへのpingは飛ぶ
・Android無線機器からは有線LANマシンへ接続可能

ここから考えたのは、
・WANに接続できるということは、接続に格別おかしい点があるわけではない。
・ルータにはpingが飛ぶ。つまり、ルータがpingを直接止めている可能性は低い。(有線同士の疎通はもともと可能)
・Androidから接続できるということは、優先LANマシンが特別に弾いているという可能性は低い。

そして調べたのは、
・物理マシン側のウィルス対策の設定
・物理マシン側のホームグループの状態
・無線マシン側のネットワークの設定
 =>パブリックネットワークになっていたので、一応ホームグループに変更。
・無線マシン側のIPが、違うドメインに所属していないことを確認
・Windows10の機能でブロックされていないかどうか、手探りw で確認。
・再起動もしてみる
・ルータ側で無線接続の際に、ブロックしていないか念のため確認。

解決せず……。
ネットでも調べてみるが、有力な情報にヒットしない。

しかし、諦めてはいけない。
トラブルとブルースクリーンこそ、技術力を上げる絶好のチャンス。
落ち着いて考え直してみる。

他の接続、WANとの接続は成功している以上、PCの基本設定に問題はなさそう。
とすると、一番怪しいのはルータの設定。
ルータまでpingは飛び、そこから遮断されているということは、コイツが一番怪しい。
設定を上から順番に見てみる…………
う~~ん、ないな~~と思っていると気になる文字列が!

「プライマリSSID」
「セカンダリSSID」

あれ?
どっちに繋いでいるんだろう?
ネットワーク名を調べてみると……セカンダリであることが判明。
試しにプライマリに繋ぎなおしてみたところ、あっけなく繋がるようになりました。

根本的なところでコケてました……。

PA-WF1200HP【税込】 NEC 11ac対応 867+300Mbps 無線LANルータ(親機単体) AtermWF1200HP [PAWF1200HP]【返品種別A】【送料無料】【RCP】

価格:4,950円
(2015/9/20 17:04時点)
感想(50件)

リュックを買ったよ!

衝動買いとも言う。
買ってしまったのは下記。

どこでも座れるリュックPlus ≪サンコー≫ BAKPK2C4

価格:5,280円
(2015/9/21 17:18時点)
感想(0件)

実際に使ってみないといいか悪いか判断できないので、後でレビュー? してみる。

Windows Server 2012R2 で KB2919355の Updateに失敗する

またまた失敗談。
前回はWindows Server 2012R2 Update からスタートでしたが、今回はUpdate無しからのスタート。
初回のWindowsUpdateは成功しますが、KB2919355の適用で失敗します。

今回も人様の記事に助けて頂きました。感謝感謝です。
記事ではWIndows8.1ですが、Windows Server 2012R2 でも同様の対応で突破できます。

1.管理者権限cmdで
 dism /online /remove-package /packagename:Package_for_KB2919355~31bf3856ad364e35~amd64~~6.3.1.
 実行。
2.管理者権限cmdで
 dism /online /cleanup-image /startcomponentcleanup
 実行。
3.更新プログラムを手動ダウンロードしてくる。
 「ダウンロードするプログラムを選んでください」にはWindows8.1と書いてあるけど気にしない。
 Windows8.1-KB2919355-x64.msu を選択してダウンロード。
 ダウンロードし終えたらインストール。

なんかこれ、以前にもひっかかったような気がする……。

ひと目でわかるWindows Server 2012 R2 [ 天野司 ]

価格:2,808円
(2015/9/20 17:05時点)
感想(0件)

Windows Server 2012R2 で 初回のWindows Updateに失敗する

結構ハマってしまいました……。
初回のWindows Updateに失敗した後、再起動が終わらず、何もできなくなってしまいます。
調べていると、初めにひっかかるのがKBの当てる順番なんかが出てくるので、そちらにチャレンジしたり、アレコレしているうちに時間を喰ってしまいました。
助かりました、ありがとうございます。

OS(Windows Server 2012 R2 With Update)のインストール後、速攻でKB2975061をダウンロード、個別適用。
後はふつーに成功しました。


マイクロソフト Windows Server 2012 R2 Standard 日本語版 5 CAL付

価格:140,835円
(2015/9/20 17:01時点)
感想(1件)

SQL Server で、SQLの処理時間 簡易取得

ざっくり取得。

DECLARE @StartTime datetime
SET @StartTime = GETDATE()
--ここに処理を記述
SELECT CONVERT(varchar,GETDATE()-@StartTime,114) AS 実行時間

SQL Server の MDF,LDF を差し替える

SQL Serverが入っているマシンが壊れたけど、バックアップが無いよ!
という時に、壊れたマシンハードディスクからMDFファイルとLDFファイルだけなんとか引っこ抜いて、確認のために、自分の環境に復元、なんてことをすることがあります。
(え? ありませんか?)
この時、フツーにManagement Studioからアタッチできれば楽勝なのですが、他のアプリやらユーザやらの関係で、「環境作るの面倒だし、既存のMDFとLDFと差し替えて動かしたい」ということがちょいちょいあります。
基本的には、下記の手順で実行可能(だと思う)。

1.構成マネージャからインスタンスのサービスを停止。
2.MDF、LDFファイルを差し替える。

で、ここからが本題。
ファイルを預かる時は、
大概ネットワーク経由
かつマシンの状態がこちらと同一ではありません。
なので、プロパティからセキュリティを確認すると、うまく動かない設定になっていることがちょいちょい。
なのでファイルプロパティを最低限整えます。

3.「他のコンピューターから取得した~」のブロックを外す
4.必要な、あるいは足りないユーザ権限をくっつける
 やり方は、ファイルのプロパティ - セキュリティタブ - 編集 から、「ほげほげのアクセス許可」ダイアログを開く。
 「追加」ボタンからユーザをくっつける。
 「オブジェクトの種類」は、よく分からなければ全部チェック。
 「場所」は、状況によりけりですが、AD環境のユーザを追加するのでなければコンピュータ名を選べばだいたいOK。
 このとき、ユーザは一生懸命入力して探すよりも、「詳細設定」ボタンを開いて、「検索」から抽出する方が楽。
 というより、ここでは自分の環境に復元する=ローカルマシン登録されているユーザくらいなら、絞り込まなくても大丈夫という理屈。
 追加したら、あとはそのユーザに権限を付与。ローカルでちょいと動かすだけなら、何も考えずにフルコントロールを振っておく。
 個人的によく追加するのは、
(1) SQL Server のユーザ(SQL で始まっているヤツ)
(2) NETWORK SERVICE
 のふたつ。
5.構成マネージャからインスタンスのサービスを再開。

これで何事もなかったかのよーに差し替えが完了します。

多分ね!
(全然調べずに、経験則でやるというプログラマにあるまじき方法の紹介でした)

表示されている邪魔な「画面だけ」を消してみる

某所で常駐させろと言われているアプリの画面が、ぶっちゃけ死ぬほど邪魔なので、非表示にしてみた。
常駐させろ=プロセスは残っているんだから画面が非表示でもいいだろ、という理屈。
言語はC#です。
といってもメインなのはWindpwsAPIですけど。

//API用
[DllImport("user32.dll")]
private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
private const int SW_HIDE = 0;

private void ProcessHide() {
    Process[] allProcess = 
       Process.GetProcesses()
        .Where(m => (m.ProcessName == "HogeProcessName") && (m.MainWindowTitle == "HogeWindowTitle"))
        .ToArray();
    foreach (var item in allProcess) {
        ShowWindow(item.MainWindowHandle, SW_HIDE);
    }
}

コードを見ていただければ分かると思いますが、別にC#である必要は無いです。
まあそこはそれ、
書くの楽だし。

再表示のことは何も考慮していないので、再表示させる方法は別途用意してください。

インスタンス内に存在する複数のデータベースに同一のSQLを投げて結果を取得したい

インスタンス内に存在する複数のデータベースに同一のSQLを投げて、
SELECT結果を一挙に取得したいことが時々あります。
やり方をちょいちょい忘れるのでメモ。

USE master

/* 変数 */
DECLARE  @dbname varchar(80);
DECLARE @SQL nvarchar(256);
CREATE TABLE #RESULT_TABLE
(
DBNAME nvarchar(80)
,HOGE_COL char(50)
)

/* DB一覧を取得するカーソル */
DECLARE DbNameList CURSOR FOR
 SELECT NAME FROM sys.databases
 WHERE NAME LIKE 'HOGEDB%'

OPEN DbNameList

/* DB名を取得   */
FETCH NEXT FROM DbNameList INTO @dbname;

WHILE @@FETCH_STATUS = 0
 BEGIN

 /* 出力 SQLの中身は適当*/
 SET @SQL = 'INSERT INTO #RESULT_TABLE SELECT '  + '''' + @dbname + ''' AS DBNAME' + ' ,HOGE_COL FROM ' + @dbname + '.[dbo].' + 'HOGE_TABLE ;';
 EXECUTE sp_executesql @SQL

 /* 次の調査対象となるDB名を取得 */
 FETCH NEXT FROM DbNameList INTO @dbname;
END;

/* お片付け */
SELECT * FROM #RESULT_TABLE
CLOSE DbNameList;
DEALLOCATE DbNameList;
DROP TABLE #RESULT_TABLE

GO


もっと効率のいいやり方や、綺麗な書き方もあるでしょうが、個人的用途ではこれで十分。
本当はテーブル値変数を使うつもりでしたが、動的SQLではテーブル値変数がうまく使えない?
みたいなので、一時テーブルを使っています。
転がっていたSQL Server2008R2 で確認しています。

Microsoft FEST 2015 に参加してきました その2

土日は体調不良によりブログを更新できませんでしたが、最終日も参加してきました。

何よりの感想は「人多すぎ」ですw
通路は人で埋まるので、思うように移動できません。
さらに広い会場にするか、人数制限しないともう対応できないと思います。

さてセッションですが、「45 分でわかる! DevOps とマイクロソフトの技術」が面白かったです。
私はウォーターフォールモデルに絶望しているタチなので(もちろん、ウォーターフォールモデルにもいいところはありますが)、アジャイル、DevOpsといったことに挑戦してみたいなー、とは思っています。ただ理解が漠然としているのですよね。
でもこのセッションを聞いてなんとなく分かったような気がします。
配信されるかどうかは分かりませんが、もしされたらご視聴をおすすめします。

あとは「ビジネスで使うための、初めての Azure を使った動画配信詳細を見る」が面白かった。
自分は動画を取り扱ったことがないので、「何が」凄いのか理解しきれません。ですが、動画配信とは「動画の時間」「動画の質」「視聴者数」「ネットワーク」を意識するものなのだなあ、ということはわかりました。
そんなん当たり前だろ、と言われればそうなのでしょうが、でも全く知らない人間(私)にとっては、これらを一回で説明してくれたセッションは非常に有意義なものでした。
動画を一度配信してみて、苦労を体感してからまた聞き直してみたいなあ、と思います。
そうするとまた感想が変わってくるに違いない。

総合して、今回もためになるイベントでした。
今年はGoAzure, DeCode、Festと参加していますが、次の大型イベントも参加できるといいなあ。

Microsoft FEST 2015 に参加してきました

2,3日目参加予定です。

まずは本日参加の2日目から。

Expo含め、見ているとOFFICE365がかなりの勢力を占めていた印象です。
占め過ぎていて人の分散に成功していた感じすらありますが。
デバイスでは、初めてSurfaceHubを触りました。
実際に触って、利用例を見てみると結構面白い。
ただ、ちょっと微妙だな、と思うのはベースとなっているのがOneNoteであること。
OneNoteは連携機能や便利機能が多すぎて、「ただのホワイトボード」とでは無くなってしまっているんですよね。
あとお値段がどうしても張ります。
本体費用以外にも他のパーツも必要ですので。
使い方を本気で考えて、運用時に使用するアプリを探しておくか開発して具体性を強く持たせないと会社では買ってもらえないでしょう。

お土産ではタンブラーなんかを貰ったりしました。
無料で参加してお土産を貰えるとは思っていなかったので、これは予想外の嬉しさ(単純)。