Archive for 11월 2013

Dart-Box2d 가 벌써 포팅되어 나왔군요. ㅠㅠ

Dart 언어를 안지 몇일 안된 시점인데 검색하니 벌써 참으로 많은 것들이 되어 있었습니다.

https://github.com/dart-lang/dart-box2d

벌써 박스2d가 다트로 포팅되었네요 ㅎㄹ

http://japhr.blogspot.kr/2011/12/getting-started-with-dart-editor-and.html

여기도 참조할 만한 사이트 인것 같아서 정리차원에서 긁어 왔습니다.

 

[DART] Dart: Up and Running 스터디 해봐요. 4

안녕하세요~ 갑부인택입니다.

하하하… 지난 번까지는 완전 화면 스샷도 없고 이상한 글로만 도배해서 재미가 없었습니다.

네네 인정합니다.

그래서 이번에는 속죄양으로 webgl 을 이용한 뭐 간단한 도형들을 출력해 보려고요.

소스출처는 https://github.com/jtmcdole/dart-webgl 입니다.

github 가 열리는 데요. 거기서

스크린샷 2013-11-26 오전 5.28.31

Download ZIP 을 누르십니다. ㅋㅋ 우측 하단 보이시죠? ㅋㅋㅋㅋ

압축을 풀고 나서 DartEditor 에서

스크린샷 2013-11-26 오전 5.30.28

 

File > Open Existing Folder 를 선택하십니다. (사실 저는 다 아시겠지만 에디터의 좌측 창 (흰부분에서 우측클릭을 더 자주 이용 합니다.) 아 저 센스 없게 뒤에서 이미 결과가 캡쳐 되어 버렷군요. 네 맞습니다 저게 이번 강좌 내용중 결과 일부 입니다.

도형들 출력되면서 막막 돌아가요.. ㅋㅋㅋ

소스도 봐야 되는데 아 막 막 걱정되요. ㅋ

저는 참으로 이쁜걸 좋아합니다. 아… 286AT에서 Turbo-C 2.0띄워놓고 안녕하세요 Turbo-C 로 기억되는 책의 예제를 따라 친후.. 흑백화면에 하트가 떴을때의 그 기분… 캬….. 요걸 17년 지난 지금 또 느껴보려 하고 있네요.. ㅋㅋ 캬…

원래는 막막 화려하게 돌아가는 lesson 4를 보시죠 하고 싶었지만… ㅠㅠ 현실은 lesson 1 을 가져 오네요… ㅠㅠ

===========================================================================

// Copyright (c) 2013, John Thomas McDole.

/*

* Licensed under the Apache License, Version 2.0 (the “License”);

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

*     http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an “AS IS” BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

part of learn_gl;  // 이거 좀 분량 되더라고요.. learn_gl의 일부래요.

 

/**

* Staticly draw a triangle and a square!

*/

class Lesson1 extends Lesson { // Lesson을 상속받네요.

GlProgram program; // GlProgram 클래스를 선언합니다.

 

Buffer triangleVertexPositionBuffer, squareVertexPositionBuffer;

 

Lesson1() {

program = new GlProgram(”’

precision mediump float;

 

void main(void) {

gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);

}

”’,”’

attribute vec3 aVertexPosition;

 

uniform mat4 uMVMatrix;

uniform mat4 uPMatrix;

 

void main(void) {

gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);

}

”’, [‘aVertexPosition’], [‘uMVMatrix’, ‘uPMatrix’]);

gl.useProgram(program.program);

 

// Allocate and build the two buffers we need to draw a triangle and box.

// createBuffer() asks the WebGL system to allocate some data for us

triangleVertexPositionBuffer = gl.createBuffer();

 

// bindBuffer() tells the WebGL system the target of future calls

gl.bindBuffer(ARRAY_BUFFER, triangleVertexPositionBuffer);

gl.bufferDataTyped(ARRAY_BUFFER, new Float32List.fromList([

0.0,  1.0,  0.0,

-1.0, -1.0,  0.0,

1.0, -1.0,  0.0

]), STATIC_DRAW);

 

squareVertexPositionBuffer = gl.createBuffer();

gl.bindBuffer(ARRAY_BUFFER, squareVertexPositionBuffer);

gl.bufferDataTyped(ARRAY_BUFFER, new Float32List.fromList([

1.0,  1.0,  0.0,

-1.0,  1.0,  0.0,

1.0, -1.0,  0.0,

-1.0, -1.0,  0.0

]), STATIC_DRAW);

 

// Specify the color to clear with (black with 100% alpha) and then enable

// depth testing.

gl.clearColor(0.0, 0.0, 0.0, 1.0);

}

 

