Archive for Web관련이야기

[iOS9]

간만에 UIWebView 를 써보려는데 요청해도 웹 내용이 안나와서 삽질중에..

ATS!

아! 그때 물어보셨던게 이거였구나…. 느끼고..

일단 자세한건 나중에… info.plist 에

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>testdomain.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
<false/>
<key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
<true/>
<key>NSThirdPartyExceptionMinimumTLSVersion</key>
<string>TLSv1.2</string>
<key>NSRequiresCertificateTransparency</key>
<false/>
</dict>
</dict>
</dict>

뭐 이런식….

testdomain.com 에… 본인의 도메인 넣으면 끝!

똭!

[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 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 공부 부터 인가요 ㅋ