at backyard

Color my life with the chaos of trouble.

ジョン・フルシアンテのCarvelに出てくるCarvel Cakeとは

ジョン・フルシアンテの大好きなアルバム「シャドウズ・コライド・ウィズ・ピープル」

f:id:shinshin86:20210901233918p:plain
John Frusciante - Shadows Collide With People

ジョン・フルシアンテの大好きなアルバムに「シャドウズ・コライド・ウィズ・ピープル」というのがある。

このアルバム、ジョンのメロディメイカーとしての才能に満ち溢れた、良曲揃いのアルバムなので大好きな方は多いと思う。

このアルバムの一曲目、少し前衛的な音の重なりによるインプロヴィゼーション的な音からCarvelのイントロのギターが流れ出した瞬間、背筋がゾクッとしたのは、今でもまだ昨日のことのようにはっきりと覚えている。

最近、このCarvelというのはアメリカにあるアイスクリームのフランチャイズらしく、そこが販売しているケーキらしいことを知った。

画像はWikipediaから引用↓

f:id:shinshin86:20210901234017p:plain
インパクトがあるっ!

画像はWikipediaから引用

Carvel (franchise) - Wikipedia

カーベルは、Focus Brands社が所有するアメリカのアイスクリーム・フランチャイズです。 カーベルは、ソフトクリームと、独特の「クランチー」の層を特徴とするアイスクリーム・ケーキで最もよく知られています。カーベルは、ソフトクリームと、独特の「クランチー」を重ねたアイスクリームケーキでよく知られており、また、様々な種類のノベルティのアイスクリームバーやアイスクリームサンドイッチも販売している。

ソフトクリームと、独特の「クランチー」の層を特徴とするアイスクリーム・ケーキで最もよく知られています と書かれている通り、アイスクリームケーキのようだ。

私はアイスクリームケーキというものを食べたことがないが、ちょっと試してみたい今日このごろである。

Carvelの歌詞の意味とは

さて、Carvel Cakeきっかけに歌詞を読んでみると、この曲はドラッグ中毒(当時、彼はヘロイン中毒だった)からの脱却を図った自身のことを歌った歌だったことを知った。

当時は歌詞なんて調べる余裕もないぐらいに若かったし、彼の作る音楽の世界に私自身は魅了されっぱなしでそんなことを調べる発想がなかったのだが、こうやって調べてみると彼が歩んできたであろう心情がそのまま吐き出されてグッと来る歌詞だ。

というわけで、微力ながらCarvelの歌詞を翻訳してみた。

John Frusciante の Carvel の日本語訳

努力してもどうにもならない
誰も見てはいない
今、たくさんのものを失った
あなたを失ってから、もう同じにはならない

私は街から出ていく
良い結果になることを願って
あなたが私の背中を押してくれるだけで
天国はあなたを受け取って、また投げ返すでしょう

私の神様に偽物を送りつけるんだ(×4)

Carvelのケーキを食べに行く
あなたが知っているどこかは
あなたが思うような場所ではない
あなたはもう立ち去ってしまったのか?

あなたは行ってしまったのか?もう既に行ってしまったのかい?
(戻ってきなよ、戻ってきなよ、戻ってきなよ)

すべての楽しい時間(注:たぶんキマっているときのこと)はその途中にあるんだ
アガったり落ちたり、それがエネルギーを震わせるんだ
アガったり落ちたり、それがエネルギーを奮い立たせてくれるんだよ
それ以外の方法はないんだ

頑張って翻訳をしてみた。

ネット上で検索をしてみると、他にもこの曲の翻訳をしている方はいるが、翻訳し終わったあとに比較してみると、結構翻訳の内容が異なっているので、本当にこれで正しいのか自信はない。

今回翻訳を行う上でジョン・フルシアンテのこの曲の解説を見てみたりしたが、歌詞にある (戻ってきなよ、戻ってきなよ、戻ってきなよ) というフレーズはドラッグ中毒時代の自分が、また彼を呼び戻そうとしている声、という解説を読んで背筋が増えた。

