Bash v3 以下でも set -u 時に変数が定義されてるか確認する方法

以下のように、変数への値がセットされているかで分岐するシェルスクリ プトがあったとします。このスクリプトは正常に動作します。 #!/bin/sh if [ -n "$CIRCLE_PULL_REQUEST" ]; then echo '$CIRCLE_PULL_REQUEST is defined.' else echo '$CIRCLE_PULL_REQUEST is NOT defined.' fi 堅牢なシェルスクリプトを書く時は ‘#!/bin/sh’ を ‘#!/bin/sh -u’ に することが多いです。typo 等による意図しない変数の利用を防いでくれ ます。 今回はこれがコンフリクトし、以下のようなエラーになります。 $ ./v.sh ./v.sh: line 3: CIRCLE_PULL_REQUEST: unbound variable 対策方法 set -uしてるときに変数が定義されてるかチェックする - Qiita 残念ながら macOS High Sierra では上記の方法は使えませんでした。 $ ./v.bash ./v.bash: line 3: conditional binary operator expected $ which -a bash /bin/bash $ bash --version GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc....

2018-10-15 (Mon) · masutaka

<ネタバレなし>オクトパストラベラーを完全にクリアーした

http://www.jp.square-enix.com/octopathtraveler/ 135 時間で完全にクリアーしました。ネタバレ回避のために「完全に」の 詳細は書きません。 最後はこんな状態でした。 ・主人公はプリムロゼ ・レベルは全員 76(最後なぜか頑張ってプリムロゼに合わせた) ・アビリティは全部覚えたキャラもいるし、もう少しのキャラもいる ・全キャラのメインストーリーは全部クリア ・サブストーリーも全部クリア おっさんホイホイのゲームには以前『レジェンド オブ レガシー』に痛い 目にあったので警戒はしてましたが、プロデューサーがブレイブリーデフォ ルトの浅野さんということで、期待を込めて購入しました。 結果的に大正解。久々に 100 時間超えて且つ、クリアー出来たゲームと なりました。Switch で初めてクリアーできたよ。ゼルダもゼノブレイド 2もクリアーしてない(涙) 自分に合った理由を考えると、こんな感じです。 ・スキルにある程度制限がある ・ストーリーが複雑でない ・ドット絵による脳内補完 ・極端に難しくも易しくもない難易度 バトルシステムがなかなか良くて、それほど多くのスキルや自由度がない 中で、どのように強敵を撃破するか考えるのはなかなか楽しかったです。 私が元組み込みエンジニアというのも関係するのかな? そういう意味では、ブレイブリーデフォルトは少々持て余してました。 (だいぶ好きなゲームですがね。Switch に移植して欲しい!) ストーリーが良い意味でチープだったのも良かったです。最近はあまりに 複雑だと覚えられない…。ドット絵なので、「実際はこうかな?」と脳 内補完するので問題ないです。小説のよう。 難易度もちょうど良かったですね。強い武器防具をリセマラ で盗ったりし ましたが、それでもだいぶ苦労させられました。サブストーリーで油断し てたら、あっさり全滅されられたりもしたなあ…。 攻略サイトを見たのは終盤の終盤。見なくても割といけました。 一方で UI はあまり洗練されていませんでした。 ・Y ボタンのヘルプがうざい。よりによって真下のメニューが見えない ・← →で画面スクロールできることがどこにも書かれていない(終盤で知った・・・) ・イベントでボタンポチポチ必要。自動進行なし ・他多数 MVP(Minimum Viable Product)的に作ったのだと、良い方向に解釈して います。 ブレイブリーデフォルトは 3 が出たとして、ストーリーのつなぎ方が難 しいと思います。でもオクトパストラベラーはシステムだけ揃えてストー リーは別にすれば良いと思うので、そういう意味では現段階では展開はや りやすそう。期待しています。 オクトパストラベラーにはだいぶ時間を割いたので、しばらくゲームから は離れる予定です。次はどんなゲームをやるのだろう? OCTOPATH は造語で、各キャラの頭文字を取ったものでもあります。地図 上でオフィーリアから時計回りの順。 loading... ネタバレですが、他にも面白い逸話がいくつかありました。クリア後に見 ると良いと思います。 サントラも(iTunes で)買ったよ。これもオフィーリアからの順になっ...

