2011/12/15

FRYING DUTCHMAN humanERROR

# タイトルと記事内容が不一致なのはミスじゃありません。*1

電力不足だから、原発は必要だとか、
放射性物質ってのはもともと自然界に存在していたから大丈夫!だとか
日本の技術力はすごいのだ。原発売って何が悪いかとか。
このように考える方は少なからずいらっしゃるでしょう。

または、
セシウム137 だけじゃない、学問的プロパガンダにも汚染されてしまったのに
その自覚が全くない理系出身の方々や、

内部被曝による健康被害は科学的には立証されていないらしい...
すなわち、人体に影響はなーい。
このようなおとぎ話を「まるで宗教のように信じ込み」
懐疑的視点を持たない己の『非』科学的態度を省みず、
Web を探せばどこにでも転がっているチェルノブイリの汚染地図も、
チェルノブイリ周辺の子供たちのガンはどのようなものかも、
自ら自発的に「調べようとしたことがなく」
内部被曝について検索したこともないことを、
すっかり棚に上げきったあげく...

騒ぎ過ぎ。と言い放つ俺様の方々。

このような人々にとっての『科学的』とは一体何なのでしょうか?

下記のサイトは、福島原発が放出した放射性物質について、
一般市民が科学的に理解する上で欠かせない重要なことを示唆していると思います。
./note008.html

-- その他関連

放射線と健康

「情報を開示し子供と妊産婦を守れ」チェルノブイリ周辺で甲状腺癌治療に従事した松本市長 菅谷昭氏 | SAVE CHILD

被曝と健康被害との関係については、議論の余地があるが、
『法的』な面から捉えた場合は、あまり議論の余地はないのでは?
という東京大学の先生の意見もあります。
事故で放射能汚染があったため、放射線管理区域(一時管理区域)を設定していた実例

この法律が制定された当時の研究者や原発を推進した政治家たちでさえ、
人口的な放射性物質と健康との関係において科学的に未解明なことがあるから
といってそれを「根拠」に法律を「制定しない」という判断は下しませんでした。
なぜでしょう?
法律自体の必要性や、そこに定められた線量は科学的根拠を持ったものか?
や、なぜこの法律の中で飲食や睡眠を禁止しているのかについて、
是非ご一考いただければと思います。

もし仮に、この法律が存在しなかったら....
全国あちこちにある
大学内、企業内、実験所内などの放射線管理区域に日々出入りする人々は
仕事をしながら、無制限に外部被曝、内部被曝してよし、
とされてしまいます。
被曝と健康との関係が立証されようが、されまいが
自らの健康を保護することができない環境下におかれてしまう訳です。
もし、法律がなかったら現実におこっていたことでしょう。
この法律によって命びろいした人や、事故を未然に防止できたケースも
あったであろうと推測できます。

そして、なにより重要なことは、福島原発事故によって、
放射線管理区域に相当する地域になってしまった場所で、
居住する一般市民が存在していることです。

*1
限られた日本人たちの間で蔓延する『空気』とやらを重んじるならば、
『決して』口にしてはいけないであろう詩を素晴らしく歌う Artist 。

YouTube - Broadcast Yourself
http://www.youtube.com/watch?v=ENBV0oUjvs0

# Google 動画検索 で FRYING DUTCHMAN humanERROR
# を検索すると Flash なしで聞くことのできるサイトもいくつかありました。

2011/11/22

iTunes: MacRuby で重複する曲を削除

先日
MacRuby で iTunes から重複する曲を削除するものを作りました。
https://gist.github.com/1382271
(OS X 10.7.2 限定)

-- 参考にさせていただいたサイト

# ファイルを移動させる際の条件など大変参考になりましたし、
# MacRuby についての情報もいろいろありました。
iTunesに重複登録されている音楽ファイルを削除する - Watsonのメモ

# iTunes.app に下記のような機能があったことをこれまで知りませんでした。
iTunes ライブラリで重複した項目を検索し、削除する方法

-- 当初、最も悩んだこと

track.delete
を実行すると なぜか MacRuby がクラッシュしました。
MacRuby バージョンは

% macruby -v
MacRuby 0.11 (ruby 1.9.2) [universal-darwin11.0, x86_64]


重複する曲が 20 個以上あるとき
playlist.tracks の曲を each でまわし一定の条件を満たしたタイミングで
track.delete するとクラッシュしました。
こんな感じ。

myplaylist.tracks.each{|x|
  if ...
  # x がなにかの条件をみたしたら
  x.delete
  # この瞬間にクラーッシュ!
}


それで、オブジェクトを探ってみることに...

test.rb

framework "ScriptingBridge"

i = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
a = i.sources[0].userPlaylists.find{|x| x.name ==  "ミュージック"}.tracks
p b = a[0]
p c = a[0]
p b.equal?(c)

#=>

% macruby test.rb
false

なんと false がかえってきました。
b, c は object としてはイコールでは『ない』とのこと。
a は1度しか定義していないにもかかわらず...。

例えば、Ruby 1.9 では

a = ["a","b","c"]
b = a[0]
c = a[0]
p b.equal?(c)

#=>

% ruby193 -v aaa.rb
ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]
true

true がかえってきます。

MacRuby のこの件について理解できておりませんが、ともかく
この事が原因でクラッシュをひきおこしているのかも? と考え
一意の曲オブジェクトを「確実」に指名する方法をとることにしました。
要は

track.databaseID

を使うことにしました。

こんな感じです。

条件をみたした 曲オブジェクトの databaseID を hash に溜め込んでから、
hash を each でまわしつつ
その都度 fileTracks から 指定した databaseID に基づいて曲オブジェクトを検索し
検出できたら
.delete
を実行...

      @h.each{|k,v|
        t = @filetracks.find{|x| x.databaseID == k}
        next unless t
        t.delete
      }


このようにしてみたところ .delete を実行しても
クラッシュしなくなりました。
# あくまでも私の環境下においてでは!です。

# ちなみに .fileTracks と .tracks の 2 種類ありますが
# 上記では .fileTracks を対象にしています。

2011/11/12

Tutorial MacRuby

Tutorial: OS X automation with MacRuby and the Scripting Bridge

One more for the road

以降にある iTunes のサンプルを実行すると

... `<main>': undefined method `playlists' for nil:NilClass (NoMethodError)


playlists がない?
なーんてことはなくて単に日本語システムだからだった。
要素名を日本語に変えればよいのだった。

...
  .find {|s| s.name == "ライブラリ"}
  .playlists.find {|p| p.name == "トップ 25"} #Top 25 Most Played"}
...


この内容を理解する為、基本的な AppleScript を動かす。

 tell application "iTunes"
  repeat with i in playlists
    if name of i is "ミュージック" then
      get tracks
    end if
  end repeat
end tell

AppleScript Editor.app のイベントログで
playlists の要素や tracks の属性を確認できた。
sources にアクセスしなくても、playlists を獲得できた。

MacRuby でも playlists 要素を目視したい為...

framework "ScriptingBridge"

i = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
i.sources.select{|x|
  x.playlists.each{|y|
    puts y.name
    if y.name ==  "トップ 25" # "トップレート", "ミュージック"
      songs = y.tracks.sort{|t1,t2| t2.playedCount <=> t1.playedCount}
      # songs[0..2].map{|t| puts "#{t.artist} - #{t.name} (#{t.playedCount})"}
    end
  }
}

puts y.name でプレイリスト名一覧を確認できた。

ライブラリ
ミュージック
ムービー
テレビ番組
Podcast
iTunes U
ブック
iTunes DJ
90 年代ミュージック
クラシック音楽
トップ 25
トップレート
ミュージックビデオ
最近再生した項目
最近追加した項目
ラジオ


書き換えながらいろいろ試す。

framework "ScriptingBridge"

i = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
ary = i.sources.map{|x| x.playlists}.flatten
top25 = ary.find{|i| i.name == "トップ 25"}
songs = top25.tracks.sort{|t1,t2| t2.playedCount <=> t1.playedCount}
songs.find_all{|t| t.rating > 2}.map{|t| puts "#{t.artist} - #{t.name} (#{t.playedCount})"}


Ruby らしい(つもりの)書き方へ。

framework "ScriptingBridge"

class MyiTunes
  def initialize(str)
    exit if (str.empty? or str.nil?)
    @str = str
    # iTunes Object
    i = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
    # playlist Object
    @ary = i.sources.map{|x| x.playlists}.flatten
    @songs = @ary.find{|i| i.name == @str}.tracks
  end

  def debug
    @ary.each{|x| puts x.name}
  end

  def view
    print "-- #{@str}\n"
    find_all
    count_sort
    to_s
  end

  private
  def count_sort
    @songs = @songs.sort {|t1,t2| t2.playedCount <=> t1.playedCount}
  end

  def find_all
    @songs = @songs.find_all{|t| t.rating > 60}
  end

  def to_s
    @songs.each_with_index{|x,n|
      break if n > 2
      puts "#{x.artist} - #{x.name} (#{x.playedCount}) [#{x.rating}]"
    }
  end
end

MyiTunes.new("トップ 25").view
# MyiTunes.new("トップ 25").debug

実行結果

-- トップ 25
Glenn Gould - Bach: Goldberg Variations, BWV 988 - Aria (5) [100]
Glenn Gould - Bach: Goldberg Variations, BWV 988 - Var. 7 (5) [60]
Glenn Gould - Bach: Goldberg Variations, BWV 988 - Var. 5 (4) [80]
% 


MyiTunes クラスは
"トップ25" から、
星が3つ以上の曲を抽出し、
再生回数順にソートし
3行出力したら終わる。

.rating
に注意を払っていなかった。
puts 表示させてよくみてみると
星が 5つだと 100で、
星が 4つだと 80 で、
星が 3つだと 60 に、
なっていた。
星が3つ以上( > 60 )に変えた。
# t.rating > 60

iTunes.app 環境設定で表示する項目を減らして
MyiTunes.new("トップ 25").debug
を実行すると...正しく捕獲できた。

ライブラリ
ミュージック
ブック
90 年代ミュージック
クラシック音楽
トップ 25
トップレート
ミュージックビデオ
最近再生した項目
最近追加した項目
% 

MyiTunes.new("ミュージック")
でも OK だった。

-- 追記
OS X 10.7.2 で自力で MacRuby をインストールしていない為
/System/Library/PrivateFrameworks/MacRuby.framework/Versions/A/usr/bin/macruby
を使った。

最後に、~/Library/Logs/CrashReporter で
MacRuby がクラッシュしていないかみてみたが
大丈夫だった。

[2011-11-12]
最短?

i = SBApplication.applicationWithBundleIdentifier("com.apple.iTunes")
top25 = i.sources.flat_map{|x| x.playlists}.find{|t| t.name == "トップ 25"}
p top25.name
songs = top25.tracks
p songs.size
=>
"トップ 25"
25


[2011-11-22]
続き

Time.parse

はまった。