原曲を聴くと、この部分( come back, come back, come back, come back のところ) はジョンの特徴的なファルセット・ヴォイスで歌われる実にきれいなコーラス部分だ。

まさかそのコーラスが悪魔の囁きになっていることを想像すると、この曲の持ついつまでも続いていくような深い闇が垣間見える。

昔はメロディアスでかっこいい曲、というイメージだったが、歌詞に注目すると、またさらに違った見え方ができるので面白い。

当時ジョン・フルシアンテのソロ1,2作目あたりを聞いて、全く焦点が定まっていない意識が朦朧としきった音楽に悪い意味で衝撃を受けた(※)自分からすると、この歌詞というのはそれなりに重みを感じる。

※ある意味ではドラッグ中毒の怖さを嫌というほどに思い知ることになる作品でもある。前衛的とかアートとかではない、意図を感じないただのカオスな音だったと記憶している。

もしこのブログを読んで興味を持った方は、John Frusciante の Shadows Collide With People を聴いてみてください。1曲めがCarvelです。

ちなみにジョンのソロアルバムはApple Musicにもあるのだが、Shadows Collide With Peopleは配信されていない。

権利関係とか何かしらの事情があるのかもしれないが、名盤なだけに残念である。

Docker for WIndowsで"open //./pipe/docker_engine: The system cannot find the file specified. " みたいなエラーが出たときの対応

Docker for Windowsを使っていたときのこと、PCを再起動したタイミングで docker ps などでDockerコマンドを打つと、下記のようなエラーを吐くようになってコンテナを起動することができなくなってしまった。

# エラー全文は載せていないですが、あしからず
docker : error during connect:
・
・
・
open //./pipe/docker_engine:  The system cannot find the file specified. 

なお、このコマンドが出ても docker -v などのコマンドは正常に機能する。

日本語で検索すると、下記のようなdocker-machineの再作成で解決した方もいるようだが、そもそも docker-machine というコマンド自体が打てない。

docker-machine rm default
docker-machine create default --driver virtualbox

下記のドキュメントを見ると docker machine も一緒に入っているようだが、参照はできないのか。それともそもそも入っていないのか...

Docker Machine のインストール — Docker-docs-ja 19.03 ドキュメント

Docker for WIndowsで"open //./pipe/docker_engine: The system cannot find the file specified. " みたいなエラーが出たときの解決方法

前置きが長くなってしまったが、Docker for Windowsで上記問題を解決するために、コマンドプロンプトで下記のコマンドを打った。
このコマンドを打つと、自身の環境で5分ほど反応がなくなったが、その後Dockerが正常に起動したようで docker psと打った場合、正常に反応するようになった。
もちろんコンテナの起動も問題ない。

cd "C:\Program Files\Docker\Docker"
./DockerCli.exe -SwitchDaemon

なお、下記のページを参照している。

forums.docker.com

github.com

これらのコマンドの仕組みやエラーの原因などまでは深堀りしていない。

深堀りと言えば、最近の fukabori.fm でコンテナランタイムについて話していた。

Dockerを普段から触ってはいるが技術の細部まで理解できていない自分のような人間でも、とても楽しく聞けた。

fukabori.fm

おすすめ。

LINEポイントの使いみちについて調べてみた

LINEポイントの有効期限があと30日で切れる、という通知がLINEから来たので、そもそもLINEポイントはどういう用途で使えるのかを改めて調べてみようと思った次第。

なおこの有効期限だが、LINEポイントを新たに獲得すれば期限は延長されるらしい。

mobile.line.me

LINEポイントは、ポイントを獲得したタイミングで、残高の全ポイントの有効期限が180日に延長されていきます。 180日の間にまた新しくポイントをゲットすれば、貯めたポイントが消えることはないですが、有効期限があるということは忘れないようにしておきましょう!

LINEポイントの使いみち

以下、調べてみたものの備忘録となる。

なお、すべての情報は下記のLINE公式ページを参照している。

pointclub.line.me

