ラベル daybook の投稿を表示しています。 すべての投稿を表示
ラベル daybook の投稿を表示しています。 すべての投稿を表示

2009/04/01

daybook_index

下記は
www.midore.nete/daybook/daybook_index.html で公開していたものです。

--

これまでここを訪れてくださった全ての皆様、ありがとうございました。
midore. 2009-04-11

About MidoreDayBook
Archives (2006.10 - 2009.02) Daybook Archives
履歴 rireki.html (import 予定)
派生 ReadBook

MidoreDayBook はわりと気軽に作り始めました。2006年のことです。それを可能にしたのは、第一に「たのしいRuby」の初版がありとても分かりやすく解説されていたこと、第二に Web で様々な情報を得られたおかげです。
その頃 Rubyist Magazine でとある企画の告知を目にしました。次回が最後の添削とあったのでダメモトで応募しました。ruby-list で質問する勇気もなければ IRC とかそういったものに参加する勇気もなかった(今もない)私にとっては相当なことでした。ふりかえってみて添削していただいてよかったと心から感謝しています。

MidoreDayBook のソースコードは良くないやり方のオンパレードですが、趣味プログラミングを愛する人に少しの苦笑いと微笑みをもたらすかもしれません。そうであればいいなと思っています。

出張版 正しいRubyコードの書き方講座―RubyistのRubyistによる、Rubyistとそうでない人のための
images-amazon

ISBN:9784839923204
Author:青木 峰郎
Publisher:毎日コミュニケーションズ
Price: ¥ 2,730
この本の著者で添削者であられる青木峰郎氏の文章の面白さは絶妙です。コラムも素晴らしい内容です。

追記
圧縮ファイル内に Mac 特有のゴミが内包されてしまい申し訳なかったと反省しています。
このようなゴミを削除してくれる Ruby ライブラリ
http://raa.ruby-lang.org/project/unmac

--imported_from
http://www.midore.net/daybook/daybook_index.html

+++ 追記 +++
2010-02-06

関連する記事
"daybook"ラベルがついた全ての記事

2009/02/03

load-wrap

新刊書「プログラミング言語 Ruby」をよみつつ..
p267. 7.6.2.1 ラップされたロード の項に
...指定されたファイルを「ラップ」し..とあった。さっそく試してみたいのだけど第二引数を指定する記述がみあたらないので

プログラミングRuby 第2版 ライブラリ編
を引っ張りだし調べたら P98

load (file_name, wrap=true)

とあった。

config の用意

module MineMod
  module MineModConfig

    class ConfHash
      def initialize(h)
        @h = h
      end
    end

    def self.conf
      config = ConfHash.new(
      :dir_text =>'data',
      :file_obj =>'mine.obj',
      :file_name =>'mine.txt'
      )
    end

  end
end

$MODMINE = MineMod::MineModConfig 


# グローバル変数にモジュールを格納

load-wrap-test.rb

$LOAD_PATH.delete(".")
$LOAD_PATH.unshift File.dirname(File.expand_path($PROGRAM_NAME))
load 'config', wrap=true
p $MODMINE#.conf


load-wrap-test.rb を実行すると

#<Module:0x1f37f4>::MineMod::MineModConfig


本に書かれてあるとおり load する ファイルの末尾にグローバル変数をおいておくと、そのグローバル変数にモジュールが収められているのがわかった。

# config の書き方は
Rubyist Magazine 出張版 正しいRubyコードの書き方講座
を参考にしてます。

--imported_from
http://www.midore.net/daybook/2009/02/1233591000.html

2009/01/31

Enumerator

新刊書「プログラミング言語 Ruby」をよみつつ..
p140.
Enumerator の練習。

e = "100"
# => "100"
e.class
# => String
e.methods

e = "100".each_char
# => <Enumerator:0x1f44c4>
e.class
# => Enumerator
e.methods

e.to_a
#["1", "0", "0"]
e.entries
#["1", "0", "0"]
e.grep("0")
#["0", "0"]
e.find("1"){|x| p x}
# => "1"
e.each.find{|x| x == "1"}
# => "1"
e.count
# => 3

a = "aaa"
b = a.codepoints
b.class
# => Enumerator
a.class
# => String
"a".codepoints.class
# => Enumerator

a.methods

a = "aaa".chars.entries
# => ["a", "a", "a"]
a = "abc".codepoints.entries
# => [97, 98, 99]
a = "aaa".bytes.to_a
# => [97, 97, 97]

