Bulknews::Subtech RSSフィード

2009/01/07 (水)

Google Code から github にコードをうつしたメモ 16:51  Google Code から github にコードをうつしたメモ - Bulknews::Subtech を含むブックマーク はてなブックマーク -  Google Code から github にコードをうつしたメモ - Bulknews::Subtech

Simplistic Complexity を参考に。

googlecode のauthor フィールドを github にマッピングしておくとよいみたいなので、svn-log-github.pl ? GitHub みたいなスクリプトを書いてマッピングファイルを作成。github に存在しない人やユーザ名が違う人は手動で対応。(とおもったんだけど元が googlecode なんだからユーザ名 @gmail.com にしておけばいいんだということに気づいた)

基本的には上記ページの通りで、git clone したあとに git remote rm origin で origin を削除した後、git remote add origin git@github... で github のURLを指定した。

http://github.com/miyagawa/remedie/tree/master

2008/10/07 (火)

Perl Quiz 11:43  Perl Quiz - Bulknews::Subtech を含むブックマーク はてなブックマーク -  Perl Quiz - Bulknews::Subtech

Perl Quiz - package名について - Islands in the byte stream

まあこういうことではないよねとおもいつつ。

#!perl -w
use strict;
use Test::More 'no_plan';
sub f{
    *is = \&isnt;
}
f();
is ref(bless({}, 'Foo')), 'Foo';

2008/10/01 (水)

[jQuery] Unbreak checkboxes 05:52  [jQuery] Unbreak checkboxes - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [jQuery] Unbreak checkboxes - Bulknews::Subtech

Checkbox is a painful HTML element.

If you have a dynamically generated form that has checkboxes, the backend app has no way to tell if a) there's a checkbox that is unchecked or b) there was no checkbox at all. For instance,

<input type="checkbox" name="a" /> A
<input type="checkbox" name="b" value="1" /> B

If you check 'A' and uncheck 'B', the parameters you get is "a=on". You can't tell if the checkbox 'B' was there but unchecked or there wasn't checkbox 'B' present from the beginning.

The following code fixes the situation. It traverses the input type="checkbox" fields on form.submit, and adds name=off (or name=0 if the input element has some value).

$( function() { 
  $('form').submit(function(){
    var form = $(this);
    $('input[@type="checkbox"]').each(function(){
      if(!this.checked) {
        var input = document.createElement("input");
        var value = this.value == '' ? 'off' : '0';
        $(input).attr({ type: "hidden", name: this.name, value: value });
        form.append(input);
      }
    }); 
  });
});

This way you'll get 'a=on&b=0' or 'a=off&b=1' if you check A or B and uncheck the other respectively.

2008/09/18 (木)

[jQuery] add CSRF token automatically 18:06  [jQuery] add CSRF token automatically - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [jQuery] add CSRF token automatically - Bulknews::Subtech

Automatically add session_token to A and FORM tags with class="requires-token". You can validate the token in the backend to prevent CSRF attacks. Token can be anything you want, but using SHA1 hex of session ID etc. would be reasonable to implement.

$(function(){
   if (Framework.session_token) {
    $("form.requires-token").each(function() {
      var el = $(document.createElement('input'));
      el.attr('type', 'hidden');
      el.attr('name', 'session_token');
      el.val(Framework.session_token);
      $(this).append(el);
    });
    $("a.requires-token").each(function (e){
      var el = $(this);
      var prefix = el.attr('href').match(/\?/) ? "&" : "?";
      el.attr('href', el.attr('href') + prefix + 'session_token=' + Framework.session_token);
      if (el.attr('title')) {
        el.click(function(){
          if (!confirm(el.attr('title'))) return false;
        });
      }
    });
  }
});

If A tag has @title attribute, onclick handler would prompt that to confirm the action, which might be useful to implement "delete" links with A tags.

2008/08/08 (金)

きょうの Web::Scraper 04:11  きょうの Web::Scraper - Bulknews::Subtech を含むブックマーク はてなブックマーク -  きょうの Web::Scraper - Bulknews::Subtech

めざまし占いカウントダウンを取得

http://search.cpan.org/dist/TRD-Uranai/ がいろいろひどすぎるので

#!/usr/bin/perl                                                                                                         
use strict;
use Web::Scraper;
use URI;

my $uri = URI->new("http://www.fujitv.co.jp/meza/uranai/");
my $scraper = scraper {
    process '//td[@class="day" and @height < 100]', date => 'TEXT';
    process '//table[contains(@background, "item/rank")]',
        'ranking[]' => scraper {
            process '.', 'rank' => [ '@background', sub { (/rank(\d+)/)[0] } ];
            process "img", star => '@alt', image => '@src';
            process "td.text" => text => 'TEXT';
            process ".lucky", lucky => 'TEXT' };
};

my $result = $scraper->scrape($uri);

use YAML;
warn YAML::Dump $result;
date: 8月7日
ranking:
  - image: !!perl/scalar:URI::http http://www.fujitv.co.jp/meza/uranai/item/conste_aries.gif
    lucky: 気になるものはすぐに購入する
    rank: 01
    star: おひつじ座
    text: アイディアがさえて注目の的に。仲間の信頼も得て人気も急上昇。思いついたらすぐに実行しよう。
  - image: !!perl/scalar:URI::http http://www.fujitv.co.jp/meza/uranai/item/conste_libra.gif
    lucky: レストラン
    rank: 02
    star: てんびん座
    text: 楽しい出会いがある予感。夏限定のイベントへGO
...