素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

2009-01-01から1年間の記事一覧

うたウガ歌えるカラオケ

の頃はMacのSafariやFirefoxでも動いてたが、うたウガ|うたウガサービス終了に伴う重要なお知らせにサービスが移動してからIE以外をサポートしなくなった。不便なのでこれを修正する。 sudo ./utauga-proxy.rbして、MacのHTTPプロキシをlocalhost:465にする…

jjencode、jjdecode

記号だけで任意のJavaScriptコードを実行できるようにするフィルタプログラムと、それを元のコードに戻すデコーダプログラム。ppencodeのような物。 特長: 日本語(UTF-8)に対応している 使用するグローバル変数が$_だけ クロスブラウザ 実用的ですね。 alert…

untitled2

書きました。 javascripter's gist: 125283 — Gist

JavaScriptで起こりがちなよくあるミスを早期発見する

「JavaScript 第5版」のp174のborrowMethods関数について。 function borrowMethods(borrowFrom, addTo) { var from = borrowFrom.prototype; var to = addTo.prototype; for (m in from) { if (typeof from[m] != "function") continue; to[m] = from[m]; }…

defer属性をSafariでも使う

Firefoxではscript要素のdefer属性がサポートされていて、これを使うと、DOM構築後に実行したいスクリプトのインデントを一段減らすことができて便利なのだが、Safariではサポートされていない。 <head> <script defer="defer"> document.body.style.backgroundColor = "#00ffff"; </script> </head> どう…

NilClassのnil?を再定義するとRuby(irb)が壊れる

Rubyじゃなくてirbの問題だった。コメント参照。 class NilClass;def nil?;false;end;end して、 nil.hoge とすると、落ちる。 % ruby -v [~] ruby 1.8.7 (2009-04-08 patchlevel 160) [i686-darwin9] % echo $OSTYPE [~] darwin9.0% irb [~] irb(main):001:…

irbでメソッド名をスペルミスしないように

で既出だったよう。 javascripter's gist: 110495 — Gist に書いた。 こんな感じに修正案を提案してくれる。 irb(main):023:0> fuckin_missing Did you mean this? method_missing => nil irb(main):024:0> やってることは単純で、グローバル関数をmethodsで…

配列のサイズとsizeof、配列の範囲外への参照

c

追記2:この記事は間違っている。サイズが0の配列はISO Cでは禁止されているので心配する必要はない。 追記:管理人の独り言(プログラミング関連) - 黒歴史集積所によると、この情報は怪しい。 C言語で配列の要素数を求める方法と、微妙な落とし穴について…

ドットファイル

javascripter/dotfiles · GitHubに置いてみた。 zshrcやvimrcを~/projects/dotfilesにまとめて、ファイル名からドットを消して、git initして、githubに上げた。 使うときは、cloneして、./setup.zshする。 setup.zshの中身は、こんな感じ。zshのスクリプト…

FirefoxがlocalStorageに対応した

Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.2a1pre) Gecko/20090423 Minefield/3.6a1preでは、sessionStorage、localStorage、globalStorageが存在する。 sessionStorageはページのセッション間、つまりリロードしても消えないがページ…

関数ポインタを返す関数

c

[09/04/21 23:17:19] qnighy/Acike: C言語で [09/04/21 23:17:31] qnighy/Acike: 関数ポインタを返す関数って [09/04/21 23:17:40] qnighy/Acike: どうやって宣言すればいいのかわからない [09/04/21 23:18:23] daiki chijiwa: っvoid * [09/04/21 23:18:38]…

indexOf

