愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

JavaScript

JsDocにやさしいJSの書き方

最近、比較的真面目にJsDocを書くという機会があったので。 (※この記事の前提はJsDoc 3.2.2です) JSで適当に名前空間的なものを切ってコードを書いていくと、 /** * @class /* function Klass() { } Klass.prototype.foo = function () { }; my.name.space.K…

初めて真面目にChrome extension作ったのでチラ裏メモ

まだ公開してないけどね。 デスクトップ自体のアイドル(ユーザ操作がない)状態やロック状態はchrome.idleで取れる。ユーザ操作がないと判断するまでのtimeoutも自分で決められる。最短15sec。 Chrome自体からフォーカスが離れたかどうかはchrome.windows使…

2014年にもなってWebページをまともに印刷する方法も知らない俺たちは(あるいは、とあるウェッブエンジニアの闘いの記録)

前略、window.printという関数をJavaScriptから呼び出せば、めでたく印刷ダイアログが表示されて、今目の前に表示されているウェッブページを印刷することが出来るわけだ。 が、とりあえずこの機能をそのまま使うとおかしい。何やら色々おかしい。media="pri…

Chrome extensionでclipboardに文字列をコピー (2014/01/26時点)

なんか、やろうと思ってググったらみんな色々なこと書いてて何が正しいのかよくわからん!ムキー!ってなったので同じような人を救うために2014年1月時点での方法をメモ。あまり大した内容ではない。 manifest.json 現時点で必要なのは "clipboardRead" とい…

そろそろcreateObjectURLについてひとこと言っておくか

と思ったんだけど、書こうとしていたことは下の記事におおむね書いてあったので俺が一言いう必要はなかった。 createObjectURLとは何か? - NullPointer's Blog 新しめのAPIでURLを期待されるような場面では、createObjectURLで得られるBlob URLが使えるかど…

DOM Level 0 (ドラゴンボール・オラ・もて男・レベル・ゼロ)

オッス!オラ孫悟空!最近流行りのHTML5を追いかけてモテを目指すのもいいけど、DOM Level 0も堅実な男性ってイメージで素敵だよな! ところで、iframeにnameを指定してDOM Treeに追加した上で、同じnameを第二引数に指定してwindow.openするとブラウザは新…

2013年 Android 2.3系 Advent Calendar一日目

Event.prototype.stopImmedidatePropagationがない => ない場合は使わないことで回避 Hoge.prototype.delete = function() {}; みたいな記述でエラー => deleteがキーワードだから引っかかっているのだろう。これは本当は俺の書き方が悪いのかもしれない。 H…

Gruntfileの分割は大人しく.jsでやれ、.jsonでやるなという話

海外のblog等の内容を紹介して何事かを述べた気になるのは好きではないのだが、現状おおむね以下のような感じでいいのではないかと思っている。http://www.thomasboyt.com/2013/09/01/maintainable-grunt.htmlまあもっと他にいい方法はあるかもしれないが、…

メールのURLをクリックしたくないです

なんかこう、メールアドレスを入力させて、メールに書いてあるリンクをクリックしてユーザ登録してね!みたいなサービスがあるじゃないですか。ああいうのを自動化したい時って、もちろんPOP3とかでメールを取りに行ってもいいんだけど、GmailならGoogle App…

なんとかScriptがあと何個出てこようとあなたがブラウザ上でまともに動くコードを書けるようにならないワケ

JavaScriptよく分からないです><と言っている人はだいたい以下の要素のうち自分が何を理解していないのか分かっていないしそれら個別の要素についてちゃんと勉強する気もないのでJavaScriptにtranslateされる言語が今後いかに増えようともブラウザ上でまと…

Gruntをようやく使ってみた

Gruntってアレですね、JSでホゲホゲっと設定ファイルを書いてJSとかCSSのファイルをminify/unifyとかするヤツです。最近よく聞くので、機会があったら使ってみようと思っていたのですが、最近とあるウェッブページをPlay!Frameworkで作ってみたりしていたの…

canvasのgetImageData(), toDataURL()などにおけるCORSについて

僕のcanvas力はいまだ中学生男子並みなので、そもそもcanvasの一部のAPIにSame Origin Policy的なものが適用されることすら今日まで知らなかったのですが、どうやら違う生成元がsrcに指定されているimgをputImageData -> その描画領域をgetImageDataしようと…

Maintainable JavaScriptにみる、コンテキストとアプリケーションロジックの分離

個人的なこと 読書はいわゆる自己投資?にあたるものなのでケチるもんじゃないよなあ、とは思いつつも可能なら安い値段でより大きなリターンを得たいよねー、ということで最近はOreillyの半額セールに目を光らせるようになりました。英語は「拾い読み」がし…

ES5 features on iOS/Android's default browser

iOS, Androidのめぼしいバージョンのデフォルトブラウザについて、ECMAScript 5 compatibility table を使ってES5の対応度合いを調べました。既にありそうだなーと思いつつパッと見当たらなかったので。 どれもエミュレータで調べたものですし、特にAndroid…

DOMContentLoadedに引っ掛けて初期化を行う外部スクリプトを、DOMが出来てからアレアレする

だいたい以下のような感じでうまくいくんじゃないかと思うけど、ちゃんとした検証はしてないので。WebKitでしかみてませんし。引数のtargetはwindowやdocument, scriptはsrcが設定されたscript elementだと思いねえ。(※イベントハンドラ内でevt.targetとかを…

Google Apps Scriptで個人サービスの超絶ゆるふわ監視

さくらのVPSにも微妙に置きたくないし、かといって自宅のPCとか論外。そういう場合には便利かもしれない。環境整えなくてもメール飛ばせるし。以下のscriptをHour timerのtrigger(cronみたいなもの)で一時間おきに回すだけ。 function doCheck() { var url…

メモ

こんなのあったんですねーhttp://matome.naver.jp/odai/2132892555765887301

続 のび太とwindow.gc on Android

http://d.hatena.ne.jp/zentoo/20120501/1335848528↑この記事で、WebView#setJsFlagsが@hideなので、window.gcを使えるようにできないよーって書いてましたがよく考えたら、@hideだろうがなんだろうがreflectionを使えば問題なく呼べるので、以下の様なコー…

Google Apps Scriptが気合入りすぎな件

https://developers.google.com/apps-script/Google Apps Scriptっていうのは、JavaScriptでコードを書くとそれがGoogle先生のサーバサイドで何しか解釈されて動いて、Googleの各サービスのオブジェクトを簡単に操作できるぞオウイエ!ってやつです。そこま…

Event handling with anon-func style on iOS / Android

JavaScriptでユーザからのイベントを受け取ってホゲホゲ、という処理は大体次のようなスタイルで書く。なお、jQueryとか使っていても概要は同じ。 el.addEventListener("eventName", function(evt) { // do something }, false); iOS appでこのようなイベン…

AndroidのWebViewについての発表資料とか

前のエントリと内容が被っていてアレなのですが、AndroidでWebView(+ addJavascriptInterface)を使った場合に発生しうる脆弱性などなどについて社内の勉強会で発表した資料を公開します。割と具体的な攻撃方法っぽいことも書いてあるので、良い子はやらな…

AndroidのWebView#addJavascriptInterfaceは基本使わない方がいい、っていう話

基礎知識 Androidアプリケーションで埋め込みブラウザのようなものを実現するためのViewコンポーネントであるandroid.webkit.WebViewには次のようなシグネチャでaddJavascriptIntefaceというメソッドが生えています。http://developer.android.com/reference…

window.gc on Android?

http://sites.google.com/site/devcollaboration/codesearchAndroidのソースを↑で検索していて見つけたhttp://tools.oesf.biz/android-2.3_r1.0/xref/frameworks/base/tests/DumpRenderTree/src/com/android/dumprendertree/TestShellActivity.java#136windo…

JSONPのエラーハンドリング(この記事の内容は結果としてエイプリルフールになりました)

※めんどくさい && アホの証拠として残しておくため 消しませんが、ここに書いた方法だと200以外の404とかに対応できないです。つまりダメです http://d.hatena.ne.jp/NeoCat/20110206/1296934235これって結局、根本的には JSONPにおいては、200であっても「J…

Gmailのマルチアカウントを切り替えるためのVimpコマンソ

https://github.com/zentooo/rc/blob/master/.vimperator/plugin/gmail_switcher.jsつくった

Content Security Policy (CSP) についてちょっと調べたことのメモ

http://blog.monoweb.info/article/2012031523.htmlしばらく前に↑のblogで記事になった、Content Security Policy(以下CSP)についてのメモ。ちなみにCSP自体の仕様については、 W3Cのdraft (https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/cs…

LimeChat for Macのアレ

思い出した。社内の掲示板にはだいぶ昔に書いたんだけど。LimeChat for Macはユーザ定義のCSSやJavaScriptで見た目や振る舞いをカスタマイズすることが出来る(Preferences -> Theme)。JavaScriptのコード内でlocation.hrefを取ると、file://で動いていること…

jQueryオブジェクトを入れる変数の名前を$で始める話

前提として、何度も同じelementを操作するのに毎回 $("#your complicated.selector").css({"...":"..."}); とか書いてる奴はくたばれ。それは、参照するデータが同じなのに毎回DBに問い合わせてるのと同じだぞ。 $で変数名を始めるのはなんでキモいか 僕がjQ…

mixiをしていたごく普通のOLが、何故NodeListというフィールドに舞い降りたのか?

エントリのタイトルを考えるのが面倒になったので、ホッテントリメーカーで作成もしくはホッテントリメーカーで作成されたかのようなタイトルをつけることにしました。 getElementHogeHogeが返すのはliveなNodeListで、querySelectorHogeHogeが返すのはstati…

メッセージングでまあまあ捗るかもしれない話

この記事はJavaScript Advent Calendar(オレ標準コース)の13日めのエントリイになります。 ちなみに家に帰った瞬間、マシンの時計がずれて12/14になってて、大分一人で焦りました。てへぺろ。ぺろぺろ。この記事の題材はJavaScriptにおけるメッセージング(…

クライアントサイドとサーバサイドのvalidationを共通化する(未遂)

http://d.hatena.ne.jp/antipop/20111101/1320164459これを見て、「JSでHTML5 form validationのruleをDOMから引っこ抜いて、JSON schema ( http://tools.ietf.org/html/draft-zyp-json-schema-03 ) に変換して、それをsubmitの直前にtype="text"なinputとか…

Android4.0にはHTML5 History APIが実装されていない

(※このエントリーは、「Androidのブラウザは本当のクソAdvent Calendar」の一日目の記事として書いています)12/2に発売予定のGalaxy Nexusにも搭載される予定のAndroid4.0ですが、なんと標準ブラウザにHTML5 history APIが「実装されていません」。2.2系、…

location.host部分だけを置き換えて、そっくり同じURLを新しいタブで開くためのVimperatorプラギン

Webサイトをつくっていると、だいたい最低でも * 本番環境 * 開発環境の2つくらいは環境があって、当然ながらどちらも別のホスト名で参照しているとおもうのだけど、開発とかテストの際に「このURLを開発環境のhostで開きたい!」とか「このURLを手元のVMの…

本当はそれなりに面倒くさいJavaScriptとhistoryとAjaxのお話

口上 historyとAjaxといえば、JavaScriptからある程度任意でhistoryのエントリをpushできるhistory.pushStateとか、history.replaceStateは既に大分有名になった感がある。素晴らしい未来では、全てのブラウザにpushStateが乗っていて「location.hashを使っ…

Webページに適当な個人的メモ書きを残すためのブックマークレット

YAPC::Asia 2011のタイムテーブル (http://yapcasia.org/2011/timetable.html) に、「みる」「絶対みる」「まあ見る」とかそういう個人的なメモ書きを残したかったのでつくった。http://dl.dropbox.com/u/439702/bookmarklet/memomo.htmlダブルクリックでそ…

Firebugのinspect用hint, contenteditable hint

特定の要素をFirebugでinspectしたい時に、いちいちその要素をマウスでクリッコするのがめんどくさいからつくった。 " firebug inspect mode hint js <

iPhone, Androidでの日本語入力監視メモ

DOM Level3で規定されているComposition Eventを使うと、IMEの入力開始 -> compositionstart, IMEで文字追加,変換 -> compositionupdate, IMEで変換確定 -> compositionend, という風にIMEによる英語以外の文字の入力をイベントとして受け取ることが出来るこ…

うんたらかんたら

プロファイラ(関数単位で出るやつ)でパフォーマンス測りたいときに、長い関数があると分かりにくくなっちゃうから function myLongFunction() { ... (function doAPartOfTheWork() { ... })(); ... } ってする、っていうのがHTML5 Rocksの記事に書いてあっ…

やったーJavaScriptの動くMySQLできたよー

※ネタです ※UDFです Mysql 5.1 Plugin Development作者: Andrew Hutchings,Sergei Golubchik出版社/メーカー: Packt Publishing発売日: 2010/08/30メディア: ペーパーバック購入: 1人 クリック: 45回この商品を含むブログ (2件) を見る しばらく積ん読してい…

Aardwolfにみるブラウザに頼らないブレークポイントの実装

weinreっていう、iPhoneやらAndroidやらの実機(別に実機じゃなくてもいいんだけど)で見ているWeb画面のJavaScriptをリモートdebugできるツールがあって、これは割と有名。http://alpha.mixi.co.jp/blog/?p=3248有名なんだけど、試してみると普通にブレーク…

あれやらこれやら

(前略)Log::HandyからData::UtilとClass::Loadへの依存を消した。Data::Utilは自動dumpしたいもの(scalar値)と自動dumpしたくないものの区別にのみ使っていたんだけど、会社で審議した結果「全てdumperに食わせればよくね?」ってことに。また、Class::L…

結局Jasmineで非同期のテストを書く場合にはどうするのがcoolなの…

waits(500)とかあんまりだし、でも調べてもなんかみつかんないので誰か教えて下さい...

JavaScriptが100ms以上実行されてると怒られるようにする

http://www.slideshare.net/nzakas/high-performance-javascript-2011わかりやすいスライドだなー、と思いつつ。1つのJavaScript job(わかりにくい表現だけど、event handlerとかtimerからキックされるJS code)の実行は目安として100ms以下に抑えましょう…

iPhone/Androidにタッチ!

stats.js (https://github.com/mrdoob/stats.js) という、JavaScriptでfpsもどきの値を出すライブラリをiPhone/Androidで試していた時に気づいたんだけど、iPhone/AndroidのWebKitではデフォルトのスクロール中はsetIntervalの監視が無効になっているっぽい…

iPhoneをhtmlなプレゼンのリモコンにするための何か

会社でid:gfxさんがWebSocketを使って夢が広がるエクストリームなプレゼンをしてくれたので、海外の空気を読まずに作ってみました。https://github.com/zentooo/SkyWalk端的に言うと、Socket.IOを通じてリモコンとなるiPhone/Android(?) のブラウザでキャッ…

なぜGoogle Closure LibraryがDOMContentLoaded相当を待つための機能を提供してないかっていう話

あれ、これ前に書いたっけ。http://groups.google.com/group/closure-library-discuss/browse_thread/thread/1beecbb5d6afcb41?pli=1http://stackoverflow.com/questions/2024018/using-domcontentready-considered-anti-pattern-by-google/2024101#2024101 …

iPhone/Android向けのselector-based libraryを実装しての色々(3) - pluginとかtestとかdocumentとか

前回の続き。 plugin機構とか Riddle.jsにはplugin機構があります、と書くとなんだかカッコよさげに聞こえるが、それは結局外部にエクスポートされているシンボルのうち2つ(rとr.fn)に関数を生やすとpluginっぽいことが出来ますよ、というだけの話にすぎな…

iPhone/Android向けのselector-based libraryを実装しての色々(2) - 実装編

前回はほとんどライブラリの紹介しか書いてなかったので、今回の内容は得られた少々の知見とか実装中に考えてたこととかです。 環境を限って、ある程度の割り切りを行えばselector-basedなオレオレライブラリを書くのは大して難しくない、ということ どこま…

iPhone/Android向けのselector-based libraryを実装しての色々(1)

selector-based libraryってまず何やねん、って話ですが、いわゆる$("#id")みたいにcssセレクタでelementをモリっと引っ張ってきて、そのwrapされたelement集合に生えてる関数でいろいろやることがメインの目的とされてるJavaScriptライブラリのことを僕はそ…

localStorageとかsessionStorageとかのアレ

現状のlocalStorageとかsessionStorageは、valueとして文字列しかsetできない実装ばかりなので、アプリで使うならsetする時にJSON.stringifyして、getする時にJSON.parseするようなラッパーを書かないと無理とまでは言わないがめんどくさい。また、 localSto…