布団が俺を呼んでいる

丘山大一のぶろぐ

サポート業務で「ありがとう」と言われてしまって反省する巻

プログラマ・エンジニアが外部から言われる「ありがとう」は嬉しいけど危険だって誰かが言ってた。


サポート業務にて

プログラマなので、主業務は電話です(アレ?)。
そんなわけで、その日も電話で、作っているアプリケーションについて質問に回答していました。
内容としては「なんでこんな表示になるの?」というもの。
ソコソコ複雑な内容だったため、定時以後、残業してポチポチと回答資料を作成しておりました。

そんでもって翌日。

「~ありがとうございました!感動して涙が出そうです。」
というメールを受け取りました。
おお、頑張った甲斐があったね!


違うぞ、頑張った結果じゃないぞこれは

いや、この「ありがとう」をそのまま受け取ってはいけない。
そもそも、回答資料が必要なくらい、分かりにくい表示になっていたのがいけなかった。
最初から分かりやすい表示になっていれば、問い合わせすらなかったはず。
問い合わせがきてしまったという事実は、ユーザの視点に立てていない、独りよがりの設計になっていた可能性があることを示している。
ここを間違えてはいけない。
プログラマ・エンジニアがサポートで受け取る「ありがとう」は「嬉しい」「悔しい」が両立する不思議な言葉。


感謝の言葉は嬉しいけれど、欲しいけれど

「ありがとう と言われるような仕事がしたい」ですが、
「ありがとう と言われる機会の回数は減らしたい」ですね。
でも、プログラマ・エンジニアは日ごろ 感謝される/褒められることが少ないので、「サポート業務でも ありがとう を言ってあげて!」とも言いたい。複雑。

でも、罵詈雑言は勘弁な!



「ありがとう」と言われる会社の心動かす物語

新品価格
¥1,620から
(2017/3/21 22:21時点)

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

定時過ぎに電話をかけてきて、残業を強制するスタイル、いいと思います(憤怒)。
とまあ仕事のグチはさておき。

今回はこんな感じ

アップデートファイルのダウンロードや更新自体は済。再起動にかかる時間だけです。
合計16分程度で更新が完了しました(歯車云々の時間は省略)。

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


バージョン

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

ファームウェアが気が付かないうちに上がっている。いつ上がったんだろう?



mouse SimフリーWindowsPhone (Simフリー/Windows10 Mobile/Office Mobile/大画面 6型フルHD/3GBメモリ/保護シート付) MADOSMA Q601

新品価格
¥20,438から
(2017/3/15 21:51時点)

Delphi でXMLファイルを作成しようとしてハマる

ね、ハマるでしょ?


環境

いつも通り、サポート切れのXE5。


基本構文

xmlファイルを新規作成します。

var
  XML : TXMLDocument;
  RootNode, ChildNode : IXMLNode;
begin
  XML := TXMLDocument.Create(nil);
  XML.Active := True;
  RootNode := XML.AddChild('Root');
  ChildNode := RootNode.AddChild('Child');
  ChildNode.Text := 'ガキ';
  XML.SaveToFile('D:\Doc.xml');
  XML.Active := False;
  FreeAndNil(FResultXML);
end;


ここでハマったよその1 別スレッドで上記を操作

こんなエラーが出ました。
「DOMException Microsoft MSXML がインストールされていません」
Microsoft MSXMLはTXMLDocumentでデフォルトで使用するものです。
当初、このエラーを素直に読み取ったので、
「あれ、コンポーネント配置してない(IDEのポトペタで作ってない)から、デフォルト値がうまく読み込めてないのかな?」
などと思い、
  XML.DOMVendor := MSXML_DOM;
を追記しました。
が、それでもエラーが解消されません。
「ということは、ポトペタ配置と他にもプロパティが違う場所があるのか、おまじないが必要なのか」
と探すも、それらしいものが見つからず。


結論:仕様です

下記の「エラーハンドリングおかしくね?」というページを発見。
さらにこんなページたちも。


原因と解決策

・エラーメッセージが微妙に意図しているところと違う。
・GUI経由、つまりはVCLフォームを表示しているメインスレッドならCOMは普通に呼び出せるが、
 別スレッドの場合はCoInitialize 、CoUninitialize を呼び出してやらなくてはならない。



ここでハマったよその2 TXMLDocumentインスタンスが勝手に破棄される

