ちょっとずつ進む

常にWhat's upの精神

オレオレ証明書でhttps化を試す

オレオレ証明書とか言ういい感じの名前がついてるやつ、聞いたことあるし、よく開発とかで設定されてるけど自分でやってみたことないからやってみた。
ちなDockerでやる感じです。

基本的には下記を参考にしてやりました。
超絶わかりやすかった。 https://katekichi.hatenablog.com/entry/2017/06/14/docker_for_mac%2B_nginx%2B_オレオレ証明書でローカルSSL環境を作った

上記そのままやると多分nginx:latestのバージョンの違いかなんかでうまく行かないとこがあったんで書いておきます。

修正が必要なとこ

app.confaccess_logerror_logを指定するところが、 /var/logs/access.logとかになっているが、そのままだと「そんなディレクトリ無いよ」ってことでエラーになってコンテナが落ちちゃう。
なので、access_logerror_logは下記の様に変えて上げる必要がある。

app.conf修正例

access_log    /var/log/access.log;
error_log     /var/log/error.log;

それとapp.conflocation設定で下記のようになっているが、Dockerfileの方では、/var/www/htmlになってしまっているので、それも下記のように治す必要がある。

app.conf

  location / {
    alias /var/www/;
  }

Dockerfile修正例

ADD ./html /var/www

たぶん上記をクリアしたら動くはず。
完成品
https://github.com/Yuto-M/study-oreore-certificate

退職やで!

約9ヶ月働いた今の会社を7月いっぱいで退職することにしました。
そもそも半年くらいしたら辞めようと思っていたので、まぁ時が来たなって感じがする。
とりま、どんな会社だったかを書いてみました。

業界

ナイトレジャーと言うなのエロ業界。
職場でおっぱいを見ない日はない(リアルでは見ない。PCのモニターで見る)。

社風

忙しくないので全体的に穏やかで、感じのいい人が多かった。
働き方に自由度はほぼなく、リモートワークや使用するPCが選べるみたいな今風?の制度はなかった。
エンジニアでも別に特別な扱いはなく、バックオフィスの職種の1つみたいなもんとして考えられていたと思う(この考え方めっちゃクソだと思う。死んでほしい。くたばって欲しい)。
エンジニア職の人に限って言えば、技術的なものに関する興味・関心は低い人が多かった気がする。
これは上記のエンジニアを特別視しない社風が影響してる気がした。
別に技術力上げても待遇等が他と変わらないなら大抵、人間頑張らないからね、仕方ないねって感じ。
ただ、中には技術力を上げようと頑張っている人もいたので、やっぱ世の中最終的にはそいつ次第なんだとも思た。
他の部署の人がどんな感じなのかは知らない。全然話す機会無い。同じとこにほぼ毎日通って、顔を合わして、認知しているのに、会話はほぼしない。
これが現代Japanの闇。

ちなみに残業はない。残業代がでないのではなく、残業はなしで働く慣習が出来上がっていた。ただ、自主的に残って作業している人もたまにいた(残業代請求しないのに残るとかこれも現代Japanの闇)。

一応エンジニアなので技術的な部分で感じたことも書く。

技術的なこと

10年以上前に作ったシステムは技術的負債の部分が大量にあり、ここ2・3年で作ったぽいシステムとではだいぶ感じが違った。
全体的に、フロントエンドは古いのも新しいのもシッチャカメッチャカだった。なのでこの部分ではほぼ勉強になることはなかった。
バックエンドに関しては、最近作った感じのシステムは、ちょっとシッチャカメッチャカだけど、作り込んでいる部分は結構勉強になることが多かったので良かった。
昔作った感じのシステムの技術的負債はエグかった。けど、これもアンチパターンをリアルに体験できてそれなりに勉強にはなった気がする。
作業的には運用・保守が多くてたまに大きめの機能追加する感じだったので、スクラッチで作る機会が1回くらい欲しいとは思った(自分で考えてやるスクラッチが一番楽しいよね!やっぱ家でやんのが一番だよね!)。

また、手作業の作業で凄い工数がかかる作業があったが、そういうのを時間と人をかけてなんとかしていくっていう傾向が多かった。
これはマジクソだと思う。紛うことなきうんこ。うんこofうんこ。
そういうのはバイトか運用担当の人を雇ってほしい。エンジニアがやるべきじゃない。モチベ下がる。
手作業に慣れるとちょっとしたことは気合でなんとかしようとする癖がついて工夫しなくなりがちで、エンジニア的にダメになる気がする。
俺はあんまりやらなかったが。

一応お仕事としてやっていたのでお金についても書く。

お金

前職は未経験からのエンジニアスタートだったからそれに比べたら結構上がったと思う。ただ、IT業界全体と比べるとちょい安くらいな気がする。
昇給はほぼないようなものなので上がる見込みもあんまりなかった。
1年間凄い勉強して技術力を上げてもそれが評価されて給料が凄い上がるとかは無いと思われる。技術力が金につながらないのは悲しい。給与交渉もほぼ意味ないらしい。
多分お金は女の子と営業みたいなスタッフが一番もらってると思われる。
安い給料で働くエンジニアが消えない限りエンジニアの給料は上がらない。
これは罪。いつか別の記事でエンジニアの給料について書きたい。