2018-09-24 (Mon) · masutaka

家電操作を IRKit から Nature Remo に変えた #natureremo

https://rebuild.fm/209/ を聞いたら、なんとなく購買意欲が湧いて買ってしまいました。会社の MVP 賞 で頂いた Amazon ギフト券のそこそこ有意義な使いみちを探していたという事情もあります。 IRKit は [2015-12-19-1] から便利に使っていて、Nature Remo が出たことも知っていましたが、IRKit の 2 倍の値段は高いなーと見送っていました。 結果的に非常に満足しています。せっかくなので少し前に出た Nature Remo mini ではなく、Nature Remo を買いました。 ※ Nature Remo mini は主にセンサーが省かれた廉価版です。 https://nature.global/ の下の方に Nature Remo との比較があります。 ¥14,040 の価値があったかはまだ微妙ですが、今後アップデートしていくそうなので、期待してます。 それにしても typester さんが Nature, Inc. の CTO になっていたのは知らなかった。 使い方 エアコン、テレビ、照明に対して、こんな使い方をしています。 Google Home mini 経由での操作例 「ねぇ Google、冷房を 25℃ にして(Google Home mini → Nature Remo)」 「ねぇ Google、明かり付けて(Google Home mini → Nature Remo)」 「ねぇ Google、おはよう(Google Home mini → IFTTT → Nature Remo)」...

2018-08-19 (Sun) · masutaka

Ruby でライブラリがシステムに存在しているかどうかをチェックする

require 'mkmf' have_library('pq') checking for main() in -lpq... yes => true mkmf.rb を読んだところ、C++ のコードを生成してチェックしていた。 Kernel.have_library のコードはこちら。 カレントディレクトリに mkmf.log が作られるが、これを防止するには 以下で良いみたいだ。 MakeMakefile::Logging::logfile('/dev/null') ネット上には以下のコードがあったが、mkmf.rb を読んだら上でいけた。 MakeMakefile::Logging::logfile('/dev/null') module MakeMakefile module Logging @logfile = '/dev/null' end end 参考情報 instance method Kernel#have_library (Ruby 2.5.0) Module: MakeMakefile (Ruby 2.5.0)

2018-07-31 (Tue) · masutaka

エニタイムフィットネスに通うことにした

最近、人生最高の体重を記録し、腹の肉もヤバく、駅の階段の上りで軽く 息切れがする。危機感を覚えているので、ジムに通うことにした。 選んだのは自宅からまあまあ近いエニタイムフィットネス 。 近いと行っても徒歩 10 分弱なので、個人的にはやや遠い部類。 数年前に通っていたクイックシェイプ は徒歩 3 分だったので、毎日通え ていた。近さ重要。 ジムに通うのは実に 2 年 4 ヶ月ぶり。近所にもっと近いジムがあるんだ けど、なんだか合わなくて半年ももたなかった。その前は会社の人と週一 でコナミに通っていたけど、会社の引っ越しで遠くなって行くのを止めて しまった。 今までジムに通ってダイエットに成功したことがないので、今回はパーソ ナルトレーニングをお願いした。以前筋トレを適当にやっていたら、筋を 痛めて病院に通うハメになったので、その防止も兼ねて。 とりあえず 5 回分で¥25,920。1 回 1 時間。週一でお願いする予定。 エニタイムの基本料金は月額¥6,998。会社で¥4,000の補助が出るような ので、実質¥2,998かな。新三河島店は土足 OK なのはうれしい。 結果を出せるように頑張ります。

2018-06-30 (Sat) · masutaka

Rails4 と Rails5 とでの eager_load_paths の違い

