オープンソース製品の「仕様」 - 赤帽エンジニアブログを読んで。
前職ではLinuxに限らずOSSの仕様について質問されたことは何度かありますが、今同じことを聞かれたら、この記事を紹介したいですね。仕様が〜!と質問してくる人に対して感じていた、モヤモヤ感をスッキリ説明してくれるとても良い内容です。
今は自動車関連の会社に在籍している訳ですが、自動車の考え方と、OSSの考え方は合わなさそうな気がしました。
とはいえ今の時代、ソフトウェア開発において、OSSを完全に無視することはできませんし、OSSの劣化コピーなんて素人が作っても品質悪いだけで、金と時間の無駄なので、どこかうまく折り合いをつける必要があるでしょうね。
メモ: 技術系の話はFacebookから転記しておくことにした。11/11の投稿が元、一部加筆。
WindowsからアクセスするファイルサーバにはSambaを入れていますが、なぜかWindows 10から接続できるマシンと、接続できないマシンがあって、ずっと理由が分からずほったらかしにしていました。
結論から言えば、Sambaで無効なユーザでログインを試みた際に、ゲストにフォールバックする機能を有効にしていることが原因で、Windows 10がサーバへの接続を拒否していました。
これはSambaのmap to guest = bad userに設定されていると発生します。大抵のディストリビューションでSambaをインストールすると、この設定になっていると思います。設定の意味ですがWindows 10側のユーザ名がAAAAだとして、Samba側のユーザ名にAAAAが存在しない場合、Sambaは不明なユーザをゲストユーザとしてログインさせようとするそうです。
この動きに対してWindows 10は拒否反応を示して、接続を切ってしまいます。不明なユーザなら、ログイン確認画面を開いてユーザ名から確認すれば良いのに、何も出さずに「接続できませんでした」と言ってくる始末です。
問題を解決するにはSambaのmap to guest = neverに設定すれば直りました。Windows 10がユーザ名とパスワードを聞いてくるようになります。
なお、現象の見分け方は、イベントビューア(eventvwr.msc /s)の
[アプリケーションとサービスログ] - [Microsort] - [Windows] - [SMBClient] - [Security]
を見たときに、エラー、イベントID 31017が記録されていて、
安全でないゲスト ログオンを拒否しました。
ユーザー名:
サーバー名: (サーバのIPアドレス、コンピュータ名などが入る)
ガイダンス:
このイベントは、サーバーがユーザーを未認証のゲストとしてログオンさせようとした結果、
クライアントによって拒否されたことを示します。ゲスト ログオンでは、署名と暗号化などの
標準のセキュリティ機能はサポートされません。このため、ゲスト ログオンは、重要な
データをネットワーク上に漏えいさせる可能性のあるman-in-the-middle攻撃に対して脆弱
です。Windowsでは、ゲスト ログオンは既定で無効になっています。Microsoftでは、安全
でないゲスト ログオンを有効にすることは推奨していません。
こういうエラーが記録されていたら、該当していると思われます。
目次: OpenCL
OpenCV+OpenVXのデモンストレーション(GitHubへのリンク)を動かしてみました。
VirtualBoxのディスクイメージを使えば、何もしなくてもQtEditorとCMakeで簡単にビルド&実行できますが、それだけでは何が何だかわかりませんので、あえて手動でビルドしてみます。
いくつかサンプルが含まれていますが、Harris Cornerと呼ばれる角検出のデモであるsolution_tutrial1を題材にして、ビルド方法と動かし方を書こうと思います。
サンプルコードはGitHubからcloneすればよいです。その際READMEにある通り、tutorial_videosディレクトリを作成して、動画ファイル(リンク先)をダウンロードして入れておくと良いです。
もし既にVirtualBoxで試しているなら、scpなりなんなりでディレクトリごとコピーしても良いです(動画ファイルも入っています)。ホームディレクトリのopenvx_tutorialというディレクトリに入っています。
必要なものはOpenCVとOpenVXのライブラリです。
OpenCVのビルドはメチャクチャ面倒くさそうなので、apt-get install libopencv-devでインストールしてしまうのが楽です。
OpenVXはDebianのパッケージになっていないようなので、自分でビルドする必要があります。
Khronosのサイトに「OpenVX 1.2 sample code (updated January 17, 2018). 」があるので、このコードを使います。(Khronosへのリンク)
$ tar xf openvx_sample_1.2.tar.bz2 $ cd openvx_sample $ make -j4
成功するとout/LINUX/x86_64/releaseというディレクトリの下に、libopenvx.soが生成されているはずです。installはやってもやらなくても動かせるので、今回はinstallせずに続行します。
次にサンプルコードをビルドします。
$ cd openvx_tutorial/tutorial_exercises/solution_exercise1 $ g++ solution_exercise1.cpp -lopencv_imgproc -lopencv_videoio -lopencv_highgui -lopencv_core -L/path/to/openvx_sample/out/LINUX/x86_64/release -lopenvx
本当はCMakeを使えば依存ライブラリを勝手に調べてくれますし、オプションを手で指定する必要はありませんが、ここではあえて -lオプションでOpenCVとOpenVXのライブラリを明示的に指定しています。
ビルドがうまくいったら実行します。
$ LD_LIBRARY_PATH=/path/to/openvx_sample/out/LINUX/x86_64/release ./a.out
OpenVXのライブラリを /usr/libなどにinstallしていない場合は、この例のようにLD_LIBRARY_PATHでOpenVXライブラリの場所を教える必要があります。
うまくいけば、ウインドウが出て、右下からたくさんの人が歩いてくる動画が出ます。また、検出された角に赤い点が打たれていて、点の動きがトラッキング(黄色い矢印)されている様子が表示されるはずです。
目次: マンガ紹介
お気に入りのマンガ紹介シリーズ。
Kindle Fire HDは大量の本を入れると動作がおかしくなる(Kindleアプリが落ちる、起動しなくなる)ので、本は読み終わったらいったん端末から削除し、読み返したくなったらまたダウンロードする運用で使っています。
そんな中、既読かつKindle内に残り続けている本、いわゆる「お気に入り」をいくつかピックアップしてみます。
あまり意識していませんでしたが、異世界転生系小説のコミカライズが多いですね…。
野球漫画は球詠、メジャー2nd、グラゼニくらいしか読んだことないですけど、どれも面白いですね。
目次: Kindle
Kindle Fireはときおりシステムアップデートが勝手に降ってきて、気づいたら更新されています。
アップデートしてくれるのは良いですけども、バッテリー駆動の時でもお構いなしに始まるのが結構怖いです。
当然、アップデート開始前に一定の残量(例えば50%以上、とか)があるかどうか見てから、アップデートを開始しているとは思いますが、バッテリーが弱っていて、アップデート中に一気にバッテリー残量が枯渇して電源が落ちたら、文鎮になってしまうのでは……?
メモ: 技術系の話はFacebookから転記しておくことにした。11/9の投稿が元、一部加筆。
目次: ROCK64/ROCKPro64
昨日(2018年11月10日の日記参照)の続きです。残る問題は3つありました。
2番目の「認識しなくなる問題」の原因が判明しました。
I2S2を有効にするとSPDIFが使えなくなる問題は、DMAの資源が枯渇していたせいでした。
RK3328はARMのPL330(or互換)のDMAを持っています。SPI, UART, I2S, SPDIF, PWM, PDMなど16のハードウェアがこのDMAを使えますが、実は同時に使えるのは8つまでという制約があります。知るかそんなこと……。
オーディオ系のハードを全てdisableにしたときのDMA資源の割り当ては、
このようになっていて、残りは4つです。
I2S0, 1, 2はそれぞれDMA資源を2つ使い(TX, RXがあるため)、SPDIFは資源を1つ使います(TXしかないため)。
Rockchip Linux(Rockchipが独自にメンテナンスしているLinuxのツリーのこと)の設定ではI2S0, I2S1のみを有効にしてSPDIFを切り捨てています。ちょうど資源を8つ使いきる設定ですね。ROCK64はピンヘッダにしかSPDIF信号が出せませんし、捨てるのも妥当かなとは思います。
私が前にエラーになってできないと言っていたパターンはI2S0, I2S1, I2S2, SPDIFを有効にするパターンです。この場合、
以上のようにDMA資源が足りなくなり、エラーになってしまいます。
ちなみにI2S0, I2S1, SPDIFを有効に(11/16: I2S2 → I2S1に訂正)すると、一応動くのですが、割り当てを調べると、
このようにUARTが犠牲になってしまうようです。Audioが動いても、UARTが死んじゃうのはダメな気がします。
(11/16加筆)UARTはDMAが無効になっても動作はしますので、死んでしまうという言い方は間違いでした。正しくは、Audioのために勝手にUARTのDMAを無効にしてしまうのはダメな気がします。デバイスツリー上は有効になっているように見えるので。
せっかく鳴るようになったSPDIFを活かすか、Rockchip Linuxに合わせるか、さて、どうしたもんかなあ。
メモ: 技術系の話はFacebookから転記しておくことにした。少し加筆。
目次: ROCK64/ROCKPro64
先日(2018年7月22日の日記参照)買ったRockchip RK3328搭載ボードROCK64で遊んでいます。
RockchipのSoCで動くLinuxはRockchipがメンテナンスしているLinux(以降Rockchip Linux)ですが、実はLinuxの本流開発ツリー(以降linux-next)も動作します。
しかしlinux-nextの方は全く音が出ません(speaker-testで叩くとxrun_recovery faild: -5, Input/output errorが出ます)。
以前S/PDIFも全く動かなかったのですが、原因が分かったのでパッチを送って直しました。今は出音までできているはずです。しかしI2Sは原因が違うらしく、なぜ動かないのかさっぱりです。
I2Sのレジスタ情報はTRM(Technical Reference Manual)に載っていたので、それを見つつRockchip Linuxとレジスタ値を同じに揃えましたが、I2Sは微塵も動きませんでした……。
I2S以外のドライバのバグを疑い、Rockchip LinuxのI2Sドライバを丸ごとコピーしたら、動いてしまいました。疑いはハズレ、つまりI2Sドライバに何らかのバグがあることは確定です。一体何が違うんでしょう。diffを見ましたが差分の意味がわかりません。
差分は多くないので、力技でRockchip Linuxからlinux-nextに1つずつ差分を移植していって、動作するかどうか確かめました。原因はdevm_snd_dmaengine_pcm_register() の第2引数(config)にNULLを渡すかどうか、でした。
私には、その違いの意味するところも、現在のlinux-nextのコードの何が悪いのかも、さっぱりわかりません。
動作とコードを追ってみると、現在のlinux-nextのコードはstruct snd_dmaengine_pcm_configのprepare_slave_configを設定し忘れているため、全くDMA転送設定がされていないことがわかりました。
要は、音声データを全くI2Sハードに送っていなかったんです。そりゃ動くわけないわ。
Rockchip Linuxはどうしていたかというとdevm_snd_dmaengine_pcm_register() の第2引数にNULLを指定していました。何も指定していないのに、どうして動くのでしょう?同じバグを踏まないのでしょうか?
実は第二引数にNULLを指定するとALSAのフレームワーク側でprepare_slave_configにsnd_dmaengine_pcm_prepare_slave_config() を指定した状態と同等に扱われます。この働きにより、無事動作していたのでした。わかるかそんなの。
知っていれば秒殺系のバグでしょうけど、私はぱっと見ではわかりませんでした。
バグの修正としてはたった1行なんですが、理解するまで2日掛かりました。Linux詳しい人はもっと早く解析できると思います……。Linuxを触っているとこういうの多いので、もっとLinuxパワーが欲しいです。
せっかく判明したバグなのでALSA MLにパッチをぶん投げておきました。
ちなみに、これで万事解決ではなく、アナログ音声端子から音を出すにはI2S1とACODECというハードを叩かないといけないです(今回動いたのはI2S0)。今わかっているだけで、
これだけの問題があります。Rockchip Linuxは何らかの方法で問題を解決しているはずなのですが、今のところ私にはさっぱりわかりません。
私のような門外漢が四苦八苦するより、Rockchipの中の人がlinux-nextに修正パッチを投げてくれる方が断然早いんですけどねえ。あまりlinux-nextにはご興味がないのでしょうか。
LANケーブルでHDMI伝送できる世界初の "GPU搭載" HDBaseTカード - PCWatch を読んで。
面白い製品だな〜と思いつつ、今一つこの製品の価値が理解できていませんので、少し調べてみました。
私の予想するこの製品の魅力は、
のどちらかです。まず価格を見てみると、
HDMIケーブルは確かに高いけど、実はCAT7 LANケーブルもかなり高いため、大きな違いがありません。
次に距離を見てみると、HDMIも50mくらいならイコライザ付きのケーブルを使えば、引き回せるみたいです。さすがにケーブル1本で100mは無理そうでした。商品が見当たりません。HDMIで100mに挑むとすると、
このような選択肢があるようです。HDMIで50mを超えることは不可能ではないですが、一気に価格が跳ね上がります。
従って、この製品が輝くシーンは
「50m〜100mのディスプレイ配線をケーブル1本で安く繋ぎたいとき」
だと思われます。たぶん。
メモ: 技術系の話はFacebookから転記しておくことにした。少し加筆。
引っ越し荷物を開梱していると、たくさんのマウスとキーボードが出てきました。いつのまにこんなに買っていたのか。
写真には6つのマウス、6つのキーボードが映っていますが、他にもマウス3つ(Logicool V450、Microsoft Wireless Mouse 1000が2つ)と、キーボード1つ(Topre REALFORCE)がありました。
マウスの一覧です。
キーボードの一覧です。
マウスは9個も買ったにも関わらず、一番手に合うと思ったのは、会社のPCに付属している有線タイプのマウスでした。サイズが絶妙で、とても軽くて良いです。
ワイヤレスマウスは妙に小さいか、妙に重たいので、手が疲れてしまいます。今のところ唯一気に入ったのはLogicoolのM705だけです。
キーボードは7個も買いましたが、キーの配置がスタンダードであることだけが重要で、構造や他の要素はあまり気にならないことがわかりました。PCに付属しているキーボードはキー配置に捻りがなくて使いやすいものが多いですが、最近のPCは変なキー配置のキーボードが増えていて困ります。普通の配置が良いです。要らんことしないで欲しい。
前の会社(ソシオ)で使っていた富士通PCに付いてたキーボード(FKB-1424と配置が似ているやつ)はキーが若干頼りなかったですけど、キー配置が普通で良かったです。
今の会社のDELL KB216はイマイチです。左下のFnキーが邪魔ですし、左Altのところ(Zキーの一段下)にWinキーが来ていて、メチャクチャ押し間違えます。あまりに誤打するので撤去して、REALFORCEに置き換えたほどです。昔使っていたDELLマシンのキーボード(DELL SK8115?スペースキーが正方形のもの)はスタンダードな配置で良かったのにな〜。なんでノートPCもどきの配置にしたんでしょうね。
Logicoolのマウスは良いものが多いんですけど、キーボードはイマイチなキー配置が多いです。K275以外は誤打連発で手に合いません。
REALFORCEは価格は高いのを除けば、キー配置がスタンダードで非常に良いキーボードです。我が家では活躍の場がないため、会社に持って行って活躍してもらっています。
メモ: 技術系の話はFacebookから転記しておくことにした。10月13日の投稿が元だが、大幅に加筆した。
先日(2018年10月15日の日記参照)気づいたことですが、FacebookやLinkedInの職歴では、現職として2社以上に所属することができるようになっています。
エグゼクティブクラスなら複数の会社の取締役を兼任するだろうけど、正直言って自分には縁が無い機能だと思っていました。
しかしエグゼクティブでなくとも、この世には「出向」という2足の草鞋を履ける制度がある訳で。自分でこの機能を使うことになるとは思いませんでした……。
メモ: 技術系の話はFacebookから転記しておくことにした。
< | 2018 | > | ||||
<< | < | 11 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | - |
合計:
本日: