From ab9365f4236f4ab7e416919784640ba052b06f81 Mon Sep 17 00:00:00 2001 From: Torsten Date: Sun, 22 Mar 2020 22:50:24 +0200 Subject: [PATCH] draft for new post about register allocation --- Rakefile | 14 ++ app/assets/images/register_alloc.png | Bin 0 -> 23235 bytes ...egister-allocation-in-a-ruby-compiler.haml | 146 ++++++++++++++++++ 3 files changed, 160 insertions(+) create mode 100644 app/assets/images/register_alloc.png create mode 100644 app/views/posts/2020/_03-22-register-allocation-in-a-ruby-compiler.haml diff --git a/Rakefile b/Rakefile index e85f913..1bbf23b 100644 --- a/Rakefile +++ b/Rakefile @@ -4,3 +4,17 @@ require_relative 'config/application' Rails.application.load_tasks + +task :create_post do + args = ARGV.dup + args.shift + args.each { |a| task a.to_sym do ; end } + + today = Time.now + args.unshift today.day.to_s.rjust(2 , "0") + args.unshift today.month.to_s.rjust(2 , "0") + + file = "app/views/posts/#{today.year}/_" + args.join("-") + ".haml" + f = File.open(file , "w") + f << "%p start" +end diff --git a/app/assets/images/register_alloc.png b/app/assets/images/register_alloc.png new file mode 100644 index 0000000000000000000000000000000000000000..8f0e1a97f48dc848f9293cdbd1f9830ec989295f GIT binary patch literal 23235 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 zATbe989@