そろそろGoogle依存を脱却しよう

・・・と思って、まずはカレンダーとメールをなんとか自前なり代替サービスなりで揃えようと色々と探していました。最初はdracMailのインストールを頑張ってたんだけど、どうもDB連携で設定がうまくいかなくて困ってたまま停滞してたのが一ヶ月くらい前。

こういう脱Googleを考えているのは僕だけではないようで、スラッシュドットの記事でも「Gmail的なものを自前で立ち上げるにはどうすればよい?」というのがあって、参考にしてみた。
この記事ではZimbraroundcubeが紹介されていたのですが、サーバインストール前提で考えてroundcubeを使ってみることに。

最近はなんとなく外部DBを使ってみることにこだわっていたので、XeroundをDBとして設定。
インストールの設定は下記を参照しました。ありがとうございます。
RoundCubeでWEBメールクライアントを構築するhttp://pnpk.net
RoundCube0.2.2のインストールsatospo

Gmail取得の設定はpnpkさんのところの設定でほぼOK。OptionalのPHP拡張が入っていない状態だけどとりあえず動く。もっさりと動く。まぁGmailに保存してあるメール件数が3万件以上あるのでソートとかしちゃったら相当待つんだけど、受信するだけなら我慢できる程度には使える。
まぁこういうのやってみて、改めてGoogleのインフラとか使いやすさへのこだわりってすごいんだろうなと感じた。

だからこそ敢えてのGoogle依存脱却なんだけどね。

外部DB使ったりPHP拡張がフルに揃っていない状態から「快適に使える状態」に持っていくのも勉強にはなるかなと。

dracMailも再チャレンジしてみよう。

TweetsFun : GoogleAppEngineで動くTwitterクライアント

GAEで動くWebアプリケーションのTwitterクライアントをずっと探していたわけです。
ファイアウォールに阻まれてTwitterにWebアクセスできない。Twitterクライアントアプリケーションをインストールできないからプロクシも使えない。HootSuiteみたいに有名な各種マイクロブログに投稿できるWebアプリケーション等も、フィルタの対象にされてアクセスブロック。こんなの息苦しくてしかたがない。

どんなWebアプリなのか素性がバレにくい、自分専用のWebアプリケーションが欲しいなと。

ファイアウォールに阻まれていることで言えば大先輩の中国の方々が、いろんなGAEアプリケーションを登録しています。昨年のOAuth対応で、BASIC認証のアプリが結構開発を止めていますが、更新が比較的新しいものを探してみたらこんな素敵アプリを見つけました。

http://code.google.com/p/tweetsfun/

デプロイ後の画面はこんな感じ。

ボカシばかりでわかりにくいですがw、一度アプリケーション登録とOAuth認証さえしておけば、あとはGoogleアカウントでログインするだけで使えるWebアプリケーションのTwitterクライアントが使えるようになるというわけ。

おおまかな流れとしては・・・

  1. GoogleAppEngine(GAE)の登録(要Googleアカウント)
  2. App Engine SDKのダウンロードと環境構築、スタートガイド熟読
  3. GAEアプリケーション名を登録。アプリケーション名がxxx.appspot.comのxxx部分になるのでよく考えて登録を。
  4. tweetsfunをダウンロード。ダウンロードしたアーカイブを解凍。
  5. 解凍したファイル内のapp.yamlをテキストエディタで編集。「application: xxx」xxxは登録したアプリケーション名
  6. http://dev.twitter.com/ でアプリケーションを登録。アプリケーションの種類はブラウザアプリケーション、コールバックURLはhttp://登録したアプリケーション名.appspot.comとする。
  7. http://dev.twitter.com/ でアプリケーション登録後に表示されるConsumer keyとConsumer secretをtwitterfunのconfig.pyに転記。LINK_PREFIXにはGAEのURLを。
  8. tweetsfunのmain.pyをテキストエディタで開いて、hours=8となっているところをhours=9に置換して日本時間に変更。
  9. tweetsfunのデプロイ。
  10. デプロイ後、アプリケーションURLに移動。
  11. 「直接使用Google??登?」のリンクをクリックしてGoogleアカウントでログイン。
  12. http://dev.twitter.com/ で登録したアプリケーション名でOAuth認証の画面が出ればOK!
  13. 壁越しのTweetsを堪能

・・・こんな感じ。僕も素人なんでこんな書き方しかできませんが、GAEの既存アプリをデプロイするだけならそれほど敷居は高くありません。自分でプロクシたてるよりは簡単です。