つまり

全体として楽だが、それほど給料がもらえるわけではなく、技術的にも挑戦的ではないし意欲的な会社でもなかった。
可もなく不可もなく仕事をこなし、
気がついたら結構年取ってた!
けどあんまり変化ないな!

的な感じになりそうな会社だなっていうのが最終的な感想。

次の会社に入るまでに1ヶ月くらい時間があるからなんか作りたい。
家で作るのが一番楽しい。
作ったものを人に話すのはもっと楽しい。
そういうこと。

cloud firestoreのconsole画面でドキュメントが確認できないエラーが起きちゃった時

特になんにもしてないのにドキュメントのところにエラーがでて、 データが確認できなくなった時、セキュリティソフトにカスペルスキーを使用してたら、一旦カスペルスキー停止してリロードしてあげると直るっぽい。 f:id:Yuto_M:20190615001723p:plain

ちな、macだと画面の上の方にカスペルスキーのアイコンみたいなやつがあってそれクリックして、「保護機能を無効にする」をクリックするとカスペルスキー停止できる。


stack overflowに同じ問題みたいなのがあった https://stackoverflow.com/questions/50674482/firebase-firestore-firestore-5-0-4-could-not-reach-cloud-firestore-backend

あの便利すぎるfirebaseで、firebase init したらHTTP Error: 401が返ってきちゃう時

firebase initしたらなんかエラーが出ちゃってマジfuckって感じの人の役に立ちたい。
ちな、自分のfirebase cliのバージョンは6.10.0でした。

こんな感じのエラーが出ちゃう

Error: HTTP Error: 401, Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

結論から言うとログインし直すだけでいけるはず、てか行けた。

対応方法例

# firebaseからログアウトして再度ログインし直す
firebase logout
firebase login

# firebase initで初期化
firebase init

原因としては、firebaseの認証tokenの有効期間が大体1時間くらいで切れちゃうかららしい。
みんな大好きstack overflowにそれっぽいのがあった。

stackoverflow.com

firebase便利ぃぃぃ

実践ExpoのCounterを作っていてエラーが出ちゃう問題

react native勉強しようと思って本買って写経してたらエラーになったのでその解決方法。
ちなこの本。

f:id:Yuto_M:20190503211505p:plain:w100

2章のcounterのプログラムをreduxで作り直すところを写経し終わると下記のようなエラーが表示される。
ちなsnack環境での話。

エラー内容

Device: (1052:881) c.default.memo is not a function. (In 'c.default.memo(w)', 'c.default.memo' is undefined)
  Evaluating module://containers/RootContainer.js.js
  Evaluating module://App.js.js
  Loading module://App.js

ググってみたらreact-reduxのversionv7.0.1からconnect()が内部的にReact.memo()とかいう処理を行う仕様になったからエラーになっているぽかった。
参照元
https://forums.expo.io/t/react-default-memo-is-not-a-function/21623/5

なので、react-reduxのversionを古いやーつに変更してみる。
具体的には、package.jsonの内容を下記のように変更する

"react-redux": "7.0.3", ←こいつを
"react-redux": "6.0.1", ←このバージョンに変更する

修正後package.json

{
  "dependencies": {
    "react-dom": "16.3.0",
    "react-native-paper": "2.2.8",
    "react-redux": "6.0.1",
    "redux": "4.0.1",
    "styled-components": "^3.0.0"
  }
}

エラーが解消されていい感じに動いてくれたのでおk。

react nativeで開発する際の環境はどれがいいのって話

ざっくり結論

react native、react native expo(以下expo)、react native snack(以下snack)と色々あるが、どれがいいのかいまいちわからないので調べてみた。
ざっくりいうと下記表の感じで選択すればいいと思う。
個人的にはexpoが一番良さげ。

環境 適している人
react native 色々複雑な機能を実装する必要がある人。ネイティブコードも必要があれば書くくらいの勢いがある人
expo そこまで複雑な機能は実装しないが、スマホアプリ作ってみたい人
snack とりあえずどんな感じか試してみたい人

各環境の違い

  • react native
    • 公式サイトにあるように、JSとReactを使用してnative mobile appを作れるやつ。expoやらsnackやらを使用しない素の環境(というよりはライブラリ)。
      これだけで作る場合は、XcodeAndroid Studioの設定が必要になる。
  • react native expo
    • react nativeで開発する際に開発しやすいように提供されているツール。XcodeAndroid Studioのインストールや設定をせずにreact nativeの開発を可能にしてくれる。
      割とこれをオススメする人が多い気がする。
  • react native snack
    • ブラウザ上でreact nativeの開発ができるツール。イメージ的にはcloud9みたいなやつ。
      react native試しにやってみたい的なノリなら一番手軽な気がする。

それぞれの環境を選んだ際に気をつけること。