>> Time.parse("2011/11/01 am 10:00:00")
=> Thu Nov 10 01:00:00 +0900 2011
>> Time.parse("2011/11/01 am 00:30:00")
ArgumentError: argument out of range
  from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/time.rb:184:in `local'
  from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/time.rb:184:in `make_time'
  from /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/time.rb:243:in `parse'
  from (irb):5
>> Time.parse("2011/11/01 am 01:30:00")
=> Tue Nov 01 01:00:00 +0900 2011
>> 


parse 様にいわせればユーザが am, pm 言うなんておかしいだろってこと?
そ、そうかも。

# 2011-11-04

2011/11/08

OS X 10.7.2: Mobile Processes

Lion になって新しく登場したプロセスにはどのようなものがあるだろうか?と

$ sudo launchctl list

を眺めつつ
% man xxx
しつつ

ふと

% apropos Mobile

を試してみたら...

mdmclient(1)             - MDM (Mobile Device Management) client
mtmd(8)                  - Mobile Time Machine snapshot daemon
mtmfs(8)                 - Mobile Time Machine file system daemon
special_file_handler(8)  - data provider for special files used by Mobile Documents
ubd(8)                   - ubiquity daemon, part of Mobile Documents
% 


Mobile 関連ぽいものがわかった。

#-------------------------
# MDM
#-------------------------
# 1. mdmclient(1) - MDM (Mobile Device Management) client
# 2. mtmd(8) - Mobile Time Machine snapshot daemon
# mtmfs(8) - Mobile Time Machine file system daemon
# 3. special_file_handler(8) - data provider for special files used by Mobile Documents
# 4. ubd(8)
#-------------------------

#-------------------------
# 1. mdmclient
#-------------------------
# man mdclient
# mdmclient -- MDM (Mobile Device Management) client
#
# $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mdmclient.daemon.plist
# % launchctl unload -w /System/Library/LaunchAgents/com.apple.mdmclient.agent.plist

#-------------------------
# 2. mtmd, mtmfs
#-------------------------
# $ man mtmd
# $ man mtmfs
# $ man tmutil
#
# $ sudo tmutil disable
# $ sudo tmutil disablelocal
# $ sudo launchctl unload -w System/Library/LaunchDaemons/com.apple.mtmd.plist
# $ sudo launchctl unload -w System/Library/LaunchDaemons/com.apple.mtmfs.plist

#-------------------------
# 3. special_file_handler
#-------------------------
# man special_file_handler
# special_file_handler -- data provider for special files used by Mobile Documents
#
# $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ubiquity.special_files.plist

#-------------------------
# 4. ubd
#-------------------------
# man ubd
# ubd -- ubiquity daemon, part of Mobile Documents
# ubd is the ubiquity server process. It is primarily used for "Mobile Documents".
# SEE ALSO
# special_file_handler(8)

# % launchctl unload -w /System/Library/LaunchAgents/com.apple.ubd.plist

#-------------------------
# findmymac
#-------------------------
# /System/Library/PrivateFrameworks/FindMyMac.framework/Resources/FindMyMacMessenger.app/Contents/MacOS/FindMyMacMessenger
#
# $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.findmymac.plist
# $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.findmymacmessenger.plist

# % launchctl unload -w /System/Library/LaunchAgents/com.apple.findmymacmessenger.plist

#-------------------------
# awacsd
#-------------------------
# man awacsd
# awacsd -- Apple Wide Area Connectivity Service daemon
# awacsd is an executable invoked by launchd to facilitate connections between devices using Back to My Mac.
#
# $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.awacsd.plist

#-------------------------
# talagent
#-------------------------
# man talagent
# The talagent tool provides services related to the Transparent App Lifecycle feature.
#
# % launchctl unload -w /System/Library/LaunchAgents/com.apple.talagent.plist
# % launchctl unload -w /System/Library/LaunchAgents/com.apple.TMLaunchAgent.plist

# [WARNING: 要注意]
# 上記に点在するコマンドを実行すると、iPhone, iPod, iPad などのデバイスと
# うまく連携できなくなるかもしれません。
# また、iTunes も起動できなくなるかもしれません。起動できたとしても
# 思い通りに動かなくなるかもしれません。
# iCloud と一切交信できなくてもよい人向け entry なのです。

-- 至らない説明。

$ で始まる行は管理者ユーザ用。
% で始まる行は一般ユーザ。
実行するといずれも、
/var/db/launchd.db/
にキャッシュされる。

/System/Library/LaunchDaemons/
配下には daemon plist が保存されており、
/System/Library/LaunchAgents/
配下には daemon に対する agent plist が保存されている。

特定の daemon を 起動時に読み込むか読み込まないかは、
sudo launchctl [load|unload] ...
で制御可能(管理者のみ)。
だが、unload されていない daemon
(イコール load していて sudo launchctl list に表示されるdaemon)
が率いる agent を一般ユーザ側が unload しても反映されない。場合がある。

反映しているかしていないかは
一般ユーザで
% launchctl list
を実行すればわかる。
保存された launchctl を確認したい時は
% cat /var/db/launchd.db/.../.../overrides.plist
で確認できる。

-- 私が実行してみたものはこちら。
github.com/1330318
gist.github.com/1330308

-- その他
anonymous.librariand

$ sudo defaults read /System/Library/LaunchAgents/com.apple.librariand

なんのことやら。

$ man librariand
No manual entry for librariand
$ 


-- 感想
Apple は Mac OS X を iCloud やデバイス中心の OS にしてしまった。
Mac OS X 10.7 全ユーザが iCloud にログインすることを前提にしている。
iCloud やデバイスと無関係でいたいマシンも
そのようなプロセスと無関係でいられなくなってしまった。
Mac OS X は Snow Leopard 以降、変わってしまった。

textutil

めったに使わないコマンド textutil
-- rtf file を plain text に変換する方法 --

# /Libray で rtf file をみかけたら適当な名前でホームにコピーする。
% cp /Library/Documentation/AirPort\ Acknowledgements.rtf ~/airport-doc.rtf

# そのファイルの information を表示する。

% textutil -info airport-doc.rtf
File:  airport-doc.rtf
  Type:  rich text format (RTF)
  Size:  43836 bytes
  Length:  39382 characters
  Contents:  Acknowledgments...
% 


# ヘルプで確認する。
% textutil -help

...

-convert fmt convert each input file to format (txt, rtf, rtfd,
html, doc, docx, odt, wordml, or webarchive)


# txt に変換。

% textutil  ~/airport-doc.rtf  -convert txt -output ~/000.txt


# txt ファイルを読む。

% more ~/000.txt

org.vim.MacVim

mymvim.rb
http://midorex.blogspot.com/2011/11/mymvimrb.html
のその後。(いろいろ試してわかったこと)

自分で -g に設定していたものを削除。

% defaults delete -g NSQuitAlwaysKeepsWindows
% defaults delete -g ApplePersistenceIgnoreState

% su admin
$ sudo defaults delete /Library/Preferences/.GlobalPreferences NSQuitAlwaysKeepsWindows
$ sudo defaults delete /Library/Preferences/.GlobalPreferences ApplePersistenceIgnoreState
$


org.vim.MacVim からも追加したものを削除

% defaults delete org.vim.MacVim NSQuitAlwaysKeepsWindows


MacVim の環境設定
[Preference General]
Open untitled window: never
Open files from applications: with a tab for each file
After last window closes: Quit MacVim

% defaults read org.vim.MacVim
{
    MMAutosaveColumns = 150;
    MMAutosaveRows = 45;
    MMCurrentPreferencePane = General;
    MMLastWindowClosedBehavior = 2;
    MMNativeFullScreen = 0;
    MMOpenInCurrentWindow = 1;
    MMTopLeftPoint = "{516, 746}";
    MMUntitledWindow = 0;
    MMUseInlineIm = 0;
    NSNavLastRootDirectory = "~";
    NSNavPanelExpandedSizeForOpenMode = "{585, 418}";
    NSQuotedKeystrokeBinding = "";
    NSRepeatCountBinding = "";
    SUCheckAtStartup = 0;
}


これで、MacVim が起動していない時に、
MacVim 付属の mvim を動かしても shell が終了しないなんてことはなくなった。
mvim の exec は何も悪くなかった!。
せっかく作った mymvim.rb は残念だけど不要だった。

% syslog -w
をみていても変なメッセージはでてこなくなった。

MacVim 起動すると、
~/Library/Saved Application State/org.vim.MacVim.savedState
が生成されるけれど、MacVim を終了すると同時に自動的に消えてなくなってくれるようにもなった!。

感想。
今後 defaults -g に write するのはやめよう。

2011/11/04

mymvim.rb

MacVim 付属のmvim はshell で書かれている。
mvim で存在しないファイルを指定すると新規ファイルを作成する。
Lion で MacVim を起動していない時にうっかり mvim を動かすと
下記のようなエラーが残り shell 終了しない。

... MacVim[451:507] ApplePersistenceIgnoreState: Existing state will not be touched. New state will be written to ....

Ctr + C で終了するはめになる。

defaults write -g ApplePersistenceIgnoreState YES

を実行しているけれど
念のため org.vim.MacVim にも指定。

% defaults write org.vim.MacVim ApplePersistenceIgnoreState YES
% defaults read org.vim.MacVim
{
    ApplePersistenceIgnoreState = YES;
    MMAutosaveColumns = 150;
    MMAutosaveRows = 45;
    MMCurrentPreferencePane = General;
    MMLastWindowClosedBehavior = 1;
    MMNativeFullScreen = 0;
    MMOpenInCurrentWindow = 1;
    MMTopLeftPoint = "{208, 723}";
    MMUntitledWindow = 0;
    MMUseInlineIm = 0;
    NSQuotedKeystrokeBinding = "";
    NSRepeatCountBinding = "";
    SUCheckAtStartup = 0;
}

が...むなしく変化なく shell 終わらず。
そりゃそうかも。
mvim の最後の行あたり exec が怪しいのかも...

それで
Ruby 1.9.3 で mymvim.rb を作るいい口実ができた。
mymvim.rb は
MacVim が起動していなかったら、たぶん?正しく起動し、指定したファイルを開く。
存在しないファイルを指定してしまっても、何もおこらない。
おもったよりも早く動く。

ところが mymvim.rb を実行すると...

% ps aux  |grep task

=>
...(略) grep --color=auto task
...(略) /usr/libexec/taskgated -p -s

必ず /usr/libexec/taskgated が発生する。
数分すると自動的に消える。これは一体なんなのだろう。
Snow Leopard の時もあったような気もする...。

taskgated を sudo で kill しつつ
よくよく試してみると mymvim.rb だけでなく
MacVim 付属の mvim を実行したあとにも taskgated が発生していた。
ということは、
どのような方法で MacVim を起動したかってことは関係なくて、
MacVim を起動したこと、そのこと自体が taskgated を引き起こしている
ようだ。

MacVim をインストールしている ~/Application と
同じ階層にある他の Application を起動してみると...
taskgated が発生した。

dmg をダウンロードしてインストールした
/usr/local/git/bin/git
を動かしてみると、やはり発生した。

% ruby19 -e "puts \"hello\""
hello
% 

を実行しただけでも発生した。

しかし Lion にデフォルトで入っていた ruby 1.8 を動かしても発生しなかった。

% ruby  -e "puts \"hello\""
hello
% 


/Application にある Safari.app などを起動してみると
taskgated は発生しなかった。

つまり
Apple によって署名されていない Application やプログラムを起動すると
taskgated process が発生するってことかな。?

署名されたソフトウエアと、そうじゃないものの違い....

mymvim.rb

# coding: utf-8
# snapshot MacVim 7.3
# OS X Lion 10.7.2
# ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0]

module Mymvim
  class Mvim
    def initialize(f)
      @f = f
      @osa = '/usr/bin/osascript'
      macvim = "Tell application \"MacVim\""
      @s1 = "#{macvim} to open (POSIX file \"#{@f}\") as string"
      @s2 = "#{macvim} to activate"
    end
    def base
      run
    end
    def run
      begin
        e = system("#{@osa} -e '#{@s1}' -e '#{@s2}'")
        exit unless e
      ensure
        print "bye\n"
        exit
      end
    end
  end
end

f = ARGV[0]
 unless File.exist?(f)
  print "Not found : #{f}\n"
  exit
end
Mymvim::Mvim.new(f).base

2011/10/22

OS X 10.7.2: networksetup

Lion 10.7.2
優先するネットワークの設定。

# 管理者ユーザでログイン。
# ヘルプをみる。

$ networksetup --help | grep addpreferredwirelessnetworkatindex
networksetup -addpreferredwirelessnetworkatindex <device name> <network> <index> <security type> [password]


# manual で addpreferredwirelessnetworkatindex の詳細をみる。

$ man networksetup
     -addpreferredwirelessnetworkatindex hardwareport network index securitytype [password]
             Add wireless network named <network> to preferred list for <hardwareport> at <index>. Store the optional password in the
             keychain For security type, use OPEN for none, WPA for WPA Personal, WPAE for WPA Enterprise, WPA2 for WPA2 Personal,
             WPA2E for WPA2 Enterprise, WEP for plain WEP, and 8021XWEP for 802.1X WEP.


実行すべきコマンドの雛形は

$ networksetup -addpreferredwirelessnetworkatindex <device name> <network> <index> <security type> [password]

で オプションは

<device name>
en0 とか en1 とか
$ networksetup -listallhardwareports で要確認。
前回
このオプションを間違えていたかも...

<network>
優先的に参加するローカルネットワーク名。

<index>
0 にすると優先順位が 1 番に。
優先順位を 2 番目したければ 1 に。

<security type>
WPA2 Personal で設定しているなら -> 'WPA2'
WPA2 Enterprise -> 'WPA2E'
WPA Personal -> 'WPA'
WPA Enterprise -> 'WPAE'
plain WEP -> 'WEP'
# ノンパスワードでローカルネットワーク解放しているなら
none -> 'OPEN'

[password]
いわずもがな

下記を実行すると...

$ sudo networksetup -addpreferredwirelessnetworkatindex en0 'homearea' 0 'WPA2' 'xxxxxxxxx'
Security type is set to: WPA2 Personal
Added homearea to preferred networks list
$ 


キーチェーンのシステムとログインに Wi-Fi 用鍵が出現。

$ syslog -w をみながら

おもむろに Wi-Fi 電源を On

$ networksetup -setairportpower en0 on

つながりました!

追加された鍵のアクセス制御欄を確認すると

networksetup
AirPort


以前と同様にアクセス制御欄には「システム環境設定」が存在していない。
(GUI から設定した場合は存在する)
若干気になるがうまくいったようなので無視する。

# 実行する前後に注意したこと。

コマンドを実行する前にシステム環境設定ーネットワークを開き
「新しいネットワークに接続するを確認」にチェックが『入っていない』ことを確認。
詳細欄の
「このコンピュータが接続したネットワークを記憶」
「コンピュータとコンピュータネットワークを作成」
「ネットワーク変更」
の3つを On にしておく。

コマンド実行後、
Wi-Fi電源を ON にし優先するローカルネットワークに参加できたことを確認したら、
一旦 Wi-Fi 電源をOFF。
「新しいネットワークに接続するを確認」にチェックを入れて
システム環境設定の鍵をかけ
システム環境設定を終了しキャッシュする。

管理者ユーザからログアウトし一般ユーザでログインしなおす。
メニューバーから Wi-Fi 電源を On にする。
優先するネットワークに参加できることを確認。
一般ユーザのログインキーチェーンには Wi-Fi 用鍵は存在していなくて全然 OK 。

最終確認。

$ networksetup -listpreferredwirelessnetworks en0

を実行すると優先的に参加する無線ローカルネットワーク名が表示される。

# IPv6
OS X 10.7 : IPv6 を切る
$ networksetup -getinfo 'Wi-Fi'
$ sudo networksetup -setv6off 'Wi-Fi'

# DNS
$ networksetup --h | grep dns
networksetup -getdnsservers <networkservice>
networksetup -setdnsservers <networkservice> <dns1> [dns2] [...]

$ networksetup -listnetworkserviceorder
を実行すると <networkservice> がわかる

# Google DNS
$ sudo networksetup -setdnsservers Wi-Fi '8.8.8.8' '8.8.4.4'

2011/10/13

Pu

私は6月にFukushima Nuclear を書いた。
公開した記事は実際に書いた文章のうちの後半半分だったので、ここに前半部分も公開しておこうと思う。
個人としての私が欠如していると考えた情報とは何だったのか?を記録として残しておきたいから。

2011.06.15 Wed PM 13:39:54

今現在、ホットスポット(日本の法律に照らせば[放射線管理区域]に相当する地域) 発生地域を「予測できない」事を前提に、
福島原発700キロ圏内地域の「全ての住民」が、

「己の居住地域が現在どの程度汚染されているか?管理区域相当になっているだろうか?」

を、正確かつリアルタイムに、知り得る環境にあるだろうか?...。
No だと思う。

なぜなら、文部科学省が公開している放射線測定結果は、即時性に欠けているばかりか、あまりにも測定地点が少ない。驚くほど少ない。測定されていない地域が圧倒的に多いから。(福島県内の学校における情報は十分とは言い難い。)

何キロも離れた隣の町の線量値はわかっても自分の町の数値はわからない。こんなことで「情報公開されている」んだろうか?

「700キロ」圏内の住民は、居住区域がどの程度汚染されているか正確に「リアルタイムに」知る必要に迫られている(命のために)が、現在のような緩慢な測定ではあまりに心もとない。なぜ、防ぐ事ができる将来的健康被害を「防ぐ為の測定」が行われていないか、だ。放射線測定は人の健康を守るため、ではないのだろうか。
測定しない事が、風評被害を発生させる隙を、十二分に与えてしまっている。
# 測定することで住民がパニックになったら困ると公言する役人もいるらしいが、それこそが根拠なき「憶測」で非科学的な最たる「風評」と呼びたい。

ただちに、東京電力、日本政府及び地方自治体及び原子力安全委員会は、
福島原発「700キロ圏内」の全ての公立小学校、及び公共施設で
下記の測定を実施し、
内部被曝を加味した暫定「総実効被曝線量」を、「24時間リアルタイム」に国民に告知すべき、なんじゃなかろうか...。

1, 屋外(地上から歩行可能2,3歳児の身長程度の高さ)、および屋内(木造家屋含む)における放射線線種別測定と総合線量の測定。
2, 道路上、土壌、上下水道中に含まれる「核種」別測定。
3, 空気中に浮遊する放射性物質「核種」別の測定。大気中放射性物質含有量の測定。
# zero ではない「数値」をゼロや未検出にねつ造しないことがもっとも重要。

テレビ、ラジオにおいて、『公共の電波』において、天気予報とともに放射性物質拡散予報が報道されて当然のはずが、実施されていない。
人命にかかわる重要かつ緊急情報を、天気予報とともに報道しない放送局は『公共の電波』を自らの利益追求のみに悪用している、のだと私は解釈している。

[追記:2011.10.13]

# なぜか二つ存在している世田谷区のニュース。
世田谷区の道路で高い放射線量 NHKニュース
http://www3.nhk.or.jp/news/html/20111012/t10013213371000.html
世田谷区の道路で高い放射線量 NHKニュース
http://www3.nhk.or.jp/news/html/20111012/k10013213371000.html

上記の文章から、国が避難の目安としている年間20ミリシーベルトなる基準が、いまや当たり前のこととして公然とまかり通っていることがわかる。
2011/03/11 以前の日本は、1ミリシーベルトが基準で、地震以降は20ミリシーベルト。

10月5日 被曝限度「1〜20mSv」へ変更提言を批判。20mSv被曝で子供の癌死80倍320人 小出裕章(MBS) « 小出裕章 (京大助教) 非公式まとめ

いまとなっては、
住所にたとえるなら「番地」ごとに測定される必要があり、その番地に居住する居住者に測定結果の値を告知する義務を、行政は(法律的に)遂行する必要があると思う。栃木、茨城、群馬、神奈川県、千葉県、埼玉県、東京で、番地ごとの行政による測定が必要なのではないのでしょうか。住民保護の観点から。

国、及び地方自治体は高い放射線量値が検出された時、
居住する居住者全員に対し、
すみやかに避難勧告を告知し、
幼児、児童、妊婦、病人、障害者、20歳未満の子供 など
基礎体力の低い者や放射性物質が及ぼす影響に対し「感受性の高い者」を優先的に被曝から保護しなければならない はず。
法律に則って考えれば...
# 自分がどれほどむなしい事を書いているかは自覚している。

現在、強制避難が実施されているのは、福島県の原発から近い地域だけだが、実際にはあちこちにホットスポットが存在している。にもかかわらず、被曝被害から避難するかしないかは、住民自身の「自己判断」と「自己資産」に委ねられている。

台風の場合、避難勧告が発令され、地域住民は銀行から自己資産を引き出す必要なく、家族会議で熟考する必要もなく、躊躇なく危険から避難できる。
一方、放射性物質拡散による被曝避難勧告などは発令されず、情報告知すらない。放射線測定機器購入費も避難に伴う費用も自らが自己資産をはたくしかない。お金を用意できないならば、逃げたくても避難できない。避難者受け入れ支援をする団体も、福島県民だけを対象にした団体が圧倒的に多い。
こうして関東地方において被曝者となった人々が実際何人にのぼるのか、国は把握していない。正確に言うなら把握することを政府自ら自主的に拒否しているに等しい。旧ソビエトと同じく。

これが2011年の日本。

--

平成23年9月30日 文部科学省による、プルトニウム、ストロンチウムの核種分析の結果について
http://radioactivity.mext.go.jp/ja/distribution_map_around_FukushimaNPP/0002/5600_0930.pdf

東京などの放射線量を公表 NHKニュース
http://www3.nhk.or.jp/news/html/20111007/k10013095081000.html

市民団体
http://www.radiationdefense.jp/
PDF: 首都圏土壌調査結果リスト

早川由紀夫の火山ブログ 放射能汚染地図(四訂版)


10/13 東京新聞:世田谷区、さらに高い放射線量 地上1m、原因は不明:社会(TOKYO Web)
http://www.tokyo-np.co.jp/s/article/2011101301000297.html

10/13 東京新聞:世田谷で最高2.7マイクロシーベルト 弦巻 小学校の通学路:社会(TOKYO Web)
http://www.tokyo-np.co.jp/s/article/2011101390072238.html

10/12 東京新聞:ストロンチウム検出 市が採取物検査開始:神奈川(TOKYO Web)
http://www.tokyo-np.co.jp/article/kanagawa/20111012/CK2011101202000047.html

10/12 放射性物質:横浜でストロンチウム検出 80キロ圏外初 - 毎日jp(毎日新聞)
http://mainichi.jp/select/jiken/news/20111012k0000e040037000c.html

10/07 放射性物質:小中学校5校で線量基準値超え 東京・大田区 - 毎日jp(毎日新聞)
http://mainichi.jp/select/weathernews/20110311/radioactive/news/20111008k0000m040132000c.html

10/02 福島原発から45キロの地点でプルトニウム検出 - WSJ日本版 - jp.WSJ.com
http://jp.wsj.com/Japan/node_317561

09/29 放射性物質除染:1~5ミリシーベルトでも国負担 - 毎日jp(毎日新聞)
http://mainichi.jp/select/jiken/news/20110930k0000m010116000c.html

--

【SAVE CHILD】放射能汚染から子供を守ろう

【汚染マップ】東京都の放射線量と土壌汚染地図(文部科学省10/6発表) | SAVE CHILD

飯舘村など プルトニウム検出 NHKニュース
http://www3.nhk.or.jp/news/html/20110930/t10015963921000.html
# 東京大学大学院は、長崎教授の発言(飛ぶとは思わなかった) をどうとらえているのだろうか?。

プルトニウムは重いので飛ばないと言ったのは誰だったのか

隠されてきたプルトニウムの大量放出! | カレイドスコープ

測ってガイガー!

2011/10/08

Ruby 1.8.7

1.8.7の今後につきまして

(<URL:http://www.ruby-lang.org/en/news/2011/10/06/plans-for-1-8-7/> の翻訳です)
...

今後の予定

2012年6月まで、通常のメンテナンスが続きます。
それ以降、バグフィックスリリースは終了いたします。2013年6月まではセキュリティフィックスは続けますので、それまでは1.8.7をお使いいただけます。
2013年6月より先は、1.8.7はあらゆるサポート対象外になります。


Mac OS X Lion の
/usr/bin/ruby は
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]

なので、すぐにでも 1.9 にアップデートして欲しいです。
1日でも早く Lion 標準で 1.9 を使えるようにしてほしいです。
ソフトウェアアップデート経由で 1.9 を提供していただきたい。心から切望。

OS X Lion で似?1.9 をお試ししたい場合

alias 'macruby'=/System/Library/PrivateFrameworks/MacRuby.framework/Versions/A/usr/bin/macruby
alias 'macirb'=/System/Library/PrivateFrameworks/MacRuby.framework/Versions/A/usr/bin/macirb

を ~/.bashrc などなどに追記して

% source ~/.bashrc
% macirb
irb(main):001:0> RUBY_VERSION
=> "1.9.2"
irb(main):002:0>

2011/10/07

楽しいAppleScript

# このタイトルはトーゼン「楽しいRuby」にかぶせています。

makiaea.org | wifi power toggle using applescript in mac os x 10.7 lion
を目にして衝動的に久方ぶりに AppleScript Editor.app を起動してしまいました。
すっかり記憶喪失になっていたので
以前作った github.com/midore/readbook-scpt を開いて書き方を思い出しました。

実は普段は
~/.bashrc に

alias 'wifi'='/usr/sbin/networksetup -setairportpower en0'

を追加していて
$ wifi on
などして使っているんですが...それはそれとして
この主題は面白いです。

その昔、梅棹忠夫氏は
将来は誰でもが気軽にプログラミングする時代がくるんじゃないか、と言ったとか言わなかったとか。
# 原典が何だったか思い出せない。*1
そんなことを心の片隅におきつつ...

# wi-fi.scpt
script wifi

  on my_dialog(title, str, b_str, b_no)
    tell application "Finder"
      activate
      display dialog str buttons b_str default button b_no with title title
      set res to button returned of result
      return res
    end tell
  end my_dialog

  on setpower(onoff)
    return do shell script "networksetup -setairportpower en0" & space & onoff
  end setpower

  on getpower()
    return do shell script "networksetup -getairportpower en0"
  end getpower

  on getinfo(opt)
    return do shell script "/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport" & space & opt
  end getinfo

  on endinfo()
    return my_dialog("Wi-Fi Info", getinfo("-I"), {"Done"}, 1)
  end endinfo

end script

on run
  tell wifi
    set v to do shell script "networksetup -version"
    # networksetup, Version 1.8
    # Copyright 2002-2010 Apple Inc. All rights reserved.
    set str to word 5 of getpower()
    if str is "On" then
      set msg to {"Off", "GetInfo", "Cancel"}
    else
      set msg to {"On", "Cancel"}
    end if
    try
      set res to my_dialog("Wi-Fi", v & return & return & "Wi-Fi Power (en0): " & str, msg, 1)
      if res is "GetInfo" then
        return endinfo()
      end if
      setpower(res)
      my_dialog("Wi-Fi", getpower(), {"OK"}, 1)
    on error number -128
      return
    end try
  end tell

end run

きりがないのでここらあたりで完成。

*1
あったあった。
出典『知的生産の技術』岩波新書
P.15

ややさきばしったいいかたになるかもしれないが、わたしは、たとえばコンピューターのプログラムのかきかたなどが、個人としてのもっとも基礎的な技能となる日が、意外にはやくくるのではないかとかんがえている。すでにアメリカでは、初等教育においてコンピューターの言語FORTRANをおしえることがはじまったようだ。

この本の初版は1969年7月21日。
梅棹氏は、プログラミングが「個人としてのもっとも基礎的な技能」になると書かれていますので、私が記憶していたこととは微妙に異なりますな。

それにしても「個人としてのもっとも基礎的な技能」としてのプログラミングとは?

特に言語指定はしないが日本語の読み書き&会話ができることと等しくプログラミングソースを読み書き&実行できる技能、
...と解釈したとして...
では、いま、この日本で、梅棹氏の予想は現実のものとなっているか? というと...幸か不幸か? No かもしれません。
けれどこれまた幸か不幸か?
こんな私でも「易しい」ものを読んだり書いたりできているのだからある意味 Yes なのかもしれません。

これからもっとプログラミングが普及して、梅棹氏の言ったような基礎的な技能となる日はくるんだろうか。もしそんな日がくるならば AppleScript も楽しい言語の1つとして普及してほしいなーと思います。

Steve Jobs 氏を悼み「ヒッピーに捧ぐ」を聞こう。

-- screen shot

2011/10/06

dream

本日(日本時間 2011.10.06) Steve Jobs 氏の訃報。


Steve Jobs 氏 と Apple Inc. 社は大人たちを子供にさせました。
誰しもが子供みたいに、内心のワクワクを隠せませんでした。
この感覚は、世界中の User が共有していたようでした。
改めて、おもうに、考えれば考えるほど、とても不思議なことです。
長い夢から無理矢理目覚めさせられたような気もします。

Steve Jobs 氏が生きた時代を共に生きる事ができたラッキーな世代だからこそ
極めて歴史的に特異な現象として受け止め損ねちゃったかもしれません。
恐ろしいことです。

ただ、私にとって確かなことがあります。
地震が起きて真っ暗な気持ちになっている時だって、
ほら Macintosh を触ってみれば心地よい気分がかえってきました。
おそらく私だけじゃない世界中の人々がこの computer から何かを感じ取り、
それで子供のように晴れ晴れとした気持ちやワクワクする気持ちを持つことができたのではないでしょうか。

これから computer はもっと大きな変化を遂げるでしょうが、
私たちの世代は科学者でもない一般人が、
コンピュータ&インターネットと共に生活を始めた最初の世代です。
私は10年以上にわたって Steve Jobs 氏のアイディアの具現を Apple から受け取り、
コンピュータの楽しさを存分に教えてもらいました。
この贈り物は素晴しい Energy です。

Steve Wozniak 氏と Steve Jobs 氏 が Apple を創設し
一般人の為にパーソナルコンピュータを作った事で今日があることを改めて思い出したいと思います。
Steve Jobs 氏 の夢に感謝し謹んでご冥福をお祈り申し上げます。


# もちろん、ゲイツの Windows が長年市場制覇している訳ですが、
# あらゆる意味で Microsoft は Apple の後を追ってきました。
# いまだにこの事実を知らない方も多いようですが、何年かすれば時間が解決することでしょう。

2011/10/04

OS X 10.7.1: XProtect

Get Safe Downloads List last update time and current version - Mac OS X Hints
http://hints.macworld.com/article.php?story=20110602091032338

を読んで...

現在の様子 Memo

% defaults read /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta LastModification
Fri, 23 Sep 2011 18:08:25 GMT
% defaults read /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta Version
1003
% cat /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta.plist


強制的にアップデートしたい時。

$ sudo /usr/libexec/XProtectUpdater


# XProtect.plist
# XProtect.meta.plist

2011/09/23

OS X 10.7.1: mtmfs

マックがうなり熱くなるので、

$ top
$ sudo lsof -i


知らないものが Listen していた。気持ち悪い。調べてみると

Lion Running Hot: Apple Support Communities
https://discussions.apple.com/message/15700251#15700251

これかも。
/System/Library/CoreServices/backupd.bundle/Contents/Resources/mtmfs

% man mtmfs

...There are no configurations to mtmfs, and users should not run mtmfs manually.

% man mtmd

ふーん。設定ファイルはないよ。ユーザはいじるな、と。

$ cd /System/Library/LaunchDaemons/
$ grep -R mtmfs .
./com.apple.mtmfs.plist:	<string>com.apple.mtmfs</string>
./com.apple.mtmfs.plist:		<key>com.apple.mtmfs</key>
./com.apple.mtmfs.plist:		<string>/System/Library/CoreServices/backupd.bundle/Contents/Resources/mtmfs</string>

$ sudo launchctl list | grep mtmfs
64	-	com.apple.mtmfs

$ more /System/Library/LaunchDaemons/com.apple.mtmfs.plist 
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.mtmfs.plist 
$ sudo lsof -i


消えたわ。
あ、sudo launchctl unload やってからシステム環境のタイムマシン「切」にした。順序間違えたかも。
というか「切」にしておけばマックが熱くなることもなかったのかな...。わからない。
ちなみに、

% mdutil -s /Users/midore/
/Users/midore:
  No index.


[余談]
いい↓事知りました。

Lion Running Hot: Apple Support Communities
https://discussions.apple.com/message/15791385#15791385

% ps -arcwwwxo "command %cpu %mem" | grep -v grep | head -13


[2011.09.25]
mtmd

【コラム】新・OS X ハッキング! (15) Lion備忘録(8) ~タイムマシンにおねがい~ | パソコン | マイコミジャーナル [SP]
http://journal.mycom.co.jp/column/osxhack/015/index.html

(Mac OS X Tips::Lion)mtmd(Mobile Time Machine Daemon)のCPU使用率が異常に高い時の対応 - jitsu102の日記 [SP]
http://d.hatena.ne.jp/jitsu102/20110912/1315834305

[2011.10.02]
tmutil

Disable Time Machine Local Backups in Mac OS X Lion
http://osxdaily.com/2011/09/28/disable-time-machine-local-backups-in-mac-os-x-lion/

Time Machineのローカルスナップショット機能を無効にする方法
http://veadardiary.blog29.fc2.com/blog-entry-3493.html

[2011.10.11]
記事タイトル変更

2011/09/22

OS X 10.7.1: Keychains

Mac OS X 10.4 の重要なファイルをバックアップおよびリストアする方法
http://support.apple.com/kb/HT2980?viewlocale=ja_JP&locale=ja_JP#key

下記は超我流です。

----------------------------------------
ハードディスクを初期化する前に
~/Library/Keychains をバックアップする。
----------------------------------------
# キーチェーン.app が起動していない事を確認。
# デスクトップに /Volume/backupHDD/ がマウントできているとしたら。

$ cp -a ~/Library/keychains  ~/Volume/backupHDD/your-name-backup-keys


[重要]
キーチェーン"ログイン"パスワードにユーザログインパスワード「以外」のパスワードを設定している場合、バックアップから戻す際にはそのパスワードが必要になる事を心にとめておく。

----------------------------------------
バックアップした Keychains を戻す。
----------------------------------------
[重要]
これから行う作業において事故があった場合に備え予め現在の ~/Library/Keychains をバックアップしておく。この時キーチェーン.app は起動していてはいけない。メニューバーにカギアイコンがあればカギをかけておく。

# 現在のキーチェーンカギ束をバックアップする。
$ cp -a ~/Library/Keychains/  ~/now-backup-keys
外付けディスクなどにバックアップしておいた ~/Volume/backupHDD/your-name-backup-keys フォルダを Home 配下 にコピーする。
マウントしている外付けディスクに存在するバックアップしたカギ束を、直接触ることは厳禁。必ずバックアップの「コピー」を操作対象にする。
<pr>
# バックアップの「コピー」を ~/ 以下におく。
$ cp -a ~/Volume/backupHDD/your-name-backup-keys  ~/backup-keys
$ cd ~/backup-keys

# login.keychain があるはず。ファイル名 login を任意の名前(ここでは my)に変更。
$ mv login.keychain my.keychain


/Applications/Utilities/Keychain Access.app を起動する。
キーチェーンアクセス.app のメニューから「キーチェーンを追加」をクリック。
保存しておいたカギ束のコピー ~/backup-keys/my.keychain を選ぶ。
バックアップした時に使用していたパスワードを尋ねられる。
正しいパスワードを入力するとキーチェーンリストに「ログイン」「システム」と共に「my」 が追加されるはず。

キーチェーンリストに追加された"my"キーチェーンは ~/backup-keys 内に存在するカギを参照している。
よって、もし仮に ~/backup-keys を削除してしまうと実体を失ってしまう。

このような状態を解消するには、
# キーチェーンリスト"ログイン"の鍵がロックされていたらはずす。
"my"に追加された鍵、全てを"ログイン"キーチェーン内にドラッグ&ドロップする。もしくは「新規キーチェーン」を追加しておいてその中にドロップする。
キーチェーン"ログイン"に使用しているパスワードを尋ねられる。
"my"キーチェーン内の鍵を全てドラッグ&ドロップで移動したらメニューファイルーから「キーチェーン”my”を削除」をクリックする。
「参照のみ」「実体と参照」の選択肢から「実体と参照」をクリック。
~/backup-keys フォルダの中身は空になっているはず。

全て終了したらカギをかけキーチェーンアクセス.app を終了しライブラリ内を確認する。

$ ls -la ~/Library/Keychains/

アップルメニューからログインログアウトし再度ログインしてからキーチェーンアクセス.app を起動し正常にカギが存在していることを確認する。

# キーチェーンを使用している Application を使用してみるなどして、
# 問題ない事を確認し終えたら不要なバックアップを削除する。
$ srm -rf  ~/now-backup-keys/ ~/backup-keys/

OS X 10.7.1: dscl

最近...

yebo blog: Mac OS X Lionはパスワードクラックが簡単
http://yebo-blog.blogspot.com/2011/09/mac-os-x-lion.html

Change the Password in Mac OS X 10.7 Lion Without Knowing the Current Password
http://osxdaily.com/2011/09/19/change-password-mac-os-x-10-7-lion-without-knowing-current-password/

このような話題を目にしてげげと思っていたところ、

Quick Fix to Prevent dscl Unauthorized Password Changes in OS X Lion
http://osxdaily.com/2011/09/21/quick-fix-to-prevent-dscl-unauthorized-password-changes-in-os-x-lion/

His reasoning is that chmod 100 is too restrictive in that it changes the command to execute only, where as before the root user could read, write, and execute.

# ものすごい意訳。
# 彼の方法(chmod 100)ではとても制限があるので...。root user が読み書き読み書き実行できるよう。

2011/09/02

George Orwell

『新装版 オーウェル評論集2 水晶の精神』| ジョージ•オーウェル | 平凡社ライブラー | 978-4-582-76688-2
# 2009.11.10 初版第一版
# 新装版は全部で4冊の文庫。
本の扉にはこう記されている。

本書は、『水晶の精神ーオーウェル評論集2』(平凡社ライブラリー、1995年)を改題した新装版です。


この夏、福島原発事故を契機に益々顕著になった情報欠如について、これは一体どのような事なのかを探るべく、また、自身のある種の混乱を整頓する必要にもかられ、これら4冊に収められた評論をランダムに読み直してみた。一流のシェフの味、そんな本だった。

信じたくないくらい衝撃的なことは、下記の文章は1945 年に書かれたものなのに、なぜ今の日本について語っているのだろう?ってことだ。要は世界は60年以上前と変わっていないし歴史は繰り返されているし、悪い意味でのナショナリズムは生き続けているばかりか増殖している証拠なのだろうかね。

P.52 - P.53
客観的真実の無視は、世界の一部から遮断することによっていっそう助長される。そのために、現実に何が起こっているかを知ることがいよいよ困難になるからである。非常な重大事についてさえ疑いが持たれる場合がしばしば生じる。たとえば、この戦争から生じた死者の数にしても、百万単位、千万単位でもはっきりつかむことができない。いろんな惨事ー...を聞かされているうちに、一般の人にはその現実感が薄れてしまうのである。事実を確認する方法を持たず、それが実際起こったことかどうかも十分確信が持てず、それぞれの方面からそれぞれまったく違った解釈をいつも与えられる。...(略)ドイツがポーランドに作ったといわれるガス室というのは本当だったのだろうか?

...(略)おそらく真相は発見できるのだろうが、ほとんどの新聞でも事実が非常にゆがめられて報ぜられるのだから、一般読者が嘘を丸呑みにしたり、判断を下しえなかったとしても、しかたがない。実際はどうなのかだれも確信がもてないとなると、いよいよ気違いじみた信念にすがってゆくことになる。なに一つはっきり立証もされなければ否認もされないとなると、明々白々たる事実までがずうずうしく否定される。のみならず、ナショナリストはたえず権力や勝利や敗北や復讐を考えているくせに、しばしば、現実の世界で起こっていることにある程度無関心になる。

〜ナショナリズム覚え書き(1945年)〜より


新聞報道のありさまを嘆きつつ、一般読者が判断を下し得なかったとしてもいた仕方ない、と述べられた上で事実までが否定されている、とある。これでは、まるで今の日本そのものではないか...。

ところでオーウェルが「ナショナリズム」をどう捉えていたのか?について、
この記事を目にしてしまった方に誤解を与えないよう留意することは、引用させてもらった者の最低限の礼儀だと思うので、下記の引用も添える。

P.35-P.36
...現在ではほとんどあらゆる問題についての私たちの考えを左右するほど広まっていながら、まだ名前のついていないひとつの精神的習慣がある。それにもっとも近いものとして私は「ナショナリズム」という言葉を選んでみたが、しかしすぐおわかりになるように、私は必ずしも普通に使われている通りの意味でそれを使っているのではない。...
私が「ナショナリズム」と言う場合に真っ先に考えるものは、人間が昆虫と同じように分類できるものであり、何百万、何千万という人間の集団全体に自信をもって「善」とか「悪」とかのレッテルが貼れるものと思い込んでいる精神習慣である。*1
しかし第二にはーそしてこの方がずっと重要なのだがー自己をひとつの国家その他の単位と一体化して、それを善悪を超越したものと考え、その利益を推進すること以外の義務はいっさい認めないような習慣をさす。
ナショナリズムと愛国心とを混同してはならない。通常どちらも非常に漠然とした意味で使われているので、どんな定義を下しても必ずどこかから文句が出そうだが、しかし両者ははっきり区別しなければならない。というのは、そこには二つの異なった、むしろ正反対の概念が含まれているからである。私が「愛国心」と言う場合、自分では世界中でいちばんよいものだとは信じるが他人にまで押しつけようとは思わない。特定の地域と特定の生活様式に対する献身を意味する。愛国心は軍事的な意味でも文化的な意味でも本来防御的なものである。それに反して、ナショナリズムは権力欲と切り離すことができない。すべてのナショナリストの不断の目標は、より大きな勢力、より大きな威信を獲得すること、といってもそれは自己のためではなく、彼がそこに自己の存在を没入させることを誓った国なり何なりの単位のために獲得することである。


一応、引用しておいたが、今の私にとってオーウェルがナショナリズムをどう捉えていたかは、おおきな問題じゃない。(1年前だったらそうじゃなかったかもしれないが...) 第二次世界大戦終戦時イギリスに住んでいた作家が、新聞や映画を通して肌で感じたこと、その感触が、今の日本の新聞やテレビから受ける印象とまるっきり同じである、ってこと。この事実の方がずっとずっと重い。歴史は繰り返されている。

1945年、生活に追われこの戦争はなんなのかを知らされないまま、帰らない人を待ち続けていた人々と同じように、今、日本でも生活に追われてあの福島の事故で何がどうなったのか?今どうなっているのか?を知らされないまま、テレビや新聞を疑う事もしないで、インターネットで情報を得ようとしない(できない)人たちがいる。
彼らにとっての当たり前は、節電する事であり、物理学的には確かで当たり前だったはずの事が、不確かで曖昧で人によって見解が異なるので誰にもわかんない仕方のない事に成り下がることだ。
今も大気中への放射性物質の拡散は止まっていないし海へも大量に流れており、このような海洋への流出は人類初だというのに。

『この国の「問題点」』| 上杉 隆 | 大和書房 | 978-4-479-39211-8
の中で上杉氏は

P.24
ちなみに、東電主催によるマスコミ接待中国ツアーは氷山の一角に過ぎません。東電は毎週のように、記者クラブ幹部を飲食やゴルフでもてなしていたわけです。「原発は安全である」ということをテレビや新聞を使って国民にアピールするためです。また東電が加入している電気事業連合会は、記者クラブメディアの大型スポンサーになっています。その広告費の総額は毎年800億円以上を計上しています。しかも接待費はこれとは別です。

マスコミの人々が「なぜ?」をなぜ自主的に追求できない単純ルーチンに陥ったままなのか、そのからくりを指摘してくれている。
上杉氏のような人々がインターネットには大勢いることによって、かろうじて1945年のオーウェルの時代よりはましな環境にある、とはいえ、それでも、いざインターネットのない状態におかれたら、一瞬にして情報から遠ざかりまるで原発事故など発生していなかったかのように、放射性物質など飛んでいないのだぞと、集団催眠にかけられたごとく危機感を麻痺させられ、テレビは放射線測定されたかどうかもわからないような福島の野菜をみんなで食べよう!と煽る。
台風情報だけは鬼の首をとったごとく熱心なくせに、放射性物質拡散予想がリアルタイムで報じられたためしがない。

これが先進国だ、情報立国だと声高らかに自称してきた日本のありさま。血税で作られたスーパーコンピューターはなんの役にもたたないほど、それほどお粗末なものだったのだろうか?一体なんの為の誰の為のコンピューターだったのか?。お金をかけて整備されていたはずのスピーディも「より大きな威信を獲得すること」だけが目的のサクラだったのか?。

最後に強く印象に残った箇所も引用する。

P.84
常識的な法則が日常生活や若干の精密科学の場においては、通用するけれども、政治家や歴史家や社会学者からはかまわず無視されるという、分裂症的な思想体系を組み立てるだろう。

P.84
問題についての展望を失わないようにこの評論の冒頭で述べたことをくり返しておこう。すなわち、イギリスにおいての真実の、したがってまた思想の自由の直接の敵は、新聞や映画を牛耳っている者たちと官僚である。
しかし長い目でみれば、知識人たち自身の間における自由への希求の衰えがもっとも深刻な兆候である。

P.93
知的自由の破壊は、ジャーナリスト、社会問題評論家、歴史家、小説家、批評家、詩人から、この順序で活動力をそぐ。

P.98
いまのところ全体主義国家は、必要に迫られて科学者を寛大に扱っている。ナチス•ドイツにおいてさえ、ユダヤ人以外の科学者は比較的好遇(ママ)を受け、ドイツの科学界は全体としてヒトラーになんらの抵抗も示さなかったのである。
...(略)
金で買われた精神は毒された精神であるという事実を克服することはできない。
...(略)
いまのところわれわれにわかっているのは、想像力が、ある種の野生動物と同じように、捕われの状態では繁殖しないだろうということだけである。その事実を否定する作家やジャーナリストは...事実上自らの破滅を要求しているのである。

〜文学の禁圧(1946年)〜より


いずれは、自らの破滅を要求している。オーウェルの鋭いこの指摘が、
日本の新聞社(東京新聞などの心ある一部の報道人を除く)やテレビ局やあらゆる「マス」メディアに携わる人々、
また、立派な肩書きをお持ちになり自分がひとたび何かを発信すればすぐにでも多くの人々に事実が伝わるであろうと自覚のある方々に、
届くことを願う。
...と書きながら矢野顕子さんがカバーした「右手」を思い出す。
〜僕らの右手はどこまであげれば、誰かに届くかって〜
なんとも言いようのない気持ちにもなる。

# キーワード:
# ドイツzdf frontal21 福島原発事故
# などで Google 検索すると海外メディアが伝える福島原発事故に関する動画(日本語字幕付き)がヒットするはずです。

「シュピーゲル」誌(2011年5月23日号) 「原子力国家」日本語訳 | ジャーナリスト上杉隆 -公式ウェブサイト- takashi uesugi - official web site
http://uesugitakashi.com/?p=917

原発Tweets #Genpatsu 紙
http://paper.li/malilin/1302845303#!technology

[2011-09-03] 加筆修正。

2011/08/29

抽象化

“所有”という時代遅れ
http://d.hatena.ne.jp/Chikirin/20100622

人がうすうす意識している「何か」が詳らかにされていて大変面白かった。
漠然とした何かと何かを結びつけはっきりと言語化できる人や抽象化できる人をみると尊敬する。

そこにある言葉に心をよせることができなかったとしてもそんなささいな事などもあまり気にならない。
元来、混沌として漠然としたものが一定の視点から形づくられ名付けられ抽象化されて明快になるプロセスや結果は美しいものなのでしょう。

... プログラミングにも抽象化という概念があってこれと向き合うということは、一体なにが self であるべきか?という問いを丹念に考えることのようでして、ましてや隠蔽というのはさらに高度な技のようで、なぜその必要性があるのかは書いた人にははっきりとしているんだろうけれどもそれを知らない者からするとわかりずらいところがあり、が、そこにこそ隠蔽の意味があったりするわけで ...。

プログラミングの楽しさを味わうことは誰にでもわりとたやすいのだろうけれど、その美に手をのばそうとすることは全くたやすいことじゃない。少なくとも私にとってはとっても難しい。第一に美を求める以前に淡々と理解をすすめていくこと、それが難しい。これまでも何度も挫折してる。半年以上何も書かない読まない(プログラムを)こともある。
ところが不思議なものでふとある時に放り出してあった本を手にとってみると以前とは違う感触を覚えたりして、またぞろなにやら書いたり読んだりするものの、しばらくすると挫折する。これを繰り返している。

そんなわけで美を意識できるような世界からは100万光年ほど離れたところでうろうろしていて、急ぐ旅じゃなしと寄り道ばかりして、はてな界隈の優秀な方の文章に感心しきってお茶ばかり飲んでる今日このごろ。

これじゃーね。

# 2010-07-01

2011/08/28

Steve Jobs 氏辞任報道をみて

私が初めて自分の為にパソコンを買う時、何を買おうか半年以上悩んだ。
悩んだ末、Windows OS が抱える問題を自分専用のパソコンにまで持ち込むなんて「おかしいだろう」という結論に至った。

ある日曜日、Apple をこよなく愛する店員さんのいるお店でパワーマックとモニターを選び少しだけメモリーを増設してもらい、マックライフがスタートした。
たしかその年のうちに、iMac が登場し Apple 社のイメージは格段に変わった。
iMac の仕掛人がどのような人物なのか知るにつれ、パーソナルコンピュータそのものの新たな扉が開いたような明るい予感がもたらされ、程なくして Apple 社が危機を乗り越えつつあることを Wired かなにかが報じだした。驚き喜んだ私は猫にごちそうした。
# ただ、あとになって当時なぜ IE が入っていたのかを知った時はなんとも複雑な気持ちを覚えたものだった。

そして Mac OS X β が発売された。なにが画期的だったかといえばコマンドが使えるようになった事だった。最初のまったり感はバージョンアップで消えていったし Aqua はそれまでみたどんな GUI よりもきれいだった。

数年後、ある日ある時電車の中で、ふとある事に気がついてかなり仰天した。
白いイヤホンをしている人があっちにもこっちにも、ほらあそこにもいるではないか!なにごとが起きているのか?にわかに信じられなかった。そそくさと帰宅し調べてみるに、iPod が順調に売れているらしいと分かり時代が変わったことを突如として実感させられた。まさかこんな時代がくるなんて...。よもやテレビコマーシャルで Apple のロゴを目にする日がくるとは...。

今 Apple 製品を様々思い出しながら、かつ、こうして Apple のノートパソコンを使いながら Apple 社に Steve Jobs 氏に心から感謝している。ありがとう。

2011/07/31

「放射線の健康への影響」について

% pwd
/Library/Internet Plug-Ins
% l
(...略)
drw-r--r--   3 root  wheel   102  6 20 14:50 QuickTime Plugin.plugin
このようにしていたにも関わらず Lion のSafari 5.1 で QuitckTime 動画をみることができてしまったわけだが...今回に限っては予想に反し閲覧できてよかったと思ってしまった。もうね Safari plugin のことなんかふっとびました。

# 言い方を変えよう。Mac OS X Lion に Adobe Flash Player プラグイン入れるのやだな。とか思っている方も多いのではないでしょうか。(多くはないか?)
# でも、下記のような埋め込まれたQuickTime動画の場合は、Safari でプラグインオフにしていたとしても否応なく閲覧できちゃう。便利! ですね!?

<a href="http://savechild.net/archives/6135.html">http://savechild.net/archives/6135.html</a>
<blocquote>
2011年7月27日 (水) 衆議院厚生労働委員会「放射線の健康への影響」について
参考人説明より
児玉龍彦(参考人 東京大学先端科学技術研究センター教授 東京大学アイソトープ総合センター長)


以下, 個人メモ。

2011.3.15 AM9:00
東海村 10条通報
東京  50.5マイクロシーベルトパーアワー

2011.3.21
東京  0.2マイクロシーベルトパーアワー
枝野幹事長、問題ない。

福島原発の総量。
熱量換算では、広島原爆の29.6個分に相当するものが漏出。
ウラン換算では20個分のものが漏出していると換算される。

原爆による残存料 1年後
1,000分の1
原発からの放射線汚染物残存料
10分の1程度

補償問題と子供を守るための問題は分けてほしい。
緊急避難的除染と恒久的除染をわけろ

内部被曝はパーソナルな問題。
4つの提案。

『7万人の人が自宅を離れてさまよっている時に国会は一体何をやっているのでしょうか。』

2011/07/25

OS X 10.7 : IPv6 を切る

Mac OS X 10.7 では下記に書かれてある通りにIPv6 を切ることはできなくなってしまった。

Configuring IPv6 in Mac OS X v10.6.7 or later
http://support.apple.com/kb/HT4667

基本的にはできなくなったけどコマンドからはできた。

サービス名デバイス名一覧表示(一般ユーザ実行可能)

$ networksetup -listnetworkserviceorder


IPv6の現況
# <networkservice> には -listnetworkserviceorderで表示されたサービス名を使う。

$ networksetup -getinfo <networkservice>


指定したサービスのIPv6 を OFF にする # 管理者ユーザで実行

$ sudo networksetup -setv6off <networkservice>


確認

$ networksetup -getinfo <networkservice>
...
IPv6: Off


システム環境設定->ネットワークから IPv6の構成をみてみると「切る」になっていた。

もしかして、Apple は
『これからはじゃんじゃんIPv6を使いましょう。よって IPv6 「切る」を選択肢から削除しました』
なーんて意図を持ってるのかもしれない。
できればちゃんとした公式ドキュメントが欲しいところ...。

参照

$ networksetup --help | grep 6
networksetup -setv6off <networkservice>
networksetup -setv6automatic <networkservice>
networksetup -setv6manual <networkservice> <networkservice> <address> <prefixlength> <router>
networksetup -create6to4service <newnetworkservicename> 
networksetup -set6to4automatic <networkservice> 
networksetup -set6to4manual <networkservice> <relayaddress> 

2011/07/24

Mac OS X Lion Install

Mac OS X Lion クリーンインストール。
# App Store から Installer をダウンロードした『直後』でインストール始める『直前』に
# /Applications にダウンロードされた Installer をバックアップとらないといけない。ここはまる。ここ「はまる」の意。
# 詳細は googleへ。 記事末尾参照

PRMA クリアして option を押しながら USB フラッシュメモリーから起動。
ユーティリティ->ディスクユーティリティを使ってパーティションの1つを初期化しインストール。

システム環境とターミナル.appをざっと設定し 3 度目の起動 後。
# ソフトウェアアップデートはしていない。
# Wi-Fi (Lion から メニューバーのAirMac は Wi-Fi になった) に繋がることは確認。
# FileVault はオンにしていない。

# lsof
$ sudo lsof -i
$ sudo launchctl list | more

# grep netbios
$ sudo launchctl list | grep netbios

$ pwd
/System/Library/LaunchDaemons
$
$ grep -R netb  .
./com.apple.netbiosd.plist: <string>com.apple.netbiosd</string>
./com.apple.netbiosd.plist:   <string>/usr/sbin/netbiosd</string>
./com.apple.netbiosd.plist:        <string>_netbios</string>
./com.apple.netbiosd.plist:                <string>netbios-ns</string>
./com.apple.netbiosd.plist:                <string>netbios-dgm</string>
$
$ more com.apple.netbiosd.plist

# unload netbiosd
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.netbiosd.plist 
$ sudo lsof -i

# chmod netbiosd
$ which netbiosd
$ sudo chmod a-x /usr/sbin/netbiosd
$ ls -la /usr/sbin/netbiosd 
# chmod smbd
$ sudo chmod a-x /usr/sbin/smbd
$ ls -la /usr/sbin/smbd

# unload blued
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.blued.plist
# unload RemoteDesktop
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.RemoteDesktop.PrivilegeProxy.plist 


# halt
# shift key 押しながら起動。
# login as admin user

# moved RemoteManagement agent
$ sudo mv /System/Library/LaunchAgents/com.apple.RemoteDesktop.plist  ~/backup/com.apple.RemoteDesktop.plist
# moved RemoteManagement
$ sudo mv /System/Library/CoreServices/RemoteManagement/  ~/backup/RemoteManagement/

# moved IOBluetooth
$ cd /System/Library/Extensions
$ sudo mv IOBluetoothFamily.kext/  ~/backup/IOBluetoothFamily.kext/
$ sudo mv IOBluetoothHIDDriver.kext/  ~/backup/IOBluetoothHIDDriver.kext/
$ sudo mv AppleBluetoothMultitouch.kext ~/backup/AppleBluetoothMultitouch.kext

# important touch
$ sudo touch /System/Library/Extensions/

# chmod blued
$ which blued
$ sudo chmod a-x /usr/sbin/blued
$ ls -la /usr/sbin/blued 

# reboot
# login as admin user
# system log
$ syslog -w 200 | more


# system error log

$ syslog -k Level Nle error
Jul 24 10:38:59 localhost UserEventAgent[11] <Error>: CaptiveNetworkSupport:CaptiveSCRebuildCache:81 Failed to get service order
--- last message repeated 3 times ---
Jul 24 10:38:59 localhost airportd[21] <Error>: _processDLILEvent: en0 attached (down)
Jul 24 10:39:00 localhost UserEventAgent[11] <Error>: CaptiveNetworkSupport:CaptiveSCRebuildCache:81 Failed to get service order
--- last message repeated 1 time ---
Jul 24 10:39:00 localhost configd[14] <Error>: bootp_session_transmit: bpf_write(en0) failed: Network is down (50)
Jul 24 10:39:00 localhost configd[14] <Error>: DHCP en0: INIT-REBOOT transmit failed
Jul 24 10:39:01 osx mDNSResponder[47] <Error>: mDNSResponder mDNSResponder-320.5 (Jun 16 2011 17:42:39) starting OSXVers 11
Jul 24 10:39:02 osx mDNSResponder[47] <Error>: D2D_IPC: Loaded
Jul 24 10:39:02 osx mDNSResponder[47] <Error>: D2DInitialize succeeded
Jul 24 10:39:02 osx corestoraged[73] <Error>: .... status = "Locked"
Jul 24 10:39:02 osx systemkeychain[33] <Error>: done file: /var/run/systemkeychaincheck.done
Jul 24 10:39:02 osx loginwindow[49] <Error>: Login Window Application Started
Jul 24 10:39:03 osx mds[46] <Error>: (Normal) FMW: FMW 0 0
Jul 24 10:39:05 osx loginwindow[49] <Error>: Login Window Started Security Agent
Jul 24 10:39:05 osx WindowServer[99] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
Jul 24 10:39:05 osx loginwindow[49] <Error>: kCGErrorFailure: CGSPackagesGetWorkspaceType: couldn't get workspace type
Jul 24 10:39:05 osx loginwindow[49] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
Jul 24 10:39:06 osx SecurityAgent[118] <Error>: Echo enabled
Jul 24 10:39:08 osx SecurityAgent[118] <Error>: kCGErrorFailure: CGSPackagesGetWorkspaceType: couldn't get workspace type
Jul 24 10:39:08 osx SecurityAgent[118] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
Jul 24 10:39:18 osx SecurityAgent[118] <Error>: Login Window login proceeding
Jul 24 10:39:18 osx loginwindow[49] <Error>: Login Window - Returned from Security Agent
$_


# :) を検索
$ syslog -k Message Seq ':)'

[2011-07-25]

yebo blog: OS X Lionのディスクを作成する方法
http://yebo-blog.blogspot.com/2011/06/os-x-lion_18.html

http://osxdaily.com/2011/07/08/make-a-bootable-mac-os-x-10-7-lion-installer-from-a-usb-flash-drive/

Install Mac OS X Lion on More Than One Computer
http://osxdaily.com/2011/07/21/install-mac-os-x-lion-multiple-macs/

OS X Lion: About Lion Recovery
http://support.apple.com/kb/HT4718

OS X Lion: About FileVault 2
http://support.apple.com/kb/HT4790

Inside Mac OS X 10.7 Lion: New Wi-Fi Diagnostics tool
http://www.appleinsider.com/articles/11/03/15/inside_mac_os_x_10_7_lion_new_wifi_diagnostics_tool.html

2011/06/30

Blogger API Get Request

Blogger API に対し最初に発行すべき Get Request 先はどこか? についてわかったこと。

gdata-1.1.2 (ruby-lib)を使ってログインしてから

https://www.blogger.com/feeds/default/blogs

に対して Get リクエストすると基本的な情報が返ってきた。
その XML はこのような構成になっており

<xml root>
  <title/>
  <name/>
  <link/>
  <author/>
  <entry>
    <published/>
    <updated/>
    <category/>
    <link/>
  </entry>
</xml root>


こんなような def を用意すると...

def xinfo_link(str)
   # @xr = response.to_xml.root
   # str = "link" or "entry/link"
   @xr.get_elements("#{str}").each{|x|
    m = x.attributes['rel'].to_s.match(/\#(.*?)$/)
    m ? s = m[1] : s = x.attributes['rel']
    print "#{s} => ", x.attributes['href'], "\n"
  }
end

各種 URL を得ることができました。
下記のリンク先(末尾)の内容どおり実際にテンプレート用URLなども用意されておりちょっと驚きました。

また、これまで使用したラベル(category)も全て格納されておりました。
こんなような def を用意すると、

def category
  # @xr = response.to_xml.root
  @xr.get_elements('entry/category').each{|y| print "[", y.attributes['term'], "]\s"}
  print "\n"
end

category 一覧をみることができました。

# Category:
[Music] [get-item-amazon] [OSX] [SnowLeopard] [readbook] [AirMac] [Safari] [Amazon] [Apple] [importdata] [AirPort] [2010-amazon-api-jp] [News] [MacVim] [mdiary]     [mblogger] [Book] [AppleScript] [google] [gem] [essay] [Leopard] [vi] [Blogger] [Perl] [x] [Nuclear] [sleep] [launchd] [Design] [RubyCocoa] [vim] [iTunes] [git]     [RubyUtility] [Ruby] [daybook] [TV] [RubyOSA] [plutil] [macruby]



下記を参考にさせていただきました。

Blogger Developer Group | Google グループ

Blogger Developers Network: Using OACurl to explore Blogger’s API

I'd Rather Hack: Howto Change Blogger Settings with the GData API

2011/06/27

キュレーションの時代

キュレーションの時代 | 佐々木俊尚 | 筑摩書房 | 978-4-48-006591-9

わたしは twitter も facebook も使っていないが全体として非常に面白く興味をもって読んだ。ただ疑問が残るところがあった。

以下「情報の真贋」について述べられている箇所の引用。

p.204
情報の真贋なんてだれにもみきわめられない

p.205-p.206
考えてもみてください。
すでにある一次情報をもとにしているプログだったら、「その論理展開は変だ」「ロジックが間違ってる」という指摘はできます。たとえば「日本で自殺者が増えているのは、大企業が社員を使い捨てしているからだ」とかいうエントリーがあれば、自殺増加の原因についていろんな議論ができるでしょう。...
(略)...逆に、誰にも検証できないような一次情報が書かれている場合、それってどう判断すればよいのか。
(略)...だから、「真贋をみきわめる」という能力は、そもそもだれにも育まれようがないというのがごく当たり前の結論だったわけです。

p.207
つまり「事実の真贋をみきわめること」は難しいけれども、それにくらべれば「人の信頼度をみきわめること」の方ははるかに容易であるということなのです。

p.242
一次情報を発信することよりも、その情報が持つ意味、その情報が持つ可能性、その情報が持つ「あなただけにとっての価値」、そういうコンテキストを付与できる存在の方が重要性を増してきているということなのです。


下記感想。

第一に、p.242 ここで一次情報を発するよりも重要だとされているコンテキスト(つまりそれは二次情報、三次情報だと受け止めてもいいと思うが)それらが一次情報と「比較され」「重要」だと論じられている点。

コンテキストの重要性は決して一次情報を軽んじている訳では「ない」と理解しているつもりだが...、
例えば、ゴッホの絵よりもゴッホの絵を発掘した人の方が重要なのか?
例えば Google が提供する「サービス」と Google のフィルターを通して出現した「検索結果」を構成する情報、これらはどちらがより重要か?を論じた場合、にわとりが大事か卵が大事かに陥るのでは?情報とはなにかについて考えた方が精神衛生上よいのではないだろうか。

第二に、わたしたちは、例えば Google がなかった頃一次情報に辿りつくことができなかった永遠の漂流者だったんだろうか?
そんなことはないと思う。確かに Google のおかげで飛躍的に楽になったが、Google がない時代でも一次情報が存在している限りは、また探す気力がある限りはどうにか辿り着けていたんじゃないのかな。時間を要する時もあったけど...。

第三に、わたしたちは、果たして「情報の真贋」をみきわめられない存在なのだろうか?
「そもそもだれにも育まれようがない」と結論づけてしまう(p.206)のは過剰なのでは?と思う。
# この件について 『CODE 2 』でも語られている思うけれども私は読了できていない。
仮に佐々木氏の言うように、みきわめられないとして、じゃあその者は信頼できる人物(p.207)とやらをみきわめられるんだろうか?
実際、情報の真贋をみきわめるのは難しい時もある。実際、情報ハブ的人物の情報をありがたく享受することも多々ある、けれども真贋をみきわめる能力は育まれないと結論づけてしまうのはそれは何か重要なものを放棄することにならないだろうか?

あえてここでちょっと意地悪な仮定を試みてみよう。
もしも、わたしたち社会を構成する[全員]が氏の述べるような「情報の真贋をみきわめられない」存在であると仮定するならば、重大な矛盾を内包することになる。つまり、一次情報発信者自身も、佐々木氏が述べるキュレーター自身も、情報の真贋がみきわめられない存在だという矛盾に陥ることになってしまう...。

美の構成学

美の構成学 | 三井秀樹 | 中公新書 | 978-4-12-101296-8

第一章「構成学とデザイン」は
主にバウハウスの歴史について語られ
第二章「構成学と造形」
主に構成学の歴史
第三章「造形の秩序」
黄金比、シンメトリーについて
第四章「くらしの中の構成学」
暮らしの中にある美について
第5章「新しい構成学」では
これからの構成学についてテクノロジーとの関係が述べられている。

p.123
構成学は芸術やデザインの専門家のためにだけあるのではなく、日々の生活に活かしてこそ意味があり、私たち自身がそれぞれ美意識をもち快適な生活を送るための生活美学であると位置づけて欲しい。

p.151
このようにバウハウスで確立した造形の基礎概念を柱とする構成学は、モホリ•ナギからケペッシュの視覚言語論を経て、ネグロポンテのマン•マシン•インターフェイスという人間とコンピュータの情報理論を加えた、つまり視覚の世界から視覚+情報の情報認知科学の分野へ領域が拡がってきたといえる。


本を読み終えて。
なぜ、アスファルトの色はよりによってこんな灰色なんだろうと、子供の頃真剣に思い悩んでいたことを思い出した。できたてのアスファルトの道は灰色というより黒に近い。けれど時間がたつとともに少しづつ白い絵の具を重ねて塗ったように灰色に近づいていく。そして町中がこの灰色の道におおわれている。
私はこの状態につよい不満を感じていた。なぜもっときれいな色じゃないんだろう。どうせならもっと美しい色にしてくれていたら道を歩くのはもっと楽しいのに。あるいは真っ白だったらどれだけ気持ちいいだろう。ビルや工場もそうだ。なぜ灰色なんだろう。どうせならもっときれいな色にしてくれたら町が明るくなるのに。なぜ大人は灰色が好きなんだ?
子供の私がこの疑問を口に出して大人に聞いてみることはなかった。まともに相手にされることはないだろうと思ったから。
今、私はこの疑問に対する妥当な答えを持ち合わせていない。
なぜ日本の道路でアスファルトが使われ続けているのか歴史的経緯を調べることはできたとしても...
当時の大人たちもこんなこと聞かれたらさぞかし困ったことだろう...。

2011/06/25

networksetup createlocation

[2011-07-25]
追記:OS X Lion から試してみた。結論からいうと、このコマンドを使って「優先するネットワーク」を設定しないほうがいい。と私は思う。
キーチェインのシステムとログインそれぞれに鍵は登録されるものの、その鍵のアクセス制御欄を確認してみると「システム環境設定」が含まれていない。
つまり手動で設定した場合のアクセス制御とは異なる結果が生じてしまう。
また、10.7 でサポートされなくなったオプションもいくつかあるようだ。
----------

コマンドラインから AirMac(AirPort) 設定するメモが出てきた。
7月に OS X Lion になったら試してみようと思う。

下記 Mac OS X 10.6.1 時代の日記より。(2009-09-14)

# --
# help をちゃんと読んでみる
$ /usr/sbin/networksetup -help | more
# 管理者ユーザになる

### 新規ロケーション作成 - デフォルトサービスつき
# Usage: networksetup -createlocation <location name> [populate]

$ sudo networksetup -createlocation test-location populate 
# システム環境設定 - ネットワーク から手動で新規ロケーションを作成したのと同じ結果になる.
# populate をつけると利用可能なサービス(Ethrnet, Airport など)がすべて有効な状態で登録される。

### ロケーションの削除
# sudo networksetup -deletelocation <location name>
$ sudo networksetup -deletelocation test-location
# 成功すると、found it! と表示

### 新規ロケーション作成 - デフォルトサービスなし
$ sudo networksetup -createlocation test-location

### ロケーション一覧をみて新規ロケーションを確認する
$ networksetup -listlocations

### 新しく作ったロケーションへ切替
$ sudo networksetup -switchtolocation test-location

### サービスの作成 - アドレスは自動的に DHCP 参照になる。
# Usage: networksetup -createnetworkservice <newnetworkservicename> <hardwareport>
# <newnetworkservicename> - 自分で自由につける名前.ここでは air2 とした
# <hardwareport> - $ networksetup -listallhardwareports で確認できているもののなかから無線を選ぶ.ここでは AirPort
$ sudo networksetup -createnetworkservice air2 AirPort

# サービスを作成すると途端に AirMac 電源が入り周囲をスキャンしはじめるのですぐ電源を切っておく.
# networksetup -setairportpower <device name> <on off>
$ networksetup -setairportpower AirPort off
or
$ networksetup -setairportpower en0 off

### サービス作成されたことを確認
$ sudo networksetup -listnetworkserviceorder
# <newnetworkservicename> である air2 設定状況表示 - DHCP 参照になっている
$ networksetup -getinfo ai2

### 優先するネットワークの設定
% networksetup -help
# Usage: networksetup -setairportnetwork <network> <device name> [password]
# Set AirPort Network to <network> for <device name>.
# If a password is included, it gets stored in the keychain.

# <device name> -> $ networksetup -listallhardwareports で確認できているもののなかから無線を選ぶ
# <network> -> 参加したい無線LANネットワーク名。SSID ともいう。ここでは homearea 。
# <index> -> 0 を指定すると優先順位が1番になるようだ。末尾にしたい場合は任意の数字
# <security type> -> WEP とか WPA2 とか選ぶ
# [password] - パスワードを入力するとキーチェインの「システム」キーチェインに自動的に登録される。はず?

$ sudo networksetup -addpreferredwirelessnetworkatindex AirPort homearea 0 WPA2 password
# =>
# Security type is set to: WPA2 Personal
# Added homeerea to preferred networks list

# 優先するネットワークの設定のためのコマンドは動くもののキーチェインに key が正しく登録されないようだ。
# 結果、無線につながることはなかった。
# システム環境設定ーネットワークを開き手動で優先するネットワークを設定し無事つながった。
# --

2011/06/22

Changed Blogger's feed access

# Blogger API へアクセスする際は https 使用のこと。

Blogger Developers Network: Clarifying recent changes to Blogger’s feed access
Blogger Developers

Developer\'s Guide: Protocol - Blogger APIs - Google Code
Developers Guide

Blogger API - Google Code
Blogger API

# 新しい gdata
gdata-1.1.2.gem - gdata-ruby-util - Version 1.1.2 - Google Data APIs Ruby Utility Library - Google Project Hosting
gdata-ruby-util

Fukushima Nuclear

いずれにせよ、きっちり、まんべんなく、くまなく測定することで「ただちに、健康に影響はない」と公言した「根拠」を数字で示す義務を負ってしまっている人々が存在していることにかわりなかろう。
そもそも、この公言は「どこの誰の健康」なのかが全く不明だった。
福島県内の60歳以上高齢者の健康なのか生後3ヶ月の赤ちゃんの健康なのか猫の健康なのか、福島|宮城|山形|栃木|茨城|群馬|長野|千葉|埼玉|東京|神奈川 居住者「全員」の健康なのか? はたまた!福島原発で働く人々の健康なのか?
そもそも、この公言は「ただちにではない」「3年5年後将来的にはどうなの?」といった疑問が排除されていた。
排除されて3ヶ月、裏付けとなるはずの測定を実施せず、風下にある住民たちに正確な値(狭いエリアでの)を告知しないまま、晩発性健康被害拡大を確信犯的に放置するならば、それは非人道的で法律にも反した犯罪的行為なのではなかろうか。

全国に54基存在する原発周辺住民の不安感は拭えていなにも関わらず、政府は現在停止中の原発を運転再開するよう自治体に要請した。
今後、巨大地震が発生した場合、たとえ原子炉が運転停止していたとしても、そこに保管されている「莫大な量の」人工毒物、放射性廃棄物が減る訳じゃない。それらが今後、地震や津波をきっかけに大気中に放出されるかもしれないであろうことは、いまや幼稚園児でも予測可能でしょう。
この絶望感は言葉を奪う。
全国54基原発周辺700キロ圏内「全ての公立小学校」で、放射線量および放射性物質の測定が実施され、常時告知され、常時緊急時に備えられるようになっていなければ、安全対策が施されたなどと言えないのでは?つまり、ほぼ日本全国の全ての公立小学校や公共施設において測定が必要なのでは?。

もともと自然界に「存在していない」人工の放射性「物質」に対する免疫性を人間は持っていない。
免疫性がないってことは、つまり、それらは人間や動物にとって毒物。
人間がこの毒物を「体内に」取り込んでしまった場合、この毒性を除去する医療技術は「ほぼ」ない。
だからこそ、下記のような法律が存在し管理区域における飲食や睡眠が禁じられ長時間の滞在が禁止されていたはずなのだと思う。

読んでいただいてありがとう。

--参照
http://ja.wikipedia.org/wiki/放射線管理区域
http://ja.wikipedia.org/wiki/原子力災害対策特別措置法

IAEA報告書(2006)抄訳: チェルノブイリ原発事故による環境への影響とその修復 - ニューメリカルテクノロジーズ株式会社

4. TokyoHotspot - RadioisotopeWeb

Nucler Safety Research Group

PDF:2006.8.11 プルトニウムという放射能とその被曝の特徴(2006年7月15日)
http://www.rri.kyoto-u.ac.jp/NSRG/kouen/Pu-risk.pdf

PDF:低レベル被ばく影響に関する最近の報告より  今中 哲二
http://www.rri.kyoto-u.ac.jp/NSRG/seminar/No106/imanaka090306.pdf

小出裕章 (京大助教) 非公式まと

「さらに7万人が避難すべき」、仏IRSNが福島原発事故の評価を更新 国際ニュース : AFPBB News

Japan Admits 3 Nuclear Meltdowns, More Radiation Leaked into Sea; U.S. Nuclear Waste Poses Deadly Risks

原発の安全性、確認なら再稼働 首相が経産相支持:日本経済新聞

福井知事、原発再稼働に慎重 「安全対策要請に答えを」:日本経済新聞

泉田新潟県知事は「論評に値しない」と批判:日本経済新聞


# Weather Japan | Cloud spread Fukushima I power plant radiation
# http://www.weatheronline.co.uk/weather/news/fukushima?LANG=en&VAR=zamg

--書籍
E=mc2 | デイヴィッド・ボダニス | 早川書房 | 978-4-15-050371-0

MacVim in Dock

Google ChromeをAppleScriptで操作する - DiaryException
こちらを拝見し

nnoremap u2 <ESC>:<C-u>read !osascript -e 'tell application "Google Chrome" to get copy selection of active tab of window 1' ; pbpaste

を .vimrc に記入したところ、とっても便利になりました。(MacOS X の /usr/bin/vim ver 7.2.108)
# Chrome で閲覧している Webpage 中の文字列を選択し、vim 側で <ESC> u2 すると選択した文字列がコピペされる。

ところが Application MacVim version 7.3 (code.google.com/p/macvim/) で試したみたら文字化けされてペーストされてしまった。

$ man pbpaste

をみてもわからないので...

nnoremap u2  <ESC>:<C-u>read !osascript -e ' tell application "Google Chrome" to (get copy selection of active tab of window 1)' -e 'the clipboard'

/usr/bin/pbpaste の代わりに StandardEdition の the clipboard を使ってみたら文字化けがなおった。
/usr/bin/vim からもOK。と思ったのもつかのま、今度は改行がおかしくなった。改行が<0d><0d>になっている様子。

# 翌日。
どうにもお手上げなので、元の(pbpaste使用) nnoremap に戻して再度 MacVim から試すと、なんと!文字化けしないし改行もおかしくない。なんの問題もない。
この間、スリープはしたけどログアウトはしていない。
~/.MacOSX/environment.plist , ~/.inputrc は配置していない。.bashrc , .gvimrc は変更していないし .vimrc は件の nnoremap 行以外の行を触っていない。一体なんだったんだろう...。

# さらに後日。
MacVim 付属の mvim 使ってファイルを開いたり、Dock にある MacVim アイコンをクリックし ⌘+O でファイルを開いたり...両方使ってたかも?と気づいてハッとした。
Dock にある MacVim アイコンをクリックし MacVim 起動。 Chrome で文字列を選択しu2 すると、文字化けがみごと再現した。
ターミナルから mvim または /usr/bin/vim 使った場合。 No problem .

一般ユーザーも7月には自分のマシンにインストールできるようになる。価格は$29で、Mac App Storeからのみ購入できる。

Ferericchiはフルスクリーン・アプリ、マルチタッチ、Airdropなどの機能を紹介した。

引用元: Mac OS X Lionの新機能トップ10
http://jp.techcrunch.com/archives/20110606top-10-new-mac-ox-lion-desktop-features/

つまり、件のワンライナーは、ターミナルから mvim を通して MacVim を起動した場合と、/usr/bin/vim で使う場合においては全く問題なし。
ドックにおいたMacVimアイコンをクリックし起動した場合は問題あり、のようだ。
# ちなみに:set fileencoding? を実行すると「いずれの場合」も
# =>
# fileencoding=utf-8
# になっている。

また、ターミナルから

% open -a MacVim testest.txt

した場合も問題なかった。

# さらにさらに後日。
% cat testing.rb

#!/usr/bin/ruby
path = ARGV[0]
exit unless File.exist?(path)
system("/usr/bin/osascript -e 'Tell application \"MacVim\" to open (POSIX file \"#{path}\") as string' -e 'return'")

% ruby testing.rb 001.txt
によって開いたファイルで u2 してみると...問題なかった。

感想。
# Dock から MacVim 起動してはいけないのだろうか?

2011/03/09

hash.merge

Hash の merge

2つのハッシュに同じkey が存在した場合...
merge 元の値は nil じゃない。
merge 対象の値は nil。
これらを merge すると nil ではない merge 元の値は保持されたままになるのだっけ?
なーんて一瞬でも思ったのは大間違いだった。

% irb
>> a = {:a=>'a', :b=>'b'}
=> {:b=>"b", :a=>"a"}
>> b = {:a=>nil, :b=>'c'}
=> {:b=>"c", :a=>nil}
>> a.merge(b)
=> {:a=>nil, :b=>"c"}


nil であろうときっちり上書きされて nil になる。
上書きされたくなければ同じ key を持たない。...というかマージしない...?

2011/03/07

about xblogger

xblogger について。

ターミナル(/Applications/Utilities/Terminal.app/) から
gdata-ruby-util
を使って Blogger に記事を ポスト| ゲット | 削除 | アップデート する為のものです。

Mac OS X 上で作りました。使用する Ruby は 10.6 に搭載されているRuby 1.8.7 (/usr/bin/ruby) です。
# Ruby 1.9.2 用は mblogger

『はじめに』

xblogger は utf-8 で保存されたテキストファイルで 特定の書式に則ったものだけを対象にしています。ものすごく端折って言うと
--control, --category, --title, --content
が明記されたファイルに記事内容を記入する必要があります。サンプルは xblogger/draft.txt です。

--------------------
0) 準備ー設定
--------------------

gdata-ruby-util からgdata-ruby-util をダウンロードし
xblogger/xblogger-config と xblogger/bin/run.rb を編集してください。

% cd /pathto/download/
% gem unpack gdata-1.1.1.gem
%
% cd xblogger
% vim xblogger-config
% vim bin/run.rb
% chmod +x bin/run.rb


gem を使用したい場合は
% gem install gdata
などして gdata に含まれている README を参照の上 bin/run.rb を書き換えてください。私はこの方法を試していません。

自分の BlogID が不明な場合は下記を試してください。
最初に自分の Blogger Profile Page をみにいきます。その URL に含まれている数字が仮に XXXXX だったとします。

% cd xblogger/bin
% ruby get-blogid.rb XXXXX

を実行。

# xblogger-config の xname は任意の文字列を記入してくださいです。アンダーバーやハイフンは含めない方がよいかもしれません。

--------------------
1) 確認ー投稿前
--------------------

# --doc
# 記事を投稿する前にリクエスト対象となる XML Document を確認します。

サンプル xblogger/draft.txt を test.txt にコピーし編集し保存します。

% cd xblogger
% cp draft.txt test.txt
% vim test.txt
% cat test.txt
--control
yes
--category
test,blogger
--title
TestTitle
--content
test post.
second line.


test.txt を指定。

% cd xblogger/bin
% ./run.rb  --doc ../test.txt
CONTROL: yes
TITLE: TestTitle
CATEGORY: test,blogger
# =====
<entry xmlns='http://www.w3.org/2005/Atom'><title type='text'>TestTitle</title><content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'><p>test post.<br/>second line.</p></div></content><app:control xmlns:app='http://www.w3.org/2007/app'><app:draft>yes</app:draft></app:control><category term='test' scheme='http://www.blogger.com/atom/ns#'/><category term='blogger' scheme='http://www.blogger.com/atom/ns#'/></entry>


問題があればエラーになりますがエラーとして認識されない場合もあります。

--------------------
2) 投稿(ポスト)
--------------------

# --post
# Blogger へ記事を投稿します。

さきほどのtest.txt を指定し投稿します。

% ./run.rb  --post ../test.txt
CONTROL: yes
TITLE: TestTitle
CATEGORY: test,blogger
# =====
Post Entry
OK? [y/n]

と尋ねられます。n を選択すると何事もなく終了します。y を選択すると記事を投稿します。投稿に成功すると success message が返ってきます。

この時 ファイル test.txt の --control 値が yes になっていたら下書きの記事として投稿します。記事は公開されません。

--control
yes


yes 以外の文字列になっている場合は公開記事として投稿します。記事は公開されます。

--control
ok


記事文章内にリンクを張りたい時は、

--content
あいうえお <a href='http://github.com'>github.com</a> かきくけこ。

のように記入しておくとハイパーリンクになります。html そのままです。
引用の場合は <blockquote>改行+引用文+改行</blockquote>
コードの場合は <pre>改行+コード+改行</pre> で囲むようにしてください。

詳細は % cat xblogger/draft.txt で確認してください。

--------------------
3) 確認ー投稿後
--------------------

# 記事投稿に成功した場合結果ファイルを自動生成します。
# 下書であろうとなかろうと。

xblogger/bin/run.rb は 記事を投稿した場合に限って 指定したディレクトリに一意のファイルを生成します。
指定したディレクトリ とは、xblogger/xblogger-config に自分で入力した任意のパス。
例えば、~/data ディレクトリを指定していた場合、2011/01/01 に投稿した記事は

~/data/2011-01/2011-01-01T00-00-00-xxxxxx.txt

に保存されます。xxxxxx はBlogger が与えた一意の番号です。

生成されたファイルには、Blogger から受け取った情報が保存されています。具体的には edit_id, published date, updated date, url です。
ただし --control によって"下書き"として投稿した場合は --url はありません。

% cat ~/data/2011-01/2011-01-01T00-00-00-xxxxxx.txt
--edit_id
xxxxxxxxxx
--published
2011-01-01T00:00:00.001+09:00
--updated
2011-01-01T00:00:00.001+09:00
--date
2011/01/01 Sat AM 00:00:00
--control
ok
--category
test
--title
test
--url
http://midorex.blogspot.com/2011/01/test.html
--content
...略


--------------------
4) 削除
--------------------

# --del, --delete
# Blogger へ投稿した記事を削除します。
# 下書きとして投稿した記事を指定することもできます。

自動生成されたファイルの path を指定したい場合

% run.rb --delete path

edit_id を指定したい場合

% run.rb --del xxxxxxx


--------------------
5) アップデート
--------------------

# --update
# 既に投稿した記事内容を修正します。

自動生成されたファイルの中から修正したい投稿ファイルを編集しファイルを保存します。
保存したファイルのパスを指定します。

% run.rb --update ~/data/2011-01/2011-01-01T00-00-00-xxxxxx.txt

[y/n] を尋ねられます。y を選択するとアップデートを実行します。完了すると success message を表示します。

run.rb --update は指定したファイル内容を読み込みます。この時ファイルに保存されているはずの --edit_id が 空欄だったり 間違った番号(Blogger が管理していないような番号)であった場合 アップデートは成功しません。また、--title --category --content の内容は修正できますが ひとたび付与された --url などは変更できません。

余談ですが...
Blogger 記事の URL は
記事タイトルに日本語の文字列が含まれていた場合、その月内で何番目の記事かが考慮された URL となり、日本語が含まれていない場合はスペース等を別の文字に置換した文字列が URLに反映されているようです。

--------------------
6) 記事取得
--------------------

# --get
# 月内に投稿された全ての記事の タイトル, 日付, URL, Category, edit_id などを返します。

--get の後になにもなければ現在の年月を指定したことになります。

% ./run.rb --get


2011年2月を指定したい場合。month は 2桁で指定する必要があります。

% ./run.rb --get 2011-02


--------------------
7) HELP
--------------------

% ./run.rb --h

2011/02/23

Customized template.xml

Blogger template.xml (css) をカスタマイズした際の memo。

1)

.body-fauxcolumn-outer .cap-top {
  position: absolute;
  z-index: 1;
  /* Default */
  /* height: 400px;*/
  height: 5px;
  width: 100%;
  background: $(body.background);
  $(body.background.override)
}

最上部フレーム高さとか。

#navbar-iframe {
...

を追加しないで変更した場合どうなるかは試していない。

2)

.content-inner {
  /* Default */
  /* padding: $(content.padding) $(content.padding.horizontal); */
  padding: 0px 20px;
}

content は ブログタイトル, description, 全ての投稿を包括する大枠。

3)

.header-inner .Header .titlewrapper {
  /* Default */
  /* padding: 22px $(header.padding); */
  padding: 5px $(header.padding);
}

ブログタイトル余白。

4)

.main-inner {
  /* Default
  padding-top: $(main.padding.top);
  padding-bottom: $(main.padding.bottom);
  */
  padding-top: 0px;
  padding-bottom: $(main.padding.bottom);
}

main は全投稿記事を包括するパート。(記事フッタ、日付、タイトル含む)
上部余白を減らすとブログタイトルと記事全体の間が狭くなる。

5)

.post-header {
  margin: 0 0 1.5em;
  line-height: 1.6;
  font-size: 90%;
  /* add */
  border-bottom: 1px solid #6ea1bb;
}

投稿タイトルと投稿記事の間の余白。
padding-top: 20px; などの確認を要した。

6)
mobile のあと。
p, pre-code, blockquote 部分。

/*
----------------------------------------------- */

#navbar-iframe {
  height:0px;
  visibility:hidden;
  display:none
}

/* p tag
----------------------------------------------- */
.post-body p {
  margin: 0px;
  padding: 0px;
  font-size: 10.2pt;
  line-height: 1.6em;
  letter-spacing: 2px;
}

/* pre code
----------------------------------------------- */
.post-body pre {
  margin: 7px 0 7px 0px;
  padding: 7px 0 7px 7px;
  color: #6666B3;
  overflow: auto;
  border-bottom: 1px solid #eeeeee;
  border-left: 1px solid #eeeeee;
  background-color: #FCFFFD;
}
.post-body code {
  margin: 0em;
  padding: 0em;
  font-family: Menlo, Monaco, Monospace;
  font-size: 8.7pt;
  line-height: 1.7em;
  letter-spacing: 1.5px;
}

/* brockquote
----------------------------------------------- */
.post-body blockquote {
  margin: 5px 0px 5px 5px;
  padding: 0.8em 0.5em 0.5em 0.8em;
  color: #555;
  background-color: #FBFDFF;
  border-top: 1px solid #dddddd;
  border-right: 1px solid #dddddd;
  border-bottom: 1px solid #dddddd;
  border-left: 1px solid #dddddd;
}
.post-body blockquote p {
  margin: 0px;
  padding: 0px;
  font-family: Optima, Georgia, sans-serif;
  font-size: 9pt;
  line-height: 1.4em;
  letter-spacing: 2px;
  font-style: italic;
}


カラー参照
http://www.w3schools.com/css/css_colornames.asp

2011/02/16

UTF8-MAC and Encoding.list

OSXでのファイル名比較
OSXのファイル名について教えてもらったこと

を拝見しとっても興味深かったので私も試してみました。

% touch るびー
% mkdir が
% ls -F
test.rb       が/         るびー
% cat -n test.rb
  1 # coding: utf-8
  2
  3 Dir.entries('.').each do |d|
  4   next if d =~ /^\.|rb$/
  5   printf("name=%s, size=%d, encoding=%s\n", d, d.size, d.encoding)
  6   d = d.encode('utf-8', Encoding::UTF8_MAC)
  7   printf("name=%s, size=%d, encoding=%s\n", d, d.size, d.encoding)
  8 end

結果

% ruby192old -v test.rb
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
name=が, size=2, encoding=UTF-8
test.rb:6:in `block in <main>': uninitialized constant Encoding::UTF8_MAC (NameError)
  from test.rb:3:in `each'
  from test.rb:3:in `<main>'
