Hatena::ブログ(Diary)

satoru.netの自由帳 このページをアンテナに追加 RSSフィード

130204Monday

[]mysqlのテーブルに後からAUTO INCREMENTをDBの最前列に追加するとき

後からAUTO INCREMENTな列を追加したい時メモ

Before

f:id:satoru_net:20130204114939p:image

After

f:id:satoru_net:20130204114938p:image

How?

f:id:satoru_net:20130204114937p:image

ALTER TABLE (テーブル名)

ADD COLUMN `id` int(11) AUTO_INCREMENT FIRST , ADD PRIMARY KEY (id);

  • 『, ADD PRIMARY KEY (id)』を続ける事でALTER TABLEでAUTO_INCREMENTを指定できる
  • 最後に『FIRST』を付ける事でDBの先頭にテーブルが挿入される
  • 先頭じゃなくて、指定したポイントに入れたい場合は『AFTER (カラム名)』を使う

120301Thuday

[]windows7 スキャナ 動かない

状況

  • 複合プリンタのスキャナだけがなぜか使えない。
  • プリンタのドライバはちゃんと入ってて、印刷はできる。
  • [Windows FAXとスキャン]で[新しいスキャン] 押してもエラー出ず、うんともすんとも
  • 環境:複合プリンタ Cannon MP500 、Windows 7 64bit
  • そういえば過去に[msconfig]とか[サービス]で要らなそうなのを独自判断でオフにしたかも?。。
  • ググっても解決策みつからず
  • サポートに連絡するも解決せず。。
    • ドライバ入れ直してもダメ、再起動してもダメ、ウイルス駆除ソフトオフにしてもダメ。自分でやってみます、、

解決策

いろいろ試行錯誤した結果、、

スキャナを実行するにはWIAというサービスが立ち上がっていないとだめらしい。

Windows Image Acquistion (WIA)

  • Remote Procedure Call(RPC)
  • DCOM Server Process Lancher
  • Shell Hard ware Detection

WIAがメインサービスで、RPC、DCOM、Shell..が依存サービス。

ひとつでも停止してたらスキャナが使えない。

スタート>プログラムとファイルの検索>[サービス]と入力>サービス で確認。

WIAが停止していたら[開始]で

解決

やーっとスキャナつかえたー。確定申告の資料印刷しなきゃ

110712Tueday

[]Apacheのログを完全に出力しないように

それぞれ httpd.confに記述

方法1: /dev/null に出力

CustomLog /dev/null common

でもこれだと/dev/null→破棄が繰り返されるわけだからちょっと非効率だ

方法2: 条件指定に env=0

CustomLog /dev/null common env=0

本来、除外機能のパラメータに常に0を渡して完全ブロック。

これだと完全に出てない!いい感じ!

方法3: mod_log_config.so を除外

#LogFormat XXXX

#CustomLog XXXX

#LoadModule log_config_module modules/mod_log_config.so

ログ関連のモジュールをコメントアウト。(ErrorLogはlog_config_moduleをコメアウトしても有効みたい)

これでも方法2と同じ結果になったけど、これだとたまにログを見たいときの復旧がちょっとめんどい。


結論

方法2env=0が楽

110223Wedday

[]TwitterのURLのつぶやき数の取得方法@perl

URLのつぶやかれ数をperlで取得する方法メモ。

f:id:satoru_net:20110223084946p:image

↑最近よく見るこれの数値をperlで取り出す方法

HTMLでは

<div class="textwidget">
<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-lang="en"
   data-url="http://satoru.net">Tweet</a> 
<script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>

ってやると、↓になる。この数値の部分だけほしいんだけどどーやるんだろ?

f:id:satoru_net:20110223084946p:image

結論

http://urls.api.twitter.com/1/urls/count.json

引数url(?url=http://satoru.netとか)投げたらjsonにcountが返ってくる

つまり、http://urls.api.twitter.com/1/urls/count.json?url=http://satoru.net こんなかんじ。


ソース

#!/usr/bin/perl
use WebService::Simple;
use Data::Dumper;

binmode STDOUT, ":utf8";

my $ws = WebService::Simple->new(
 base_url        => 'http://urls.api.twitter.com/1/urls/count.json',
 response_parser => 'JSON'
);

my $json = $ws->get( { url => 'http://satoru.net/' } )->parse_response;

print Dumper(\$json);

結果

$VAR1 = \{
            'count' => 4,
            'url' => 'http://satoru.net'
          };

なんだ簡単なのねえ

おまけ(with memcached)

$memはmemcachedを宣言してね。

はてブ数とTwitter数を取得するための関数。URLを投げると値がかえってくる。

繰り返し使う場合を想定してurlをキーにmemcachedにキャッシュ。

sub get_hatena{
	my $url = shift;
	my $key = "hatena:$url";
	
	if($mem->get($key)){
		return $mem->get($key);
	} else {
		my $service = WebService::Simple->new(
		 base_url        => 'http://api.b.st-hatena.com/entry.count?url=http://www.hatena.ne.jp/',
		);
		my $res = $service->get( { url => $url } );
		my $count = $res->is_success && $res->content || "0";
		$mem->set($key,$count,60*60*20);
		return $count;
	}
}

sub get_twitter{
	my $url = shift;
	my $key = "twitter:$url";
	
	if($mem->get($key)){
		return $mem->get($key);
	} else {
		my $service = WebService::Simple->new(
		    base_url        => 'http://urls.api.twitter.com/1/urls/count.json',
		    response_parser => 'JSON'
		);
		my $res = $service->get( { url => $url } );
		my $count = $res->is_success && eval{$res->parse_response->{count}} || "0";
		$mem->set($key,$count,60*60*20);
		return $count;
	}
}

©satoru.net
Mail Twitter