Latest Publications

Macの消せないVPNを消す方法

VPNを使って見るためにHot shieldという無料アプリを入れたけど
接続できたりできなかったりとイマイチなのでアンインストールした。

Macの環境設定のネットワーク画面で
VPNの接続リストがあるが、
Hot shiledを入れたことでできた下記のVPN設定があった。

US Server
GB Server
JP Server

もう不要なので削除しようと思ったら
削除ボタンである「ー(マイナス)」が
disableになってて押せない。

放置しててもいいんだろうけど
気持ち悪いので調査。

termminalから、

networksetup -listallnetworkservices

と入力するとGUIと同じリストが出力される。

そこから、下記のコマンドで各不要な設定を削除。

networksetup -removenetworkservice "US Server"

スプレッドシートのシートごとのID

いつも探すにに苦労するのでメモ。

table – Google SpreadSheetで使用されているGIDのテーブル – Qiita

GID_TABLE = {
    'od6': 0, 
    'od7': 1, 
    'od4': 2, 
    'od5': 3, 
    'oda': 4, 
    'odb': 5, 
    'od8': 6, 
    'od9': 7, 
    'ocy': 8, 
    'ocz': 9, 
    'ocw': 10, 
    'ocx': 11, 
    'od2': 12, 
    'od3': 13, 
    'od0': 14, 
    'od1': 15, 
    'ocq': 16, 
    'ocr': 17, 
    'oco': 18, 
    'ocp': 19, 
    'ocu': 20, 
    'ocv': 21, 
    'ocs': 22, 
    'oct': 23, 
    'oci': 24, 
    'ocj': 25, 
    'ocg': 26, 
    'och': 27, 
    'ocm': 28, 
    'ocn': 29, 
    'ock': 30, 
    'ocl': 31, 
    'oe2': 32, 
    'oe3': 33, 
    'oe0': 34, 
    'oe1': 35, 
    'oe6': 36, 
    'oe7': 37, 
    'oe4': 38, 
    'oe5': 39, 
    'odu': 40, 
    'odv': 41, 
    'ods': 42, 
    'odt': 43, 
    'ody': 44, 
    'odz': 45, 
    'odw': 46, 
    'odx': 47, 
    'odm': 48, 
    'odn': 49, 
    'odk': 50, 
    'odl': 51, 
    'odq': 52, 
    'odr': 53, 
    'odo': 54, 
    'odp': 55, 
    'ode': 56, 
    'odf': 57, 
    'odc': 58, 
    'odd': 59, 
    'odi': 60, 
    'odj': 61, 
    'odg': 62, 
    'odh': 63, 
    'obe': 64, 
    'obf': 65, 
    'obc': 66, 
    'obd': 67, 
    'obi': 68, 
    'obj': 69, 
    'obg': 70, 
    'obh': 71, 
    'ob6': 72, 
    'ob7': 73, 
    'ob4': 74, 
    'ob5': 75, 
    'oba': 76, 
    'obb': 77, 
    'ob8': 78, 
    'ob9': 79, 
    'oay': 80, 
    'oaz': 81, 
    'oaw': 82, 
    'oax': 83, 
    'ob2': 84, 
    'ob3': 85, 
    'ob0': 86, 
    'ob1': 87, 
    'oaq': 88, 
    'oar': 89, 
    'oao': 90, 
    'oap': 91, 
    'oau': 92, 
    'oav': 93, 
    'oas': 94, 
    'oat': 95, 
    'oca': 96, 
    'ocb': 97, 
    'oc8': 98, 
    'oc9': 99
};

[検索用メモ]
Google SpreadSheet
ページ シート
1枚目
2枚目
3枚目

さくらVPSはさっさとお試しから本登録した方が良い

先日、さくらVPSを新たに1個借りた時。

各種サーバー設定やアプリ設置をしていたのが
何かと時間がかかる。

特に、自分のシステムを入れる時に
200M程度のものをダウンロードするのが
ものすごく時間がかかり、それに付随する不具合などですごく苦労した。

あまりにも遅いのでハズレのサーバーを引いたかと不安になり
色々と調べてみると、お試し期間中の制限を発見。

