Hatena::Groupruby

RubyCocoaでなにかつくる

2008-05-06

日記アプリ途中経過2

| 00:35

f:id:asagi29:20080506235334p:image

日記アプリ途中経過 - RubyCocoaでなにかつくる - はてな?Rubyグループの続きです。

リッチテキストエディタぽくなりました。

ソースコードは以下の通りです。

require 'osx/cocoa'
include OSX

class Murmurous < NSObject
	ib_outlet :window, :calendar, :textField
	
  def initialize
    #出力先ホームディレクトリ
    @homeDir = File.expand_path("~" + OSX.NSUserName.to_s) + "/murmurous/"
  end
	
  #初回起動時の挙動
  def awakeFromNib
    today = NSDate.date.description

    #カレンダーに現在日付をセット
    @calendar.setDateValue(NSDate.dateWithString(today))

    #今日付のファイルがあったら、その内容を@textField(NSTextView)にセット
    todayFile = getFilePath(today)

    if File.exist?(todayFile) then
      @textField.readRTFDFromFile(todayFile)
    end
  end
	
  #カレンダーで日付選択時のファイル読み込み
  ib_action :read do |sender|
    selectedDateFile = getFilePath(sender.dateValue.description)

    #該当日付のファイルがあったら、その内容をセット
    if File.exist?(selectedDateFile) then
      @textField.readRTFDFromFile(selectedDateFile)
    else
      #空の文字列をセット
      @textField.setString(NSString.init.string)
    end
  end

  #保存
  ib_action :save do |sender|
    editedDateFile = getFilePath(@calendar.dateValue.description)
    
    #入力内容が空っぽでない時
    unless @textField.string == NSString.init.string
      #出力先ファイルの存在確認
      unless File.exist?(editedDateFile) then
        #出力先ホームディレクトリ作成
        #TODO サブディレクトリまで一気に作成できるはずなので要検討
        unless File.exist?(@homeDir) then
          Dir.mkdir(@homeDir)
        end

        #出力先西暦ディレクトリ作成
        unless File.exist?(File.dirname(editedDateFile)) then
          Dir.mkdir(File.dirname(editedDateFile))
        end
      end

      #出力
      @textField.
      RTFFromRange(NSMakeRange(0, @textField.string.length)).
      writeToFile_atomically(editedDateFile, true)
    else
      #出力先ファイルの存在確認
      if File.exist?(editedDateFile) then
        File.delete(editedDateFile)
      end
    end
  end
end

#日付文字列から出力先ファイルパスを取得
#dateString(NSDate.description)のフォーマット -> YYYY-MM-DD HH:MM:SS ±HHMM
def getFilePath(dateString)
  @homeDir + dateString.to_s[0..3] + "/" + dateString.to_s[0..9] + ".rtf"
end

参考元

2008-05-05

日記アプリ途中経過

| 22:18

f:id:asagi29:20080505221051p:image

ただいま、ちょっとした日記アプリ『Murmurous』を作成中です。

現在実装済みの機能としては

  • カレンダー選択→選択日付の記事を表示
  • 記事編集、保存(出力先ファイルは/User/ログインユーザ名/murmurous/YYYY/YYYY-MM-DD.rtf)

ソースコードは以下の通りです。

require 'osx/cocoa'
require 'kconv'
include OSX

