Railsを追いきれる自信が無かったから。Rails文化に引っ張られてアプリが一生完成しない気がしたから。あとアプリとしては問題無いのにベースのRailsのバージョンが低いだけで残念っぽくなってるアプリ(Redmineとか)を見たから。

半年やってみてSinatra面倒クセー!っていっぱいあったけど、(Sinatra本体の)ソースが短いので完全把握できる掌握感は独自のOSS作る上で心強かった。

Macで気軽にメールしたい。

Snow LeopardではSMTPサーバーとしてpostfixが入っている。smtp.gmail.comと直接やり取りするプログラムを書いてもいいけど、せっかくSMTPサーバーがあるのでその辺はそっちに任せてsendmailコマンド等を使うことにした。

「Macはpostfixが動いてるの?そんな無駄なモノ今すぐ止めなきゃ!」

と思った方、ご安心下さい。Snow LeopardのpostfixはlaunchdのQueueDirectories機能を使っているので/var/spool/postfix/maildropディレクトリに変化が起きた時だけ立ち上がって、60秒後に終了するので慢性的な負荷は書けません。(/System/Library/LaunchDaemons/org.postfix.master.plistに設定がある。)

gmailにリレーするにはSASLとTLSの設定が必要なので下記のようにする。

% sudo vi /etc/postfix/sasl_passwd
smtp.gmail.com:587 komagata@gmail.com:パスワード
% sudo postmap /etc/postfix/sasl_passwd
% sudo rm /etc/postfix/sasl_passwd
% sudo vi /etc/postfix/main.cf
relayhost=smtp.gmail.com:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options=
smtp_use_tls=yes
smtp_tls_security_level=encrypt
smtp_sasl_mechanism_filter = plain # if you use Yosemite
% sudo postfix stop
% sudo postfix start
% date | mail -s test komagata@gmail.com

ひゃっほう。

何か問題があれば% tail -f /var/log/mail.logしてログを確認しましょう。

二段階認証を使ってる場合はアプリパスワードを発行してそれを上記のパスワードに入力してください。

2012/06/05追記:Lionでも同じでOKでした。

2013/05/02追記:Mountain Lionでも同じでOKでした。

2014/03/11追記:Mavericksでも同じでOKでした。(by tagawaさん)

2015/06/04追記:Yosemiteではmain.cfに一行追加する必要がありました。あとは同じ。

2017/07/25追記:Sierraでも動きますが、Googleから「安全性の低いアプリのログインをブロックしました」として弾かれてしまいます。Googleのアカウント設定で「安全性の低いアプリのログインを許可」すればOKです。(推奨できませんが)

Leopardでランチャーは何を使えばいいのか - komagata [p0t]

この問題。結局"ターミナルが1キーで起動すればいい"というところに帰結するのではないかと考え、Visorを使ってみました。(LanchBarも試し中だけどUnix Executableに引数を渡す方法がわからない)

Visor is a system-wide terminal accessible via a hot-key

結局我々の様なオールドタイプは自動化の為の資産はCUIコマンドとして蓄積してくのが楽かもしれない。

openweb

openでURLを開くのにhttp://を付けるのが面倒なので。

#!/bin/sh
open http://$1

ggl

google検索。

#!/usr/bin/env ruby                                                                                                                                                   
require 'cgi'
system "open \"http://google.com/#&q=#{CGI.escape(ARGV.first)}\""

docskomagata

このブログを検索する。(自分のブログに書いた手順を検索することが頻繁にある)

#!/usr/bin/env ruby                                                                                                                                                   
require 'cgi'
system "open \"http:/docs.komagata.org/search/?query=#{CGI.escape(ARGV.first)}\""

shellは自動化の総本山なので既存の便利な物がいくらでもある。

しかしネックが、VisorはTerminalの1番Window(Cmd-1)を使ってしまうので普通にTerminalを使っているとき、Cmd-TabでTerminalをアクティブにしたときにCmd-2を押す必要があるところ。

理想のランチャー

もう一度、俺に取っての理想のランチャーの要件をまとめてみる。

  • 1キーで文字が打てる
  • UNIXコマンドが打てる(出来ればリダイレクトやパイプも使いたい)
  • UNIXコマンドに引数やオプションを渡せる
  • 普通のTerminal作業に影響を与えない

以前、VirtualBox 3系から4系に移行しても問題無く使えたと書いたけど問題あった。VirtualBoxの3系から持ってきたイメージで下記のような警告が出るようになった。

VirtualBox VM

無視して使ったが下記のようなエラーが出てスナップショットからの再開が出来ない。(スナップショットを破棄して普通に起動すれば動く)