"a" は String だけど .chars や、.each_char .codepoints などすると,とたんに Enumerator クラスのメソッドが使えるようになるのですね。

つくってみたメソッド...
# マルチバイトが含まれているか?

# coding: utf-8
def multibyte?(str)
  n = str.codepoints.entries.find{|m| m > 128}
end

str = "るびー"
puts "multiByte" if multibyte?(str)
puts "none multiByte" unless multibyte?(str)


ついでにかきなおしたやつ(readbook関連)
# 数字にカンマをあたえる
# Ruby Way にのっていたのより3倍はながい

def comma(str)
  str = str.to_s
  return nil if /[^0-9]/.match(str)
  s = str.size
  res, k = [], (s - 4) % 3
  ary = str.chars.to_a
  ary.each_index{|x|
    res << ary[x]
    (x == k and x + 1 < s) ? (k, res = k + 3, res << ",") : k
  }
  return "\u{A5} " + res.join('')
end

str = "111321"
comma(str)
# =>
# "¥ 111,321"


三項演算子はたのしい。

+++ 追記 +++
2009-02-01.

String クラスには ascii_only? があった。

"a".ascii_only?
=> true
"abcあ".ascii_only?
=>false

multibyte? メソッドは不要であった...

--imported_from
http://www.midore.net/daybook/2009/01/1233333360.html

2009/01/29

comma

# 2009-01-29.
comma.rb

def comma(str)
  str = str.to_s
  s, res = str.size, []
  k = (s - 4) % 3
  ary = str[0..str.size].each_char.map{|i| i}
  ary.each_index{|i|
  res << ary[i]
  (i == k and i + 1 < s) ? (k, res = k + 3, res << ",") : k
  }
  # Japanese EN => \u{A5} 
  return "\u{A5} " + res.join('')
end
str = "100"
p comma(str)
str = "1001"
p comma(str)
str = "10011"
p comma(str)
str = "100001"
p comma(str)
str = "1001100"
p comma(str)

% ./comma.rb
=>
"¥ 100"
"¥ 1,001"
"¥ 10,011"
"¥ 100,001"
"¥ 1,001,100"


memo
daybook/2008/12/1228746600.html

--imported_from
http://www.midore.net/daybook/2009/01/1233232901.html

2009/01/24

プログラミング言語 Ruby

購入予定。済み
ISBN: 9784873113944

--imported_from
http://www.midore.net/daybook/2009/01/1232805605.html

+++ 追記 +++
2010-02-06

関連する記事
"Ruby"ラベルがついた全ての記事

2008/05/17

xsltproc

# 下記の内容は
# http://www.midore.net/daybook/2008/05/1210953600.html
# で公開していた内容に
# 2010年現在の OS X Snow Leopard で試した結果を追加したものです。(追記参照 2010-02-07.)

-- 2008-05-17 当時

OS X 10.5.2 の xsltproc を利用してみる

% cat entry.rb

# OS X 10.5.2
# ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
# 2008-05-16

require "rexml/document"
require "rexml/element"
require 'time'

xmlpath = 'entry.xml'
txtpath = 'test.txt'
txtpath = ARGV[0] unless ARGV.empty?
check = FileTest.exist?(File.join(Dir.pwd , txtpath))
raise "error" unless check
raise "error" unless txtpath =~ /.txt$/

doc = REXML::Document.new(IO.read(xmlpath))
k,v = nil, nil

IO.readlines(txtpath).each{|line|
  if line =~ /^--/
    k = line.chomp.gsub("--",'')
    next
  else
    v = line.strip
  end

  case k
  when /^mytext$/
    e = doc.root.elements["entry/#{k}"]
    ep = e.add_element('p').add_text(v)
  when /^created$/
    t = Time.parse(v)
    t.iso8601.to_s
    doc.root.elements["meta/#{k}"].text = t.iso8601.to_s
    doc.root.elements["entry/#{k}"].text = Time.parse(v).strftime("%B %d, %Y")
    doc.root.elements["entry/id"].text = t.to_i.to_s
  else
    doc.root.elements["entry/#{k}"].text = v
  end
}
print doc


用意した test.txt

--title
TestTitle
--created
2008-05-10 21:00
--mytext
test sample text.
second line.
etc.


コマンドの実行

 % xsltproc -V
  Using libxml 20616, libxslt 10112 and libexslt 810
  xsltproc was compiled against libxml 20616, libxslt 10112 and libexslt 810
  libxslt 10112 was compiled against libxml 20616
  libexslt 810 was compiled against libxml 20616

 % cd Entry
 % mkdir html xml
 % /usr/bin/ruby entry.rb test.txt > xml/00.xml
 % xsltproc entry.xsl xml/00.xml > html/00.html


