7cc@はてなブログ

JavaScriptとかとか

ネイティブメソッドを判別する互換性

setTimeout, setIntervalを乗っ取って爆速にする - 素人がプログラミングを勉強…を踏まえて

  • "prototype" in Arrayはすべてtrue
  • "prototype" in Array.prototype.pushはすべてfalse
  • "prototype" in function(){}はすべてtrue
  • "prototype" in {native dom func}は互換性が無い(下の表参照)

つまり

browser "prototype" in alert //native
Windows 8.1 Internet Explorer 11.0 Desktop T
Windows 8 Opera 12.16 F
OS X Mavericks Safari 7.0 T
Windows 8 Firefox 25.0 F
Windows 8 Chrome 31.0 F
Google Nexus 7 Android Browser T
Samsung Galaxy S III Android Browser T
iPhone 5S Mobile Safari F
iPad 3rd (7.0) Mobile Safari F

ソース

(JavaScriptで使われる)数学の英語 数字編

数字の画像。指数表記、16進数、メソッド

digit(s)
0-9の数字(0は除かれることも)
notation
表記
integer
整数
decimal
小数 / 10進数
decimal point
小数点
fixed-point number
固定小数点数
floating-point number
浮動小数点数
precision
精度
exponent
指数
exponential notation
指数表記
radix
base number
基数
decimal
10進数
hexadecimal
16進数
octal
8進数
binary
2進数
finite
有限数
infinite
無限数
positive
正の
negative
負の

「数字編」としたが、「数学編」はあまりにも分量が無いので投稿しない予定・・・´ω`)

はてなブログのテーマのライセンスに、GPLが選べるようになりました

アナウンスは(まだ)無い。

なぜGPLが選べるようになったのか

Hatena2 for はてなブログ - テーマ ストア - はてなブログ のように、「はて」、はてなダイアリーのテーマがいくつか「はてなブログ」に移植されている。CCライセンスで。しかしこれはGPLにしなければならない。理由は以下の通り。

はてなダイアリーテーマ作成時の注意とは編集

はてダなどのテーマが移植できるようになった

これによってWordPressなどのCSSも移植できるようになった。


なお、これは「はてブロのテーマストアに投稿する」場合の話で、他のライセンスのCSSを自分のブログで使用するのは何ら問題ない。

IEで「オブジェクトを指定してください」のエラー

エラーメッセージを言い換えると分かった。

「オブジェクトを指定してください」
「オブジェクトが指定されていないよ」
「オブジェクトが無いよ」
「オブジェクトがundefinedだよ」

原因

3通りあるようだ

原因1 古いIE文字コード

IEの謎エラー対策(1) 「オブジェクトを指定して下さい」が外部ソースの場合 - 趣味の延長線 の通り、charsetを指定する。

原因2 関数が未定義

  • (最新版含む)そのバージョンのIEでは使えない関数を使用している
  • ファイルを読み込む順序が間違っている
  • グローバル変数が上書きされている($とか)
  • typo(スペルミス)

var hoge
hoge(1)  // "オブジェクトを指定してください。"

原因3 関数の後にセミコロン忘れ

(function(){})()
(function(){})()

戻り値の無い関数はundefinedを返す。
分かりやすいようにfunctionalertに置き換えて整理すると、

(alert)() // =undefined
(alert)()

そしてこうなる。

undefined(alert)()

この時、

undefined()

という式を実行しようとする。原因2と同じように、関数ではないものを実行しようとしているのでエラー。

余談、エラーメッセージについて

obj.propの形の関数だと少し分かりにくい。

Math.foo(1) 

"オブジェクトは 'foo' プロパティまたはメソッドをサポートしていません。"

[Math.foo].map(function(e){
  return e(1)
}) 

"オブジェクトを指定してください。"

同じことなら、同じエラーメッセージにして欲しい。

はてなブログでのMarkdownの不具合・仕様

不具合報告も兼ねて。
報告済み・仕様との回答を頂いたものは見出しに記載。

Markdownはパーサが色々有り、またサービスによって独自の機能を提供しているものもあるので、なかなか厄介だと思った。

の3つで試した。

普通の環境

は以下とした。

もっとも、Markdownはどれが普通とは言い難いけれども。
(厳密には、dillingerは記事を書いている途中で仕様変更があったらしく、面倒になってメモをやめた。)

リストのネスト (仕様)

olが親要素の時にスペースが3つ要る

1. aa
   1. bb ← ここのスペースが3つ要る
2. aa

ulが親要素の場合は2スペースで足りる

- aa
  - bb
- aa

リストの次の行にブロックレベル要素

タグを直接書いた場合

- li
<p>para</p>
md liの子要素となるか
普通 なる
GitHub なる
はてな ならない

同じ行に書けば子要素になる

- li<p>hello</p>
- li<pre>1
2</pre>

リストとMarkdonw記法

一貫性が無い。

リストとblockquote

liの子要素となる。

- li
>blq

リストとpre (仕様)

liの子要素に、シンタックスハイライト付のpreが不可

- li
\```html
<html>A
\```

------------------------

- li
  ```html
  <html>B
  ```

------------------------

- li

  ```html
  <html>C
  ```
md A B C
普通 ul>li+pre ul>li+pre ul>li>p+pre
GitHub ul+pre ul>li>code ul>li>p+pre
はてな ul+pre ul>li>code ul>li>p+p>code

表示参考のgist

「リストとシンタックスハイライトのないpre」ならば、はてなでも可能。

*   A list item with a code block:

        code
        code

pre

preの属性が付与されない (報告済み)

言語を指定しないpreを最初に使うと、後のpreに属性が設定されなくなる
CSS/JSのセレクタ指定に影響。

\```
はるはあけぼの
\```

\```javascript
var foo = 1 // `class="code lang-XX" data-lang="XX"`の指定がなくなる
\```

自動リンクとpre

<pre>タグで書いた時だけ自動リンクになる。

はてな これはMarkdown(`*3)で書きました
はてな これはMarkdown(インデント4つ)で書きました
はてな これはpreで書きました

タグの中の```がpre要素になる。

  1. HTMLタグの中ではMarkdown記号は要素にならず、そのまま扱われるはず。
  2. 実際、>, -などの記号はそのまま。
  3. ところが、```はpre要素になる。
<div>
\```
なつはあつい
\```
</div>

次のようなHTMLが出力される。

<div>
<pre class="code" data-unlink="">なつはあつい</pre>
</div>

上記の「なつはあつい」中のdivの閉じタグ</div>がハイライトされていないのはそのため。 並べてみると分かりやすい。

<div>
\```
なつはあつい
\```
</div>
<div>
`
なつはあつい
`
</div>

(この投稿は`の前にバッククオートを入れてスクリプトで消している。そうしないとこの表示が得られないので。)

タブがスペースに変換される

3~4スペースになる。ソースコード貼ったら困る人もいそう。

<dfn>タグの次のテキストがp要素になる

パーサでdfnがブロックレベル要素に分類されている?

入力

<i>a</i>b
<dfn>a</dfn>b

出力

<p><i>a</i>b</p>
<dfn>a</dfn>
<p>b</p>

tex記法

数式を表示する(tex記法) - はてなダイアリーのヘルプにある記述をそのまま貼り付けるとこうなる

[tex:x2 + y2 = z2] e^{i\pi} = -1

(そもそも、はてなブログtex記法をサポートしているのか不明。)