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

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

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

2009-03-01から1ヶ月間の記事一覧

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: …

逆ポーランド記法

1 3 + 5 / 2 - 3 += 1.8のような式を計算する。整数の四則演算のみ対応。 RPN Calculator function calculateRPN(expression) { var result = 0; var stack = []; var i, c, n, m, x, y; var zero = 48, nine = 54; for (i = 0; i < expression.length; ++i)…

untitled

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

URI

locationと同じように使えるURIコンストラクタ。new URI("http://example.com/foo?q=bar#qxx").searchのように使う。 function URI(uri) { uri = String(uri); var parser = /^([^:/?#]+:)?\/\/(([^/?#:]*):?(\d*))?([^?#]*)(\?[^#]*)?(#.*)?$/; var m = uri…

abbrをルビとして表示する

Firefoxの拡張、 HTML Ruby for Firefox ではXHTML Ruby Supportのようにabbrをルビとして表示する機能はサポートされていないので、自分で書く必要がある。この拡張は更新頻度が高いのでソースコードを直接弄るのは避け、abbrをruby要素に変換する方式を取…

Worker

Workerに置いたWorkerの使用例について。 <html> <head> <title>Worker</title> <style> pre { white-space: pre-wrap; } </style> <script>window.onload = function () { var view = document.getElementById("view"); var worker = new Worker("pi.js"); worker.onmessage = function (ev) { view.textConte</head></html>…

クリックジャック

最近流行のクリックジャックについて、メモ程度にまとめておく。 一言で言うと、外部サイトのボタンをユーザが間違えてクリックしてしまうように仕向けるテクニックが、クリックジャックである。 クリックジャッキングってこうですか? わかりませんではifra…

Python風else付きforイディオム

breakした時にだけ実行されるelse節のイディオム。 outer: { inner: { for (var i = 0; i < 10; ++i) { continue; } break outer; } alert("else clause"); } alert("hello!"); hello! outer: { inner: { for (var i = 0; i < 10; ++i) { break inner; } bre…