%
% ruby192 -v test.rb
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.6.0]
name=が, size=2, encoding=UTF-8
name=が, size=1, encoding=UTF-8
name=るびー, size=4, encoding=UTF-8
name=るびー, size=3, encoding=UTF-8

1.9.2p136 で動きました。

1.9.2p0 で動かないことも気になるので Encoding.list をみてみます。

% ruby192old -ve "p Encoding.list"
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-darwin10.4.0]
[#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>]

あれ?なんか少ないような気が...。

% ruby192 -ve "p Encoding.list"
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.6.0]
[#<Encoding:ASCII-8BIT>, #<Encoding:UTF-8>, #<Encoding:US-ASCII>, #<Encoding:Big5>, #<Encoding:Big5-HKSCS>, #<Encoding:Big5-UAO>, #<Encoding:CP949>, 

...たくさんあるので以下省略


1.9.2p136 (2010-12-25 revision 30365) の Encoding.list は
1.9.2p0 (2010-08-18 revision 29036)
のそれとは全然違うようです...。

Encoding.list からutf だけをgrep

% cat -n test.rb
  1 # coding: utf-8
  2
  3 a = Encoding.list
  4 p a.map{|x| x.to_s}.grep(/utf/i)

# なぜ map して to_s しているかというと...配列に対して grep かけるにはその配列の要素が String クラスでないとうまくいかない。
# けれどEncoding.list が返した配列、を構成する要素のクラスは Encoding クラスなので String クラスに変える必要があるから。

結果

% ruby192old test.rb
["UTF-8"]

% ruby192 test.rb
["UTF-8", "UTF-16BE", "UTF-16LE", "UTF-32BE", "UTF-32LE", "UTF-7", "UTF8-MAC", "UTF8-DoCoMo", "UTF8-KDDI", "UTF8-SoftBank"]


ruby 1.9.2p136 (2010-12-25 revision 30365) にはいろんな種類の UTF があるけど、
UTF8-MAC は ruby 1.9.2p0 (2010-08-18 revision 29036) にはない?! 。

今度は encode の逆の指定。

  1 # coding: utf-8
  2
  3 str = "が"
  4 p str.size
  5 p str.encode('UTF8-MAC', 'utf-8').size

結果

% ruby192 test.rb
1
2

"が" をutf-8 から UTF8-MAC に変えてみるとsize 1から2に変化しました。

ちょっと rurema で再確認。

% rurema String#encode
...
self を指定したエンコーディングに変換した文字列を作成して返します。引数
を2つ与えた場合、第二引数は変換元のエンコーディングを意味します。さもな
くば self のエンコーディングが使われます
...


最後に iTunes Music Folder の中を検索テスト。
先ずは encode 変換しないでそのまま検索。

% cat -n test.rb
  1 # coding: utf-8
  2 # いかにもそれらしきもの(濁音などを含む)を選んでおく
  3 ary = ["東京スカパラダイスオーケストラ", "Yael Naim", "Yael Naïm"]
  4 dir = '/path/to/itunes/music/'
  5
  6 a = Dir.entries(dir)
  7 a.each{|x|
  8   p x if ary.index(x)
 11 }

結果

% ruby192 test.rb
"Yael Naim"

濁音を含む"東京スカパラダイスオーケストラ" と 特別な文字を含む "Yael Naïm" これら2つの folder は存在しているのにヒットしない。

下記に書き換え。

  6 a = Dir.entries(dir)
  7 a.each{|x|
  8   # p x if ary.index(x)
  9   u = x.encode('utf-8', 'UTF8-MAC')
 10   p x if ary.index(u)
 11 }

結果

% ruby192 -v test.rb
ruby 1.9.2p136 (2010-12-25 revision 30365) [x86_64-darwin10.6.0]
"Yael Naim"
"Yael Naïm"
"東京スカパラダイスオーケストラ"

期待どおりにヒットしました!

さらに ascii_only な文字を encode しなくてすむようにこんな風にしてみても

  6 a = Dir.entries(dir)
  7 a.each{|x|
  8   (x.ascii_only?) ? u = x : u = x.encode('utf-8', 'UTF8-MAC')
  9   p x if ary.index(u)
 10 }

同じ結果を得ることができましたー。

[関連記事]
<http://midorex.blogspot.com/2010/02/utf8-mac.html>
<http://midorex.blogspot.com/2010/02/utf8-mac-2.html>

vim noplugins

半年以上前だしメモを残さなかったので素晴らしく参考になったsiteが正確にはどこだったか分からなくなってしまった。

確かなことは...
kaoriya 様の日本語ヘルプドキュメントと
github.com に公開されていた達人の方々の .vimrc と
Google にて vim noplugins や vim shebang
とか検索した結果のいくつかのサイト

などを参考にさせていただきました。

" --------------------

/usr/bin/vim (OS X に最初から入ってるvim) を起動する際、自動的にロードされてしまう標準プラグインを "ロードしない" ようにした上で実現したいこと...大きくわけて2つ。

mission 1 :)

