骨のダイスを転がそう
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>")
[ツッコミを入れる]