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

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

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

2008-11-01から1ヶ月間の記事一覧

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;' } …

文字列を少し間違えた感じに変換する

def fake_string(str) str.split(//).map{|s| rand < 0.3 ? s.tr( 'abcdefghijklmnopqrstuvwxyz', 'odrbafanlibinmeqpnzjvyvxus') : s }.join('') end puts fake_string('digital native') # => "diaitai nojiva" ハッシュテーブルをつくらずString#trを使っ…

Hash#method_missing

h['hoge']はちょっと長いなと思って、JavaScriptみたいに、キーが単純な場合はh.hogeやh.hoge = :valのようにできるようにしてみた。 class Hash def method_missing(name, val=nil) if name[-1] == '=' self[name.to_s[0..-2].to_sym] = val else self[name…

循環参照を含むオブジェクトのディープコピー

function deepCopy(orig) { var clone = {}; return (function (orig, clone, visited, ref) { for (var k in orig) { var v = orig[k]; if (v instanceof Object) { var i = visited.indexOf(v); if (i == -1) { var o = {}; visited.push(v); ref.push(o);…

シングルクォートもきちんとエスケープする

追記2:2007-10-11 - hoshikuzu | star_dust の書斎を見ると、下に書いてるような対策では不十分なようだ。 追記:エスケープすべき文字は、Re: JavaScript内(文字列)にデータを出力する場合の適切なエスケープ手順|freeml byGMOなどを参考に。シングルク…

Array#unique

class Array def unique ret = [], done = {} each{|i| unless done.key?(i) done[i] = :done ret.push(i) end } return ret end end Rubyおもしろいなあ。ハッシュのキーにオブジェクトも指定できて、selfがスコープチェインに入ってる。 Array#uniq!みたい…

AutoPagerize for SeaHorseのSITEINFOをJSONに変換するRubyスクリプト

AutoPagerize for SeaHorseをwedata互換形式に変換する - 素人がプログラミングを勉強するブログをRuby使って書き直した。RubyのオブジェクトをJSONにするのライブラリはRuby 用 JSON パーサーを更新、 JSON への変換も追加 - WebOS Goodiesを使っていて、si…

ArrowをWebページに読み込むGreasemonkeyスクリプト

ArrowじゃなくてjQueryでもいいけど、下のようなものを動かしておくとFirebugのconsoleで動かせるようになって便利。 // ==UserScript== // @name ArrowLoader // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // @resource script ht…

Object#tap

RubyのObject#tapがすごく便利。tapかわいいよtap - (rubikitch loves (Emacs Ruby CUI Books))に書いてある。これを使うと、selfを返さないメソッドを使ってもチェインできる。JavaScriptだと、こんな感じ。 Object.prototype.tap = function (fn) { fn.cal…

__proto__ = null

__proto__プロパティにnullを代入すると、Object.prototypeのメソッドを継承しないクリーンなオブジェクトを手に入れることができる。 var o = {__proto__: null}; console.log(typeof o.toString); // undefined console.log('__proto__' in o); // false c…

今日のFirebugパッチ

console.log.call(null, 'hoge'); のように、thisをconsole以外にした時にthis.notifyFirebugが存在しないというエラーになるので、それを直す。 --- consoleInjected.js.backup 2008-11-04 22:17:10.000000000 +0900 +++ consoleInjected.js 2008-11-04 22:…

エディタで編集するだけでhtmlファイルをリロードするJavaScriptライブラリ

追記:最速インターフェース研究会 :: Firefoxでの開発を高速化する自動リロードスクリプトで既出でした。デモを 2008-11-03_1209 - javascripter's library に置いた。 ライブラリ本体は javascripter's gist: 21788 — Gist にある。 (function () { var la…

引数の束縛、順序入れ替え

Function.prototype.cut = function (order) { var self = this; return function () { var args = []; order.forEach(function (i, j) { args[j] = this[i]; }, arguments); return self.apply(null, args); }; }; Array.cut([1, 0, 2])('b', 'a', 'c'); //…

インデントを除去する

a b c a dを、 a b c a dのようにする。問題は単純なのに、きれいに書こうとすると難しいな。 function stripIndent(str) { var strs = str.split('\n'), a = []; for (var i = 0; i < strs.length; ++i) { var s = strs[i]; var n = s.match(/^\s*/)[0].len…