あと、一度OAuth認証を済ませたら、app.yamlに

- url: .*
script: main.py
login: admin

と「login: admin」を追加しておくと、自分のGoogleアカウントからのみアクセスできるようになります。

とりあえずうまくいったので、わかる部分だけ。
もちろんこのアプリの素性自体よくわからないんで、バックドアとか仕込まれてるかどうかも僕には不明。新規にGoogleアカウント取得するなどの対策も含め、リスクについては各自で覚悟してご利用くださいね!

【追記】
google appengineにアプリケーションを登録するためにはPython 2.5.xが必要。
Windows、MacともここからPython 2.5.4をダウンロード。Windows版ではバージョン2.5.5の.msiパッケージ無いけど、登録するだけなら2.5.4で問題ない。GAEのHelloWorld!から試したい人にはこのサイトがわかりやすいです。
Holy (K)night [ python + GAE ] HelloWorldの作成してGAEにアップロード [Windows]

UbuntuはSDK落としてきて、

$ google_appengine/appcfg.py update google_appengine/tweetsfun/

・・・と解凍したフォルダを指定してやれば良し。
PythonはSynapticパッケージマネージャから2.5系を入れてやればよい。
Ubuntuだと簡単でいいな。

【さらに追記】20110113

- url: .*
script: main.py
secure: always
login: admin

と「secure: always」を入れればhttps:// と常時SSL接続となりますが、更新の自動取得やリンクプレビューができなくなります。セキュアな接続が必要かどうかでよって使い分ければよいかも。

MicrosoftonlineのDNS設定でまたハマった(お名前.COMの場合)

もうね、自分自身進歩してないとかちゃんと作業ログ取っていないのをホント恥じているわけで。

たとえば、取得したドメインのサブドメイン(example.tpsupport.net)を TypePad のブログ(tptest.typepad.jp/blog)にドメインマッピングする場合、各項目に以下のように入力します。各項目を入力したら「追加」をクリックし「確認画面へ進む」をクリックします。

ホスト名:example
TYPE:CNAME
VALUE:tptest.typepad.jp.
注: VALUE には最後にドット(.)をつけるのを忘れないでください。
状態:有効

引用元: ドメインマッピングの際のDNS設定(お名前.COMの場合) – TypePad ビジネスナレッジベース.

このボールドにしたところ「VALUEには最後にドット(.)をつけるのを忘れないように」という記述がどこにもなくて、何回ドメイン確認しても確認が取れない状況が続いたわけです。microsoftonlineのドメイン設定項目を表示する画面はこれ。ピンクの丸部分にはピリオドがないので、そのまま「ほにゃらら.microsoftonline.com」で登録するとずっとドメインの確認がとれません。

CNAMEに登録するVALUE値は「ほにゃらら.microsoftonline.com.」とおしりに(.)をつけます。

・・・とまぁこれが原因かなとしばらく待ってたんですが(この下書き書いたのが2010/12/15)、本当にお名前.com取得ドメインの反映が遅くて結局必要な時までにドメインの登録ができませんでしたプンスカ。microsoftonlineにドメイン追加できたのが年の瀬ぎりぎり。3つくらいお名前.comで取得したドメインを登録してるんですが、これ新規取得ドメインだからこんなに遅いんですかね・・・。今度は取得済みドメインで試してみよう。

Rubyでテキストの正規化(nkf)(jcode)

テキストを作成する人がばらばらだと、事前にちゃんとルール決めないと英数字が全角半角入り乱れてしまいますよね。全角か半角どちらかに統一されているならまだしも、ひと続きの文字列で1234567890とか混在しているのはどうやったらこう変換できるんだろうと不思議になってしまいます。
あと「カキクケコガ ギ グ ゲ ゴ」とか半角カナもDTP入稿受ける側にとってはこまりますよね。
テキストエディタで置換するのもありですが、rubyだと一撃で変換できますね。
たとえばこんな感じのスクリプトで


require 'nkf'
str_shiftjis  = NKF.nkf('-SsXm0Z0', str)
#文字の正規化(nkf)半角カナ→全角かな/全角数字→半角数字

これで半角カナを全角カナに、全角数字を半角数字に変換します。もとから全角カナ・半角数字だったものはそのまま。素敵。

あと、約物類。
こいつらを
!?()<>=[]{}・¥
こう変えたい
!?()<>=[]{}・\
今まで長々とこんなことやってたんですが・・・


