無気力生活 (ノ ´ω`)ノ ~゜

脱力系エンジニア。てきとーに生きてます。

logicoolのc270nってWEBカメラを買いました。

副業で請けている案件でリモート会議する必要がでてきたので、一番手軽に買えるこいつを購入しました。2000円しなかったはず。安い( ゚д゚)

今日届いたので、普段使うWindows10へセッティング作業していました。 特にマニュアル等付属していなかったので、サクッとUSBポートにつないでHangouts Meetで動作検証をします。



「カメラでエラーが発生しました」

なんでや(´・ω・`)

おそらくドライバが入ってないのでは?と探してみたんですが、公式のソフトウェアダウンロードのリンクが切れていたり、ネットを探してようやくたどり着いた先にあった

Downloads - HD Webcam C270 – Logicool サポート + ダウンロード

のソフトウェア入れても解決しなかったりと、原因わからず。



結論、Windowsのプライバシー設定でカメラのアクセスを有効にしていませんでした。_(:3」∠)_

Windowsの設定から、[プライバシー]>[カメラ]を開き

  • [ アプリがカメラにアクセスできるようにする]
  • [デスクトップアプリがカメラにアクセスできるようにする]

を有効にします。自分の環境ではこれでカメラが映るようになりました。



あ、これマイクもプライバシー設定いるやつだ 😇

wsl2でdocker-composeの風を感じてみる

最近、Linuxノートを利用して作業しているんですが、いいですねLinux。とても軽くて使いやすい。
エンジニアからすればこれほんと最高な環境だと思います(`・ω・´)

PCはこれ使ってます。eBayで4万くらいで買いました。
CPUのベース900MHzなので、Intelli JといくつかのDockerコンテナ立ち上げるとかなり辛さありますが、この程度のスペックでもRails開発はできています。



しかし、Linuxを使ってると、しんどいことがちらほら

  • ドライバ周り基本問題ないけど、USBハブのHDMIを使うとき認識しなかったりと微妙にハマりポイントがある
    • displaylinkとかenviとか触ってみたけど解決できず。本体のHDMI-microポート使ってなんとか回避してます。2、3度端子折りましたけど...
  • もともとManjaro LXDEでインストールした環境にi3wmを後から入れたため、GUIの設定周りが使えずコマンドラインで頑張ることになり、環境構築に時間が取られる
    • キーリピートとかキーバインドとかディスプレイ操作とか
    • ただしLinux操作の知識が多少ついた。学習という意味では無しではないが、ただ開発できる最低限の環境が欲しかっただけなのだ(´・ω・`)
  • Adobe系ソフト、Unityなどが使えない
    • 最近はWEBも便利で代替も生まれてきてますが、代替できないのもある。
    • モバイルに求めるものじゃないのかもしれないので優先度は低いんですが、いざ使うとなったときに選択肢がない



と、いろいろとめんどいことが発生するのです(´・ω・`)

多分おとなしくUbuntuいれておけば、ドライバの問題とか基本的な操作の部分は問題ないんでしょうか...外で気軽にコーディングするための環境がほしいだけなのに、いろいろと設定調べて反映していくの、ちょっと疲れますね、楽しいけど。



さて、そういうこともありLinux以外の選択肢を考えてみようと思ってました。とはいえ最近のMacはなんか微妙(´・ω・`) キーボードとか、3面ディスプレイの認識が不安定とか、ハードウェアのコスパが辛いとか。値段の問題もあるし。

そんなことを数ヶ月前からウンウン考えていたんですが、先月くらいにこんな記事が。

www.softantenna.com

以前、wslでdocker最低限動く記事を書きました。

gdgd-shinoyu.hatenablog.com

あのときはdocker-compose動かなかったのです。しかしwsl2ではLinuxのエミュレートではなく、Linuxカーネルが動いてます。そう、ここには普通のLinuxが存在しているのです。つまりdocker-composeも普通に動く。



最近の開発だと、Dockerさえちゃんと動けばどんなOS上でも開発は困りません。WindowsにちゃんとDocker動く環境が来てしまえば、Windowsに戻ってしまうのもありかなーと思ってます。



