Bulknews::Subtech RSSフィード

2006/06/14 (水)

ThinkPad IE mover 20:44  ThinkPad IE mover - Bulknews::Subtech を含むブックマーク はてなブックマーク -  ThinkPad IE mover - Bulknews::Subtech

clouder 氏のアレ (http://clouder.jp/yoshiki/mt/archives/000686.html) の ActivePerl + IE 版。

# ThinkPad IE Scroller
# Copyright 2006 Tatsuhiko Miyagawa miyagawa at gmail.com
# License: Same as Perl (GPL or Artistic)

# based on http://clouder.jp/yoshiki/mt/archives/000686.html

use strict;
use List::Util qw(max min);
use Time::HiRes qw(sleep);
use Win32::API;
use Win32API::File qw(:ALL);
use Win32::OLE;

my $threshold = 3.0;

sub get_pos {
    my $file = createFile("//./ShockMgr", "r ke") or die "Can't get ShockMgr device";
    DeviceIoControl($file, 0x733fc, [], 0, my($buf), 0x24, my($bytes), []);
    my @data = unpack "x4s*", $buf;
    return @data;
}

# get screen metrics
my $function = Win32::API->new(
   'user32', 'GetSystemMetrics', 'I', 'I',
);

my $screen_width  = $function->Call(0);
my $screen_height = $function->Call(1);

my $depth = 8;

my @pos = get_pos;
my($base_x, $base_y) = @pos[3, 2];

my $app = "InternetExplorer.Application";
my $ie  = Win32::OLE->GetActiveObject($app) || Win32::OLE->new($app);
$ie->{Visible} = "TRUE";
$ie->GoHome();
1 while $ie->Busy;

while (my @pos = get_pos) {
   my $ax = ($pos[1] - $base_x) / 30;
   my $ay = ($pos[0] - $base_y) / 30;

   move_window($ie, $ax, $ay);
}

sub move_window {
    my($ie, $ax, $ay) = @_;
    
    my $left   = $ie->{Left} + $ax;
    my $top    = $ie->{Top}  + $ay;
    my $right  = $left + $ie->{Width};
    my $bottom = $top + $ie->{Height};
    
    $ie->{Left} = 
       ($left < 0)              ? 0
     : ($right > $screen_width) ? $screen_width - $ie->{Width}
     :                            $left;
 
    $ie->{Top} = 
       ($top < 0)                 ? 0
     : ($bottom > $screen_height) ? $screen_height - $ie->{Height}
     :                              $top;
}

動画は同じなので(ry

ThinkPad Saber 0.21 15:23  ThinkPad Saber 0.21 - Bulknews::Subtech を含むブックマーク はてなブックマーク -  ThinkPad Saber 0.21 - Bulknews::Subtech

http://svn.bulknews.net/repos/public/thinkpad-saber/trunk/releases/

Win32 の NotifyIcon 対応で exeの場合は console がでないように。PAR + Win32::Exe 万歳!しかし、右クリックでシャットダウンするだけなのにエライコードがごちゃごちゃする。。

[CPAN] DateTime::Format::Mail 12:08  [CPAN] DateTime::Format::Mail - Bulknews::Subtech を含むブックマーク はてなブックマーク -  [CPAN] DateTime::Format::Mail - Bulknews::Subtech

http://d.hatena.ne.jp/hakobe932/20060531/1149081583

Module::Signatureで非バイナリファイルのハッシュを計算するときに実行されるbimode(SD, ':crlf')が悪さをしているようだ。このコードはModule::Signatureの最新バージョンである0.54から現れるコードなので、Module::Signatureが最新で無い場合はDateTime::Format::Mailはエラーなくインストールされると考えられる

Module::Signature 0.54 で fix された CRLF を含むファイルのダイジェストの計算方法。DateTime::Format::Mail の SIGNATURE は 0.53 以前でつくられているのでコケる。Dave と Audrey にメールした。


Encode::JavaScript::UCS 11:45  Encode::JavaScript::UCS - Bulknews::Subtech を含むブックマーク はてなブックマーク -  Encode::JavaScript::UCS - Bulknews::Subtech

http://search.cpan.org/~itwarrior/Unicode-Escape-0.0.1/

さすがにこの名前はやりすぎでしょう。。。 あと実装も再発明感が。

Encode.pm を使う=5.8 前提なら Unicode::String のほとんどの機能は不要。Encode::Encoding として実装するのが普通だろうなあ。ということで、

package Encode::JavaScript::UCS;
use strict;
use warnings;
use base qw(Encode::Encoding);
use Encode 2.12 (); # for callbacks

__PACKAGE__->Define('JavaScript-UCS');

sub decode($$;$){
    my ($obj, $buf, $chk) = @_;
    $buf =~ s/\\u([0-9a-f]{4})/chr(hex($1))/eig;
    $_[1] = '' if $chk; # this is what in-place edit means
    return $buf;
}

sub encode($$;$){
    my ($obj, $str, $chk) = @_;
    $str = Encode::encode("ascii", $str, sub { sprintf("\\u%04x", $_[0]) });
    $_[1] = '' if $chk; # this is what in-place edit means
    return $str;
}

1;

__END__

package main;
use Data::Dumper;
use Encode;
my $name = "\x{5BAE}\x{5DDD}\x{9054}\x{5F66}";
my $escaped = encode("JavaScript-UCS", $name);
warn Dumper $escaped;

$name = decode("JavaScript-UCS", $escaped); 
warn Dumper $name;

ThinkPad Saber 05:13  ThinkPad Saber - Bulknews::Subtech を含むブックマーク はてなブックマーク -  ThinkPad Saber - Bulknews::Subtech

というわけで MacSaber の ThinkPad版。アイコン募集。

http://bulknews.typepad.com/blog/2006/06/turn_your_think.html