ayumin.log

読みにくかったら脳内sedで整形してね

Oculus Quest 2 が初期不良なのに、中々交換してもらえなかった話

11月頭にOculus Quest 2を楽天市場ヤマダ電機で購入したことから話が始まる。

購入後起動しない

Quest 2は金曜日に自宅に到着した。

しかし起動できない。そもそも充電に失敗していそうな雰囲気だ。

Redditにスレッドを立てたり、Oculusサポートに連絡したところ、どうやら初期不良の可能性が高いことが分かった。

到着初日

実は到着した当日の時点で起動しない、おかしいということには気が付いていたので、予めヤマダ電機のサポートには連絡を入れた。 ここで帰ってきた返答は、

ヤマダ: 「メーカーに初期不良であることを証明してもらえないと対応できない」

到着3日後

この時点でなんとなく雲行きが怪しいとは思った。

世間には携帯会社に一切手を加えることを許さないiPhoneという存在があるし、まぁ似たようなものだろうとこの辺では楽観視していた。

問題はヤマダ電機、Oculusともに土日はサポートが開いていないことだ。

しかもOculusにメールは送った翌日に返ってくるので、話が全然進まない。

そんなことを繰り返して水曜日になると、Oculusサポートの方が不良品だろうということで、交換を薦めてきた。

Oculus: 「交換は日本ではできないので、香港に送ってください」

到着5日後

はてさて、これはどうしたものか。今の情勢で香港にとなるといつ返ってくるかわからない。 元々は11月中に使いたかったものだ。この対応をされると、下手すると12月頭ですら使えない可能性が出てくる。

いったんこの話は置いて、とりあえずこんな状況なんだけど対応できませんか、とヤマダ電機に電話をかけてみた。

ヤマダ: 「現在大変混みあっており……(自動音声)」

到着6日後

ヤマダ電機のサポートが混んでいて、電話が繋がらなくなってきた。 12月のクリスマス商戦真っ只中はともかく、11月の、しかもAM11:30頃からこんな調子で大丈夫なのかと思いつつ、とりあえず時間を変えて連絡を取ることにした。 なんとか連絡を取り、こんな状況なんだけど対応してくれない?と頼んでみた。すると

ヤマダ: 「Oculusのサポートにこちらで対応できるか確かめてみますので、少々お待ちください」

到着11日後

この週は3連休だったので、連絡がその週に来ることを期待していたが、普通に翌週まで待たされた。

ヤマダ: 「メーカー様との対応になりますので…」

正規販売店なのに初期不良交換できないんだ……。

とりあえず表面上は平和的に終わらせたが、やっぱりおかしいのでもう一度ヤマダに対応できないか聞いてみようと思う。

電源つかないレベルの初期不良証明と、交換どころかサポートにもまともに繋がらないのか。

通販に関しては家電量販店はどこもこんなんなんだろうか。

まとめ

  • ヤマダのサポート繋がらなすぎ
  • ヤマダの対応は遅い
    • 仮に子供のクリスマスプレゼントで12月中旬に買ったら、1月末まで待つのは辛い
    • 普通に交換だけして、その後会社でメーカーと対応交渉したい
    • 8日以内初期不良対応 #とは
  • Oculus(facebook)のサポート対応も悪い
    • 国内の、それも家電量販店で買った物を初期不良で海外輸送するのは辛い
    • ゲーマーしか買わないものとはいえ、どこにでもある家電量販店で買えるものにしてはサポートが微妙…

Amazonのリアルタイムチャットで対応してくれるサポートがいかに優秀なのか良くわかった。

kindleをLinuxで読みたい話と、Linux Desktopは実用上辛かったという話

kindleをPCで読む

kindleをPCで読む方法は2種類ある。

  1. kindle cloud reader を使う
  2. kindle for pc を使う

ただしどちらも問題があって、

  1. kindle cloud readerは読めない本がある
  2. kindle for pcは現状Linuxでは使用不可

特に1は大問題で、自分はタブレットなどで「繋げて読む」という機能を愛用している。

これは、本を1つのwebページのように繋げて、スクロールして読める機能で、タブレットスマホと相性が良い。 だがこれを使える本は、確実にcloud readerでは開けない。アプリを使ってくれと言われる。

