Fry in the Web

次からこうしようと思ったことを書き残しておきます

遺伝研スパコンでRNAseqを最速・自動で行う

遺伝研スパコンにログインする方法や、sshの使い方については解説しません。 多少RNAseq解析に対して知識があり、RNAseqをもっと高速にできないか、または自分でできないか?と考えている方向けに解説します。

使うもの

Nextflow 遺伝研スパコン

Nextflowとは

ワークフローツールです。発現解析ではsamtoolsや、fastQC,salmon....など大量のツールをインストールする必要があります。また、時間がかかる処理の出力を何度も次のツールに入れなくてはならない上に、サンプルデータが10種類を超えることも珍しくありません。また、ツールの依存関係やバージョン管理も非常に煩雑です。これらをまとめて解決してくれるのがワークフローツールです。更にDocker,Singularity などのコンテナを用いることで再現可能な実行環境を構築します。 www.nextflow.io

  • もうpythonをインストールする必要はありません。

  • fastQCをインストールする必要はありません。

  • trimgaloreをインストールする必要はありません。

PCを変えても全く同じ環境を再現できます。そのため、手元で行った解析と全く同じことをスパコンで行ったり、他人が行った解析を自分が再現したりできます。

今回はNextflowで既に書かれたワークフローで世界中の人がメンテナンスしている既存パイプラインを使用します。 https://nf-co.re/rnaseq

基本的な使用方法はusageを見てください。 以下はnf-core/RNAseqと遺伝研スパコン特有の問題の解決方法です。

nf-core/RNAseqと遺伝研スパコン特有の問題の解決方法

sshで遺伝研のスパコンにログインします。

qlogin -l mem_req=16g,s_vmem=16G

この時memoryを指定するのはjavaを実行したいからです。

export MALLOC_ARENA_MAX=2

も実行します。

curl -s https://get.nextflow.io | bash

するとカレントディレクトリに実行バイナリが落ちてきます。

./nextflow run nf-core/rnaseq -profile test,singularity

で動くか確認してください。(エラー出たら権限関連かも、Linux 実行ファイル 権限とかで検索してください)

RNAseqを行う

遺伝研のスパコンはUGEというジョブ管理システムで動いています。 このUGE(or遺伝研の設定?)についてハマりどころが結構あるので気をつけてください

  • 間違ったリソースパラメータを指定すると永遠にqw(que waited)の状態になる、エラーは出ない。
  • 実行されないのは間違ったパラメータ指定してるからなのに、混んでるから実行されないんだと勘違いしてしまう!!!!
  • キューはshort.qで十分。並行処理の1処理自体は時間がかからない。
  • nextflowのconfigでmemoryを指定すると、h_rt/h_rss/mem_freeが勝手に指定される。遺伝研のスパコンではこれらを指定するとqwから脱出できなくなる。

h_rt/h_rss/mem_freeが勝手に指定される問題の解決法

profiles {
    uge {
        process{
            executor   = 'uge'
            penv = "def_slot"
            clusterOptions ="-S /bin/bash -l s_vmem=16G -l mem_req=16G -l short -cwd -o stdout -e stderr"
            withName: '.*' {                
                time=null
                memory = null 
                }
        }
        singularity.autoMounts = true
        docker.enabled         = false
        singularity.enabled    = true
        podman.enabled         = false
        shifter.enabled        = false
        charliecloud.enabled   = false
    }
 }    

.nextflow/assets/nf-core/rnaseq/nextflow.configに↑のようなプロファイルを追加する。

.nextflow/assets/nf-core/rnaseq/modules/nf-core/software/qualimap/rnaseq/main.nf からdef memory = getMemory()+"G" みたいなところを探す、だいたい33行目周辺にある。 これを def memory = 16 + "G"に書き換える。 nextflowのmemoryをnullにしちゃったのでgetMemoryでぬるぽになる。

実行する

