ぽにょろん

思いついたこととメモ

Firebirdのシステムデータにアクセスしたい場合

DBを扱うプログラムを書く際に、テーブルやカラム、インデックスやトリガー等の一覧を取得したい場合がありませんか?
何かと検索しているので、Firebirdの場合をメモしておきます。

目次

環境

Firebird Embedded 2.5.4
FirebirdSql.Data.FirebirdClient 4.10.0.0
C#

.NET Provider使う場合

FirebirdSql.Data.FirebirdClient使える場合は、非常に簡単です。
GetSchemaしましょう。

f:id:kowill:20160307181701p:plain:w500

テーブル一覧が必要であれば、

using (var con = new FbConnection(接続文字列))
using (var command = con.CreateCommand())
{
    con.Open();
    con.GetSchema("Tables");
}

とすれば、
f:id:kowill:20160307181820p:plain:w500
みたいに取れます。

引数を追加してあげれば、

con.GetSchema("Tables", new[] { null, null, null, "TABLE" });

f:id:kowill:20160307182401p:plain:w500
ユーザーテーブル一覧を取得できます。
制限しない場合は、System Tables(RDB$xxx)とかMonitoring Tables(MON$xxx)とかViewとかもれなくついてきます。

スキーマの引数一覧

そんな便利なものは見つけてません。(ノ゚ω゚)ノ*
あきらめてソースコードから引っ張りましょう。

FirebirdSql.Data.FirebirdClient/Provider/src/FirebirdSql.Data.FirebirdClient/Schema at master · cincuranet/FirebirdSql.Data.FirebirdClient · GitHub

大抵のケースで、
* restrictions [0] : TABLE_CATALOG
* restrictions [1] : TABLE_SCHEMA
* restrictions [2] : TABLE_NAME
* それ以降、個別
となっているっぽいです。
(※上記、new[] { null, null, null, "TABLE" }の部分。)

SQLを自力で書く場合

Referenceとにらめっこしましょう。

Appendix D: System Tables

.NET Providerのソースコードから、必要なSQLの参考にするのもありかなと思います。

テーブル一覧

select rdb$relation_name AS Name  
 from rdb$relations  
 where rdb$relation_type = 0 and rdb$system_flag = 0  
 order by rdb$relation_name asc

列の一覧取る際に、型名,PK,FK等の付属情報つけようとすると、SQLが複雑になって、めんどかったです。
ほかのRDBも似たような感じなんだろうか。。

Nano Server 試してみた。(Windows Server 2016 TP4)

以前からちょこちょこっと試してはいたのですが、先日のComCampで刺激を受けたこともあり、手順を残しておきます。

目次

NanoServerとは

プライベートクラウドやデータセンターでホストするのに最適化された、リモート管理OS」らしいです。

Getting Started with Nano Server

個人的な目的

「簡単に立てたり捨てたりできる、軽いIISHyper-Vに乗っけたい」というのが動機だったりします。

事前準備

Windows Server 2016 Technical Preview 4 のISOを取得してきます。
ちなみにEnglish版です。
Japanese版でもやってみたんですが、文字化けしました。
フォントなのか、なんなのか。

ISOをマウントして、必要なファイルを適当なフォルダに突っ込んでおきます。

gist.github.com

unatteend.xmlはISOにないので、こちらは必要に応じて事前に適当に作っておきます。

gist.github.com

作成

やることは、以下のような内容です。
1. Hyper-V仮想マシン用にNanoServerのWIMをVHDXに変換。
2. DISMでVHDXをカスタマイズ。
3. Hyper-V仮想マシン作成して、そこへVHDXを追加。

下記のようなスクリプトを管理者権限で実行して、

gist.github.com

f:id:kowill:20160304133428p:plain:w500

仮想マシン立ち上げると下記のような感じになると。
f:id:kowill:20160304133432p:plain:w300f:id:kowill:20160304133438p:plain:w300

上記の例だとIISのPackage入れてなかったりしますが、目的は一応達成。

困ったこと

