エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

2019/12/02週 気づきと振り返り

業務こなしての問題・気づき

macgithubの大文字小文字の区別

swiftで小文字始まりでプロジェクトを作って進めてしまい、swiftlintを適用した際に、大文字始まりに変えろと怒られた。
それで、大文字始まりに変えてgit addしようとしたら、差分が出てこなかった(気がする。時間がたってしまったので覚えてない。。。)

ディスクのフォーマットを確認したら、APFSの大文字小文字を区別しないになっていた。。。
この場合は、リネームは、git mv を使って、一回別な名前のフォルダに変えてから、本来変えたいフォルダ名に変えるとできる。

この回答に辿り着くのに、かなり時間がかかった。。。

参考サイト

https://dev.classmethod.jp/etc/mac-apfs-ignore-case/

Jenkinsのジョブコピー

{Jenkins_Home}/job配下に、ジョブ名のディレクトリがあるので、それをコピーした後、jenkins再起動でコピーしたジョブのコピーができる。

なんか、邪道っぽい気がしないでもない。
これが頻発するようなら、ジョブ生成を自動化するほうが無難な気がする。

参考サイト

kakakikikekeのブログ: Jenkinsで他のJenkinsにジョブをインポートする方法

Jenkinsの履歴削除

  1. {Jenkins_Home}/job配下にある、対象ジョブのディレクトリ配下のbuildsを削除する。
  2. nextBuildNumberの内容を1にする。
  3. echo 1 > nextBuildNumber でやるのが簡単

参考サイト

kakakikikekeのブログ: Jenkinsでビルド履歴をすべて削除する方法

gstreamでOGGとmp4を組み合わせた結果

Gstreamでrtpで配信された映像と音声を合成するようなコマンドを作っていた。

音声をOPUSをOGGに変換して、映像はh264をmp4に変換して合成するようにしていた。
しかし、ファイル出力はされるが、Quick Timeで再生ができなかった。
いろいろ調べた結果、相性的な問題だったり、環境的な起因で再生できなかったりしている様子。

音声をOPUSからwav形式に変換して合成したら、うまく再生できるようになった。
wavにしたのは、サポートされている環境が多そうだったから。

とりあえず再生できたから、細かいことを気にするのは辞めた。
時間が取れたら、詳しく調査する。
年末あたりにできるかな?

雑記

アメ玉

喉が痛くなる季節になってきたので、よくアメ玉を舐めるようにしている。
ただ、なめると、すぐに噛み砕きたくなる。。。
ストレス溜まってるのかな?

ポケモン剣盾のワイルドエリア

これは、ヤバい。
中毒性が。

やり始めると止まらない。
マックスレイド回ってる最中に、シンボルエンカウントポケモンで新しいの発見したりすると、テンションが上がる。
ポケモンGoのゲーム内完結型だと思う。

2019/11/18週 気づきと振り返り

業務こなしての問題・気づき

マルチキャスト配信

ルータがマルチキャストに対応している必要がある。
IPv4はオプションなので、いまの段階だと確実性に欠けそう。

公式ドキュメント大事

ググった結果の情報が正しいとは限らない。
ググる前に公式ドキュメントを見るほうが大事。

gstreamerが分からん。。。

どれを使えば目的が達成できるのか分からん。。。

gst-inspectであたりをつけて、パイプラインでつなげて試す以上のいい方法はないのだろうか?

雑記

JJUG CCC Fall

行く予定だったんだが、家出た時の雨風の強さに断念した。。。
台風並みだった気がするが、他の人は大丈夫だったのだろうか?

資料はあとで読まなければ。。。

2019/10/28~11/4週 気づきと振り返り

業務こなしての問題・気づき

APIキーのベタ書き

Github等でソースコード管理している場合、コードにAPIキーをベタ書きするべきではない。
プライベートリポジトリであっても、誤操作で公開してしまうリスクがあるので、なるべく避けるべき。

普段のコードでも、ベタ書きはやらない方がいい。
受け渡しは、環境変数を使うなど、コードから間接的にアクセスするような手間をかけておくと、流出のリスクは減る。

rubyのThreadの生存確認

ライブラリ調査で、サンプルコードを試しているのだが、そのコードがrubyで書かれてあった。

Threadを使う機会があり、コードが動かなかったときにプリントデバックで確認していたら、スレッドの生存確認をしたくなった。
rubyでどうやるのか調べたところ、thread.alive?で確認できる。

最初、使ったときは、?を入れてなくて、実行時エラーになって、相当悩んだ。
最後の?がキモすぎだろ。。。って思ってしまった。

rubyで、Address already in use

rubyでソケット確率の処理を書いていたら、Address already in useが出てきた。
読んだ通り、すでに利用中という意。