./nextflow run nf-core/rnaseq --input ./samplesheet.csv --genome TAIR10 -profile uge -resume --save_reference --max_memory 16.GB を実行する。

qsubは使わないことに注意。 nextflowがqueを勝手に作って投げてくれる。

結果は主にresults/star_salmon/salmon.merged.transcript_counts.rdsです、これをRStudioで開いて、DEseq2とかでDEG検出してください。

メルカリは赤字でヤバいのか?

この前、エンジニア学生のなかで赤字って大丈夫なのかな?という話題が出ました。

今回はメルカリを例に考えてみたいと思います。

どれくらいヤバそうなのか

メルカリは毎年赤字を拡大しています。

2018年6月期(18.6)の期末決算では70億円の赤字、19.6は130億円の赤字、更に20.6では220億円の赤字となっています。

一方、超有名な大企業は黒字で安定してます。

例えば、20.3の期末決算でNTTデータ750億円の黒字で、毎年安定して利益をあげています。

f:id:WEBIFRY:20201223140958p:plainf:id:WEBIFRY:20201223142753p:plain

これだけを見ると、メルカリは不安定に見えてきますよね。

企業にはフェーズがある

大きく2つに分けると企業には成長期と、安定期があります。

メルカリは稼いだ分以上に使っていますが、その差額は銀行や株主からの資金調達を行って払っています。

将来の黒字化で貸し付けたお金は帰ってくると期待されているため、赤字が拡大しても許されます。

では、どうやって企業のフェーズを判断するのでしょうか?

売上高

メルカリの売上高は急成長しています。

売上高のグラフを見てみましょう。

f:id:WEBIFRY:20201223145435p:plainf:id:WEBIFRY:20201223145842p:plain

まず20.6では760億円を売り上げている事がわかります。これは前年比+40%になっており、とんでもない成長率です。

また、この成長率を今年だけでなく毎年生んでいるという部分が特に驚異的です。

右にNTTデータを貼り付けましたが、前年比マイナスになっておりコロナの特殊要因を考慮しても急成長のフェーズにあるとは言えません。

赤字が発生する理由

メルカリは広告宣伝費にお金をかけているため、利益が残りません。760億円が手元に入ってきているのに、220億円もの損失を生んでいます。

その理由を確認するには、損益計算書を見ましょう。

f:id:WEBIFRY:20201223150728p:plain

右側が売上高で、左側に売上高が何に使われたかが書いてあります。

メルカリでは、売上高のほぼ100%を一般販管費という項目で使い尽くしているようです。

有価証券報告書には、

販売費及び一般管理費は主に広告宣伝費340億円、支払手数料140億円、給料70億円によるものであり…

とあります。

広告宣伝費がなぜこんなに多いのか?

より多くの新規ユーザーを囲い込む成長フェーズにあるからです。

広告宣伝費には、例えば以下のようなキャンペーンに使うお金が含まれます。

f:id:WEBIFRY:20201223151924p:plain

メルカリはこのようなキャンペーンを行っているのをよく見ますよね。

このキャンペーンでは一人3000円まで還元され、MAUは1700万人です。

仮に1/4の人が3000円上限までもらったとしても120億円近くになります。

このようなバラマキをやめれば、メルカリはすぐ黒字に転換するはずです。なのにしない。

つまり、その気になればいつでも黒字にできるのにあえてしないという会社の姿勢が財務諸表から読み取れます。

ゆえにメルカリは成長フェーズであると判断できます。

将来性があるのか?

あります。

まず、メルカリは安定した事業を持った上で挑戦をしています。

フリーマーケットのメルカリJP事業だけで見ると既に黒字化しており、営業利益183億円が存在します。 f:id:WEBIFRY:20201223154114p:plain

極端な話、現時点で注力するメルペイやメルカリUSに全て失敗しても撤退すれば、毎年183億円を稼ぐだけの力は残るということです。

次に、メルカリ経済圏を確立して相乗効果が生まれる可能性が高いです。