VirtualBox

これはあの警告のせいだと思い、指示通りにOracle VM VirtualBox Extension Packをダウンロードしてインストールした。しかし直らない。仕方ないので下記のようにUSB 2.0を無効にしたら直った。

windows_xp_ie6 - ポート

本格的に使うにはちょっと早いのかもしらん。

ちょっと頭の片隅においておくといいかもしれないWordPress関連の2つの論争 « Waviaei

WordPress3.0がリリースされましたが、このバージョンからcapital_P_dangit()という関数がコアの中に付け加えられました。このコードが何をするかと言うと、記事のタイトル(the_title)、記事の本文(the_content)、そしてコメントの本文(comment_text)に、間違ったスペルのWordPressが書かれていると、それを自動的に正しいスペルに修正する、というものです。(厳密にいうと、DBには間違ったまま保存され、記事として動的に出力される時に正しいスペルで表示するようfilterがかかります。)

Oh my god! oh my god...

特定の単語のスペルミスを直すためだけの関数がコアに入るとは・・・。

もし僕がやるならWordPressのビジュアルエディタにスペルチェック機能(英語のスペルミスを黄色くハイライトするとか)を実装すると思う。

僕の感覚とのあまりの乖離に一瞬痛快にすら思えたけど、これは間違った悟りだ。

origin = github。

% git branch -r
  heroku/master
  origin/HEAD -> origin/master
  origin/admin-notice
  origin/draft
  origin/master
  origin/pyha-last

モートブランチが表示される。

% git checkout -b draft origin/draft

リモートブランチのdraftをローカルブランチdraftとして持ってくる。

% git branch
  draft
* master

一方、こっちのやり方は駄目!ってのをみたんだけど、なんでだかは知らない。

$ git checkout -b draft
$ git pull origin draft

ジェイソン・フリード:なぜ職場で仕事ができないのか

ここ最近気になってるが"受動的なコミュニケーションツール"という奴。まだ自分の中でモヤッとしているけど書くことで少しでもまとめたい。(たまにまとまってない記事も書きたい!)

俺の想像する受動的なコミュニケーションツールの特徴

  • 非同期のコミュニケーションである
    • アラートを出したりして相手の邪魔をしない。相手の好きなタイミングで情報を見れる。 
    • 使う人は1日1回だけ確認しに行くようなイメージ。
  • 誰にでも開放されている。誰でも宛先を知っていれば送れる。 
    • 個人に1対1で紐付く領域でありながら他の誰でもデータを書きこむことが出来る。UNIXで言えばo+wな領域。
  • 常に存在している。持ち主の状態によってデータを送れないというような状態が無い。

要は"私書箱"と同じ性質を持っている。Emailは私書箱を電子化したようなものなので「メールでいいじゃん!」っていうことなんだけど、欲しいものはちょっとEmailとも違う気がなんとなくしている。

sss

攻殻機動隊で「お前の外部記憶領域にデータを置いといた。」みたいなセリフがありました。

個人に紐付けられたネット上の領域で、他人が場所を知ってて、誰もが書き込める領域・・・って~/mboxのことじゃん!(プロバイダの)

「メールしといたYO!」って言えよ!難しい言い方すんなよ!って思ったんですが、機能的には殆ど同じでもそういう用途の為の場所とメールって何かちょっと違うな?って気がします。

97年頃のWarezのFTP交換用サーバー・・・って例えが分かり辛過ぎるけど、個人に紐づいた領域で、誰にでも書き込み可能な領域だから、受け取る方もそこに置かれるファイルは基本信用してなくて、ウィルススキャンしてから他の場所にmoveするという感じの領域。ネット上にあるんだけどPublicとPrivateの間にありつつ両方の性質をもつDMZみたいな領域。

今だと感覚的にはShareしてる友達同士のDropboxフォルダが近い気がする。でもTwitter IDみたいのを知ってれば誰でもファイル置けるようなもうちょっとPublicな領域。

そんな私書箱ってファイル置いても相手の作業に割り込みをかけないし、送る方も送る前に許可を取る必要もないので気軽に置ける。

年末年始にTwitter IDでそういう領域あったら便利だと思ってほぼ実装したんだけど、それだと結局FireStorageみたいなファイル受け渡しサービスになっちゃうからツマラナイし儲からなそうということで辞めた。

メールをリデザインするという意味では似てるけどGoogle Waveはリアルタイムウェブの方向で、そうではなくて、もっと非リアルタイムな感じ、私書箱としてメールをリデザインしたモノが欲しい。