生成された xml/00.xml

<?xml version='1.0' encoding='UTF-8'?>
<docroot>

<entry>
  <title>TestTitle</title>
  <id>1210420800</id>
  <created>May 10, 2008</created>
  <mytext><p>test sample text.</p><p>second line.</p><p>etc.</p></mytext>
</entry>

<meta>
  <created>2008-05-10T21:00:00+09:00</created>
<css>
  <url>default.css</url>
  <title>default.css</title>
</css>
<author>
  <name>test</name>
</author>
</meta>

</docroot>


生成された html/00.html

  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transit
  ional.dtd">
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
    <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <meta name="author" content="test" />
      <meta name="date" content="2008-05-10T21:00:00+09:00" />
      <link rel="stylesheet" type="text/css" media="screen,tv" href="default.css" title="default.css" />
      <title>TestTitle</title>
    </head>
    <body>
      <h1>TestTitle<br /></h1>
      <h2>May 10, 2008<br /></h2>
      <br />
      <p>test sample text.</p>
      <p>second line.</p>
      <p>etc.</p>
      <hr />
    </body>
  </html>

% open html/00.html (OS X の場合 open コマンドがある。引数が .html ファイルだと、ブラウザが起動して 00.html を開いてくれる.)

entry.xml
http://www.midore.net/daybook/2008/05/hina-xml.html

entry.xsl
http://www.midore.net/daybook/2008/05/hina-xsl.html

00.html の <meta name="date" content="2008-05-10T21:00:00+09:00" /> 日付の形式は、
entry.xml 10行目: <meta><created/>,
entry.rb 35行目: doc.root.elements["meta/#{k}"].text = t.iso8601.to_s,
entry.xsl 81 行目: <xsl:attribute name="content"><xsl:value-of select="meta/created" /></xsl:attribute>
に依存。

--imported_from
http://www.midore.net/daybook/2008/05/1210953600.html

+++ 追記 +++

# 2010-02-06.
# midorex.blogspot.com へimport するにあたって entry.rb など使用するファイルを修正。
# 副題: 「OS X 10.6.2 の xsltproc を利用してみる」

0,現在の環境
Mac OS X 10.6.2
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.2.0]
$ xsltproc -V
=>
Using libxml 20703, libxslt 10124 and libexslt 813
xsltproc was compiled against libxml 20703, libxslt 10124 and libexslt 813
libxslt 10124 was compiled against libxml 20703
libexslt 813 was compiled against libxml 20703

1,準備
test.txt
entry.rb
entry.xml
entry.xsl

上記4枚のファイルを用意し(下記参照)

2,XML生成
$ chmod +x entry.rb
# xml ファイルの生成
$ ./entry.rb test.txt > 000.xml

$ cat -n 000.xml

     1	<?xml version='1.0' encoding='UTF-8'?>
     2	<docroot>
     3	<entry>
     4	 <title>TestTitle-2010</title>
     5	  <id>1265418000</id>
     6	  <created>February 06, 2010</created>
     7	  <mytext><p>test sample text.</p><p>second line.</p><p>etc.</p><p></p></mytext>
     8	</entry>
     9	<meta>
    10	  <created>2010-02-06T10:00:00+09:00</created>
    11	<css>
    12	  <url>default.css</url>
    13	  <title>default.css</title>
    14	</css>
    15	<author><name>test</name></author>
    16	</meta>
    17	</docroot>
    18


3,xsltproc コマンドでXHTML 生成
$ xsltproc entry.xsl 000.xml > 000.html
$ cat -n 000.html

     1	<?xml version="1.0" encoding="UTF-8"?>
     2	<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     3	<html xmlns="http://www.w3.org/1999/xhtml" xmlns:ns_1="http://www.w3.org/XML/1998/namespace" ns_1:lang="ja">
     4	  <head>
     5	    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
     6	    <meta name="author" content="test" />
     7	    <meta name="date" content="February 06, 2010" />
     8	    <link rel="stylesheet" type="text/css" media="screen,tv" href="default.css" title="default.css" />
     9	    <title>TestTitle-2010</title>
    10	  </head>
    11	  <body>
    12	    <h1>TestTitle-2010<br /></h1>
    13	    <h2>February 06, 2010<br /></h2>
    14	    <br />
    15	    <p>test sample text.</p>
    16	    <p>second line.</p>
    17	    <p>etc.</p>
    18	    <p></p>
    19	    <hr />
    20	  </body>
    21	</html>