実際にプログラミングしたのは、上記基本構文よりもちょっとだけ複雑で、
Nodeを作るところ・そのためのデータをとってくるところや、SaveToFileするクラスは別に作っています。
そんなこんなで、SaveToFileしようとすると、「Activeでないよ」というエラーが発生するように。
あれ?
もしかして勝手にクローズしちゃうのかな?
と思って直前でActiveを活性化させても同じ。
なんでやねん、と思って追ってみるとTXMLDocumentインスタンスが死んでいる……
ウソみたいだろ、Freeしてないのに解放されているんだぜ。


結論:仕様です

「作成時に Owner が設定されていない TXMLDocument は、インターフェイス オブジェクトと同様の動作をします。 つまり、そのインターフェイスに対する参照がすべて解放されると、TXMLDocument インスタンスは自動的に解放されます。」
なんでそんな動作なんだよ(怒)
「インターフェイス オブジェクトと同様の動作」なんてさせるくらいなら最初からインターフェースで返せよ!分からんだろうが!


解決策

というわけで、Owner を設定してやれば解決します。
適当なTComponentインスタンスを生成してCreateの引数に渡してやりましょう。


総括:今回ハマったところを全部のせるとこんな感じ。


var
  XML : TXMLDocument;
  RootNode, ChildNode : IXMLNode;
  OwnerComponent : TComponent;
begin
  CoInitialize(nil);
  XML := TXMLDocument.Create(OwnerComponent);
  XML.Active := True;
  RootNode := XML.AddChild('Root');
  ChildNode := RootNode.AddChild('Child');
  ChildNode.Text := 'ガキ';
  XML.SaveToFile('D:\Doc.xml');
  XML.Active := False;
  FreeAndNil(FResultXML);
  FreeAndNil(OwnerComponent);
  CoUninitialize;
end;



NuAns NEO 新製品発表に絶望した。

NuAns NEOといえば、国内で初めてContinuum対応したWindows 10 Mobile。
その新製品の発表が、20日行われました。
それでは、見てみましょう。
NuAns NEO [Reloaded] 登場です!

------------------------------------
NuAns NEO [Reloaded]
[Android]
------------------------------------

ん?(目をこする)
んん?(目をこする)
んんん?(目をこする)


_人人人人人_
> Android <
 ̄Y^Y^Y^Y ̄


…………………………………………………………………………………
………………………………………………………………………
…………………………………………………………
…………………………………………

絶望した。
今日は仕事しないで帰ろう(←20日の感想)


ちょろっと他のサイトを覗いてみましょう

>「NuAns NEO」を購入したいと思っている人の95%がAndroidを求めていた」
え、そんなん発売する前から分かっていたじゃん……
それを理解して、ニッチな市場に踏み出したんじゃないの……??
市場が大きいが、強豪・競合ひしめくAndroid業界ではなく、
WIndows に手を出したのはニッチなのを理解してじゃないの……??

こっちでも寂しげな感じが。


企業の活動としては理解するけどね

実際、Windows 10 Mobile では稼げないので、利潤の追求ならAndroid 端末を出すべきではあります。
そこは理解できます、します。
でもNuAns NEOを買ったユーザはWIndows だから買ったのであって、
Android を望んでいるユーザ=購入ユーザだとは思えないけどなあ……
でもスペックいいな、ちょっと欲しい


過去を振り返って生きたい方はこちらからどうぞ。


PowerShell Windows イベントログの最大値変更

電気屋でひっそりと展開されるWindows 10 Moibleコーナーで遊んでいたら、Windows 10 Moible を片手に遊び始める人がもう一人来て、驚きを隠せなかった丘山です。
町中でWindows 10 Moible持っている人、自分以外に初めて見た……
シェア0.5%未満だったと思いますが、つまりは数百人に一人くらいはいる計算なので、探せばそれなりに会えるのでしょうが。

と、それはともかく、久々のPowerShell ネタ。

Windowsログ(イベントビューアーで見れるヤツ)のログ最大値変更

例:イベントビューアー - セキュリティを右クリック - プロパティ - 最大ログサイズ の変更。

(※Powershell を管理者で実行して)
Limit-Eventlog -LogName Security -MaximumSize 20096KB

変更後の確認は、
Get-EventLog -List
から。

今回はこれだけ!


うごかして学ぶWindows PowerShell

勉強会にてHololens

やり方が悪かったな、と反省したのでそのあたりをば。


会の内容

