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

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

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

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

Hit-a-HintをパクってGreasemonkeyスクリプトにした

細かい使い勝手が悪いからまだイマイチだけど、一応は動く。 // ==UserScript== // @name HaH_modoki // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // ==/UserScript== var START_KEY=102;//fを押すと開始 var COLOR='white'; var …

getBoundingClientRect()を使って要素の絶対座標を求める

追記:どうやらnowa サービス終了のお知らせで既出だった模様。ページが見つかりません | Mozilla Developer Networkを使って簡単に、絶対座標を得ることができる。 offsetParent辿っていってoffsetWidth足したりしなくていいので手軽。 function getElement…

分割代入とfor eachとAutoPagerize

ページが見つかりません | Mozilla Developer Networkを使うと、for eachでオブジェクトから必要なものだけを取り出せる。たとえば、AutoPagerizeのjsonからlocation.hrefにマッチするものを取り出すというのが簡潔に書ける。 下のGreasemokeyスクリプトでは…

livedoor ReaderのShift+Zを改造してコンパクトにしたりするGreasemonkey

追記:GreasemonkeyのCSSを微調整した。 Ctrl+Shift,Shift+Ctrlのショートカットを削除。Firebugのショートカットキーがうまくいくようになる。 Shift+Zの2番目のモードを変更してよりコンパクトにする。ついでにデフォルトを2番目のモードにしておく。 jとk…

class名を追加したり削除したり

スペースがたくさんあってもブラウザが勝手にきれいにしてくれるから、下のような感じでオッケー。 HTMLElement.prototype.hasClassName=function(className){ return this.className.split(/\s/).indexOf(className)!=-1; } HTMLElement.prototype.addClass…

非同期難しい

