muzigram

山椒は小粒でもピリリと辛い

2013/06/19

shinjuku.dart vol1 を開催しました。#dartlang #datlangjp #shinjukudart

shinjuku.dart

さる6/15に「shinjuku.dart」なる勉強会を開催致しました。
あまり強いニーズがあるとはいえない勉強会でしたが、お集まりいただきありがとうございました。

slide

感想

Dartlangでできることを、広く浅く取り上げたつもりですが、
一から始めるハンズオン的なものがあっても良かったなと思っていたり。

初心者のかたは素直にDartEditorをフルで落とし、機能を確認してから
vimやsublimeText2等に移行する。という形のほうがわかりやすかったなーとか。

後は、初の勉強会主催かつ、なんだこいつ的な人間が開催したにもかかわらず
様々な人にリツイートしてもらったり参加してもらったりでありがたいことです。

次回はWebアプリを作ってみよう!とかサーバーを立ててみよう!みたいな
テーマを用意しようかと思っております。

shinjuku.dartが懇親会にダーツを選んだ理由。

ノリです。

懇親会が勉強会の本番!というお話はよく聞くし、それはある種正しいとも思っていて
参加したい。とは思うんだけど、話がうまくない人間としては「きっかけ」がむずかしいなーと思っていたりもします。
そんなわけで、きっかけづくりの一つとしてダーツをやってみるのもいいんじゃないかな。という感じでした。これも賛否両論あると思うので次回はどうしようかな。

第2回について

要望があったのでやりましょう!

やるにあたって募集するもの
  • 場所 :市ヶ谷健保会館は快適だけど、飲食禁止は厳しいですか?
  • 内容 :こんな内容が聞きたい!、Dartの解説を聞きたい
  • 発表者:発表してみたい!という方募集中
お待ちしております!!!

2013/06/11

[Dart] Unittest と drone.io #dartlangjp

DartでUnitTestのお話 Dartでテストはどう書くの?というお話と
drone.ioというCIサーバーの導入のお話です。

sample project

code,project解説

http://www.dartlang.org/articles/dart-unit-tests/
 で解説されているUnitTestをhttps://drone.io/で実行するところまで
持って行きたいと思います。

DartでのunitTestは、pubにライブラリがあり、 http://api.dartlang.org/docs/releases/latest/unittest.htmlを使用します。

ディレクトリ構成

Dartのライブラリを見ていると以下の構成がデファクトスタンダードに近いようです。
  • package
  • mylib
  • test
    • quicksort_test.dart
    • run_all.dart
    • run.sh

今回用意したプロジェクトのファイルを以下に解説。
quicksortを実装したdartファイルのテストを行います。

■ quicksort_test.dart
実際のテスト内容を記述してあります。
test()にて、テスト名と、実行するfunctionを記載。
library quicksort_test;

import 'dart:io';
import 'package:unittest/unittest.dart';
import '../quicksort.dart';

main(){
  test('QuickSort', () =>
  expect(quickSort([5, 4, 3, 2, 1]),
  orderedEquals([1, 2, 3, 4, 5]))
 );
}
■ run_all.dart
すべてのテストを実行するためにGroupにまとめています。
addGroup()を用いて、test用のdartファイルを記述。
library test.run_all;

import 'dart:io' show Options;
import 'package:unittest/compact_vm_config.dart';
import 'package:unittest/unittest.dart';
import 'quicksort_test.dart' as quicksort_test;

main() {
  var args = new Options().arguments;
  var pattern = new RegExp(args.length > 0 ? args[0] : '.');
  useCompactVMConfiguration();

  void addGroup(testFile, testMain) {
    if (pattern.hasMatch(testFile)) {
      group(testFile.replaceAll('_test.dart', ':'), testMain);
    }
  }

  addGroup('quicksort_test.dart', quicksort_test.main);
}
■ run.sh
dartanalizerとunittestを実行するためのシェルスクリプトを記述します。
drone.ioはこのスクリプトを実行することでテストを行います。
#!/bin/bash

echo Analyzing library for warnings or type errors

dartanalyzer --package-root packages --fatal-warnings --fatal-type-errors *.dart || \
  echo "ignore analyzer errors"

dart --enable-type-checks --enable-asserts test/run_all.dart $@

drone.ioの準備

https://drone.io/のアカウントを取得し、projectを作成します。
Github,bitbucket,google codeのいずれかのcodeを取得します。今回はgithubを利用。
■ テストするプロジェクトを選択。
スクリーンショット 13 06 11 13 53
■ こんな感じでCommandsを記述
他のプロジェクトを真似したはずなのですが[sh test/run.sh]と記述しないと
permission deniedによりエラーが… why?
スクリーンショット 13 06 11 13 54 drone.io
pub install
dartanalyzer --version