メルカリでモノを売ってメルペイで支払う、その商品をメルカリで売る、この流れが生まれればその中間で手数料を取ることができます。

メルカリでモノを売るということが、主要な入金手段になればメルカリ経済圏の流通額の10%を売上にすることができます。

そのため、現在はメルカリ経済圏の出口としてメルペイに注力しているのだと思います。

後払い・定額払いはヤバい

あまり本題と関係ないですが後払いと定額払いが頭良すぎて別の意味でヤバいです

最近後払い、定額払いなどの新規顧客向けのキャンペーンが始まっています。後払いにすることによって、先に買って後でモノを売って払う間接的な借金の「モノ払い」ができます。

通常、欲しい物があるときと、モノが売れるときには時差があります。これ買いたいからこれが売れるまで待って!ということですね

この後払いの時差を運営が許すことによって、来月までにメルカリでモノを売って「モノ払い」してくれる確率を上げる事ができます。そして、支払額の10%を「モノ払い」の手数料として得ることができます。

もし全ての後払いをモノ払いで払ったとして、月利10%! その上、メルカリの市場の流動性を上げることもできます。

来月もメルカリ経済圏から逃さない、この仕組み考えた人、頭いいですね!

つまり、既に顧客の新規獲得フェーズから、定着フェーズに移行しているようです。

定着したらあとは手数料を増やす・上げるだけなので、メルペイ黒字化もそんなに遠くないんじゃないかな~と思います。

結論としては赤字でも全然ヤバくなんかない、むしろ成長率がヤバいというお話でした。

pixivインターン ほぼSkyrim説

f:id:WEBIFRY:20200821100553j:plain

pixivのサマーインターン行きました。

行ったらなんでもやっていいよと言われたので

→本当にやりました

さて、今回担当したアプリはpixiv Sketchというお絵かきコミュニケーションアプリです。

pixiv Sketch - お絵かきコミュニケーションアプリ

イメージとしては、絵に特化したTwitterという感じです。

絵を書く機能もアプリ内に内包しており、絵の初心者でも楽しく使える事をコンセプトにしています。

pixiv社内では比較的若いアプリでまだまだ発展途上です。

現在も新機能の追加や改修がガンガン行われている状態です。

インターンの内容

ピクシブインターンは、土日含めて8日間(実質6日間)です。

就業形インターンのように実際に現場に配属され、Androidエンジニアとして働きます。

CanvasとかOpenGLゴリゴリ書く課題とか出されたらどうしよう…><

という気分だったんですが

メンターの方は「気づいたことは何でもやっていいよ」とのこと。

え、今「なんでも」って??本当に?

自分語り

"なんでも"って言ったpixivで勝手にビジネス職インターンみたいなことやらせてもらいました。

実は前から真剣にプロダクトとユーザーに向き合うような仕事も体験したいと思っていました

そこで手を抜いてやらかした経験があるからです。

高校生の頃、個人開発でアプリつくってました。

そのアプリは技術的にはそこそこイカしていて、作成には1000時間くらいかけました。

しかし、ユーザー数は増えませんでした。

大学に入って「起業の科学」とか「リーンスタートアップ」を読んでわかったのですが

自分はユーザーが別にほしくないものを必死に作っていました。

いつかどっかでリベンジしたいなーと思っていたのですが

どうしてもビジネス職のインターンに申し込む勇気は出ないままだったので

今回勝手にPMの人と話すなどして体験させてもらいました

 新機能の考案

これから自分が実装する新機能を考案するために

最初の2日間はビジネス職の人と主に議論を行いました。

SketchのPMの元に行きユーザーの抱える課題について何度も議論を行いました。

議論をもう一度持ち帰って考え直し、話し合うというサイクルを繰り返しました。

そして、ユーザーが抱える痛みを解決する新機能を2つ考案しました。

ビジネスサイドと話をしている間も、小さめの機能改修などは行っていました。

新機能の作成

