観る将エンジニアブログ

見る将歴8年のエンジニアの技術系ブログ。

迷いの殆どはコストが安ければなくなる

自分は優柔不断でm1 macbook airを買うのに丸3日かかってしまうたちだ。 なぜこんなに悩んでしまうのか自分でも理解に苦しむのだが、コストの問題ではないかと考えた。

たとえばmacbook airが50円だったらとりあえずポチって試してみる。 資産が1億あれば給料が安いけど魅力的な会社に転職するという選択もかなり現実的になる。 新しいプロジェクトの企画でも1000円でPDCA回せるならどんなクソな企画でも「とりあえずやってみれば?」となる。

すべて相対的な話であってその人の性格とは関係ない。 お金の余裕は心の余裕とはまさにこのことか。

じゃあ頑張って副業でお金稼ぐかと思い立ち、「何で稼ごう」とまた迷う今日このごろ。

永遠の悩みであるキーボード配列【JIS vs US】

数日前にm1 macbook airを購入したのですが、最後まで悩んだのがJIS配列かUS配列にするかでした。

結論JIS配列を買ったのですがそこまでの思考を書いていく。

キーボード配列歴: 高校生から15年JIS、エンジニア転職を機にUS3年、そして今回久しぶりにJIS配列に戻した感じです。

それぞれの配列のメリット

JIS配列

  1. 英語、かなの独立したキーがある
  2. 日本では一般的で自分以外のPCを使うさいに混乱しない

US配列

  1. エンターやデリートキーが右小指に近い
  2. 配列が合理的
  3. 見た目がスッキリしている

まずUS配列のメリットについて反論していく。

1. エンターやデリートキーが右小指に近い

ネット界隈ではやたらとUS配列推しの人が多いですが、 US配列の1や2は実際にJISとUSでタイピング効率に影響するかというとそこまで影響しないと思う。 タイピング競技でも日本一はJIS勢だし

2. 配列が合理的

配列に文句を言いだしたらそれこそキーマップ変換や左右分離型を検討すべきではと思ってしまう。 QWERTY配列自体にも合理性があるかといえば疑問。

3. 見た目がスッキリしている

そのとおりだが、タッチタイピングしていてキーを見ることはほとんどないし、最初に買ったときにいいなーと思うくらい。

次にJISの良さ。

1. 英語、かなの独立したキーがある

US配列のときはkarabinar-elementsというソフトを使って英語かな切り替えキーををcommandに割り当てていた。 これで普段使っているときは問題ないが、OSアップデートやこのソフト自体のアップデートがあるときに再起動やドライバを入れ直ししないと動かないことがあり、ちょっとしたストレス。

2. 日本では一般的で自分以外のPCを使うさいに混乱しない

これは人のPCを触ったり、自分のPCを子供に譲るときにも役立つ。 最近ubuntuに興味が出てきて中古のノートパソコンを買おうかと思ったのだが、日本の中古市場の99%はJISなので調達しやすさも◎。

まとめ

結局JISでもUSでも仕事の効率には影響せず、JISの独立したえいかなキーがあること、日本では一般的であることを加味してJIS配列を選択しました。

無理にUSにする必要はないのではないかなーというのが今の所感。

apple信者だったけどpixel4aが最高だった

大学のころからかれこれ10年間は熱心なapple信者でiPhoneは3GSから使ってきた。

格安SIMに乗り換えるときに魔が差してHuaweiに乗り換えたときもあったけどやっぱりiPhoneのスペックとは別の安定感、カクツキを感じさせないUXが好きだった。

去年の8月にスマホアプリ開発を個人で始めたこともあり、またAndroidスマホを購入しようと思い、軽い気持ちでpixel 4aを購入。 はじめはサブのつもりだったが、もったいないと思い1ヶ月だけ使ってみたらこれがとても良かった。

Pixel 4aのよいところ

  • バッテリー持ち。1日半くらい持つので余裕がある。

  • ポリカーボネート製。iPhoneはガラスでカバー必須になってしまい、ほぼ同じ重さだけどずっしりしてしまう。裸で使っても気にならないのは普段遣いするものとしてはとても大事な要素だと思う。

  • 文字入力に1文字戻る、進むボタンがある。文字の打ち間違えは頻繁に起こり、iPhoneの修正方法(修正文字あたりを長押ししてカーソルを合わせる)の手間に比べると圧倒的に楽。

  • 結局使うアプリがGoogleのものが多い。Google ChromeYoutubeGmail、マップ、フォト、カレンダーなど。特にiPhoneYoutubeAirPods Proを使ったときに停止=>再生すると数秒音と映像がずれることがあり地味にストレス。

  • Type-C端子は正義。Lightningとかいうapple納税端子は廃止すべき。

  • 3.5mmイヤホンジャックがついている。AirPods Proは取り回ししやすいのは確かなんだけど、片耳だけ聞こえなくなったり、接続が不安定なときがままあり有線イヤホンがメインになってしまった。iPhoneにはその選択の余地すらない。

  • ウィジェットの有用性。iOSにもようやくウィジェットが実装されたがまだまだの印象。とくにカレンダーは使いやすいし、サードパーティ製のウィジェットも有用なものが多い。