void drawScene(num viewWidth, num viewHeight, num aspect) {

// Basic viewport setup and clearing of the screen

gl.viewport(0, 0, viewWidth, viewHeight);

gl.clear(COLOR_BUFFER_BIT | DEPTH_BUFFER_BIT);

gl.enable(DEPTH_TEST);

gl.disable(BLEND);

 

// Setup the perspective – you might be wondering why we do this every

// time, and that will become clear in much later lessons. Just know, you

// are not crazy for thinking of caching this.

pMatrix = Matrix4.perspective(45.0, aspect, 0.1, 100.0);

 

// First stash the current model view matrix before we start moving around.

mvPushMatrix();

 

mvMatrix.translate([-1.5, 0.0, -7.0]);

 

// Here’s that bindBuffer() again, as seen in the constructor

gl.bindBuffer(ARRAY_BUFFER, triangleVertexPositionBuffer);

// Set the vertex attribute to the size of each individual element (x,y,z)

gl.vertexAttribPointer(program.attributes[‘aVertexPosition’], 3, FLOAT, false, 0, 0);

setMatrixUniforms();

// Now draw 3 vertices

gl.drawArrays(TRIANGLES, 0, 3);

 

// Move 3 units to the right

mvMatrix.translate([3.0, 0.0, 0.0]);

 

// And get ready to draw the square just like we did the triangle…

gl.bindBuffer(ARRAY_BUFFER, squareVertexPositionBuffer);

gl.vertexAttribPointer(program.attributes[‘aVertexPosition’], 3, FLOAT, false, 0, 0);

setMatrixUniforms();

// Except now draw 2 triangles, re-using the vertices found in the buffer.

gl.drawArrays(TRIANGLE_STRIP, 0, 4);

 

// Finally, reset the matrix back to what it was before we moved around.

mvPopMatrix();

}

 

/**

* Write the matrix uniforms (model view matrix and perspective matrix) so

* WebGL knows what to do with them.

*/

setMatrixUniforms() {

gl.uniformMatrix4fv(program.uniforms[‘uPMatrix’], false, pMatrix.buf);

gl.uniformMatrix4fv(program.uniforms[‘uMVMatrix’], false, mvMatrix.buf);

}

 

void animate(num now) {

// We’re not animating the scene, but if you want to experiment, here’s

// where you get to play around.

}

 

void handleKeys() {

// We’re not handling keys right now, but if you want to experiment, here’s

// where you’d get to play around.

}

}

 

에잇….

스크린샷 2013-11-26 오전 5.42.04

 

실행된 화면만 캡쳐해 보아요… ㅠㅠ

스크린샷 2013-11-26 오전 5.44.19

스크린샷 2013-11-26 오전 5.44.55

 

Lesson 3 은 요, Lesson2 의 도형들이 막 회전해요.

스크린샷 2013-11-26 오전 5.46.10

 

스크린샷 2013-11-26 오전 5.46.48 스크린샷 2013-11-26 오전 5.47.27

 

아시겟지만 Lesson6은 커서를 누르면 막 돌아요… ㅋㅋ

 

스크린샷 2013-11-26 오전 5.48.33

 

 

스크린샷 2013-11-26 오전 5.49.10

스크린샷 2013-11-26 오전 5.49.44

 

 

스크린샷 2013-11-26 오전 5.59.16

 

 

레슨 10은 캡쳐 포기.. 11은요.. 달인데요… 마우스로 잡고 드래깅 하면 우어 막 돌아요… ㅋㅋ 마우스 따라서 회전… ㅎㅎ

 

스크린샷 2013-11-26 오전 6.01.24

 

12는 달과 상자가 서로 보면서 공전? 해요.. ㅋㅋ 자전은 모르겠어요. ㅋㅋ

13도 달과 상자인데 좀 크게 확대되서 돌고요… – 그래서 캡쳐 포기.

14는 주전자가 나와요 막 돌아요… ㅋㅋㅋ… 돈데크만이 생각나는것은 왜일까요? ㅋㅋㅋㅋㅋㅋ

스크린샷 2013-11-26 오전 6.02.57

15는 지구가 막 막 자전해요. ㅋㅋ

스크린샷 2013-11-26 오전 6.04.31

 

16은 노트북이랑 그 화면안에 객체들이 막 움직여요… ㅋㅋ

스크린샷 2013-11-26 오전 6.05.32

 

왠지 이번 시간엔 공부 안하고 땡땡이 친 기분이네요… . ㅋㅋㅋ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[DART] Dart: Up and Running 스터디 해봐요. 3

앗 이것은 지난 시간의 짜투리 입니다.

const bar = 1000000;       // Unit of pressure (in dynes/cm2)
    const atm = 1.01325 * bar; // Standard atmosphere

 

아하~ 갑부인택이가 또 왔습니다.

갑부는 진짜 갑부라기 보다 갑부를 꿈꾸는 제 별명정도 입니다. ㅋㅋㅋㅋ

이번에는 Dart의 Built-in Types 입니다.

The Dart language has special support for the following types:

  • numbers
  • strings
  • booleans
  • lists (also known as arrays)
  • maps