Rails4 と Rails5 とで eager_load_paths の内容に差異があることを知 りました。 Rails5 では app 以下の全ての concerns ディレクトリや channels ディ レクトリが追加されています。 以下、Rails4 と Rails5 とで実装箇所を追ってみました。 Rails-4.2.10 eager_load_paths を返すメソッド Rails::Engine::Configuration#eager_load_paths ↓ eager_load_paths の構築開始。Rails5 と違いあり Rails::Engine::Configuration#paths ↓ Rails::Paths::Root#add ↓ Rails::Paths::Path#initialize ↓ Rails::Paths::Path#eager_load! ここまでで eager_load_paths の構築完了 ↓ Rails::Paths::Root#eager_load 結果を返す Rails-5.2.0 eager_load_paths を返すメソッド Rails::Engine::Configuration#eager_load_paths ↓ eager_load_paths の構築開始。Rails4 と違いあり Rails::Engine::Configuration#paths ↓ Rails::Paths::Root#add ↓ Rails::Paths::Path#initialize ↓ Rails::Paths::Path#eager_load! ここまでで eager_load_paths の構築完了 ↓ Rails::Paths::Root#eager_load 結果を返す まとめ Rails の eager_load_paths を調べました。app 以下が再帰的に追加され るだけかと思ってましたが、調べたら凝ったことをしていました。config 以下も追加されるのも、なるほど…といった感じでした。...

2018-05-26 (Sat) · masutaka

Ruby で FTPS 接続する方法

まずは情報の整理から。 種類 暗号化なし 暗号化あり HTTP HTTP HTTPS FTP FTP FTPS 混乱しやすいが、SFTP は SSH を使って暗号化・認証を行うプロトコルで FTPS とは別。 ・HTTP のセキュア版が HTTPS ・FTP のセキュア版が FTPS と覚えると良いだろう。 サンプルコード FTP の SaaS である BrickFTP にアカウントを作った。 Net::FTP で接続可能。以下は FTPS 接続し、PWD を発行する Ruby コー ド。password はマスクしている。 #!/usr/bin/env ruby require 'net/ftp' ftps = Net::FTP.new( 'masutaka.brickftp.com', ssl: true, username: 'masutaka.net@gmail.com', password: '********', debug_mode: true, ) puts ftps.pwd 結果。 connect: masutaka.brickftp.com, 21 get: 220 Service ready for new user. put: AUTH TLS get: 234 Command AUTH okay; starting TLS connection....

2018-05-26 (Sat) · masutaka

AirMac Extreme から Buffalo のルータに変えたらインターネット速度が 45 倍以上になった

TL;DR プロバイダは @nifty、ルータを交換しただけでプロバイダとの契約は結果的に変える必要なかった。あと、デメリットもあるよ。 Before 先月までとにかく遅かったです。Download が 1 Mbps の時もありました…。 loading... AirMac Extreme を使ってました。Time Machine 便利ですからね。 After めちゃめちゃ速くなりました。ほぼ 100 Mbps 以上をキープしています。 loading... BUFFALO の WXR-1901DHP3 を購入し、手順通りにセットアップしただけです(※)。 セットアップの時に @nifty の ID とパスワードを聞かれなかったのに、インターネットに接続できてしまったのは気になりました。 ※ 実際は後述の「soplog(そぷログ)」の記事と同じように「IPv6接続オプション」を解約して「v6プラス」を契約しました。でも、@nifty との契約は元の「IPv6接続オプション」に戻ってしまいました。この辺理解不能。 なぜ速くなったのか? BUFFALO のルータに変えたことで、v6プラス接続を使えるようになり、プロバイダが変わったためのようです。 AirMac Extreme でこれが出来なかったのは、v6プラス接続(IPv6 IPoE + IPv4 over IPv6 ?)は国際基準ではないからだそう。 http://ipv6-test.com/ によると以前は Infoweb でした。 現在は JPNE に変わっています。 ※ 以前が Infoweb だったのは、私が Infoweb から @nifty への移行組だからだと思います。 正直、プロバイダが変わってしまっては、えぇ…という感想しか持てません。でも、Infoweb だとこれから話す IPv6 IPoE で接続することが出来ないため、JPNE に切り替わるみたいです。 以下の記事が大変詳しいです(アフィリエイトっぽくて怪しいけど詳しいは詳しい)。 IPv6対応で速くなる?「IPv6 IPoE + IPv4 over IPv6 接続サービス」って何者?【v6プラス/IPv6高速ハイブリッド IPv6 IPoE + IPv4/transix】 接続方法はおそらく、このように変わりました。...

2018-04-30 (Mon) · masutaka

Twitter クライアントを Tweetbot に変えた

