布団が俺を呼んでいる

丘山大一のぶろぐ

FAManagementStudio なるものを作ってもらっています

お手軽に使える Firebird Embedded 用のGUIツールがなかったため、「欲すいよー」と言っていたら作ってくれました。

色々

FlameRobin なんか使いにくくね?
インストーラー不要で、配置するだけで使えるのがEmbedded の強みなのに、GUIツールが要インストールって不便じゃね?
と駄々を捏ねていたら開発が始まったというシロモノです。

詳細はwiki or メイン開発メンバが色々書いています。

ちなみに

動作確認や、仕様の検討、ドキュメント整備なんかはやっているのですが、ソースはほとんどいじっていません。
あと、宣伝しようしようと思っていてすっかり忘れていたのは秘密。
一応、ブログのサイドメニューにリンクを貼って置いたからこれで許してもらおうという計画。


GitHub実践入門 ~Pull Requestによる開発の変革 (WEB DB PRESS plus)

新品価格
¥2,786から
(2016/8/16 22:01時点)

NuAns NEO Anniversary Update配信 遅れる模様

ぐぼあ(吐血)

まあ配信されてから問題が起きても困るしね。
きちんとテストされているということが分かって何より。

続報

9月の定例アップデートのタイミングになるみたいですね。


佐渡島旅行へ行ってきました

ボッチは一人旅上等。
そして佐渡島の人たちはめっちゃ親切

1日目:佐渡 ~ニッポニア・ニッポン~

大宮経由で、新幹線でゴトゴト。
新潟港から両津港までカーフェリーで移動します。
カーフェリーは2等なら事前予約無しで乗れます。時期にもよると思いますが、椅子に座ることもできました。
船にカモメがついてくる様子は見ているだけでも楽しいものです。


佐渡島に着いたら、速攻でレンタサイクルを借ります。到着した観光案内所で借りられます。
これも時期によると思いますが、幸いにも借りることができました。また、24時間レンタルとしたので、担当者様のご厚意により、バッテリー(一つにつき約4時間)を二つお借りしました。
ここまでで、おおむね3時半。トキを見るためには、自転車で1時間弱移動しなくてはなりません。
さっそく移動して、さっそく迷子になり、田んぼの中を爆走してなんとか着きました。
※私はどこに行っても、高確率で迷子になります。

トキの森公園には、明確な駐輪場がありませんでしたので、施設の方に聞いて公園の片隅に停めさせて頂きました。
そしてトキ。


学名ではニッポニア・ニッポンというらしいです。めっちゃ日本日本してる名前ですね。

その後、港でお勧めされたソフトクリームを食べて小休止。
体力を快復させてから、本日の宿「宿屋ふくろう」に向けて爆走します。
島の真ん中を��断する大きい通りを使ったほうが確実でしたが、田んぼの中の道を通った方が交通量が少ない+道が広い+気持ちいいのでそちらへ。
時折農作業していらっしゃる現地の方々に挨拶しながら、「宿屋ふくろう」に到着しました。
※幸い、ここでは迷子にならなかった

部屋にはふくろうがいました。(鍵かけ)


もうヘロヘロでしたが、折角なので近所をちょろっと回り、それから泥のように眠りにつきました。

2日目:佐渡 ~金山・そして流血へ~

ケツが痛い。
とりあえずケツが痛い。
そんな痛みに耐えつつ、宿で道の様子を聞いた後に自転車でGO。

素晴らしい青空と青い海。

こういう素晴らしい景色を見ていると本当に思います。

なんで俺は日々ビルに閉じ込められて、PCの前でカタカタやってるんだろう?

いやまあ、お金のためですけど。

しばらく海沿いを走り、その後山道を爆走(電動自転車全開)。
ひいこら いいながら佐渡金山へ。


……佐渡金山デケー!
さすがに圧巻でした。トロッコや、かつて使用されていた道具の展示もあり、昔の人の苦労が忍ばれます。
同時に男の子心をくすぐってくれます。
佐渡金山見学の注意点として、鉱山の中は概ね摂氏10度前後と寒いこと。
バスで来た観光客は長袖を羽織れば「涼しい」と感じるくらいなのでOKですが、自転車で来た人は、汗が冷えて風邪をひく可能性があります。
長袖+汗ぬぐい用のタオルは忘れずに。

さて、再び旅へ。
金山でちょっとゆっくりした後は、再び海沿いを走ります。
景色を堪能しながら、夫婦岩へ。
夕焼けがきれいらしいのですが、あいにく時間的な余裕がないので見られませんでした。


ここでラストスパートの体力を養うべく大休止……だったのですが……

