dart には angularjs が移植されている。
angularjsの素晴らしさを整理してみる:http://pochi.hatenablog.jp/entry/2013/11/13/002504
angularjsのdartへの移植が進行中:http://www.infoq.com/jp/news/2013/06/angularjs-dart
クロージャ:http://dqn.sakusakutto.jp/2009/01/javascript_4.html
2013年11月17日日曜日
Google Dart 事始め
Google Dartの正式版がリリースされたので使ってみる。
https://www.dartlang.org/
http://api.dartlang.org/docs/channels/stable/latest/
DART入門:http://zenback.itmedia.co.jp/contents/www.sssg.org/blogs/hiro345/archives/10994.html
What is Dart:http://sitekamimura.blogspot.jp/2013/09/dart-what-is-dart-kindle-kathy-walrath.html
※カスケード演算子
http://www.cresc.co.jp/tech/java/Google_Dart/DartLanguageSpecification_about.html
[プロジェクト名].html
その他に、packages/browserディレクトリが出来て、中に以下のファイルができる。
dart.js
hiterop.js
編集するのは、「.dart」の拡張子を持つ dart ファイル。後は、htmlとcssを編集する。C系と同じようにエントリーポイント(main)からプログラムが実行される。
dartを編集してから、htmlを右クリックして「run as JavaScript」を実行するとdart2jsが動いてJavaScriptが生成される。
https://www.dartlang.org/docs/tutorials/add-elements/#copy-app
公式ページ
https://www.dartlang.org/
APIリファレンス
1.0リリース前のコードからは変更も多数。最新のAPIをチェックすべき。http://api.dartlang.org/docs/channels/stable/latest/
参考サイト
DARTことはじめ:http://usagi.github.io/intro-dart/#/DART入門:http://zenback.itmedia.co.jp/contents/www.sssg.org/blogs/hiro345/archives/10994.html
What is Dart:http://sitekamimura.blogspot.jp/2013/09/dart-what-is-dart-kindle-kathy-walrath.html
言語仕様
- クラスを使う
- クラスの外側にメソッドが記述可能
- オプションと引数:Javaと違って省略引数可能。C++のように後ろの引数を省略 or 引数に名前をつけて省略
- 文字列インターポレーション:php的に、"Hello, ${name}"とできる
- マルチライン文字列: ($s=<<END;) のような文字列リテラル
- 動的メソッドハンドリング:実行時にメソッドがあるか確認する
- カスケード演算子: JavaScript の with。
- オプショナルな型:小さなアプリなら型をかかない、ちゃんとしたアプリでは型をかく、が選べる
- レキシカルスコープ:{}が識別子のスコープ。クロージャ(Java8で実装予定のλや無名関数で実現する関数オブジェクトの一種)やローカル変数キャプチャもOK。
- ライブラリ:Pub(オープンなリポジトリで便利)
- Isolate:マルチスレッドでお互いのメモリにアクセス出来ないので安全
Javaで出来て、Dartで出来ないのは、メソッドのオーバーロード不可能。intが初期値を代入しないとnullになる。継承は1つまで。
※マルチライン文字列リテラル(以下だったらENDで囲まれた文字列の改行を維持する)
my $s = <<'END';
aaaa
iiii
uuuu
END
※カスケード演算子
with (document) {※邦訳版
//このブロックの中ではdocument.を省略できる
var hoge = getElementById('hoge');
...
}
http://www.cresc.co.jp/tech/java/Google_Dart/DartLanguageSpecification_about.html
コードのサンプル
コード動かす
トップページから必要なSDKをダウンロードして解凍すると、Dart Editor (もとはEclipse)が入っているので起動する。HelloWorld
新しいプロジェクト(WebApplication)を作成すると、webディレクトリの配下に以下のファイルが用意される。
[プロジェクト名].css
[プロジェクト名].dart[プロジェクト名].html
その他に、packages/browserディレクトリが出来て、中に以下のファイルができる。
dart.js
hiterop.js
編集するのは、「.dart」の拡張子を持つ dart ファイル。後は、htmlとcssを編集する。C系と同じようにエントリーポイント(main)からプログラムが実行される。
dartを編集してから、htmlを右クリックして「run as JavaScript」を実行するとdart2jsが動いてJavaScriptが生成される。
構文
文字列
- 文字列リテラルはECMAScriptライク
- ${xxx}や\nなど、シェルスクリプトライクな文法が使用可能
- ${new Date.now().day -1}などの式を、文字列内に内挿可能
型と変数
- bool / int / double / num
- String / List / Set / Queue / Map / ...
- final 修飾で定数宣言(C++ の const と似ている)
制御文
Javaの構文をほぼそのまま使える
- for / for-in / while / do-while
- switch case break / if else / ?:
- break / continue
- try throw catch
演算子
Java、C++にある演算子はほぼそのまま使える関数とラムダ式
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void print2(var v) { print(v * 2); } | |
main() { | |
var vs = [1, 7, 3, 2, 0, 5, 0, 4]; | |
print('--1--'); | |
vs.forEach(print); | |
print('--2--'); | |
vs.forEach(print2); | |
print('--3--'); | |
vs.forEach( (a) => print(a*a) ); | |
} |
クラスの継承
前半にも書いたが、多重継承は不可。ジェネリクス
使える。型制約も可能。DART SDK
- dart : Dart処理系(Dart VM) Dart VMを搭載したブラウザだと動作。V8より高速。
- frogc(dart2js) : dartからjsへのコンパイラー
これ直接使うのはしんどい。Dart Editorのバックエンドとして動いてるって知っておく程度。
DART用HTMLファイル
cssとdartファイル指定。JavaScriptを生成してWebサーバに配置すればOK.
毎日さっくりと使えるTODOリストが無かったのでサンプルから作成。
以上。ワクワクする仕様。何つくろうかな。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<meta charset="utf-8"> | |
<title>A Minimalist App</title> | |
<link rel="stylesheet" href="helloworld.css"> | |
</head> | |
<body> | |
<h1>A Minimalist App</h1> | |
<p>Hello world from Dart!</p> | |
<div id="sample_container_id"> | |
<p id="sample_text_id"></p> | |
</div> | |
<script type="application/dart" src="helloworld.dart"></script> ←対応するdartファイルを指定する | |
<script src="packages/browser/dart.js"></script> | |
</body> | |
</html> |
チュートリアル
https://www.dartlang.org/codelabs/darrrt/#set-uphttps://www.dartlang.org/docs/tutorials/add-elements/#copy-app
JavaScript 事始め
JavaScript 事始め
node.js使いたいので勉強。
もともとブラウザ内で動的なコンテンツを生成するためにつくられた言語。
以下、事始めで使ったコード。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="ja"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>JavaScriptの学習</title> | |
</head> | |
<body> | |
<h1>JavaScriptの学習</h1> | |
<p><input type="button" value="クリック!" id="myButton"></p> | |
<p>僕の名前は<span id="myName">@masazdream</span>です!</p> | |
<p>価格:<input type="text" id="price">円</p> | |
<script> | |
// 変数:データにつけるラベル | |
// データの型 | |
var message; | |
message = "Hello World! Again!" // 文字列 | |
var d1 = -5.5; // 数値 | |
var d2 = true; // 真偽 | |
var d3 = undefined; // 定義無い | |
var d4 = null; // 何も無い | |
// 配列、オブジェクトなどもある | |
//alert(message); | |
// 演算子 | |
// 代入演算子 | |
var x = 5; | |
// 文字列に関する演算子 | |
var s = "hello" + "world"; | |
// 数値に関する演算子 + - * / | |
var x = 5 * 5; // 商 | |
var x = 5 % 5; // 余り | |
var x = 1; | |
x++; // x = x + 1; | |
x--; // x = x - 1; | |
x += 5; // x = x + 5; | |
// 条件分岐(if) | |
var score = 20; | |
// >= <= < > | |
// == != | |
if(score >= 70){ | |
alert("合格!"); | |
} else if (score >= 30){ | |
alert("不合格!"); | |
} else { | |
//alert("不合格!まじめにやれ!"); | |
} | |
// switchで分岐:あらかじめ決まっている場合の条件分岐 | |
var direction = "right"; | |
var x, y; | |
switch(direction){ | |
case "right": | |
x = x + 10; | |
break; // 忘れないように注意 | |
case "left": | |
x = x - 10; | |
break; | |
case "up": | |
y = y + 10; | |
break; | |
case "down": | |
y = y - 10; | |
break; | |
default: | |
// 例外処理 | |
break; | |
} | |
// while ループ | |
var i = 0; | |
while(i < 10){ | |
console.log(i); // ブラウザのconsol に出力する | |
i++; | |
} | |
// for ループ | |
for (var j = 0; j < 10; j++){ | |
console.log(j); | |
} | |
// 関数 | |
function sum(a, b){ | |
return (a + b); | |
} | |
var result = sum(10, 22); | |
//alert(result); | |
function getPrice(x){ | |
var rate = 0.82; // ローカル変数 | |
return (x * rate); | |
} | |
console.log(getPrice(83)); | |
// 配列:グループ化されたデータ | |
var sales0 = 100; | |
var sales1 = 200; | |
var sales2 = 150; | |
var sales = [100, 200, 150]; | |
sales[1] = 180; | |
console.log(sales[1]); // 添字 | |
// 連想配列: | |
var sales = {'year2000':100, 'year2001':200, 'year2002':150}; | |
console.log(sales['year2002']); | |
// オブジェクト | |
// 日付、数値、文字列 | |
var s = new String("this is a pen."); | |
console.log(s.length); //プロパティ | |
var date = new Date(); // 現在時刻オブジェクト | |
console.log(date.getFullYear()); // メソッド | |
// Stringオブジェクト | |
var s = new String("this is a pen"); | |
console.log(s.substr(2,3)); // 2番目から3文字分とってくる | |
console.log(s.replace('pen', 'pencil')); | |
// Arrayオブジェクト | |
var a = new Array(12, 33, 44, 55); | |
var a = [12, 33, 44, 55]; | |
console.log(a.join("|")); | |
console.log(a.reverse()); | |
var d = new Date(2012, 4, 22, 7, 44, 5); // これ楽だな。月は 0 ~ 11 | |
console.log(d.getMonth()); | |
console.log(d.getTime()); // UTC 経過時間 | |
// Math オブジェクト | |
// プロパティ | |
console.log(Math.PI); | |
console.log(Math.SQRT2); | |
// メソッド | |
var x = 5.238; | |
console.log(Math.floor(x)); // 整数に切り捨て | |
console.log(Math.ceil(x)); // 切り上げ | |
console.log(Math.round(x)); // 四捨五入 | |
console.log(Math.random()); // ランダム数 | |
// Browserオブジェクトモデル(BOM) | |
//console.log(window.innerHeight); // ブラウザの大きさに応じた処理に使える | |
// hrefを変化させる | |
//window.location.href = "http://google.com"; | |
// 文書を扱う document object model (DOM) | |
// console.log(document.width); ← 廃止 | |
//document.body.bgColor = "red"; | |
// ページ内の要素の変更 | |
var e = document.getElementById('myName'); | |
e.innerHTML = '真宏'; | |
var n = document.getElementById('price'); | |
n.value = 500; | |
// この↓の処理はonloadに書かないとエラーになることあり | |
var e = document.getElementById('myButton'); | |
//e.onclick = function () { | |
// alert("クリックされました!"); | |
//} | |
// タイマー処理 | |
// setTimeout:一定時間後に何かする | |
setTimeout(function (){ | |
console.log("2secたちました!") | |
}, 2000); | |
// setInterval: 一定周期毎に何かする | |
var n = 0; | |
setInterval(function(){ | |
console.log(n++); | |
}, 1000); | |
</script> | |
</body> |
2013年11月13日水曜日
chrootユーザを作成する
sftp限定ユーザの作成
#useradd test#passwd test
#usermod -d / test
#chown root:root /home/test
#chmod 755 /home/test
#mkdir /home/test/files
#chmod 755 /home/test/files
#chown test:test /home/test/files
#groupadd sftponly
#usermod -G sftponly test
#vi /etc/ssh/sshd_config
Subsystem sftp internal-sftp Match group sftponly ChrootDirectory /home/%u X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp
登録:
投稿 (Atom)