・毎回、各自発表時間を割り当てられるが、今回は最後に発表することにし、残り時間全てをHololens 体験会にした。
・1時間ちょっとしかないので、だらだらと説明していると肝心の操作がやれない! ということでほぼ説明せずいきなりチャレンジしてもらった。


結果どうなったか

・「表示されている映像が上にいくんだけど!?」→ヘッドセットの位置の問題
・「エアタップできない」→「指を押す」ではなく、「指を倒す」ジェスチャーが正解
・「クリッカー動かない!」→やっべー、クリッカー充電切れてるーw


説明すべきだったこと

・ヘッドセットの位置決めこそ最重要。Hololens は見た目よりも視野が狭いため、視野を決定するヘッドセットの位置を適切に設定できるかどうかで使いやすさが変わる
・エアタップはクセがある。コツは、「センサーが認識できる位置」は「顔の前」であること、指を大きく動かすジェスチャーをすること
・hololens は部屋をスキャンして部屋の形を正しく覚えないとうまく動かないことがある。
(事前に学習させておけばよかった)

まずもって、説明時間をとるべきだった。

でも盛り上がったよ!

UWPアプリをいくつか動かして、roboraidをプレイしてもらっただけなのですが、「すげー、すげー!」という声が聴けました。
やはりrobraid は神。あちこちでDEMOされてる=実績があるだけあります。これが一番凄さが伝わる感じ。

何にせよ、VRもMRも、体験しないと凄さも弱みも伝わらないので、ぜひ皆さんポチってください!



ハードコピー

あんまり更新しないのもなんですので、ちょっとしたことを書いてお茶を濁す。
軽くググッた結果をメモしただけとも。

(大ざっぱに)ハードコピーとは

コンピュータの画面を、そのまま紙等に出力し、永続媒体として記録したもの。
らしい。


(大ざっぱに)スクリーンショットとは

コンピュータの画面や、カメラで撮った画像ファイルをディスク上に保存すること。
らしい。


業務では

全部まとめてハードコピーと言ってしまっていたが、これからはちょっと言いわけてみよう。


Canon プリンター インクジェット 複合機 PIXUS MG3630 BK ブラック

新品価格
¥7,080から
(2017/2/8 08:06時点)

Hololens

遅ればせながらご報告。
MSストアから、Hololens 届きました!
本業でトラブルが続いていたのでいまだに全然弄れていませんけど!


外観について


絶対他でも(多分)言われていると思うのですが、入れ物はまごうことなき「湯たんぽ」




電源

充電はUSB経由。
結構電力いるだろう、と思っていたからUSB経由はちょっと意外。
USBをつなげっぱなしにして装着すれば攻殻機動隊ぽく見える……いや見えないなw


実際につけてみる

わかってはいましたがちょっと重い。


初期設定

Hololens には付属の説明書がついており、そこには日本語の記載もあります。
なんだ、前情報だとサポートは英語だけって言ってたけど、日本語もあるじゃん。
これなら楽勝だね!

と、見事に騙されました

電源ポチーの後の設定、英語音声ONLYじゃないですかー!
英語聞かないと次に何やるのかも分からないじゃないですかー!

Hololensでは音声操作もサポートしています。とありますが、どっちかというと必須の模様。
「音声認識もできる」というより、「音声操作しないといけない」という手順もあります。
初期設定中、次の設定項目に進む時は「NEXT」と「言わなければ」なりません。

一人暮らしへの部屋。
夜中にヘッドセット被って。
「ねくすと」「ねくしゅと」「ねきゅすと」
とつぶやき続ける私。

……メッチャ怪しいですね!



というわけで、雑なHololens 紹介でした!
詳細は他の方々からどうぞ!(投げっぱなし)

購入はコチラから。

Twitter に登録しようとした

ワタクシは全然SNSというものを使いません。
ですが、この度ちょっと事情がありまして、Tiwtter アカウントをとろうと思いました。


そして登録して10分ほどで






まだアカウント登録しかしてないのに違反扱いされたでござる。
冤罪でござる! 殿、冤罪でござるぞ!


調べてみると

結構引っかかる人が多いみたいですね。
推測するに、アカウントがスパム扱いされたかな?
丘山大一で活動している時はoutlookアドレスだからスパム扱いされやすいだよね……。
そして丘山大一としての電話番号なんぞないので、自力解決不可能w


しゃーないので

サポートに連絡してみます。


しかし



電話番号がないから電話番号で解除できないよ、と送ったのにも関わらず、電話番号でやれと。
まあこのメール自体、自動返信なんでしょうね。
自動化対策を自動でやるのは合理的といわざるをえない。