macだったので、lsof -wni tcp:{ポート}で調査して対応した。

docker stopで全てのコンテナを止める

docker stop $(docker ps -q)で全て止められる。
何をやっているかと言うと、docker ps -qで起動しているコンテナのIDを取得して、そのIDを docker stop に渡している。
docker stiopは、複数のコンテナIDを指定可能なのでできる。

JenkinsでGithubからソースコード取得するさいのビルド指定子の指定なし

最終コミットを取得するようになる。

webAPIをcurlで叩く

No contents応答であることの確認は、レスポンスヘッダを見ないと分からない。

雑記

docker psのps

プロセスの略だと思われる。

最初見たとき、プレステ?フェイズシフト?とかの発想にしか至らなかった。。。

ブログの更新

毎週書く予定だったのに、1週間飛ばしてしまった。。。
金曜に書くように努力していたのだが、ついつい先延ばしにしてしまう。。。

これは全て、P5Rが悪い。
やり始めると、辞め時が分からない。
気づくとその日が終わってしまっている時がある。

まだ途中までしかやってないけど、オクムラパレス、ニイジマ・パレスのボス戦がキツかった。

シドウパレスは、現在攻略中。

ポケモンの剣盾発売前までには終わらせたい。
今月は、Gジェネもあるんだったな。。。
当分、休みは部屋から出ない日が続きそう。。。

2019/10/21週 気づきと振り返り

業務こなしての問題・気づき

Jenkins Job DSL

最近、Jenkins使ったCI環境の構築をしている。
jenkinsしている途中で、いろいろ動的な処理をしたくて調べていたら、Jenkins Job DSL が使えるんじゃない?ってなった。
でも、やりたいことができなくて、よくよくドキュメントを見ると、Jenkins Job DSLって、ジョブを作るための言語で、ジョブの処理を記述するやつじゃないじゃん!ってことに気づいた。。。

これで、1日潰してしまった。。。。

結局、シェルでガシガシ処理を作ることになった。
シェルが分からないわけではないのだが、いかんせん、記述方法が独特で、実装がかなり面倒くさいんだよね。。。

xcodebuildでBundle identifierを変える

Appleのフリー開発者アカウントで、Jenkinsのビルド設定をしていたのだが、いざビルドするとなると、No profiles for ‘XXXXX’ were found が発生していた。
ローカルでやるときは、勝手に変えてたけど、jenkinsでやるときにどう変えたらいいのか、結構迷った。

xcodebuild 時に、CODE_SIGN_IDENTITYPROVISIONING_PROFILE を設定してやれば、なんとか突破できる。

雑記

twitterの個人アカウントのフォロー

特定の個人のフォローは、情報収集という意味でフォローするのは、やめたほうがいい。
大抵の場合、どうでもいいツイートのほうが多くて、結構なストレスになる。

情報収集するなら、企業か組織のアカウントをフォローするほうが、無難。

呼吸を意識した睡眠

最近、なかなか寝付けなくて困ってた。
夜になると、悪いことばっかり考えてしまうんだよね。。。

いろいろ調べて試した結果、呼吸に集中して眠るって方法が一番自分に合ってた。
寝る前にゆっくりと深呼吸をして、呼吸することだけに意識を集中すると、すんなり眠れる。
呼吸を極めたら、俺も柱に成れるかな?

2019/10/14週 気づきと振り返り

業務こなしての問題・気づき

Could not locate device support files

実機にビルド&インスコしようとしたら、Could not locate device support files と出た。
エラー読む限り、デバイスのサポートファイルがないんだろうな~と思ったけど、どうやって対処したら良いのか分からなかったので調べた。

やることとしては、サポートファイルをAppleの公式サイトからダウンロードして、所定の位置に回答したフォルダを置くだけ。
macだからディレクトリって言うのかな?
どうでもいいけど、統一して欲しいよね、OSごとに名称が違うの。

ファイルを取りにく場所は、下記

GitHub - filsv/iPhoneOSDeviceSupport: Xcode iPhoneOS DeviceSupport files (6.0 - 13.2)

解答したディレクトリを置くは、下記

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

もしかしたら、Xcodeのアプリ名を変えている人がいるかもなので、そこは、適時読み替えて。
自分は、Xcode_<バージョン名>にしていたので、/Applications/Xcode_<バージョン名>.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/ だった。
現場で使ってるやつは、複数人と共有で使っていて、xcodeのバージョンが複数必要だったので、そうしてる。
オンリーワンなxcodeなら、一番最初に紹介したディレクトリでイケるはず。

参考サイト

【Xcode】実機で動かそうとしたらこんなエラーが出た時 - Qiita

callkitの実装