ここまでダラダラと書いてきましたが、結論としては、wsl2で問題なくdocker-composeが使えますよ!というお話でした。

# docker, docker-compose を最新のものに切り替えておく

# uname -a
Linux 4.19.43-microsoft-standard #1 SMP Sat Jun 1 16:36:16 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

sudo service docker start                                                                                                                                                                                             
 * Starting Docker: docker
   ...done.

docker-compose up

Starting etl_digdag_1 ... done
Starting etl_db_1     ... done
Attaching to etl_digdag_1, etl_db_1
digdag_1  | Error: Unable to access jarfile /usr/local/bin/digdag
db_1      | 190724 17:28:31 [Note] mysqld (mysqld 10.0.35-MariaDB-1~xenial) starting as process 1 ...db_1      | 190724 17:28:31 [Note] InnoDB: Using mutexes to ref count buffer pool pages
db_1      | 190724 17:28:31 [Note] InnoDB: The InnoDB memory heap is disabled
db_1      | 190724 17:28:31 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
db_1      | 190724 17:28:31 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier
db_1      | 190724 17:28:31 [Note] InnoDB: Compressed tables use zlib 1.2.8
db_1      | 190724 17:28:31 [Note] InnoDB: Using Linux native AIOdb_1      | 190724 17:28:31 [Note] InnoDB: Using CPU crc32 instructionsdb_1      | 190724 17:28:31 [Note] InnoDB: Initializing buffer pool, size = 256.0Mdb_1      | 190724 17:28:31 [Note] InnoDB: Completed initialization of buffer pool
...

マイクリプトヒーローズの作り方 参加メモ

techxgamecollege.connpass.com 行ってきました(`・ω・´)

暗号通貨ゲームプロダクトのリリースと運用周りの話、あまり表に出ることがない(と思っている)おり、貴重な会でした。
いろいろと興味深い話が聞けたので忘れないうちに記録しておきます。

聞いた数値は色々とぼやかしますが、もし出ちゃいけない数値や情報があれば、@shinoyu までDMください。

マイクリプトヒーローズとはどんなゲームなのか?

www.mycryptoheroes.net

ドット絵風味のRPG要素ありのゲームです。UIがリッチになった、古きブラウザゲーみたいなやつです。 クエストクリアしてレアアイテム掘ったり、イーサリアムを使って石買ったりキャラクター買ったりする、ERC721コントラクトを用いたDailyActiveUser・NFT取引量・NFT取引数で世界1位に輝いたDAppsアプリです。 もちろんNFT(Non-Fungible Token)を取り扱うゲームなので、 opensea.ioのようなNFT取引所で売買することができます。

この辺詳しく知りたい人は、 ↓が解説わかりやすいかと思います。 economies2.com

国内で開発していて、自分が遊んだDappsゲーだとかなりわかりやすいUIになってます。いいですね。
勉強会で話して頂いた数値関連。UUもDAUもそこまで多いわけではありませんが、リリースして半年?くらいでリクープ達成し大きく売上を上げているとのことでした。

開発は、フロント側がNuxt.js、バックエンドがGolang、DBはAmazonAurora。その間をgRPCで繋いでいるサービスですね。
スマートコントラクト部分は、みんな大好きSolidity。
最近のモダンな技術スタックを使いつつ、ブロックチェーンもやってるという、興味を惹かれる開発をされているそうです。

構成図

開発裏話

やはりすべてフルチェーンで実装はムリゲ

最初のベータ版、すべての処理をLoom Networkでフルチェーン開発していたそうです。 ただ、めちゃくちゃ遅い。結果、一部のNHT関連処理を除いてオフチェーン(いわゆる普通のWebアプリ)に、1月くらいかけて切り替えたそうで...

Loom Network、一般的なブロックチェーンより圧倒的に早くはあるそうなんですが、 loomx.io

サーバー数十台並べて運用する一般的なゲームアプリにはさすがに対抗できないらしく、せいぜいサーバー1台分くらいの処理しかさばけないんだそうです。
それをすべてブロックチェーン上で実装するとなると、到底捌ききれませんね(´・ω・`)