% vim aaa.rb で新しいファイルを作ると

#!/usr/bin/ruby
# coding: utf-8

この2行が予め記入され、入力するとインデントかかり、class とか def とかそういった文字に色がつく。

インデントかかるっていうのは例えば...

def a [return-key] if [return-key] end

とキーボードを打つと自動的に

  4 def a
  5   if
  6   end

になったり

begin [return-key] a [return-key] rescue

とキーボードをたたくと自動的に

  5 begin
  6   a
  7 rescue

こうなるっ。

mission 2 :)

% vim aaa.txt で開いたテキストファイルを編集する際
# を入力すると以降の文字列(改行まで)は青色になり
-- で始まる行はシアン色?に。
http や https で始まる行もシアンに。
行中にある <http://...> や <https://...> もシアンになるっ。


% cat test.vimrc

set nocompatible
set number
set backspace=indent,eol,start

" -------------------- Status
set laststatus=2
set statusline=%n\:%y%F\ \|%{(&fenc!=''?&fenc:&enc).'\|'.&ff.'\|'}%m%r%=<%-10(%3l,%02c%03V%)>

" -------------------- HighLight
highlight StatusLine term=NONE cterm=NONE ctermfg=gray ctermbg=darkcyan
highlight IncSearch ctermfg=gray ctermbg=cyan
highlight Search ctermfg=yellow ctermbg=darkcyan