最後の3日は、自分が提案した新機能の作成とUIの作成を行いました。

8日間ではサーバーサイド側の実装まで行う事ができないという制約がありました。

そこで今回はアプリ側だけで完結できるように一部を変更した機能を実装しました。

使う技術はRoom,LiveData,Coroutineとよくある感じの技術選定をしたので、特に詰まるところなく実装できました。

UIの作成

デザインは苦手ですが、今回ちょっとだけ何考えてるのかとかを教えてもらいました

「この画面に来た時、何を知っているんだっけ」「具体的に誰に向けたデザイン?」ということを考えながら実装しました。

既存の機能に新機能を組み込むのが難しかったです。

新機能を考えて作るだけじゃダメ、見せ方も考えなきゃと思うようになりました。

やっちまったなーってこと

次行く人はこういう失敗を踏み台にしてほしい…

1.話すことを決めて会議する

自分の中であまりまとまっていないまま会議に参加してしまいました。

何も伝えられず(自分の中でも何も決まってなかった)完全に居る意味がない人になってました。

2.プレゼン準備の時間を十分に取る

10分のプレゼンでしたが、最終的に18分位になりました。

リハーサルしたかったんですが、フォントと互換性ウンヌンでリハーサルの時間が消えてしまいました。

最後の一日でプレゼン準備終わるだろうなーと思っていたので、見通しが甘かったです

3.必要な部分だけを丁寧に解説する

校正の時間を取る事ができなかったので、プレゼンの無駄を排除できませんでした。

考えたこと全部言おうとしてました。

口だけではうまく人に論理的な説明ができず、一部が意味不明なプレゼンになってしまいました

必要最低限のことだけを言うように気をつけたいです

pixivのいいところ

1. 社内でHNで呼ぶ文化

自分は高校時代めっちゃツイッターにハマっていて、本名よりHNで呼ばれる経験が豊富なので

社内でHNで呼ぶ文化に非常に馴染みやすかったです。

リモートワーク期間中でも社員間でコミュニケーションがしっかり取れるよう「絵しりとり」したのが楽しかったです。

難点はHNでツイッター検索したらアカウントが出てきてしまうことですかね…

2. Slackが面白い

SketchのSlackは、雑談に必ず誰か反応を返してくれます。

ツイッターでつぶやくような雑談を、一つのチャンネルでつぶやいて話しているので

自分もつぶやいていいのかな…!みたいな気持ちになりました。

8日居ただけなのにすっかりSketchチームの一員の気分です

自分もこのチームの一員なんだという、心理的安心感が

積極的なコミュニケーションを生み出し、生産性に大きな良い影響を与えていました。

3.挑戦できる環境

pixivにおける挑戦は上がやりたいことを、自分がやらされる雑用ではなく

自分がやりたいことを、上がやらせてくれる真の意味での挑戦でした

Sketchチームメンバーは、自分の急なお願いでも快く引き受けてくれました

自分のモチベーションを一切阻害する要因がなく、非常に効率よく業務を行うことができました。

行ったら貰えました

f:id:WEBIFRY:20200821095044j:plain ☆5 【2020最新版】pixiv 非常にかわいいファイル 高音質 軽量 大容量 極細 小型 ワンタッチ収納 簡単操作 携帯便利 ノイズキャンセリング技術

f:id:WEBIFRY:20200821100205j:plain ☆5 【2020最新版】pixiv 非常にかっこいいパーカー 軽快 温室 人気 メンズ XL 簡単操作 ノイズキャンセリング技術

ごはんの記録

ウマすぎてウマになったわね…

f:id:WEBIFRY:20200821001432j:plain ウマです

f:id:WEBIFRY:20200821001535j:plain

f:id:WEBIFRY:20200821001551j:plain

pixivサマーインターンってやつは、分析 考案 実装 UI作成ってやつを

プロと相談しながらできるヤバいインターンでした…(勝手にやっただけ)