1ヶ月近く悩んでた。。。
ググってもいい情報が出てこないのがシンドい。
全部、一部分の実装だったりする。

いろいろ試して調べた結果、stack overflowで紹介されていたgithubのページで、サンプル実装していたページに辿り着いた。
それが、下記。

iOS-10-Sampler/CallKit at master · naandonov-mm/iOS-10-Sampler · GitHub

この中にある、CallkitManager.swiftを真似して実装した。
そうすると、すんなり実装できた。。。
たぶん、これを参考にする前は、providerやcontrollerのインスタンスをいっぱい作っていたので、制御できてなかったんだろうなと予想。

ググって情報探すってのがデフォルトだが、githubでサンプルコード探すってのも、視野に入れて探さないとダメな気がしてきた。
とくにサンプル実装となると、ブログに上がっているものより、一連の流れが実装されているコードをgithub内を探して方が、正確で実装しやすいものが見つかりそう。
今度からは、ググるで詰まったら、githubを探す習慣を身につけたい。

迷ったら問題を細分化

分かっているつもりでも、いざ実行ができてない。

初期開発で、callkitを入れ込んでたが、なかなか解決しなかった。
本来なら、callkitだけのサンプルプロジェクト作って、動きを学んでから取り込むように動けば良かった。
開発してたプロジェクトが複雑過ぎて、callkitだけを考えていればいい状態ではなかった。
俺の頭の性能の低さを、もっと自覚すべきだった。

雑記

英語ドキュメント読むようになって

swiftだから、基本英語でAPI読んだりしてる。
Google翻訳を使っているせいか、まったく英語のリーディングが伸びている気がしない。。。
なるべくGoogle翻訳使わないほうがいいのかもしれない。
単語調べるレベルで辞めておけば、英語のリーディングは上がるかな?
時間の成約が厳しくないのなら、試す。

週次の更新が滞った。。。

一回怠けてしまうと、そのままズルズル引きずってしまう。。。
習慣化できてなかったと、怠けてしまってから理解した。
特に、日曜に更新しようとすると、いろいろ言い訳を考えてしまい、結果、書かないになる。
記録を残すという習慣も、なおざりだった。
callkitでハゲそうになってたからかも知れないが、ネタのストックをする気が出なかったのがいたいな。

遊戯王デュエルリンクスでキングに昇格

やっとキングに昇格できた。
パーミ型の運命デスペ使ってたけど、すごい頭を使う。
止め時の見極めが面倒くさい。あと、勝ち急ぐと負ける。

キングになったはいいけど、キングで勝利数稼ぐのがシンドい。。。
100勝のウルレアチケットまで、遠いのがツライ。。。

2019/09/23週 気づきと振り返り

業務こなしての問題・気づき

githubでpush済みのコミットの修正

git commit --amendagit push -f

コミットを上書きして、それを強制プッシュするとできる。

IBAction

SwiftLintを適用して、変数名やメソッド名が大文字始まりだったので、リファクタリングした。
参照だけで動きに変更はないだろうと思っていたが、大文字から小文字始まりに変わったら、実行タイミングが変わった。

動きとしては、ボタンが押されたらsegueが動作するようなボタンだった。
大文字始まりのときは、IBAction→segueの実行になっていたが、小文字始まりに変えたら、segue→IBActionになった。

リファクタリングでメソッド名変えただけでも、きちんと動作確認をしないと、ダメなんだなって思ったのと同時に、なんで動作変わるんだ?ってものすごい疑問に思った。

Jenkinsで bundle command not found

Jenkinsでbundler使って pod install を実行しようとしたら、not found エラーになった。
bundlerは入っているから、見つからないはずないと思って見直したら、先頭行に #!/bin/bash -l がなかった。
追加したら動いた。

未だに #!/bin/bash の意味が分からないのだが、覚えたほうがいいのかな?

githubへのアクセス

sshだけかと思ったら、httpsでもアクセス可能。
今の現場は、sshの接続が制限されているらしく、相当悩んで居たが、httpsgithubからcloneしたら、難なくできた。。。
半日悩んでいたのは何だったんだって思ってしまった。。。

テスト仕様書の作成

開発研究の現場なので、あんまりテスト仕様書を書く文化はない。
だけど、状態を持つようになってテストケースが複雑化したら、作らないと流石にやばい。
いろいろ作って終わらせても、あとで後ろから刺される。

個人的な感覚としては、5ケース以上になるなら、テスト仕様書書いたほうがいいと思う。
僕の脳みそでは、4ケースくらいしか覚えられない。
メソッドの引数と一緒。5個以上になると、途端に、何番目にどの値だったか分からなくなる。

雑記

新型switchの購入

増税前に駆け込み購入。
ゼノブレイド2とセットで購入した。
ホムラ/ヒカリが可愛いなと思って購入したが、いつ出てくるんだ?
出てくる前に挫折してしまいそう。

