2014/04/05

消費税が上がる前にお買い物

消費税があがるなら

消費税が上がる。というので、買おうかどうしようか迷っているものを思い切って買う。ディスクの遅さが厳しくなってきていたmac-miniの 置き換えとか、Amazonの欲しい物リスト とか。

自分へのプレゼントも兼ねて



2014/03/10

OCamlで数あてゲームを書いてみる

以前、Haskelで数当てゲームを書いてみた(Haskellで数あてゲームを書いてみる | Hiroaki's blog)のだが、今度はOCamlで書いてみた。Js_of_ocamlなんてのを今更ながら知ったので、OCamlもありかなぁなんて。


(* 数あてゲーム *)

(* 4桁の数を作る - これをユーザが当てる *)

(* 同じ数が既にあるかチェックする *)
(* chkvalue : int list -> int -> bool *)
let rec chkvalue lst target = match lst with
     [] -> false
   | first :: rest -> if first = target then true
        else chkvalue rest target

(* 数をリストに追加する。このとき、同じ数が追加されないようにする *)
(* appendvalue: int list -> int -> int list *)
let appendvalue lst v = if chkvalue lst v then lst
   else v :: lst

(* 4桁の数を作る *)
(* makevalue: int list -> int list *)
let rec makevalue lst = if List.length lst = 4 then lst
   else makevalue (appendvalue lst (Random.int 10))

(* blowを数える。ただし、hitもblowとしてカウントする *)
(* chkblow: int list -> int list -> int *)
let rec chkblow userlst complst = match userlst with
        [] -> 0
      | first :: rest -> if chkvalue complst first then 1 + chkblow rest complst
           else chkblow rest complst

(* hitを数える *)
(* chkhit: int list -> int list -> int *)
let rec chkhit userlst complst = match (userlst, complst)  with
    ([], []) -> 0
  |([], first1 :: rest1) -> 0
  |(first1 :: rest1, []) -> 0
  |(first1 :: rest1, first2 :: rest2) -> if first1 = first2 then 1 + chkhit rest1 rest2
      else chkhit rest1 rest2

(* 数値を1桁の配列にする。ただし、逆順になる *)
let rec strarray userval = if userval < 10 then userval :: []
      else userval mod 10 :: strarray (userval / 10)

(* game main *)
let rec judge userval complst = let userlst = strarray userval in
    let hit = chkhit userlst complst in
    let blow = chkblow userlst complst in 
    if hit = 4 then print_string "4 hit!"
    else begin
        print_int hit;
        print_string " hit ";
        print_int (blow - hit);
        print_string " blow";
        print_newline ();
        print_string "? ";
        judge (read_int ()) complst
      end

let kazuate = begin
    print_string "? ";
    judge (read_int ()) (makevalue [])
end
これを適当な名前で保存して、ocamlインタプリタで読み込むと、ゲームスタート。


「基礎」とは言いながら、実は奥が深い一冊。ある程度知識がないと、その奥行きに気付かない。OCamlの本は、他にどんなのがいいんだろう?



2014/03/08

Aterm WR8600NのWAN側アドレスを取得する

先日、家の無線機器を新しくした。今まではBuffaloの無線LANステーション2台をWDSで繋げていたのだが、新規格に対応していないので安くなっていたNEC Aterm WR8600N[HPモデル] イーサネットコンバータセット PA-WR8600N-HP/Eに交換。

で、Dynamic DNS使って外からアクセスできるようにしようと思ったら、BiglobeのDDNSサービスしか対応していないっぽい。SNMPをしゃべれるわけでもないので、管理画面から無理やり割り当てられたアドレスを取ってくるようにしてみた。
wget -q -O - http://Atermのアドレス/index.cgi/info_main | nkf -w | egrep -A 2 'IP.+WAN.+IP' | head -2 | tail -1 | sed -E 's#^.+ ([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).+$#\1#'
wgetは.netrcをみてくれるので、管理画面のログインID/パスワードは、.netrcに記載しておけばOK。

IPアドレスだとわかるようなタグが付いているわけでもないので、ページの内容から無理やり探している。ファームウェアバージョン 1.0.15では取得できているけど、他ではダメかも。



2014/01/05

ApacheのステータスコードをMuninでグラフ化する

Apache HTTP ServerのステータスコードをMuninでグラフ化する設定。loggrepプラグインを使い、アクセスログを正規表現でパースする。
plugin-conf.dにある設定ファイル(munin-nodeやplugins.conf)に下記の設定を追加する。loggrepプラグインを有効にしたら、munin-nodeを再起動。
[loggrep]
user root
env.title apache status code
env.logfile /var/log/httpd/access_log
env.label_s20x 20x
env.regex_s20x ^[^"]+ "[^"]+" 20\d 
env.label_s30x 30x
env.regex_s30x ^[^"]+ "[^"]+" 30\d 
env.label_s40x 40x
env.regex_s40x ^[^"]+ "[^"]+" 40\d 
env.label_s50x 50x
env.regex_s50x ^[^"]+ "[^"]+" 50\d 


2014/01/02

2014年年賀状


印刷すると微妙な色合いがつぶれてしまうのが、残念。


2014/01/01

Ziproxyのrpmを作る

Ziproxyで3G回線でも快適にネットサーフィン!という記事を見かけるようになったので、試してみようと思った。ら、RPMが用意されていない。昔のバージョンでは用意されていたようだが、最近のバージョンについては見当たらなかった。

rpmfindで調べてみると、Mageiaというディストリビューションには用意されているようだ。というわけで、src.rpmを持ってきて、CentOS 5.10(64bit)向けに手を入れてみた。

rpm for CentOS 5.10(x86_64)
このパッチ、バイナリを用いた結果生じたいかなる問題についても、責任は負いません。自己責任でご利用ください。



2013/12/09

自動で3G/LTEをこまめに切断する

通信量の上限

相変わらず高いスマホの通信費。MVNOの業者と契約して安くしても、結局1ヶ月1G7Gといった、3G/LTEの通信量の制限はついてまわるのがほとんど。Wifiのオプションや、公衆無線LANサービス Wi2 300【Wi-Fiスポット全国拡大中!!】などのサービスを使って、3G/LTEをなるべく使わずに済ます手はあるものの、いちいち切り替えるのはとても面倒。

このアプリで自動化しよう

Trigger : NFCだけじゃない!WiFiやBluetoothもトリガーにしてアクション実行!スマホがもっとスマートに!無料 » アンドロイド用アプリが見つかる!スマホ情報ならオクトバ を使うと、「Wifiに繋がったら3G/LTEを止める」「Wifiが切れたら、3G/LTEをonにする」という処理を自動で行える。設定は、ポチポチ選んでいけばよく、難しいところはない。

まずはWifiの設定

Wifiを設定していないと始まらない。契約している携帯電話会社や、公衆無線LANサービスの会社の説明に従って、Androidの設定を済ませておく。Wifiの設定が1個もないと、3G/LTEの代わりの通信手段がなくなってしまうからね。アプリの設定は後から変更できるので、設定が1個あれば大丈夫。
設定したら、アプリをダウンロードしておこう。
Trigger
Egomotion Corp
価格:undefined  平均評価:4.5(5,399 件)

無線に繋がったら3G/LTEを切断する設定

ダウンロードしたTriggerをタップすると、メニューが表示される。
「タスクの提案」をタップ。

「データセーバー」をタップ。

「Wifi」をタップ。

「次に接続したとき」をチェック。
リスト表示されているSSID(Wifiの設定のとき入力したもの)を1つ選択(タップ)。
選択したら、「次」をタップ。

「常に」を選択して「完了」をタップ。

この黄色い画面になるので、右下の完了をタップ。
これで、Wifiに接続したとき、3G/LTEを切断する設定が完了。

今設定した「データセーバー」。
家の分と、喫茶店と…と、登録したいWifi(SSID)が2つ以上あるのであれば、この「データセーバー」をタップして編集モードにする。

緑の部分をタップ。

Wifiを選択。


すると、登録されているWifi(SSID)が一覧表示される画面になるので、さっきと同じようにSSIDを選択していくと、追加できる。

これだけだと、Wifiが切れたとき、3G/LTEがonになってくれないので、Wifiが切れたときのルールを同じように登録しておくのがよい。


Wifiが繋がっていても通信できるとは限らないので、通信できるかどうかのチェックを行うアプリを入れておくと、便利。
chkConnect
hiroaki0404
価格:undefined  平均評価:0.0(0 件)





2013/12/01

さようなら、ぷららモバイル!ようこそ、BIC SIM!

回線を変える

いままでスマホの回線として「ぷららモバイル」を使ってきた。3G回線、下り1.5Mの速度制限ではあったが、 転送量の制限がないので、気にせずガンガン使えて便利だった。
が、Nexus 5を入手して、LTEが使える MVNOを調べてみると、容量の制限はあるものの、もっと安いサービスが多数出ている。解約違約金が生じなくなる 2年を過ぎていたので、他の回線サービスに切り替えることにした。

IIJ 【ビックカメラグループオリジナル】BIC SIMウェルカムパック マイクロSIM(SMS非対応)。 SMSありは在庫がないらしい。予約できるコジマで申し込んで、届くまで1週間くらいかかった。

ぷららライトってサービスはどこ?

ぷららモバイルは解約。ぷらコミ0というのも入っていたのだが、ぷららライトに切り替えると0円で メールアドレスを維持できるというので、これに切り替えようとした。けど、サービスから見つからない。
契約を「解約」すると、ぷららライトに切り替わるのだと。「退会」だと、メールアドレスもなくなってしまう。 ということで、ぷらコミ0も解約して、ぷららライトに切り替え。 ぷららライトのメールボックスはいろいろと制限があるとのことだが、GMailから定期的に アクセスするようにしているので、影響なさそう。メインで使っているのであれば、そのままぷらコミ0にして おいたほうが無難そうな感じ。

BIC SIMをNexus 5にセット

ぷららモバイルは解約を行っても月末までは使えるので、月が変わるのを待ってセットアップ開始。 といっても、Webで手続きをしてからSIMを挿すだけなので、改めて書くことは何もない。
最初、機内モードのままSIMを挿して、APNが何もセットされていない状態になってしまい、 「設定全部入力するのかぁ」と思ってしまった。 機内モードを解除して電源を入れなおしたところ、APNにIIJmioが登場。選択して設定はおしまい。

Androidアプリ「みおぽん」を入れてみたところ、クーポンスイッチがonになっていたので、速攻でoffに しておく。スマホは触っていなくても定期的に通信するので、そんなときは低速モードでも十分。

今までの自分の使い方だと、月に700M位通信していたので、500Mのクーポンで間に合うかどうか、 しばらくは様子見。



2013/11/24

Jpegoptimのrpmを作る

CentOSならrpmで管理したい

パッケージ管理システムを使うのは、軟弱という説もあるが、無用なトラブルを避けるという点で 賢明な選択だと思う。
しかし、新しいソフトウェアだったりマイナーなものだったりすると、rpmが用意されていないことがある。

Jpegoptim

tjko/jpegoptim · GitHubはJpegの容量を削減するソフトウェアで、 Timo Kokkonen - Projectsで公開されている。rpmは用意されていないのだが、ソースをみると、redhatディレクトリにspecファイルが用意されている。specファイルはrpmを作るための設定ファイルなので、これでrpmを作ってみることにする。

specファイルからrpmを作る

SPECファイルからのRPMパッケージの作成という、そのものずばりのページがある。 これに従って作ればいいのだが、ちょっと手を抜く。

  1. Timo Kokkonen - ProjectsからJpegoptimのソースをダウンロード。
  2. ダウンロードしたソースを展開して、redhatディレクトリにあるjpegoptim.specを /usr/src/redhat/SPEC/ にコピー。
  3. ダウンロードしたソースをそのまま(tar.gzのまま) /usr/src/redhat/SOURCE/ にコピー。
  4. sudo rpmbuild -ba jpegoptim.spec と入力して、build。
  5. /usr/src/redhat/RPMS/ にあるディレクトリの下に、rpmが生成される。
rpmさえできてしまえば、パッケージ管理システムにおかませ。



2013/11/10

Nexus5のWifiを安定させるのは、このアプリ!?

Nexus 5でもWifiが不安定?すぐに切れる?

Nexus5を早速入手。取り敢えずの設定をアクセスポイントにして、セットアップ中のアップデート処理を終わらせる。 アップデートが終了したら、環境設定。セットアップの時には使わなかったアクセスポイントも、繋げられるように設定を追加。
すると、問題発生。接続が安定しない。しばらくすると、切断されてしまうのだ。HTC J ISW13HTのWifiを安定させる! | Hiroaki's blogと同じ症状。
全く繋がらないというわけではなく、少しの間はつながっている。が、気がつくと切れていて、LTEで通信している。

このアプリで解決?!

動きをよく観察していると、どうやら、切断された後の再接続が行われていない様子。自動接続してくれる Auto WiFi Toggle - Google Play の Android アプリを入れてしばらく使ってみたところ、問題が解消している感じ。これで解決?!

無線LANの設定が問題?(2016/6/26追記)

Wifiがつながらない?Channel14が原因かも? | Hiroaki's blog にも書いたのだが、無線LANで使用できるChannelの中に日本専用のものがある。Nexus5の設定を色々見たけど改善しないという場合、無線LANの基地側の設定を見てみよう。チャンネルを「自動」設定にしていると、周りを見て使われていないチャンネルを使おうとするので、Channel14になっているかもしれない。
本当にChannel14だと通信できないのか、試してみたわけではない。試した人は、コメントで知らせてくれると嬉しい。

インストールしたWifi関係のアプリ

Wifi再接続
Auto WiFi Toggle
Hideki Kato
価格:undefined  平均評価:4.2(1,362 件)


Wifiが通信できなければ切断
chkConnect
hiroaki0404
価格:undefined  平均評価:0.0(0 件)


公衆無線LANサービスに自動ログイン
公衆無線LANログイン - moopener
NetVision Co.,Ltd.
価格:undefined  平均評価:3.8(88 件)



2013/10/03

Macにリモートログインできない原因は、こいつだ!

概要

sshでリモートログインできるように設定し、netstatでも問題ないと確認したにもかかわらずログインできない場合、アンチウイルスソフトがファイアウォールの設定を変えたことが原因かもしれない。

リモートログインできない

いつの頃からか、mac-miniにsshでログインできなくなっていた。ログインしようとしても、しばらく待たされた後、timeoutしてしまう。
mac-mini側でnetstatしてみると、ちゃんとPort 22でListenしている。IPv4だけでなく、IPv6でも。

解決策

コンソール.appを開いて、ログリスト /var/logの中にある appfirewall.log を選んだ状態で他のマシンからsshでログインしようとすると、 Deny sshd-keygen-wrapper connecting from xxx to port 22 proto=6なんて行が出てくる。また、ググって見つけた 画面共有とファイアウォール: Apple サポートコミュニティには、「システム環境設定>ファイアウォール の確認」とか、 /Library/Preferences/com.apple.alf.plistとか書いてある。/Library/Preferences をみてみると、com.apple.alf.plistの他に、com.apple.alf.plist~origなんてファイルがある。作った覚えはないので、一旦com.apple.alf.plist~origをcom.apple.alf.plistにコピーしてから、「システム環境設定>セキュリティとプライバシー のファイアウォールタブ」をみてみる。 ファイアウォールオプション...ボタンを押して中身を見ると、sshd-keygen-wrapperが「外部からの接続をブロック」となっていた。
これを、「外部からの接続を許可」に変えたところ、無事復活。

犯人探し

自分でバックアップファイルを作るときは、~origとは付けないので、何らかのアプリが行ったのだろうと予想できる。ファイルの日付から、Mac用の無料のアンチウイルスソフトをいろいろ試した頃に作られたっぽい。どのソフトなのかわからないけど、問題は解決したから、いいや。

おまけ

Emacs+ WanderlustでPOP3sの サーバのメールを読もうとしたところ、途中でだんまりになるようになった。アンチウイルスソフトのavast!の設定で、Scan secured connections のチェックを外したところ、解決。



2013/09/01

HTC J ISW13HTのWifiを安定させる!

Wifi接続が不安定

auで3円運用するための、解約メモ | Hiroaki's blogで購入したHTC J ISW13HT、Wifi接続が不安定で、まともに使えない。 2.4GHzのアクセスポイントが2つ、5GHzのアクセスポイントが1つあり、5GHzのポイントに接続しにいくものの、IPアドレスが割り当てられるまで待ちきれないらしく、割り当て中の表示になったと思ったら2.4GHzのポイントに接続しに行き、結局アドレスが割り当てられない。
WifiをチェックするAndroidアプリを作った | Hiroaki's blogの正式公開版をGoogle Playから入れていたので、それが原因かとアンインストールしてみたのだけど、状況変わらず。

設定の問題?

ふと思って、Wifiの設定を5GHzだけにしてみた。

今までとは違い、ちゃんとIPアドレスが割り当てられ、通信できるようになった。原因って、これ?

いちいち切り替えるのは不便

そうと分かっても、公衆無線LANサービスの多くのアクセスポイントはまだ2.4GHzだし、でも、5GHzでサービスしているポイントであれば、空いているであろう5GHzで接続したい。でも、いちいち切り替えるのは面倒。結局、「Wifi使えねー」ってことになっちゃうよね、こんな状態だと。

無線周りのupdateが出るまで、この端末は外に持ち出せないかなぁというのが結論。安く手に入れたのがせめてもの救い。



MACのメニューバーが狭い

メニューバーが狭い

アプリをいろいろインストールしたら、メニューバーにアイコンがいっぱい並ぶようになった。

メニューバーにアイコンが表示しきれていない!メニューバーのアイコンのメニューから操作するようなアプリが使えない事態に!

これか!

みんなどうしているんだろう?広いディスプレイを使うからこういった問題には直面しないのか? MacBook Airを使うような人は、そんなにアプリを入れないのだろうか?と思いながらググってみたところ、 目から鱗が落ちるとはこのことだった。『AccessMenuBarApps』でメニューバーを広く使う! | 男子ハックという記事を発見。早速入れてみる。

これか!上のメニューバーのようにいっぱいいっぱいになっていても、AccessmenuBarAppsを起動すると、下のようにすっきり。
いちいちアプリを立ち上げるのはかったるいのだが、ジェスチャーで起動するように設定して解決。これは便利!



2013/08/26

P-01D復旧作戦

文鎮化?

なんか調子が良くないなぁと思ってP-01D を再起動してみたら、Docomoのロゴの画面から進まない。 ロゴを出して固まっているのではなさそうで、よーくみていると、一定期間でロゴが一瞬消える。 が、またロゴが表示されて繰り返し。
root取って何か作業していたわけでもなく、しいて言えば、ネットワークドライブのアプリで大量のファイルがあるフォルダを開いていたくらい。

復旧できないかもがいてみる

P-01Dのアプリを整理する | Hiroaki's blogで 使用したroot化セットを使うと、一応、USB経由でリカバリーモードに入れた。手順に従って緊急用のイメージを入れていたので助かった。
緊急用のイメージで起動して、バックアップを戻そうとしたら、バックアップがなかった。いや、root化セットでバックアップは作成していたのだけど、それを戻そうとしても、通常起動しないときは無力っぽい。いや、いろいろがんばればできるのだろうけど。

諦めて

結局、■ P-01D 再設定 ■: boon blogを参考に、factory reset。きれいに初期化されたので、すべて再設定。もちろん、注意! Google 2段階認証プロセスにしていたら、Android 2.x用のパスワードが必要 | Hiroaki's blogに書いたように、パスワードを再度準備。
端末だけ再設定して、root化セットの復元メニューで戻せたのかもしれないけど、いい機会なので、アプリも入れなおし&削除しなおし。
今度はリカバリーモードのメニューからもバックアップを作成しておく。次に同じ症状がでても、今度はリカバリーモードからリストアできるはず。



2013/08/11

P-01Dのアプリを整理する

アプリがいっぱい…

ぷらら3Gでテザリング | Hiroaki's blog にも書いたけど、P-01D にはプレインストールされているアプリがたくさんあり、自分が使いたいアプリを入れるスペースがほとんど残っていない。 ガラケーと同じノリで、プレインストールで小金を稼ごうとした結果なのかもしれないけど、このままでは不便。

root化してアプリを消す

プレインストールされているアプリは、普通には消せない。ので、root化して消すことにする。
root化は危険を伴う作業なので、自己責任で行うこと。この投稿も、紹介する記事も、何かトラブルが発生したとしても、責任を負うものではない。
root化
こちらで紹介されているroot化セットを使って、バックアップを取ってからroot化を行う。
アプリの整理
Titanium Backupを入れる。このアプリで、プレインストールされているアプリを消す。 を参考に。
Docomoの契約回線を使うわけではないし、通話もしないので、ガシガシ消しちゃう。



FANの掃除にエアダスター

暑い

夏だということを考慮しても、今年は暑い。外気が高ければ当然マシンも熱くなる訳で、MacBook Airのキーボードが結構熱い。
熱い原因は外気だけではない。ホコリが溜まって排気がうまくいっていないということもある。

掃除

そんなわけで、マシンの掃除。MacBook Airはキーボードの上側、ディスプレイとのつなぎ目にFANの口があるので、ホコリを取りにくい。 取りにくいのであれば吹き飛ばしてしまえ!ということで、Digio エアダスター/ノンフロン 390ml DGC-JB8を購入。写真だと大きさがわかりにくいけど、500mlのペットボトルよりも大きい。ノズルが付いているので、今回のような狭いところにもピンポイントで吹きつけられる。


2013/08/06

開発環境もクリック一発! Nitrous.IO

もっと簡単に環境を用意する

ドットインストールのRuby on Rails入門をRails4でやってみる | Hiroaki's blogでは環境を用意するところから始めたが、もっと手軽に!というのであれば、Nitrous.IOというのもアリ。

Nitrous.IO

Nitrous.IOは、クリック一発で立ち上がる開発用サーバ+Web版IDE。サーバはAmazon EC2に用意される。
のいずれかを使った開発を行うことができる。
Web版IDEにはサーバにログインした状態のフレームも用意されるので、IDEから抜けることなく、Webアプリの雛形を生成することが可能。
Better JavaとしてScalaGroovyを試してみたいので、これらの環境も提供してほしいなぁと思ったり。
Nitrous.ioへの登録は、こちらからどうぞ。

手軽に環境が用意できるのは嬉しいけど、「環境構築はさっぱり」って人を量産することにならないかな?


2013/07/20

ドットインストールのRuby on Rails入門をRails4でやってみる

Javaだけやっているのも危険ではないか?ということで、3分動画でマスターする初心者向けプログラミング学習サイト - ドットインストールRuby on Rails入門をやり始めてみた。

どーせやるなら最新版で!ということで、Rails4 と Ruby 2.0の環境を 入門Chef Solo - Infrastructure as Codeをみながら作った。のだが、当然のことながら、バージョン違いでレッスンの通りでは動かない箇所がちらほら。

#26 新しい記事を追加しよう (3)
万年素人からGeekへの道のroute_paramsメソッドをまねて、post_paramsメソッドを作る。また、Post.newのパラメータをpost_paramsと書き換える。
#33 記事を更新してみよう (3)
これも上と同じ。update_attribute()の引数をpost_paramsにする。
#36 削除処理をAjax化しよう (2)
ずばりな記事がこれ。ドットインストール Ruby on Railsの基礎 #36 でAjaxによるPost削除処理が動かない - 定食屋おろポン

この先はこれからやるので、また動かない箇所が出てくれば、その2で。





2013/06/22

Privoxyのログをfluentdで送る

いろいろなログをfluentdに集めてみるシリーズ。Privoxyのログを集めてみる。PrivoxyはiPhone, Android用のProxyをたててみる - 3 | Hiroaki's blogとか。
を参考に、formatやtime_formatを決めてみた。

<source>
  type tail
  format /^(?<time>[^ ]* [^ ]*) (?<id>[^ ]*) (?<action>(Request|Crunch:[^:]*):) (?<path>.*)$/
  time_format %F %T.%L
  path /var/log/privoxy/logfile
  pos_file /var/tmp/privoxy-logfile.pos
  tag td.privoxy.access
</source>
これをtd-agent.confに追加。


2013/05/12

Macbooi Airの温度情報をfluentdで扱う

httpのアクセスログじゃぁ物足りないので、Macの温度情報を扱ってみる。
MacでScreenのステータスライン(hardstatus)にCPU使用率&温度とメモリ使用率を表示させる - mfumiの日記を参考にTemperature Monitorをインストールし、出力をちょっと整形。
#!/bin/sh
/bin/echo -n "`/bin/hostname` "
#/bin/echo -n "macbook-air "
cmd=/Applications/TemperatureMonitor.app/Contents/MacOS/tempmonitor
$cmd -tv|/usr/bin/sed 's/,/ /g'
2行目と最終行の空白部分はタブ。
これを動かせば、マシン名とあちこちの測定結果をTSV形式で出力してくれる。ので、fluentdのexecプラグインでキックするようにする。
<source>
  type exec
  command 上記script
  keys host,time,core1,core2,core3,core4,disk,battery,charge,battery2,battery3,diode,proximity,palmrest,heatsink,logicboard,mainboard,bay
  tag td.system.temperature
  time_key time
  time_format "%Y-%m-%d %T %z"
  run_interval 300s
</source>
keysの行は
tempmonitor -th
の出力を見て決定。マシンによって測定できる内容が変わるのだそうだ。


2013/05/05

ビックデータを体験する-準備編

ビックデータブームって

ビックデータブームって、一昔前のデータウェアハウスブームと同じような臭いがする。
で、こういったものは、とにかくデータがないと始まらない。分析しようと思ってからデータを集め始めても、遅いのだ。
とはいうものの、分析対象とするデータをいろいろと集めるのもシンドイ作業。手元にあるデータで手っ取り早く試してみたい。
もう1つの問題は、データをどこに集めるのかということ。集めるための大容量のサーバを用意すべきなんだろうけど、手軽に試すという範疇を超えてしまう。

Treasure Data

こういった問題を解決する方法があった。Hadoop-based Big Data as a Service on the Cloud | Treasure Dataというのがあり、容量の制限はあるものの、試してみることができる。
データは、syslogで収集しているものを使えばよい。とにかくまずは使ってみて、そこから何に適用できるかを考える。

td-agent

Treasure Dataに登録すると、そのままデータ登録・操作のプログラムのインストールとチュートリアルに進むようになっているので、その手順に従う。
td-agentは、乱暴に言うと、fluentdの安定版。従って、td-agentが提供されていないOSでは、fluentdを使う。他にも、fluent-agent-liteというのがあるけど、手軽に試してみる段階では考えなくてよさそう。

td-agent(fluentd)は
  • データを受け取って
  • フォーマットの整形とかして
  • 保存先に送信する
ということをやる。今回は
  • データはsyslog
  • フォーマットの整形はなし
  • 保存先はTreasure Data
とし、td-agent.conf(fluentd.conf)に設定を記述していく。

syslogからのデータ取得

td-agentは、syslogのようにデータを受け取ることが可能なので、
<source>
type syslog
port 5140
bind 127.0.0.1
tag td
</source>

のように記述しておくと、port 5140で動いているsyslogdのように見える。なので、syslogd.confに

*.*       @127.0.0.1:5140
と書いておくと、今のsyslogが受信している内容をすべてtd-agentに渡すことができる。

Treasure Dataへ保存

<match td.*.*>
  type tdlog
  apikey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td
  use_ssl true
  flush_interval 10s
</match>
と記述しておくと、自動でfacility名でデータベースを作り、priority名でテーブルを作ってくれる。

td-agentを起動してエラーが出てなければ、syslogdにシグナルを送ってsyslogd.confの再読み込みをさせて、準備OK。

td

Treasure Dataに保存したデータにアクセスするのが、tdコマンド。これについては、次回。


2013/04/14

サーバーのマザーボード交換

家のネットワークをようやくギガビットにしたので、サーバもバージョンアップしてGigaに対応したドライバを使うようにしようと思った。そこで、FreeBSD7→8にしようと、kernelを入れ替えて再起動させたところ、起動時のbeep音がしない。ディスプレイを繋げてみたところ、BIOSの画面すらでていない。1uのラックマウント型のケースに入れているので、熱がこもってどこかイカれてしまったんだろう。
インテル® デスクトップ・ボード D425KT。これ、いつ買ったんだっけ?と悩んでもサーバが動かないまま不便なので、代わりのマザーボードを購入。


1uのラックに収まるマザーボードは、意外と少ない。オーディオの縦に並んだ端子が、高くてひっかかってしまうのだ。というわけで、今回も無理矢理押し込んで使えているIntelのマザーにする。インテル Atom Onboardマザーボード BOXD2500HN 【Mini-ITX】。これをいつも通り無理やり押し込んで、復旧。ディスクのパーティションを認識しないとかちょっとトラブルがあったけど、livefsのkernelをまるっとコピーしたら動いたので、とりあえず良しとする。ゴールデンウィークにちゃんと対処する、できれば、FreeBSD 8にすると。

せっかくギガビットにしたんだから、外部との接続も速くしたいというのでいろいろ調べたのだけど、それはまたの機会に。



2013/04/07

CentOS 5.9にしたら、openswan+xl2tpdが繋がらなくなった!

Amazon EC2にVPN Serverをたてる(L2TP編) | Hiroaki's blogをパクってCloudCore上にopenswan+xl2tpdでVPN Serverを立てていたのだが、CentOS 5.9にアップグレードしたところ、繋がらなくなった。
ログをよーく見ると、
STATE_QUICK_R2: IPsec SA established transport mode
とあるので、IKEでキーの交換まではできているらしい。tcpdumpでパケットとにらめっこしていたら、どうやらこのメッセージの後、繋ごうとしているクライアントからのパケットに対し、応答を返していない様子。
ググっていくつかのサイトの設定と自分の設定とを見比べる。と、
rightsubnet=vhost:%priv
って記述でいいの?これを
rightsubnet=0.0.0.0/0
に直してみたところ、解決。
leftnexthop
もいらなさそうなので、削除。
openswan-2.6.32になって、解釈が変わったというか、今までたまたま動いてきたってこと?2.6.38ではAndroid 4.0.4用のworkaroundも入ったようなので上げてみたいけど、またハマルのは嫌だなぁ。


2013/04/04

2in1 契約でMNPする時のはまりポイント

ドコモのfoma契約だと安価に回線を増やせる2in1契約。MNPするために2in1契約したときの注意点が1つ。
2in1で契約した回線のMNP手続きは、電話で行う。ネットでは手続きできない。
ドコモのサイトには載っていないので、ネットで手続きしようとして???な状態になってしまうけど、単に2in1で増やした回線に対する手続きはネットでできないというだけのこと。何日待ってもできるようになる訳ではないので、とっとと電話してしまいましょう。


2013/01/09

ぷらら3Gでテザリング

FixAPN - Google Play の Android アプリdocomo P-01Dの組み合わせで、MVNOの回線でもテザリングができるというので、中古のP-01Dを買ってきて、試してみた。
OKばっちり。


ぷらら3Gの設定は、上のキャプチャの通り。

Wifiルータよりは手軽にいじれるP-01Dだが、使わないアプリが山のように入っているのにはまいった。空き容量があまりないので、日常使うアプリを入れるのは断念。



2013/01/05

注意! Google 2段階認証プロセスにしていたら、Android 2.x用のパスワードが必要

2段階認証プロセスの説明文

概要

Android 2.xは2段階認証プロセスに対応していない。従って、2段階認証プロセスを有効にしたGoogle アカウントを設定しようとした場合、アカウント情報のページで専用のパスワードを生成する必要がある。

アカウントの認証が成功しない

いろいろあって、中古のスマホを購入した。Googleアカウントを登録しようとIDとパスワードを入力すると、エラーになる。IMEの変換を間違えたのかと何度か繰り返したものの、アカウントの認証は成功しない。
「もしかして、やられた?」と思ってGmailのページをずぅっと下にスクロールさせ、右下の「アカウントアクティビティの詳細」を見てみると、特に問題はなさそうだ。

2段階認証プロセス

このアカウントは2段階認証プロセスに切り替えていたことを思い出し、Googleのアカウントページからアカウント情報を眺めていた。
「Android Login V1」なんてサービスが登録してある。
さらにアプリケーション固有のパスワードを設定するところを見ると、「旧式の Android スマートフォン」ととして登録してある。

Android 2.3は対応していないアプリケーション

中古で買ったスマホは、Android 2.3だったため、2段階認証プロセスに対応していかった。従って、
  • あらかじめアプリケーション固有のパスワードを生成し
  • スマホでGoogleアカウントを登録するとき、生成したパスワードを入力する
という手順が必要だった。ちょっと前に購入したHTC J(Hiroaki's blog: auで3円運用するための、解約メモ)はAndroid 4.xでこの手順が不要だったため、気付くのが遅れた。 Android 2.xと4.xでは、こんなところも変わっているんだ。

型落ちのスマホを格安で打っていることも多いので、
  • 年末から騒がれているから、よくわからないけど2段階認証プロセスにしてみた。
  • スマホはよくわからないので、販売店で設定してもらおう。
ってノリの人だと、見事にはまるね。


2013年年賀状

これでみんな1回以上登場。


2013/01/01

auで3円運用するための、解約メモ


MNP一括0円とか、捨て身のように見えてくるau。そうはいっても、こちらも懐に余裕があるわけなどないので、ありがたく利用させていただく。

このとき、販売店で付けられたいろいろなオプションを解約していないと、月々の支払いが安くならない。
ダブル定額スーパーライト
auを使うのが初めてで、au IDの取得など3Gを使うことがあるというので、付けてみた奴。au IDを取得したら、Webから解約予約。実際に解約されるのは、月替わり。
インターネット接続サービス(EZ WIN/IS NET)
3Gでネットを使うために必要。また、電源を入れたときに3Gの通信が発生することがあるというので、購入時には付けておいた。用が済んだら、サポートに電話して解約。
安心ケータイサポート
3円運用を考えると、不要。端末が故障したら、そのまま回線を放置してしまえばいい。3円運用×2年縛りなので、ほうっておくのが一番安い。インターネット接続サービスと一緒に解約。
auスマートパス
いらない。スマートパスのアプリから解約できるのだが、そのとき、SIMを挿していないとエラーになってしまう。ダブル定額スーパーライトを解約する前にこっちを解約しておくか、auスマートパスのサポートに電話して解約する。
スマートパスのシステムがトラブルとかで、通常のサポート窓口と、スマートパスの窓口と、別々に電話して解約する必要があった。auのページを見ても、どこに電話すればいいの?って感じだった(全体を一覧で見ることができない)ので、解約した人の手続きを参考にする。
auスマートパスの退会方法 | すまコジ ひょかレポ: auスマートパスをパケットを発生させずにサクっと退会する方法
SIMをまだ挿しているなら、Wi-Fi接続でもOK!au スマートパス解約手順 | マイスクラップブックでいけるけど、挿していないと、アンケートに答えた後にエラーになる!

3Gで通信するつもりはないので、一応、SIMは抜いておく。HTC Jって、どう蓋をはずすの?ってことで、これ。

蓋をはずして、SIMを抜いておきましょう。


2012/12/22

iPhone, Android用のProxyをたててみる - 3

Hiroaki's blog: iPhone, Android用のProxyをたててみる - 2の続き。Privoxyの設定編。

configの設定
Privoxyの設定はconfigファイルで行う。コメントを除いた設定ファイルは、こんな感じ。
confdir /usr/local/etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile user.action      # User customizations
filterfile default.filter
filterfile user.filter      # User customizations
logfile logfile
debug      1 # Log the destination for each request Privoxy let through.
debug   1024 # Log the destination for requests Privoxy didn't let through, and the reason why.
debug   4096 # Startup banner and warnings
listen-address  :8118
toggle  1
enable-remote-toggle  0
enable-remote-http-toggle  0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
forward /       localhost:8080
forward :443    .
forwarded-connect-retries  0
accept-intercepted-requests 1
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 50
connection-sharing 1
socket-timeout 300

enable-compression 1
compression-level 9
actionsfile、filterfileは後ろで説明することにして、重要なのは、toggle 1。これで、Privoxyによるコンテンツの書き換えを有効にする。

actionsfile
「どんな操作を行うか」を定義したのが、actionsfile。柔軟に設定できるようになっているが、それがかえって難しく感じさせている気がする。というわけで、ここではよく使いそうな2つのパターンを説明する。
{+block{理由}}
適用させるドメイン or URLのpath
 :
ブロック。リクエストを中継しない。アクセスを禁止させたいドメインなどの指定に使う。
{+filter{フィルタ名}}
適用させるドメイン or URLのpath
 :
コンテンツを書き換えるときに使う。例えば、iOSではフラッシュを見ることができないため、コンテンツに埋め込まれているフラッシュを除去するときに使う。

filterfile
actionsfileで指定するfilterを定義する。コンテンツの書き換え方を記述する。

match-all.actionは、すべてのURLに対して適用するactionを書く。そうでなくてもよいのだが、ファイル名と内容を合わせておいたほうがよいだろう。これには手を加えずに、user.actionに記述するほうがよいかも。
default.filterは、あらかじめ定義されているフィルタ。フィルタは、定義しただけでは適用されないため、ここで読み込んでおいても問題ないだろう。
自分の設定は、user.actionuser.filterに記載する。広告除去 - Privoxy Wikiなどが参考になる。

ここまでやれば、自分の興味のないページへのアクセスや、端末の関係で見れないデータをダウンロードしてくることなど、無駄な処理をずいぶん省けると思う。データ転送量での速度制限が当たり前のように行われているので、こうやって自衛するのも有効なはず。


2012/12/15

iPhone, Android用のProxyをたててみる - 2

Hiroaki's blog: iPhone, Android用のProxyをたててみる - 1の続き。今回は、Apache Web Server編。

今回の概要
  • Apache Web ServerでCache Serverの設定を行う。
  • 画像圧縮のscriptを用意する。
  • Privoxyの上位Proxyとして、Apache Web Serverを指定する。

Apache Web ServerでCache Serverの設定
Apache HTTP サーバ バージョン 2.2 ドキュメント - Apache HTTP サーバを読む。以上。
なんだけど、画像圧縮とかやるとなると、サンプルが欲しくなる。
<IfModule !mod_proxy.c>
LoadModule proxy_module libexec/apache22/mod_proxy.so
LoadModule proxy_http_module libexec/apache22/mod_proxy_http.so
LoadModule proxy_connect_module libexec/apache22/mod_proxy_connect.so
LoadModule proxy_ftp_module libexec/apache22/mod_proxy_ftp.so
</IfModule>
<IfModule !mod_deflate.c>
LoadModule deflate_module libexec/apache22/mod_deflate.so
</IfModule>
<IfModule !mod_ext_filter.c>
LoadModule ext_filter_module libexec/apache22/mod_ext_filter.so
</IfModule>

<IfModule mod_ext_filter.c>
ExtFilterDefine gif-filter \
    mode=output intype=image/gif \
    cmd="/usr/local/libexec/airHproxy/gif-filter.sh"
ExtFilterDefine jpeg-filter \
    mode=output intype=image/jpeg \
    cmd="/usr/local/libexec/airHproxy/jpeg-filter.sh"
ExtFilterDefine png-filter \
    mode=output intype=image/png \
    cmd="/usr/local/libexec/airHproxy/png-filter.sh"
<IfDefine DEBUG>
ExtFilterDefine debug-before \
    mode=output \
    cmd="/usr/bin/tee /tmp/filter.before"
ExtFilterDefine debug-after \
    mode=output ftype=21 \
    cmd="/usr/bin/tee /tmp/filter.after"
</IfDefine>
</IfModule>

<IfModule !mod_cache.c>
LoadModule cache_module libexec/apache22/mod_cache.so
<IfModule !mod_mem_cache.c>
LoadModule disk_mem_module libexec/apache22/mod_mem_cache.so
</IfModule>
</IfModule>

<IfModule mod_cache.c>
CacheMaxExpire 108000
CacheLastModifiedFactor 0.1
CacheDefaultExpire 3600
CacheIgnoreNoLastMod On
<IfModule mod_disk_cache.c>
CacheRoot "/var/cache/apache22"
CacheDirLevels 5
CacheDirLength 3
</IfModule>
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 512000
</IfModule>
</IfModule>
Listen *:8080
<VirtualHost *:8080>
    ServerName proxy.example.jp
    DocumentRoot /var/empty
    CustomLog /var/log/httpd/httpd-proxy-access.log combined
    ErrorLog /var/log/httpd/httpd-proxy-error.log
    #DeflateFilterNote Ratio ratio
    #LogFormat "%h %l %u %t \"%r\" %>s %b/%{ratio}n%%" common_deflate
    #CustomLog /var/log/httpd/proxy_access.log common_deflate

    <Location />
        Deny from all
    </Location>

    ProxyRequests On
    ProxyVia On
    #ProxyRemote * http://127.0.0.1:3128
    NoProxy www.example.jp
    <Proxy *>
        Order deny,allow
        Deny from all
        Allow from 127.0.0.1

        AddDefaultCharset Off

        <IfModule mod_ext_filter.c>
        <IfDefine !DEBUG>
        SetOutputFilter html-filter;gif-filter;png-filter;jpeg-filter
        </IfDefine>
        <IfDefine DEBUG>
        SetOutputFilter debug-before;html-filter;gif-filter;png-filter;jpeg-filter;DEFLATE;debug-after
        ExtFilterOptions DebugLevel=9 LogStderr
        </IfDefine>
        </IfModule>
    </Proxy>
</VirtualHost>

これを/etc/httpd/conf.d/proxy.conf として保存(CentOS 5なので)。設定を反映させる方法は略。
CloudCoreだとメモリ2GのVPSなので、キャッシュはメモリに取る設定にしてみた。gif、jpeg、pngについては、外部フィルタを呼び出す形。設定を晒してみて思ったけど、deflateの設定はいらなさそうだなぁ。

画像圧縮のscript
Air H" を使っていたときに用意していた設定を流用。どこかのサイトにあったのを持ってきたものだったはずなのだが、原典は不明。

/usr/local/libexec/airHproxy/gif-filter.sh
#!/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
export PATH

cd `dirname $0`
. ./common-settings
# -resize WxH> とすると WxH のサイズからはみでる大きさの画像だけ、
# そのサイズに収まるように縮小する。範囲内ならサイズ変更しない。

convert +adjoin gif:- gif:- | convert $opt -colors 32 +dither -colorspace Transparent +profile "*" gif:- gif:-

で、common-settingsの内容は
#
case "$HTTP_USER_AGENT" in
*AH-K3001V*) opt="-resize 240x320>";;
*iPod*)
*Darwin*)
        opt="-resize 640x960> -unsharp 0"
        ;;
*SC-02B*)
*FlipboardProxy*)
        opt="-resize 480x800> -unsharp 0"
        ;;
esac
jpegやpngも同じ~と思ったら、画像フォーマットによってconvertのオプションが微妙に異なる。

/usr/local/libexec/airHproxy/jpeg-filter.sh
#!/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
export PATH

cd `dirname $0`
. ./common-settings

exec convert $opt -quality 85 +profile "*" jpeg:- jpeg:-
/usr/local/libexec/airHproxy/png-filter.sh
#!/bin/sh
PATH=/usr/local/bin:/usr/bin:/bin
export PATH

cd `dirname $0`
. ./common-settings

exec convert $opt -colors 32 +dither -colorspace Transparent -quality 99 +profile "*" png:- png:-


Privoxyの設定
上位のproxyを設定するのは、configファイル中のforward。
forward /       localhost:8080
forward :443    .
のようにする。SSLはproxyを通す必要がないので、.を指定する。configのコメントにもあるように、アクセス先によって使用するproxyを変えたり、proxyを使わなかったりということができる。

これで、端末側の設定がいらない、画像圧縮を行うproxyができあがり。でも、せっかくPrivoxyを使っているので、次回は広告を除去してみる。


2012/12/08

iPhone, Android用のProxyをたててみる - 1

iPod Touch(iPhone/iPad)とAndroid向けに、Proxy Serverを立てて、広告の除去や画像の圧縮をやるようにしてみた。

透過Proxyにする

Android 2.xも対象にする。これはProxyの設定がないので、設定なしで使える透過Proxyとする。
透過Proxyを通すため、VPNを必須とする。つまり、VPN接続したとき、透過Proxyを通るようにする。
CentOS 5で構築してみる。透過ProxyにはPrivoxy を使う。画像圧縮には、The Apache HTTP Server Projectのmod_ext_filterを使って、ImageMagickを呼び出す。

Privoxyのインストールには注意が必要

VPNについては、Hiroaki's blog: Amazon EC2にVPN Serverをたてる(L2TP編)などを参照、ということで、省略。

Privoxyはrpmで入れてOK。と思ったら、古いバージョンだと透過Proxyの機能がない。設定ファイルに

accept-intercepted-requests 1
と書いて起動できなかったら、バージョンが古いor透過Proxyを無効にしてコンパイルされている。この場合、一度rpmで、実行時に必要となるライブラリもろともインストール。/etc/rc.d/init.d/privoxy を適当な場所にコピーしてから、アンインストールし、最新版をソースから入れ直す。
./configure && make && make installという標準パターンでOKなのだが、透過Proxyを使いたいのと、どうせなら圧縮もさせたいので、
./configure --enable-accept-filter --enable-compression --with-user=privoxy --with-group=privoxy
とする。詳しくは、./configure --help を。

installが終わったら、コピーしておいた /etc/rc.d/init.d/privoxy を元に戻して、中身を確認。インストール先が /usr/local になっているので、PATHやP_CONF_FILEの値を修正しておく。そうそう、ユーザーとグループも、それぞれprivoxyというのが必要(というか、./configureの時に--with-user=と--with-group=で指定した奴が必要)なので、確認してなければ作っておく(詳細は略)。

Privoxyの設定

まずは、透過Proxyが動くようにする。apacheでの画像圧縮は、その次。

Privoxyの設定ファイルはいくつかあるが、/usr/local/etc/privoxy/config が親玉。非常に長いので圧倒されてしまうが、コメント行を取っ払ってしまうと、20行ちょっと。取り合えず動かすために

  • toggle 1 → toggle 0
  • #debug 1 と #debug 4096 と #debug 8192 の行の先頭の#を取る
  • accept-intercepted-requests 0 → accept-intercepted-requests 1
と直したら、service privoxy start とやって起動させてみる。ログは/var/log/privoxy/logfileに出力されるので、ユーザprivoxyで覗いてみる。ちゃんと起動できていればPort 8118でListenしているはずなので、netstatで確認。/var/run/privoxy.pid が書けなくても起動しないので、ディレクトリのアクセス権限にも注意。

透過Proxyの設定

あと一息。
透過Proxyにするためには、本来まっすぐ進むはずのパケットを無理やり回り道させるような設定が必要になるので、iptableに設定を追加する。

iptables -A PREROUTING -s 192.0.2.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 8118
iptables -A POSTROUTING -o eth0 -s 192.0.2.0/24 -j MASQUERADE
のような設定。192.0.2.0は、VPNでiPhone/Androidに割り当てるIPアドレス、eth0は、透過Proxyを動かしているマシンからパケットが出て行くときのInterfaceなので、使用環境に合わせて変更すること。

これで、画像圧縮はしないけど、透過Proxyとして動作する。iPhone/AndroidからVPN接続して、いくつかサイトを見てみて、 /var/log/privoxy/logfile にアクセス先が出力されていれば、OK。



2012/11/29

10分で理解するApache Web Serverのログに関する小ネタ

その1 ログにhttpでアクセスできるようにする

Hiroaki's blog: IISのアクセスログにhttpでアクセスするのApache版。
  • ログディレクトリを公開する
  • ディレクトリ、ファイルのアクセス権を調整する
の2つをやれば、OK。
多くの場合、ログは /var/log/httpd に書き出されているので、設定はこんな感じ
Alias /log/ "/var/log/httpd/"
<Directory "/var/log/httpd/">
    Order deny,allow
    Deny from all
    Allow from アクセスを許可するネットワーク・ホスト
</Directory>
たとえば、これをlog.confという名前でファイルに保存して、CentOSなら /etc/httpd/conf.d、FreeBSDなら /usr/local/etc/apache22/Includes に置いておけば、Apache起動時に読み込んでくれる。ディレクトリの一覧は不要でしょ?
/var/log/httpd のアクセス権って、所有者(root)しか許可されていないので、chmod og+r+x とかして緩めてあげないと、403エラーになっちゃう。俗に言うシェルアカウントを発行しているようなサーバでは、緩めて問題ないか、よーくよーく考えること。

アクセスは、http://サーバ名/log/ログファイル名 とすればOK。
パスワードのないsshのキーを作って専用アカウントに設定して…なんてしなくても、これなら手軽にアクセスログを取得できるでしょ?

その2 /server-status へのアクセスをログに残さない

MuninでApacheを監視すると、定期的に /server-status にアクセスする。のだが、チリも積もれば山となる。1,2ヶ月様子を見ても変なアクセスがないようであれば、ログに残さなくていいよね?ってことで、特定のURLへのアクセスをログに載せない設定。ちゃーんとマニュアルのログファイルのところに書いてあるんだが、ぜんぜん気がつかなかったよ。
SetEnvIf Request_URI "^/server-status" dontlog
CustomLog /var/log/httpd-access.log combined env=!dontlog
SetEnvIfを使っているから、「特定のサーバからのアクセスはログに残さない」なんてのも可。



2012/11/17

iPod Touchともろもろ購入

今更ながら、iPod Touch購入。最新ではなく、1個前の第4世代、しかも、工場修理品って奴。おもしろそう!ってアプリがiPhone/iPod Touch用だったりして試せないのは残念だし、初代iPadは居間に置いていて引き上げられないし。ぷららモバイルの契約があと1年残っているので、iPhoneも選択肢から除外。

で、中国から届くのを待っている間、「やっぱり液晶保護フィルムいるよね?」というわけで、ググって評判のよさそうな【送料無料】レイ・アウト 4th iPod touch用防指紋光沢保護フィルム RT-T4F/CR 【jan 457129798...を購入。
iPod Touchが届いて裏を見たら、ピッカピカに磨いてあった。「傷、目立つよね?」というわけで、あわてて今度はケースをググったり友達に訊いたりして情報収集。候補をアマゾンで見ていたら、もうちょっとCPのよい商品が紹介されていた。ので、それ、amix iPod touch4専用ハードケース Protection fix shell for iPod touch4 (クリア) に決定。充電ケーブルも一緒に購入すると割引ということだったので、まとめて購入。

ケースの梱包が不安って声があったけど、ケーブルと一緒に買ったためか、透明の汎用のプラスチックケースに並べられて梱包されていた。保護フィルムは2枚入っていたから、汚れてきたら張替えだな。



2012/11/10

WifiをチェックするAndroidアプリを作った

しばらく放置になっていたAndroidアプリを、形にした。
chkConnectは、定期的にWeb Pageにアクセスできるかどうかをチェックするアプリ。アクセスできなければWifiを切断する。再接続はAndroidまかせ。これで、アンテナから離れた席に座ってしまったから、いちいち手動でWifiをoffにするなんて手間ともおさらば。

間隔を設定するとはいえ、ちょくちょくWeb Pageにアクセスするから、電池はそれなりに喰ってしまう。一応、Wifiがoffになっているのを検知すればチェックはやめるし、画面が消えていたときの間隔も別に設定できるので、自分は便利に使えているのだが。
というわけで、Google Playで公開する前に人柱募集モードで公開。


Appleはリスクを背負って作っている

Appleはリスクを背負っているから、妥協せずに細部までこだわるし、それがユーザの満足に繋がっているのだ。
アップルのデザイン ジョブズは“究極”をどう生み出したのかは、対サムソンの部分はApple贔屓の、サムソンの印象が悪くなるような言葉の選択があるものの、どうしてAppleにはできて日本の電機メーカーにはできないかの理由(の一部)が明らかにされていると思う。

iPhoneやiPadを始めとする(物理的な)製品へのこだわり。Apple自らが製造機器を購入し、加工工場に貸し出すというのは驚いた。が、確かに、このスタイルでなければ製品に対する想いを型にはできない。加工工場がボトルネックになってしまうからだ。想いを具現化するために妥協はしない。だから、製品を購入したユーザーも満足し、次の製品により大きな期待をするのだろう。

自分が欲しい物を妥協せずに作る。だから、ボタンを押した感触や、操作感も妥協せず、製品として、サービスとして、統一されている。デザインは見てくれではなく、統一されたUX(ユーザー体験)だと考えているからこそ、デザイン重視といっても薄っぺらい製品にはならないのだ。
そして、「自分=開発者」ではなく、「自分=製品を使うユーザー」であるから、誰が使うんだ?というような製品にはならない。そんな、ターゲット不在の製品を作っている日本のメーカー。現場の問題ではなく、そんな製品企画にGoを出す経営陣が問題だろう。経営陣こそボーナスの一部を自社製品の現物支給とし、家族の容赦無い批判を受けて、ユーザーの目線を学ぶべきではないのか?

「いいものが売れる」なんてのは、作り手の思い上がりなのだ。現実はもっと簡単で、「欲しがるものが売れる」のだ。だから、小耳に挟んで、お店で見てみて触ってみて、買って帰って箱から出して、使ってみる、といった一連の行動に対して、「欲しかったのはこれでしょ?」とアピールすることが重要なのだ。「そうそう、これが欲しかったんだよ」と満足できたものが、その人にとっての「いいもの」であり、「いいもの」とはそういう意味なのだ。そして、「いいもの」を伝えるために、Appleはユーザーが製品を買うお店の「デザイン」や、箱から出すときの演出までこだわった。だから、製品がこれだけ熱狂的に受け入れられているのだろう。

最後に、購入したのは第一版第一刷だけど、ちょっと校正がという部分があった。全く同じ文章が二箇所にあったのだけど、もう直っているのかな?

【第1章】ジョブズにとってデザインとは何か?
 アップルのデザイン活性型経営
 コラム1 ジョブズだからできた究極のシンプル

【第2章】分解して分かるアップルデザインの真髄
 分解・解剖!iPhone4S の内部構造
 アルミニウムの使いこなし方に驚く!
 樹脂にも独自の工夫を加えるアップル

【第3章】触れてうっとり、インターフェースの秘密
 ジョブズ自身が未来のユーザー役に
 識者に聞くアップルのインターフェース
  (1)長谷川踏太「広告以上にブランドメッセージを伝えている」
  (2)増井俊之「開発現場にも届く、強いリーダーシップを」

【第4章】アップルストアに挑んだ日本人デザイナー
 感動を共有するスペースデザイン
 コラム2:デザインのためなら流通でも戦う
 コラム3:量販店的な売り方に満足しないなら

【第5章】アップルの広告・グラフィックデザイン
 ジョブズのセンスが光るもう1つの歴史
 コラム4:時代を経ても変わらぬアップルの広告
 ショートインタビュー 猪子寿之「ネットワーク中心の社会を見据えた思想」
 コラム5:750 枚のタートルネック・シャツ

【第6章】革命の始まりはiMacだった
 インタビュー ジョナサン・アイブin 1999
 ショートインタビュー 藤崎圭一郎「体験を変えたアップルのデザイン」

【第7章】アップルが争っても守りたいデザイン
 GALAXY は果たして模倣なのか?
 サムスンの逆襲!
 第1ラウンドは痛み分けの結果に
 こんなにある!ジョブズ名義のデザイン特許
 ショートインタビュー 山中俊治「モノが実現するユートピア」

【第8章】ジョブズが夢見た未来のデザイン
 アップルTVとリモコンさえあれば…
 ドッキングステーションにこだわる理由
 ユニバーサルドックも変形する
 ジェスチャー入力でボタン不要の世界へ
 スタイラスペン入力もあり!
 ショートインタビュー 坂井直樹「iCar は生まれるか?」
 コラム6:iCloudとSiriに見るアップルの夢