一行で「textareaの高さを自動調節」

ちょっと前に少し話題になったこれ。
textareaのサイズを入力にあわせて調整するJavaScript
404blogの人が文字通り勝手に添削してたりしてそこそこ盛り上がってたみたいだけど、これは一行で書ける。


function x(elem){
if(elem.scrollTop > 0) elem.rows++;
}

これをtextareaのonkeyupで呼ぶだけ。
サンプル
もちろんjavascriptを本気で学びたい人はonkeyupなんて書いてはいけません。rows++もほんとはちゃんと書かないといかんけどまぁそれはそれ。

ブラウザが「やべーtextareaの高さ足ンなくなった!」つってスクロールが発生した瞬間に行数を増やしてやる。まともな義務教育を受けてきたらまず思いつかないようなやり方だけど、こういうのは20世紀に先人がとっくに編み出してる。最近jsやりだした人らは右クリックを禁止したりスクロールバーに文字を流していた時代の古典をもっと読んだらいいと思う。

一年くらい前にid:brazilの人が困ってたから教えてあげようと思ったけど当事は俺のホムペがなかったからダマで通しました。すいませんでした。

javascriptでバイナリを読む

http://blog.nihilogic.dk/2008/05/reading-exif-data-with-javascript.html
javascriptEXIFを読むって記事があって、どうせサーバサイドでJPEG読んでんだろと思ったらそうじゃなかった。XHRにJPEGのパス渡して読ませてるみたい。XHRでファイル読ませてresponseText返すだけじゃバイナリデータ返ってこないのは前に試したはずだったが・・・。


バイナリ読み込み部分の元ネタはここで、この部分が肝。


XMLHttpRequest.overrideMimeType('text/plain; charset=x-user-defined');
x-user-definedってのはUnicodeのプライベートエリア(0xF700-0xF7FF)にバイトデータ0x00〜0xFFをマップするらしい。こんなの知らねー!
やっぱりバイナリ好きな奴はおかしな奴が多くていい。さて何作ろっかなー

GoogleFaceSearch

Google AJAX Search APIにGimageSearchができたのはいつだったか知らんけど、GimageSearch.IMAGETYPE_FACESってオプションがあってこれで検索結果を顔っぽい画像に限定できる。
たぶんImage検索でURLのケツに「&imgtype=face」を付けるのと同じ効果だと思われる。


同一人物の顔ばかり大量に並べたらおもろいかと思って並べてみた。
なんかこんなジャケのレコードがあったような。


http://jackmaster.phac.cc/useless/gfs/


Google AJAX Search APIがアホな用途に使われてないのは結果を最大32件までしか出せないからだと思う。普通に使う分には32で十分だろってGoogleの人も言ってるんだけど普通に使うくらいだったら使いたくないのです。どうにか制限を越えようと思案した結果daterangeを使って茶を濁すことにした。
Googleで検索クエリにdaterange:[ユリウス日]-[ユリウス日]と入れるとインデックスされた日(不確か)の範囲を指定できるという、梅田望夫でも知らないようなマニアックな技がある。これ使って範囲変えて叩けばクエリも変わるからその範囲ごとに32件取れる。上のサンプルは範囲を7日周期でまわしてます。


/*
google face search

author:phac <phac*phac.cc>
license:NYSL

*/

google.load('search', '1');

function GFS(){
this.stepdate = 7; // daterange
this.loop = 4; // execute count per click
this.minWidth = 80;
this.minHeight = 80;

this.target = document.getElementById('results');
this.enddate = 0;
this.urlHistory = '';
this.init();

// events
document.getElementById('searchform').onsubmit = function(self){
return function(event){
return self.search.apply(self, [event || window.event]);
}
}(this);
document.getElementById('clear').onclick = function(self){
return function(){
self.init.apply(self);
}
}(this);
}