まとめ

普段遣いするときの気楽さとイヤホンジャックあるのが最高。

今までは全部appleに統一するのに無駄にこだわっていた。 けど連携機能を頻繁に使っているわけでもないし、自分の用途で冷静に判断するとpixel 4aがしっくりきてしまった。

Dartで独自のパッケージを作ってFlutterアプリから呼び出す方法

やりたいこと

Flutterで詰将棋アプリを作るときに、

と2つアプリを作りたい。

その上で肝心の局面から詰みを解析したり、手順を教えたりといったビジネスロジックを一つのパッケージにしたい。

そこで独自のpackge(tsumeshogi_solver)を作ってそれをそれぞれのFlutterアプリから呼び出す方法をまとめた。

手順

android studio で FileNewNew Flutter Projectの画面から Flutter package を選択する 。f[f:id:kz23szk:20191020190504p:plain]

ターミナルを開き、対象のディレクトリで 下記コマンドを打つ。

$pub publish --dry-run


Missing requirements:
* Your pubspec.yaml must have an "author" or "authors" field.
* Your pubspec.yaml is missing a "homepage" field.
Sorry, your package is missing some requirements and can't be published yet.
For more information, see: https://dart.dev/tools/pub/cmd/pub-lish.

初期状態では^のようにエラーになるので言われたとおり、 pabspec.yaml にauthorやhomepageを入れていく。

良さそうなら本番サーバにアップロードしていく。

pub publish

途中で認証するためにURLを叩けというメッセージが出るが、なぜかURLの途中で切れてしまっているのでURL全体をコピーして認証するとアップロードされる。 f:id:kz23szk:20191020202421p:plain

f:id:kz23szk:20191020202640p:plain

すっからかんのハロワ丸出しだけど一応できた。

f:id:kz23szk:20191020213801p:plain

Go言語のように手軽に公開できるわけではないけど、 右端のタブにスコアがついていてよいパッケージにするための情報をくれる。(テストやexampleを書けよとか)

結構親切なのでしたがって充実させようと思う。

自分のflutterアプリで使う

他のpackageと使い方は同じだが一応やってみる。

使うプロジェクト側のpubspec.yamlに使用するpackgeを記述する。

f:id:kz23szk:20191020214346p:plain

flutter pub get すると、importできるようになっている。

f:id:kz23szk:20191020214829p:plain

http://xxxx.comからhttps://xxxx.comにリダイレクト

前回https通信ができるようになった。

今回はhttpで来たユーザもhttpsにリダイレクトするようにnginxで設定します。

vi /etc/nginx/conf.d/default.conf(*.confでも良い)で設定ファイルを下記のように追記します。

+ server {
+      listen 80;
+     server_name xxxx.com;
+     return 301 https://$host$request_uri;
+ }

これでhttp://xxxx.comへアクセスが来たときhttps://xxxx.comにリダイレクトして返すようになります。

systemctl restart nginxで設定反映させるとhttp://xxxx.comhttps://xxxx.comにアクセスできるようになっているはずです。

ConoHaでSSL化対応してhttps通信できるようにする

今回はhttp://ドメイン名で表示できるサイトをSSL化対応してhttps://ドメイン名で表示できるようにします。

OS:CentOS7.4 (現時点でConoHaでの最新版です)

SSL化とは

http通信は情報がだだもれでデータを傍受されたりして安全とは言えない。

https通信は暗号化しており、セキュアな通信するために認証局からSSL証明書を発行してもらっている。

これでユーザが安心してブラウジングできるようになる。

うちのサイトは個人情報扱わないからいいやと思うかもしれないが、googleさんはhttpsのサイトを評価するらしく、

今後は検索順位に影響するらしいので必ずやっておいた方がいい。

SSL化手順

#ファイヤウォールがhttps通信を許可しているか確認
firewall-cmd --list-all | grep services
#  下記のようにhttpsが抜けているはず
#   services: ssh dhcpv6-client http

# https通信を有効にする
firewall-cmd --permanent --add-service=https --zone=public

# 再起動
firewall-cmd --reload

# certbot(SSL証明書を発行するツール)をインストール
yum install -y certbot

