なっく日報

技術やら生活やらのメモ

静的ファイルを配信する場合にはパスにバージョンを含めるのがいいんじゃなかろうか

最近、思っていることを。

なお、バージョンとは言ってますが、Gitのコミットハッシュ値でもUnixタイムスタンプでも何でもいいです

静的ファイル配信パターン

WEBアプリで静的ファイルを配信するパターンは以下3つあるんじゃないかとなんとなく思っています。

1. パスに特になにもつけない

<link rel="stylesheet" type="text/css" href="/static/css/hoge.css" />
<img src="/static/img/hoge.png" />
<script src="/static/js/hoge.js"></script>

2. パスにクエリストリングでバージョンを付ける

<link rel="stylesheet" type="text/css" href="/static/css/hoge.css?v=1" />
<img src="/static/img/hoge.png?v=1" />
<script src="/static/js/hoge.js?v=1"></script>

3. パスにバージョンを含める

<link rel="stylesheet" type="text/css" href="/static/v1/css/hoge.css" />
<img src="/static/v1/img/hoge.png" />
<script src="/static/v1/js/hoge.js"></script>

この中でどれがいい?

1はいろいろ辛そうなのでなしとして、2よりも自分は3がいいと考えています。

以下、その理由をば。

任意のタイミングで確実にリリースできる

これは2のパターンでも当てはまるので、3だけではないですが。

リリースしたタイミングで新しいファイルとしてロードされます。

クライアントのキャッシュを気にしないでも大丈夫。

新旧のバージョンが混在できる

LBから切り離して、アプリサーバを1台ずつローリングアップデートするパターンなんかでも問題なく。

古いアプリサーバにアクセスしたクライアントは古いバージョンのファイルを見て、新しいアプリサーバにアクセスしたクライアントは新しいバージョンのファイルを見て、動作します。

2だと(初めてアクセスした|キャッシュの期限が切れた)クライアントがサーバ側が古い状態で、最新の静的ファイルにアクセスしてしまう可能性があるかと(ブルーグリーンデプロイメントしているなら問題ないかもしれませんが)

事前にリリースできる

現在動作しているアプリには影響を与えず、安心安全に本番環境に事前にリリースできます。

これは2だと無理ではないでしょうか。

補足

ディレクトリではなく、ファイルにバージョンを含めるパターンはどうか?

<script src="/static/js/bundle-abcdefg1234xxxxxxxx.js"></script>

的な。CSS/JSはいいですが、画像のことを考えるとディレクトリにバージョンを含めたほうがいいんじゃないかと思います。

まとめ

久しぶりにブログを書きました。

もし違うよとかもっといい方法があるよということであれば、コメントしていただければ幸いです。

ではでは。

Windowsを少しでもMacの環境に近づける

最近転職しました。

で、現状、PCがWindowsしかない + VirtualBoxとかVM使う系禁止という縛りがあるわけです。

というわけで最近のWindowsMacに近づけられないかという記録をば。

Homebrew(Cask)が恋しい

Chocolateyというブツがありました。

chocolatey.org

Windows用のパッケージマネージャだそう。

Homebrew(Cask) 同様

choco install vim とかでいろんなアプリをインストールできます。

※ただし、もちろんコマンドプロンプト or PowerShellから!

Alfredが恋しい

ランチャーがないのが辛い。

いくつか候補があった中で、Woxにしてみました。

gigazine.net

が、クリップボード履歴とかスニペット機能がない。。

しゃーなくこちらを導入。

クリップボード履歴と定型文機能があります。

forest.watch.impress.co.jp

窓の杜とか久しぶりなんだが。。

ターミナル環境が恋しい

で、最大の問題がUnix系のコマンドが使えないこと。

CUI大好き人間だったので、ないのが辛い。。

Cygwin?いやいや・・・

coLinux

昔使ってたなぁと思ってみてみたら、

http://www.colinux.org/

どうも開発は止まっているよう。

まぁ、今の時代にあんま需要なさそうだしね・・・

MSYS2(Git for Windowsにも付いてくる)

qiita.com

なものがあると。

この辺も参考になるかもしれません。 d.hatena.ne.jp

これだ!と思ったが、自分の環境では動かないので断念。。。

Babun

こんなものがあるそう。

Babun - a windows shell you will love!

一言でいうと使いやすくしたCygwin

いちおう動いたけど、キーをタイプしてレスポンスが遅いのが辛い。。

ConEmu

Unix系のツールが揃うわけではなく、 単なる端末エミュレータだけど、コマンドプロンプトよりは幾分まし。

conemu.github.io

