トランザクションのモードの定数が変更になっている
IDBTransaction.READ_ONLY //-> 'readonly' IDBTransaction.READ_WRITE //-> 'readwrite'
https://developer.mozilla.org/ja/docs/Web/API/IDBTransaction#Mode_constants
理由はちゃんとみてない
トランザクションのモードの定数が変更になっている
IDBTransaction.READ_ONLY //-> 'readonly' IDBTransaction.READ_WRITE //-> 'readwrite'
https://developer.mozilla.org/ja/docs/Web/API/IDBTransaction#Mode_constants
理由はちゃんとみてない
jQuery のプラグインを書くお作法みたいのがあって、だいたいどのプラグインも以下のように書かれている
(function($) { $.fn.myPlugin = function() { ... }; }) (jQuery);
これTypeScriptで書こうと思ったらこんな感じになった。
/// <reference path="path/to/jquery.d.ts" /> module jQuery { var $:JQueryStatic = <JQueryStatic>jQuery; $.fn.myPlugin = function() { ... }; }
jQuery モジュールを定義すると外側の即時関数は大体同じにコンパイルされる。
ただしこうすると jquery.d.ts の jQuery の定義を上書きしてしまうらしいので、$ に型アノテーション付きで jQuery を代入する。コンパイル結果は以下のようになって、だいたいお作法どおりになる。
var jQuery; (function (jQuery) { var $ = jQuery; $.fn.myPlugin = function () { ... }; })(jQuery || (jQuery = {}));
気持ち悪いと思う。
だから最初外側の即時関数ぶぶんそのままでいいじゃんと思ったのだけれど、TypeScript では関数の内部にクラスを宣言できないっぽい。
(function($) { $.fn.myPlugin = function() { ... }; ... class Hoge { // コンパイルエラー ... } }) (jQuery);
自分のプラグインで使うクラスを定義したかったのでちょっと変なキャストするしかないのではないかと思った。なにか他にいい方法あったら誰か教えて下さい。
社会人力の高い新人との呼び声高い id:pokutuna から30もの質問をされたので答えます
はっつ、はつしば
シュウ酸カルシウム結晶の精錬
たまに腰に激痛が走る
うーん
音痴なんですよ・・・
人形の久月のCMの人形に似てると言われたことがあります
座右の銘
今度までに考えておきます
みんなが幸せ
ちょっと初対面の人には教えられないっすね
機動戦士ガンダムUC(ユニコーン) [Mobile Suit Gundam UC] 1 [Blu-ray]
地球防衛軍。7月4日に4が出るので買いましょう!
美味しそうな食べ物の画像を見るとその瞬間はそれが好きな食べ物になります
美味しいビール
動物あんまり得意じゃないけど子猫は卑怯だと思います
青色方面
三人そろって Perfume です!
この夏のマストアイテムははてなTシャツじゃないっすかね
あんまり読まない
昔バドミントンやってましたけどもう無理なのでたまに山に登ったりしてます
餃子
コードレビューでことごとくダメ出しされて、「つらいっ」って言って起きる夢を今朝見ました
なんだろ
雲の階段っていうドラマを毎週見てました。あんまり視聴率よくなかったみたいですけど緊迫感があっていつも見入ってました。
登山
ウユニ塩湖にどうにか行きたい
いんたーねっと
表して下さい
君たちを巻き込むわけにはいかない
id:nobuoka さんオナシャス
バッドな感じのタイトルだけど、開発中にとりえあず型エラーが出ていてもとりえあずjsファイルを吐いてほしいときはある。
実際 tsc コマンドを打つと、syntax error のときは js を吐かないけど、型エラーのときは js を吐いている。(それが好ましいのかどうかはしらないけど。)
class Hoge {} var h = new Hoge(); h.hoge();
Hogeクラスにhogeメソッドなんてないので型エラーがでるけど、jsファイルはできてる。
$ tsc hoge.ts hoge.ts(3,2): The property 'hoge' does not exist on value of type 'Hoge' $ ls hoge.js hoge.ts
var Hoge = (function () { function Hoge() { } return Hoge; })(); var h = new Hoge(); h.hoge();
grunt-typescript では型エラーが出るともう js 吐かない。ちょっと動作確認だけしたいみたいなときにもちゃんと型の整合性を取る必要があるので、"型付けを後回し"にすることができない(すべきじゃないとか言われそう)
ので grunt-typescript にオプションを足してみる
diff --git a/tasks/typescript.js b/tasks/typescript.js @@ -306,7 +306,7 @@ module.exports = function (grunt) { } }); compiler.typeCheck(); - if(compiler.errorReporter.hasErrors){ + if(compiler.errorReporter.hasErrors && !options.ignoreTypeCheck){ return false; } compiler.emit(io);
Gruntfile の typescript のオプションに ignoreTypeCheck: true を足したら型エラーが出ても js ファイル吐き出してくれた。
タスク自体は失敗になるので注意。
dart で mysql を扱うときのメモ。
dart の mysql ドライバーには sqljocky というのがあるようなので使ってみる。
dartEditor っていう Eclipse の亜種みたいのがあるのでそれ使ってもいいかもだけどとりえあず今回はなしで。
OSX で作業してるので dart のインストールは homebrew でささっと。
brew install dart
dart には pub というパッケージマネージャがあるのでこれを使ってインストールする。
まずアプリケーションのホームディレクトリに pubspec.yaml というファイルを作成し、以下のように記述する
name: appname dependencies: sqljocky: any
dependencies 以下に依存モジュールを記述していく。any はバージョンの指定で、any だとたぶん最新版がインストールされる。バージョンを指定したい場合には
dependencies: sqljocky: 0.5.1
のように記述する。pubspec.yaml の準備が完了したら pub コマンドを実行する
pub install
pub に付いて詳しくは Getting Started | Pub Package Manager を参照した。
まずはインストールした sqljocky モジュールを import する。
import 'package:sqljocky/sqljocky.dart';
昔 #import だった気がするけど変わったのかな。結構前から変わってるのかも。
実際に mysql にアクセスするコードは以下の感じ。
void main () { var pool = new ConnectionPool( host: 'localhost', user: 'user', password: 'pass', db: 'test', max: 1 ); pool.query('select * from user').then((result) { result.stream.listen((row) { print(row[0]); }, onDone: () { pool.close(); }); }); }
node書いてる人とかだとコード見ればだいたい何やってるかわかりそう。
dart でもIOはだいたいノンブロッキングになっていることが多いようで、query メソッドの返り値はDBから取得したレコードとかじゃなく、Future 型のオブジェクト。
この Future オブジェクトというのは jQuery の Deferred.promise オブジェクトとだいたいおんなじものだと思ってよさそう。dart:async モジュールにリファレンスがある
Future<T> abstract class / dart:async Library / Dart API Reference
ちゃんと見てないけど、then に渡すコールバックに渡されてくる result オブジェクトをまた listen すると、一行取得するごとにその下のコールバックが呼ばれる。DBのレコードをModelオブジェクトにマッピングするのはここでやれば良さそう。
全部読み終わると onDone に渡したコールバックが呼ばれる、って言う感じ。
then の呼び出しはまた新しい Future オブジェクトを返すので、select した結果をもとにどうこうしたい場合には、thenをつなげるとよい
pool.query(...).then((...) { ... }).then((...) { ... })
といった感じになる。非同期処理で同期的な処理を書くのがどうしても冗長だし直感的じゃないコードになるのだけど何かいい方法/書き方ないのだろうか。。