Skip to content

Instantly share code, notes, and snippets.

View takai's full-sized avatar

Naoto Takai takai

View GitHub Profile
class ParameterFilterProcessor
def self.create(filters)
Class.new(Raven::Processor::Processor) do
@filters = filters
def initialize(client = nil)
@parameter_filter = ActionDispatch::Http::ParameterFilter.new(self.class.filters)
end
def process(value)
@takai
takai / gist:12dcd31029a785f0fdfe
Created May 12, 2015 07:20
データモデル設計のレビューのしかた

たまたま今日、データモデルの設計についてレビューする機会があった。こういう機会って割とあるのだけれども、ざっと聞いてから、ざっと話すみたいな反射神経をもとめられるケースがおおいので、いつもやっているやり方について書いておきたい。ちなみに本論はこのビール缶を空けた時点でおわる。あしからず。

そもそもデータモデルの設計って何のためにするのか、ビール缶の2本目に取りかかっている立場でいうと、これからつくるシステムで表現可能な状態を設計するためってことになりそうである。まあ難しいことは言わないけれど、システムでやりたいことができるようにしてあげなきゃらないし、システムがやりたくなりそうなこともやれるようにしてあげなきゃならない。

データがシステムの寿命よりも長いってのは、まあおっさんの説教で聞いたことがあるのかもしれないけれど、今回のシステム開発のスコープ外だからといって、何でもYAGNIの精神で切り詰めればいいってもんでもないのがデータモデルの世界である。新しい要件がでた瞬間にデータモデルレベルで詰むみたいなシステムをつくっちゃあ、末代までの恥とされるのがソフトウェアエンジニアの世界である。

だから、データモデル設計の段階で、システムのリリース時点でシステムができなきゃいけないことはデータモデルとして当然できなきゃいけないし、システムのリリース時点ではできなくてもよいけれども、将来いかにもできなきゃいけないようなことについても、当然できるようしなきゃいけない。

そんな、簡単にいうけれど、と読者のみなさんはお考えだろう(そう考えない人や答をもっている人は対象読者ではない)。

#!/usr/bin/ruby
# -*- mode: ruby; encoding: utf-8-unix -*-
require 'tmpdir'
origdir = Dir::pwd
target = File.expand_path(ARGV[0])
dir = File::dirname(target)
rar = File::basename(target)
// ==UserScript==
// @name Remove HatenaBookmark Blockquote
// @namespace hatena
// @include http://b.hatena.ne.jp/*
// ==/UserScript==
var quotes = document.getElementsByTagName("BlockQuote")
for(var i = 0; i < quotes.length; i++) {
quotes[i].style.display = "none";
}
require 'rubygems'
require 'spec'
describe Spec do
before do
@object = Class.new {
def something?
true
end
}.new
Index: bcrypt_ext.c
===================================================================
--- bcrypt_ext.c (revision 41)
+++ bcrypt_ext.c (working copy)
@@ -10,13 +10,14 @@
/* Given a logarithmic cost parameter, generates a salt for use with +bc_crypt+.
*/
static VALUE bc_salt(VALUE self, VALUE cost, VALUE seed) {
- return rb_str_new2((char *)bcrypt_gensalt(NUM2INT(cost), (u_int8_t *)RSTRING(seed)->ptr));
+ return rb_str_new2((char *)bcrypt_gensalt(NUM2INT(cost), (u_int8_t *)RSTRING_PTR(seed)));
Index: ext/json/ext/generator/generator.c
===================================================================
--- ext/json/ext/generator/generator.c (revision 272)
+++ ext/json/ext/generator/generator.c (working copy)
@@ -1,6 +1,6 @@
#include <string.h>
#include "ruby.h"
-#include "st.h"
+#include "ruby/st.h"
#include "unicode.h"
# -*- mode: ruby; coding: utf-8-unix -*-
Gem::Specification.new do |spec|
spec.name = "twitty-console"
spec.summary = "Console-based Twitter Client"
spec.version = "0.2.0"
spec.author = "Naoto Takai"
spec.email = "takai@recompile.net"
diff --git a/merb-core/lib/merb-core/dispatch/request_parsers.rb b/merb-core/lib
/merb-core/dispatch/request_parsers.rb
index f04eb7a..071eb33 100644
--- a/merb-core/lib/merb-core/dispatch/request_parsers.rb
+++ b/merb-core/lib/merb-core/dispatch/request_parsers.rb
@@ -59,8 +59,8 @@ module Merb
status = input.read(boundary_size)
return {} if status == nil || status.empty?
raise ControllerExceptions::MultiPartParseError, "bad content body:\n'#{s
tatus}' should == '#{boundary + EOL}'" unless status == boundary + EOL
@takai
takai / init.el
Created March 4, 2009 00:10
rinari settings for emacs
;; Rinari
;(require 'ido)
;(ido-mode t)
(require 'rinari)
(require 'rhtml-mode)
(define-key rinari-minor-mode-map [(meta shift down)] 'rinari-find-rspec)
(define-key rinari-minor-mode-map [(meta shift left)] 'rinari-find-controller)
(define-key rinari-minor-mode-map [(meta shift up)] 'rinari-find-model)
(define-key rinari-minor-mode-map [(meta shift right)] 'rinari-find-view)