class Murmurous < NSObject

	ib_outlet :window, :calendar, :textField
	
	def initialize
	
		#出力先ホームディレクトリ
		@homeDir = File.expand_path("~" + OSX.NSUserName.to_s) + "/murmurous/"
	
	end
	
	#初回起動時の挙動
	def awakeFromNib
	
		today = NSDate.date.description
		
		#カレンダーに現在日付をセット
		@calendar.setDateValue(NSDate.dateWithString(today))
		
		#今日付のファイルがあったら、その内容を@textField(NSTextView)にセット
		todayFile = getFilePath(today)

		if File.exist?(todayFile) then
			@textField.readRTFDFromFile(todayFile)
		end

	end
	
	#カレンダーで日付選択時のファイル読み込み
	ib_action :read do |sender|
			
		selectedDateFile = getFilePath(sender.dateValue.description)
		
		#該当日付のファイルがあったら、その内容をセット
		if File.exist?(selectedDateFile) then
			@textField.readRTFDFromFile(selectedDateFile)
		else
			#空の文字列をセット
			@textField.setString(NSString.init.string)
		end

	end

	#保存
	ib_action :save do |sender|
	
		#入力内容が空っぽでない時
		if @textField.string != NSString.init.string
		
			editedDateFile = getFilePath(@calendar.dateValue.description)

			#出力先ファイルの存在確認
			unless File.exist?(editedDateFile) then

				#出力先ホームディレクトリ作成(TODO サブディレクトリまで一気に作成できるはずなので要検討)
				unless File.exist?(@homeDir) then
					Dir::mkdir(@homeDir)
				end

				#出力先西暦ディレクトリ作成
				Dir::mkdir(File::dirname(editedDateFile))

			end
			
			#出力
			@textField.RTFFromRange(NSMakeRange(0, @textField.string.length)).writeToFile_atomically(editedDateFile, true)
		
		end

	end
	
	#日付文字列から出力先ファイルパスを取得
	def getFilePath(dateString)
		#dateString(NSDate.description)のフォーマット -> YYYY-MM-DD HH:MM:SS ±HHMM
		return @homeDir + dateString.to_s[0..3] + "/" + dateString.to_s[0..9] + ".rtf"
	end

end

今後、機能を少しずつ追加してゆく予定です。

GimenaGimena2013/11/10 19:42This is way more helpful than anitnyhg else I've looked at.

YesaYesa2013/11/12 12:03Your post has <a href="http://elvfgbeuqsa.com">lietfd</a> the level of debate

LucieLucie2013/11/13 20:49I went to tons of links before this, what was I thniknig? http://zqyxnpdfl.com [url=http://kqkvaaluyn.com]kqkvaaluyn[/url] [link=http://rvqfobzlrq.com]rvqfobzlrq[/link]

MaricarmenMaricarmen2013/11/15 16:37A few years ago I'd have to pay someone for this <a href="http://ogvjxkz.com">intmroafion.</a>

LuanLuan2013/11/17 14:09This info is the cat's pajmaas! http://mcvotcfi.com [url=http://wjgmkvpyerd.com]wjgmkvpyerd[/url] [link=http://hplayhs.com]hplayhs[/link]

2008-05-04

「RBCocoaInstallRubyThreadSchedulerHooks: couldn't find autoreleasePool ivar」

| 00:51

Leopardにしてからというもの、Xcodeで「ビルドと実行」のたびにデバッガコンソール上に

RBCocoaInstallRubyThreadSchedulerHooks: couldn't find autoreleasePool ivar

というエラーメッセージが表示されていました。

気になりつつも他の調べものをしている中で、偶然「/Library/Frameworks/RubyCocoa.frameworkが/System/Library/Frameworks/RubyCocoa.frameworkと競合する」との旨の記述を見つけました。*1

そこで、いったん/Library/Frameworks/RubyCocoa.frameworkを別の場所に移してから、「ビルドと実行」をすると、該当エラーメッセージが表示されなくなりました。

追記:/Library/〜のRubyCocoa.frameworkを移動させた後、Xcode上「グループとファイル」ペインのFrameworksカテゴリ内にあるRubyCocoa.frameworkが参照先を見失って赤文字になります。赤文字になったRubyCocoa.framework上でコンテキストメニューを表示させ、「情報を見る」で参照先を/System/〜のRubyCocoa.frameworkにすると通常表示になりました。

どうも、Leopard以前にインストールしていたRubyやRubyCocoaが場合によっては悪さをしそうな予感がします…。

独自にインストールしたものと、標準装備のものとを整理しておく必要がありそうです。

