Latest Publications

Google Spread Sheetをプログラムから操作

昔作ってたスプレッドシートからデータを取得するプログラムが動かなくなってた。
2015年5月に昔の認証方法が使えなくなり、
OAuth2.0だけになったとか。

指定方法を忘れていたのでメモ。

GoogleのAPI Managerで該当のOAuth 2.0 クライアント IDを探す
https://console.developers.google.com/apis/credentials

クライアントID名をクリックすると詳細が表示され、

サービス アカウント
{アカウント名}
{hogehoge}@developer.gserviceaccount.com

というメールアドレス形式の表示が出る。
このメールアドレスをコピーし、
取得したいスプレッドシートで「共有」ボタンからメールアドレスを追加。

これで、このクライアントの認証で
特定のスプレッドシートにアクセスが可能になる。

1つのIPのサーバーで複数のSSLを無料で設定してみた

通常は1つのIPではSSLがひとつとなるが、
それを解決するSNIという仕組みをやってみた。

Apacheが2.2.12以降などバージョン指定があるが
現状のものが対応してた。

ブラウザによって対応の可否があるので注意が必要。
幅広い利用者へのSSLが必要な場合は従来のものが良さそう。
今時のブラウザで使えれば良いのなら問題なし。

Apacheのconfファイルを書き直すだけでできた。
非SSLのVirtualHostの設定と似た感じで
SSLのVirtualHostの設定もできるようになる。

また、1つは従来の証明書を使っていたが
それ以外はLet’s Encryptという無料で使えるサーバー証明書にチャレンジ。

鍵マークなどは出なかったりするようだが
SSL通信はちゃんとできるとのこと。

下記を参考にさせてもらった。
Let’s Encrypt の使い方 – Let’s Encrypt 総合ポータル

ドメイン指定がされている公開サーバーなら使えて、
証明書は90日間ごとに更新が必要。
cronでも自動更新の設定ができそう。

サーバーへのインストール時に
pythonのエラーが出てかなり困った。

/usr/bin/python
は2.6.6だったのに
エラーはpython2.7.11に関してでる。

そのため、
mv /usr/bin/python2.7 python2.7_old
と一時的に外すと解決した。

これがうまく行けば証明書ファイルがサーバー内に保存されるので
confファイルでそれを指定すれば良い。
通常の証明書の取得作業よりだいぶ簡単。

(追記)
取得できるのは7日間で5証明書とのことで制限があるみたい。

どこでもMyMacでAirMac Time Capsuleにつながらない問題を解決

AirMac Time Capsuleに付けた外付けHDDを
外出先からも見れるようにしようとチャレンジした。

「簡単な設定ですぐつながるのですごい」と各所に書いてあったものが
どうやってもつながらず、半日チャレンジして諦める。
翌日再トライしてなんとか解決。

つながらなかった原因は
「IPv6の構成」を「リンクローカルのみ」にしていたことで、
これを「自動」に変えると外部からも接続できるようになった。

これは「自動」だと「IPv6リレーエラー」という警告が出ていたもので、
調べると「リンクローカルのみ」に変えると良いとあったので変更したところ
警告が消えたのでOKと思っていた。

これが原因とは考えなかったので他のところをずっと触っていた。

ダイナミックグローバルホストを登録してみたり、
DNSサーバーを登録してみたり
DHCPの範囲を変更してみたり、
光ルーターの設定を探してみたり。

結局、これを触らず初期設定に近い状態でやればすぐだったのに。
警告は出ているが、利用には問題なさそうなのでこのままにする。

WordPressマルチサイトの子サイトをローカル環境で動かす

サーバーでマルチサイト運用しているものを
ローカル環境にデータを持ってきて
その中の子サイトを動かす方法。

wp-config.phpへの設定などでそのまま動かそうとしたが
どうやっても上手く動かず断念。
無理やり動かす方法。

データベースで、
wp_usersとwp_usermetaを複製して
wp_2_usersとwp_2_usermetaなど
子サイトのprefixに合わせる。

wp-config.phpで
$table_prefixをwp_2など子サイトに合わせる。