まあもう面倒なのでTwitterは諦めますw


続々・初めてコミケ用同人誌を作った話

原稿の管理

原稿��体は、Github上にでがらし会のPrivateリポジトリを作成することで管理することが決まっていました。
Github で管理するのはいいのですが、ここで地味にネックになるのが、マークダウンで原稿が作成される、ということです。
※もちろん、別の形式で原稿を作っても良かったのだが、Github上ならマークダウンが便利だと判断。


マークダウンは印刷のための形式ではない

当たり前ですが、マークダウンはHTMLを簡易に書くことに重点がおかれています。
出てくるものは解釈されたHTMLであって、その解釈はブラウザやライブラリに依存します。特にTableなんかは顕著です。
また、Github上に置くだけでは連結することも、(当たり前ですが)頁番号を振ることもできません。
よって、「印刷用の何がしかの形式にするためのライブラリが必要」ですが、「成果物はそのライブラリに依存する」します。
でもって、書く人ごとに使っているライブラリ・環境は異なるわけです。
合同誌なのに、書いているのはマークダウン(=テキスト)なのに、人によって結果が異なる。ツライ。


ライブラリの選定ーGitbook

あれこれ悩みましたが、最終的にGitbookを使用することにしました。
※正確にはWindows+Git for Windows+Gitbook+calibre
決め手は、
  • PDFへの変換ができる
  • PDF化した時の結果が、マークダウン+Github(ブラウザ) で表示した結果に近い(個人ごとの差が小さいことを期待)
  • PDF化の結果が印刷に向いている(特に改ページ)
  • 現在のリポジトリの構造でそのまま動く
という点です。ブラウザによる差異は取り除けないので、ここは諦めたところです。
他にも幾つか候補がありましたが、単純な使い勝手でGitbookを上回るものがありませんでした。
しかし、この選定に時間がかかりすぎてしまいました。
ライブラリの選定に時間がかかる=出力結果が不定なまま=ページ数も未定 ということです。
そのうえ、ライブラリと格闘している間に――編集としてあるまじきことに――皆の原稿進行具合の監視が半端になっていました。
結果、当初40頁くらいの予定が、出力してみたら120頁にふくれあがるという事態にw
いくらなんでも120頁は多すぎ! ということで、皆に協力を仰ぎ、最終的に80頁にしました。
いやあ、完全に編集担当の不手際でした(汗)
みんなありがとう!


製本について
色々悩んだのですG、STARBOOKSさんにお願いしました。
ポイントは、
  • 実績がある
  • PDF受付が明示されていた
  • 一部の頁のみカラー に対応していた
  • 比較的安い
  • 会場に搬入してくれる
という点でした。
担当のお姉さんの声が可愛かったのが最大のポイントだったなんていえない。ちなみに会場にいらしていたそうですが、その人も可愛かったそうな。お会いできていないぞチクショウ。
特に、上記事情によりPDFで入稿しなければならなかったため、PDF受付ができることが確定で分かっていたのが非常に大きかったです。

また、仮入稿もできましたので、一度製作途中のものを入稿し、印刷に問題がないかどうか軽くチェックしてもらうことができました。
印刷所に依頼するのは初めてでしたので、コレができたのは安心感の意味で非常に大きいかったです。

いやはや、お世話になりました。


さて、3回にわたって長々と書きました。

正直、理想通りにはいかなかったところが多いですが、処女作&初編集にしては「そこそこ」できたかなあ、という感想です。
通してのご注意ですが、今回はあくまで「初めて」「合同誌の編集という立場で」「丘山としての考え」を書いたものです。
何かの参考になれば幸いですが、「正解」を提示したわけではありません。特に、「文章の完成度を高める」の件は、どちらかといえば小説等で有効な手法です。技術書を書くのであれば、あるいはそうでなくても、異論が出るところだと考えています。
そしてこの「異論が出る」ところがキモだと思います。
一人でやってても異論なんて出ませんからね。折角の合同誌ですから、黙々とやるよりも、意見をぶつけあってワイワイガヤガヤやりたいです。

諸々反省点もあります。数多の失敗もありますw
2回目以降の機会があれば、また違ったやり方をしたり、今回のやり方を洗練する形にでやっていきます。
しかし編集面倒くせえ編集は編集で面白いよ!



伊勢藤 同人誌ケース ブラック

新品価格
¥700から
(2017/1/14 21:16時点)