[Programing] 12 March 2010 はてなブックマーク - Twitter公式ページ用のGreasemonkey(とChromeExtention)によるRTスクリプト Twitterでつぶやく

Twitter公式ページ用のGreasemonkey(とChromeExtention)によるRTスクリプト

RT_01
作りました。
FFならGreaseMonkeyが入ってれば動くはずです。ChromeはLinux版の5.0.307.11 betaで確認しました。
GreasMonkey用 userrt_gm.user.js
Chrome用 userrt_chrome.user.js
利用方法は簡単。上記をインストールした後、twitter.comのページで背景をダブルクリックすればRTボタンが現れます。
自動更新でTLが更新されたらまた背景をダブルクリックしてください。
# なおunsafeWindow使ってるのでChromeでは動きません。Chrome対応はそのうち・・・
注意: いろいろ大幅に修正しましたのでTwitterにRTボタンを追加するUserScript for Chrome/GreaseMonkey(正式版)から最新をダウンロードしてください。

[メモ] 17 December 2009 はてなブックマーク - CodeIgniterのform_validationでcallbackを利用するときの注意 Twitterでつぶやく

CodeIgniterのform_validationでcallbackを利用するときの注意

CodeIgniterLogo
色々事情がありまして、PHPをやってるわけですが、今回はフレームワークとして軽量なことで話にあがるCodeIgniterを採用しています。
まあ詳しい部分は公式ドキュメントや、日本語化されたドキュメントが素晴らしいのでそちらを見てほしいわけです。

CodeIgniter - Open source PHP web application framework
http://codeigniter.com/

日本CodeIgniterユーザ会
http://codeigniter.jp/

で、本題にはいりますが、
form_validationでcallbackを利用するときのコールバックされるメソッド名に注意が必要
です。

ドキュメントどおりの場合、usernameのカスタムチェックをコールバックで行う場合には、CodeIgniterのコントローラー内において下記のように記述します。
ちなみこのクラスはhttp://localhost/index.php/formまたはhttp://localhost/index.php/form/indexで呼び出されるとしましょう。

class Form extends Controller {
function index()
{
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
$this->form_validation->set_rules('username', 'ユーザ名', 'callback_username_check');
$this->form_validation->set_rules('password', 'パスワード', 'required');
$this->form_validation->set_rules('passconf', 'パスワードの確認', 'required');
$this->form_validation->set_rules('email', 'メールアドレス', 'required');
if ($this->form_validation->run() == FALSE)
{
$this->load->view('myform');
}
else
{
$this->load->view('formsuccess');
}
}

function username_check($str)
{
if ($str == 'test')
{
$this->form_validation->set_message(
'username_check', 'フィールド %s に、"test"は使えません');
return FALSE;
}
else
{
return TRUE;
}
}
}
?>
要するに、
$this->form_validation->set_rules('username', 'ユーザ名', 'callback_username_check');
function username_check($str)
$this->form_validation->set_message(
'username_check','フィールド %s に、"test"は使えません');
の部分が対応するわけです。

ところが!ですね。
CodeIgniterのコントローラの仕様上、標準状態ではコントローラーのメソッドが_(アンダースコア)で始まっていない場合は下記のようなURLで呼び出せてしまいます。
http://localhost/index.php/form/username_check
さらに標準の仕様では、メソッド名より後ろの部分にスラッシュで文字列を追加すると自動的に引数になってしまいます。
http://localhost/index.php/form/username_check/username
→ つまり $form->username_check('username');を実行したのと同じ。

まずいですね・・・・。
カスタムチェックでDBアクセスとかしてたらさらにまずいですね。

で、ぱっと思い浮かんだ対応方法としては

1、 _remapをオーバーライドしてコントローラの振る舞いを再実装する。
2、 コールバックメソッドを_(アンダースコア)付きにして、コールバック指定のところでちゃんと_(アンダースコア)を入れてやる。

の2つです。1はだるいので2がおすすめです。

さっきの場合だと下記のように修正します。
callback_(アンダースコア)_(アンダースコア)username_check
$this->form_validation->set_rules('username', 'ユーザ名', 'callback__username_check');
_(アンダースコア)username_check
function _username_check($str)
$this->form_validation->set_message(
'_username_check','フィールド %s に、"test"は使えません');

以上で、コールバックメソッドも無事に隠蔽されます。
他にうまい方法有ったり、間違っているようならご指摘してください。

[@上海] 12 December 2009 はてなブックマーク - 虹口を散歩 Twitterでつぶやく

虹口を散歩

上海の3号線赤峰駅から上海外語大学を通って、虹口足球場駅まで散歩をしてきました。
その時の写真。

[徒然] 04 December 2009 はてなブックマーク - なけなしのやる気を返してくれElectricBoxめ! Twitterでつぶやく

なけなしのやる気を返してくれElectricBoxめ!

