ヤルキデナイズド

Unclassified Articles on Software and IT

AFNetworking-ReactiveCocoa を作った

AFNetworking を ReactiveCocoa に対応させるやつを作った。 Podfile に pod 'AFNetworking-ReactiveCocoa' と書けばインストールできる。使い方はこんな感じ:

#import <AFNetworking/AFNetworking.h>
#import <AFNetworking-ReactiveCocoa/AFNetworking-ReactiveCocoa.h>
#import <ReactiveCocoa/ReactiveCocoa.h>

- (void)requestAndSubscribe {
  AFHTTPClient *client = ...;
  NSURLRequest *request = ...;

  // Enqueue the request and get a signal.
  RACSignal *signal = [client rac_enqueueHTTPRequestOperationWithRequest:request];

  // Subscribe the signal, which will send a tuple of the request operation
  // and the response object.
  [signal
   subscribeNext:^(RACTuple *opAndResp) {
     AFHTTPRequestOperation *operation = [opAndResp first];
     id responseObject = [opAndResp second];
     NSLog(@"success: operation=%@, responseObject=%@", operation, responseObject);
  }
   error:^(NSError *error) {
     // The error object is the same one that is passed to the failure handler
     // of the enqueued request operation, except one additional key-value pair
     // in `userInfo` as shown below.
     AFHTTPRequestOperation *operation = [error.userInfo objectForKey:@"AFHTTPRequestOperation"];
     NSLog(@"error: operation=%@", operation);
   }
   completed:^{
     NSLog(@"completed");
   }];
}

他のメソッドについては AFHTTPClient+RACSupport.h を参照。

Pixiv gem を作った

Ruby から pixiv にアクセスする Pixiv gem を作った。 gem install pixiv でインストールできる。

使い方

require 'pixiv'

pixiv = Pixiv.client('pixiv_id', 'password')

illust_id = 1
illust = pixiv.illust(illust_id)
puts illust.title

member_id = 1
member = pixiv.member(member_id)
member.works.each {|illust| ... }

member.bookmarks.each do |illust|
  if illust.manga?
    pixiv.download_manga(illust, ['manga/', :image_name])
  else
    pixiv.download_illust(illust, ['illust/', :image_name])
  end
end

より詳細な使い方については READMEサンプルスクリプトAPI ドキュメントを参照のこと。

注意

pixiv の利用規約クローラーなどのプログラムを使って作品を収集する行為を禁止している。 Pixiv gem を使う場合は私的利用の範囲に留めること。

遅延アクセスについて

サーバの負荷を軽減するために、Pixiv gem は必要になるまで pixiv へのアクセスを行わない。たとえば次のコードでは、アクセスが発生するのは illust.title を呼んだ時点である:

illust = pixiv.illust(123)
puts illust.id
puts illust.url
puts illust.title # ここで /member_illust.php にアクセス

ID は既知であるしイラストの URL は ID から求められるので、 illust.idillust.url の呼び出しはアクセスを伴わない。

さらに、タイトルや他の属性が既知である状況では illust.title などもアクセスを行わない:

# ループ開始時に /bookmarks.php にアクセスしてイラスト一覧を取得
pixiv.bookmarks.each do |illust|
  puts illust.title
  puts illust.author.name
  puts illust.original_image_url
  puts illust.tag_names # ここで /member_illust.php にアクセス
end

タイトル(それに作者名や画像の URL)は /bookmarks.php から取得できるためである。

Twitter のパクりアカウントをまとめてブロックするサービスを作った

Kill 1000favs を作った。 Twitter アカウントでログインして Block ボタンを押すとパクりアカウントをまとめてブロックできる。

ソースコードuasi/kill1000favs · GitHub に置いてある。デフォルトでブロックするアカウントのリストは kill1000favs/public/1000favs.txt at master · uasi/kill1000favs · GitHub

使ったもの一覧:

ヱヴァQを殺したロンギヌスの槍

すでに劇場に足を運んだ諸氏ならご存知とは思うが、『聖☆おにいさん』の予告が公開されている。一部のヱヴァQ公開館に限ったスペシャル予告編らしい、これ:

あまりにもひどい。この2012年に、ヱヴァQ上映の数分前に、よりによってシト新生の予告を片手間にパロった映像をぶつけるとは。エヴァをリビルドするとか、エヴァでエヴァを超えるとか、やっぱオタク気持ち悪いし正気に戻れとか、巨神兵チョーかっこいいぜとか、なんやかや息巻いて新劇場版を作り上げた庵野監督の背中を20世紀から飛んできたロンギヌスの槍がスコンと貫いた格好だ。エヴァンゲリオンって結局コレでしょ、と。投擲したのがイエスを主人公に据えたギャグアニメというのが皮肉利いててなおひどい。

新世紀とはつまりこういうことだったのだ。エヴァはとっくに、旧世紀のうちに死んで解体されて映像作家の血肉になり、低劣なパロディを撒き散らす呪いの種になったのだ。もう忘れよう。エヴァのこともヱヴァのことも。

ヱヴァQのまとまらない感想

見ました、見てきました。友人たちと感想を大いに語らうべく鑑賞後に寿司食べ放題を予約していたんですが、まるで法事の席に竜巻が吹き荒れておじいちゃんの祭壇が吹き飛ばされてしまったかのようでした。親戚縁者集まって料理や酒が続々運ばれてくるものの悼むべき遺骨は空の彼方、わてらどないな顔したらええんですの、とりあえずトロ食いまっかてな具合です。

この段落はまじめな感想。いきなり登場する宇宙戦艦や破の14年後という設定のインパクトに押されがちだが、大まかなストーリーはTV版22〜24話をなぞっている。宇宙空間に出現して可視光線で2号機を攻撃する使徒から始まって、感情をなくしたスペア綾波の登場、明かされるユイと初号機の関係、意味深なこと言いつつドグマを降りたものの「やっぱこれ違うわー騙されたわー、なんなんすかリリンさんこれ、騙されたわー」→首チョンパのカヲルくん。加えて、旧劇場版を彷彿とさせる卵子状に割れた月や複数のロンギヌスの槍、巨大綾波の首などのモチーフがちりばめられている。とどめに明かされた次回作のタイトルが『シン・エヴァンゲリオン劇場版:│┃』。エヴァンゲリオンが旧表記に戻ったこと、シンが「新」と「真」のダブルミーニングになっていることからしても、次は(旧)エヴァンゲリオン劇場版の25、26話を強く意識した話になるんだろうな(そしてあのふざけた予告はなんなんだ)という感じ。もういい、早く終わらせて楽にしてくれ。

まじめな感想終わり。マリがアスカを終始お姫様と呼ぶのがよかったです。それ以外の何もかもを、今は思い出したくありません。遺骨よさらば。