4,まとめ
Mac OS X 10.6.2 のxsltproc コマンドで XHTML ファイルを作れると確認できました。これにて実験おわり。


[使用したファイル]
test.txt

     1	--title
     2	TestTitle-2010
     3	--created
     4	2010-02-06 10:00
     5	--mytext
     6	test sample text.
     7	second line.
     8	etc.


entry.rb

     1	#!/path/to/bin/ruby191
     2	# coding: utf-8
     3	
     4	require "rexml/document"
     5	require "rexml/element"
     6	require 'time'
     7	xmlpath = 'entry.xml'
     8	txtpath = 'test.txt'
     9	
    10	doc = REXML::Document.new(IO.read(xmlpath))
    11	k,v = nil, nil
    12	IO.readlines(txtpath).each{|line|
    13	  (/^--/.match(line)) ? (k = line.chomp.gsub("--",''); next) : v = line.strip # 2010-02-06
    14	  case k
    15	  when /^mytext$/
    16	    e = doc.root.elements["entry/#{k}"]
    17	    ep = e.add_element('p').add_text(v)
    18	  when /^created$/
    19	    t = Time.parse(v)
    20	    t.iso8601.to_s
    21	    doc.root.elements["meta/#{k}"].text = t.iso8601.to_s
    22	    doc.root.elements["entry/#{k}"].text = Time.parse(v).strftime("%B %d, %Y")
    23	    doc.root.elements["entry/id"].text = t.to_i.to_s
    24	  else
    25	    doc.root.elements["entry/#{k}"].text = v
    26	  end
    27	}
    28	print doc
    29


entry.xml

     1	<?xml version="1.0" encoding="utf-8"?>
     2	<docroot>
     3	<entry>
     4	 <title/>
     5	  <id/>
     6	  <created/>
     7	  <mytext/>
     8	</entry>
     9	<meta>
    10	  <created/>
    11	<css>
    12	  <url>default.css</url>
    13	  <title>default.css</title>
    14	</css>
    15	<author><name>test</name></author>
    16	</meta>
    17	</docroot>
    18


entry.xsl

     1	<?xml version="1.0" encoding="UTF-8" ?>
     2	<?xml-stylesheet rel="stylesheet" type="text/css" href="default.css" ?>
     3	<!-- 
     4	  xhtml 1.0
     5	  text/xml
     6	  utf-8
     7	-->
     8	<xsl:stylesheet version="1.0" 
     9	  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">
    10	
    11	<xsl:output 
    12	   method="xml" encoding="UTF-8" 
    13	   media-type="text/xml" 
    14	   doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    15	   doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
    16	   indent="yes" />
    17	
    18	<!-- ___ROOT___ -->
    19	<xsl:template match="docroot">
    20	<xsl:element name="html">
    21	  <xsl:attribute name="lang"
    22	            namespace="http://www.w3.org/XML/1998/namespace">ja</xsl:attribute>
    23	
    24	<!-- ___Header___ -->
    25	<xsl:call-template name="head" />
    26	
    27	<!-- ___ Body ___ -->
    28	<xsl:element name="body">
    29	<xsl:apply-templates select="entry" />
    30	
    31	</xsl:element><!-- end body -->
    32	</xsl:element><!-- end html -->
    33	</xsl:template>
    34	
    35	<!-- _____ Entry _____ -->
    36	<xsl:template match="entry" >
    37	
    38	<!-- Title -->
    39	<xsl:element name="h1">
    40		<xsl:value-of select="title" disable-output-escaping="no" /><xsl:element name="br" />
    41	</xsl:element>
    42	
    43	<!-- Date -->
    44	<xsl:element name="h2">
    45		<xsl:value-of select="created" disable-output-escaping="no" /><xsl:element name="br" />
    46	</xsl:element>
    47	
    48	<!-- Text -->
    49	<xsl:element name="br" />
    50	<xsl:apply-templates select="mytext" />
    51	<xsl:element name="hr" />
    52	</xsl:template>
    53	
    54	<!-- _____ Entry Templates_____ -->
    55	<xsl:template match="mytext/" >
    56	  <xsl:apply-templates />
    57	</xsl:template>
    58	
    59	<!--  Template p  -->
    60	<xsl:template match="mytext/p">
    61	  <xsl:element name="p"><xsl:value-of select="." disable-output-escaping="no"/></xsl:element>
    62	</xsl:template>
    63	
    64	<!-- _____ HEADER _____ -->
    65	<xsl:template name="head">
    66	  <xsl:element name="head">
    67	    <xsl:element name="meta">
    68	      <xsl:attribute name="http-equiv">content-type</xsl:attribute>
    69	      <xsl:attribute name="content">text/html; charset=UTF-8</xsl:attribute>
    70	    </xsl:element>
    71	
    72	   <!-- meta name="author" -->
    73	   <xsl:element name="meta">
    74	     <xsl:attribute name="name">author</xsl:attribute>
    75	     <xsl:attribute name="content"><xsl:value-of select="meta/author/name" /></xsl:attribute>
    76	   </xsl:element>
    77	
    78	    <!-- meta name="date" -->
    79	    <xsl:element name="meta">
    80	      <xsl:attribute name="name">date</xsl:attribute>
    81	      <xsl:attribute name="content"><xsl:value-of select="entry/created" /></xsl:attribute>
    82	    </xsl:element>
    83	
    84	    <!-- CSS -->
    85	    <xsl:element name="link">
    86	      <xsl:attribute name="rel">stylesheet</xsl:attribute>
    87	      <xsl:attribute name="type">text/css</xsl:attribute>
    88	      <xsl:attribute name="media">screen,tv</xsl:attribute>
    89	      <xsl:attribute name="href"><xsl:value-of select="meta/css/url" /></xsl:attribute>
    90	      <xsl:attribute name="title"><xsl:value-of select="meta/css/title" /></xsl:attribute>
    91	    </xsl:element>
    92	
    93	    <!-- Title -->
    94	    <xsl:element name="title">
    95	      <xsl:value-of select="entry/title" disable-output-escaping="no" /></xsl:element>
    96	  </xsl:element>
    97	</xsl:template>
    98	
    99	<!-- _____ END _____ -->
   100	</xsl:stylesheet>

