趣味のプログラミングで遭遇した技術的トラブルや疑問を調査して解決するお話

Ghostにコメント機能(Disqus)を追加する
ghost

Ghostにコメント機能(Disqus)を追加する

Ghostにはデフォルトでコメント機能がないのでコメント機能を追加する方法についてまとめます この記事にテスト目的でコメントしても構いません 目的 Ghostにコメント機能を追加する 背景 誤った記事を放置するのはよくないので少なくとも指摘などを受け付ける窓口が欲しい 前提条件 Ghost v1.x系 選択肢 コメント機能といっても実際にはいくつかの選択肢がある ぱっと調べた感じでは少なくとも下記は実際にGhostに実装可能のようです サービス名 コメントデータの場所 Disqus 外部 NodeBB 内部(?) Facebook 外部 Livefyre 外部 解決策 ここでは利用者も多く簡単で見た目もよいDisqusで実装します 但し、上位5%くらいのサイトには広告が表示されるようで、これを非表示にするには課金が必要です 不満点はありますが、

  • zienchan
    zienchan
Fusion 360の線分(コンストラクション)について
fusion360

Fusion 360の線分(コンストラクション)について

スケッチで線分を扱う場合にコンストラクションなるものが何なのか気になったので調べました 環境 Fusion360 v2.0.4285 目的 スケッチの線分について調べる 背景 線分のコンストラクションが何かを知りたい 結果 線分の種類 線分は実線と補助線がある 実線(標準)とは 描画される "押し出し"などの立体化コマンドの対象となる つまり変形対象になる線である 補助線(コンストラクション)とは 描画されない 実線とは反対に、立体化コマンドの対象とならない 用途としては線分を軸に限定して使う(何らかの操作の基準軸とする)

  • zienchan
    zienchan
GhostでResponse code 405 (Method Not Allowed)のログが表示される問題
ghost

GhostでResponse code 405 (Method Not Allowed)のログが表示される問題

前回のGhostのスケジューラが動作しない問題で表示されていた2つ目のエラーについて引き続き調査します 環境 Server - さくらVPS CentOS 7系 Dcoker - Ghost: v1.24.8 Dcoker - Databese: MySQL Dcoker - proxy: nginx SSL: 有(強制リダイレクト) 現象 記事の投稿時に下記のようなエラーメッセージが表示される [2018-07-14 21:51:00]

  • zienchan
    zienchan
Dockerコンテナ上のGhostでスケジュール投稿が動作しない問題
ghost

Dockerコンテナ上のGhostでスケジュール投稿が動作しない問題

Docker上で稼動しているGhostのスケジュール投稿機能がどういうわけか動作しなかったので調べました 環境 Server - さくらVPS CentOS 7系 FW - iptalbes Dcoker - Ghost: v1.24.8 Dcoker - Databese: MySQL Dcoker - proxy: nginx SSL: 有(強制リダイレクト) 目的 スケジュール機能が動作しない原因を調査し、機能するように修正する

  • zienchan
    zienchan
Dockerコンテナのバックアップ方法
docker

Dockerコンテナのバックアップ方法

目的 Dockerのコンテナごとバックアップする方法について調査する 背景 Dockerコンテナの内容を破棄せずにそのまま現状維持で移行出来る環境を作りたい 結果 バックアップとしてはいくつか方法がある イメージとして保存/読み込みする方法 下記のように、コンテナを一旦イメージ化した上で保存->読み込みする方法 docker commit ${CONTAINER_ID} ${IMAGE_NAME} docker save ${IMAGE_NAME} > ${OUTPUT_PATH} docker load ${OUTPUT_PATH} コンテナをそのままtarにしてエクスポートしてしまう方法

  • zienchan
    zienchan
Ghostで固定ページを作成する
ghost

Ghostで固定ページを作成する

環境 Ghost Version 1.24.7 目的 静的ページ(WordPressでいう固定ページ)を作成する 背景 サイトについての説明やコンタクトフォームなど、記事として投稿一覧に表示されないページが欲しい 解決策 投稿設定に"Turn this into a page"というチェックボックスがあるのでこれをオンする これで目的は達成できた。 但し、多くの固定ページは恐らくデザインに拘ったりしたいはず しかしMarkdownで独自のスタイルを適用するのは厳しいだろう 実はGhostの投稿にはHTMLがそのまま使用できる ところで"

  • zienchan
    zienchan