OP25B設定 メール送信用のポート番号となる外向きの25番ポートを閉じた設定でのご提供です。
転送量制限 サーバからの発信(Outgoing/Incoming)についてデータ転送帯域を「2Mbps」に制限します。
ネームサーバ 無償提供のネームサーバはご利用いただくことはできません。
ローカルネットワーク ご利用いただくことはできません。

お申し込み・お支払いについて | VPS(仮想専用サーバ)は「さくらのVPS」

関係あるのはメール送信ポートが閉じているくらいかと思ってたけど
転送量制限もあったのを知らなかった。

自分のシステムに限らず、初期設定時に色々とインストールする時に
データ転送をする機会も多いので、
スムーズにできるようにさっさと本登録すべきだった。

次回以降気をつけるためにメモ。

capistranoで同一サーバーにcopyで配置する時は注意

相当手間取った。

新しくしたサーバーにcapistranoでデプロイしようとしたら
途中で反応がなくなり、エラーも出ずに固まってしまう。

サイズが大きいこともありテストを重ねるのに時間がかかり
解決に非常に手間取ってしまった。

下記copyでのデプロイを設定している上で

set :deploy_via, :copy

capistranoを起動するサーバーとデプロイ先のサーバーが同じだった場合に
下記のように圧縮ファイルを同じ場所に転送しようとしてファイルが壊れることが原因だった。

sftp upload /tmp/20140828071729.tar.gz -> /tmp/20140828071729.tar.gz

解決策は、コピー先を適当な別の場所に指定する。

set :copy_remote_dir, "/var/tmp"

順を追えばすぐに解決できそうなものだったけど
サーバーが遅い&データが大きいことにより
sshが止まってしまったのが苦労の原因だった。

AWSのSESでのバウンスメールをSNSのhttp(s)で通知してシステム受信

AWSのコンソールでSNSを開く
create New Topic
sesBounceEshima / SES Bounce Eshima などと適当に名前を付ける。
Create Subscriptionで受信するシステムのhttpsのURLを入れる
指定したURLにJsonでデータが来る

$dataJson = file_get_contents('php://input');

最初の認証前の状態だとSubscribeURLが入っているのでアクセスすると認証。
(再送信として同じURLで何度でもCreate Subscriptionできる)

AWSのコンソールでSESを開く
対象のEmail Addressの虫眼鏡アイコンから詳細表示
NotificationsのEdit Configration
SNS Topic ConfigurationのBounceでSNSで作ったTopicが選択できるので設定。

これで、SESでBounceが発生したらSNS経由でhttps通知が来る。

元々はSESのSuppression List解除を
システムからできるようにするために実装したけど
調べたら手動解除か、14日間待つしかない??

もしできるようなら教えてください。

puppy linuxで設定ファイルを変更したせいで起動しなくなった時の対処

旧WindowsXPの古いパソコンを動かすために
USBメモリに入れてbootしているpuppy linuxと格闘中。

起動に関係のある設定ファイル
/etc/inittab
を変更したら起動しなくなって焦った。

puppyのデータの仕組みがまだわかっていなかったのだけど
bootするUSBメモリに入っているprecisesave.4fsというファイルが
起動の度にPCに書き込まれて設定ファイル群として動いている様子。

設定ファイルinittabはその中に入っているようで
Macなどから修正しようとしてもできなかった。

結局、CDブートでpuppyを立ちあげた上で
precisesave.4fsをダブルクリックするとマウントされて
中身を見ることができ、編集できて元に戻せた。

charset=gb2312のメールをPHPで処理

中国在住の日本人の方から
charset=gb2312(中国語)で日本語のメールが来て
PHPの処理で文字化けが発生したので対応。

GB2312というコードで変換をしてみたけど一部の文字が化けてしまった。
GBKと指定すればOK。

//mb_convert_encoding($str, "UTF-8", "GB2312");
mb_convert_encoding($str, "UTF-8", "GBK");

手間取ったのが、メールの件名の文字化け。

mb_decode_mimeheader($headerList['Subject']);

の処理で既に文字化けが発生しているので
その後でmb_convert_encodingをしても直らない。

よく見ると、最初にGB2312でコンバートしていたのと同等の文字化けだった。
mb_decode_mimeheaderをかける前を見てみると、この時点でエンコード形式が指定されているよう。
=?GB2312?B?UmU6IM・・・