いろいろやったけど、、、

やっぱり無理ある。。

まとめ

5年ぶりくらいにWIndowsを触ってみて、それなりに進化はしているのだけれども、 やっぱりMacサイコーという気持ちが強くなりました。

CTRL+N、CTRL+P、CTRL+E、CTRL+A・・・とかのEmacsキーバインド使えないのも辛い。

Bash on Ubuntu on Windowsがちゃんと使えるようになれば、幾分ましになるのかなぁ・・・

ターミナル派の人はHyperTermに近いうちに乗り換えると良いかもしれない

HyperTermというターミナルソフトウェアが大変興味深かったので、そのご紹介を。

hyperterm.org

HyperTermとは?

公式サイトで JS/HTML/CSS Terminal と謳っている通り

Electron + React + Redux製のターミナルです。

他のElectronアプリのご多分にもれず、JavaScriptで機能を拡張できる作りになっています!

公開されてから、まだ1ヶ月そこらですが、現時点で既に6000以上GitHubスターを集めています。

github.com

インストール

今のところMacでしか動かんとのこと。

とりあえず試したい方は https://hyperterm.org/#installation から落とすか

Homebrew Caskを使っている人はいつもの

brew cask update
brew cask install hyperterm

で。

初期設定

通常のMacアプリ同様設定変更できます。

⌘, を押すと、HyperTerm上で設定用のJSONファイル(~/.hyperterm.js )が開きます。

デフォルトのフォントとテーマが気に入らなかったので、↓みたいな感じに変更しました。

{
  config: {
    fontSize: 13,

    // font family with optional fallbacks
    fontFamily: '"Droid Sans Mono for Powerline", Menlo, "DejaVu Sans Mono", "Lucida Console", monospace',

    // 中略
  },
  plugins: [
    'hyperterm-seti',
  ],
}

使ってみた感想

iTermとかと比較しても全く遜色ない感じ。

この使い心地でこの拡張性なら乗り換えよう!と思いました。

が、↓の問題点があったので踏みとどまりました。

現状の問題点

日本語は表示できますが、打てません!

github.com

これが解決されないとメインでは使えないかな。。

その他参考リンク

awesome-hyperterm

https://github.com/bnb/awesome-hyperterm

仕事早いですね〜

テーマやその他プラグインはこちらから探すのが吉です。

日本語の記事

ターミナル作業が爽快になるターミナルエミュレーター: HyperTerm

まとめ

日本語さえ入力できるようになれば、iTermから乗り換えると思う。

Presentational and Container Components

yukidarake.hateblo.jp

結構日にちが経ちましたが、まだボチボチ読まれているようなので、この記事の補足など。

Smart and Dumb Components -> Presentational and Container Components

medium.com

Redux作者の記事ですが、途中で呼び方を変えた模様。

Presentational and Container Componentsの方が好みだとのこと。

Reduxの公式ドキュメントもPresentational and Container Componentsという呼び方になってますね。

http://redux.js.org/docs/basics/UsageWithReact.html#presentational-and-container-components

Presentational Components には Presentational Componentsしか含まれちゃだめなの?

そんなことないと。

Container > Presentational > Container > Presentational

みたいなパターンもあり得ると。

自分も現場で実際にありました。

新たに見つけた他参考になるリンク

AbemaTVでの事例

参考になります!

www.slideshare.net

自分と同じようなことを考えている人

この人はSmart/Dumb Componentsという言う方を好んでいるようです。

なかなかわかりやすいスライド。

speakerdeck.com

ブログはこちら。

jaketrent.com

主人が英語の勉強を始めて185日が過ぎました

yukidarake.hateblo.jp

yukidarake.hateblo.jp

の続きです。

$ date '+%j'
185

だいぶ空いてしまいましたが、185日過ぎてもぼちぼち続けているのでその報告も兼ねて。

気づいたら今年の折り返し地点過ぎてましたね!

3月:モチベーションの低下

中だるみでしょうか。英語を勉強するモチベーションが下がってきました。。

これじゃいかん・・・と思っていたところ、

運良く同僚から、社内の外国人エンジニアを交えての英語ランチというモノに誘ってもらいモチベーション回復。

さらに、ランチ時にあまりにも言葉が出ないので英会話に対する危機意識が高まりました。

4月:DMM英会話を始める

周りでの評判が良かったのと、体験レッスン2回無料という言葉に釣られて、勢いで始めてみました!

↓ コレ。

英会話

結果、良かった!

発音や文法等は相変わらずダメだし、講師から質問されても返せなかったりするものの、英語で話す/書くことへの恐怖心が薄まりました。