こいつは、みんなのなけなしのやる気と貴重な睡眠時間を喰い潰してくれますよ。
それでも良かったら続きをw
» 続きを読む

[Book] 30 November 2009 はてなブックマーク - 「差別と日本人」読了 Twitterでつぶやく

「差別と日本人」読了


野中広務と辛淑玉が「部落とは、在日とは、なぜ差別は続くのか?」をテーマに対談をしている。
一方的な被害者の視点や誰が悪いのかというような形ではなく、近代日本においての現象として、構造としての差別に焦点を当てつつ彼らの実体験を重ねており素直に読める内容である。
どのような構造で差別というものが生み出されていくのか、そしてそれがどのような結果をもたらしたのか、対談者はそれらにどのように携わってきたのかという視点であり差別が連鎖していくメカニズムをとてもわかりやすく説明している。

▽ 感想として
TwitterやTumblr、ブログや2ch、またはそのまとめサイトを見ているとどうしたって右傾的(というよりむしろレイシズム)な意見を見聞きし、どこかで自分もどこかしらそのような思想を取り込んでしまっているということを実感させられた。
それは例えば、ネットをやってると誰しも目にするような在日朝鮮人、被差別部落への侮蔑の言葉や怪文書(だれそれは在日とか)への無批判な精神的迎合などである。
これは本書の中で辛淑玉が指摘している行為そのものだ、

自分は他者より優位だという感覚は「享楽」そのものであり、一度その享楽を味わうと、何度でも繰り返したくなる。特に人は、自分より強いものから存在価値を否定されたり、劣等感をもたらされたりしたとき、自己の劣等意識を払拭するために、より差別を受けやすい人々を差別することで傷ついた心のバランスをとろうとする。

この構造は、とても良く理解できる。なぜなら、日々鬱憤がたまり自身が苦しんでいる時(例えばブラック企業で疲弊しきっているとき)、真実かどうか自身では確認していない事実に基づいて会ったこともない在日朝鮮人や被差別部落、特定の宗教団体、生活保護と母子加算を受けているどこかの女性、過剰な権利を要求している労務者をシンボルとして叩くのは快感だからだ。
ただのイジメの構造を義憤や公憤、愛国心に置き換えられるので後ろめたさもなくさらに気持ちが良い。
本書は、自分の中にあるそういう下劣な部分を強く認識される一冊であった。

[メモ] 25 November 2009 はてなブックマーク - ExcelをVB.NETからcloseする方法 Twitterでつぶやく

ExcelをVB.NETからcloseする方法

友人が困っていたので私も興味から調べてみました。
現象としてはVB.NETからExcelを開いて色々したあと閉じるとExcelのプロセスが残留するというものです。

下記のサイトがもっとも良いかも。
50 Ways to Kill Excel
http://www.devcity.net/PrintArticle.aspx?ArticleID=239

前置きにも
"How do I kill Excel" is a very common question asked in development forums and answered hundreds of times.
と書いてありますが、かなりポピュラーな問題のようです。
COMとか詳しくないのですが、外部リソースの終了処理の際にGCによる.NET側の開放とのタイミングの問題で上手にリソースが開放されてないために起きるようで、正規の手順を踏んでもダメな場合はもうこれはKillするしかないみたいですね。

で、大まかな流れとしては、ちゃんと開いて、ちゃんと閉じる。これを試して無理なら強制終了だ!そうです。
Excel Inception
 1. Open Excel
 2. The MAIN Sub
Excel Closure
 1. Ask Nicely
 2. COM Interface Management
 3. Garbage Collection and Memory Management
Excel Force-Kill
 Kill the Process

最後のForce-Killのところには、こんな一文もw
In most cases ... you need to kill a particular instance of Excel

[メモ] 20 November 2009 はてなブックマーク - ChromiumOS(GoogleChromeOS)の構築 Twitterでつぶやく

ChromiumOS(GoogleChromeOS)の構築

ついにGoogleのChromeOSが発表されました。
http://dev.chromium.org/chromium-os

まあ、どういうものかは上記から見てもらうとして、とりあえずBuild Instructions (The Chromium Projects)にしたがって構築してみました。

▽ 環境
Ubuntu9.04(64bit)
Ubuntu8.04(linodeのVPS、32bit)

▽ ビルドの流れ
1: 各種ダウンロード
ChromiumOSのソースコード/Chromiumのバイナリ
2: ローカルリポジトリ構築
3: chrootでBuild環境に切り替え
4: パッケージ構築
5: カーネル構築
6: イメージ構築