……ここで悲劇が起きました……

荷物の中にあったカミソリ(髭剃り用)で、小指をズバッとやってしまいました……

結構血がドバドバ出てしまい、自力で止血できず。
手が血まみれに。
10秒で無理だ、こいつぁやばいぜ、ということで手当たり次第に助けを求めることに。
おばさま、おじさま方に助けをいただき、ガーゼで止血、指の根本を縛り、タオルで手首を縛り、心臓より高い位置に傷口が持っていくようにしてしばらく休憩。

……といっても、自転車を返す時間とフェリーの時間があるので、あまり長くは休めません。

特に、片手が使いにくくなる = 自転車のブレーキのタイミングが遅れる というのは、坂が多い佐渡島では大変危険です。
ここまで、おおよそ時速12キロで移動しましたが、その速度が維持できなくなるのは明白であり、この後の距離を考えると、少しずつでも進まなくてはまずい、という結論に達しました。
そのため、お礼を伝えてから、旅を再開。
「あー、が流れてるなー」という感覚を味わいながらの移動です(汗)。
おまけに海沿いは日陰が少なく、あっという間に熱中症に。
……汗+流血で体中の水分がガンガン減りながら、という状態でしたので仕方ない。
それでもなんとかかんとか、両津港まで戻れました。
本当は近くをウロチョロ見て回りたかったのですが、諦めました(泣)
体調を整えておかないと船酔いしますからね……

本土への帰りは夜のフェリー。
夜間に船に乗るのは初めてです。とりあえず、灯台の光が思った以上に遠くから見えることに驚愕。

ここには書ききれませんが、上記夫婦岩ドライブインの方々をはじめ、佐渡島の人たちは非常に親切な方が多かったです。
色々教えてくれますし、非常事態になったら助けてくれる。
ありがたやありがたや。
旅が無事(かどうかは微妙ですがw)に終わったのも、島民の皆様のおかげです。

3日目:新潟 ~そして帰宅~

新潟は、特に何もなかった。



るるぶ新潟 佐渡'17 (国内シリーズ)

新品価格
¥907から
(2016/8/9 20:52時点)

Firebird のお勉強 計算時の小数点以下の有効範囲

SQL上で計算した時の結果がどうにも理解できなくてはまりました。
しかし、同じことを考える人はいるもので。結論はStack overflow に出ています。

以下、ちょっと解説。

計算時の有効桁数具体例
Firebird の 計算時の小数点以下の有効桁数は、「計算に使用した型が持つ有効範囲」を足し合わせたものになります。
……と、こう書いても意味不明なので具体例。

SELECT cast (1/999999999999 AS numeric(18,13)) FROM HOGE;
SELECT cast (1.000000000000/999999999999 AS numeric(18,13)) FROM HOGE;
SELECT cast (1.000000/999999999999.000000 AS numeric(18,13)) FROM HOGE;
SELECT cast (1E0/999999999999 AS numeric(18,13)) FROM HOGE;

結果は、
0.0000000000000
0.0000000000010
0.0000000000010
0.0000000000010
となります。

1つ目は、分子・分母両方とも小数点以下が存在しません。そのため、計算時の有効桁数は「0 + 0 = 0」です。有効桁数が足りないので、結果表示時にnumeric(18,13)を指定しても、結果は「0.0000000000000」となります。
2つ目は、分子に小数点以下の桁数が存在しています。そのため、計算時の有効桁数は「12 + 0 = 12」です。
3つ目は、分子・分母両方に小数点以下が存在します。そのため、計算時の有効桁数は「6 + 6 = 12」です。
4つ目は、分子に「小数点以下を表示するための記号」である「E0」が指定されているため、計算時の有効桁数はdouble 型となるようです。

テーブルで確認してみる

簡単なテーブルを作成してみます。

CREATE TABLE HOGE(
    KEY_NO integer,
    VALUE_INT integer,
    VALUE_NUMERIC_SHORT numeric(18,1),
    VALUE_NUMERIC_LOMG numeric(18,13)
);
INSERT INTO HOGE VALUES(1,1,99999,99999);
SELECT cast (VALUE_INT /VALUE_NUMERIC_SHORT AS numeric(18,13)) FROM HOGE where KEY_NO = 1;
SELECT cast (VALUE_INT /VALUE_NUMERIC_LOMG AS numeric(18,13)) FROM HOGE where KEY_NO = 1;

結果はこうなります。
0.0000000000000
0.0000100001000

理屈は上記と一緒ですね。

無理矢理計算するなら、さらにCASTをかませるという手もなくはありません。