あと、cross-shardの問題もあったそう。
ETHは、ETHノード群を役割ごとに分けて並列処理するシャーディングというものがあるんですが、別shardにある者同士でトランザクションを行うと、どうしても相手側ノードが完了しないと処理が戻ってこない同期的な問題があるらしく、Shardの分け方も経験を問われるらしいですね。

シャーディングについての解説は下が詳しいかと思います。 lab.stir.network

また、フルチェーンだとゲームロジックをすべてSolidityでコントラクト上に実装しなくてはならず、そこも大変だったらしいです。
そのへんの事情が相まって、フルチェーンをやめて要所だけオンチェーン、それ以外オフチェーンで実装することでゲームとしてのUXを担保している。そんな話でした。

ETHノードのトランザクションを追いかける

あと、ブロックチェーンアプリであるある話として、オンチェーンのトランザクションの待ち時間。

マイクリプトヒーローズでは、コントラクトが走ったあと、該当のトランザクションを監視して完了したらオフチェーン上のDBに値を反映しているそうです。ただ、このコントラクトがETHノードへ伝搬されるのに時間がかかるらしく、ノードによっては安定して拾えないこともあるようで。

安定してトランザクションを追えるETHノードを知っておくことも大事だそうです。

gRPC-WEBでゲームを運用

フロントがNuxt.jsでバックエンドがGolangということで、この間の情報のやりとりはgRPC-Webで行っているそうです。
gRPCについては詳しく解説しないんで、各々調べてください。

結構面白い使い方してるなーと感じたのは、gRPC ⇔ JSONの相互変換をうまく使っているところでしょうか。DBに情報を保存するときはgRPCオブジェクトをJSONに変換して格納しているそうです。 MySqlではJSON型を扱えるんですが、変なJSONを弾いてくれたり、構造をそのまま維持してくれて正規化をしなくて済んだり。そういうメリットがあったと聞きました。

ただし、Golangで開発されているためOmitEmpty問題に悩まされたとのこと。 valueが空と認識されるとJSONからそのキー自体削除してしまう、ご丁寧な仕様がありまして。

qiita.com

上に記載あるように、整数の0もこの対象になってしまいます。
例えばアイテム所持数の管理を行っていたとして使用で所持0になった場合、キーが消えます。DBにJSONで格納する際に想定したキーが無いことによって、度々トラブっていると話されてました。

MCH+

マイクリプトヒーローズを開発した、double jump.tokyo さんが、MCH+という取り組みを始めたそうです。

www.mch.plus

ファイナンスなどの周辺も含めた開発支援プログラムだそうです。今後ブロックチェーンゲーム開発をチャレンジしようとしている人はお話してみると幸せになるかもしれません。

質疑応答・パネルディスカッション

興味深い話がちょくちょく出てきましたが、そろそろ書き疲れたので興味持ったところだけ抜粋です(´・ω・`)

  • 実装の公正性はどう担保しているのか?
    • コントラクト側の実装はGithub上で公開している
      • そもそもEthrscanでコード見れる設定でコントラクト作っている。
      • そのコードと実際のデータと、公開コードをみてもらって、確かにあってる、と考えてもらって運用している
  • infura.ioを使っていないのは?
    • 普通に使えるけど、たまにトランザクションのイベントが取れないことが月1くらいで発生するので使っていない。
      • お金を扱う以上死活問題。速度より安定している方を選択した。
    • 理想はinfura使いつつ、安定している方も用意して多重化しておくのが良い
  • ユーザー獲得どうしている?日本のユーザーあんまりいなくない?海外を前提にゲーム設計しないと難しいのでは?
    • 8割は日本のユーザーで思った以上に日本ユーザー率高い
    • Twitterに巨大なユーザーグループがあって、そこからの流入が多い
    • 日本が一番規制が厳しいが、そのおかげでどこまでビジネスしていいかの線引がはっきりしている
      • 海外ではまだNFTをどう扱っていくかも固まってないところが多い。ビジネスとしての先が不明瞭だと開発しにくいのでは?
    • DAppsゲームYoutuberなる人がいる。媒体として広まる可能性はあり
  • 今後のブロックチェーンゲームの将来ってどうなる?
    • 今はブルーオーシャンだけど、これまでのゲーム史と同じ感じになる。
      • 中小が勃興して数が増え、大手がお金で殴りにきて、海外勢が技術で奪いにくる
        • 年々サイクルが早くなっていて、あと4、5年くらいすれば今のアプリゲーと同じ感じになっているかも
        • 先に沖に漕ぎ出すことが重要。波打ち際で波にさらわれる前に沖にでて、そのジャンルで代表ゲームになることができれば安定するかもしれない

非常に濃い2時間でした。
私的にとても興味があったジャンルの話なので、質問も含め興味深い気づきが多くありました。

このような場を用意してくれた会場提供レバレジーズさんと、イベント運用のテクロスさん。あと登壇とパネルディスカッションされていた方々、ありがとうございました。(`・ω・´)

