.NET CoreをCent OS 7(Linux全般?)で動かした時の備忘録
先日、会社の勉強会で.NET Core等について話しました。
その時の事象についてちょっと覚書を書いておこうと思います。
まず前提として、.NET Coreはクロスプラットフォームなので、Windows以外にもLinuxやMacでも動きます。
また、コンパイルの仕方によっては.NET Coreランタイムをインストールしなくても実行できるようになります。
せっかくの勉強会だったのでWindowsだけじゃなくてせめてLinuxで動かした例も出したいなあってことでCent OS 7で動かそうとした時に事象は発生しました。
「.NET Coreランタイムが不要 = 環境構築が不要」ではない?
ソース自体は「Hello World」を出すだけのプログラムでした。
.csprojファイルは以下のような内容です。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp2.0</TargetFramework> <RuntimeIdentifiers>win7-x64;centos.7-x64</RuntimeIdentifiers> </PropertyGroup> </Project>
Windows 7 64bitとCent OS 7 64bit向けの2パターン実行ファイルを生成できる設定です。
Windows 7では問題なく実行できました(ついでに試したところ、Windows Server 2012でも実行できました)。
ただ、Cent OS 7では実行時にエラーとなってしまいました。
正確なエラーメッセージは忘れましたが、「libunwindをインストールしろ」というメッセージでした。
libunwindをインストールしたところ、実行することができました。
そのため、.NET CoreをCent OS(Linux全般?)で動かすにはランタイムが不要でもlibunwindが必要になってくるようです。
libunwindはデバッグ情報を表示するため?のライブラリっぽいので必要になるかはOSの設定によるのかもしれません(私はLinuxに詳しくないので不明。そもそもこの実行環境も同僚に手伝ってもらった環境だし)。
会社のPCで作ったり実行したりしたので実行時のキャプチャはありませんが、自宅PCでも環境作ったらキャプチャ取ってのせたいところです。
ダークソウルボードゲーム(英語版) - Dark Souls The Board Game
今ではTwitter等で検索するとちょこちょこ持ってみえる方がいるらしいダークソウルボードゲームについて今更ながらちょっと書こうと思います。
まずダークソウルボードゲームって元々Kickstarterで出資を募集していましたが、私はこれに出資はしていません。興味はありましたが、当時はダークソウル自体プレイしたことがなかったからです。一般発売後(イギリスで)に購入しました。6月下旬に届きましたが、どうやらKickstarterで出資していた方の中にはまだ届いていない方もいたようです。
ググると細かいルール等の説明をしているブログが見つかるのでその辺は割愛します。ただ、ルールはとても多く複雑で大変でした。
自作和訳ルールブック(ドヤァ
届く前から翻訳を頑張っていたのがこれです。
公式で配布されているPDFを頑張って編集しました(キャプチャしたページの一部をペタペタ貼って元の英語を隠してその上に日本語を乗っけていくという作業…)。 フォントにはフリーの刻ゴシックを使用しましたがなんかめっちゃマッチしている感あります。しゅごい。
完成した和訳版PDFはキンコーズで印刷して製本してもらいました。
プレイした感じ
ルールいっぱいで大変ですが、みんなでワイワイだれが装備つけるか、レベルアップするか、どう戦うか等話しながらプレイできます。わりと簡単に死にそうになる上に、誰か1人でも死ぬと篝火戻ることになるので結構ドキドキします。
ちなみにインスト込みで6時間程度やりましたが、終わりませんでした…(死んだからかな…)。がっつり時間とってやれるときにしか厳しいですね。
購入するには?
今ではAmazon.co.jpでも買えるようです。25,000円くらいしますが。
私は海外サイトのElement Gamesで購入しましたが、送料込みで£112だったのでおよそ16,000円ちょいくらいだった気がします。 Element Gamesではカートに入れて普通に買うことができません(ダークソウルボードゲームはイギリス国内のみ発送となっているため)。 ただ、サイトには「問い合わせてくれれば対応できるかもしれない」と書かれています。 なので、私はこんな感じの流れで買いました。
メールで
私:「日本からダークソウルボードゲーム買いたいんやけどサイト上から買えへん…。日本からはやっぱり買えへんの?」
EG:「メールで注文受付たるで!」
私:「ほんまか!送料はなんぼなん?」
EG:「追跡できるやつやと£40、追跡できへんやつやと£12や!」
私:「なら金あらへんし追跡できへんやつで頼むで~」
EG:「分かったで~。PayPalで支払ってくれや!あと住所もくれや~」
私:「払ったで!住所はこれやで!」
EG:「よっしゃ、注文受付たで!」
私:「やったぜ」
Element Gamesでの価格は私が買ったときより安いので英語でやり取りする気があるのであればElement Gamesから買うことをオススメします。追跡できる方の配送方法でも安い。英語力のない私でもGoogle翻訳等を駆使してなんとかなったのでハードルは高くないと思います。
UpdatePanelを用いたラジオボタンリストの非同期ポストバック
そもそも
UpdatePanelとはASP.NET Web Formsで使えるサーバコントロールです。
通常のポストバックの場合、画面全体が再描画されますが、UpdatePanelを使うとAJAXによってUpdatePanelが含んでいるコントロールのみ再描画してくれます。
今どき、MVCじゃなくてWeb Formsなんて…って感じではありますが(私自身はASP.NET MVC経験はないです…)、オープン系システムではまだまだあるのではないでしょうか。
私がある現象にぶつかって色々ググっていたら、勘違いしたまま諦めてしまったらしい方の記事をいくつか見つけましたが、解決策について載っているサイトは見つけられませんでしたので、メモ書き程度に現象と解決策を書きたいと思います。
諦めてしまったらしい方の中にはラジオボタンリストでは非同期ポストバックができない仕様になっていると言っている方もいましたが、ちゃんとできます。MSDNにも、仕様上できないFileUploadコントロール等とは違って書かれていません。
私がぶつかった現象
それはラジオボタンリスト(RadioButtonList)コントロールのSelectedIndexChangedイベントによる非同期ポストバックが発生しないことでした。
同じUpdatePanelの中に存在するドロップダウンリスト(DropDownList)コントロールでは正しく非同期ポストバックが発生していたのですが、ラジオボタンリストだけ通常のポストバックが発生してしまいました。
以下のようなマークアップ。非同期ポストバックでラベルの文言が変わる的な。
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:DropDownList id="DropDownList1" AutoPostBack="True" runat="server"> <asp:RadioButtonList ID="RadioButtonList1" AutoPostBack="True" runat="server" /> <asp:Label ID="Label1" runat="server" Text="ラベル" /> </ContentTemplate> </asp:UpdatePanel>
ドロップダウンリストもラジオボタンリストも項目はサーバサイドで追加。
原因
原因はマークアップ等ではなく、web.configにあります。
<pages ClientIDMode="Static" />
上記例のマークアップの場合、リストアイテム(ListItem)のIDはRadioButtonList1_1、RadioButtonList1_2といった風に振られていきますが、本来Staticは各開発者が責任を持って全てのIDを振るという思想だからなのか非同期ポストバックが正しく動きません。(UpdatePanelのAJAXから正しく参照できない?)
解決策
<pages ClientIDMode="Predictable" />
私がPredictableを選んだだけなのでAutoIDとかでも大丈夫かもしれません。少なくともPredictableであればラジオボタンリストでも非同期ポストバックが正しく動くことが確認できました。
ちなみにPredictableがデフォルト値なので、なにも設定を変えていなければ最初からきちんと動作していると思います。
検証してませんが恐らくチェックボックスリストとかでも同じ現象が起きそうですね。
HTML出力時のIDの生成方法の話なので、JavaScript等でIDがベタ書きされてなければ開発途中で変えても大丈夫だと思います。
余談
私はASP.NET MVCの経験がないので疑問なのですが、どういった場合にASP.NET MVCが選択されるのでしょうか。MVCモデル使いたいだけならJavaとかを使えば、高いVisual Studioを導入しなくてもいいと思います。
現行システムが.NETのクラサバ等で移行したい時とかなのでしょうか?あとは単にその人のスキル的に?
AnyLink - スマートフォン間でバッテリーやデータをやり取りできるケーブル
AnyLinkって?
AnyLinkとは、デバイス同士でバッテリーを分け合ったり、データの転送を行うことができるケーブルです。
例えば、複数のデバイスを持っている場合にデバイスをモバイルバッテリー代わりにすることができます。
届いたのはもう1年近く前になります。(たしか)
選択した報酬
$21.00でケーブルとUSB Type C、Lightningそれぞれの変換端子が付属しているものを選択。色はスペースグレイ。送料は$9.00でした。
当時のレートの記録が残っていないので現在のレートで換算すると約3,357円になります。
※$1=111.919418円換算(2017/05/02)
ケーブルにしてはちょっと高めでしょうか。
基本スペック
- 端子1:USB Type A(内部にmicro USB)
- 端子2:micro USB
- USB OTG:対応
- ケーブルの素材:ナイロン
端子1の「内部にmicro USB」とは
言葉そのままでUSB Type Aの中にmicro USB端子が格納されており、引き出すことで使用できるのです。これによってスマートフォン同士といったデバイス同士の接続が可能になっています。
ちなみにこのmicro USB端子にスマートフォン等を接続するとUSB Type Aがひっついているシュールな光景になりますね。
USB OTGって?
OTGとは、USBの規格策定を担うUSB-IF(USB Inplementers Forum)によって2001年12月に策定された、パソコンを介することなくUSB機器を相互に接続するための規格。USB 2.0の追加仕様という形で仕様が定められた。「USB OTG」、「USB "On the Go"」とも表記される。
引用:IT用語辞典 e-Words
ということのようです。
デバイス間のデータ転送はこの規格を使用して行っているようです。そのため、デバイスが対応していなければ使用することができません。
AppleデバイスはそもそもLightningケーブルでUSBじゃありませんが、変換コネクタで対応できるみたいです。私はAppleデバイスを所有しておらず、詳しくもないので詳細についてはよく分かりません…。
外見
ケーブルがナイロン製なので見た目、質感が少し異なりますが、基本的にはただのケーブルの外見です。Kickstarterで出資募集していたときとは外見が変わっています。(ケーブルと変換コネクタが繋がっていたのが分かれています)
USB Type Aの中からmicro USB端子を引き出す時は白い部分を押しながら引き出す必要があるのですが、結構押さないといけないので爪では厳しいです。私はいつも反対側のmicro USB端子の角で押し込んでいます。
性能
バッテリーの共有
基本的にはUSB Type A側が供給元となるようです。端子部分のマークは逆っぽいのに…
ただ、時々逆になることがあり、充電したいデバイスのバッテリーが吸い取られていく状態になってしまうことも…(原因不明)
パッケージ等に書かれてはいないのですがこのケーブルは1.5A対応のようです。なので急速充電は行われません。
データの転送
先述したとおり、USB OTG規格を使用しているため、データの転送をするにはデバイスも対応している必要があります。
私が持っているスマートフォンはNexus 5X、zenfone 2、Galaxy Nexusなのですが、全て対応しているようでした。
が、どうやっても相手を認識しない…。
Kickstarterのプロジェクトページにあるコメント欄を見ると、私と同じようにデータ転送ができないと言っている方がちらほら。みんながみんな言っているわけではないので恐らく初期不良なのだと思われます。
あれ、なにこれ?
先日、ある製品の記事を見つけました。
あれ??これパクリなのでは!?!?
名前もAnyLinkとAnylinkでほぼ同じだし、Anylinkのデザインは Kickstarterで出資募集していた時のAnyLinkのデザインそのままです。
AnyLinkはJuby社、AnylinkはOMaker社なのでもちろん別物です。
AnyLink | Anylink | |
---|---|---|
2015/01 某日 | プロトタイプ作成等 | |
2015/11/11 | Kickstarterにてローンチ | |
2015/11/28 | Amazonで取扱開始 | |
2016/04/10 | リンクのレビュー記事 |
わかりにくい表ですが…
これだけ見るとパクっているとするならAnylinkがなんか怪しいなあって感じがします。実際はどうだか分からないけど。
これが該当するかは分かりませんが、クラウドファンディングのトラブルの一つとして、新しい技術等を使っているわけではないこういったどちらかというとアイディア製品の場合に、プロジェクトが完遂する前にパクられて先に発売されることがあるそうです。
総評
私は初期不良らしきものにあたりましたが、ちゃんとした製品に当たればUSB OTGを使って手軽にスマートフォン間のデータのやり取りができるのでわりと使えるのではないかと思います。ただ、私は変換端子付きで$21.00でしたが、今Juby社のサイトから買うと変換端子1つで$12.99かかるようなので、使っているスマホがmicroUSB端子以外の場合は高くついてしまって微妙かもしれませんね。
上記したとおり、現在ではJuby社のサイトやAmazon.com(今は扱っていないようですが)から注文は自由にできる状態です。ケーブルにしては高めではありますが、滅茶苦茶高いわけではないので、興味を持ったら手を出してみるのもいいかもしれません。
関連リンク
【一覧】出資済クラウドファンディング
これまでにクラウドファンディングで出資したガジェット等の一覧です。また、それぞれのレビューへのリンクもあります。
既に届いたもの
AnyLink
Axent Wear
レビュー書き中
ChargeWrite
レビュー書き中
The Everlast Notebook
レビュー書き中
iLuun
レビュー書き中
LattePanda
レビュー書き中