SELECT cast (VALUE_INT / (cast (VALUE_NUMERIC_SHORT AS numeric(18,13))) AS numeric(18,13)) FROM HOGE
where KEY_NO = 1;

こうすれば、
0.0000100001000
となります。


達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)

新品価格
¥2,592から
(2016/8/14 21:47時点)

Windows Phone (Windows Mobile) Windows Update 後の再起動ににかかる時間(10.0.10586.545)

バタバタしているので、ちょっと更新のタイミングをずらしました。

今回はこんな感じ

いつものごとく、アップデートファイルのダウンロードや更新自体は完了しているので、再起動にかかる時間だけです。
画面上に歯車が出てきてクルクル回るのが10分弱。
ロゴが表示され続ける時間が1分強。
プログレスバーが5分。
大きく上記3ステップ、合計15分強で更新が完了しました。
更新にかかる時間を計測し続けていますが、デスクトップと違って安定していますね。

状況によって時間は大きく前後すると予想されますので、目安の一つとして。


バージョン

端末はNuAns Neoです。
本日時点の各バージョンは、
バージョン:1511
OSビルド:10.0.10586.545
ファームウェアリビジョン番号:1028.020.001.79
ハードウェアリビジョン番号:1.0
無線ハードウェアバージョン:1.0
チップSOCバージョン:8952

Anniversary Update はもうちょっと先みたい

正確なことはよくわかっていませんが、もうちょっと先になるみたいですね。



VRでB規格サイズの紙が無くなるのではないかと想像する

想像というか妄想シリーズ。
kindle unlimitedも開始されました。

VR上で、「紙」の規格が統一されるのではないか?

先に「本」の規格が統一されるのではないか? というエントリを書きましたが、当然その前に「紙」の規格ができるはずです。
なぜなら、複数の紙が重なった本を表現するよりも、単一の紙を表現する方が簡単だからです。
フツーに考えて、簡単な規格から模索・策定されるでしょう。
さて、その時どの紙から規格化されるのか、と考えたとき、もっともA規格だと思われます。
国際標準規格らしいですし、実物の紙をトレースするならまずこれをベースにするでしょう。
で、おそらく、拡大・縮小表示するにしても、「A規格サイズをベースに」拡大・縮小するようになるのではないかと想像するわけです。
そうすると、「現物の紙を取り込んでVRで見る」あるいは「VRのデータを紙で出力する」ということをすることになった場合、「A規格サイズ」とくにA4をベースにアプリケーションが開発されるのではないでしょうか。
そうなってくると、データのやり取りが「A4サイズデータでくれ」みたいになる気がします。
逆に、なんぼ日本人になじみがあろうとも、世界的にマイナーな「B5」なんてサイズをベースにするメリットは小さいです。いや、むしろネックになりかねません。
VRによって駆逐された最初のものは、まさかの紙の規格であった……なーんてことになるかと想像しました。


そして最終的には

さらに、「VR上ではA4サイズで表示する」みたいな規格が世界なんちゃら組織とかで決定し、
さらにその後、さながらWeb業界のXMLとJSONのごとく全く別の規格がデファクトスタンダードになっちゃうことまで想像した。



コクヨ PPC用紙 共用紙 FSC認証 64G B5 500枚 KB-35N

新品価格
¥402から
(2016/4/20 22:45時点)

Firebird のお勉強 外部参照キーを一時的に取り外したい

う~ん、知識不足が原因の大半なわけですが。
Firebird、システムテーブルの構造がイマイチピンとこない。

背景

外部参照キーがあると、外部から適当にデータを流し込むときに邪魔になることがあります。
「外部参照キーを考慮して流し込めよ」と言われれば、そりゃそうなのですが、まあ邪魔なんです。

ISQL.exeを利用して、外部参照キーを取得する

データベースにConncet して、
SHOW TABLE ほげほげTable;
でとれます。

SQLでは?

えらく難しい。
丸一日ほどなやんでいましたが、最終的にこちらを参考にしました。
まとめてとるならこんな感じになるらしい。

select 
 PK.RDB$RELATION_NAME as PKTABLE_NAME
,ISP.RDB$FIELD_NAME as PKCOLUMN_NAME
,FK.RDB$RELATION_NAME as FKTABLE_NAME
,ISF.RDB$FIELD_NAME as FKCOLUMN_NAME
,(ISP.RDB$FIELD_POSITION + 1) as KEY_SEQ
,PK.RDB$CONSTRAINT_NAME as PK_NAME
,FK.RDB$CONSTRAINT_NAME as FK_NAME
from
 RDB$RELATION_CONSTRAINTS PK
