骨のダイスを転がそう

2009|01|02|03|04|05|06|07|10|12|
2010|01|02|03|04|05|06|07|08|09|10|11|
2011|02|03|05|06|07|08|09|10|11|12|
2012|01|02|04|05|09|10|11|12|
2013|01|02|04|
2014|11|
2015|01|04|05|
2016|06|07|08|09|11|
2017|01|02|03|04|
2018|03|

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>")