それじゃあ2で、となるが残念ながらkindle for pcはLinuxに対応していない。 じゃあwineで、と思ったがRuntime Errorが出る。結局使えない。

Linux + kindleをどうにかして使いたかった

他の方法も考えた。

  • androidのアプリをLinux上で動かす

    • Anbox
      • Arch Linuxでは動かなかった。snap環境も同じく駄目。
    • KVMなど仮想環境でAndroidを動かす
      • 手間かかりすぎ、ノートPCじゃ重くて辛い。
  • 古めのKindle for PC をwineで使う

    • Arch Linuxユーザが古いものを求めて良いのか
      • そもそもwine使うならwindows使った方が良い

と、結局それLinuxじゃなくてよくね?という結論に至った。

Linux Desktopについて

最近フォントがおかしくてブラウザで数式が崩れまくるとか、実用上問題があるケースが増えてきた。

バイト先ではWindows+WSL2(Ubuntu 20.04)で開発している。Archなら…と思うこともまぁ多々ある。特に新機能をすぐ使えるのはArchの利点だろう。 最新パッケージに慣れすぎて、NeoVimのプラグインUbuntuで動かなかった時に原因がすぐ掴めないことすらあった。

が、それでも今はwindowsがベースにある方が圧倒的に使えるツールが多くて便利だ。Linuxをベースにした環境ではwindowsツールは満足に使えないのが実情である。

Linuxだからこそな部分を含めて考える

Linuxはゲームできない分、進捗を出すのにもってこいだと思っていた。

だが実用的には、他のOSで普通にできることをアクロバティックに解決しなければならないため、結局時間がかかる。 そういったしょうもない問題を安定しない方法で解決しても、不便なツールが残るだけで得るものは少なかった。

周りが5分で解決する問題を、5時間かけても解決しないのはどうなんだろう。この作業に意味はあるのだろうか、と思うことは1度や2度ではなかった。

特に忙しい時に、Linuxのせいで時間を取られ続けるのはキツイ。精神的に辛くなる。 Archは面白いし、遊びで使うと勉強になると思うが、常用するものではないな、と思っている。

実用的にはLinux DesktopはWindowsMacにはまだまだ及ばない。これはOSの問題ではなく、現状だと使用者が少なくて、企業がツール対応しにくいのが問題だろう。 仮にwindowsLinuxのユーザ数が逆転すれば話は別だが、恐らくそれはここ数十年では無理だろう。

最近はクロスプラットホームなアプリケーション開発環境が増えてきたとは言え、企業としてサポートするとなるとテストの必要もある。 今後も個々のアプリケーションがLinuxに対応するケースは少ないだろう。

実際どうするか

環境としては、windows+WSL2 or Macが開発環境としてベターだろう。Ubuntuは悪くはないが、当分Linuxオンリー環境はやめようかなと思っている。 最近興味深いものを出してきたMacもあるが、どうも自分はAppleの思想とは相容れないので買わないだろう。

ということで、Windows+WSL2に開発環境を戻そうと思う。とはいえArchは色々勉強になるOSだった。多分数年後にはまた嬉々として使うだろう。

【Z-III】seccampに参加したい人のための、参加課題の解き方【プラットフォームセキュリティトラック】

この記事はQiitaの移植版です

seccamp'20 と今回の記事の関係について

seccamp'20オンラインでは、グループで続けるというテーマのもと、グループワークが行われています。 今回の記事は、そのグループの1つ「電源50Hz」メンバーが週替りで

  • 参加課題をどう解いたのか
  • どうやって解答を作ったのか
  • 普段どんな(勉強|実装|活動)をしているのか

などを記事として書きます。

今回のテーマ

seccampの課題をどうやって解いたのか?

  • 「今後のseccampに参加したいけど、課題難しくて自分じゃ無理そう……」
  • 「調べても、出てくる解答が凄すぎて手が届かなそう……」

と諦めてしまった人を、seccamp参加に繋げられるようにしたいという思いがあり、一周目は全員同じテーマで書いてもらうことにしました。