Twitterを利用したように、何か他の便利な使い方の提案とか表現方法があるんだろうなぁ、とモヤモヤ考えています。

このソフトウェアはマジおすすめ。

機能がすっごい豊富なのに3150円と格安です。ここだけの話、このソフトがあるとパソコンが動いたりするらしいです。

Mac App Storeも使えるようになるらしいです。

・・・っていう宣伝してもやっぱりLokkaのLoepard対応はやった方がいいですよね・・・。

public/theme/(Mac版の場合はLokka.app/Contents/Resources/public/theme/) ディレクトリにテーマ名でディレクトリを作ります。

既存のテーマのディレクトリをコピーして修正しても構いませんが、ゼロからexampleというテーマ作ってみます。

テーマディレクトリの作成

exampleディレクトリの作成

theme

テーマのディレクトリの中にテンプレートファイルを作成します。テンプレートの形式は複数から選べますが、一番簡単なerbで作ってみます。

Lokkaのテーマに最低限必要なテンプレートは下記の二つだけです。

  • entry.erb --- 個別(Individual)ページのテンプレート
  • entries.erb --- 一覧(List)ページのテンプレート

個別ページのテンプレートの作成

まずは個別ページのテンプレートを書いてみます。

entry.erb — untitled

exampleテーマを使うように設定します。themeディレクトリにexampleディレクトリを作成した時点でテーマが認識されているので、管理画面の"テーマ"から"example"のテーマを選択します。

Test Site - Lokka

そして、個別ページを見てみましょう。(最初から1エントリーある筈なので http://localhost:9646/1 にアクセスします。)

Example Individual Page

単なるHTMLですが、ちゃんと表示されました。

しかし、静的なHTMLを表示するだけではつまらないのでサイトのタイトルを表示してみましょう。

entry.erb — untitled

h1タグの部分にサイトのタイトルを表示するように変更しました。<% と %>を囲うのがerb形式のテンプレートの記法です。<%= %>のように=が最初に付くと内容を表示するという意味になります。(これはphp/wordpressの<?= ?>と同じです。)

また http://localhost:9646/1 にアクセスして確認してみましょう。

Example Individual Page

サイトのタイトルが表示されました。この内容は管理画面の"設定" > "タイトル" で変更することが出来ます。同じようにサイトの詳細も <%= @site.description %>と書けば表示されます。

今度は個別ページなので、エントリーの内容を表示してみましょう。

entry.erb — untitled

http://localhost:9646/1 というURLからわかるように、IDが1のエントリーを表示するためのテンプレート内容になっています。

上記URLから判断して、IDが1のエントリーが@entryという変数の中に自動的に入っているので、@entry.titleや@entry.bodyでそれぞれエントリーのタイトルと本文が取り出せます。

Example Individual Page

表示されました。

一覧ページのテンプレートの作成

一覧ページのテンプレートを作る前に、エントリーが一個だけでは一覧になっているかわからないので管理画面の"投稿" > "登録" から幾つか適当に投稿(Post)を登録しておきます。

entries.erbというファイル名で一覧のページのテンプレートを作成します。

entries.erb — untitled

一覧は個別より少し複雑です。<% @posts.each do |post| %>から<% end %>の書き方に注目して下さい。do ~ endは一組になっていて、@posts.each do ~ end は@postsの個数分だけdo ~ endを繰り返すという構文です。投稿(Post)が3個あれば3回繰り返されます。

結果は下記のように表示されます。

Example List Page

画像やCSS等の外部リソースの使い方

画像やCSS、Javascriptといった外部リソースはテーマフォルダに含めることができます。

例えば、example/logo.png は <img src="/theme/example/logo.png"> のようにテンプレート中で指定できます。下記のようにディレクトリを作っても構いません。

example/
 images/
  logo.png
 stylesheets/
  style.css
 javascripts/
  jquery.js

また、テーマまでのパスは下記のように書くこともできます。

<img src="<%= @theme.path %>/logo.png" />

テーマ作成に最低限の知識はこれだけです。Lokkaにはその他に柔軟なテンプレートタイプとテーマAPIを持っていますが、それは別のエントリーで紹介したいと思います。

いつもググってる気がするのでシリーズ。

require 'rubygems'                                                                                                                                               
require 'active_record'                                                         

ActiveRecord::Base.establish_connection(
  :adapter  => 'postgresql',
  :host => 'localhost',
  :username => 'komagata',
  :password => '',
  :database => 'foo',
  :port => 5432
)

class Post < ActiveRecord::Base
end

puts Post.first.name