表のサイトは上手く表示されない。
ログインはできるようになるので
管理画面からテーマを一旦別のものに変更し、元に戻す。

CakePHPでのMySQLエラー

色々と環境を変えた後で
CakePHP2で作っているシステムにアクセスすると

Missing Database Connection

Error: A Database connection using "Mysql" was missing or unable to connect.	
The database server returned this error: SQLSTATE[HY000] [2002] Connection refused

Notice: If you want to customize this error message, create app/View/Errors/missing_connection.ctp

とエラーが出るようになってしまった。
前は動いてたのに。

ぐぐると、PDO系が入ってない/設定が上手くいっていない時に
このエラーが出るとのことで、
その辺をたくさんいじってみても変わらず。

最終的に、databese.phpの

'host' => '127.0.0.1'

としていたのを

'host' => 'localhost'

に修正することで動いた。

mysqlの入れ替えで上手く動かなくなり
改めて入れなおしたことが原因かと。

vimでlessを扱う時のsyntaxとcolor

MacvimやVimでlessファイルを扱う時に
デフォルトでは対応していないようなので設定したことをメモ。

.vimrcに

au BufNewFile,BufRead *.less set filetype=css

を書くことで、lessファイルをcssと同じ扱いで開いてくれる。

本当はless専用のものがいいんだろうけど、
less.vimを色々と探してきて入れてみたけど
自動インデントがおかしくなったりで不具合が多く諦めた。

ほぼcssの色付けで問題ないんだけど
よく使う1行コメントアウトの色付けがされていなかったので
それだけcss.vimに追加。

MacVimの
/Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/css.vim
をコピーして
~/.vim/syntax/css.vim
に設置して、下記を追記。

syn match cssComment "//.*$" contains=@Spell

sudoコマンドが見つからなくなった

下記のエラーがでるようになって困っていた。

sudo: コマンドが見つかりません
visudo: コマンドが見つかりません
command not found: sudo
command not found: visudo

rootで以下を実行して解決

yum -y install sudo

Googleスプレッドシートの新しいバージョンでワークシートID

ZendGdataでGoogleスプレッドシートのデータを取得している。
スプレッドシートは順次新しいバージョンになっているが
そのワークシートIDの取得部分でエラーが発生した。

以前はgidが0からの連番で
それに対応した値を入れ込んでいたが
新しいスプレッドシートはバラバラの数になっていて、そのまま投げてもエラーになる。

取得方法は

1.gidと474をXOR
2.36進数に変換
3.頭にoを付ける

とのことで、PHPだと

$worksheetId = 'o' . base_convert($gid ^ 474, 10, 36);

で動いた。

Googleスプレッドシートの新しいバージョンでAPI接続エラー

Googleスプレッドシートのデータを
PHPのZendGdataを使って処理する内容に関して。

スプレッドシートを触っていたら、
「新しいスプレッドシートになりました」とのメッセージ。
使い勝手も変わらないので、いいかと思っていたら接続部分でエラーが。

まず、最初は認証エラー。
これはZend Frameworkから最新版をダウンロードしたらできた。

Latest – Downloads – Zend Framework

ただし、Version 1.12.10にしたけど、最初はZend/Xml/Security.phpがないってエラー。
確かに無い。
Zend Framework 1.12.10 MinimalからZend/Xml/の中の2ファイルを移したら動いた。

解決かと思ってたら、数日後に利用するとまたエラー。

Expected response code 200, got 409

409はコンフリクトとのことだけど思い当たるものがない。
見てみると、スプレッドシートでアクセスした時のURLが変わっている。

とういうことで、spreadsheetKeyを新しいURLの文字列にしてアクセスしてみると動いた。

URLエンコードした文字列をURLで取り扱う

システムではなく、サーバーレベルのエラーが出たので確認。

通常は取り扱えなくなっているようで
httpd.confに

AllowEncodedSlashes On

を追加する必要があるとのこと。

ただ、ローカルで上手くいったので
サーバーで試すと上手くいかず。

さらに調べると、Virtualhostの場合はその中に書く必要がある。

<VirtualHost *:80>
        ServerName example.com
        ・・・
        AllowEncodedSlashes On
</VirtualHost>