サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
teramako.hatenadiary.org
Q. https://gist.github.com/teramako/858c448cb76cb8d309b0 A. https://gist.github.com/teramako/6317d057902b91c0dc1a ECMAScript6th仕様も佳境に入っていますし、そろそろクイズ的なものが出てきても良いのでは? → あまりなさそう。 → 作ってみるか。 ということで作ってみた。 Firefox Nightly上で実行してみたりしながら作ったのだけれど、仕様から読み取れる結果と差異があったりしてなかなか辛い。ES6対応を謳っているAltJS系は、こういうところまでサポートしているのかな…?(←全く試していない) ということで、回答の方は解答のつもりだけど自信がない部分がある。「お前、ここの仕様を読み飛ばしてるぞ!」ってのがあったら教えて欲しいなあ。
CVE-2014-6271を発端とする bash の脆弱性、いわゆる ShellShock って呼ばれている奴。環境変数に仕込んだ任意のコマンドを実行できてしまうってことから、CGI との組み合わせが取り沙汰されている。 その頃 sudo の設定の勉強をしていたので、ふと気になったのが、sudoの設定で環境変数を持ち越して使用することができる env_keep の設定。sudo で root としてbashを実行させれば、任意のコマンドを特権昇格して実行できちゃうんじゃ? というもの。 早速試してみた。 普通に実行したもの $ export ORACLE_SID='() { :;}; echo Vulnerability !!!' $ cat /usr/local/bin/testcmd #!/bin/bash -x id printenv ORACLE_SID $ /usr/local/
937855 - Implement ES6 Object.assign 仕様: 19.1.2.1 Object.assign ( target, ...sources ) 皆さん待望の、mixin をするメソッドである。 第一引数のtargetに、第二引数以降のプロパティの値を代入していく。 var obj = { foo: "FOO", }; var res = Object.assign(obj, { bar: "BAR" }, { piyo: "PIYO" }); obj.bar; // => "BAR"; obj.piyo; // => "PIYO" res === obj; // => true 代入されるプロパティは: ソースとなるオブジェクト自身のプロパティ(つまり、[[Prototype]]から継承したものは含まない) 列挙可能であること(enumerable属性がtru
924688 - Implement ES6 computed property names また、新しい構文。 オブジェクトリテラル中のプロパティ名部分に式を入れることができる様になる。 今まで var prop = "foo"; var obj = {}; obj[prop] = "FOO Property"; 今までは一旦オブジェクトを作ってから代入するしかなかったものが、 これから var prop = "foo"; var obj = { [prop]: "FOO Property" }; とできるようになる。 プロパティ名の部分に、[expr] と書く。 何が嬉しいの? まぁ、普通に便利ですね。 と、これだけではアレなのでもう少し書くと、ECMAScript6thになってSymbolという型が登場し特殊なSymbol型のプロパティを定義できるわけだが、このComputedPro
1039774 - Implement ES6 String.raw 仕様 12.3.7 Tagged Templates 21.1.2.4 String.raw TemplateLiteral の続き。 前回は、`(バッククォート) でくくることで、ヒアドキュメント的な複数行に渡る文字列の生成ができる事、${expression}で式の埋め込みができる事を書いた。 実は、func`...` という構文の追加もあり、funcを文字列の素となる値を引数に呼び出す機能もある。String.rawはそのためのメソッドだ。func`...`みたいなコードはTaggedTemplateと呼ばれている。 String.raw`Title: ${document.title}` // => "Title: hogehoge@teramako" // === `Titlte: ${document.tit
先日 Firefox Nightly で Symbol が実装されたわけだが、その使い道を考えていた。それで思いつたのが、Symbolを使えば迷惑を掛けずにプロトタイプ拡張ができるのでは、ということ。 こんな感じ。 "use strict"; { let keys = Symbol.for("teramako.Object.keys"), values = Symbol.for("teramako.Object.values"), entries = Symbol.for("teramako.Object.entries"); Object.prototype[keys] = function* () { yield * Object.keys(this); }; Object.prototype[values] = function* () { for (var key of this[
1021368 - Implement NoSubstitutionTemplate as described in ES6 draft 11.8.6 11.8.6 Template Literal Lexical Components ついにきた。 「JavaScript にはヒアドキュメントがない」などと言われてきた。そんなディスりとはおさらばだ。 JavaScriptの文字列リテラルは"や'でくくることだった。が、これらで複数行を実現するには少々面倒であった。 しかし、今回の実装でもう一つ、`(バッククォート)でくくるという表現ができるようになった。 var str = `a b c d`; と書けるようになる。 TemplateLiteralには他にも機能があるのだが、今回の実装はここまで。 最終的には、以下の様に、${}内に式を埋め込めたり、関数`...` という記述で関数に値を
904723 - Implement ES6 Array.from 22.1.2.1 Array.from ( arrayLike [ , mapfn [ , thisArg ] ] ) Array-like な値をArrayに変換するメソッドです。 引数は arrayLike: Array-likeなオブジェクト mapfn:(Optional) Array.prototype.map に渡すような function thisArg:(Optional) 同上 Array-likeなオブジェクトとは以下の様なもの @@iteratorのイテレータを持つもの lengthプロパティを持つもの lengthプロパティを持つものより、@@iteratorの方が優先度が高いので注意 使用例 思いつくものをテキトウに HTMLCollection, NodeList に対して、forEach, m
Firefox 29 向けにはてなブックマークアドオンを自分で修正 パッチ diff --git a/chrome/content/browser/15-CommentViewer.js b/chrome/content/browser/15-CommentViewer.js index 9edd1d1..875b246 100644 --- a/chrome/content/browser/15-CommentViewer.js +++ b/chrome/content/browser/15-CommentViewer.js @@ -15,7 +15,7 @@ elementGetter(this, 'commentFooter', 'hBookmark-comment-footer', document); elementGetter(this, 'listContainer', 'h
ES6になると、String.prototype.repeatのメソッドが追加されるわけだが、そのアルゴリズムとパフォーマンスを追ってみている。 ES6 String.prototype.repeat の仕様では以下の様な感じでシンプルな書き方をしている。 countが 0 より小さい、または 無限大である場合は RangeError count 0 ならば、空文字列 そうでない場合は、count回、文字列を繰り返して連結する 単純に実装すれば、以下の様な感じで済む。 String.prototype.repeat = function (count) { if (count < 0 || !Number.isFinite(count)) throw new RangeError(); var result = "", str = this; for (var i = 0; i < cou
書くのが1週間ほど遅れた。 979865 - Implement ES6 array and generator comprehensions 12.1.4.2 Array Comprehension 12.1.7 Generator Comprehensions var arry = [for (value of iteratableObject) value]; // ArrayComprehension /* == (function() { var list = []; for (let value of iteratableObject) { list.push(value); } return list; }()); */ var gene = (for (value of iteratableObject) value); // GeneratorComprehension
Firefox、プラグイン不使用に向けた対応強化 | マイナビニュース Firefoxが段階的にプラグインを廃止すると発表(情報追記あり) Firefoxがプラグインを廃止する方向に|アドオンと勘違いする人多数で大混乱 | アイデアハッカー Mozilla、ホワイトリストに登録されていない「Firefox」プラグインを原則ブロックへ - 窓の杜 まぁあることないこと言われていて、「アドオンじゃなくてプラグインか」みたいなコメントも多く散見されるわけだが。 Mozilla 的には以下の様な定義になっている。 アドオンは、以下の 3 種類に分けられます: 拡張機能 拡張機能は、Firefox に新しい機能を追加したり既存の機能を変更したりします。拡張機能には、広告の表示をブロックしたり、Web サイトから動画をダウンロードしたり、Facebook や Twitter を便利に利用するもの、また
https://gist.github.com/teramako/9306751 仕事でディスク使用率を教えてくれっていう感じの依頼を受けることが良くあり、その都度Windowsではマイコンピュータを開いたキャプチャ画像とかを送ってやったりしていたのだが、いい加減飽きてきた。 画像じゃなくて、テキストで欲しい。 ドライブ一覧を得るコマンド(diskpart の list volume)とか使用量を見るコマンド(fsutil volume diskfree)とか、管理者権限が必要になったり、バッチ化するにもイマイチな使い勝手だし、Unixライクな df っぽいコマンドが欲しいなと思って作った。 バッチファイルだけど、JScript である。 @if(0)==(0) ECHO OFF CScript //NoLogo //E:JScript "%~f0" %* GOTO :EOF @end s
【JavaScript】オブジェクトをキーでソートする方法 | Web制作会社スタイル 上記リンク先の手法は、新たなオブジェクトにキーを配列に入れてソートした後、その順にプロパティ値として入れる方法だ。が、この方法では完全にソートすることはできない。 仕様的にも実装的にも無理である。 仕様的に ECMAScript 5th 仕様には、プロパティ列挙の順序は書かれていない ECMAScript 6th Draft には、9.1.11 [[Enumerate]] () に The mechanics and order of enumerating the properties is not specified but must conform to the rules specified below. と明記されている。 要するに実装まかせであり、仕様として順序は保証していない。 実装的に
新年早々、まさかりを投げてる感があって心苦しいけど、気になったので…。 node.js/v8のgeneratorsのパフォーマンスについてちょっと調べた - SundayHacking さて、generatorsの説明は他に任せるとして、いきなりコードです。 function* es6_generator() { yield 1; yield 2; yield 3; yield 4; return 5; } これを複数回実行して時間を計測するコードはこちら。 console.time('es6_generator'); for (i = 0; i < 1000000; i++) { iterator = es6_generator(); obj = {}; while (!obj.done) { obj = iterator.next(); } } console.timeEnd('es6
918879 - Implement String#codePointAt and String.fromCodePoint テストコード: http://mxr.mozilla.org/mozilla-central/source/js/src/tests/ecma_6/String/ ECMAScript6th における、Unicode をもう少しうまく扱うためのメソッド2つ。従来の String.fromCharCode, String.prototype.charCodeAt の Unicode 対応版と言え、サロゲートペアとなる文字の扱いが変わっている。 今回は「吉野家」の正しい文字として http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=%F0%A0%AE%B7 を使うよ。 var str = "𠮷
__proto__が変わりゆく件について - 株式会社ネクスト エンジニアBlog さすがにちょっとツッコミを入れたい。 参考: draft_proto_spec_rev2.pdf ※ まだドラフトで確定ではないのでご注意ください。 http://nextdeveloper.hatenablog.com/entry/2013/12/15/191719 注釈があるとはいえ、今この時期にこのPDFは古いです。 現在のES6 Draft仕様のリビジョンは21です。rev2の仕様を引っ張り出してくるのはどうかと…。 大筋では特に言うことは無いのだが、以下の点に関してはツッコんでおきたい Enumerable: true はありえない(for-in で列挙されてしまうよ!?) UnderscoreProtoEnabled という内部プロパティは、消されている ついでに、最近のドラフトでは、__pro
Cmd + M で「しまう」のショートカットがMacでは共通してあるわけだが、逆に戻すショートカットが無い。 ゴテゴテとウィンドウが重なっている状態があまり好きじゃなくて、都度「しまう」を行っていたりするわけだけど、Cmd + Tab でアプリケーションを切り替えた後、元に戻すのにマウスポインタを動かす必要が出てきて QoL が下がっていた。 ということで、ショートカットを作ろうと努力をしてみたよ。(完全ではないけど概ね動く) やったこと Automator で AppleScript を動かすサービスを作る システム環境設定 -> キーボード -> ショートカット の「サービス」からショートカットを割り当てる Automator で AppleScipt 起動 種類を聞かれるので、「サービス」を選ぶ AppleScript を書く ユーティリティにある「AppleScriptを実行」を右
ECMAScript 6th には super キーワードがある。もとからキーワードとしてはあったけど、6th から挙動をもつキーワードとなった。 期待通り、プロトタイプチェーン上のプロパティアクセスまたはメソッドコールに使用できるキーワードである。 使用可能な箇所は: MethoDefinition中 (普通の)メソッド getter setter MethodDefinitionというのは ({ method () { }, get foo () { }, set foo (val) { } }) というように、ECMAScript6thから登場する書き方である。 super の使用方法は2種類ほどある。 プロパティアクセス:継承先のプロパティへアクセス super [ Expression ] super . IdentifierName コンストラクタ/メソッド実行:継承先の同名の
928508 – String.prototype.@@iterator (and thus for-of) incorrectly iterates over code units rather than Unicode characters ちょいと面白いものが実装されて、String.prototype["@@iterator"]がアップデートされてた。 "@@iterator" というのは、ECMAScript 6th におけるイテレータとなるメソッドで、最近注目のジェネレータオブジェクトを返す。*1 で、このジェネレータオブジェクトのnextメソッドが、従来であればインデックス値に沿って順に値を返していたのだが、これからはUnicodeポイントに沿って値を返すようになる。UTF-16 においてサロゲートペアとなるような文字は従来は2文字として扱われていたのが、Unicodeポイン
もの凄く基本的なことなんだけど、忘れて Google 先生のお世話になることが多いのでメモっておく コマンドラインからだったら、 open -a Firefox --args -P profileName -no-remote でOKだが、いちいちコマンドラインから起動するのは面倒なこともあって、自分は Hoge.app のアプリケーションの形で作っておくのが好み。Spotlight から検索して実行もしやすいし。 APP_NAME=FirefoxHoge.app FIREFOX_PATH=/Applications/Firefox.app mkdir -p ${APP_NAME}/Contents/{MacOS,Resources} # FirefoxHoge.app # └── Contents # ├── MacOS # └── Resources cp ${FIREFOX_PATH
Google Chromeに入ったジェネレータとPromiseで非同期処理に革命が起きた - 素人がプログラミングを勉強していたブログ javascripter さんの記事ではPromise実装としてjQueryのを使用しているけど、Fx では DOM Promise が使えるので、それに合わせて書きなおしてみた。 serialExperimental.js function serialExperimentalProceed (generator) { var thread = generator(); serialExperimentalProceed.proceed(thread); } serialExperimentalProceed.proceed = function proceed (thread) { var { done, value } = thread.next()
DOM操作の最適化によるJavaScriptチューニング(前編) | HTML5Experts.jp はてなブックマーク - DOM操作の最適化によるJavaScriptチューニング(前編) | HTML5Experts.jp はてなブックマークで『後でツッコミする』と書いたとおり、ちょっとツッコミたいと思う。 ツッコミ記事のつもりが、自分がツッコミされることとなり、ダメダメな記事です。それでも良ければお読み下さいw // サンプル1: パフォーマンスが悪い var ul = document.querySelector('#output'); for ( var i = 0; i < data.length; i++ ) { ul.innerHTML += ‘<li>’ + data[i] + ‘</li>’; } 上記コードはダメなコードであり、理由は、 li要素をループが回るたびに追
904701 - Implement prototype madness for ES6 generators Firefox 26 (Nightly) で function * () { yield ... } な ECMAScript 6th にある Generator の構文が導入された。 ということで、やる気を出して、チョコチョコと調査。 まず、用語の定義 GeneratorFunctionインスタンス function *() { yield "OK"; } の様な関数オブジェクト GeneratorObject GeneratorFunctionから生成されたインスタンスオブジェクト [[prototype]] オブジェクトのプロトタイプチェーンとなる内部プロパティ // GeneratorFunction function * geneFunc () { yield "OK"
それはテメェの頭だ。 それを忘れちゃいけねえ。
578700 – (harmony:bindata) [meta] Harmony binary data objects harmony:binary_data [ES Wiki] numerictypes.js arraytype.js structtype.js 894026 – Implement BinaryIntegerLiteral and OctalIntegerLiteral binary-literals.js octal-literal.js Binary Data Object 新たに数値型として、 uint8 uint16 uint32 uint64 int8 int16 int32 int64 float32 float64 の関数。 そして、上記の型関数などを引数にしてバイナリーデータ的なArrayやStructorを定義できるコンストラクタとして Array
記事とは関係ない質問なのですが __proto__にnullを設定した場合のみ 以降のinstanceof演算子の挙動が変わるのは仕様なのでしょうか FirefoxとChromeで確認しました o = {} o.__proto__ = Object.prototype o instanceof Object //true o.__proto__ = {} o.__proto__ = Object.prototype o instanceof Object //true o.__proto__ = 'abc' o.__proto__ = Object.prototype o instanceof Object //true o.__proto__ = undefined o.__proto__ = Object.prototype o instanceof Object //true o._
Firefox 23では「JavaScript無効化オプション」が無効化されるかも | スラッシュドット・ジャパン IT 誤読されそうなので、本気で心配しているのだが、変更の Bugzilla では以下の様なタイトルである。 873709 – Firefox v23 - "Disable JavaScript " Check Box Removed from Options/Preferences Applet 851702 – Remove "Enable JavaScript" checkbox from Prefs Bug 851702 でチェックボックスを削除したら、オフにできなくなったぞゴルァと Bug 873709 が立ったというだけの話で、 JavaScript をオフにできなくなるという話はではない点に注意したい。 about:config 等から触れれる真の設定値java
参考: 最強オブジェクト指向言語 JavaScript 再入門! > JavaScript でクラスは作れますか? 無理ポ。 では、クラスっぽいものは作れますか? だから、無理ポ。
次のページ
このページを最初にブックマークしてみませんか?
『hogehoge @teramako』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く