# 証明書を発行
 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 

#nginx側の設定を行う。/etc/nginx/conf.d/default.confを編集
vi /etc/nginx/conf.d/default.conf

下記のように設定。

server {
-    listen 80;
+    listen 443 ssl;
+    ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
+    ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

systemctl restart nginxで設定を反映させ、http://ドメイン名では表示されず、https://ドメイン名で表示すれば成功。

証明書の有効期限は3ヶ月なのでcertbot renewコマンドをクーロンで定期実行すればよいが、 このままだとこのコマンドが80番ポートを利用するためnginxの設定を変更しなければならない。

それを避けるため--webrootを利用する。このモードはドキュメントルート以下に/.well-known/acme-challenge/というディレクトリを作ってその中に認証用のファイルを書き出し、letsencryptのサイトから取らせることにより認証しようとする。サービスで使っているNginxを利用するため止める必要がなくなる。

一旦、--standaloneで実行して作成された設定ファイル/etc/letsencrypt/renewal/ドメイン名.conf--webrootのものに書き換えるには次の様に--webrootを指定し、force-renewalをつけて実行すると設定ファイルが上書きされる。

 certbot certonly --webroot -w ドキュメントルート -d ドメイン名 --agree-tos --force-renewal -n

crontab -eでクーロンの設定編集画面を開き、下記を追記する

0 4 1 * * /usr/bin/certbot renew && /usr/bin/systemctl reload nginx

この設定で毎月1日の朝4時に証明書を取りに行ってnginxを再起動する。

これで完了。またクーロンがちゃんと動くか分からないので3月1日にうまく行っているか確認して追記します。

お名前.comで独自ドメインを取得してConoHaで公開する手順

サーバーの用途にもよりますが、http://xxx.yyy.zzz.aaa/みたいなipアドレス丸出しだとカッコつかないので 独自ドメインをとってサーバーへhttp://独自ドメインでアクセスできるようにします。

今回はtsumetore.comをとってみます。

お名前.comで

お名前.comでドメインを検索

f:id:tukushiari:20180202165655p:plain

検索結果の中からトップレベルドメイン(.comとか.net)を選びます。

安いものは2年目以降の更新料が高いものが多いので注意。

無難に.comを選びます。

f:id:tukushiari:20180202165906p:plain

次に何年分の使用料金を払うか聞かれます。

絶対にこのサービスは流行るから5年分とっておこうってのも気合的にはアリですが、

更新できるのでひとまず最低の1年で。

注意としてwhois情報公開代行には必ずチェックしましょう。

しないとお名前.comに登録した自分の住所がドメインと一緒に世に出てしまいます。

ここを忘れると有料になるそうなので気をつけて。私がやったときはデフォルトでチェックついていました。

f:id:tukushiari:20180202170254p:plain

この後は支払いを済ませればOK

ConoHaの設定

ConoHaのコントロールパネルを開き、

サーバ→ネームタグをクリックしてipアドレスを控えておきましょう。

次にDNS→右上のドメイン追加をクリック。

f:id:tukushiari:20180202173050p:plain

ドメインを入力して追加クリックします。

f:id:tukushiari:20180202173127p:plain

そのあと右側の鉛筆ボタンを押して、

として保存します。

f:id:tukushiari:20180202205920p:plain

元々ある3行の値(ns-ax.conoha.io)は後でお名前.comの方で入力します。

お名前.comの設定

次にお名前.comのログインページに入り、右上のよく見るページのドメイン一覧をクリック。

f:id:tukushiari:20180202173353p:plain

f:id:tukushiari:20180202173410p:plain

このような脅しっぽい画面が出ますが無視します。(商売っ気見え見えでやな感じです)

下の画面に飛んでドメイン設定の中のDNS関連機能の設定をクリック。

f:id:tukushiari:20180202173542p:plain

設定するドメインを選んで下の方の「DNSレコード設定を利用する」ボタンをクリック。

f:id:tukushiari:20180202173645p:plain

真ん中あたりの入力欄に

を入力し、追加ボタンを押して、そのまま進む。

また最初の画面に戻ってくるので、ネームサーバーの変更を選んで、変更するドメインにチェック。

下の方の「他のネームサーバーを利用」タブを押して、ネームサーバー情報を入力欄に

Conohaで控えたns-a~を順番に3つ入力。

f:id:tukushiari:20180202174151p:plain

f:id:tukushiari:20180202174040p:plain

お名前.comは人を迷わすようなUIにわざとしてそうなので

ちなみこの設定が終わってもdnsの設定はすぐに反映しません。ジワジワ反映します

この設定が終わって3時間半くらいしたら見られるようになりました。

では!