Panda Noir

JavaScript の限界を究めるブログです。

JavaScript

うるう年の判定王を決めよう

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 今年2016年はうるう年です。2月は29まであり1年が366日でオリンピックが開かれます。 そして、うるう年判定はプログラマにとって熱いものがこみ上げ…

C++のIterator学んだらJavaScriptのIterator理解できた

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 「C++ 入門書の次に読む本」という本を読み終わりました。中身はとても良かったです。まあ書評は置いときます。この本にIteratorが出てきたので、そ…

ずっと気が付かなかったけどインスタンスのprototypeはundefined

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) function Hoge(){ this.hoge = 'hoge'; } console.log(new Hoge().prototype); // undefined console.log(new Hoge().constructor); // [Hoge] 知ら…

i++はスペース挟んでi ++でもok

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) コメント頂いて雑に書きすぎたと思い書き直し。 本記事は「i++と書きがちだけど実はi ++って書いてもいいんだよ」と新しい視点を提供…というと大げ…

jQueryを使うべき2つの理由と使わないほうが良い3つの理由

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 追記: 個人的にそろそろ脱jQueryが来てもいいんじゃないかなと思い書いた記事です。 まあ読むとわかりますが、趣旨は「jQueryの悪いところAngularな…

HTMLで🍣をUnicode表記で表示する方法

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ずばりこれ 🍣 をUnicodeに変換するコードは下。もいけた。は出来なかった。謎である。(下に追記があります) const sushi = ''; let res = 0…

言語仕様から入るJavaScript入門 その1

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) まあ僕は今受験生でしかも今11月なんで中身はほぼ0です。そのうち書き直します。多分。 誰か代わりに書いて 仕様書 今回はECMA262で書いていきます…

Canvasをめちゃくちゃ使いやすくするライブラリ「UnitaryJS」作った

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ずっと思ってたんです。 「ctx.beginPath(); ctx.moveTo(x, y);」とか書くのは私の性に合わないな、と。 こんな無機質なプログラムは書きたくないな…

arr[arr.length++] = 0というコードについて

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ngRepeat.jsにあった、 clone[clone.length++] = endNode; というコード。おそらく arr[arr.length] = 0; というコードの亜種と思われる(clone.leng…

JavaScriptのコードを綺麗に見せるたった2つのポイント

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 記事書く時にのせるJavaScriptコードはなるべく綺麗な方いいです。綺麗だと読む人も疲れません。 他にも常日頃からJavaScriptコードを綺麗に書くよ…

配列の使いみちを実例付きで解説する

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 対象読者 「配列なんて何に使うんだよ…変数でいいじゃん。」みたいに感じている初心者だった頃の私のような人。 「配列は役立つなぁ。便利だなぁ。…

AngularのServiceとFactoryの使い分け(ほぼ)決定版

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ようやくわかったのでまとめておきます。決定版と言って差し支えないはずです。これ読めば 絶対に ServiceとFactoryの違いがわかります。これでもう…

Angularでスパゲッティを作ったことがある人へ

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) Angularでスパゲティを大量生産するのはMVC厳格に守りつつAngularでアプリケーション作れてないからです。実はMVCを厳格に守りつつ作るのはかなり難…

意外すぎる"未定義"の配列とその挙動

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) JavaScript で同じ要素が繰り返す配列を作る この記事を受けてコメントして自分の浅学を晒してしまいました。 さすがにまずいと思い、自分で検証し…

JavaScript製HTMLパーサー改

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ※これは私が以前書いたJavaScript製HTMLパーサーとは仕様が大きく異なります。 以前との違い 以前書いたHTMLパーサーをより使いやすくしました。ど…

JavaScript製HTMLパーサー

追記 この記事のパーサは使いづらいです。子要素の取得すら面倒です。JavaScript製HTMLパーサー改に使いやすく改善したパーサーを載せましたのでそちらを御覧ください。 本題 今回はHTMLパーサーを作りました。HTMLパーサーは、Webスクレイピングやらなにや…