다 아시겠지만… 확인차 … 에험.. 목을 가다듬고 .. 적어 볼게요.

Dart 언어는 다음 형식을 특별히 지원하지요.

numbers 숫자, strings 문자, booleans 논리형, lists (arrays로도 알려져 있지요… 배열정도? ㅋ), 그리고 maps(dictionary 라고도.. ㅋㅋ KeyValue .. )

 

1. Numbers 에는 int 형과 double 형이 있네요.

int (임의크기의 인티져),

var x = 1;
    var hex = 0xDEADBEEF;
    var bigInt = 346534658346524376592384765923749587398457294759347029438709349347;

double (64-bit (double-precision) floating-point numbers, as specified by the IEEE 754 standard )

var y = 1.1;
    var exponents = 1.42e5;

문자를 숫자로 혹은 그 반대롱…

// String -> int
    var one = int.parse('1');
    assert(one == 1);
    // String -> double
    var onePointOne = double.parse('1.1');
    assert(onePointOne == 1.1);
    // int -> String
    String oneAsString = 1.toString();
    assert(oneAsString == '1');
    // double -> String
    String piAsString = 3.14159.toStringAsFixed(2);
    assert(piAsString == '3.14');

물론 비트 연산도

assert((3 << 1) == 6);  // 0011 << 1 == 0110
    assert((3 >> 1) == 1);  // 0011 >> 1 == 0001
    assert((3 | 4)  == 7);  // 0011 | 0100 == 0111

 

Strings

A Dart string is a sequence of UTF-16 code units. You can use either single or double quotes to create a string:  – 다트 String은 UTF-16코드 개체의 연속(반복)입니당.

var s1 = 'Single quotes work well for string literals.';
    var s2 = "Double quotes work just as well.";
    var s3 = 'It\'s easy to escape the string delimiter.';
    var s4 = "It's even easier to just use the other string delimiter.";

 

by using ${expression}.  요놈도 사용가능하고요.

var s = 'string interpolation';
assert('Dart has $s, which is very handy.' ==
           'Dart has string interpolation, which is very handy.');
    assert('That deserves all caps. ${s.toUpperCase()} is very handy!' ==
           'That deserves all caps. STRING INTERPOLATION is very handy!');
헐 여러줄 문자열도 가능합니다.
var s1 = '''
    You can create
    multi-line strings like this one.
    ''';
    var s2 = """This is also a
    multi-line string.""";

You can create a “raw” string by prefixing it with r.  앞에 r붙여서 :raw; 문자 생성도 가능하죠.
var s = r”In a raw string, even \n isn’t special.”;

 

Booleans (논리형 입니다. 참 혹은 구라.. 가 아니라 거짓. ㅋ)

To represent boolean values, Dart has a type named bool.  – 다트에선ㄴ bool 입니다. 불불불….

true, false 리터럴이죠.

var name = 'Bob';
    if (name) {
      print('You have a name!'); // Prints in JavaScript, not in Dart.
    }

 

If you run this code as JavaScript, without compiling to Dart, it prints “You have a name!” because name is a non-null object. However, in Dart running in production mode, the above doesn’t print at all because name is converted to false (because name ! = true). In Dart running in checked mode, the above code throws an exception because the name variable is not a bool.  – 요거를 자바스크립트에서 실행하면 (다트에서 컴파일 안하고요..) 유 해브 어 네임 이 출력 되요. 왜냐면 name은  null이 아닌 객체잖아요. 하지만 Dart에서 production 모드로 실행하면 출력안해요. name 은 참이 아니고 false로 변환되서요. ㅠㅠ Dart checked mode 에서 실행하면요 이거 불값 아니데요?? 라면서 예외를 던집니당. ㅋㅋㅋ

Here’s another example of code that behaves differently in JavaScript and Dart:

    if (1) {
      print('JavaScript prints this line because it thinks 1 is true.');
    } else {
      print('Dart in production mode prints this line.');
      // However, in checked mode, if (1) throws an exception
      // because 1 is not boolean.
    }
// Check for an empty string.
    var fullName = '';
    assert(fullName.isEmpty());
    // Check for zero.
    var hitPoints = 0;
    assert(hitPoints <= 0);
    // Check for null.
    var unicorn;
    assert(unicorn == null);
    // Check for NaN.
    var iMeantToDoThis = 0/0;
    assert(iMeantToDoThis.isNaN());

 

Lists

아마 왠만한 프로그래밍 언어에서 열라게 쓰이는 일반적인 collection 일겁니다 리스트.. ㅋㅋ

순서가 있는 객체 그룹 (뭐 array라고도 하지요)이죠. Dart 에서도 어레이를 List 객체라고 하니깐 lists로 부르죠. ㅎㅎ

var list = [1,2,3]; // javaScript 스럽죠?
var list = [1,2,3];
    assert(list.length == 3);
    assert(list[1] == 2);

 