日本語でeBay商品が買い物できる「セカイモン」は果たしてどれだけお得なのか?

皆様、eBay使ってますか?(`・ω・´) 私は先日初めて使ってみました。購入周りでちょっとトラブルがあり、出品者とメールでのやり取りが大変でした...まあ、PayPalで英語の住所書いてなかった私が悪かったんですが。


さて、セカイモンの話。 今はECの広告の仕事やっている関係もあり、社内で他社EC関連の情報がそこそこ回ってくるんですよね。で、以下のようなニュースが舞い込み、セカイモンの存在を知ることとなりました。

prtimes.jp



セカイモン、eBay公認を謳っている通り、eBayの商品をそのまま買えます。

Webスクレイピングしているのかシステム連携しているか不明ですが、出品情報まで同じですね。全く同じ。これ見る限りだと、セカイモンのビジネスはECってよりeBay代行な認識ですね。

と思ったら書いてあった。
セカイモンではeBayでの検索結果から、日本に輸入ができないものを外して表示しています。
なるほど。

当然、直接eBayで購入するより商品金額は高くなります。出品者とのやり取りを代行している形なので手数料が間に挟まります。この商品だと5600円のものが9400円くらい。うーむ(´・ω・`)



一方、国際送料はセカイモンのほうが安いです。元が6300円の送料が4200円。送料安い理由はわからんですが、まとめて配送してもらって抑えてるのかもしれません。

トータルで見ると(この商品だと)、eBay直の11900円に対して13600円。
2500円くらいセカイモンが高くなります。販売者と直接英語でがんばるコストを考えてペイするかどうか。そこがマッチすれば使ってみるのはアリかもしれません。

他の商品も見てみる

Macbook pro

2017年モデルのMacbook Pro13。
eBay8.3万に対し、10.1万ほど。2万円くらい高いですね(´・ω・`)

iPhoneXR 128GB(Unlocked)

eBay10.06万に対し、12.1万ほど。
これも2万くらい高い。

HuaweiP30Pro 128GB

何かと話題のHuawei。eBay8.9万に対し、10.7万ほど。
これも1.8万とそこそこ高い。

The North Faceのパーカー

デジモノ以外も見ましょうか。

eBay側のセールも適用されるみたいです。これは50%OFF。eBay2.5万に対し、3.05万ほど。
これは5000円くらい高い。


手数料の率の法則性はあまり見えませんが、売れ筋の高額商品とかは手数料高めな結果になりました。_(:3」∠)_

結論: けっこうたかい

おいしい話はそこらへんには転がっていないものですね...

トータルだと、英語ちゃんと使える方にお金投資したほうが圧倒に安くなってしまう。
現実は非情であった。

わたしがほんとうにほしかったGolangはVだった

昨日、Vという開発言語の話が流れてきました www.pavlog.tokyo Golangを超えるググらビリティの悪いやつですね。

リリースされたばっかりの言語らしく。公式を見る限りドキュメントはしっかりそろっているので言語仕様はなんとなく読むことができました。 vlang.io

Golangっぽいなにかです。基本的な仕様はGolangに近しいですね。mutあたりはrustで見た記憶があります。
言語仕様を見る限りgoroutineもどうやら対応されているらしく、go {func}で実行できるようです。いいっすね。

個人的に気になっているやつはGenericsと、Access modifiers。enumも標準サポートいいぞぉ。
Golangでもできなくはないんですが、GenericsはDI的にオブジェクト突っ込み分けしないとできないし、Accessコントロールは先頭が小文字かどうかで決まるし、enumは結局constだしで、微妙に面倒くさかったんですよね(´・ω・`)
言語仕様シンプルなのはGolangのすごくいいところなんですが、稀に回り道している感が否めないときがありました。