LINEポイントを利用できるサービス

LINEポイントは以下のようなサービスで利用できるようだ。
また、ここには書ききれないが、LINE Gamesなどでも利用できるよう。

  • LINEのスタンプやきせかえと交換
  • LINE Pay
  • LINE MUSIC
  • LINEギフト
  • LINE証券
  • LINEマンガ
  • LINE LIVE
  • LINE占い
  • LINEモバイル
  • LINE FRIENDS
  • lacore

ちなみに lacore とはなんぞや?と思ったらLINEがやっているコスメのマッチングサービスらしい

lacore.line.me

また、 LINE FRIENDS はキャラクターグッズの公式通販サイト。
LINEも色々なサービスをやっているようだ。

www.linefriends.jp

LINE証券を使えば1ポイントで入金も行えて積立投資などにも使えるようだし、LINEギフトに利用できるのもとても良い。以前LINEギフトでスターバックスのコーヒーを頂いたことがあるが、利用もしやすくてとても良かった。

相手にLINEポイントを使ってちょっとした贈り物をするというのはなかなか現代的だが、こういうのもまた良さそうだ。

あとはLINE Payを利用することでポイントを使って支払うことができる。
利用方法はLINE Payのコード支払い時に、コード画面の「LINEポイントを使用」にチェックを入れて支払えば良いらしいので、おやつ時にちょっとコンビニで利用するのも一つかもしれない。

というわけで、LINEポイントの使いみちについて簡単に調べてみた備忘録でした。

使いみちはたくさんありますね。

あ、そうそう、LINE MUSICではBeaglesやB/W、Peruriなどの音楽も聴けるので、良かったらチェックしてくれよな!

LINE MUSICでBeaglesのmashi mashiを聴く

LINE MUSICでB/WのMellow Yellowを聴く

LINE MUSICでPeruriのペルリの涙を聴く

シェル内の移動に便利そうなjumpをインストールして触ってみた備忘録

rebuild.fmのエピソード313で話題に上がっていたjumpを試してみることにしたので、そのインストールに関する備忘録

rebuild.fm

jumpのリポジトリはこちら

github.com

jumpのインストール

各プラットフォーム向けのインストール方法が用意されており、Go環境があれば go getでも入れられるらしいが、ひとまず brewで入れてみることにする。

brew install jump

インストール後、.zshrcに下記の記述を追加する
(私はzshを使っているがここは人によって異なる。詳細はGitHubにて)

あと、ショートカットキーに他のキー(公式では z を例に上げている)を指定したり、他にも設定項目がある。ここについても詳細はGitHubにて。

とりあえず今回はデフォルトで設定を行う。

eval "$(jump shell)"

あとは.zshrcの設定を反映させる。

source ~/.zshrc

jumpの使い方

jumpをインストール後に一度でも訪れたディレクトリが移動対象のディレクトリとなる。

例えば ~/dev/example-project という作業ディレクトリがあって、ここに一度でも訪れたことのある状態で、

j ex

と打つと上のディレクトリに移ることができる。

例えば fzf のように候補となるディレクトリ名がシェル内に予め表示されることはなく、似たような名前が複数ある状態だと意図していないディレクトリに飛ぶ可能性はありそうだが、動作は軽いので、間違えて飛んでも飛び直せばよいかという気持ちになりそうな気はした。

なお、カスタマイズ方法などについては全く調べておらず、デフォルトの状態でしか現時点では触っていない。

触ったと言っても本当にインストールして5分ぐらいしか触っていないような感じだが、とりあえずはこのままもう少し触ってみようと思う。

以上、備忘録でした。

8月23日から24日にかけてGoogle Search Console上での検索パフォーマンスが急落しているが気にしなくて良さそう

運営している複数のサイトのGoogle Search Consoleを見ていたら、8月23日から24日にかけてGoogle Search Console上での検索パフォーマンスが急落していた。

検索パフォーマンスの落ち方がどのサイトでも共通していたので、これはなにかと思って調べてみると、下記のページに行き着いた。