* Maps

맵 하면 Key Value죠… ㅋㅋ 영한사전 같은 .. ㅋㅋ apple = ‘사과’ 뭔 이런… ㅎㅎ

 

Here’s a simple Dart map: – 다트의 맵 객체 데모용… ㅋㅋㅋ

    var gifts = {                         // A map literal
    // Keys       Values
      'first'  : 'partridge',
      'second' : 'turtledoves',
      'fifth'  : 'golden rings'

};

var map = new Map();
map[1] = 'partridge';
map[2] = 'turtledoves';
map[5] = 'golden rings';
// use a map constructor.
// key is 1; value is 'partridge'.
// key is 2; value is 'turtledoves'.
// key is 5; value is 'golden rings'.

 

이렇게도 생성 가능하지용.

You add a new key-value pair to an existing map just as you would in JavaScript:

    var gifts = { 'first': 'partridge' };
    gifts['fourth'] = 'calling birds';    // Add a key-value pair

You retrieve a value from a map the same way you would in JavaScript:

    var gifts = { 'first': 'partridge' };
    assert(gifts['first'] == 'partridge');

If you look for a key that isn’t in a map, you get a null in return.

    var gifts = { 'first': 'partridge' };
    assert(gifts['fifth'] == null);

Built-in Types

Use .length to get the number of key-value pairs in the map:

    var gifts = { 'first': 'partridge' };
    gifts['fourth'] = 'calling birds';
    assert(gifts.length == 2);

 

아아아아아… 이거 멋진 웹앱은 언제 만들려나요? ㅠㅠㅠ

아 몰라요.. 이번화는 여기서 짤 입니당. ㅋ

36/136 했네요. ㅠ

 

 

 

[DART] Dart: Up and Running 스터디 해봐요. 2

시작 하고 몇자 끄적인 것 밖에 없는데 벌써 Chapter 2를 맞이 하였습니다.

하핫 ^^;;;

각설하고 바로 학습으로 들어갈게요…

// => 역시나 Dart 에서도 주석으로 채택되었네요. ㅋ

num : A type. Some of the other built-in type are String,int,and bool.

num은 숫자 타입이고요. 다른 타입들로는 String,int 그리고 bool 이 있습니다.

100 : A number is literal. Literals are a kind of compile-time constant.

100 : 숫자는 리터럴 입니다. 리터럴들은 컴파일 시에 상수의 한 종류이지요.

print() : A handy way to display output.

print():출력함수죠.

$varialeName : (or ${expression})

String interpolation : including a variable or expression’s string equivalent inside of a string literal.

문자열 리터럴의 내부 변수 나 식의 문자열.

main() : The special, required, top-level function where app execution starts.

main()  함수 : 특별한 (꼭 있어야 함), 최고 레벨의 함수입니다. (앱 실행의 시작점 이죠.)

var : A way to declare a variable without specifying its type.

var : 특정 타입 없이 변수를 선언할때 사용함.

 

* Important Concepts

Dart 언어를 배울때, 요고를 기억해 주세용.

1. Everything you can place in a variable is an OBJECT!!, and every object is an instance of a class.

Even numbers and functions are objects. All objects inherit from the Object class.

1.  당신이 변수에 배치 할 수있는 모든 것은! OBJECT이며, 모든 객체는 클래스의 인스턴스입니다.

어떤 수와 함수들은 Object 입니다. 모든 개체는 Object 클래스에서 상속합니다.

 

2. Specifying static types (such as num in the preceding example) clarifies your intent

and enables static checking by tools, but it’s optional. (You might notice when you’re

debugging your code that objects with no specified type get a special type: dynamic.)

2. (전의 예제의 num 같은) 정적 변수를 선언은 여러분의 의도를 명확하게 하고, 도구에 의해 정적 검사를 가능하게 합니다.

(여러분은 코드를 디버깅 할때 동적 타입을 알수 있습니다.) – 뭔소린지.. 발 번역은 넘기고 원본 참고 하세요.. ㅠㅠ 이런 영어.. ㅠㅠ

• Dart parses all your code before running it. You can provide tips to Dart—for example, by using types or compile-time constants—to catch errors or help your code run faster.

Dart는 실행 전에 모든 코드를 파싱합니다. Dart에게 팁을 제공할수 있습니다. 예를 들자면, type이나 상수를 컴파일 시에 사용하거나, catch error 등을 사용한다면, 코드 실행을 좀더 빠르게 하는데 도움이 됩니당.

아 번역이 점점 더 어려워 집니다.