さて、さっそくこいつを触って見るんですが、冒頭のの記事と同じようにビルドで死ぬ始末(ヽ´ω`) エラー内容見てみると、どうやらビルド内部でパスが固定されてるみたいっす。

/home/shinoyu//code/v/ not found. Run:
git clone https://github.com/vlang/v ~/code/v

Makefileを見ても特に変な記述はないんですよね。
https://github.com/vlang/v/blob/master/compiler/Makefile

しかたないので、githubに書いてある通りに、固定でパスを切って対応してやります。

git clone https://github.com/vlang/v ~/code/v
cd ~/code/v/compiler
make

はい通るー。固定か、うーん。まあいいか(´・ω・`)

できあがったものは./vで実行できます。が、いちいちパス指定するのは面倒なので、公式の仰せのとおりに/usr/local/bin以下にシンボリックリンク貼ってやります。
sudo ln -s ~/code/v/compiler/v /usr/local/bin/v これでいちいちパス指定しなくてもvだけで実行することができます。

実行するとREPLが動きますね。

V 0.1.0
Use Ctrl-D to exit
For now you have to use println() to print values, this will be fixed soon

>>> println('hello')
hello

はい。REPLだと今はprintlnしか動かないらしいっす(´・ω・`)ざんねん

ファイルに書いてそれを呼ぶ形式だとちゃんと機能します。とりあえずなにか動かしたい場合はv/exmapleの下にあるやつを実行すればOK。

v run example/news_fetcher.v
============running news_fetcher==============================
[20275705, 20273125, 20272346, 20274679, 20275051, 20275097, 20276070, 20274475, 20275684, 20270309, 20274035, 20275225, 20270990, 20275929, 20270840, 20273446, 20274666, 20275238, 20268368, 20269376, 20273936, 20270800, 20264911, 20268974, 20271322, 20270805, 20273228, 20271779, 20271821, 20272557, 20270969, 20272692, 20269293, 20266566, 20270467, 20264999, 20260863, 20267790, 20265155, 20269626, 20263561, 20260741, 20260292, 20264987, 20254057, 20261823, 20266932, 20262031, 20264848, 20266641, 20270728, 20266606, 20268203, 20268935, 20272074, 20269057, 20267629, 20265751, 20266031, 20261529, 20271043, 20266450, 20266878, 20266463, 20265625, 20265031, 20272082, 20262695, 20267599, 20265632, 20268040, 20265141, 20262253, 20262176, 20264602, 20259850, 20269041, 20257990, 20268436, 20259862, 20263089, 20264943, 2026275

取り急ぎ最低限動かすところまで持っていったのでここまで。
次回はGolangでほしかったものがどこまで対応されているか書きたいと思います。(`・ω・´)

Makuakeでサポートしたキーボード「Taptek」が届いた