無限にやることがあって、無限に時間が足りなくて

マジで自由度がSkyrim PC版くらいあったな…

皆…行こうな

DMMにインターンに行った、オフィスには行ってない

完全オンラインでDMMの就業形インターンに行ってきました。オフィスに行かなくても就業形インターンできました。

Androidエンジニアとして約一ヶ月半の間、動画配信事業部でお世話になっていました。

今後、DMMのインターン行こうか迷ってる人向けに、オンラインインターンで気をつけたいことや、どんな環境だったか、インターンでなにが得られるのかを書きます。

結論から言うと、行ったほうが良いぞ

どのように出会ったか

最初は、サポーターズのエンジニア向けイベントを利用しました。

特に1 on 1面談というイベントでは、オンラインで一日10社の人事の方やエンジニアの方と気軽にコミュニケーションを取ることができます。

私はそのイベントで、今まで自分が作ったものを紹介し、作った理由や背景の話をしました。

その際、ぜひインターンとして来てほしいとのオファーを頂いた会社のうちの一つがDMMでした。

なぜDMMを選んだのか?

最初にDMMをインターンとして選んだ理由は、スケジュール的な理由でした。

DMMでは私のスケジュールに無理なく組み入れられるよう、柔軟にインターンの日程や形式を変更してくれました。

私は大学で実験が多くどうしても、週2~3回で都心のオフィスに通うことは不可能です。

自分にはスケジュールの点で問題があることを、DMMの人事の方に相談したところ個別対応をしてもらえることになりました。

不測の事態にも素早く対応できる柔軟さに、DMMのTech Companyへ向けた本気度が伺えました。

DMMでは2020年7月現在、8~9割の社員が基本リモートで働いています。入社の手続きを全てオンラインで行う体制が整っています。

入社に関する手続きで紙の書類を書いたことは一度もありませんでした。Mac Book Proとモニターを郵送で貸与してもらい、家から一回も出ることがないまま仕事を始めることができました。

入社までのプロセス

サポーターズのイベント加え、入社前に一度だけ面接を行いましたが、面接担当はあの釘宮さん(@kgmyshin)でした。

同じ福岡出身というのもあり、Androidに関係ないような話で盛り上がり、あっという間に1時間ほどの面接が終わりました。

業務内容

入社してからは、現場のエンジニアの方と全く同じレベルの業務を行いました。

私は動画配信アプリの動画プレイヤー部分のリニューアルを主に担当しました。

困ったときは、社員の方に相談させていただきながら、

クラスの設計、ライブラリの選定、レイアウトの作成からイベントハンドリングまでをほとんど一人で行いました。

インターン期間中に全部を完成させる事まではできませんでしたが、非常にチャレンジングで楽しい課題でした。

DMMに行くべき理由

DMMに行ってから、初めて分かったDMMのいいところを共有しておきます。

情報の蓄積

社内には社内外に向け積極的にアウトプットを行っている釘宮さん(@kgmyshin)やsetoさん(@seto_hi)他、優秀なエンジニアの方が在籍しています。

内部向けの情報集積所のような物があり、この部分にアクセスすることで便利なtipsや最新情報を得ることができます。

また自分が現場で業務を進めるにあたって疑問に思っていることについて質問したところ

社内のエンジニアの多くの方々から質問に回答していただきました。

どれも実務と経験に基づいたアドバイスで非常に勉強になりました。

裁量の大きさ

私は動画配信事業部に配属されましたが、動画配信事業はDMMの事業の中でも最も重要なプロダクトの一つです。

特に今回担当した動画プレイヤー部分は、このアプリの心臓とも言える部分です。

私であれば、インターン生に担当させたいとは思いません。

失敗すること前提で、失敗しても問題ないプロダクトの、失敗しても問題ない部分を担当させると思います。

しかし、DMMではこの重要な部分を一ヶ月ちょっといるだけの私に、設計の部分から任せてくれました。