無理やりだけど、

$headerList['Subject'] = str_replace('GB2312', 'GBK', $headerList['Subject']);

としてエンコード形式の指定をGBKに置き換えたら直った。

tumblrのモバイルテーマ

tumblrで購入したテーマの相談を受けた。

PC向けはトップページがカスタマイズされているが
iPhoneなどで見ると最新記事がいくつか並んでいるだけの表示になるとのこと。

調べると、スマホからのアクエセスは
初期設定ではtumblrデフォルトの
モバイルテーマが適応されるようになっているとのこと。

テーマの詳細設定から「デフォルトのモバイルテーマを使用」がオンになっているのを
オフにすると、通常のテーマがスマホでも表示される。

ただ、そのテーマがスマホ対応していなければ
見にくい/崩れることになってしまう。

その場合、テーマのカスタマイズで「ページの追加」を選択し
「カスタムデザイン」びurlを「iphone-theme」に設定すると
iPhoneなどモバイルからのアクセスで適応されるテーマを設定できる。

テーマを新たに作ることになるが
下記でデフォルトテーマのソース(?)が提供されている。
ただし、どうも古いようなので最新バージョンではなさそう。

orangkucing/Default-iPhone-theme-for-Tumblr · GitHub

イチから作るのも難しいので、このテーマをベースに
カスタマイズして必要な表示にさせた。

tumblrのLoad Moreをjavascriptで動かす

Tumblrで作ったサイトの相談を受けた。

表示記事に対してjavascriptで絞込がされるテーマにおいて
特定のタグに対しては記事が表示されないとのこと。

確認すると、全記事からではなく表示記事中からの絞り込みのようで
「Load More」ボタンを押して
一旦記事を初期表示以上にロードしてからでないと表示されない。

ただ、初期表示の件数に上限があり
それ以上は設定できない。

ということで、
無理やり「Load More」を押したかのような動きを
javascriptでさせることに。

</body>タグの前に

<script type="text/javascript">
$('#more-projects').trigger("click");
</script>

で動いた。

各サーバーのバックアップをAmazon Glacier(S3)に保存する環境を作った

AWSのS3も初使用。

GlacierはS3の約10分の1の価格で使えるデータストレージ。1G・1円/月くらい。
安価な代わりにデータの取り出しには数時間かかる。
バックアップ向け。

AWS コマンドライン インターフェイス

まずはコマンドラインでAWSを操作できるように環境を作る。

AWS コマンドラインインターフェイス | アマゾン ウェブ サービス(AWS 日本語)

Python 2.6.3 or later

python --version

Pythonのパッケージ管理ツール、pipを準備。
まずはダウンロード
get-pip.py

python get-pip.py

pipが使えるようになったらaws cliをインストール

pip install awscli

確認。

aws --version

awsコマンドを試す

まずはAWSの管理画面でS3を使いバケットという大きい単位の入れ物を作る。
また、IDとシークレットキーも取得し、下記コマンドで設定。

aws configure

これでawsコマンドが使えるようになる。

lsやcpやmvなど使い慣れたコマンドが使える。
こんな感じ。

aws ls s3://
aws ls s3://yourbucketname/
aws cp /home/username/test.txt s3://yourbucketname/test.txt
aws mv /home/username/test.txt s3://yourbucketname/test.txt

Glacierの設定

これはAWSの管理画面から。

バケット単位でもフォルダ単位でもできるけど
特定のバケットをGlacier専用に設定。
そのバケットに入ったらすぐにS3からGlacierに移すようにできる。
保存に関してはS3に保存するのと同じ。

cronでの処理

超手間取った。
コマンドで入力したら動くのにcronだとどうしても動かなかった。
原因はconfigファイルが参照できていなかったこと。

シェルスクリプト内に下記を書いたら動いた。
cronの実行ユーザーと合わせる。

export AWS_CONFIG_FILE=/home/username/.aws/config

例えばこんな感じ

export AWS_CONFIG_FILE=/home/username/.aws/config
scp username@servername":~/backup/hoge.gz /home/username/backup/hoge.gz
/usr/local/bin/aws s3 cp /home/username/backup/hoge.gz s3://yourbacketname/hoge.gz