require 'nkf'
yakumono = yakumono.gsub(/\!/,"!")
yakumono = yakumono.gsub(/\?/,"?")
yakumono = yakumono.gsub(/\(/,"(")
yakumono = yakumono.gsub(/\)/,")")
yakumono = yakumono.gsub(/\</,"<")
yakumono = yakumono.gsub(/\>/,">")
yakumono = yakumono.gsub(/\=/,"=")
yakumono = yakumono.gsub(/\[/,"[")
yakumono = yakumono.gsub(/\]/,"]")
yakumono = yakumono.gsub(/\{/,"{")
yakumono = yakumono.gsub(/\}/,"}")
yakumono = yakumono.gsub(/・/,"・")
yakumono = yakumono.gsub(/¥/,"\\")

#(バックスラッシュは半角¥)

本当はtr使って文字を一対一対応で変換したいんだけど文字化けしちゃって・・・とか思ってたら、jcodeならtrが日本語に対応するんですね。


require 'jcode'
$KCODE='s'
str_yakumono = yakumono.tr('\!\?\(\)\<\>\=\[\]\{\}・¥','!?()<>=[]{}・\\')

#(バックスラッシュは半角¥)

わーい、一行で済んだよー!

何か根本的に間違っている部分がありましたら、詳しい方のご指摘お待ちしております。
独学だと、「スクリプトの先頭行に-Ksオプションつけているから、わざわざ$KCODE=’s'付けなくてもいいよねでもサンプルどおり付けちゃうかwww」とか、「require ‘jcode’ と require ‘nkf’ を一緒に使っていいのかな?いいんですよね?まぁ期待通りの変換できているからいいかwww でも外字対応できてるのか不安だな・・・」という感じのままビクビクしながら使っているわけで。

参考URL:
nkf – Rubyリファレンスマニュアル
jcode – Rubyリファレンスマニュアル

串刺しナンバリングをRubyでやってみる

串刺しナンバリングとか串刺し面付けとか貫きとか、「こう作りたい!」ってのがあっても、作り方わからないものありますよね。

1ヶ月前串刺しナンバリングというのが流行ったらしいんですけれども、

Kushizashiはワールドワイドに | やもめも [yamo.xsrv.jp]

良く考えたら3年前同じことやってた。タイミングってあるんだね。