MySQLのDockerコンテナ上のデータベースをバックアップする
docker

MySQLのDockerコンテナ上のデータベースをバックアップする

目的 MySQLコンテナのデータベースファイルをホスト側にバックアップしたい 背景 Dockerだけで管理しているとうっかりコンテナやボリュームの削除なんてのもありうるのでDockerからも隔離された場所に完全なバックアップを作りたい 解決策 MySQL Dockerの公式ドキュメントを参考にbashを書く 取り出す方法は色々あるが、安全、確実を優先しmysqldumpコマンドを採用することにした #!/bin/bash MYSQL_ROOT_PASSWORD='HOGEHOGEPASSWORD' if [ -z "$CONTAINER_ID" ]; then echo '$CONTAINE_ID is empty. ex.

  • zienchan
    zienchan
EC2のボリューム容量が不足したら通知するようにする
aws

EC2のボリューム容量が不足したら通知するようにする

クローラー等のバッチサービスなんかを可動させているとそのうちディスク容量不足になってダウンするなんてことが考えられます。 ...いやまぁ実際に私の身に起きた話ではあるんですが😇 この問題を防ぐなら理想は常に十分な容量を確保することですが、容量を増やせば当然お金もかかります。 今は使わない容量を無駄に確保してもお金の無駄なので、空き容量が十分でなくなってきた段階で通知して事前に対処することにしましょう。 更に自動的に不要なものをバックアップしてクリーンするようなスクリプトを用意したらほぼほぼ完璧ではなかろうか。 ここではAWSのEC2とCloudWatchを使ったディスク容量の監視と通知方法についてまとめます。 前提環境 サーバー AWSのEC2上にAmazon Linuxを走らせている ボリューム AWSのELASTIC BLOCK STOREを2個使用中 rootとhomeでそれぞれ任意のサイズで分割 やりたいこと root(/)とhome(/home)の複数のボリュームの空き容量が一定以下になったらメールで通知したい 実現方法 CloudWatch Monitoring Scriptsを監視対象のサーバーで定期的に実行してCloud Watchに反映させ、Cloud Watchのアラームでメール通知する 公式ドキュメント

  • zienchan
    zienchan
Linux上でESP32とESP-IDFでhelloworld&Lチカする
esp32

Linux上でESP32とESP-IDFでhelloworld&Lチカする

Linux上にESP-IDFを構築する方法はこちらの記事を参照してください。 サンプルプロジェクトを複製する まずはデモプロジェクトを複製します。 ここではドキュメント通り、~/esp/hello_world/にコピーします。 cd ~/esp cp -r $IDF_PATH/examples/get-started/hello_world . ちなみにIDF_PATHが設定されてない場合は、設定するかesp-idfを置いた場所に置き換えてください。 ちなみにhelloworldはLチカしません。 Lチカをやりたい場合はこちらなので、hello_worldの変わりにblinkプロジェクトをコピーしてください。 回路上のピンアサインの確認と設定(必要であれば)以外は多分同じです。 またLチカのためにESP32の駆動力ついて少し調べました。 データシートのバージョンでころころ変化してるので正しいかどうか自信はないです.

  • zienchan
    zienchan
I2CのRE-START CONDITIONとかいうやつ
electronics

I2CのRE-START CONDITIONとかいうやつ

I2Cデバイスのデータシートの中には"Re-Start Condition"という表現をしたデバイスがあります。 これでハマりました。 嵌ったので忘れないようにまとめます。 Re-Start ConditionはRepeated Start Conditionである 実はRe-Start Conditionなんていうのはなく、"Repeated Start Condition"が正解です。 参考: https://www.i2c-bus.org/repeated-start-condition/ 意訳 Repeated Start ConditionとはSTART中にSTART

  • zienchan
    zienchan
Linux Mint(Ubuntu)上でESP-IDFの開発環境を作る
esp32

Linux Mint(Ubuntu)上でESP-IDFの開発環境を作る