그냥 영어 보실까요??

  • Dart supports top-level functions (such as main()), as well as functions tied to a class or object (static and instance methods, respectively). – Dart 는 최고레벨 함수 (main()같은)를 지원합니다. 함수는 클래스나 객체와 연관되죠.
  • Similarly, Dart supports top-level variables, as well as variables tied to a class or object (static and instance variables). Instance variables are sometimes known as fields or properties. – 마찬가지로, 다트는 최상위 변수뿐만 아니라, 클래스 또는 객체 (정적 및 인스턴스 변수)에 묶여 변수를 지원합니다. 인스턴스 변수란게 뭐 있나요 종종 필드 또는 속성불리는 그거죠…
  • Unlike Java, Dart doesn’t have the keywords public, protected, and private. If an identifier starts with an underscore (_), it’s private to its library. For details, see “Libraries and Visibility” (page 46). – 헐, 자바와는 다르게 Dart는 public,protected,private 등의 키워드를 갖지 않아요. 밑줄로 시작하는 식별자를 지니면 그 private 라이브러리네요.
  • Identifiers can start with a letter or _, followed by any combination of those char‐ acters plus digits. – 식별자는 문자, 밑줄로 시작가능하고요. 문자와 함께 쓰인 숫자도 가능하네요.
  • Sometimes it matters whether something is an expression or a statement, so we’ll be precise about those two words. – 뭐래니? 때때로 수식이나 구문이다, 두 단어로 가능하다고?
  • Dart tools can report two kinds of errors: warnings and errors. Warnings are just hints that your code might not work, but they don’t prevent your program from executing. Errors can be either compile-time or run-time. A compile-time error prevents the code from executing at all; a run-time error results in an exception (page 32) being raised while the code executes. – Dart 는 두종류의 오류를 보고 하는데요. 경고와 오류죠. 경고는 단지 동작하지 않는 코드에 대한 힌트가 아닌 실행시 여러분의 프로그램이 예방하지 못하는 거고요, 오류는 컴파일 시나 런타임때 둘다 가능합니다. 컴파일 오류는 실행시 모든 오류와 예외발생시 결과를 보여줍니다.
  • Dart has two runtime modes: production and checked. Production is faster, but checked is helpful at development. – Dart는 두 실행 모드가 있어요. Production 과 checked입니다. Production이 빠르죠. 하지만 Checked는 개발시에 도움을 줍니당.

Runtime Modes

개발시 디버그는 Checked 모드에서 하고요, deploy는 Production 모드라 일컫죠.

프로덕션 모드는요 … 다트 프로그램 의 속도에 최적화 된 기본 설정 실행 모드입니다.

체크모드는요 개발 친화적인 모드인데요.. 실행하는 동안에 뭐 좀 오류 같은거 잡아줍니다. 예를 들자면, num으로 선언한 변수에 number 아닌거 할당한 경우에요, 예외를 던져 주죠…ㅋㅋㅋ 뭔지 감 오시죠?

 

Variables

변수 입니다.

var name = ‘Bob’; 인데 var name = ‘인택’; 으로 할게요.. 제가 인택인지라… ㅋㅋㅋ

변수는 참조(references)입니다. name 변수는 String object 인  ‘Bob’ 혹은 ‘인택’을 참조 (가르킨다)하는 거죠.

 

Default Value

초기화 안된 변수는 null값으로 초기화 해요. numeric타입 변수를 포함한 모든 변수들은 null로 초기화 된다네요. 왜냐면.. 위에서 그랬잖아요. Numbers 도 객체니깐여. ㅋㅋ

int lineCount;
    assert(lineCount == null);
    // Variables (even if they will be numbers) are initially null.

 

* assert는 production 모드에서는 무시 되요. Checked mode 에서는 조건이 참이 아니면 예외를 마구 던져되죠.

 

Optional Types

변수 선언할때요 정적 타입으로 할수 있어요. String name = ‘인택’;

Final and Const

값 불변을 원한다면 Final 이나 Const를 사용해요.

final 변수는 오직 한번 값이 설정될 수 있고요. const 변수는 컴파일 시 상수 입니다.

최고 레벨 local 혹은 클래스 변수 final 을 사용해 초기화 선언시에 사용합니다.

final name = 'Bob';   // Or: final String name = 'Bob';
    // name = 'Alice';    // Uncommenting this results in an error

 

아 좀 길어 진것 같아요… 제 맘대로 여기서 끊습니다. 하하하

Built-in type 은 다음으로 미룰게요. 캬캬 다음도 기대해 주세요. 훗.

 

 

 

[DART] Dart: Up and Running 스터디 해봐요.

스크린샷 2013-11-26 오전 3.07.22 이 책을 기준으로 스터디 해 보려고 합니다.

================================

import ‘dart:math’;

 

class Point {

num x,y;

Point (this.x, this.y);

num distanseTo(Point other){

var dx = x – other.x;

var dy = y – other.y;

return sqrt (dx*dx + dy * dy);

}

}

 

main(){

var p = new Point(2,3);

var q = new Point(3,4);

print(‘distance from p to q = ${p.distanseTo(q)}’);

}

 

========================

 

