骨のダイスを転がそう
2012-11-05
_ [ASP.NET] ファイルアップロード時のふるまいについて
ファイルアップロードの後、レスポンスを返すまではメモリ上にあると思っていたが、どうやら80KB を超えるとファイルにバッファリングされるらしい。
http://surferonwww.info/BlogEngine/post/2011/08/01/Temporary-store-of-uploaded-file.aspx
昔アプリを作っていたときに挙動をよくわかっていなかったんで、ともかく一時ファイルに保存していた。それを memorystream を使って書き直そうとしていたけど、こういうことなら、すべての処理で一律に一時ファイルへの保存をしても良いような気がしてきた。
2012-11-13
_ [ruby] 静的Webサイト生成ツールを探しているんだが……
middleman、nanoc と試しているが、テストが重かったり、ファイル名の制限がきつかったり、職場の運用(ソースに直接svnのリポジトリを使っていて、ブランチごとにテストサイトとして職場で回覧したい)にしっくりこない。
ある程度、自分で作るしかないのか?
# -*- encoding: utf-8 -*- $stdout.set_encoding("Windows-31J","UTF-8") # middleman の Frontmatter のパクリ class FrontMatter attr_reader :root require "yaml" require "erubis" YAML_ERRORS = [ Exception, ArgumentError ] if defined?(Psych) && defined?(Psych::SyntaxError) YAML_ERRORS << Psych::SyntaxError end def initialize(root) @root = root end # dataのキーに layout があったら入れ子の処理をしたい。 # Helper でも最低限、content_for は、ほしい。 def render(source) data, erb = parse_yaml_front_matter(source) tmpl = Erubis::Eruby.new(erb) tmpl.result(data) end # Parse YAML frontmatter out of a string # @param [String] content # @return [Array<Hash, String>] def parse_yaml_front_matter(content) yaml_regex = /\A(---\s*\n.*?\n?)^(---\s*$\n?)/m if content =~ yaml_regex content = content.sub(yaml_regex, "") begin data = YAML.load($1) rescue *YAML_ERRORS => e logger.error "YAML Exception: #{e.message}" return false end else return false end [data, content] rescue [{}, content] end end require "pp" fmt = FrontMatter.new(".") SRC=<<EOL --- title: こんにちは世界 --- <h1><%= title %></h1> <p>Hello! World</p> EOL puts fmt.render(SRC)
_ [ruby] なんか良く分からんが
これを再帰にすれば、入れ子の layout のついたtemplate を実現できるか。
module Helper def content_for "Good Bye World!!" end end require "erubis" class ETest def test(tmpl, data, layout_src=nil) layout = nil if layout_src layout = Erubis::Eruby.new(layout_src) layout.extend(Helper) end tmpl.extend(Helper) if layout layout.result({}){ test( tmpl, data) } else tmpl.result(data) end end end e = ETest.new t = Erubis::Eruby.new("<span class=\"sentence\"><%= content_for %></span>") puts e.test( t , { :sentence => "Hello !! World !!"}, "<div id=\"contents\"><%= yield %></div>")