3年前の串刺しナンバリングの動画を今見たら何をやっているかわかんない(Via M.C.P.C

やもめもさんのところではエクセルで生成する方法と、bashスクリプト生成を紹介しています。
僕も便乗して自作のRubyスクリプトを載せておきますね。Ruby詳しい方のダメ出しお待ちしております。動作環境はWindows2000/XP上のruby1.8.6、1.8.7で動作確認しています。1.9系はわからないなぁ・・・・

#!/ruby/bin/ruby -Ks
=begin
[twitter]karari [website]http://blog.karari.net
System Requirements Microsoft Windows 2000, XP (or higher)
Built environment ruby1.8.6 (or higher)
At your own risk! 使用に際しては自己責任にてお願いします。
=end
t=Time.now#現在日時の取得
tmstmp=t.strftime("%Y%m%d").to_s#変数"tmstmp"にyymmdd形式で日付を代入。生成するファイル名に作成日付を入れない場合は不要。
require "fileutils"

begin
    puts "面付数を入力してください"#面付け数の入力(半角数字&Enter)
      mentuke = gets.chop!
    puts "アイテム数を入力してください"#発生ピース数(半角数字&Enter)ここで入力するピース数はn面付×枚数で発生する総ピース数である必要はありません。
      koma = gets.chop!
        komamen = koma.to_f / mentuke.to_f#発生ピース数を面付け数で割った値を変数化
        maisu = komamen.ceil#ceilで大きい方の整数へ丸めます⇒総枚数の算出
        maxkoma = mentuke.to_f * maisu#総枚数×面付け数で最大のピース数を算出
              maisu.to_i.times {|n|
                mentuke.to_i.times {|i|
                atama = maisu.to_i * i
                  kushi = 1 + (atama.to_i + n)
                  print "."
                  mentuke_r = File.open("串刺し面付"+tmstmp+".txt","a+")#テキストで保存します。階層は各々の環境にあわせてください。日付不要の場合はtmstmpを削除
                  mentuke_r.puts kushi
                  mentuke_r.close
                }
          }

rescue => ex
puts ex.message
end

右側切れてますが、ドラッグして選択すればコピーできます。

タイムスタンプをファイル名につけるとか余計な部分もあるので、まぁ適宜変えて使ってください。
これをテキストエディタに貼りつけて、.rbの拡張子をつけて保存します。
ダブルクリックするとターミナルが起動するので、1ページの面付け数と発生アイテム数を入力。

これで生成されるテキストはこんな感じになります。

8面付500アイテムくらいで入力するとこうなります。
1行目から8行目までが1ページ目に面付けされる番号。9行目から16行目が2ページ目。
僕はACCESSのクエリでこの書き出したナンバリングと番号順に並べたアイテムを紐付けて、串刺し面付けにソートしなおしています。
正直Excelが苦手なので、ホント世の中にACCESSがあって良かった。ACCESSバンザイ(なんだそりゃ

openSUSEのフォントインストール

毎度ながらフォントをインストールするディレクトリを忘れるので・・・

ダウンロードした *.ttf ファイルを /usr/share/fonts/truetype ディレクトリに入れるだけです。

上記のディレクトリは、普通にドラッグアンドドロップで移動することはできません。root 権限でないと書き込めないので、コンソールで移動する必要があります。

(via/ GlassyLamp

sudo mv [フォントのパス] /usr/share/fonts/truetype/ ですね。

お こ と わ り し ま す

・・・のAAでお馴染みの(そうなの?)あのポーズで「うたってみた」が最近お気に入りで百回くらい聴いてるけど中毒じゃないよ。
コメント非表示推奨かも。

Google App Engine Launcher起動エラー

GAEを弄っているときに、面白そうなサンプルがあったので軽い気持ちでデスクトップにコピーしてGAE Launcherでプロジェクトを追加したら、なんだか変な沈黙の後で起動。そして一度終了後、下記のようなダイアログが出て起動しなくなりました。

See the logfile ‘C:\Program Files\Google\google_appengine\launcher\GoogleAppEngineLauncher.exe.log’ for details

言われる通りログファイルを確認してみました。とりあえずログにある「ConfigParser.NoOptionError: No option ‘name’ in section: ’0′」でググってみたところ、WinXPの同じ環境で不具合に遭遇した先達を発見!

原因

google_appengine_projects.iniの設定がおかしくなっているのが原因のようである。
なぜおかしくなってしまったのかは不明だが、心当たりがありそうなのは以下のようなことだ。

  • EclipseでGAEのプロジェクトに触った
  • デスクトップにGAEのプロジェクトを作成して起動しようとした

対応策

google_appengine_projects.iniはC:\Documents and Settings\[ユーザー名]\Googleディレクトリにある。

引用元: Google App Engine Launcherの起動エラー – RENAISSANCE.

そのユーザディレクトリにある.iniファイルを編集(修正)してやれば済むようです。僕の場合は引用元エントリにあるような現象ではなく、.iniに記載されているプロジェクトのパスやら(下記[0]以下)がごっそり消えていました。なので、Cドライブ直下に作ったプロジェクト用のパスを再度入力して、あとは引用元参照してnameとportを記載。バックスラッシュ(\)は¥に読み替え。

# Gogle App Engine Launcher Project File
# http://code.google.com/appengine
[0]
path = C:\GAE\xxxx
name = engineapp3
port = 8080

安易にプロジェクトファイルをデスクトップで弄ってはいけませんよと改めて自戒。rubyでも結構懲りているはずなのに、こういうポカは一瞬で取り返しがつかなくなるから怖いです。

PDF埋め込みMS-Minchoのハイフン問題(続02&完結)

PDF埋め込みMS-Minchoのハイフン問題(続01)でやってたハイフン問題。いまさらですが一応続きを書いておきます。実はもう去年の末には解決していたのですが、色々と忙しくて書くのを放置してました。

結論:CS3が悪い

・・・なので書く気も失せていたわけで、CS2とCS4では再現しないものの、CS3でやってみたらばっちり再現。バグが多いバージョンなんでしょうか?

Google App Engineでできることってどんなこと?

WebアプリでDB的なものを探す→GoogleAppEngineが面白そう→Deginoを試してみよう→Mercurialを入れていないとリポジトリ複製できない→MacだとよくわからないからMercurialEclipseを導入しよう→なんかうまくいかなくて普通にコンソールからhg clone→GAEもPythonのバージョンがMacにインストールされているのと違って入れなおし→そしたらこんどはdeginoはExt JS 3.0が必要なんだけどいまリリースされているのは3.1.1→最初はパスを置換→エラーがでるのは漏れがあるはず→Ext JS3.0.0ってフォルダ名だけ変えちゃったらうまいこと表示された→認証のところでこける→ユーザ認証部分はメールが飛ぶようだ→送信元メールアカウントの記載はあるがパスワードとか入れるところないよね→そもそもGAEで認証してるんだからいらないじゃんと寝る前に気づく→翌日→無事にちゃんと動く状態でデプロイ→使ってみる→ものたりなかった→むしろExt JSで自分で作るべきじゃね?→JavaScriptってよく知らないよね→いまここ

今週はなんかドハマりしてましたが、まずは勉強しなきゃなということはわかりました。Rubyもスクリプト書くくらいの知識でRoRなんてとてもとてもな感じですが、GAEとかExt JSを使ってみたいのでなんとか頑張ろうと思います。

ちょっと改修

このサイトの中身をいじりました。MySQL5にアップデートして、ようやくWPを最新版に、そしてiPhone対応表示のプラグインを導入。
iPhoneを手に入れてからずっと手をつけたかったところだったんだけど、なかなか時間がなくて対応できてなかった。うん、表示は問題なし!
あと、ページを増やしました。息子が入院してた時のエントリが流れちゃわないように、別にまとめました。ってただのコピペですけどね。

Ubuntuのデフォルトブラウザ変更その2

以前もやったUbuntuのデフォルトブラウザ変更ですがあらためてここを参照してもいちど設定してみた。参照元:(?debianでデフォルトのブラウザを設定する.)

$ sudo update-alternatives –config x-www-browser

これで登録されているウェブブラウザが一覧表示される。

There are 2 choices for the alternative x-www-browser (providing /usr/bin/x-www-browser).

Selection ? ?Path ? ? ? ? ? ? ? ? ? ?Priority ? Status

————————————————————

* 0 ? ? ? ? ? ?/usr/bin/firefox-3.5 ? ? 40 ? ? ? ?auto mode

1 ? ? ? ? ? ?/usr/bin/firefox-3.5 ? ? 40 ? ? ? ?manual mode

2 ? ? ? ? ? ?/usr/bin/google-chrome ? 35 ? ? ? ?manual mode

Chromeにしたいので、2を選択。

Press enter to keep the current choice[*], or type selection number: 2

update-alternatives: using /usr/bin/google-chrome to provide /usr/bin/x-www-browser (x-www-browser) in manual mode.

で、もう一度同じコマンドを入れると、こうなる。

Selection ? ?Path ? ? ? ? ? ? ? ? ? ?Priority ? Status

————————————————————

0 ? ? ? ? ? ?/usr/bin/firefox-3.5 ? ? 40 ? ? ? ?auto mode

1 ? ? ? ? ? ?/usr/bin/firefox-3.5 ? ? 40 ? ? ? ?manual mode

* 2 ? ? ? ? ? ?/usr/bin/google-chrome ? 35 ? ? ? ?manual mode

Chromeに*がつきました。なんでこの設定をしてみたのかというと、P3でリンクを開くと必ずFireFoxが起動してしまうのです。上記設定をしてもダメだったので、P3の設定をいじるんだろうな。どこいじればいいんだろ。

Ubuntuのデフォルトブラウザ変更

もうなんかChromeじゃなきゃダメな体になってしまった。

UbuntuでChromeをデフォルトブラウザにする。コマンドで> gconf-editorして設定エディタを開く/desktop/gnome/url-handlers/httpとhttpsの「command」の値をgoogle-chrome %sにする。

引用元: UbuntuでChromeをデフォルトブラウザにする。 | BABUKUMA ^工^.

忘れないように。忘れたら見直せるように。

新年のご挨拶

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

本年も不定期更新ですが、よろしくおねがいします。

今年は家族全員無事で、入院せず健康でいられますように。

ほんと、ごあいさつだけで失礼。

物書きじゃなくても読むべきエントリ

もう刺激的過ぎて、忘年会の酔いが見事に醒めました。

たとえばアイデアがいますぐ必要だ、しかしジェームス W.ヤング『アイデアのつくり方』に載ってる正攻法→(1)仕込む (2)忘れて待つ (3)浮かんだのをつかまえる、なんてことは今やってられないんだ、何しろ今すぐ必要なんだ、という時である。 そんな時、悪魔はあなたの耳元でささやくだろう。

「パクれ」

引用元: 物書きが悪魔と契約する前に試すべき7つの魔道具 読書猿Classic: between / beyond readers.

以降、「通常ならざる手段」として挙げられるものそれぞれが、パクるどころか単なる要素の組み合わせを超えた様々な「スケール」として現前します。

物書きが悪魔と契約する前に試すべき7つの魔道具 読書猿Classic: between / beyond readers.ぜひお読みください。シビレマス。

次ページへ »