2013年11月17日日曜日

AngularJS IN DART

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

Google Dart 事始め

Google Dartの正式版がリリースされたので使ってみる。

公式ページ


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

言語仕様


  1. クラスを使う
  2. クラスの外側にメソッドが記述可能
  3. オプションと引数:Javaと違って省略引数可能。C++のように後ろの引数を省略 or 引数に名前をつけて省略
  4. 文字列インターポレーション:php的に、"Hello, ${name}"とできる
  5. マルチライン文字列: ($s=<<END;) のような文字列リテラル
  6. 動的メソッドハンドリング:実行時にメソッドがあるか確認する
  7. カスケード演算子: JavaScript の with。
  8. オプショナルな型:小さなアプリなら型をかかない、ちゃんとしたアプリでは型をかく、が選べる
  9. レキシカルスコープ:{}が識別子のスコープ。クロージャ(Java8で実装予定のλや無名関数で実現する関数オブジェクトの一種)やローカル変数キャプチャもOK。
  10. ライブラリ:Pub(オープンなリポジトリで便利)
  11. 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++にある演算子はほぼそのまま使える


関数とラムダ式


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) );
}
view raw ramda.dart hosted with ❤ by GitHub

クラスの継承

前半にも書いたが、多重継承は不可。


ジェネリクス

使える。型制約も可能。


DART SDK


  • dart : Dart処理系(Dart VM) Dart VMを搭載したブラウザだと動作。V8より高速。
  • frogc(dart2js) : dartからjsへのコンパイラー 
これ直接使うのはしんどい。Dart Editorのバックエンドとして動いてるって知っておく程度。


DART用HTMLファイル

cssとdartファイル指定。JavaScriptを生成してWebサーバに配置すればOK.

<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>
毎日さっくりと使えるTODOリストが無かったのでサンプルから作成。


以上。ワクワクする仕様。何つくろうかな。

チュートリアル

https://www.dartlang.org/codelabs/darrrt/#set-up
https://www.dartlang.org/docs/tutorials/add-elements/#copy-app

JavaScript 事始め

JavaScript 事始め

node.js使いたいので勉強。

もともとブラウザ内で動的なコンテンツを生成するためにつくられた言語。
以下、事始めで使ったコード。

<!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>
view raw js_fitst.html hosted with ❤ by GitHub

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