support.google.com

該当する箇所の文章が下記。

An internal problem caused a data loss in Search and Discover performance during this period. Users might see a significant data drop in their performance reports during this period. This does not reflect any drop in clicks or impressions for your site, only missing data in Search Console.

意訳してみると、

内部的な問題により、この期間中の検索表示およびクリック等に関するパフォーマンスのデータが失われました。この期間中、ユーザーのパフォーマンス レポートに大幅なデータ低下が見られる場合があります。これはお客様のサイトのクリック数やインプレッション数の減少を反映したものではなく、Search Console のデータが失われただけです。

ということらしい。

気にすることはなさそうですね。

Google AdSenseのiPhoneアプリが終了していた

最近Google AdSenseiPhoneアプリが壊れているなーと思ったら、どうやらアプリ自体が終了していたらしいです。知らなかった。

試しにツイッターで検索してみたところ、どうやら以前から終了は予告されていた模様。こういうときツイッター検索って本当に便利ですね。

今後はウェブ上のGoogle AdSenseにアクセスして利用していくことになりそうです。

ウェブ上のGoogle AdSenseへのアクセス方法

下記のリンク先にあるURL( http://www.google.com/adsense )にiPhoneからアクセスしてログインすればモバイル向けのGoogle AdSense画面にアクセスできます。

AdSense のモバイル向け管理画面について - Google AdSense ヘルプ

ログイン後はホームスクリーンに追加して、ホームに置いておけば今までと変わらない使用感で利用できそうです。

アプリとウェブ版では微妙にメニューや配置が異なりますが、パッと見はそれほど気になりませんでした。
(ウェブ版に普段からアクセスしている人であれば、あまり気にならなそうな気がします)

またホームスクリーンに追加した場合の、アイコンをタップしてからのダッシュボード表示はそれなりに早く、使用感にストレスは感じません。

PWAの利用ケースにもマッチしていると思いますし(これ、PWAだよね...?)、Google的にもアプリをメンテナンスしていくよりは今後はウェブにリソースを集中させて運用していくということなのでしょう。

Expressのappモジュールを元にして簡単にSitemapを生成するためのnpmパッケージ【easy-express-sitemap-generator】を作成した

作ってみた報告です(まだAlpha版ですが)。

Expressのappモジュールを元にして簡単にSitemapを生成するためのnpmパッケージを作りました。

名前はeasy-express-sitemap-generatorといいます。

github.com

インストールする際は

npm install easy-express-sitemap-generator
# または
yarn add easy-express-sitemap-generator

で行えます。

目次

作成した動機

Expressのappモジュール内にはルーティングに関する情報が格納されていると思いますが、その情報を元にサイトマップを生成する仕組みのようなものが(自分が探してみた限りでは)なさそうだったので、作りました。

使い方

expressのappモジュールを利用するため、ユーザ側がサイトマップを生成する処理を書く必要はありません。

例えば下記のような処理でapp内で設定したルーティング情報を元にサイトマップを生成することが可能です。

const express = require('express');
const app = express();
const generateSitemap = require('easy-express-sitemap-generator');

app.get('/', (req, res) => {
  res.send('path: "https://example.com/"');
});

app.get('/about', (req, res) => {
  res.send('path: "https://example.com/about"');
});

const YOUR_SITE_URL = 'http://example.com';

const sitemap = generateSitemap(app, YOUR_SITE_URL);

console.log(sitemap);

これを実行すると、下記のようなサイトマップがコンソール上に出力されます。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>
      http://example.com/
    </loc>
  </url>
  <url>
    <loc>
      http://example.com/about
    </loc>
  </url>
</urlset>

もちろん、オプションとして除外するURLも指定できるので、生成するURLはこちらである程度制御できます。

逆にサイトマップ自体の書き方については今のところオプションなどは用意していません。

これはもし要望が出てくるようなことがあれば将来的に実装していこうと思います。

内部の仕組み

内部の処理については実際にExpressのappモジュール内を覗きつつ、愚直に処理を実装しています。

コード自体は洗練されていません。ここらへんは一旦希望する動作を実現させることを優先しています。

そのためこういう処理の書き方が良いのか、というのはなんとも言えません。が、Express内部の処理構造に変更がない限りは問題なく動くと思います。

ここでは、実際に書かれているコード( v0.0.3 )を元にExpressのappモジュールからルーティング情報を取得するための方法を備忘録がてら書いて以降来ます。

Expressでルーティング情報を取得する方法(1つ目)

Expressでは2種類の方法でルーティング情報を設定することが可能です。

1つ目は下記のように行う方法。

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('path: "/"');
});