Dart 언어도 클래스 개념이 있네요.

우선 지난번의 HelloWorld2.dart를 지우고, 이 내용을 추가해 보았습니다.

크로미움에서는 뭐 따로 뜨긴 했지만요… DartEditor 의 실행창에서 결과를 띄워 주네요.

이건 꼭 자바 같은 느낌이 드네요.. ㅎㅎ

 

스크린샷 2013-11-26 오전 3.37.14

 

 

P3 에 보면 Dart is easy to learn. 이라네요. 이 말 믿고 화이팅 내어 봅시다요! ^^

 

 

* Dart 는 자바스크립트를 컴파일 합니다. 다트 앱은 거의 모든 현대 웹 환경에서 실행이 가능하죠. (So that Dart apps can run across the entire modern web.)

* 아시다시피 Dart 는 오픈소스 입니다. dart.google-code.com 에 소스 저장소가 위치하고 있습니다.

 

.. A Tour of the Dart Language …

[[ A Basic Dart Program ]]

printNumber(num aNumber){

print (‘The Number is $aNumber.’);

}

main() {

var number = 42;

printNumber(number);

}

단순히 이렇게만 DartEditor 에 입력해도 결과를 출력해 줍니다. (출력창에요.)

다음에 이어서 계속 할게요..

 

Dart Language를 건드려 봅시다. 2

 

 

 

지난번에는 Dart editor 를 설치하고 예제를 돌려보기 까지 해 보았습니다.

 

하지만 한가지 아쉬웠던 점이 있지요.. 바로바로 HelloWorld 찍기였는데요…

 

제가 그것을 간과하고 말았습니다. ㅠㅠ 죄송.

우선 메뉴바에서 File -> New Application 을 선택합니다.

스크린샷 2013-11-25 오전 12.56.25

 

스크린샷 2013-11-25 오전 12.56.41

 

그러면 역시나 Application name 을 입력하라고 합니다. 저는 HelloWorld2 를 입력하겠습니다.

(캡쳐전에 이미 HelloWorld를 만들어 놔서요.. ㅠㅠ)

 

 

 

스크린샷 2013-11-25 오전 12.56.59이제 여기서 Finish 를 눌러 줍니다.

스크린샷 2013-11-25 오전 12.57.16

와우… 드디어 우리의 첫 프로젝트가 생성 되었습니다. 입력을 하지 않아도 기본적인 틀이 입력된 채로 생성되었습니다.

역시나 바로 Play 실행 버튼을 눌러 봅니다.스크린샷 2013-11-25 오전 12.57.34

 

그럼 또다시 반가움 크로미움이 실행되면서 Click me! 를 출력합니다.

화면 상단에 아주아주 반가운 HelloWorld2 도 출력되었습니다.

주목할 점은 주소창의 127.0.0.1 에 포트는 3030을 쓰고 있다는 점 정도가 되겠네요.

이제 주저 하지 말고 바로 Click me! 를 눌러 보겠습니다.

 

스크린샷 2013-11-25 오전 12.57.42

켁.. 아 이게 뭔가요? 뭔가 섹쉬> 한 이미지를 바랬던 저의 착각일까요… ㅋㅋ 그저 스트링을 뒤집어 주네요. ㅎㅎㅎ

아…

 

import ‘dart:html’; ==> 이녀석을 임포트 하고…