ハードウェア関係の開発環境ってWindows向けのものが結構多いんですよね。不思議です。なんでなんだろ?? ドライバの書きやすさ的にいえばオープンなLinuxとかのがいいんじゃないの??最近はそうでもないのかな。 さて、最近ESP32を使って遊んでいるのですが、私は普段から潔癖症(?)なのでどうしてもというような理由がない限り、基本的にソフトウェアをインストールしません。 exeアレルギーですし、ちょっと試すだけに環境変数やレジストリを汚すようなものは断じてお断りです。 なので私は普段からホスト環境のVMWare上のLinuxで開発をしています。 ところで...Linuxを使う一番の理由はフリーだからです。 VMイメージをコピーしようがOSのライセンス料が発生しません。 スナップショットも移行もらくらくです。 おっと話がそれました。 今回はESP32のSDKであるESP-IDFをそんなVM上のLinuxMint(Ubuntu 14.04.5 LTS)上に構築するお話です。 結論 公式ドキュメントを読めばOKです。 以降は、日本語かどうかの違いだけなので英語が読める人は公式で問題ないです。 依存ライブラリ等を導入する

  • zienchan
    zienchan
Ghostで構築したサイトをGoogleAnalyticsに対応させる
ghost

Ghostで構築したサイトをGoogleAnalyticsに対応させる

