Category Archives: 趣味Program

coreserver ssh登録 Python Script で困っている人がいるはず……

coreserverのssh登録、サーバーをリニューアルされた頃から、Pythonスクリプトで正常に登録できなくなっていた模様。Launch Agentの構文に不具合がある? cronだと動くのか? と悩みつつ、しばらくは「面倒やなぁ」と思いつつ、30日ごとにコンパネにログインしてボタンをクリックしていたんですが……

coreserverのssh登録、サーバーをリニューアルされた頃から、Pythonスクリプトで正常に登録できなくなっていた模様。

ええ加減いやになってきて調べて見たら、ホスト名とか表示されるようになってる。
なんか関係あるんかと思ってソースを追うが、ん? 関係あらへんような………

答えはもっとシンプルでした。

最終 if ブロックの url が変更されてます。
いま検索して出てくるソースはこの2サイト。
[Python]CORESERVERのSSH登録を自動化する
coreserver の ssh 登録を pythonによって手動でやる
どちらも同じ内容(同じ人?)。

https://ss1.coressl.jp/www.XXX.coreserver.jp/jp/admin.cgi

となっていますが、

https://XXX.coreserver.jp/jp/admin.cgi

これでOK牧場。以下更新ソースです。

#!/usr/bin/env python
# coding: utf-8

import urllib

def get_ip():
    f = urllib.urlopen('http://dyn.value-domain.com/cgi-bin/dyn.fcg?ip')
    ip = f.read()
    return ip

def regist_host(ip, url):
    userid = 'ACCOUNT'
    passwd = 'PASSWORD'
    keyword = u'SSH登録'
    encoding = 'shift-jis'
    p = [
        ('id', userid),
        ('pass', passwd),
        ('remote_host', ip),
        ('ssh2', keyword.encode(encoding)),
    ]
    
    params = urllib.urlencode(p)
    #print params
    up = urllib.urlopen(url, params)
    #print up.read()

if __name__ == '__main__':
   url = 'https://XXX.coreserver.jp/jp/admin.cgi'
   ip = get_ip()
   regist_host(ip, url)

あとは cron を回すなり、Launch Agent に登録するなりで自動化しましょう。

オンラインストレージを Nextcloud へ移行

随分時間が経過していますが、ownCloud から Nextcloud へ移行しました。

ownCloud

  • スマートフォンのクライアントが有償
  • 動作環境によって同期されず、ロックファイルが増えていく
  • 動作環境によって、アップデートが失敗する(成功した試しがない)

対して Nextcloud

  • スマートフォンのクライアントが無償提供されている
  • 動作環境によってサーバーに古いファイルが溜まることがある(同期はされている)
  • アップデートは概ね上手くいく(経験上、失敗はなし)

といった感じ。(個人の感想です)

「同期されない=オンラインストレージの意味がない」といった判断と、クライアントが無償提供されていることから Nextcloud へ移行しました。
古いファイルが残るのは(同期されないことに比べたら)大した問題ではないし、履歴が残っているとでも考えれば(笑)

ログイン画面もカスタマイズできるし、アプリも追加できるし、なんならメールの確認やチャットまで組み込めるので、イントラサーバー等で運用すると超快適かもしれませんね。そこまでコストはかけられないので、レンタルサーバでの運用です。
できるだけ高速で高負荷に耐えられるサーバーに移転しました。なかなか快適です。

ご興味のある方、ご相談いただければ相談に伺います。

Page Speed Insights

ここ数年は SSL だの サイトの応答速度だの………
書いている内容に関することよりも、ページが早く安全に見えることが重要っぽいですね。
まぁ、パクリ記事が多いからしょうがないんですかね。
調べ物をしていると、ほとんど同じ内容でいくつものサイトが出てくるのも本当の話。

そう思うと、数秒待って開かないサイトは、間違いなく閉じちゃいますね。
なんであんなに開かないんだろう。Javascript? CSSが巨大? 画像が重い?
エントリーが多すぎるとか?

ということで気になったのでやってみた次第。
Googleのサービス Page Speed Insights