なお課題は一部のみ引用していますので、全文は
https://www.ipa.go.jp/jinzai/camp/2020/zenkoku2020_vote.html#kadai
をご覧ください。


seccampの提出課題について

今回は集中開発コース、Z-IIIトラックに参加した自分が、どうやって課題を解いたのかを中心に書きます。 さてまず、Z-IIIトラックはどういったことをするのかの説明から参りましょう。

Zトラックは「プラットフォームセキュリティトラック」というトラックで、

Zトラックは、いわゆるインフラ(OS、VM、ネットワーク、アンチウィルス、Webセキュリティ)に興味があり、かつソフトウェア開発にもモチベーションがあり、加えて情報セキュリティにも取り組みたい、という3つの興味を満たし、それぞれの実力を育ててもらうことを目標としています。

と公式の説明にもある通り、幅広く深い専門知識を求められる傾向にあります。

その中で、今年のZ-IIIトラックの課題は「正規表現」と「静的解析」についての知識を問う内容でした。

これだけ聞くと、難しそう……と思われるかもしれませんが、ヒントとして資料も提示されているなど、課題提出者に優しいトラックでもありました。
特定の専門分野に特化していないと、問題が何を書いてるかも分からない他のトラックに比べて、解答の道筋は立てやすいものだったと思います。


大問1

小問1


この問題はある正規表現にマッチする文字列を3つ見つけ、どんな文字列がマッチするか説明せよ、という問題です。

実はこの課題、ただマッチする文字列を3つ出すだけであればそこまで難しくありません。"b", "bb", "bbb" でも正解ではあります。 ただし、「説明せよ」とあるということは、「どこまでその正規表現を理解しているか」を問われているように思えます。ということは3つ正規表現はあまり共通点のないものが望ましいと考え、""(空行)、"b"、"aa"という3つで提出しました。また法則性として、

この正規表現は全ての文字列についてがかかっており、bと(abab)どちらも0個以上あれば条件を満たす。すなわち、""でもマッチする。同じように"b"でもマッチする。このbはいくら続いてもマッチする。 (abab*)だけで考えると、"aa"や"abbbbbabbbaaa"などで満たせる。この正規表現は、aで始まること、aが偶数個存在することの2つを満たせば、どこにどれだけbが入っていてもマッチする。

という法則を見つけて、正規表現全体がこういった文字列にマッチする、という内容をなるべく漏れがないように説明しました。

小問2,3


この問題は、今回受講生として実装を行うReDoSに極めて深く関わる内容です。内容が続いているので両方一緒に考えることにしました。

実はseccampの講義で、グラフ理論アルゴリズムを含めたより一般的な詳しい説明を受けています。 しかし今回は「seccamp参加を目指す」人向けの説明ですので、あえて提出した内容そのままで、どうやって解答を作ったかを書きます。

まず、この課題を解く時点での私は正規表現は少し使ったことがある程度で、詳しい理論については何一つ知らない状態です。1

つまりグラフ理論アルゴリズムも分からない、そもそも数学的に解けることすら知らない状態です。

とりあえず課題にある正規表現pythonで動かしてみると、確かにa*50を入れると正規表現のマッチが終わりません。

なのに何故かa100になるとすぐにマッチします。そしてa49ではマッチしません。この時点で、

"a"*k(kは整数)で、50<=k && k<=100 のときマッチする

という予想をたてました。2
文字列が増えると処理も増えそうなのに、何故か文字列が少ない方が処理時間が長い……?

というところで、恐らく括弧の中にある?演算子が何かしていそう、という予想を更に立てました。

ここからヒントを読もうとして、すぐに諦めました。

流石に前提知識がない専門的な話を英語で読めるような、素晴らしい英語力には持ち合わせがありません。とりあえずそれらしいことを日本語で探します。

DeepLでどうにか解決できそうな気もしますが、日本語の解説を読むほうが分かりやすいでしょう。


すると運の良いことに、課題提出期限の1ヶ月前に書かれたReDoSの記事を見つけました。 https://gigazine.net/news/20200701-redos-cheet-sheet/

しかも丁寧にアルゴリズムの簡単な解説付き!これはしめたものです。
雰囲気で理解し、それっぽく解答を書きました。