これです。(`・ω・´) www.makuake.com

f:id:gdgd-shinoyu:20190617025549j:plain

これまで使っていたMajestic Minilaと同じくらいの大きさで半分の薄さ(下が今回のやつ) f:id:gdgd-shinoyu:20190617025527j:plain

持ち上げてみてもかなり軽い。カタログスペック的には500gくらいらしく、持ち運びする人には嬉しい重量。

打鍵感はとてもいい感じです。カチカチ感あるのと、軽く押し込んだだけで反応してくれるので軽やかな入力感ありますね。サイズが一回り小さいので誤入力が頻発していますが、じきに慣れるとは思います。

バランスが取れていて非常によいキーボードです。14000の価値十分にありますね!

こいつで一番オススメなのが、プロファイルを3つまで登録できるところですかね。
家でWindows, 外出Linux、会社Macの環境でもう一台のMinilaを持ち歩いて使っているんですが、前使っていたMinilaだと直近繋いだところを優先的につなぎに行くので端末切り替えるときが地味に面倒だったんですよね。結局つなぎ直さないといけないという。

その点こいつは、Fn+1-3キーで端末切り替えられるので手間が省けていいっすねー。

あとは有線とBluetooth両対応なのがいいです。メカニカルで両対応のキーボード数少ないんですよね。



概ね利用感には満足なんですが、使ってて気になったところがいくつか(´・ω・`)

  • Fnキーが左下に鎮座し、その右にCtrl
    • f:id:gdgd-shinoyu:20190617025440j:plain
    • ここはCtrlがいてほしい(´・ω・`)
    • めちゃくちゃ押しづらいので、caps lockにCtrl割り振って使うことに
  • 傾斜がない
    • 筐体を薄くするためだとは思うんですが、キーボードの裏面にあるあの傾斜がないんですよね(´・ω・`)
    • 小型なので大きく問題にはならないんですが、やはりこれまでと感覚変わるので違和感。
  • バックライトカラー変更キーを誤爆しやすい



気になっているのはこれくらいですかね。まだ一日も使ってないので継続して触ってみましょうかねー。

独り言チャンネルのすすめ

Slack使ってる人は今すぐできる。やろう。



かなり前の話ですが、こんな話題がありました。

c16e.com

世間的にはTimesで名が通っている分報。 恥ずかしながら、これ知ったの昨年末くらいでした(´・ω・`) その時はまだ有用性に気づいてなくって、「ああ、こんなやり方やってるところもあるんだなー」と感じたくらい。

私、今副業でお手伝いしている会社がありまして、そこでは他にも副業エンジニアとしてJoinされている多くのメンバーがいます。 副業先のSlackでは副業エンジニア用のパブリックチャンネルが用意してあって、そこでいろいろコミュニケーションしてます。そこで「稼働します」と表明して作業開始!みたいな運用ですね。

とある副業メンバーが、稼働スタートのスレッドにリアルタイムな作業の進行状態とか調べた内容とか、お気持ちを書いていくんですね。そこで出てきた話題に対して自然に社員とか他副業メンバーがコメントしていく。

あれ?これ意外とすごいんじゃない?という気持ちが湧きました。今その時困っていること、確認したいことを気軽に投稿でき、コメントする方も流れで背景とかがわかるので気軽にコメントしやすい。 人の質問に対してコメントするのって、相手の状況とか鑑みなきゃいけないので結構考えちゃうじゃないですか?独り言で状況が流れているならそれみれば良いので、レスポンスのスピードも上がる。

独り言書く方からみても、あくまで自分の気持ちとか考えを書いていくだけなので、見る人のことを意識する必要がないんですよね。だから正直に困ったことをかけるし、わからないことを分からんと言えるわけです。

各メンバーの善意で成り立つコミュニケーションから、お互いが抱える問題が自然に解決していく。すごく良い活動だと思います。



あと、個人的に一番有益だったのは作業のログを残せることですね。 作業している時の思考って、後から結構思い出せないんですよ(´・ω・`)ブラウザのタブを大量に開く癖のある人はわかるかもしれないんですが、その時何調べてたか覚えてないんですよね。なぜそれを調べようと思ったのか、何が困っていたのかを、あとから振り返ることは難しいんですよねぇ。自分だけ?

これが独り言を書いていくことでクリアになる。あとから調べたことをブログにするとかどこかに投稿するとかなったときでも振り返りやすく、改めて調べ直すこともする必要がなくなる。全てはそこに書いてあるからだ。

こういう気付きがあり、自分も 率先して独り言と言う名の分報を書くようになりました。



まだ試してない方、一度試してみましょう( ・`ω・´) おすすめです。