parsimmonで数式の解析

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) parsimmonで数式をパースしました。あとは操車場アルゴリズムでも適用してやれば計算も可能です。 const Parsimmon = require('parsimmon'); const …

JavaScriptのパーサコンビネータ Parsimmonを使ってみた

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) パーサコンビネータなる素敵なものを見つけたので使って検索クエリのパースをしてみました。そのとき、理解するのに時間がかかったのでメモを残して…

文字列が格納された配列をGoogleのように検索する

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) Google検索のように A or Bみたいに検索可能にしました。 配列を探索して当てはまった要素を抜き出した新しい配列を返します。元の配列に変更を加え…

もはや2番煎じとかそういったレベルでないライフゲーム実装してみた

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 一応実装できてるはずですが、仕様熟読したわけじゃないのであやしいです。 簡単な説明 コードを簡単に説明すると、Cellクラスは位置情報、状態(生…

任意の文字列を任意の回数繰り返す

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) たとえばインデントをしたりゼロ詰めするときとかに使うのでメモ。 以下、strをn回繰り返した文字列をresという変数に格納するとする。 ループして…

ヘボン式のローマ字を変換するプログラム

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) ググっても出てこなかったのでドラマウロボロス聞きながら作りました。そのせいでif入り乱れのスパゲッティです。あしからず。 ※ヘボン式自体が不可…

カレンダーをJavaScriptで作ってみた

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) アプリで使うために作ったけど意外と汎用性高そうだったので別ライブラリに分離しました(もともとAngularJSのfactoryとして作ったものだったので、…

ふと思ったのでthisの検証をしてみた

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) * var outerMethod = function() { return this.name; }; var obj = { name: 'hoge', outerMethod: outerMethod }; global.name = 'fuga'; console.…

カウンタ変数なしでconsole.logをn回に一回くらい実行する

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) 注意: 厳密にn回に1回ではないです 10000回もconsole.logを呼び出すと重くなりますよね。それでcount変数を作ってcount%1000===0として実行回数を落…

Immutable.jsの個人的な備忘録

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください) immutable.jsを学んでいるので、忘れないように備忘録をつける…というのは建前で本音はQiita投稿デビューしたかったんです。 immutable.jsのすごい…

がおさんのせいで(おかげで)const原理主義者と成り果ててしまった

const最高!!!!!! 皆がおさんを崇めるべし!1日100ふぁぼくらいがおさんに贈ろう(迷惑)!

npmでライブラリ公開したときに踏みつけた地雷7つ

かなり後悔してる。とりあえず現時点で失敗したと思った点まとめてます。今後npmでライブラリ公開したいという人が同じ轍踏まないことを願います。

ワンライナーで[1..100]を生成する in JavaScript

0で埋まった配列はArray(100).fill(0)でおしまいですが、[1..100]となると生のJavaScriptでは実は考えないとできません。 ツイッターで少し(空中リプで)議論したのでそのまとめしつつ思いついたものを書きます。

自然数の分割について考えてみた

新型のテトリスを考えていた時に自然数の分割が必要となり考えてたら結構すんなり綺麗に解けたので紹介します。

2015年Qiitaで書いた記事一覧 + α

今年が終わるので、今年の1月にQiita始めてから書いた記事を古い順に並べてみました。 Immutable.jsの個人的な備忘録 カウンタ変数なしでconsole.logをn回に一回くらい実行する ふと思ったのでthisの検証をしてみた カレンダーをjavascriptで作ってみた Coff…

Iteratorパターンの利点

ES6で追加されたIterator。使い所が分かりづらいです。何が嬉しいのでしょうか?

lower_boundとupper_boundをJavaScriptで実装してみた・リベンジ

http://www.cplusplus.com/reference/algorithm/lower_bound/ ここの仕様を満たすように実装していきます。 lower_bound()とupper_bound()をJavaScriptで実装してみたのリベンジ記事です。今回は前回のような雑なテスト通して終わりではなく、きちんと論証し…

