どうのこうの

名古屋/元フリーランス/スタートアップ勤務/ウェブ/マークアップ/プログラマ/エンジニア

Category: 開発 (page 1 of 3)

capistrano の6回目のデプロイで puma が止まる件

表題の通りなんだけど、 capistrano で何回目かのデプロイで puma が止まることがあって、いろいろ調査をしたら、6回目のデプロイで puma が止まることがわかりました。

「6回目」というのは、 capistrano がデプロイ先のサーバーに保存する世代の数が「5」だった場合(初期値が「5」)に、一番古い世代を削除するタイミングが「6回目」で、そのタイミングで puma の設定ファイルが Gemfile を見失うのが原因でした。

下記は unicorn の場合だけど、全く同じ症状でした。

capistrano + unicornではまった。 – blog unlearned

上記ページにもあるけど、

みたいなエラーが発生して、 puma が止まってしまいます。

修正方法としては、 /path/to/app/config/puma/production.rb みたいなファイルがあるとして、

を追加することで直りました。

たくさんググったけど、意外と誰も書いてなさそうだったので、書きました。どなたかのご参考になれば幸いです。

参考

https://github.com/puma/puma/blob/master/examples/config.rb

ミゲル君が消臭力の歌を歌ってくれる Amazon Dash Button 作った

ミゲル君が消臭力の歌を歌ってくれる Amazon Dash Button を作ってみました。

作り方

Amazon Dash Button を購入する

まずは Amazon Dash Button を購入します。もちろん、消臭力がいいと思います。

消臭力 Dash Button
消臭力 Dash Button

Amazon Dash Button をただの IoT ボタンにする

下記ページを参考に Amazon Dash Button をただの IoT ボタンにします。

Amazon Dash ButtonをただのIoTボタンとして使う – Qiita

上記ページに出てくる dasher の使い方については下記のページが詳しいです。

Amazon Dash Button と slackを連携させる – kakts-log

下記コマンドで Amazon Dash Button の MAC アドレスを確認して、

config/config.json を下記のように作って、

下記コマンドで dasher を立ち上げます。

config/config.json は後述する sinatra で http://localhost:4567 を立ち上げるので、そこにアクセスするだけの簡単仕様です。

mp3 を用意する

「消臭力〜♪」のところだけの音声データが欲しいので、 YouTube から CM 動画をダウンロードしてきて、音声をトリミングします。

youtube-dl を使って CM 動画をダウンロードする

YouTube の動画をダウンロードできる youtube-dl を使って、 CM 動画をダウンロードしてきます。

参考: コマンドラインからyoutubeを再生する – Qiita

youtube-dl のインストール

CM 動画のダウンロード

CM 動画を mp3 に変換する

ffmpeg のインストール

ダウンロードした mp4 を mp3 に変換する

参考: ffmpegを使用した、mp4ファイルからmp3ファイルを作成するコマンド – Daily noise

mp3 から必要な部分だけトリミングする

QuickTime Player でトリミングができるので、がんばって作ります。

消臭力ボタンを押すとミゲル君が歌うようにする

dasher がアクセスするページを作ります。

サクッと作りたかったので、 sinatra を使いました。

sinatra のコードは下記の通りです。

下記コマンドで sinatra を立ち上げて、

http://localhost:4567 にアクセスすると消臭力の歌が流れます。

 

以上です。

本当は YouTube をそのまま再生しようと思ったんだけど、ちょうどいい尺の動画がなかったので、わざわざ音声データを作ったんだけど、途中、「僕は何をやってるんだろう…。」とはちょっと思った。

環境変数表示API「ENV Man」を公開しました

ブラウザのリクエスト送信情報やサーバーの環境変数を表示する「ENV Man」を開発し、MITライセンスで公開しました。

確認くんとの違い

同じようなウェブサービスとして 確認くん があります。

確認くんはとても便利で、普通に使うぶんには特に不便はないのですが、例えば Ruby のプログラムからのリクエストがどういう風に送られているかを知りたいときに API でアクセスして情報取得できたら便利かなと思って、「API 機能付きの確認くん」的なこのプロダクトを作りました。

「ブラウザからアクセスして情報を確認する」といった確認くんと同じような使い方ももちろん可能ですが、 JSON と XML (とその他)の形式での出力に対応していますので、JSON 形式で取得して必要な値だけ利用する、みたいな使い方をすると便利かなと思っています。

たとえば、下記のようなコードでアクセス元のユーザーエージェントが取得できます。

Ruby がレスポンスです。ユーザーエージェントが Ruby であることがわかります。

