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

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

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

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

IEでCtrl+Aで画像が青っぽくなるのをシミュレートする

IE Ctrl+Aに置いた。 IE向けのトリック画像を、Macユーザなど、IEが使えない人でも見れるようにする。 やってることは単純で、画像の上に、透明と青を交互に描いたgif画像を用意して、指定された画像の上にdivのbackground-imageとして表示するだけ。 locati…

変数のスコープ等

Pythonのローカル変数のスコープはどうなってるのか。 def make_counter(i=0): def succ(): tmp = i i += 1 return tmp return succ counter = make_counter() conter() """ Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in s</stdin></module></stdin>…

スピードダイアル

Quickchoice - a Speed Dial clone for css transform supporting browsersを見て、iframeのページの幅に合わせてサムネイルをフィットさせられるといいと思い、書いた。 Firefoxのnightlyだと上のようになる。 <html> <head> <title>SpeedDial</title> <style> body { overflow: hidden; } #sp</head></html>…

.screenrc

term xterm-color startup_message off vbell off defkanji utf-8 defencoding utf-8 defscrollback 1000 #caption always "%{= yb} %-w%{=b dr} %n %t %{-}%+w %= %{=b yk} [%l] %{=b yb}%y/%m/%d(%D) %{=b ym}%c" caption always "%{=r dd} %-w%{=b dd} %n…

AAが貼ってあるページを自動判別してフォントをIPAモナーにするGreasemonkeyスクリプト

javascripter's gist: 38970 — Gist にスクリプトを置いた。 // ==UserScript== // @name FixAAFont // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // ==/UserScript== var xpr = document.evaluate('descendant-or-self::*[contain…

最新のFirefoxで最新のFirebugを使う

Index of /pub/mozilla.org/firefox/tinderbox-builds/mozilla-central-macosxから手動でダウンロードするのは面倒なので、なるべく楽に更新できるようにした。 javascripter's gist: 38595 — Gist からrubyスクリプトをダウンロードして実行すると、WEB::Me…

はてなダイアリーのデータを定期的にバックアップする

diary_backup/backup.rb #!/usr/bin/env ruby require "rubygems" require "mechanize" require "yaml" config = YAML.load_file("config.yaml") USER_NAME = config["username"] PASSWORD = config["password"] DIR = config["dir"] agent = WWW::Mechanize…

livedoorReaderのフィードをマルコフ連鎖で作ったワードサラダと入れ換えるGreasemonkeyスクリプト

0.5の確率でフィードのitemを、それを元にマルコフ連鎖で作ったワードサラダと入れ換える。 javascripter's gist: 37913 — Gist にスクリプトを置いた。 インストールすると、フィードのitemが下のような支離滅裂な文章になる。 MOONGIFT: &#187; PHP開発が…

イテレータ

Object.prototype.__iterator__を拡張する場合、その中でfor in構文を使うと無限に再帰してしまうので、下のようにする。 Object.prototype.__iterator__ = function __iterator__(isKey) { delete Object.prototype.__iterator__; for (var k in this) if (…

Ad4Uでどのサイトの情報が抜かれているかを調べる

javascripter's gist: 36272 — Gist にHTMLファイルを置いた。downloadのリンクからダウンロードして解凍してhtmlファイルを開くか、 Macだったら、 $ curl http://gist.github.com/36272.txt > ad4u.html && open ad4u.html とする。

FastladderでLDRのクローラを使うGreasemonkey

追記:console.logとかが残ってたので、gistのほうは直しておいた。 からインストール。 LDRの画面が狭くて嫌でFastladderに乗り換えようとしたけど、LDRと比較してクローラの巡回が遅くて困っていた僕のために。 // ==UserScript== // @name FastLDR // @nam…

XBLとuserContent.cssとGreasemonkey

追記:コメントでbindToUntrustedContent="true"が必要になったと指摘をうけたので追加 2015/3/21 userContent.cssに @-moz-document domain("reader.livedoor.com") { #right_body > .item { -moz-binding: url("ldr.xml#filter") !important; } } と書いて…

最後に更新されたファイルを調べる

こうすればいい。 require "pathname" Pathname.glob("**/*").sort_by {|f| f.mtime }.last

ブログシステムを作りたい

開発者向けのブログシステムを作りたい。まだデータ構造を考えている状態なので、HTMLに出力する時のエスケープは全くしていない。 index.cgi #!/usr/bin/env ruby require "erb" require "yaml" require "filter" class Entries @@count = 0 def initialize…

gitでドットファイルをバージョン管理する

.vimrcとかのドットファイルをgitで管理したくて、検索したら~/dot_filesに管理したいドットファイルへのシンボリックリンク作ったりしていて、面倒で諦めていた。 で、いい方法を見つけた。 まず、~に */* .zsh_history* .viminfo という内容の.gitignoreフ…

マスターキーでパスワードを管理する

マスターキーとドメインからhexdigestを作って、それをパスワードにする。誰かがやっていた気がする。 #!/usr/bin/env ruby require 'yaml' require 'digest/md5' require 'getoptlong' parser = GetoptLong.new parser.set_options( ["-h", "--help", Getop…

履歴管理(失敗)

dataスキームを使えば、戻るボタンを押した時に関数を呼び出したりできるようになるようだ。 iframeのcontentWindowにオブジェクトを登録しても、ガベージコレクションで消されてしまうようなので、window.parentを辿ることにした。 戻るボタンでいきなり複…

FizzBuzz

#!/opt/local/bin/ruby1.9 require "erb" print "Content-Type: text/html\n\n" ERB.new(DATA.read).run __END__ <html> <head> <title><%= Time.now %></title> <style type="text/css"> ol { list-style: none; } </style> </head> <body> <ol><% 1.upto(100) {|i| %> <li><%= if (i % 15).zero? "FizzBuzz" elsif (i % 3…</li></ol></body></html>

自分のHTTP_HOSTを返すCGI

CGIが動く環境を作ったので、試してみる。 こういうのはJSONPって言うのかな。 #!/usr/bin/ruby require "cgi" puts "Content-type: text/javascript\n\n" cgi = CGI.new fun_name = cgi["callback"].gsub(/\W+/, "") if fun_name.empty? fun_name = "callba…

再帰的な正規表現

Ruby1.9で使える再帰的な正規表現。 re = /(?<expr>\((?:\g<expr>|foo)\))/ p re =~ "((foo))" 数式にマッチさせようとして/^(?[+\-]?\d+(?:[+\-*\/]\(\g\)|$))/ってしたら駄目だった。むずかしい。</expr></expr>

CocProxy楽しい

を見て、 CocProxy – CodeRepos::Share – Trac を入れた。Livedoor Readerを高速化しようと思って、compat.0.3.4.jsをいじった。 --- compat.0.3.4.js.old 2007-03-20 15:59:34.000000000 +0900 +++ compat.0.3.4.js 2008-11-30 10:35:49.000000000 +0900 @@…

新はてなブックマークでj、kキーを押しっぱなしにして移動できるようにするGreasemonkeyスクリプト

リニューアルされたはてなブックマークではj、kキーで移動する機能が改悪されていて、キーボードを押しっぱなしにしてどんどんスクロールすることができない。それを直す。 // ==UserScript== // @name HatenaBookmarkJKHack // @namespace http://d.hatena.…

ブックマークページにハッシュ値みたいな物を表示するブックマークレット

http://b.hatena.ne.jp/entry/以下で使う用。 javascript: Array.forEach(document.getElementsByClassName('comment'), function (span) { if (span instanceof HTMLHeadingElement) return; span.textContent = 'Hash(0x' + Math.floor(Math.random() * 1e…

文字列がHTMLのタグ名かどうか調べる

var isKnownTagName = function() { var cache = {}; return function(tag_name) { if (tag_name in cache) { return cache[tag_name]; } var ret; try { ret = document.createElement(tag_name).constructor != HTMLUnknownElement; } catch(error) { ret …

オブジェクトシステム

(define *table* (make-eq-hashtable)) (define boot-object (lambda (object) (if (not (hashtable-contains? *table* object)) (let ((proto (make-eq-hashtable))) (hashtable-set! proto '__proto__ #f) (hashtable-set! *table* object proto))))) (def…

継続、ジェネレータ

だいたい感覚が掴めた。要するに、計算途中のまま一旦ブロック/関数を終了させて、あとで途中から計算を再開できるようにするための仕組みが、継続。計算するものを残したまま終了させれば、returnの代わりになるし、下のようにすれば、PythonのGeneratorを…

LDRの未読数を表示するブックマークレット

javascript:(function () { const USER_NAME = 'javascripter_'; var id = Date.now(), fid = '_' + id; window[fid] = function (n) { alert(n); delete window[fid]; document.body.removeChild(script); }; var script = document.createElement('script'…

インデントを除去する

インデントを除去する - 素人がプログラミングを勉強するブログの、Ruby版。 ヒアドキュメントを書く時に使える。 class String def unindent gsub(/^\s{#{ scan(/^\s+/).map(&:size).min }}/, '') end end str = <<-EOS.unindent <html> <head> <title>Hello, world</title> </head> <body> <p>Hello, w</p></body></html>…

prototype

+で継承、|でマージ。JavaScriptのprototypeチェインをハッシュで実装したもの。 require 'forwardable' class Prototype include Enumerable extend Forwardable def initialize(obj = {}) @scope = obj.dup @scope["__proto__"] = nil end def []=(name, v…

HTMLをエスケープするメソッド

Rubyist Magazine - あなたの Ruby コードを添削します 【第 1 回】 pukipa.rbを見て、正規表現とハッシュのキーの両方に同じものを書いている点が気になった。 module HTMLUtils ESC = { '&' => '&amp;', '"' => '&quot;', '<' => '&lt;', '>' => '&gt;' } …