一番違うのは実装できる機能に差があること。特にreact nativeとexpoでは、結構違う感じ。
expoは開発しやすいようにSDKが提供されているがそこに含まれていない機能は使用できない。
2019/4/30時点では、バックグラウンドで実行される処理(音楽再生やプッシュ通知等)やbluetoothとかWebRTCとかはexpo未対応。
ちなみに公式では、順次対応していく予定らしい。

上記機能を使用したかったらexpo使わないでnativeコード書く必要があるかも??
また、snackで作成したプログラムは基本的に公開されるのでそこも注意。

個人的にはsnackで試しにやってみて開発するならexpoでやればいいと思う。
複雑な機能を実装したかったら、面倒くさいけどswiftとかkotolin勉強するしかないねって感じ。

そこまでやる必要あるのって感じ。

SQL50本ノックの環境構築をしようとしてサポートページからダウンロードしたシェルスクリプトを実行するとエラーになってしまう問題

SoftwareDesign2017年11月号の特集にあるSQL50本ノックをやろうとして公式サイトから環境構築のためのシェルスクリプトをダウンロードして、下記コマンドで実行しようとするとエラーになる。

実行コマンド

sh postgres_initialize.sh

エラー抜粋

Step 2/5 : RUN apt-get update &&   apt-get install -y wget unzip &&   wget https://ftp.postgresql.org/pub/projects/pgFoundry/dbsamples/pagila/pagila/pagila-0.10.1.zip -O /tmp/pagila-0.10.1.zip &&   unzip /tmp/pagila-0.10.1.zip -d /tmp &&   cat /tmp/pagila-0.10.1/pagila-schema.sql |   grep -v "CREATE PROCEDURAL LANGUAGE plpgsql" > /docker-entrypoint-initdb.d/pagila_init.sql &&   cat /tmp/pagila-0.10.1/pagila-data.sql >> /docker-entrypoint-initdb.d/pagila_init.sql
 ---> Running in 02819260eb91
Get:1 http://security.debian.org jessie/updates InRelease [44.9 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://apt.postgresql.org jessie-pgdg InRelease [56.5 kB]
Get:3 http://deb.debian.org jessie-updates InRelease [7,340 B]
Get:4 http://deb.debian.org jessie Release.gpg [2,420 B]
Get:5 http://deb.debian.org jessie Release [148 kB]
Get:6 http://security.debian.org jessie/updates/main amd64 Packages [825 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9,098 kB]
Get:8 http://apt.postgresql.org jessie-pgdg/main amd64 Packages [204 kB]
Get:9 http://apt.postgresql.org jessie-pgdg/9.6 amd64 Packages [1,690 B]
Fetched 10.4 MB in 6s (1,594 kB/s)
W: Failed to fetch http://deb.debian.org/debian/dists/jessie-updates/InRelease  Unable to find expected entry 'main/binary-amd64/Packages' in Release file (Wrong sources.list entry or malformed file)

E: Some index files failed to download. They have been ignored, or old ones used instead.
The command '/bin/sh -c apt-get update &&   apt-get install -y wget unzip &&   wget https://ftp.postgresql.org/pub/projects/pgFoundry/dbsamples/pagila/pagila/pagila-0.10.1.zip -O /tmp/pagila-0.10.1.zip &&   unzip /tmp/pagila-0.10.1.zip -d /tmp &&   cat /tmp/pagila-0.10.1/pagila-schema.sql |   grep -v "CREATE PROCEDURAL LANGUAGE plpgsql" > /docker-entrypoint-initdb.d/pagila_init.sql &&   cat /tmp/pagila-0.10.1/pagila-data.sql >> /docker-entrypoint-initdb.d/pagila_init.sql' returned a non-zero code: 100

解決方法

ググったらそれっぽいのがあった。 https://superuser.com/questions/1423486/issue-with-fetching-http-deb-debian-org-debian-dists-jessie-updates-inrelease

上記を参考にして、公式サイトから落としてきたDockerfileにコマンドを追記してあげる。 追記する箇所は、Dockerfileの「FROM postgres:9.6.5」と「RUN apt-get update && \ ・・・」の間。

Dockerfile追記例

FROM postgres:9.6.5

# 追記するコマンドここから
RUN printf "deb http://archive.debian.org/debian/ jessie main\ndeb-src http://archive.debian.org/debian/ jessie main\ndeb http://security.debian.org jessie/updates main\ndeb-src http://security.debian.org jessie/updates main" > /etc/apt/sources.list
# ここまで

RUN apt-get update && \
  apt-get install -y wget unzip && \
  ・・・
  ・・・

追記したコマンドは、apt-getでパッケージを取得する際にダウンロード先を別の場所から取得するようにするためのコマンドらしい。 /etc/apt/sources.listがダウンロード先を指定できるファイルで、編集したらapt-get updateでアップデートをする必要があるので上記の位置にコマンドを追記したらうまいこと動いてくれるっていう感じ。

追記したらシェルスクリプトを実行してあげて、postgresにloginできたらOK。

参考 /etc/apt/sources.listについての説明 https://www.garunimo.com/program/linux/_etc_apt_sources_list.php