きちんと理解してないのが原因ですが、dismなのかPowerShellなのか構築スクリプトがたまにエラーで落ちます。
あれこれしているうちに解決してしまうので、深追いしてません。(すいません
まだ、Technical Previewなので色々変わる可能性もありますが、とりあえずやってみたという感じです。

以下のサイトを参考にさせていただいたので、試す方はそちらをどうぞ。

山市良のえぬなんとかわーるど: 山市良版 Getting Started with Nano Server

それと公式ページも。

Getting Started with Nano Server

Tokyo ComCamp 2016 powered by MVPsに参加してきた

2月20日にTokyo ComCamp 2016 powered by MVPsに参加してきました。
全体的にAzureなセッションが多かったかなと。
東京以外の会場でも面白そうなセッションがあったので、配信を見るという手もあったかな。
天気悪かったせいか、会場は結構空いてましたね。

connpass.com

目次

セッション1: デザイン(設計)にまつわるフォース

尾上さん(@ugaya40)のセッション。 資料は現時点(2/22)で公開されていませんが、とても勉強になりました。
これを聞くために参加したみたいなものですし(笑)

  • デザインとはコンテキストにおけるフォースを調和させること。
    • コンテキスト:デザイン大賞が取り巻く世界
    • フォース:デザインが満たすべき要求
  • 複数のフォールを解決するデザインは困難
    • 品質特性同士の衝突
    • 全体の利益と個人の利益の調整
  • ゼロベースでは答えに到達できない。
    • 必ず既存の形をベースにせざるをえない。
    • 既存の形が適合していないフォースを見つけ、調整していく。
  • パターンの適用は「より全体にかかわるもの」から「局所にかかわるもの」
    • パターンについては、どんなフォース間を調整しようとしているのか。それが大事。

なるほど、難しい。という感じだったので、資料公開されたらもう一度読むしかない。

セッション2: そろそろ(おまえらの)DevOpsについて一言いっておくか

竹林さん(@changeworlds)のセッション。
ブログに記事が上がってました。

changesworlds.com

私の場合はセッション1で、牛尾 剛のお話を残念ながら聞かなったので、DevOpsとはどんなもんかと参加。
尾上さんのセッションでは、個人的にはDevOpsというワードに違和感とのお話もあったのですが(笑)
- 全体像を理解するためには原典に当たろう
- 英語も頑張ろう
- 企業においては、ビジネスを実現させることが目的のはず。
- ビジネスには変更が求められている
- 変更のRiskを現象させるためのDevOpsでは??
- なぜやるのか(why)が無い場合、自己満足に陥ることもしばしば
- whyから始めよう
- とくかく実践あるのみ
- 知識の段階:知る、わかる、できる
- 失敗しないと成長しない。そのためにも挑戦を。

セッション3: Windows コンテナ 始動

樋口さんのセッション。
最近、ちょこちょこNanoServerとか触ってたので、試しに聞きに行ってきた。
- InvokeVというHyper-VのコミュニティにFBにあるらしい。そこに資料も上がるそうな。
- ContainerとはOSが透過的に見る
- Windows Server Container : Server Core Base
- Hyper-V Container : Nano Server Base
- 後は細かいコンテナの話とデモ。

まだまだ新しい話&開発中の話なので、今後に期待ということで。
以前の資料が大体同じっぽいので、Link張っておこう。

engineer-support.gmo.jp

セッション4: DBA から開発者への情報提供

小澤さん(@Masayuki_Ozawa)のセッション。
SQL Databaseを例にデモしながら解説。

  • SQL Serverシリーズでは、SQL経由でほとんどの情報取得できるし、色々見ようぜ。

最後に

会場だったgloopsさん、おしゃれなオフィスでした。
結局Azure関連のセッションは聞くことなく、全体のトレンドに乗れないままの参加となりました。
とはいえ、こういう勉強会に来ないとなかなか触れないような話題も聞けて良かったです。
まずは自分の目の前で放置している諸々から手を付けていかねば(笑)
いずれは自分もフィードバックできる側に立てるといいなぁと思いつつ。。

WebRTC Conference Japan に参加してきた

WebRTCについては、ネットでちらっと調べたことあるくらいなもので使った経験もないまま参加してきました。

CodeIQさんの↓これで入場チケット頂いたというのがきっかけですね。

codeiq.jp

感想

特に1日目に関してはとにかく英語!英語!英語!って打ちのめされました。
同時通訳もあったわけですが、資料:英語、スピーカー:英語、同時通訳:遅延して日本語という状態では余計混乱する次第で(笑)
これは完全に実力不足なので、精進します。。

内容については、素敵なまとめをしてくださってるブログで確認した方がよいかと。

lealog.hateblo.jp

lealog.hateblo.jp

特別対談: WebRTCが切り拓く2020年のIoT

色々と印象的だったので、個別にメモ。
* Webの勢いがここ5年くらいで衰えていて、スマホに取られている
* PCについてはどんどんNativeからWebにサービスが移行している
* スマホはWebからNativeにどんどん移行している
* Internetの利点の一つはArchive
* 面白いのは、ニコ生のようにリアルタイム性に価値があるコンテンツがある。(コメント機能がそれを誘導しているともいえる)
* SMSでのコミュニケーションの在り方が、どんどんリアルタイムになっている。(非同期→同期へ)
* テレイグジスタンスはもっと流行って良い
* エンジニアはとにかく攻殻機動隊を読め!

終わりに

2日目はDev向けにずっといたのですが、1日目は理論寄り、2日目は応用寄りでとてもバランスが良かったです。
普段のフィールドとは違う分野でしたが、根っこの部分はそうそう変わらないなとも。

ただ質問できるだけの知識や経験をもって参加するともっとよかったなと思いました。
※そのためにはなにか作らねば(;^_^

2015年の振り返り

良い機会なので今年を振り返っておきます。

目次

ブログ始めました

一念発起して、ブログ始めてみました。
最初の頃は何とか更新していたのですが、年末に向かうにしたがって更新をサボってしまった(笑)

ただ、仕事やプライベートでやったことを纏めるのに改めて調べ直したり、サンプル書いたりして
かなり勉強になりました。

仕事

暗黒の炎上プロジェクトを続けたせいで、色々と消耗した一年でした。
得るものが少なく残業代を稼ぐだけの仕事でしたが、なんとかリリースできてよかったです。

退職します

というわけで、2015年12月31日付で現職を退職します。
来年からは取りあえず無職ということになりますが、人生頑張ります。

来年

メモだけでなくて、勉強会の参加レポやその他についても記事書いていけたらなと思っています。
少し(??)ゆっくりしたら再就職活動頑張ります。