また、講師を予約するというシステムに強制力があるのが良かったみたいで、毎朝8時に英会話をしてから出社という習慣ができました。

5月:引き続きDMM英会話

1ヶ月過ぎても良かったので、続けました。

そして、この頃から発音記号毎の発音を3Dで見れるという神アプリを使い始めました。

↓ コレ。

これは発音の教材でよくある英語教師の正面の口元をアップした映像だけではわからない口の中の事情(?)を3Dで解説してくれるというモノです。

リエゾンとか英語の音の変化が何故起きるのか?というのが視覚的に理解できたのでこれは良かった。

発音を勉強したいと思っている人は買いだと思います。

6月:またまたモチベーション低下からのチャットに切り替え

しばらく、DMM英会話を続けていたものの、成長が止まった感が出てきました。

モチベーション的にもなんだか下がってきたのでこれじゃイカンと一度英会話を離れてみることにしました(DMM英会話は退会してもまたいつでも再開可能とのことなので)

次はライティングの練習がしたいと思ったので、Eigoooというアプリを試してみました。

↓ コレ。

Eigooo 英会話

Eigooo 英会話

  • Eigooo Inc.
  • 教育
  • 無料

これはいつでも(8時30分〜25時)英語の講師の方とチャットができるというサービス。

会社への行き帰りの電車内でもできるので、なかなかいい感じ。

実は去年少し試したのですが、当時は教師から話かけられても会話ができず退散しました。

しかし、DMM英会話のおかげもあり、とりあえず会話が成り立つようになってましたw

注意点としては、フリートーク/本日のTOIECの英単語/本日のテーマ のいずれかに沿ってチャットをする感じでメニューが少なめなので、長期間は継続しづらいかもしれません。

7月以降

Eigoooにもうちょっとなれたら、次は一時期話題になっていたHiNative Trekを試したいと思ってます。

http://thebridge.jp/2016/02/hinative-trekthebridge.jp

月額9800円と、他のサービスと比較するとちょい高いけど、それに見合ったサービスを受けられそうな感じ。

ちなみに、外国語学習者同士で添削し合う HiNative というアプリ上でHiNative Trekのサービスを受けられるようですが、 これの無料機能はすでに使っています。

↓ コレ。

ちょっとした空き時間で自分の作った文章のネイティブの人からフィードバックをもらえたりしてこれもなかなか良いのではないかと。

まとめ

モチベーション的には上がったり下がったりはあるものの、何とか学習を半年続けられています。

英語力上がった!とははっきりとは言いづらいですが、GitHub上でプルリク送ったりとか英語で何かを発信することへの耐性はついてきたかなと。

個人的にはDMM英会話は英語学習に悩む人には一番オススメしたいと思ってます(実際周囲の人にオススメしまくってますがw)

また、数カ月後にどうなったか報告します!

グローバルでgitフックスクリプトを仕掛けると`go get`がちゃんと動作しなくなる可能性がある

go getが毎回止まるという現象に悩んでいて、その解決策を見つけたので書いておきます。

原因

yukidarake.hateblo.jp

これで、通常のGitHubGitHub Enterpriseとで、メールアドレスを使いわけるということをやっていたのが原因でした。

解決策

残念ですが、上記の設定を諦める(上手く書けば大丈夫かもしれないが、そこまでするのはもういいや。。。)

git2.8以上を使えば、

git config --global user.useConfigOnly trueを設定し、

リポジトリ毎にuser.nameuser.emailの設定を強制するようにできるようなのでこれでいいかな。。

参考

リポジトリごとに user.name や user.email の設定を強制する - Qiita

Visual Studio CodeのKeyBindingをCTRL+Nを↓、CTRL+Pを↑に変更する

しばらくサボってましたが、今日からは再び頑張りたい。。

諸事情により、Visual Studio Codeを触り始めました。

が、違和感を感じたのが各種ウィンドウでCTRL+N、CTRL+Pのキーバインドが効かないこと。

ググッてみたところ

github.com

↑のEmacs向けのキーバインドを公開してくれている方がいました。

ありがたや。

しかし、自分は生粋のEmacsユーザという訳ではなく、とりあえずCTRL+N、CTRL+Pが効けばよかったので

curl -s https://raw.githubusercontent.com/nana4gonta/emacs-visual-studio-code/master/release/keybindings-osx.json | jq 'map(select(.key=="ctrl+n" or .key=="ctrl+p"))'

で該当する設定だけをいただきました。

あとは、Code -> Preferences -> Keyboard Shortcuts でkeybindings.jsonに貼り付けるだけです。