ちなみに「autoreleasePool」とは、CocoaアプリケーションにおけるGCの役割を果たしているようです。

参考元

こたつつきみかん » NSAutoreleasePool

*1:参考元を見失ってしまいました…。見つけ次第、追記します。見つけました。→404 Error - Not Found

MagnoMagno2012/08/12 20:50This piece was cogent, well-wrteitn, and pithy.

vphqhegdvphqhegd2012/08/13 13:34O3wCId <a href="http://yodwshhphgrw.com/">yodwshhphgrw</a>

opanlaupqopanlaupq2012/08/14 02:45nU3Cqs , [url=http://hmgerdxnnivg.com/]hmgerdxnnivg[/url], [link=http://kwhtbtxwqdip.com/]kwhtbtxwqdip[/link], http://bfpfrgnwzxgt.com/

pjgtvunnypjgtvunny2012/08/16 01:50PMH29s , [url=http://vajbihsbkmcs.com/]vajbihsbkmcs[/url], [link=http://tvbghvzmjgci.com/]tvbghvzmjgci[/link], http://bdxuwwwelwaq.com/

2008-01-12

MacPortsでインストールしたRubyを使う

| 20:43

ビルドの必要あり。

* MacPorts で入れた /opt/local/bin/ruby を使う場合

cd rubycocoa

/opt/local/bin/ruby install.rb config --prefix=/opt/local

/opt/local/bin/ruby install.rb setup

sudo /opt/local/bin/ruby install.rb install

Build - RubyCocoa wiki

参考元

Build - RubyCocoa wiki

ruby-1.8.6-p110 で bridgesupport の生成に失敗する

| 20:43

RubyのREXMLを使用しようとするとエラーが出て使用できなかった。

現在は対処済みの様子。

今後またパッチを適用せざるをえなくなった時のために手順をメモ。

1. Error: Not Found ? MacPorts でパッチDL

2.Terminal起動。

cd /opt/local/var/macports/sources/rsync.macports.org/release/ports/ruby/
patch -p0 < パッチのパス

3.Ruby再インストール

4.RubyCocoaをビルド

参考元

続・ruby-1.8.6-p110 で bridgesupport の生成に失敗する(解決編): きりかノート

EnkhbatEnkhbat2013/11/12 21:07It's wonerdful to have you on our side, haha!

VikasVikas2013/11/14 21:19IMHO you've got the right anesrw! http://gygccemykvx.com [url=http://vwzwsi.com]vwzwsi[/url] [link=http://nlauhzyh.com]nlauhzyh[/link]

JuliaJulia2013/11/16 12:39People <a href="http://cwtawejsauk.com">norllamy</a> pay me for this and you are giving it away!

MiaaMiaa2013/11/18 18:55Finding this post has anwresed my prayers http://chkigqiexp.com [url=http://ghkiup.com]ghkiup[/url] [link=http://ainuuhuhkyu.com]ainuuhuhkyu[/link]

2007-12-01

今日したこと

| 23:39

  1. RubyCocoaインストール
  2. サンプルをもとに計算機を作成(かけ算/わり算の機能を追加)
  3. Rubyグループ加入

気になった点

  • 参考にしたページのInterfaceBuilderのバージョンが手元のものと違ったため、リファレンス通りにさくさく作成というわけには行かなかった
    • 具体的にはObjectの追加。メインウインドウのClassesタブからNSObjectを選択して、メニューのClasses>Subclass NSObjectとやってアウトレットとアクションを追加しなければならなかった。
    • Leopardほしいほしい

今後の予定

  • Rubyの基本的な文法をまとめる
    • Javaとの対応表を作る

参考URL

mr-80bmr-80b2008/01/12 22:35こんにちは。
ここはのんびりした雰囲気です。
よろしくお願いします。

asagi29asagi292008/01/12 23:50コメントありがとうございます。
こちらこそ、よろしくお願いいたします。