ポケモン関連の購入

増税前に駆け込み購入その2
6期から3Dになったので、やるのを辞めたけど、やすかったから買ったポケモンXが面白かったから、ウルトラサン・ピカブイ・時の探検隊を買った。
メガシンカは、敬遠してたけど、リザードンXで無双するのは、楽しかった。
まだ、ウルトラサンやり途中だけど、メガシンカ並の楽しみはあるのかな?

ピカブイは、処理落ちが酷いとは聞いていたけど、かなり頻発するから、予約した剣盾がものすごく心配。。。
たぶん、エンカウントとあるき始めるとポケモンに乗るってのが処理落ちを発生させているのではないかと思う。
フィールドがでかいトキワの森は、エンカウントによる処理落ちだと思う。

時の探検隊は、1000円以内で変えるから買った。
不思議のダンジョンは、結構好きで、初代のポケモン不思議のダンジョンが面白かったのを思い出して買った。
まだやり途中。
switchで何か出すのかな?
先にトルネコ4を出して欲しい。

Vue.js + electron + その他もろもろの環境の構築

きっかけ

react + electronにしようか、angular + electronにしようか、いろいろ悩んだけど、一番楽に始められたvue + electron + element-ui に落ち着いたので、まとめる。
なお、自分向けなので、端折ってあるところがある。

環境

Visual Studio Code

バージョン: 1.38.1 (system setup)
コミット: b37e54c98e1a74ba89e03073e5a3761284e3ffb0
日付: 2019-09-11T13:35:15.005Z
Electron: 4.2.10
Chrome: 69.0.3497.128
Node.js: 10.11.0
V8: 6.9.427.31-electron.0
OS: Windows_NT x64 10.0.18362

npm

$ npm -v
6.4.1

前準備

vueの環境構築として提供されているCLIを導入する。
自分で1から構築すると面倒なので、楽な手段に頼る。

$ npm install -g @vue/cli

自分は、v3.11.0が入った。

$ npm -g ls --depth=0
C:\Program Files (x86)\Nodist\bin
…
+-- @vue/cli@3.11.0
+-- @vue/cli-init@3.7.0
…

環境構築

プロジェクト作成

$ vue create my-app

いろいろ聞かれるので、お好みで入れる。
僕は、manualでjs形式のプロジェクトを作成した。
前はtypescriptだったけど、最近は、環境構築面倒だからjsでいいやって感じになってる。
jsに慣れてしまうと、typescriptに戻ろうという気が起きないから不思議。

electron-builderの追加

このままだと、ただのvueプロジェクトなので、electronを追加する。
具体的には、下記のコマンド。

$ cd my-app
$ vue add electron-builder

動作確認

ここまでやると、とりあえずデモアプリが動かせるようになる。
なので、テストを兼ねて動かしてみる。

$ npm run electron:serve

コマンドが長いので、毎回打つのが億劫な人は、package.jsonscripts に、"start": "npm run electron:serve",を追加すると、次からnpm start で動かせるので楽かも

その他オススメの設定

element-uiの導入

element-uiは、高機能なUIパーツが使えるようになるコンポーネント詰め合わせライブラリ。
ちまちまコンポーネント作る手間が省けて、かつ、いい感じのコンポーネントが使えるようになるのがいい。

$ npm install element-ui -S

インストールが終わったら、main.jsにelement-uiのコンポーネントを読み込ませる設定を追加する。

import ElementUI from "element-ui";
import locale from "element-ui/lib/locale/lang/ja";
import "element-ui/lib/theme-chalk/index.css";

Vue.use(ElementUI, { locale });

あとは、vueファイルにコンポーネントを追加すれば、使えるはず。

設定ファイルを導入したい

electron-store を導入する。

https://github.com/sindresorhus/electron-store

設定ファイルは、デフォルトだと、C:\Users\<ユーザ名>\AppData\Roaming\<プロジェクト名>直下に、config.jsonができる。

プロジェクト直下にファイルを作って読み書きさせたいのだが、できないのかな?

感想

router.jsが、最初に見たときは、意味分からなかったけど、strutsで言うところのstruts-config.xmlかと思うと、結構、納得した。

element-uiが、意外とデザインが良くて気に入ってる。
最初作り始めると、デザインのダサさで四苦八苦してたけど、これ使えばそこそこの見た目でできるから、不要なところで悩む必要ないなと感じた。

参考サイト

Vue.jsのコンポーネント詰め合わせ「Element」がスゴかった | 綺麗に死ぬITエンジニア

Electron+Vue.jsを使ったデスクトップアプリ開発を始める手順

Electronで設定ファイルを導入 - Qiita