app.get('/about', (req, res) => {
  res.send('path: "/about"');
});

module.exports = app;

Expressでは、エクスポートした app モジュールの中を見てみると、設定されたルーティング情報は下記のリストに格納されています。

app._router.stack # stackという配列の中に他の要素と入り混じってルーティング情報が格納されています。

この stackそれぞれの要素の中には name という属性があり、 例えば app._router.stack[0].name で参照したときに、格納されている情報に関する文字列がここには格納されています。

上記方法で設定した場合に app._router.stack[0].name には bound dispatch という文字列が格納されています。

そして bound dispatch という名前を持ったオブジェクトの中には、app._router.stack[0].route の中に格納されたルーティング用のパスが格納されています。

文字にすると、いささか冗長な説明になってし合いますが、 easy-express-sitemap-generator内のテストコードを見れば、より分かるかと思います。
(コードは汚いですが...)

Expressでルーティング情報を取得する方法(2つ目)

Expressでは上記方法とは別に、routing用のモジュールを別途作成してそちらを読み込んで使用することも可能です。
(こちらのほうが利用されるケースとしては多いかと思います)

例えば下記のようにルーティング情報のみを記載したファイルを作成します。

const express = require('express');
const router = express.Router();

router.get('/', (req, res) => {
  res.send('path: "https://example.com/"');
});

router.get('/about', (req, res) => {
  res.send('path: "https://example.com/about"');
});

module.exports = router;

そして、これを app.js 側で読み込みます。

const express = require('express');
const app = express();
const indexRouter = require('./routes/index');

app.use('/', indexRouter);

module.exports = app;

このようにしてルーティング情報を設定した場合、上で説明したのと同様に下記にルーティング情報は格納されていますが、

app._router.stack # stackという配列の中に他の要素と入り混じってルーティング情報が格納されています。

app._router.stack[0].name内の文字列が router という名前になります。

さらには下記の中にエクスポートされたルーティング情報の配列が格納されています。

app._router.stack[0].handle.stack # ルーティング情報の配列

stackには入れ子のようにしてルーティング情報に関する配列が格納されているので、さらにこの中を覗いていくようになります。

app._router.stack[0].handle.stack[0].route.path # ルーティングパスがここにある

最後に

以上のようなことを調べながら、これらのパスを取り出してサイトマップを生成するような処理を easy-express-sitemap-generator では行っています。

これがExpressにおけるサイトマップ生成の最適解かどうかは分かりませんが、ずっとExpressのappモジュールを読み込ませるだけでサイトマップ用の文字列を生成できる仕組みは欲しかったので、一応のところは実現できて満足しています。

まだまだ見直すべき箇所はありますが、ひとまず形にできたので、ここまでの経緯をブログに残すことにしました。

PRなどもウェルカムなので、気になる箇所などあればPRください。

余談(日記)

昨日、フジロックの配信を時折覗いていましたが、夜に見たナンバーガールはやはりかっこよかったです。

途中で子供を寝かしつけるために音量を下げ、うすく演奏を流しながら子供を寝かしつけていましたが、ささくれだったサウンドながら薄い音量で流していると睡眠導入にも効果があるのだなと思いました。
(すぐ私も子供も眠りに落ちた)

あと、ナンバーガールを聴きながら子供も楽しそうに踊っていて、子供受けも良いなと思いました。

そんな夏の終りの夜でした。