sh test/run.sh

Build nowボタンで実行!

■ Build now!!!testが失敗していますね。
スクリーンショット 13 06 11 13 59

■ githubに修正版をpush!!! うまくいきましたね
githubに変更があった場合、drone.ioはすみやかにテストを実行してくれます。 スクリーンショット 13 06 11 14 05 ↓こんな感じのバッジも表示できます。Dartのプロジェクトではよく見ますね。
駆け足でしたが、実行可能なprojectもアップしてありますのでご参照いただけば
とおもいます。 このエントリーをはてなブックマークに追加

2013/06/03

Dart言語について&Dart勉強会のお知らせ。#dartlang #dartlangjp

Dart勉強会について

勉強会、参加する側から発表、もしくは主催する側に移りたいな。
と常々思っておりまして、ふと

「Dartの勉強会がないなら、自分で開いてしまおう」
と思い立ちました。



立てました
http://atnd.org/events/40155
場所は市ヶ谷の健保会議室か、会社の会議室を借りるかしようと思っています。

Dartをガッツリ書いています!という人も少ないと思うので
・始め方、使い方、実用するためのステップ等の解説
・WebComponentの概念,polymer.jsを使う場合とdartのweb_uiを使う場合
といった内容で勉強会をしたいと思っております。
発表してみたい!という方がいらっしゃいましたら、
atndか[twitter]https://twitter.com/mogetta等にご連絡いただければと思います!

改めてDartのお話


http://www.dartlang.org/ 乱暴に手っ取り早く説明すると
って辺りがDartの特徴かと思われます。

どういう言語なのか

http://www.dartlang.org/docs/dart-up-and-running/contents/ch02.html#ch02-concepts
  • クラスベース
  • 数値、関数、null等、全てObjectの継承
  • top-level functions (such as main(),main関数のような、クラス外の関数も書ける。
  • 2つのエラータイプ
  • 2つのランタイムモデル
  • dart内のjsライブラリを使えば、jsとの連携も可能
  • https://github.com/mogeta/dotsync/blob/master/dart/Channel.dart
  • FutureAPIを利用した非同期プログラミング
等等、javascriptで置き換えられることを念頭に開発されていることも注目です。

example
class Dot {
 num x, y;
 Dot(this.x, this.y);
 String toString() => "($x,$y)";
}
void main() {
 var p = new Dot(3, 4);
 var q = new Dot(5, 6);
 print(p);
}
・ main()がエントリーポイント
・ 変数の定義が「var」で可能(動的
・ 値の代入だけならコンストラクタの記述が省略できたり。
・ 1ステートメントだけなら関数の代入が簡単に記述できたり。

開発状況はどうなのか

http://www.infoq.com/jp/news/2013/04/dart-m4-release
一時期に比べると大分安定してきているのではないでしょうか。
GoogleIOでもCore libraryはstableだよ。なんて話もありました。
とはいえ、Uri.fromString ー>Uri.parseみたいな名称変更レベルがゴロゴロしているのでまだ油断はできません。

ライブラリは揃っているのか

http://pub.dartlang.org/
Dartにはコアライブラリの他、npmやgemと同じようなpubというpackages managerがあります。
これを使用することによってgithubから取ってきたコードに依存したライブラリを簡単に取得することが可能です。
使い方はpubspec.yamlというファイルにこんな感じで記述
name: sandboxWebUI                       #名前
description: A sample WebUI application  #詳細
dependencies:                            #依存関係
  js: any                                #ライブラリ:バージョン
  google_urlshortener_v1_api: any
  browser: any
  web_ui: any
で、以下のコマンドを実行
pub install

今やる必要あるの?

あるかないかで言ってしまうと必須ではないです。
とはいえ、将来性を見据えてやってみる分には面白い言語だと思っています。 学習コストはJavaやActionScript3を触っていた人であれば低めですし、 dart2js等を使ってWebアプリを公開する方法等も確立されており、実用性もあります。

Dartがhaxeやjsx,coffeescriptとくらべてどうなんだ?という話もあるかと思います。
自分は全ての言語をじっくり触ったわけではない(HelloWorldくらいはしたけども) ので、何が優れていると明確な答えが出せるわけではないですが、
PerlがあるからRubyいらいないよね。みたいな訳ではないということは皆さんご存知だと思いますので、単純に軽く書いてみて気に入ったものを選択すればいいと思います。
FlashからDartへ変換
http://news.dartlang.org/2013/05/adobes-flash-pro-cc-exports-to-dart-and.html
http://www.stagexl.org/
という話もあったりで、業界的な注目も決して低くはないと思うので
興味のある方は是非触ってみてください。

memo