2007/12/10

Leopard-Spotlight

スポットライトをオフる

http://www.macosxhints.com/article.php?story=20071102215912892

/System/Library/LaunchAgents/com.apple.Spotlight.plist
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist

とありました。

% sudo launchctl unload -w  /System/Library/LaunchAgents/com.apple.Spotlight.plist
% sudo launchctl unload -w  /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

とした。

さらに
http://www.macosxhints.com/article.php?story=2007103015513360

sudo chmod 0 /System/Library/CoreServices/Spotlight.app
To re-enable it later, do this:
sudo chmod 755 /System/Library/CoreServices/Spotlight.app


実行するとファインダーのメニューバーから虫眼鏡アイコンなくなりすっきりした。

+++

追記:スポットライトをオフると書いたとおり上記を実行するとスポットライト機能が停止します。言うまでもないことですがこの意味が分からない人は実行すべきではないでしょう。また同時に、find や grep コマンドを利用したことのない人や find って何?という人も上記のコマンドを実行すべきではないでしょう。
個人的には find (詳細は % man find ) を利用していてなんら不足はなく Spotlight を使用していなかった為 www.macosxhints.com にあった内容はとても有益でした。

ターミナルを起動したことがない人や普段コマンドを利用してない人が、スポットライト機能を抑制したい時に最初に行うべき操作は、システム環境設定->Spotlight->プライバシーを開いて抑制したいディレクトリやハードディスクを指定したり、Spotlight->検索結果を開いて検索結果に表示されるカテゴリを制御すること、かもしれません。もちろん公式な情報が知りたければ当然ながらアップルに電話してサポートをお願いするべきです。

ちなみに、なにかの間違いで上記のコマンドを実行してしまいスポットライト機能を停止させてしまった場合、再びもとの状態に戻すには
Applications->Utilities->Terminal.app を起動し下記のコマンドを実行しコンピュータを再起動。管理者権限を有するユーザで実行する必要があります。launchctl コマンドの詳細は % man launchctl とすると表示されます。

% sudo launchctl load -w  /System/Library/LaunchAgents/com.apple.Spotlight.plist
% sudo launchctl load -w  /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
% sudo chmod 755 /System/Library/CoreServices/Spotlight.app


% は単なる記号です。打ち込む必要はありません。

--imported_from
http://www.midore.net/daybook/2007/12/1197212405.html

+++ 追記 +++
2010-02-06

関連する記事
10.6.2 Spotlight OFF
"Leopard"ラベルがついた全ての記事

2007/12/02

音楽の力

DVDタイトル名そのままの充実した内容だった。

ISBN: B000NA7WTE

--imported_from
http://www.midore.net/daybook/2007/12/1196521205.html