設計やライブラリ選定に関しても、一切口を出す事無く私のやりたいようにやらせてくれました。

このように重要な場所を任せて期待してくれているのだから、絶対に応えたいと思える環境でした。

なぜ?に答えられる

ある一部分を、指定された対処法で改修する仕事を任されたときのことです。

私にはその対処法で問題が解決するとは思えず、行うべきでないと思いました。

私は何度も何度も質問し、社員の方は何度も何度も答えてくれました。

しかし、どうしても自分の勉強不足で理解できない部分があり、自分にはどうしてもやったほうがいいと思えませんでした。

最終的には実装者の私の考えを尊重してくれました。

DMMでは上から何かを押し付けられるようなことは一切無く、全て対等に話し合う事ができました

気をつけたいこと

オンラインインターン特有の気をつけたい事を、発見したので共有します。

聞く事を恐れるな

会社は勉強をしにいく場所ではなく、自分のコードで新しい価値を生み出す場所です。

自分で調べても分からない部分があれば、遠慮なく自分の直属のメンターだけでなく、色んな人に聞いて回ってもっと先に進む方が良いなと思いました。

オンラインだと、分からないと言わないと全く伝わらないので特に気をつけたいです。

議論を恐れるな

常にもっと良い解が出せないかを考えて、思いついたことがあれば、それを伝えてみるのがおすすめです。

その考えと根拠をしっかり紙などに書いて伝えると、建設的な議論がしやすいです(もちろん世の中にはどうしようもない場合もあるので臨機応変に)

オンラインはコミュニケーションが不足しがちなので、積極的に自分から話しに行くように気をつけたいです。

DMMに行こう

自分は、技術についてはそこそこ分かっているつもりでしたが、それでも知らないことが沢山ありました。

DMMは向上心があれば無限に成長できる環境なので、行くと必ず何か得られるものがあるはずです。

カフェイン断ちをしても集中力は増さなかった

カフェイン中毒だった私がカフェイン断ちを実行してみた。

その結果、やはりもう一度カフェインを摂取することに決めた。

カフェインって本当に害なの?断ってみたメリットってあるの?と思っている人に向けて

どんな感じだったのかを記録しておこうと思う。

私は多分カフェイン中毒だ。

最近ではカフェインの錠剤を買って飲んでいる。

錠剤であればコーヒー一杯分が約2円である。

安い上に淹れる手間が一切ない、更にコーヒーみたいに歯に色素が沈着して黄色くならない。

などメリットなら山程あるが、そういえば特にデメリットを感じたことがない。

小学校の保健体育で「黒くなった肺」「黄色い肝臓」、「萎縮した脳」は見たことがあるが、カフェイン中毒の実害は見たことがない。

本当に体に悪影響がないのか

本当に体に影響がないかは知らなかったので、少し調べてみた。

gigazine.net

よくメリットとしてあげられる、眠気覚ましの作用だが

どうやらカフェインは、眠気を引き起こすアデノシンの受容体を競合的に阻害するため眠気をあまり感じなくなるらしい。

しかし、日常的にカフェインを取りすぎると脳はアデノシン受容体の量を増やすため、以前と同じ量のカフェインを摂取しても効かなくなってしまい量が増えていく。

ここではカフェインを摂取するデメリットとして、心拍数と血圧が上昇し、利尿作用や下痢や不眠をもたらす可能性が挙げられている。

心拍数と血圧に関しては元からそこまで高くないのであまり気にしていないのだが、不眠に関してはやや思い当たる節もあった。

断ってみた

長期休暇を使ってカフェインを断ってみる事にした。

事前にカフェイン断ちについてリサーチをしたところ、カフェインを断って2~3日頃に眠気や頭痛などの症状がピークになるらしい。

5日経つ頃には楽になると書いてあるものが多かった。

今回は試しに一週間程カフェインを断ってみる事にした。

カフェインを含むお茶やチョコなどは禁止で、飲みたくなった場合は水を飲むというルールで行うことに決めた。