両方の処理が終わったら関数を実行したい。 function get(url,callback){ with(new XMLHttpRequest){ open('GET',url,callback); send(null); if(callback) onload=function(){callback(this.responseText)}; else return responseText; } } get(location.hr…

wedataのデータをどれくらい信用するか問題

wedataの情報を元に、完全に情報を消しちゃうってのは危険な気がしてきたので修正した。つまり、消すか半透明にするかを、wedataとソース直書きで別に設定できるようにした。 初期値は、wedataが半透明、直接書いたのを完全に削除。まあいい妥協策だと思う。…

getElementsByClassNameの代替

var getElementsByClassName=document.getElementsByClassName? function(className,root){ return Array.slice((root||document).getElementsByClassName(className)); }: function(className,root){ return className.split(/\s/).reduce(function(matched…

FilterinGoogleのバグ修正や機能追加

バグの修正: AutoPagerizeで継ぎ足ししたページが全部削除されてしまう単純なミスの修正 wedataのurlの正規表現に、iやgなどのオプションを設定できなかったバグの修正 追加した機能: フィルタリングしないサイトを設定できるようにした Greasemonkeyのメニ…

Google検索結果をフィルタリングするFilterinGoogleというGreasemonkeyスクリプトを作りました

追記:バグの修正をしました。 最新のスクリプトは[FilterinGoogle] - 素人がプログラミングを勉強するブログからチェックしてください。センスの無い名前ですが、作りました。 wedataの404 Not Foundかスクリプト本体に自由にフィルター規則を追加できます。…

Operaでも細かくユーザーCSSを指定できるようにするUserScript

OperaではFirefoxと違って、ドメインより細かい単位でユーザーCSSを指定することができない。 // ==UserScript== // @name bodyClassName // @namespace http://d.hatena.ne.jp/javascripter/ // @include http* // ==/UserScript== document.body.className…

フェードイン、フェードアウトのエフェクト

/* animate({ element: HTMLElement, style: String, end: Number, //option begin: Number, time: Number, quality: Number }) */ function animate(property){ var element=property.element; var style=property.style; var begin=property.begin||getCom…

$xは重い

$xは微妙に重い。$x自体は重くないけど、その後にforEachを使ったりすると重い。$xがいったんdocument.evaluateをした結果をループで舐め回して、また$xの結果をforEachだとかなんだとかでループで舐めまわすのでループが2重になってしまう。 console.time('…

CSSセレクタをXPathに変換して要素を取得するgetElementsBySelectorを作った

つかれた。 (function(){ var regex=/(\w+|\*)?(?:([.#])(\w+))?(?:\[(\w+)((?:[=~^$*|])?=["'](\w+)["'])?\])?(?:(?::([\w-]+)(?:\((.*?)\))?)?)?([ >+~,])?\s*(.*)/; var xpath_snippet={ '.':'contains(concat(" ",normalize-space(@class)," "), " $CODE…

nameプロパティが不可解な動きをする件

Googleの検索語句の入力欄(input要素)にアクセスするとき、 document.f.q という感じでアクセスできる。 で、その要素のnameプロパティを書き換える。 document.f.q.name='foo'; 書き換えた後にもなぜか document.f.q; document.f.foo; の両方の方法でアク…

コラッツの問題のブックマークレット

コラッツの問題 - Wikipediaのアルゴリズムにしたがってひたすら計算をする。 javascript:for(var x=0;x<20;x++)for(var y=0;y<3;y++)(function(){var span=document.createElement('span');with(span.style){position='fixed';top=x*20+'px';left=y*160+'px…

マウスの位置をcanvas要素で左上に表示する

var canvas=document.createElement('canvas'); canvas.width=Math.floor(window.innerWidth/10); canvas.height=Math.floor(window.innerHeight/10); with(canvas.style){ outline='1px solid black'; backgroundColor='white'; position='fixed'; top='0px…

リテラルと括弧

ちょっとしたメモ。 ({ a:function(){alert('foo')} }).a() とすると、アラートが表示される。()の中を外から参照できないから、適当に名前をつけて使い捨てすることもできる。 つまり、下のようにすればaがarguments.calleeと同じような役割を果たす。外か…

1バイト文字にマッチする正規表現を使ってバイト数のカウント

1バイトっぽい文字にマッチする正規表現は /[ァ-゚ -~]/ でいいのかなぁ。 function getBytes(str){ var regexp=/[^ァ-゚ -~]/g; return str.match(regexp).length+str.length; } getBytes('あいうえおカキクケコサシスセソァあぁ!"#$%&()=3');//35 とりあえずこの例だと意…

Arrayを拡張(flatten,max,min,sum,uniq,first,last)

Array.prototype.max=function()Math.max.apply(null,this); Array.prototype.min=function()Math.min.apply(null,this); Array.prototype.sum=function()this.reduce(function(a,b)a+b,0); Array.prototype.uniq=function()this.sort().reduceRight(functio…

タイピングの様子を録画してあとから再生できるようにする

var typingRec=function(elem){ this.target=elem; } typingRec.prototype={ start:function(){ var str,time=new Date().getTime(); var self=this; this.data=[]; this.timerId=setInterval(function(){ if(str!=self.target.value) self.data.push( [new …

textareaの高さを自動調整

404 Blog Not Found:javascript - 勝手に添削 - textareaの高さを自動調節を参考に、 function resize_textarea(elem){ elem.style.overflow='hidden'; elem.addEventListener('input',function(e){ var lines=e.target.value.split('\n'); e.target.rows=li…

p56 練習問題

(define (length lis) (if (pair? lis) (+ (length (cdr lis)) 1) 0 ) ) (define (filter proc lis) (if (proc(car lis)) (car lis) (filter(proc (cdr lis)) ) ) ) あれこれじゃぜんぜん駄目だ。もう少し読んでから解く。

p50練習問題

p50: (fold cons '() '(a b c d e)) ;'(e d c b a)consはリストをくっつけるもの。foldはJavaScriptで言うArray.reduceと似たようなもの。

Gaucheを勉強する

「プログラミングGauche」という本を買ってきたので、それを使って勉強する。とりあえずHello,world。 (print "Hello,world")

このブログのタイトルを変えました

そろそろJavaScript以外にもやろうかなと思ったので、タイトルを「素人がJavaScriptを勉強するブログ」から、「素人がプログラミングを勉強するブログ」に変えました。素人がプログラミングを勉強するブログにJavaScript関連だけを集めたRSSがあるので、Java…

setTimeoutで実行する関数に複数の引数を渡したい

var a=function(){ console.log(Array.slice(arguments)); } setTimeout(function(args){ a.apply(window,args); },0,[1,2,3]) みたいにやれば動く。 _setTimeout=function(){ var args=Array.slice(arguments); return setTimeout(function(){args[0].apply…

さっきのより高速なuniq()メソッド

Arrayのuniq()を作る - 素人がプログラミングを勉強するブログのやつと、下のやつのどっちがいいかな。 Array.prototype.uniq=function() this.sort().reduceRight( function(a,b){ a[0]===b||a.unshift(b); return a; } ,[]) var array=[1,1,2,3,4,1,null,n…

alertのブラクラに対応するスクリプト

(function(){ var _alert=alert; var flag=null; alert=function(){ flag=setTimeout(function(args){ _alert.apply(null,args); flag=null; },flag?1000:0,arguments) } })() 連続でalertが呼ばれても、1秒以上待ってから実行する。Greasemonkeyスクリプト…

Project Eulerを少しずつ解くことにした

ひまなときに更新する。 Project Euler - PukiWiki。初めのほうの問題は僕にもできそう。Firefox3+Firebugで。解答はないのかな? 本家のところに正解書き込むと他人のソースコードが見れるらしい。Problem1: var arr=[]; for(var i=0;i<1000;i++) if(i%3==0…