Skip to content

Instantly share code, notes, and snippets.

@ssig33
ssig33 / crawler.md
Created March 16, 2013 07:24
クローラーの設計
$ fastladder-crawler export.opml 'http://url_of_fastladder'

とかコマンドうつとクローラーが起動してガンガンクロールして RPC 経由で更新する感じですかね。

フィードにアクセスしまくらないように CrawlStatus というのが Fastladder 側にあるんだけど、これは無視して自前でなんとかするのがよい感じする。なるべく Fastladder から切り離す。

フィード全文化とかはオプションで選択出来るようにする。広告除去もそんな感じ。

こんなもんか?

<source>
type forward
port 24224
</source>
<match tiarra.miu>
type exec_filter
command bundle exec ruby store.rb
time_key time
in_format json

結局決めないといけないのは以下の 2 点だけだと思います

  • チャットサービス -> miu, miu -> ストレージにわたるメッセージのスキーマ-
  • Web UI -> miu , miu -> チャットサービスのクライアント と渡るメッセージのスキーマ

以上 2 点が決まっていれば IRC のログを読んで miu 形式に渡すものとか hipchat を読んで miu 形式にして miu に渡すものとか、 miu から Groonga に保存するとか、 Web から miu を経由して発言するものとか IRC ゲートウェイから miu を経由して発言するものとか作れるはず。

つまり miu の本質は__チャットサービスへの入出力の統一された JSON のスキーマ__であると思います。

なのでスキーマさえ決めてしまえば後は各自欲しいものを作ればいいんじゃねえかと思うのですがどうでしょうか。

source "https://rubygems.org"
gem 'fluentd'
gem 'fluent-plugin-groonga'
gem 'rroonga'
gem 'msgpack'
gem 'sinatra'
<source>
type tail
path /path/to/log.txt
tag tiarra.all
format /^(?<time>[^ ]+\ [^ ]+)\ <(?<channel>[^ ]*):(?<nick>[^ ]*)>\ (?<log>.*)$/
time_format %Y/%m/%d %H:%M:%S
pos_file /tmp/pos
</source>
#!/usr/bin/env ruby
require 'fileutils'
raise 'please input mkv' unless ARGV[0] =~ /\.mkv$/
ARGV.select{|x| x =~ /\.mkv$/ }.each{|x|
mp4 = x.sub(/\.mkv$/, 'mp4')
info = `mkvmerge --identify "#{x}"`.split("\n")
video_id = info.select{|s| s =~ /video/}.first.split(' ')[1].to_i
audio_id = info.select{|s| s =~ /audio/}.first.split(' ')[1].to_i
system 'mkvextract', 'tracks', x, "#{video_id}:vid.h264", "#{audio_id}:audio.aac"
source :rubygems
gem 'mechanize'
gem 'xml-simple', require: 'xmlsimple'
require 'mechanize'
url = 'http://o.x0.com/m/128'
def save url
id = url.split("/").last
alice = Mechanize.new
page = alice.get(url)
@ssig33
ssig33 / convert.rb
Created January 5, 2013 03:33
Convert Youtube Caption to SRT.
#coding:utf-8
require 'xmlsimple'
require 'time'
def generate_time f
hour = (f/60/60).to_i
f += -(hour*60*60)
min = (f/60).to_i
f += -(min*60)
sec = f.to_i
// ==UserScript==
// @name Query Cutter
// @namespace http://www.ftnk.jp/userscripts
// @description Cut '?ref=rss', and so on
// @include http://*
// ==/UserScript==
(function (){
var newUrl = location.href;
// delete rss for Cnet Japan, barks, etc