公式ドキュメントに既にありますが... 要約 GoogleAnalyticsにアクセス [管理]から[アカウント]を追加して[プロパティを追加](既存のアカウントがある場合はプロパティの追加だけでOK) トラッキング対象はウェブサイト、ウェブサイトの名前は任意の値、URLを入力(URLの暗号化も関わってくるので、SSL対応してる場合はHTTPSにしたほうがよさげ?あとプロトコルはウェブマスターツールとあわせた方が無難かも) 業種は対象サイトのサービスに近いものを選択 タイムゾーンはお好きなものを。私はJSTにした。 トラッキングIDを取得して、[トラッキングコード]をコピー Ghostの管理画面の[Code Injectiomn] -> [Blog Header]セクションにペーストして保存 自身のサイトにアクセスしてGoogleAnalticsの[

  • zienchan
    zienchan
任意のDockerコンテナ上でbashを起動する
docker

任意のDockerコンテナ上でbashを起動する

結構な頻度でdockerを使ったことがない人から"どうやって操作するの?"って聞かれるのでまとめます まずDockerはイメージとコンテナがあり、イメージからコンテナまたはコンテナからイメージを作ることができます 普通(?)はイメージからコンテナを作ってそこで遊ぶはずなので、ここではコンテナを操作するということですね イメージからコンテナを起動する 多くの人は目的に近いイメージから派生させてカスタムしてると思います カスタムする方法はDockerfileやdocker-composeなどがありますね もちろんコンテナからイメージを作れるのでそれでもOKです まぁとりあえずコンテナを操作したいのですからdocker-composeでもなんでもよいのでコンテナを起動しましょう 例えば下記のようにするとubuntuコンテナを起動できます docker run -it ubuntu /bin/bash Unable to find image 'ubuntu:latest' locally latest:

  • zienchan
    zienchan
Ghostで構築されたサイトをGoogle webmastersに登録する
ghost

Ghostで構築されたサイトをGoogle webmastersに登録する

この作業をしなくても故意に拒絶しなければそのうち勝手にクロールしてくれるので致命的ではありませんが、毎日検索して自身のサイトが表示されるかどうかを試すくらいなら、こちらで対策できるものはしておくに越したことはないでしょう。 Google ウェブマスターにGhostで構築したサイトを登録する ここから登録対象のサイトのURLを入力して登録します。 SSL対応している場合は、httpsプロトコルで登録したほうがよさそうです。 根拠は入力例がSSLをプッシュしてるからです。それとセキュアなほうがやっぱり評価高そうじゃないですか。 自分の立場がGoogleだったらそうしちゃいたくなりますね。 勿論、だからって優位になる根拠はやっぱりないんですが。 ドメインの所有者を証明するためにGhostの設定を行う ドメイン所有者であることの証明方法はいくつか用意されていますが、ここではHTMLタグ形式で証明することにします。 もちろん、推奨されているHTMLファイルを設置する方法でもよいのですが、自分の場合はdockerコンテナで運用しているためお手軽なmetaタグを追加する方法にしました。 この方法だと全てのページにわたってヘッダに無断なデータが付与されるので、ファイルベースのがエコですかね。 設定方法は、Ghostの管理画面から[Code injection] -> [Blog Header]に下記のように貼り付けて完了です。

  • zienchan
    zienchan
Fusion 360でカメラ位置をリセットする方法
fusion360

Fusion 360でカメラ位置をリセットする方法

モデリング作業中、カメラをぐるぐる回して確認後、作業するために元の位置、あるいは特定の位置にリセットしたいことが多々あると思います。 ...ありますよね?? 求めているのは、LightWaveでいう"A","Ctrl+A"キーで、Blenderでいうところ"."キーのような選択アイテムが全体に収まるようなカメラ位置のリセット機能です。 古すぎるかな... GUIから操作する場合 右上のビューキューブっていうところにある、HOMEアイコンをクリックするとリセット、厳密に言うとアジャスト(対象オブジェクトが画面に収まる大きさに変更)されます。 ショートカットキーの場合 マウスホイールをダブルクリック ショートカットキーの変更 デフォルトのショートカットキーは押しづらいのとマウスの破損率が上昇しそうなので変更します。

  • zienchan
    zienchan
value-domainでmaingunのDNS設定をする
vps

value-domainでmaingunのDNS設定をする

以前の記事でめでたく立ち上げたghostのdockerコンテナですが、何らかの通知はメールを使用して送信されてくるので、mailサーバーの設定はしておくべきでしょう。 ghostのメールサーバーの設定にはSMTPサービスを使用できるので、例えばgmailやhotmailなどの外部サービスを利用できます。 しかし、私用で使っているアカウント情報をそのまま保存するのはよろしくないでしょう。 勿論、ghost用にこれらのアカウントを新たに取得するのもよいですが、ここではghostがお勧めしているmailgunというメールサービスを使用してghostコンテナに登録する方法をまとめます。 ちなみに、ghostがどんな外部サービスに対応しているのかは、ここを参照するとわかります。 maigunの制限 無料ですが、1万通/月という制限があります。 まぁメルマガやよっぽど通知がない限りは大丈夫でしょう。 maigunのアカウント登録 初めに大事なことを言っておきます。 アカウント登録にはSMS、つまり電話番号が必要です。 まぁSMTP関連のサービスはスパム等、悪用されやすいので電話番号を求められるのは仕方ないですかね。 アカウント登録時にクレジットカードを求められますが、入力不要のプランが選択できるのでちゃんと切り替えましょう。 名前とメールアドレス、パスワードを入力すると仮登録は完了です。 すぐに入力したメールアドレス宛に確認用のURLが送信されてくるので、送信元を確認してブラウザで開きます。

  • zienchan
    zienchan
GhostをさくらVPS上にDocker+SSL(Let's Encrypt)で構築した話
vps

GhostをさくらVPS上にDocker+SSL(Let's Encrypt)で構築した話

偶然、前々から気になっていたGhostのDcokerイメージがDockerHubにあったのを見つけたのでさくらVPS上に構築してみました。 やりたいこと はい。めっちゃシンプルです。 letsencrypt-proxyはLet's Encryptの更新作業を自動的にやってくれるやつで、必要があれば証明書を更新してくれるコンテナ。 この構成だと今後、新しいドメインやアプリケーションが増えても、コンテナを増やすだけでOKというお手軽構成。コレ大事。 やること 自分の場合、既にさくらVPS上でnginx-proxyとletsencrypt-proxyを動かしているので追加するのはghostコンテナ(青い部分)のみです。 なので、この記事ではこのghostコンテナを構築する話です。 ghost用コンテナの作成 既に公式のイメージがあるので、これをdocker-composeで使います。 本当はdocker-composeは開発向けなのでこれを使った本番運用は避けた方がよさそうです。 が、現在は小規模なので実験的にここではdocker-composeを使って運用します。 ghost用のdocker-compose.yml version: "3.

  • zienchan
    zienchan