forの実行順序検証

仕様書読むのが面倒だったのでコードにて検証してみました。

そろそろReactを本腰入れて学びたいです

…うん。今年2015年はAngularJS一筋でReactは見て見ぬフリをしてきました。おかげでAngularJSスキルはバリバリついてMVC設計力もMVCの根底もガッツリ掴めました。 …しかしReactは脱MVCを掲げておられる。死にたい。

UnitaryJSのwikiを書いています

途中で面倒になりました。つづきはあとで書きます。 http://pandanoir.github.io/UnitaryJS/ 全編英語 + シンプルなデザイン(CSS12行!)です。デザインはあとでなんとかします。日本語版はそのうち作るかもしれません。 英語間違いが多そうなので突っ込みたい…

ペグソリティアをJavaScriptで解く

ペグ・ソリティアもしくはペグ・ソリテール、ソリタリアをJavaScript上でシミュレートするライブラリ作りました。 http://github.com/pandanoir/solitaire ペグ・ソリティアの解き方 ザックリとした手順 上のライブラリを読み込む ゲームボードを作成 解く …

正規表現で(\w){5}でもキャプチャされるのか

var str = 'abcde'; var reg = /(\w){5}/; var reg2= /(\w)(\w)(\w)(\w)(\w)/; console.log(str.replace(reg, '$1, $2, $3')); console.log(str.replace(reg2, '$1, $2, $3')); 結果は e, $2, $3 a, b, c まあそりゃそうかと思う一方、気を利かせてもいいん…

Immutableの利便性、大きなメリットについて。

この記事ではImmutableについて混乱を招かないように下のようにします。 オブジェクトの値が変更されないことをimmutableという 変数は再代入可能。 constによる定数とImmutableは全くの別物です。 wikiも同様のことが書いてあります。

Typing Betaをリファクタリングしてバグ取りました

中学三年の時に作ったタイピングソフトがあまりに汚かったのでリファクタリングしました。ついでにバグも取りました。まだロジックとビュー混ざった汚い状態でテストもまともに書けないので後でもう少し手直ししたいです。

UnitaryJSで色をオブジェクトに塗る方法

いつの間にか300記事行ってました。まあ特にどうってことはないです。

UnitaryJS公開しました。

多分今までにないcanvasライブラリです。

lower_bound()とupper_bound()をJavaScriptで実装してみた

追記: さすがに雑だったので書き直しました。 panda-noir.hatenablog.jp lower_bound()とupper_bound()のJavaScriptによる実装がなかったので、ネットでlower bound関連の記事漁りつつ適当にテストしたプログラム載せておきます。

varを使ってるつもりが変数がグローバル変数になるケース

varを使っているのにグローバル変数として宣言されているケースがあります。

RADIO公開しました。

RADIO はラジオ体操のスタンプカードのアプリです。アプリ内のカレンダーにスタンプを押して記録を取ることができます。

JavaScriptでsign関数をビットを用いて実装

sinではなくsign関数です。受け取った数値が正の数か負の数か0かを返します。

>>演算子と>>>演算子の違い

JavaScriptでのビット演算はほとんど使われてないと思います。そして多分>>>を知らないという人もいるのではないでしょうか。今回はそんなマイナーな>>>演算子にスポットを当てたいと思います。

MVCの利点

MVCのメリットとは何か?と考え試行錯誤し駄作を量産した結果たどり着いた結論についての記事です。

ほぼ全てのデータをJSONに変換できるライブラリmyJSON

まあだっさい名前してて御察しの通り自作ライブラリです。正規表現、Dateオブジェクトなど通常のJSONでは変換できないオブジェクトも変換し、再度オブジェクトに戻すことができます。使用用途としては例えばローカルにデータ保存する時にDateオブジェクトは…

nの位で四捨五入する方法

自分は今まで使ったことないです。しかし、この技術の応用はよくします。