これだけだと別に便利でもなんでもないんだけど、「ユーザーエージェント名に任意の文字列を指定したけど、ちゃんと想定通り設定されているか確認したい」「プロキシを通したけど、ちゃんとプロキシを経由しているか IP アドレスを確認したい」みたいな場合に、プログラム側で動作確認までできると便利かな思っています。

っというか、私自身がそのような API が欲しかったので、自分で作りました。
(一応、探してみた限りではそういったサービスはなさそうでしたが、すでにあったら悲しい…。)

 

記事が少々長くなってきたので、以下に ENV Man の特長をまとめます。

ENV Man の特長

API として使える

すでに書いた通りですが、 API として利用できます。出力形式は JSONXML の他にプレーンテキストプレーンな HTML に対応しています。JSON や XML はプログラムから利用する場合に便利に、プレーンテキストとプレーンな HTML はファイルとしてローカルストレージに保存して、あとで見る場合に便利かなと思っています。

レスポンシブデザイン対応

レスポンシブデザインに対応していますので、スマホからも見やすいです。

MIT ライセンス

MIT ライセンスなので、無料で使えて、自由に改変できます。商用利用も OK です。(商用で利用したい人なんて多分いないでしょうけど。) fork して独自の改造を加えたり、自分で用意したサーバーに設置したり(ENV Man は Ruby + Sinatra で開発していますので、 Sinatra が動作するサーバーの準備が必要です。)、後述の「Deploy to Heroku」ボタンから必要なときだけ Heroku で動かすのもいいかなと思います。( http://env.dounokouno.com を API として使ってもらってももちろん OK です。)

Deploy to Heroku に対応

上に書いた通りですが、「Deploy to Heroku」ボタンから簡単に Heroku で動かすことが可能です。

「Deploy to Heroku」ボタン を押したあとに Heroku に設定する項目はアプリケーションの名前だけです。(アプリケーション名は任意なので、それすら設定しなくても OK 。)

 

Github のリポジトリページ の「Deploy to Heroku」ボタンをクリックすると Heroku のページが表示されるので、

 

「App Name」を入れて(任意なので入れなくても OK 。入れないと適当な英数字が設定される。)、「Deploy for Free」ボタンを押すと「ENV Man」のインストールが始まり、数秒後(十数秒後かも)には Heroku 上に自分だけの「ENV Man」ができあがります。

まとめ

ブラウザのリクエスト送信情報やサーバーの環境変数を表示する「ENV Man」を作って公開した話でした。

不具合など発見されましたら dounokouno[at]gmail.com までご連絡ください。

また、良いカスタマイズができましたら、Pull Request をお送りいただければ幸いです。

Env Man について

2015年6月7日 追記

MOONGIFT 様でご紹介いただきました!

ENVマン·Webブラウザで素早く環境変数を確認しよう MOONGIFT

参考書籍

APIデザインの極意 Java/NetBeansアーキテクト探究ノート
APIデザインの極意 Java/NetBeansアーキテクト探究ノート

Codaのプラグイン開発のために知っておくべきこと

Coda 2.5が公開されましたねー。
(2014年10月16日に公開)

Panic Blog » Coda 2.5をご紹介します
http://www.panic.com/blog/ja/introducing-coda-2-5-j/

 

Sublime Textが人気な昨今ですが私個人はCoda派なので、引き続きCodaを使い続けますし、引き続きCodaを応援しています!

さて、ちょっと作りたいものがあって、Codaプラグインの作り方を調べたのでメモ。

オフィシャルドキュメントは下記ページを参照。

Coda プラグインを作成する
http://panic.com/jp/coda/plugins-dev.html

日本語のドキュメントがなくなってた…。
わかりやすいドキュメントだっただけに残念…。

英語のドキュメント(ってほどでもないけど…)は下記。

panicinc/CodaPluginKit
https://github.com/panicinc/CodaPluginKit

Codaプラグインを作る前に

自分が作りたいプラグインがすでに誰かによって作られていないか調べておくことで、「プラグイン作ってみたけどすでにあるじゃん!」ってならなくて済みます。

とりあえず、オフィシャルサイトのプラグイン一覧と、Githubで「coda plugin」で検索しておけばいいのかなぁと思っています。

Coda Plug-ins
http://panic.com/coda/plugins.php#Picks

Search · coda plugin
https://github.com/search?q=coda+plugin&type=Repositories&ref=searchresults

→ Githubのほうは結構数が多いので、全部に目を通すのは大変かも。

Codaプラグインの作り方の種類

Codaプラグインの作り方は下記の二種類。

  • 「CocoaプラグインAPI」を使用する
  • 「Coda Plug-in Creator」を使用する

CocoaプラグインAPI」のほうが複雑なことができて動作が速いけど、CocoaってことはXcodeでObjective-C(今はSwift?よくわかってない…。)を書かないといけないので、敷居が高い。(現時点では私はObjective-Cをほとんど書いたことがない。)

Coda Plug-in Creator」は「Coda Plug-in Creator.app」っていうMacアプリを起動して、「入出力時に何をするか」「何を入力として受け取って、どのように出力するか」「ショートカットに何を設定するか」をGUIで作ることができて、実際の処理は好きなプログラム言語で書くことができる。

Codaプラグインの環境変数を表示するプラグインを書いてみる

Codaプラグインの環境変数を文書中に出力するプラグインをいくつかのプログラム言語で書いてみました。

環境変数は下記の通り。

CODA_BUNDLE_PATH
プラグインバンドルへのパス
CODA_BUNDLE_SUPPORT
プラグインバンドルに含まれるサポートディレクトリへのパス(サポートファイルを使用した場合)
CODA_FILEPATH
編集された書類のファイル名を含むフルパス。未保存の書類の場合は空
CODA_LINE_ENDING
ソース書類の末端で使用されている文字(CR、LF、CR+LF等)
CODA_LINE_INDEX
選択されている行のキャラクタインデックス
CODA_LINE_NUMBER
現在の行番号
CODA_SELECTED_TEXT
選択されているテキスト部分
CODA_SITE_LOCAL_PATH
書類が含まれているサイトへのフルローカルパス。サイト設定を利用していない場合、またはサイト設定のローカルパスが未設定の場合は空
HOME
現在のユーザのホームディレクトリへのパス

 

プログラムと実行結果は下記。

shell

プログラム

実行結果

PHP

実行結果

Ruby

実行結果

 

コードはGithubに置いておくので、どなたかの参考になれば幸いです。

https://github.com/dounokouno/Print-Env.codaplugin

Codaプラグインの削除方法

Coda 2.5からはCodaの環境設定から削除できるようになってた。
ありがたい。

戦国IXAの個人的なGreasemonkeyのUserScriptに機能追加しました

mixi版戦国IXAワールド3+4で、
新章が始まりましたね!!

以前作った戦国IXAのGreasemonkeyのUserScriptは、
無事、新章(第五章)で動作しました。

ついでにいくつか機能追加をしましたので、
v0.2を公開します。

戦国IXAの個人的なGreasemonkeyのUserScript

 

v0.2で追加した機能は下記の通りです。

  • 『「兵士一覧」の下に「合計兵士数」を追加』する機能を追加
  • 『「出陣確認」画面に合流用情報コピー欄を追加』する機能を追加
  • 「1ずつ編成」を削除(兵編成の画面が変わり、1ずつ編成することが簡単になったため)
  • 『「待機武将一覧」の武将ステータスに「次のレベルの経験値」(次LvEXP)を表示』機能を利用している場合に、合成画面のレイアウトが崩れる不具合を修正

 

そんなわけで、mixi版戦国IXAワールド3+4の織田家で待ってます!
一緒に天下統一を目指しましょう!!

jQuery.Zip2AddrByClickを公開します

郵便番号の入力補完はkotarok様のjQuery.zip2addrが個人的に大好きで、
よく利用させていただいています。

ただ、keyupイベントやchangeイベントで補完される動きがあまり好きではなくて、
「郵便番号から住所を入力」ボタンのボタンクリックで補完されるようにカスタマイズしたブランチを作ったりしていました。

dounokouno/jQuery.zip2addr at with_click
https://github.com/dounokouno/jQuery.zip2addr/tree/with_click

 

自分で作っておいて何ですが、ボタンクリックなら、
ボタン自体にjQueryプラグインを読み込むようにしたほうがスマートかなぁと思い、
ボタンクリックに特化したバージョンを新しく作りました。

主に自分で使うために作りましたが、
どなたかのご参考になれば幸いです。

ダウンロードはこちらからどうぞ。

dounokouno/jQuery.Zip2AddrByClick

動作サンプルは下記からどうぞ。

jQuery.Zip2AddrByClickサンプル

 

メインのロジックはkotarok様のjQuery.zip2addrをそのまま利用させていただいております。
素敵なツールを公開していただいているkotarok様に感謝いたします。

戦国IXAの個人的なGreasemonkeyのUserScriptを公開します

今(っというか結構前から)、mixi版の戦国IXAにハマってまして、
多分、今、一番閲覧している時間が長いサイトはmixiですw

戦国IXAはmixiでしかやったことないですが、
SafariやChromeだと画面遷移時に一瞬だけ表示が真っ白になって目が疲れるので、
戦国IXAのためだけにFirefoxを立ち上げています。

で、ポチポチとクリックして遊んでいるんですが、
いい加減クリックに疲れてきて、
もう少しクリック数を減らせないかなと思って、
GreasemonkeyでUserScriptを書いてみました。

UserScriptは既にsengokuixa-mokoってのがあるらしいけど、
画面が崩れるし、多機能過ぎるし、機能を説明しているサイトが無いし、
バージョン管理されてないからどれが最新版か分からないし、
ってことで自分で書いてみることにしました。

一応、そこそこ動くのものができたので、
公開することにします。

インストールと機能説明は下記URLを参照ください。

戦国IXAの個人的なGreasemonkeyのUserScript — Gist

 

GreasemonkeyのUserScriptは初めて書きましたので、
バグや間違いやもっと効率の良い書き方等ありましたら、
ご指摘いただければ幸いです。

そんなわけで、mixi版戦国IXAワールド3+4の織田家で待ってます!
一緒に天下統一を目指しましょう!!

部首検索ツールを作りました

個人的に必要にかられて、
部首検索ツールを作りました。

探せば同じようなツールはありそうですが、
正式な名称(「水部」のような名称)と通称(「さんずい」のような名称)を同時に知りたくて、
そういうツールは無さそうだったので、
それならってことで自分で作りました。

 

部首検索 – 漢字から部首を検索
20110402_001

 

名前の通りですが、
漢字から部首を検索できます。

漢字から部首を知りたいとき、ありますよね?
僕はあります。

使い方は文字を入力するだけなので、
よろしければいろいろ検索してみてください。

 

あと、Windowsで動作確認をしていないので、
Windowsユーザーの方で動かなかったなど不具合がありましたら、
コメントいただければ幸いです。

もちろんMacでも不具合等がありましたら、
コメントいただければ幸いです。

 

漢字の分類には「《Unicode/CJK統合漢字》 漢字検索」様の、
「Unihanデータベース抜粋(水平タブ区切りテキスト形式)」を利用させていただいております。

この場を借りてお礼申し上げます。

import.js を書いてみた

import.js を書いてみました。

Mac の Firefox 3.6 と Safari 5 でしか動作確認してません。
上記以外のブラウザで閲覧された方は、
動作しているかコメントもらえるとうれしいです。

ソースとか英語へのツッコミもお待ちしています。

英語は正直自信がありません。
ソースにも自信ないですけども……。

 

書いてみた理由

import.js で検索してみると、
ほとんどが document.write していて、
createElement して appendChild したほうが JavaScript っぽいんじゃないかなと思ったので、
そうやって書いてみました。

ただ Safari で動作確認したときに、
require 関数で読み込んだ JavaScript ファイルが順番通り読み込まれてないように見受けられました。
document.write なら書いた順番に読み込まれるんでしょうか。

未確認です。
詳しい方、ご教授ください。

 

っていうか、
github を使ってみたかっただけなんですけどね。

お正月に振り返ろう「人の一生を時計一周24時間に例えると今何時?」

新年あけましておめでとうございます。

年末年始は振り返りの時期ですよね。
年末には「今年はこんな年だったなぁ。」と考え、
年明けには「今年はこんな年にしたいなぁ。」なんて考えたりしています。

そんな振り返り作業を自動化できないかと思い、
「人の一生を時計一周24時間に例えると今何時か?」を調べるツールを作ってみました。

 

人の一生を時計一周24時間に例えると今何時?
20110103_001

 

元ネタは「人の一生を時計一周24時間に例えたお話」ってやつです。
良い話ですよね。

29歳の僕は現在「午前8時52分」でした。
もっと遅い時間で鬱な気分になるかなと思ったら、
そうでもなかったです。

Twitter / @tagawa: dounokounoさんの一生を時計一周24時間に例 …

 

みなさんも良ければ年末年始の振り返りに、
人の一生を時計一周24時間に例えると今何時?」を使ってみてください。

使ってみたら、
結果をTwitterでつぶやいたり、
このブログにコメントしたりしてくださいね。

Twitter / 検索 – http://etc.dounokouno.com/whattime/

 

そんなわけで、
本年もどうぞよろしくお願いいたします。

Older posts

© 2017 どうのこうの

Theme by Anders NorenUp ↑