ペヤングソースやきそば
スパイスとふりかけが入ったふくろがあるけど、キザキザのはいっている位置が違うことがある。いっきに二つともあけられる方向のほうがアタリだと思う。
スパイスとふりかけが入ったふくろがあるけど、キザキザのはいっている位置が違うことがある。いっきに二つともあけられる方向のほうがアタリだと思う。
こんなのあったんだ……
できてるところまでチェックイン。インデントの設定とかを完全に忘れてた。2スペースインデントらしいのでそっちの流儀にあわせた (スペースインデントすることよりも、全体で統一されていないことのほうがまずい) newcocoa と rb_nibtool.rb 相当のことはできるはず、だけれど、テンプレの Rakefile を書いていないのでうまみがすくない。
テストを tests/ においたほうが良いっぽい。とりあえず既存のテストを AutoRunner するだけにしとこう。
窓からはいってくる風の匂いが素敵すぎる
一番簡単なテンプレにだけとりあえず Rakefile を追加。内容はほとんど [Rubycocoa-devel 906], [Rubycocoa-devel 907] のコピペ。
引数なし rake でビルドからアプリケーション起動までやるようにしてみて、ためしに Hello World を Console.app に表示するやつを作ってみたけど、Interface Builder で繋ぐ部分だけ GUI であとは CUI でできるようになって結構気持ちいい。Interface Builder でアクションとか設定するより Ruby 定義から update するのが便利だなぁ。
rubycocoa create AppController.rb とかやるとクラス定義ふくんだ (awakeFromNib とかを定義ずみの) スケルトンつくれるともうちょい楽かなぁ。
そういえば書いてない。commit log とは別に書かないといけないのかな。svn log すると ChangeLog 形式のログがでてくるけれど、これはコピペで svn と ChangeLog どっちも書いてるのかなぁ。あとあとさかのぼって書いてもいいのか謎
コピぺらしい。なるほど
学校がつまらないと、書きたいことが多くなる。良いことだろうか。良いことだということにしよう。つまらないことも役に立つことがあるんだろう。それでも、できるだけ、つまらないことはやらないで生きなければならない。
今だに、
表現を考えるのを忘れてたようだ。だめだめだなぁ。
綺麗なものを忘れている気がする。心を穏やかに、日々の善行を考えよう。日々の善行って、意識して実践したことないやそういえば
論理学の講義がいまだに記号の説明だったので寝てしまったのだけれど、途中でおきると、小さい音でらきすたのアレが聞こえてきて、後ろのヲタっぽい人たちがニヤニヤしているのを見た。PC の音量を確認したけどミュートになっていたし、ヘッドフォンも頭につけない限りミュートになっているので俺じゃないはずだ。
とかやってまた寝たりしたのだけれど、どうやら講義がおわってみると、それは夢だったらしかった。その講義でおれはそもそもPCを開いていなかったし、後ろの席にすわっていた人たちは別にヲタじゃなかった。さらに、おきる直前に黒板を見たときは、小さな文字でいろいろごちゃごちゃと書いていたのに、起きたあとに黒板をみてみると、文字が大きく、みやすかった。そういえばあの先生はわりと読みやすくかくよなぁと思ったので、起きる直前に見た黒板も夢だったらしい。夢と現実が混ざりすぎて混乱した。
ib_action :buttonPressed { |sender| ... }とか書けたんだ……
レポートを書いているときは、なんかすごく嫌なことを考えていると思う。「まあこんなものでいいだろう」みたいな。
ウェブサイト作成とかだと「こんなもの」の基準が少し違う。どうしてもやらないといけないことが課題と別にある。
レポートを書いて、それが既存の知識とか応用にリンクしない。だからつまらない。
ユングのアレみたいな考えかただと、自分たちは既に繋がりあっているはずだけれど、そういう無意識方向に掘り下げていくのではなく、自分たちが作りだしたもの(例えばインターネット)を使って高レベルに繋がろうとしているのは、なんだか無駄な気がして面白い。
ファイルの追加を適当にやってみたけどこれでいいのか謎すぎる。オブジェクトに id がついているけど、Xcode がどうやってあれを求めているのかわからないので SHA1 ハッシュとって最初の24文字を使うようにしてみたけど、なんだかなぁ。どっかにフォーマットのリファレンスがあるかなぁと思ってぐぐっていたけれど、ないっぽい。
require "digest/sha1"
require "osx/cocoa"
include OSX
class XcodeProject
class Group
def initialize(proj, id)
@proj, @dic = proj, proj[id]
end
def [](key)
@dic[key]
end
def inspect
"#<Group #{self["name"]}>"
end
def add_file(type, path, tree)
id = Digest::SHA1.hexdigest(path)[0, 24].upcase
@proj.plist["objects"][id] = NSDictionary.alloc.initWithDictionary({
"isa" => "PBXFileReference",
"lastKnownFileType" => type,
"path" => path,
"sourceTree" => tree,
})
@dic["children"] = NSArray.alloc.initWithArray(@dic["children"].to_a << id)
end
end
attr_accessor :objects
attr_reader :rootObject, :plist
def initialize(bundle_path)
@plist_path = "#{bundle_path}/project.pbxproj"
@plist = NSPropertyListSerialization.objc_send(
:propertyListFromData, NSData.alloc.initWithContentsOfFile(@plist_path),
:mutabilityOption, NSPropertyListMutableContainersAndLeaves,
:format, nil,
:errorDescription, nil
)
@objects = @plist["objects"]
@rootObject = self[@plist["rootObject"]]
end
def [](obj_id)
@objects[obj_id.to_s]
end
def groups
mainGroup = self[@rootObject["mainGroup"]]
Hash[*mainGroup["children"].map {|i|
g = Group.new(self, i)
[g["name"].to_s, g]
}.select {|i| i[1]["isa"].to_s == "PBXGroup"}.flatten]
end
def save
File.open(@plist_path, "w") do |f|
f.puts @plist
end
end
end
proj = XcodeProject.new("testcocoa.xcodeproj")
p proj.groups
proj.groups["Classes"].add_file("text.script.ruby", "path.rb", "<group>")
proj.save
コード自体を書くより、どうコード書くかで悩んでる時間のほうが圧倒的に多い……
がんがん書きたいのになぁ。どうしたらいいんだろう。経験するしかないのかなぁ (デザパタはこういうのを埋めるのにいい感じだけど、どのデザパタ使うかでさらに悩む)
拡張性とか、他の要素とかを頭悪いくせに最初から考えるのがダメなんだろうけど、むずい。
erb 変換するより既存のテンプレートつかえよとかいうアレなので Xcode のテンプレ変換を Ruby で書きなおししようと思っていくらか書いてみたけれど、テンプレートのリネーム規則が wkwkrn 状態でこまる……あと IDENTIFIER の変換規則がわからないのでスペースをアンスコにするだけとかアレなことを
そういえば Xcode を AppleScript から操作できるみたいで、これでファイルの追加とかもできそうな予感だけれど、どうなんだろう…… AppleScript が書けない……
rbosa で書けそうな感じではあったけれど、どうやってファイルを追加したらいいかわからなかった。むずい。plist 読みかきしたほうがはやいなぁ (コーディングも、実行速度も)
plist 直は互換性で将来まずそうだけど……