function indexOf1(xs, x, n) { for (var i = n || 0, l = xs.length; i < l; i++) if (xs[i] === x) return i; return -1; } function indexOf2(xs, x, n) { xs.push(x); for (var i = n || 0; xs[i] !== x; i++) ; xs.pop(); return i < xs.length? i: -1;…

JSONの検証

var JMatch = { type : { string: function (value) { return typeof value == "string"; }, number: function (value) { return typeof value == "number"; }, boolean: function (value) { return typeof value == "boolean"; }, object: function (value)…

近況とsplitについて

近況 高校生になった バイトはじめた Haskellはじめた はてなダイアリーの有料オプションに入った splitについて 正規表現や文字列を使って文字を配列に分けるsplitメソッドの挙動。 まず、JavaScript。 "".split(""); // [] 空の正規表現を使った "".split(…

handleEvent、addEventListener

addEventListenerの第二引数は、関数以外にも、handleEventをメソッドとして持ったオブジェクトも渡すことが出来る。 window.addEventListener("click", { handleEvent: function (e) { console.log(e); } }, false); また、この仕様を利用すると、 ({ run: …

enumerate

function enumerate() { var o = {}; Array.prototype.forEach.call(arguments, function (state, i) { o[state] = 1 << i; }); return o; } var state = enumerate( "A", "B", "C" ); var s = state.A | state.B; if (s & state.A) alert("A");

FizzBuzz

c

FizzBuzzの解法で、i % (3 * 5)をしているコードを結構見る。 3と5が互いに素だからたまたま単純な掛け算で出来るだけなので、きちんと3と5の最小公倍数が15であることが分かるように書くべきだと思う。 /* vim:sw=4 et */ #include <stdio.h> inline int is_divisibl</stdio.h>…

stack

c

#include <stdio.h> #include <stdlib.h> typedef union { int i; char c; float f; } _stack_value_t; typedef struct { _stack_value_t *value; int i; size_t size; } _stack_t; _stack_t *make__stack(size_t size) { _stack_t *_stack = (_stack_t *)malloc(sizeof(_stack_</stdlib.h></stdio.h>…

JSでrange

Pythonのrange(配列で返すほう)をJSで書く。 function range(from, to, step) { var i, a = []; if (typeof to == "undefined") { to = from; from = 0; } if (typeof step == "undefined") step = 1; if (step == 0) throw new TypeError("range() step arg…

うごメモはてなのXSS

うごメモはてな はてなのXSS脆弱性を発見したのでメモ。 http://ugomemo.hatena.ne.jp/movies?sort="><script>alert("XSS")</script>XSSは、クエリの値に xxx>\"'%0Aと入れて、Firefoxのソース表示でxxxで検索して壊れてる部分を探すとすぐ見つかる。 参考文献: http://d.hate…

@classmethod

Pythonの@classmethod等はデコレータと言うらしい。 def beforehello(f): print "Hello" return f class Foo(): @beforehello def foo(self): return 1 Foo().foo() # "Hello" # 1 beforehelloにdef foo…の関数が渡されて、その戻り値が実際のメソッドとして…

SmartLDR更新

LDRの画面を広くするGreasemonkeyスクリプト。 javascripter's gist: 3740 — Gist 一つ前のバージョンは javascripter's gist: 3740 — Gist 。 location.hrefとjavascript:プロトコルを使ったハックをevalInPage関数に分けた。 function evalInPage(fun) { l…

シェル

c

を参考に作成。ソースがだいぶ古いようで、getsをfgetsに直したりしないとコンパイラが警告を出す。 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> #include <strings.h> int main (int argc, char *argv[]) { pid_t pid; int *cstatus; char cmd[256]; printf("></strings.h></stdlib.h></sys/wait.h></sys/types.h></unistd.h></stdio.h>…

正規表現の文字クラスの重複を削除する

s?https?://[-_.!~*'()a-zA-Z0-9;/?:@&=+$,%#]+ Perlメモ の文字クラス部の範囲が重複していたので、重複を除去して短くしてくれる関数を書いた。ASCIIの範囲のみ対応。 function optimize(range) { var ascii = new Array(0x7f); var i, begin, end; var re…

ワイルドカード

c

そんなに難しくなさそうなのに、思いのほか大変だった。こういう場合はassert.hを使ってきちんとテストすると安心。 #include <assert.h> int matches(char *pattern, char *text) { do { switch (*pattern) { case '?': text++; break; case '*': return matches(patt</assert.h>…

アダルトサイトをブロックするGreasemonkeyスクリプト

有害っぽいサイトにアクセスすると、 のようにぼかしをかけて見えなくする。未成年の僕は是非入れるといいですね。 インストールするとWebサイトを見るたび「調べる」ウェブサイトのカテゴリ登録を確認|ネットスター株式会社にアクセスするので、セッション…

大量の同じ画像の表示

画像周りの速度メモ - #生存戦略 、それは - subtech 大量に同じ画像を表示したいとき - 0xFF もっと高速にする方法。 background-repeat and clientX <html><head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta charset="utf-8"> <title>background-repeat and clientX</title> <style type="text/css"> #star{ width:…</meta></meta></head></html>

忍者アクセス解析をブロックする

Adblock Plus用。 /^http:\/\/\w+\d+\.(?:k(?:a(?:g(?:e(?:(?:nnotuk|bo-sh)i\.com|-t(?:sun|or)a\.com|chiyo\.net)|inawa\.jp)|n(?:(?:-(?:suk|b)e|e-tsugu)\.com|(?:ashibari|paku)\.jp)|r(?:a(?:k(?:uri-yashiki|asa)|matu)\.com|ou\.jp)|c(?:houfuugetu\…

forのブレース

c

#include <stdio.h> int main(int argc, int argv) { int i; for (i = 0; i < 10; ++i) { int i = i; printf("%d\n", i); } return 0; } % ./a.out 4096 4096 4096 4096 4096 4096 4096 4096 4096 4096 % 未定義値が表示されるみたい。無限ループにはならないのでブロ</stdio.h>…

自動伸縮するテキストエリア

Page Not Found – 404のtextareaをcloneする方法は微妙なので、別の方法を考えた。全角文字や行を減らすのにも対応している。優れたUIは全てのサイトで使えるべき。GreasemonkeyだとDOMNodeInsertedをフックするのが面倒なのでXBLにした。 userContent.css: …