▽ ビルドの時の簡易手順(飽くまでも参考、ちゃんとドキュメント読むこと!)
・前準備、作業は全て自分のホームディレクトリ
wget http://build.chromium.org/buildbot/archives/chromiumos-0.4.22.8.tar.gz
tar xfz chromiumos-0.4.22.8.tar.gz
ln -s ./chromiumos-0.4.22.8 chromiumos
wget http://build.chromium.org/buildbot/snapshots/chromium-rel-linux-chromiumos/32528/chrome-linux.zip
mkdir -p ~/chromiumos/src/build/x86/local_assets
cp ./chrome-linux.zip ~/chromiumos/src/build/x86/local_assets/chrome-chromeos.zip

・構築環境の準備
→ 例えば中国とかでGFWの内側にいる人は任意のProxyを通さないとmake_chroot.shで失敗するので、export http_proxy="http://****:***"とかでProxyを設定しておかないとダメです。
cd ~/chromiumos/src/scripts
./make_local_repo.sh
./make_chroot.sh

・構築環境へchroot
./enter_chroot.sh

---以下はchroot環境中での作業
・任意のローカルアカウント名、共有ユーザのパスワードの設定
( cd ../platform/pam_google && ./enable_localaccount.sh ローカルアカウント名 )
./set_shared_user_password.sh

・ビルド
./build_platform_packages.sh
./build_kernel.sh
./build_image.sh

---chroot終了
exit

・VMwareのイメージ作成
→ ビルドマニュアルには書いてないけどsudo apt-get install qemuしないと失敗します。
./image_to_vmware.sh --from=~/chromiumos/src/build/images/999.999.32309.213245-a1

・USBディスクのイメージ作成
→ 2GBだとギリギリ足りないので、まあ4GB程度あると良い。下記はUSBストレージが/dev/sdcの場合。
./image_to_usb.sh --from=~/chromiumos/src/build/images/999.999.32309.213245-a1 --to=/dev/sdc


▽ 中国在住の人向け:GFWをProxyで回避する場合
ROOTイメージ内の下記ファイル
/usr/bin/chromeos-chrome

にて--proxy-server=host:portオプションを指定すれば良い。

[メモ] 23 October 2009 はてなブックマーク - Ubuntu9.04のkernel更新後、音が出なくなった。 Twitterでつぶやく

Ubuntu9.04のkernel更新後、音が出なくなった。

自動更新によりUbuntu9.04のkernelを2.6.28-15-genericから2.6.28-16-genericへ更新したら、再起動後から音が出なくなってジジジッってノイズが聞こえるだけになってしまった。

スペック
▽SOYO SY-N8V-RL
MCP78V、いわゆるGeForce8100系
▽SoundChip
Realtech ALC662
aplay -l の結果は下記
カード 0: NVidia [HDA NVidia], デバイス 0: ALC662 Analog [ALC662 Analog]
▽カーネル
2.6.28-16-generic

結論から言うと下記で音が出るようになる。(モジュールのデフォルトのポート設定でも変わったのかな???)

サウンドポートの設定を追加する。これはM/Bによって違うが背面にジャックが3ポートの一般的な場合。
/etc/modprobe.d/alsa-baseの一番下に下記追加
options snd-hda-intel model=3stack-6ch

[@上海] 23 October 2009 はてなブックマーク - The Bund (Oct, 2009) Twitterでつぶやく

The Bund (Oct, 2009)

散歩にいったついでに撮影。

[メモ] 27 September 2009 はてなブックマーク - M2とGAE/J Twitterでつぶやく

M2とGAE/J

下記にSDKのライブラリのインストール、POMの記述法あり。

Shalin Says...: Google App Engine and Maven
http://shalinsays.blogspot.com/2009/04/google-app-engine-and-maven.html

ちなみに私の場合はこんな感じです。
mvn install:install-file \
-Dfile=$ECLIPSE_HOME/plugins/com.google.appengine.eclipse.sdkbundle_1.2.2.v200907291526/appengine-java-sdk-1.2.2/lib/shared/appengine-local-runtime-shared.jar \
-DgroupId=com.google -DartifactId=appengine-local-runtime-shared -Dversion=1.2.2 -Dpackaging=jar -DgeneratePom=true

mvn install:install-file \
-Dfile=$ECLIPSE_HOME/plugins/com.google.appengine.eclipse.sdkbundle_1.2.2.v200907291526/appengine-java-sdk-1.2.2/lib/user/appengine-api-1.0-sdk-1.2.2.jar \
-DgroupId=com.google -DartifactId=appengine-sdk-1.2.2-api -Dversion=1.2.2 -Dpackaging=jar -DgeneratePom=true

mvn install:install-file \
-Dfile=$ECLIPSE_HOME/plugins/com.google.appengine.eclipse.sdkbundle_1.2.2.v200907291526/appengine-java-sdk-1.2.2/lib/user/orm/datanucleus-appengine-1.0.2.final.jar \
-DgroupId=org.datanucleus -DartifactId=datanucleus-appengine -Dversion=1.0.2.final -Dpackaging=jar -DgeneratePom=true


«Prev || 1 | 2 | 3 | 4 |...| 22 | 23 | 24 || Next»