一般的な正規表現は、正規表現を前から順に評価していき、文字列とマッチしない場合評価する正規表現が1つずつ前に戻って再度評価し、文字列がすべてマッチした時点で終わるという仕組みになっている。つまり、文字列が連続でマッチしないど何文字も前から順に評価を行わなければならない。 ここで、正規表現の?は最短一致でマッチするものを選ぶ仕組みとなっているが、今回の場合k==50に近くなると、(a?){50}を"a"50から"a"1まで何度も繰り返して評価する必要が出てくる。 逆にaが100に近くなると、(a?){50}がより"a"50に近づくため、kが小さい場合の評価がなくなり、時間が短くなる。 ちなみに、101<=kの時は文字列が全てマッチするまで正規表現が終わらないので、"a"50以上に膨大な時間がかかる。

こんな感じでそれっぽい説明と、意味があるか分からないおまけを書くことで、ちゃんと理解してますよ!と猛アピールをしておきます。 意味があるかはわかりませんが、おまけが間違ってても減点はされないだろう、あわよく加点されれば尚良し!という期待を込めて大問1を提出しました。

大問2

小問a


大問2はLinterや静的解析について問われました。まずはJavascriptのeval関数の危険性についての説明です。 これはなんと日本語ヒント付きです!

ということで、自分の合ってるかどうか分からない微妙な解答を見るより、ヒントでもある

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/eval

を読むべきだと思います。

任意の文字列をコードとしてそのまま動かすと、入力元が信頼できない場合何されてもおかしくない

みたいなことを書きました。

小問b


恐らくこれが最も参考にならない解答です。こんな奴でも参加できるのか…と思ってください。

関数を検出するという時点で、というかこのトラックが何をするトラックか知っていれば、何をするかはもうお分かりかと思います。3 Javascript、Linterのトラックと言えば、ES-Lintの出番ですね。

木構造になったコードから、eval関数を検出して警告する、というのが詳しく書けていればOKだと思います。Lintに詳しいなら、更にコードを書いて説明すると完璧です。

勿論これらは自分の課題提出時全くできていませんでした。ということで一言だけ残しておきます。

静的解析を強引に正規表現で解決しようとするな

以上です。

最後に

さて、これを読んで皆さんはどう思ったでしょうか。 「自分には難しすぎて無理!」という気持ちが少しでも無くなれば嬉しいです。

今年は例年と違いオンラインということで、課題の難易度が少し変わった可能性はあります。 ですが知識不足でもググりながら課題を頑張れば、講師の方は絶対に評価してくれます。

「こんな奴より自分の方がずっとできる!」と思って応募する方がいれば、私個人のグループワーク目標は達成です。4
とりあえずの軽い気持ちで課題をやって提出するだけでも、今まで知らなかった知識に触れられます。5
私自身は年齢の問題で今後は全国大会に受講者として出ることはもうできませんが、seccampには何らかの形で今後も関われると良いなと思います。

もし何かの機会でお会いできたら、その時はよろしくお願いします。


  1. 受講生には非情報系出身者や高校生の方もいます。全国(世界)から年齢/性別/得意分野などが多種多様な人達が集まります。

  2. ついでにささやかながらプログラムっぽく書いて、自分プログラム書いてますよアピールをしました。多分評価には入ってないので真似しなくて良いです。

  3. まさかコードが"eval(.*“という正規表現にマッチするか調べる、なんて考えて提出してしまった人はいませんよね…?

  4. 私自身はseccampを5年ほど前に知り、その時はとあるブログで公開されていた提出内容に圧倒されて諦めました。あの時課題に挑戦すれば、また違った世界が見えたのかもしれません。

  5. 特に地方の学生には是非参加してもらいたいです。自分は北海道の大学生ですが、seccampに出なければこんなに凄い方々と話す機会はもう手に入らなかったと思うので。

ブログ始める

ブログ作っとく

あまり書きたいことはないけど、たまに無性に書きたくなるので場所は欲しかった。
多分サーバとかインフラとかLinuxとか。飯についてもたまに書く。

アウトプットみたいな大層なものはない。