GFS.prototype = {
init : function(){
this.target.innerHTML = '';
this.enddate = Math.ceil(getJuliusDate());
this.urlHistory = '';
},

// GimageSearch and some options
searcher : function(){
var searcher = new GimageSearch();
searcher.setRestriction(GSearch.RESTRICT_SAFESEARCH, GSearch.SAFESEARCH_OFF);
searcher.setRestriction(GimageSearch.RESTRICT_IMAGETYPE, GimageSearch.IMAGETYPE_FACES);
searcher.setRestriction(GimageSearch.RESTRICT_COLORIZATION, GimageSearch.COLORIZATION_COLOR);
searcher.setNoHtmlGeneration();
searcher.setResultSetSize(google.search.Search.LARGE_RESULTSET);
searcher.setSearchCompleteCallback(this,
GFS.prototype.searchComplete,
[searcher]
);
return searcher;
},

search : function(event){
var keyword = document.getElementById('keyword').value;
if(!keyword) return false;

preventSubmit(event);// cancel submit

// change daterange and execute
var startdate = 0;
for(var i=0; i


僕はパリスヒルトンちゃん!

酒と切腹と女

缶ビールは高いやつがうまい。ヱビスプレミアムモルツ、熟撰の3つがとにかくうまい。少しランクの落ちるビールと比べて値段の差をはるかに超える価値がある。安いビールや発泡酒の類は酔っ払って味がわからなくなった頃に飲めばいい。

俺はビールよりも日本酒が好きなんだけど、こと日本酒となると安い酒が好みだ。純米大吟醸だとか特別醸造なんちゃらとか、そういう大げさな酒より紙パックに入ってるような辛口のシンプルなやつが一番うまい。どういうわけか親父もそのまた親父も同じ趣味で、これが血というやつなのかと思う。じいさんに至っては自分ブランドの酒を造ってしまうくらいの酒好きにもかかわらず昔から安い辛口の二級酒ばかり飲っていたそうだ。

どうも最近ビールばかり飲んでる気がするのでそろそろまた日本酒に戻ろうと思う。ある日突然切腹することになった時に腹からビールが出てきたらみっともないが、吹き出て眼前にたまった鮮血の海に日本酒がそろりと流れてきたら風流ではないか。

問題はあの紙パックだ。飲み終えた空の紙パックが部屋の片隅に置いてあると、その一角からなんともいえない哀愁が漂ってしまって実にモテない。4リットル大五郎とホッピーの空き瓶がある家は酒飲みの底辺だと思っていたがまだこっちの方がかわいげがあるんじゃなかろうか。私はモテたいのです。

urlsafe_b64 in javascript

URLにバイナリ渡すとかそういう気持ち悪いことをしたいときにbase64だと+と/が邪魔になる。
python屋は変態なのでurlsafe_b64encodeっていうネイティブの関数があって、+を-に、/を_にしてるらしい。
というわけでjavascript版をつくった。
(base64.jsをほんの少しいじっただけだけど)

http://jackmaster.phac.cc/useless/urlsafe_b64/urlsafe_base64.js


動作サンプル:
http://jackmaster.phac.cc/useless/urlsafe_b64/

セキュリティ厨に捧ぐ

IEの証明書一覧画面を一発で開く裏技。


ツール→インターネットオプション→コンテンツ→証明書
この3クリックが耐え難い苦痛であり、クリックの度にストレスのため頭髪が5本ずつ抜け落ちるような人にはこのコードの裏から後光がさして見える。


#include "stdafx.h"
#include

typedef void (__stdcall *FUNC)(long);
FUNC LaunchSiteCertDialog;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
HMODULE hLib = ::LoadLibrary("inetcpl.cpl");
if(hLib == NULL) return 1;
LaunchSiteCertDialog = (FUNC)GetProcAddress(hLib, "LaunchSiteCertDialog");
LaunchSiteCertDialog(0);
::FreeLibrary(hLib);
return 0;
}

昔書いたのをたまたま見つけたんだけどなぜこんなものを書いたのかまったく不明