,RDB$RELATION_CONSTRAINTS FK
,RDB$REF_CONSTRAINTS RC
,RDB$INDEX_SEGMENTS ISP
,RDB$INDEX_SEGMENTS ISF
WHERE  
 FK.RDB$CONSTRAINT_NAME = RC.RDB$CONSTRAINT_NAME 
and PK.RDB$CONSTRAINT_NAME = RC.RDB$CONST_NAME_UQ 
and ISP.RDB$INDEX_NAME = PK.RDB$INDEX_NAME 
and ISF.RDB$INDEX_NAME = FK.RDB$INDEX_NAME 
and ISP.RDB$FIELD_POSITION = ISF.RDB$FIELD_POSITION 
order by 1, 5 

FKTABLE_NAME が外部参照しているテーブルで、参照先がPK_TABLE_NAME になります。
あとはSELECT結果をもとに、外部キーを外したりつけたり。

外す
ALTER TABLE  ほげほげテーブル DROP CONSTRAINT INTEG_ほげほげ;

つける
ALTER TABLE ほげほげテーブル
ADD FOREIGN KEY (col1, col2)
REFERENCES ほげほげ参照先テーブル(colA, colB)

外すだけなら

こちらも参考にできそうです。
SQLというよりスクリプトですかね。



Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

ポケモンごぉ~

流行っているらしいですね。

Windows 10 Mobile 日本ストアでさっそく検索してみましょう




おや、おかしいですね。
なんかGoぽさを感じない検索結果ですが。
ありていにいって見つからないのですが。
噂によると、世界的に非常に大ヒット、あまりにヒットしすぎて悪質なアプリが出回っているという話。
しかし、それらしいものはちょっと見つかりません。
どういうわけでしょう。
不思議です。
実に不思議です。



ポケットモンスター ムーン

新品価格
¥4,398から
(2016/7/25 21:52時点)

Firebird のお勉強 BULK INSERTの使い方

よくわからなかった個所をお勉強。
あ、Embeded環境です。

使い方

TABLE1の定義はこんな感じ
KEY_ID VARCHAR(8),
NAME VARCHAR(20)

isql.exe
SET NAMES SJIS_0208;
Use CONNECT or CREATE DATABASE to spcify a database
SQL> CONNECT hoge.ftb
CON>user 'SYSDBA' password 'masterkey';
Database: hoge.ftb User: SYSDBA
SQL> SET BULK_INSERT INSERT INTO TABLE1 (?,?);
BULK> (0,0);
BULK> (01,'hoge');
BULK> ('001','hoge');
BULK>
SQL> Commit;

便利そうなところ

普通のINSERT 文では、「'」でくくらないと文字列として扱ってくれません。
そのため、
INSERT INTO TABLE1 (KEY_ID,NAME) VALUES (01,'hoge');
と放り込むと、「01」が「1」と解釈されます。
BULK INSERT では、「'」で囲わなくても、「01」と解釈してくれます。
このあたりは、ファイルから値を入れることを想定した動きのように思えます。

悩みどころ

SJIS_0208 で接続しているためでしょうか、Unicode で定義されていても、SJISで定義されていない文字をINSERT できません。
たとえば、「💛」などは、「?」となります。
ちなみに、普通のInsert文を投げると、「💛」でエラーとなります。
ファイルからデータを入れようと思うと、コレがネックになるおそれがあります。
※正しく入ってくれない + エラーで落ちてくれない のは検証がつらい
UTF-8で接続できれば殆ど解決すると思うのですが……できないのだろうか……。



Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)

Firebird のお勉強 FSQLの使い方

前回はISQL で、今回はFSQL の使い方。

FSQLって?

こちらで公開されている、ISQLの亜種みたいなツールです。
バグが解消されていたり、機能強化があるらしいです。

CSVインポート

CSV読込ってできないのかなー、と探していたらFSQLを見つけました。
というわけで、FSQL上でのCSV読込の構文をば。
IMPORT CSV FILE 'C:\FB\data.csv' 'INSERT INTO TABLE1(KEYNO,NAME) VALUES(?,?)';
これだけで、CSVファイルの中身を突っ込んでくれます。こりゃ便利。


ISQL にもバルクインサートがあります。
構文はこんなん。
SQL>SET BULK_INSERT INTO TABLE1 VALUES(?,?);
BULK>(1,'aa');
BULK>(2,'bb');
BULK>(3,'cc');
BULK>
こんな感じで使うらしいんですが、自分で操作していた時は思うように使えなかったのでちょっと保留中。

そしていまだに↓を買っていない。買えばいいのに、自分。


Firebird 徹底入門

新品価格
¥4,104から
(2016/7/14 23:43時点)