結果

結果としてカフェイン中毒者がカフェインを断つと

  • 集中力がなくなる

  • ゲームすらやる気が無くなる

  • することがないから寝るしかなくなる

  • 睡眠の乱れが改善されることはなかった

  • 断った後は少量のカフェインで覚醒できる様になる

ということが分かった。 断続的にカフェイン断ちを行うことで、自分の体に耐性をつけさせないのが最も有効的にカフェインと付き合う方法なのではないだろうかと考えている。

※追記 coffee.ajca.or.jp (健康に良いという話もあるけど、ポリフェノールを取るだけならぶどうジュースでいいから、コーヒーに特異的に癌を抑制する効果があるわけではないなと思った)

議論とは相手を言い負かすゲームではなかった

去年、D・カーネギーの「人を動かす」を読みました。

この本を読んで、私はいままで議論の際に相手を理屈で言い負かそうとしていたと気づきました。

私以外にも議論とは相手を言い負かすゲームだと信じている人は多いと感じています。

しかし皆が議論を避けた結果、会議は「誰もが考えるいいアイデア」を「誰もが考えるいいアイデア」だと、もう一度確かめる作業になってしまっているとも感じていました。

私はこの相手を言い負かすゲームを、アイデアを生み出すゲームに変える2つの方法を見つけました。

議論をするときは、何度も私はあなたのことが嫌いなのではないと伝えます。

何か議論をする時、相手は多かれ少なかれ「この人は私のことが嫌いなんだ」と感じています。

実際、相手に「不備を教えてくれてありがとう」や「考えさせてくれる機会をくれてありがとう」など、自分の感謝を伝えるとみるみる相手の顔が明るくなり、場が和むのがわかります。

どんな人も「自分のことを嫌いな人は嫌い」なので、この勘違いは一刻も早く解消できるよう努めています。

積極的にコミュニケーションを取り疎遠にならないよう気をつけています。

顔を合わせづらいような雰囲気な気がしても、それは勘違いのことが多いです。

この勘違いを放置して、本当に顔を合わせないと勘違いはどんどん現実になっていきます。

そこで積極的に交流の機会に相手を誘い、自分は顔を合わせづらいなんて思ってないと暗に伝えることで

相手を安心させることができ、勘違いを防ぐことができました。

実際に今回記したような方法で、コミュニケーションの心理的コストが下がり

決定事項を確認するだけの会議から、意見を出し合う会議に変えることができました。

OpenCVでカメラが動かない時の対処法

PayPayのQRコード読みとりめちゃめちゃ早いですよね。

既存のQRコードを読み取るアプリより、速いアプリを作ろうと思っています。

QRコードを読み取るにはZXingより、OpenCVの方が速いと聞いたので今回はOpenCVを採用しました。

しかし、大きな落とし穴があって(?)

OpenCV Android SDKのbuild.gradleに公式が記述している通りにインポートを行っても、うまく使えるようになりません。

具体的にはカメラを使おうとしても、onCameraFrameが呼ばれず映像が帰ってきません。

公式が記述している方法は、多くの方が解説してあるものと同じです。

qiita.com

Twitterで「Kotlin Android OpenCV」などと検索しても、同じように困っている方が見つかるだけで解決した方は居ないようです。 (豆知識ですが「from:xxxxxx until:2019-09-25」で検索するとその人のツイートのその後の経過がわかります。) f:id:WEBIFRY:20200312162555p:plain f:id:WEBIFRY:20200312162603p:plain

結論から言うと、OpenCV 4.1.0のAndroid SDKを使えばこの問題を回避できます。

対症療法的な対策ではありますが、とりあえずは動くようになります。

NDKとハードウェア絡みは思い当たる原因がありすぎて、問題の切り分けがめんどくさいですね。

問題の根治法がわかったら、また追記します。

追記 2020-5-10

Firebase ML kitのほうが早いわ