{"categories":["rails"],"height":"190","blog_url":"https://craccho.hatenadiary.org/","image_url":null,"html":"<iframe src=\"https://hatenablog-parts.com/embed?url=https%3A%2F%2Fcraccho.hatenadiary.org%2Fentry%2F20090603%2F1244020363\" title=\" Rails\u306e\u30ed\u30b0\u304b\u3089IP\u30a2\u30c9\u30ec\u30b9\u3001\u6642\u9593\u5e2f\u6bce\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8 - Paamayim Nekudotayim\" class=\"embed-card embed-blogcard\" scrolling=\"no\" frameborder=\"0\" style=\"display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;\"></iframe>","title":" Rails\u306e\u30ed\u30b0\u304b\u3089IP\u30a2\u30c9\u30ec\u30b9\u3001\u6642\u9593\u5e2f\u6bce\u306e\u30a2\u30af\u30bb\u30b9\u6570\u3092\u96c6\u8a08\u3059\u308b\u30b9\u30af\u30ea\u30d7\u30c8","blog_title":"Paamayim Nekudotayim","type":"rich","author_name":"craccho","width":"100%","published":"2009-06-03 18:12:43","provider_name":"Hatena Blog","author_url":"https://blog.hatena.ne.jp/craccho/","provider_url":"https://hatena.blog","url":"https://craccho.hatenadiary.org/entry/20090603/1244020363","version":"1.0","description":"#!/usr/bin/env ruby require \"enumerator\" result = ARGF.enum_for(:each_line).inject({}) do |result, line| if line =~ /(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}) at (\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})/ ip,y,m,d,h,i,s = $1,$2,$3,$4,$5,$6,$7 h = h.to_i result[ip] ||= {} result[ip][h] ||= 0 result[\u2026"}