highlight LineNr ctermfg=lightcyan ctermbg=NONE
highlight Visual term=NONE cterm=NONE ctermfg=NONE ctermbg=gray
highlight ModeMsg ctermfg=lightcyan ctermbg=NONE

" -------------------- tab
set shiftwidth=2
set tabstop=2
set expandtab
set ts=2 sw=2 expandtab

" -------------------- Plugins
" :help noloadplugins
set noloadplugins

" :help :filetype-off, :filetype-overview
filetype off

" :help :filetype-plugin-off
filetype plugin off

" :help :filetype-indent-on
filetype indent on

" /usr/share/vim/vim72/syntax/syntax.vim
syntax enable
" syntax on

" debag
" set verbose=9
autocmd! filetypedetect
" autocmd! BufWrite

if has("autocmd")
  "echo 'Hello!01'
  augroup MyVim
      autocmd!
      autocmd BufRead,BufNewFile *.txt           setlocal filetype=txt
      autocmd BufRead,BufNewFile *.rb            setlocal filetype=ruby
      autocmd BufRead,BufNewFile *.vimrc         setlocal filetype=vim
      "autocmd BufRead,BufNewFile *.vim           setlocal filetype=vim
      "autocmd BufRead,BufNewFile *.py            setlocal filetype=python
      "autocmd BufRead,BufNewFile *.sh            setlocal filetype=sh
      "autocmd BufRead,BufNewFile *.html          setlocal filetype=html
      autocmd FileType txt  syn match Comment /\#.*/
  augroup content
    autocmd!
    autocmd BufNewFile *.rb
          \ 0put = '#!/usr/bin/ruby'    |
          \ 1put = '# coding: utf-8'   |
    autocmd FileType txt
          \ :highlight MyGroup ctermfg=darkcyan ctermbg=NONE  |
          \ :match MyGroup /^\--.*\|<http.*>\|^http.*/        |