広告も全部外して、CSSもミニファイして影響のない物は非同期に。Javascriptも同様。さらにデスクトップとモバイルの表示エリアが異なるので、読み込まれるJSとCSSもUAで振り分けて非同期読み込み。

致命的な警告は出なくなり、緑のサインになったようです。
まずまずな感じですね。

mobile

desktop

あとは「ページ表示のどこに時間がかかったかチェック」のブックマークレットでも試して見ましたが、
「ごっつい速いですね。」と褒めていただきました。
ま、ページのソースも短いですし (^^;

gottu

調子に乗ってオンラインストレージもSSLに

Let’s Encrypt で SSL 化がうまくいったもんだから、調子に乗って ownCloud も常時SSL化。
でも遅い……なんとか高速化できないものかと情報を漁ってみると……

owncloud

ownCloud9 + php7 で爆速オンラインストレージ構築というスライドを発見。
どうやら細々としたノウハウがあるようだけど、ownCloud9 + php7 という組み合わせは試してみる価値がある様子。

幸か不幸か、本体はこの前9にアップデートしたところなのでphp7に切り替えるだけ。早速やってみると……なんと体感できるぐらい早くなってるじゃないですか。

しばらくこの感じで使ってみることにします。

そう。誰しもが考えますよねぇ。
wordpressもphp7で動かしたら早くなるんじゃねぇの?
プラグインを一つ諦めましたが……
速くなりました。うひひ。

こちらもしばらく様子見。

今さらながら Let’s Encrypt で SSL化

あれ以来マシンも順調に動いております。
残念ながら、MacPro Early2008 は、次期 macOS Sierra の対象外となってしまいましたが……OSもようやく OS X El Capitan‎ に。そして AdobeCC2015 に完全移行しました。
幸いユーティリティ類も全て問題なく動作しておりますし、ちょっともたつく以外は(笑)特に問題はありません。
余っていたSSDによく使うアプリを移動して、アプリフォルダにシンボリックリンク……とすると、インストール済みアプリとして認識してない様子。
しばらくの辛抱なので、このまま続行です。

さて閑話休題、紆余曲折しながらもようやく常時SSLとしました。
以前に使っていた coreserver が SNI に対応したとのことで、固定IP契約不要でSSLが使えそうなので欲をかいてやってみようと思ったのがきっかけでした。
最初は Cloud Flare (https://www.cloudflare.com)を試すも、ネームサーバを書き換えたら、DNS も Cloud Flare で管理されていることに気づかず……かなりハマりました。
証明書を見てみると、複数のドメインがひとまとめ、ものすごいパックになっていてビックリ。どことなく挙動もおかしかったので、いったんすべて抹消。

共用サーバーなので自動更新は無理なのですが、そんなに手間でもなさそうですし、面倒で嫌になるまでやってみようかと思って Let’s Encrypt をインストール。
幸いベータ版からの先人が数多く存在するので、環境を整えるまでの時間はさほどかかりませんでした。
というかそのあとも、証明書を発行してサーバーにインポートするのもあっけなく終了。

誰かの役に立つかもしれないので、備忘録として拙いログを晒しておきます。

El Capitan (10.11.5)
Mac Pro (Early 2008)
Coreserver (core-A)
Xserverで他のドメインは使用(AレコードのみCoreserverに向けている)
value-domain でドメイン管理
GoogleApps 使用

なんとも特異な環境ですが(笑)

Let’s Encrypt のインストールは「ウェブタタン」さんのエントリーが、非常にわかりやすく解説されていて助かりました。

Let’s encryptのSSL証明書をMacで作成!さくらレンタルサーバーに導入する方法

あちこちを見ながらやったので、私の環境は新旧織り交ぜた環境になってるような気がします。
まず公式を見て、言われるがまま Git から certbot を……

git clone https://github.com/certbot/certbot

として云々。
途中で権限エラーや get できないからソースからコンパイルしちゃうよ〜みたいなメッセージがズラズラと……。
半ばあきらめていたところ、先ほどの「ウェブタタン」さんのエントリーを発見。

じっくり読み進め、表示されているエラーを解説通りに進めていき、なんとか動作するように(笑)
まぁこの辺りは本職でないので、基本結果オーライで行っちゃってます。
そして、待望の証明書発行へ。

$ cd certbot
$ ./certbot-auto certonly --manual -d example.com -d www.example.com -d sub.example.com

とすると、UNIXっぽいスクリーンが表示されますので、ガイドに沿って進めていきます。

 

 

今回はサブドメインも含めて、3つをひとまとめにしたSSL証明書を発行しますので、-d オプションでドメインを3つ並べます。

Make sure your web server displays the following content at
http://example.com/.wexx-xxxn/acme-challenge/OdNmEVBSEvJJqvqZmGdmB_1yVBSEvJJqdmDFyo before continuing:

OdNmEVBSEvJJqvqZmGdmB_1yVBSEvJJqdEvJJqmDFyoFyo.uh6sL2eW-jvA6CMmUz-Hs67e4bBU_doPOlIjxnzRGvg

If you don't have HTTP server configured, you can run the following
command on the target server (as root):

mkdir -p /tmp/certbot/public_html/.well-known/acme-challenge
cd /tmp/certbot/public_html
printf "%s" OdNmEnv12_540PB_1yW6KDkIVBSEvJJqvqZmGdmDFyo.uh6sL2eW-jvA6CMmUz-Hs67e4bBU_doPOlIjxnzRGvg > .well-known/acme-challenge/OdNmEnv12_540PB_1yW6KDkIVBSEvJJqvqZmGdmDFyo
# run only once per server:
$(command -v python2 || command -v python2.7 || command -v python2.6) -c \
"import BaseHTTPServer, SimpleHTTPServer; \
s = BaseHTTPServer.HTTPServer(('', 80), SimpleHTTPServer.SimpleHTTPRequestHandler); \
s.serve_forever()"
Press ENTER to continue

こんなスクリーンで [Press ENTER to continue]と云うプロンプトで待機してます。
cui 操作が楽な人は、SSHでサーバーに接続した後サイトルートに移動して

mkdir -p .well-known/acme-challenge
printf "%s" OdNmEnv12_540PB_1yW6KDkIVBSEvJJqvqZmGdmDFyo.uh6sL2eW-jvA6CMmUz-Hs67e4bBU_doPOlIjxnzRGvg > .well-known/acme-challenge/OdNmEnv12_540PB_1yW6KDkIVBSEvJJqvqZmGdmDFyo

とかでいいんじゃないでしょうか。
私はFTPでディレクトリを作ってファイルをアップしました。
結果は目的のファイルにアクセスできればいいだけの話だと思うので、お好みでどちらでもいいと思います。

ドメインが3つあるので、ドメインごとに3回認証作業を行います。

無事終了すると

/private/etc/letsencrypt/live/[ドメイン名]

にシンボリックリンクが出来上がります。

root権限のあるサーバーだと、この証明書のシンボリックリンクを然るべき場所に置いて、cron で回せば自動更新……ということのようです。

あとは Value Dmain のコントロールパネルで「SSL証明書のインポート」をするだけ。

/private/etc/letsencrypt/live/[ドメイン名]/cert.pem (証明書)
/private/etc/letsencrypt/live/[ドメイン名]/chain.pem (中間証明書)
/private/etc/letsencrypt/live/[ドメイン名]/fullchain.pem (ひとまとめになった証明書)
/private/etc/letsencrypt/live/[ドメイン名]/privkey.pem (プライベートキー パスフレーズなし)

証明書はテキストファイルなので、テキストエディタで開いて貼り付けます。
必要なファイルを選んで貼り付けてください。

coreserver のドメイン設定でSSLに割り当てるドメインの設定を忘れずに。

SSL 配下でうまくリファラっぽく送る方法を思いついたので、ついでにダウンロードサーバーの php も SSL 配下で正常動作するように書き換えました。

Functions.php って……

wordpress のテーマで使うアレです。
ココにかくphpって、単独ファイルにしてプラグインヘッダ(っていうんですかね)を追加すると、プラグインとして動作するんですね。
トップページに「最近のPOSTはこんな感じです」ってのを載せてますが、functions.php に書いてる内容を反映させてます。
で、iPhone 等のモバイル端末から見ると残念なことになってたのですが(笑)、プラグイン化することで、どこから見ても見えるようになりました。

「システム環境設定を開いている間は何もしない」処理を追加

先ほどのスクリプト「カーソルサイズを変更してみる」の改訂版、「システム環境設定を開いている間は何もしない」処理を追加したソースです。

tell application "System Events"
	repeat
		set pList to name of every process whose visible is true and frontmost is true
		if (pList = {"Finder"}) then
			my front_app()
		else if (pList = {"System Preferences"}) then
			my quiet_app()
		else
			my other_app()
		end if
		--何秒おきに監視するかの秒数
		delay 3
	end repeat
end tell

--システム環境設定を開いている間は何もしない
on quiet_app()
end quiet_app

--Finderがアクティブの場合
on front_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		if UI elements enabled then
			tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
				set value to 4
			end tell
		end if
	end tell
end front_app

--他がアクティブの場合
on other_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
			set value to 1
		end tell
	end tell
end other_app

--システム環境設定 > マウス を開く動作
on open_pref()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.mouse"
	end tell
end open_pref

--システム環境設定 > ユニバーサルアクセス を開く動作
on open_univ()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.universalaccess"
	end tell
end open_univ

カーソルサイズを変更してみる

デュアルモニター環境で画面が広くなると快適なんですが、カーソルを見失うのが長年の悩みでして……。

カーソルを大きくすると追いかけやすくなっていい反面、Photoshop 等でブラシサイズまで大きくなってしまい、正確なブラシ操作が困難になります。
当たり前なんでしょうが、Finder で表示されているカーソルと標準の黒矢印は綺麗に拡大されますが、他のアプリケーションではカーソルデータを切り替えて表示しているんですよね。

Cursor01
標準のカーソル。左が標準サイズ、右が拡大(たぶん400%)

brush
こんな感じ。(Adobe系CS5)

以前、Magic Mouse を使い始めた頃、不意のスクロールでかなりイライラした際、Applescript で「Adobe系アプリがアクティブになっている時だけスクロールをオフにする」というものを作りました。
その時は腱鞘炎を起こしたため、Magic Mouse からトラックボールに変えてしまったので作ったことすら忘れていました。

で、そのスクリプトをいじれば
「Finder がアクティブになっている時だけカーソルサイズを特大にする」
ってはできるんじゃね? という思いつきで作りました。

気になる人は気になると思いますが

  • Applescript なので常時起動させておく必要があります。
  • 常時システム環境設定を開いておくことになります。(ただしバックグラウンドで)
  • 監視時間はあまり短くできない。

そんな感じです。

見せるのが恥ずかしいようなソースですが、こちらも公開しておきますね。
Applescript エディタにコピペすれば動作確認ができます。

tell application "System Events"
	repeat
		set pList to name of every process whose visible is true and frontmost is true
		if (pList = {"Finder"}) then
			my front_app()
		else
			my other_app()
		end if
		--何秒おきに監視するかの秒数
		delay 3
	end repeat
end tell

--Finderがアクティブの場合
on front_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		if UI elements enabled then
			tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
				set value to 4
			end tell
		end if
	end tell
end front_app

--他がアクティブの場合
on other_app()
	my open_pref()
	my open_univ()
	tell application "System Events"
		tell slider "カーソルのサイズ:" of tab group 1 of window "ユニバーサルアクセス" of application process "System Preferences"
			set value to 1
		end tell
	end tell
end other_app

--システム環境設定 > マウス を開く動作
on open_pref()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.mouse"
	end tell
end open_pref

--システム環境設定 > ユニバーサルアクセス を開く動作
on open_univ()
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.universalaccess"
	end tell
end open_univ

(抜けがあったので修正しました)

追記
カーソルを見失いにくくなりましたが、システム環境設定をいじるときは不便なので、アプリ名を決めて、前面のアプリが「システム環境設定」だったら、一時停止する、的な処理を加えないといけませんね(笑)

iPhone5のバッテリードレインとiCalの507エラー

iPhone5 使い心地は快適なんですけど、バッテリーの消耗が異常なぐらい早い(泣)。
この状況ってのは尋常ではないわけで。

先日も夜の打ち合わせに出かけて、19時半の時点で97%。
22時の終了時にはなんと17%
どう考えてもおかしい。テザリング中ですか(笑)

調べてみると
MMSを一度設定をクリアするといいとか
ネットワーク設定をリセットするといいとか
復元したら治りますとか
諸説ありますが、というか原因がいろいろあるんでしょうね。
一時的に治ったように見えるんですが、充電してしばらく経過するとグングン減る。
もう泣けるぐらい(笑)。←逆に笑えてきましたけど

私の場合はどうやら iCloud に不具合があったようで……
一度 iCloud のアカウントを削除し、再度アクティブにしたところ…
それ以来、バッテリードレインは再発していません。

あまりにも減らないので、「あるある電池か?」とか疑ってみましたが、問題ないようです。
同期するデータが多いとちょっと時間がかかるかもしれませんが、どうやっても治らない場合に試す価値はあるかもしれません。

重なるときは重なるんですね、こういうトラブルって。

iCal が突然 507 エラーを吐いて、同期してくれなくなりました。

iCal 507 エラー

こういう使い方は想定されてないと思うんですが(笑)、自分の工数管理というか仕事チェックというか。

作業ファイル/フォルダを AppleScript & Cron で定期監視させて、自動でiCal に書き込ませてます。

いつのタイミングでどんな仕事をしていたか、ざっくりと、どれぐらい時間喰ってるかが把握できます。反省材料であったり、心の糧であったり。
4sqのチェックインと組み合わせて利用すると、自動ライフログのできあがり。

それはいいんですが、
調べてみても、iCal で 507 エラーってのは国内では出てこない。

米Appleディスカッションボードで発見したんですが(英語に弱くて……)……

https://discussions.apple.com/thread/3398234?start=0&tstart=0

いったんライブラリの中の iCal データを削除し、iCal を再起動させたあとで、もう一度同期させるといいよ

と書かれている気がします。

できれば残しておきたい記録なので、ics 形式で書き出しをしたあと、iPhone側のカレンダー同期はOFFにしてから、思い切って削除してみました。
最悪は「インポートすればいいや」って気持ちで。

すると、削除されたあと…なぜか復活(サーバーからデータを引っ張ってくるのが当たり前?)。

少々時間はくいましたが、今回はエラーも吐かずに同期してくれているようです。
ちょっとこの状態で様子見してみます。

手っ取り早く Chrome のキャッシュを削除したい

WEB的な仕事をしていると、CSSとかすぐに適用して欲しい場合ってありますよね。
あと、なんとなく調子が悪い時とか(気のせいかもしれませんがw)

Mac な人限定ですが AppleScript 経由でシェルスクリプトを……
以下の通りです。

try
	do shell script "rm -R /Users/USERNAME/Library/Caches/Google/Chrome/Default/Cache/* && rm -R /Users/USERNAME/Library/Caches/Google/Chrome/Default/Media Cache/*"
on error
	return
end try

※あ、当然ながら「USERNAME」はあなたのユーザ名(ホームディレクトリの名前ね)です。

アプリケーション形式で保存してDockに乗せておいてもいいかもしれませんね。

私の場合は

  1. AppleScript エディタ の環境設定を開いて
  2. メニューバーにスクリプトメニューを表示 のチェックをオンに
  3. そうするとメニューバーに「スクリプトメニュー」が出てくる

ので、そこからスクリプトファイルにアクセスできるようになります。

ちなみに

  • option キー + メニューから選択 で編集
  • Shift キー + メニューから選択 でファイル表示

してくれますよ。

prefs