今更ですが、Twitter クライアントを公式 から Tweetbot に変更しました。 デフォルト厨なので、今までは頑張って Chrome で Twitter を見てました。 こんな理由からです。 未読位置を覚えているのがしんどい 未読位置まで移動するのがしんどい 溜まった未読位置から読むのに Chrome だと重すぎるので Firefox 開くのがしんどい iOS 版も公式アプリ から Tweetbot に変更しました。 iCloud を使って、未読位置を macOS と iOS で同期してくれるのが大変 ありがたいです。公式アプリはスリープから復帰すると、リストから強制 的にホームに戻ってしまうのが最悪でした。 未読管理はどこまで正確なのかは少し気になります。 ストリーミング機能もだいぶ良いですね。twittering-mode で便利だった イメージがあります。 Twitter が以前サードパーティの締め出しをした時、各 Tweet のクライ アント名が分からなくなりましたが、Tweetbot では表示されていました。 API からはまだ取れたのですね。 逆に公式のほうが良かった点も挙げておきます。 IFTTT などの短縮 URL を展開されてサマリを表示してくれる 各 Tweet の詳細を見ないで Like 数 Retweet 数が分かる 投票?そんなのありましたっけ? iOS 版は特に良かったことはないような。 Android は Twitter の使用頻度が低いので、公式アプリを入れています。 今までの Twitter クライアントの変遷はこんな感じです。 TwitterFox → twittering-mode → Hootsuite → twitter....

2018-03-23 (Fri) · masutaka

『ジョイ・インク 役職も部署もない全員主役のマネジメント』を読んだ

会社の若者がオススメしていたので、サラッと読んでみた。 つもりが、一ヶ月近くかかってしまった…。 ペアプロを始めとした XP(エクストリーム・プログラミング)を体現し ているメンローイノベーションズ のお話。著者は CEO の Richard Sheridan 氏。 ソニックガーデン みたいな受託の会社なのかな?臓器移植情報システムや ディーゼルエンジンの分析システム(?)など、内容は多岐にわたってい るみたい。 とにかくアナログアナログアナログと言った感じで、デジタルツールはエ ディタしかないのでは?という感想さえ覚えた。 本の中では Slack や GitHub の話は一切出てこない。メールやチャット は使っていないっぽくて、全部口頭(本書では「高速音声技術」と名付け ている)らしい。GitHub も使ってないのかな。VCS は何使っているんだ ろう? https://github.com/menloinnovations を見つけたが、リポジトリはなかった。 まあでも原著は 2013 年に出版されたらしいから、だいぶ変わったでしょ? と思ったけど、今もだいたい同じみたい。マジか。 ジョイ・インク (Joy, inc.) のメンローイノベーションズに行ってきた - kawaguti’s diary ペアプロを毎日やるって、どういうメンタルなんだろう? 私はチームが 出来たての頃はコミュニケーションのために意識してペアプロをやるけど、 その後はほぼやらないなー。めっちゃ疲れるんだよね…。 ペアプロやっているとチャットを見る時間はなくなりがちだから、逆に相 性が良いのだろうか。アラートやデプロイ通知とかどうしているんだろう? はぇ〜という感想しかなくて、正直参考にならなかった。 たぶん、ビジネスモデルとセットで考えないと、とてもじゃないけど同じ ことは出来ないと思う。 ただ、スキルより文化を重視する点は大いに賛同した。採用面接はするこ ともされたこともあるけど、スキルを重視しがちなんだよね。でも本当に 大事なのは会社の文化と合うかどうか。でもそこに全振りは強いな…。 国内で同じもしくは、似たことをやっている会社はあるのかしら? 以下、読書メモ。Kindle なのでページ番号じゃなくてロケーション番号。 L921 ケアリーは、自分はソフトウェアプログラマーだと言った。 分かる。私も Rubyist などと言わないようにしている。 L1001 メンローに来て日の浅いメンバーは、一日八時間仕事すると疲れ切ってしまう。 デスヨネー。最近はソロプロ(?)してても疲れ切っているけど。 L1070 知識の塔が辞めるとなったとき、何十年もの知識の蓄積を最後の二週間で 少しでも引き継ごうとして、必死になる様子がよく見られる。 分かる。ことソフトウェアに関しては、引き継ぎ作業が発生する時点で、 何かがおかしい可能性はあると思う。 L1187...

2018-03-19 (Mon) · masutaka