"    autocmd BufNewFile *.py
"        \ 0put = '#!/usr/bin/python'       |
"        \ 1put = '#-*- coding: utf-8 -*-'  |
"        \ $put = '' |
"        \ $put = '' |
  augroup END
endif

" -------------------- Last
" http://github.com/kana/config/
set secure  " must be written at the last.  see :help 'secure'.


テストファイルを指定して vim 起動

vim -i "NONE" -u test.vimrc aaa.rb


vim のコマンド結果

:filetype
# =>
filetype detection:ON  plugin:OFF  indent:ON

:autocmd
# =>
--- Auto-Commands ---
MyVim  BufNewFile
    *.txt     setlocal filetype=txt
    *.rb      setlocal filetype=ruby
    *.vimrc   setlocal filetype=vim
content  BufNewFile
    *.rb      0put = '#!/usr/bin/ruby'      | 1put = '# coding\: utf-8'     |
MyVim  BufRead
    *.txt     setlocal filetype=txt
    *.rb      setlocal filetype=ruby
    *.vimrc   setlocal filetype=vim
filetypeindent  FileType
    *         call s:LoadIndent()
syntaxset  FileType
    *         exe "set syntax=" . expand("<amatch>")
MyVim  FileType
    txt       syn match Comment /\#.*/
content  FileType
    txt       :highlight MyGroup ctermfg=darkcyan ctermbg=NONE  | :match MyGroup /^\--.*\|<http.*>\|^http.*/        |
Syntax
    *         call s:SynSet()
    cpp       if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)^I|| (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)   | runtime! syntax/doxygen
.vim | endif
    c         if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)^I|| (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)   | runtime! syntax/doxygen
.vim | endif
    idl       if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)^I|| (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)   | runtime! syntax/doxygen
.vim | endif
Press ENTER or type command to continue



# 現在の vim バージョン(OS X 10.6.6)
% vim --version
VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Aug 10 2010 22:09:22)
...

[memo]
python のインデントはこのままだとうまくいかない。

[2011-02-19]
'# coding\: utf-8'
になってた。
'# coding: utf-8'
に修正