古き良きインターネットアプリケーションであるマウスストーカー*1をリアクティブプログラミングの技術を活用して実装してみるという取り組みをしましたのでご紹介します。リアクティブプログラミングというと主語が大きめですが、ここではbacon.jsを使ってるくらいの意味です。 できたもの まずは完成したマウスストーカーを紹介します。チェーンのように連なった星がマウスカーソルの軌跡を辿ってついてきます。工夫してうごかすとなかなか綺麗です。下のボタンを押すと実際にこの画面でマウスストーカーを有効にすることができます(requestAnimationFrameに対応したPCブラウザのみ)。いろいろ動かして遊んでみてください。 このページでマウスストーカーを有効にする 実装 このマウスストーカーがどのように実装されているか紹介します。ソースコードはGitHubに公開していますので、適宜ご参照ください。手元
プログラミング言語Clojureの作者Rich Hickey氏率いるClojure HackerのチームがDatomic(デートミックと発音するらしい)というデータベースをリリースしました。これが何やらとてつもないです。10年先を行ってる技術じゃないでしょうか。 まだ本番サービスは始まっていませんが開発環境用のライブラリが配布されています。 Datomicは斬新なアーキテクチャなので一言で説明するのはとても難しいです。 私が理解できたことを簡単に説明します。 2014/1/20追記 ライセンスモデル、サポートストレージ、サービスとしてではなく独立して使用する形になるなど記事作成時の内容から色々変更が合った部分を更新しました。 変更不可なAppend-onlyデータベース 従来のデータベースで、あるレコードを変更するというのはそのレコードに対応した場所があり、そこのデータを書き換えるというこ
最新のUTF-8では5〜6バイトの表現がすべて不正になったんですね 知らなかった…(ぉぃ 最新と言っても RFC3629 って2003年?ずいぶん前だな 他にもコマゴマと範囲が変わったみたい RFC2279(旧) 1バイト 2バイト 3バイト 4バイト 5バイト 6バイト UTF8-1 0x00 〜 0x7F - - - - - UTF8-2*1 0xC0 〜 0xDF UTF8-tail� - - - - UTF8-3*2 0xE0 〜 0xEF UTF8-tail UTF8-tail� - - - UTF8-4*3 0xF0 〜 0xF7 UTF8-tail UTF8-tail� UTF8-tail� - - UTF8-5*4 0xF8 〜 0xFB UTF8-tail UTF8-tail UTF8-tail UTF8-tail - UTF8-6*5 0xFC 〜 0xFD UTF8-
先日、「正規表現」の話を書きました(d:id:atzy:20080905)が、(自称)正規表現専門家の私が、ほとんど使われていないけれど、すさまじいパワーを持つ機能を紹介しましょう。 それが「田中哲スペシャル」です。私はこれを使い始めてから肩こりは治るわ、イボ痔はよくなるわ、女の子にモテモテになるわと、人生が変わりました。 田中哲スペシャルとは このような一風変わった名前がついているのは、田中哲(たなかあきら)さんが最初のアイデアを生み出したためです。 2002年4月3日に「鬼車」と呼ばれる正規表現ライブラリ関連で提案され,そして使えるようになりました。鬼車はRuby 1.9やらPHP5やらで利用することができます。 (ruby-dev:16732) sharing sub-regexp 簡単にいいますと「同じ表現を何度も書くのがウザイ」というものです。例えば「ホスト名(FQDN)にマッチ
概要 「new.target」とは、ES2015で導入されたビルトインクラスのサブクラスを作る上で欠かせない存在である[[newTarget]]を取得するためのメタプロパティである。 従来の問題点 ES5まではArrayのようなビルトインクラスを適切に継承したサブクラスを作ることができなかった。 ES2015からのプロトタイプ設定機能を使うと可能であり、このようになる。 class Stack extends Array { constructor( ...args ) { var stack = new Array( ...args ) return Object.setPrototypeOf( stack, Stack.prototype ) } clear() { this.length = 0 } } しかし毎回このように書かないといけないのはスマートではない。 できればこの様に書
Sails makes it easy to build custom, enterprise-grade Node.js apps. Build practical, production-ready Node.js apps in a matter of weeks, not months. Sails is the most popular MVC framework for Node.js, designed to emulate the familiar MVC pattern of frameworks like Ruby on Rails, but with support for the requirements of modern apps: data-driven APIs with a scalable, service-oriented architecture.
今日朝イチで見たエントリーがこれでした。 qiita.com 論理削除の弊害は色々なところで言われているけど、僕の足りない頭で理解している所によると、二つの値しか持たない削除フラグ的なものはカーディナリティが云々で検索条件につけても性能上的にもよくないし、意味がないということです。 論理削除を完全に悪だとは言いませんが、論理削除を極力排したい人たちは、基本的にデータそのものを削除する、もしくは論理削除というのはまだ要件的に未確定な要素が隠されていることを示すフラグであると考えているようです。 僕がITの業界でキャリアをスタートしてから2年目くらいに配置されたプロジェクトではT字型ER手法というのをベースにしたテーブル設計をしていて、そこでかなり鍛えられたわけですが、その時にはだいたいこのような原則を叩きこまれました。 テーブルに状態を持たせない 究極には機械が認識するキーと、人間にとって意
2014年最大の目玉だったニュースキュレーションアプリ市場の雄・グノシーの上場承認が降りました。1年前の2014年3月のTVCM開始前のグノシーは200万DL程度でしたが、2015年2月末では886万DLとのことです。 スマートニュース化したグノシーvsスマートニュースという記事を1年前に本誌でも出しています。上場がどちらが早いかで勝負が決まるわけではないですが、2014年7月の東洋経済オンラインでのグノシー取材では「2015年に600-800億の時価総額で上場」と予測を出しています。 時価総額、業績、利用動向、今後の4本立てでグノシーIPOを見てみます。 ①:グノシー時価総額:公開時は約332億が1.5-1.8倍に? まず時価総額関連から。 公開日発行済株式総数:21,878,000株 想定価格:1,520円 想定公開日時価総額:約332億 TS予測翌期当期利益:約5億円 TS予測翌期当
※ただのメモで、未来志向なのであまり真に受けてはいけない。 良いっぽい React.js 早速い/コンポネント志向/APIの設計がいい。JSXと他のトランスパイラの組み合わせという問題はある Promise ネイティブに入った、誰もが使ってる TypeScript ES6時代でも存在意義のある言語。TypeScript互換のFacebook Flowの動向に注目 Backbone.js ModelとEventを使う/Viewは使わなくていい Lodash Underscore.jsをよくしたやつ Gulp Gruntより良いという意味で。browserifyまわりがうまく動かない問題があってnpm runのほうがいいという噂もあるがまあ良いに分類してもいい EventEmitter Custom EventはDOMにくっ付いてる感があるのでロジック志向の物にはEventEmitter使った
ちょっとハマったのでメモ。 例えば alert(A); function A() { } はできるが、 alert(A); class A { } ができないのはなぜか。 class A { } class B extends A { } 例えば、このようなコードの場合、hoisting(スコープ先端への巻き上げ)をしても問題ないが、 関数と違ってextendsはその場で評価しなければいけないことがある。 例えば、 var A = function () { }; A.prototype.x = function () { return 1; }; class B extends A { } alert(new B().x()); というコードの場合、BクラスはAを継承しなければいけないので、var Aで宣言されているものはhoistingされないのでclass宣言もその場で評価しないと、
JavaScript の Promise を返す関数を直列で実行したいので Pinscher というライブラリを作ってみた。 - (define -ayalog '())について。 例えば、非同期に実行されるPromise p1, p2, p3があったとしてcallbackをp1, p2, p3の順番に実行したい場合、reduceが使える。 例1は、p1, p2, p3を並列に実行した上で、callbackの順序を保証したい場合。 まずテスト用に、一定時間まってからvalueでresolveする関数resolveLaterを定義しておく。 function resolveLater(value, ms) { return new Promise(function (resolve) { setTimeout(function () { resolve(value); }, ms); });
この記事の内容は古くなりました、新しい記事はこちらです。 Browserifyの記事が増えてきましたが、 自分でもフロントエンド開発環境を構築してみて、納得のいく構築が出来ましたので公開します。 GitHubへのリンク 2015/03/26追記 独自タグによるalias指定をoptionalに変更し、 require時に相対パス指定か、aliasがある時はalias指定のどちらも使えるように修正しました。 概要 このプロジェクトは、以下の機能を持っています。 TypeScript、Browserifyの差分ビルド gulp.watch、Watchifyの変更監視による自動ビルド TypeScript、CoffeeScriptのソースファイルを混在出来る ファイルごとに型が欲しいか、短く書きたいか、で好きな方を選べばいい CoffeeScriptで書いたクラスをTypeScriptでrequ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く