void main() {

querySelector(“#sample_text_id”)  // 쿼리 셀렉터로 버튼을 지정한 뒤에…

..text = “Click me!” // 제목설정해주고…

..onClick.listen(reverseText); // 리스너도 달아 주는군요…

}

 

void reverseText(MouseEvent event) {  // 마우스 이벤트를 받으면 실행되는 부분

var text = querySelector(“#sample_text_id”).text; 쿼리 셀렉터의 text 값을 읽어오네요. Click me! 였지요…

var buffer = new StringBuffer(); // var 로 버퍼를 생성해 주네요.

for (int i = text.length – 1; i >= 0; i–) {

buffer.write(text[i]); // 기존 text 길이-1 부터 0 까지 스트링을 절단하여 값을 (배열에서 읽어와) 버퍼에 쓰네요… 즉 뒤집힌 결과가 되겠네요.

}

querySelector(“#sample_text_id”).text = buffer.toString(); // 그 버퍼의 값을 다시 쿼리 셀렉터 저 버튼에 다시 셋팅을 해 줍니다.

}

 

이래서 뒤집어 진것이군요… ㅎㅎ

 

일단 여기 까지 입니다.

앞으로 무엇을 해 볼까? 고민해봐야 겠습니다.

 

일단 Reference 공부 부터 인가요 ㅋ

 

 

 

 

 

Dart Language를 건드려 봅시다.

DartPageLogo

이런 서비스가 있다는 것도 알게 된지 얼마 안되었는데 이미 나온지 1년이 되었다고 합니다. 참…

구글에서는 참 많은 서비스들을 제공한다는 생각이 듭니다. ^^

각설하고 일단 www.dartlang.org 에서 Darteditor를 다운 받습니다.

이런 서비스에 한국말 지원하겠어? 라는 생각을 하던 찰라에 이미

http://dartlang-korea.blogspot.kr/

GDG Dartlang Korea의 블로그가 있다는 것을 알았습니다. 후훗. 역시 대단한 분들이 많네요.

다운로드가 완료 되면

darteditor

 

이런 Eclipse 틱한 화면을 보시게 됩니다. 정말 Eclipse에 다가 Adnroid Developer Toolkit 마냥 씌운것인지 독자 개발인지는 잘 모르겠네요. 하하하. ㅠㅠ

일단 Sunflower를 클릭해 봅니다. Demos of Dart 의 맨처음 프로젝트 입니다. 보이시죠???

sunflower

음… 로딩이 잘 되었습니다.

첫 느낌은 자바언어를 보는듯 했다가 .. C 같기도 했다가 그러네요.. ㅎㅎ

그리고 canvas 같은 HTML5 용어도 보입니다. 일단 Run 버튼… 제목 표시줄 밑의 녹색 플레이 버튼을 눌러 봅니다.

오호라 크로미움이 실행되면서 슬라이더 바와 함께 우리의 해바라기(?)를 보여 줍니다.

 

sunflower-run

 

슬라이더로는 seed값을 변형해 주면서 크기를 변화 시킵니다.

웹쪽 언어 답게 .dart 뿐만 아니라 .css 와 .html도 보입니다.

저의 웹앱 올리는 날을 기대해 보면서 dart 를 좀더 가지고 놀아봐야 겠습니다 .^^ 하하…

 

오늘은 여기까지 입니다. 끝.

http://miruel.tistory.com/29 주인장님 감사합니다.

저는 맥으로 해 보았습니다.

 

 

[펌글] 좋은 프로그래머가 되는 24가지 방법

평생 개발자로 일하기 위해서 가져야 할 좋은 습관들을 알아보자. 추가로 의견이 있으면 댓글로 달아서 같이 공유를 하면 어떨까?

1. 프로그래밍에 열정이 있어야 한다. 열정이 없고 즐기지 못하면 평생 지속하기 어려운 일이다. 지금 환경이 있는 열정도 꺾어버릴 만큼 열악하다면 심각하게 변화를 생각해야 한다.

2. 프로그래밍 기초 원리를 이해해야 한다. 원리를 모르면 근본적인 해결능력이 떨어지고 수준 높은 개발을 하기 어렵다.

3. 문제 해결 능력을 키워야 한다. 개발자의 가장 중요한 핵심 역량이다.

4. 창의적인 사람이 되라. 대부분의 좋은 해결책은 창의력에서 나온다.

5. 다른 사람의 소스코드를 이해할 수 있는 능력을 키워야 한다. 다른 사람의 소스코드에서 많은 것을 배울 수 있다.

6. 수학을 잘 해야 한다. 수학을 못하면 값싼 쉬운 개발 밖에 못한다. 수학에 관심을 가지고 재미를 느껴보는 것도 한 방법이다.

7. 좋은 커뮤니케이션 스킬을 갖도록 노력해야 한다. 프로그래밍은 컴퓨터와 얘기하는 것이 아니고 사람들과 얘기하는 것이다.

8. 협업 능력을 키워라. 다른 사람과 일을 나눠서 할 수 있어야 내 몸값이 비싸진다. 혼자 일하는 것만 잘하면 평생 혼자 일해야 한다.

9. 논쟁(debate) 능력을 키워야 한다. 고급 개발자가 될 수록 토론하는 일이 늘어날 것이며, 좋은 토론이 좋은 소프트웨어를 만든다.

10. OOP를 완전히 이해해야 한다. OOP는 좋은 Architecture의 핵심이고, 협업능력을 키울 수 있게 해준다.

11. 남이 이해할 수 있는 문서를 작성할 수 있어야 한다. 문서 작성은 평생 따라다니는 중요한 업무이다. 문서작성을 못하는 개발자는 값싼 개발밖에 못한다.

12. 적어도 한가지의 개발언어는 완전히 마스터를 해야 한다. 마스터한 개발언어로는 어떠한 문제도 풀 수 있어야 한다. 모든 개발언어는 원리가 비슷하므로 다른 개발언어도 쉽게 배울 수 있다.

13. 적어도 한가지의 스크립트 언어를 구사할 수 있어야 한다. 간단한 툴은 쉽게 만들어 쓸 수 있다. 스크립트 언어로 쉽게 할 수 있는 일을 C언어로 작성하고 있다면 당장 Python을 공부해라.

14. 비즈니스를 이해해야 한다. 훌륭한 아키텍트가 될 것이다. 좋은 Architect는 비즈니스 전략에서 나온다. 비즈니스에 관심이 없다면 당장 돌아가는 Software는 만들 수 있어도 좋은 Architecture는 못 만든다.

15. 주변에 나보다 훨씬 뛰어난 프로그래머를 둬라. 끊임 없이 배울 수 있다. 주위의 뛰어난 개발자를 경쟁상대라고 생각하지 말고 스승으로 생각해라. 그도 나를 스승으로 생각할 것이다.

16. 끊임 없이 새로운 기술을 익혀라. 전쟁에서 쓸 무기가 많아질 것이다. 몇 가지 소수의 익숙한 기술만 고집하면 도태될 수 있다.

17. 습관적으로 주석을 달아야 한다. 주석은 남을 위해서 다는 것이 아니고 프로그래밍의 일부이다. 주석이 없어도 이해가 가능한 코드를 작성하는 것이 좋지만 그래도 주석은 꼭 필요하고 Doxygen등의 주석을 꼭 이용해라.

18. 남이 이해하기 쉬운 코드를 작성해야 한다. 나중에 내 발목을 잡지 않을 것이다. 내가 좀더 위로 올라가기 위해서는 아래가 자유로워야 한다.

19. 리뷰와 친해져야 한다. 평생 리뷰를 하며 사는 것이 프로그래머의 인생이다. 리뷰를 하지 않으면 발전하기 어렵다. 리뷰는 지금 프로젝트의 문제도 해결해줄 뿐만 아니라 내 프로그래머 인생의 가장 좋은 스승이다.

20. 건강을 유지해라. 건강을 잃으면 실력이고 뭐고 다 필요 없다. 야근도 좋지만 좋은 음식을 먹고 꾸준히 운동도 하자.

21. 좋은 의자를 사라. 건강을 지켜주고 효율을 높여준다. 프로그래머에게 의자는 침대보다 오래 머무르는 곳이다. 비싸고 좋은 의자일수록 좋다.

22. 인생을 즐길 줄 알아야 한다. 프로그래머로 오래 지속하고 싶으면 인생 자체를 즐기는 다양한 방법을 익혀야 한다.

23. 소프트웨어 공학을 익혀라. 주먹구구식 개발에서 벗어나게 해주고 프로그래밍이 더 이상 노동이 아니고 즐겁게 개발을 하게 해준다. 스펙과 설계문서를 작성하고 좋은 개발시스템하에서 적절한 프로세스를 적용해서 개발하는 것이 가장 빠르게 소프트웨어를 개발할 수 있는 방법이라는 것을 경험하고 깨달아야 한다.

24. 높은 연봉을 받을 수 있도록 꾸준히 노력하라. 위의 23가지 방법들을 따라 한다면 저절로 연봉이 높아질 것이다.

좋은 프로그래머가 되기 위해서는 주변의 환경도 중요하지만 본인의 의지나 습관도 매우 중요하다. 주어진 환경에 수동적으로 적응하기 보다는 좋은 프로그래머가 되기 위한 자신만의 방법들을 만들어 나가면 좋겠다.

내가 퍼온 출처 : http://rudwear.tistory.com/category/%EC%9D%B4%EC%95%BC%EA%B8%B0/IT%20%EC%9D%B4%EC%95%BC%EA%B8%B0

출처 : http://techit.co.kr/9411

www.한인택.com 을 다시 오픈했습니다.

네? 그런사이트가 있었냐고요?

ㅎㅎ 네 있었습니다. 벌써 몇년이나 되었습니다.

하하하.. 다만 계속 관리를 못해서 대충 페이지 하나만을 띄워놔서 문제이지요.. 하하하

hanintaek.com

 

다시 태어나는 www.한인택.com 은 소스공유 사이트로 컨셉을 잡았습니다.

윈윈전략…

서로 공부할수 있는 공간….

앞으로의 개발자를 꿈꾸는 분들에 조금이나마 도움을 드리고 싶습니다. ^^

 

Mac OS 에서 .profile 을 관리해 봅시당.

이글을 작성한 때 >> 오늘은 2013년 10월 15일

나의 회사 iMac .profile 입니닼ㅋㅋㅋㅋ
1 export PATH=/usr/local/bin:/Users/hanit/Documents/android-sdk-macosx/platfor m-tools/:/Users/hanit/Documents/lua/:/Users/hanit/Documents/workspace/:$PATH
2
3 alias ll=’ls -al’
4 alias cls=’clear’
5 alias dir=’ls’
6 alias grep=’grep -inE –color=auto’
7
8 export SVN_EDITOR=vim
9 export PATH=/moaimoai/bin:/opt/local/bin:/opt/local/sbin:$PATH
10 export PATH=/Users/hanit/Downloads/apache-tomcat-6.0.36/lib:$PATH
11 export PATH=/Users/hanit/Downloads/apache-tomcat-6.0.36:$PATH