2016년 2월 25일 목요일

[classic asp] 엑셀에서 alt+enter 값 추가

개행문자에 대해서 치환을 해줄때 그냥 <br />을 넣어줄경우 밑에 셀로 한개 한개씩 생김
br 스타일에 <br style='mso-data-placement:same-cell;'> 이런식으로 넣어주면
alt+enter 값 들어간거처럼 들어감

2016년 2월 22일 월요일

추상 팩토리 패턴 (abstract pattern)


추상 팩토리 패턴(Abstract factory pattern)은 다양한 구성 요소 별로 '객체의 집합'을 생성해야 할 때 유용하다. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다.
대표적인 예로, 자바 프로그래밍 언어의 GUI 구성 요소인 AWT/Swing 라이브러리의 룩 앤드 필 변경 기능을 들 수 있다. 메탈마이크로소프트 윈도맥 OS 등의 모양으로 변경할 수 있다. 이에 따라 추상 팩토리에 있는 기본 팩토리 객체가 변경된다. 그러면 이후로 생성되는 GUI 객체들은 전부 해당 룩앤필에 따른다.

------------------------------------------------------
다이어그램 

abstract factory ---> abstract product
        ↑                          ↑
concrete factory ->   concrete product

------------------------------------------------------

다이어그램 구상

가상공장   ---> 차, 신발, 시계 등등 공장 제품 
   ↑                 ↑   
  공장      ->      완제품

------------------------------------------------------
구현 

<!doctype html>
<html lang="ko">
 <head>
  <title>abstract factory</title>
 </head>
 <body>
 <script>
 // 공장에서 여러 제품들을 만든다고 생각 하면 쉬움 
 
  var AbstractFactory ;  // 추상화된 공장(생산, 이름 등등의 기능 을 갖고 있을거임)
  var ConcreteFactory ;  // 구현된 공장(실질적 공장의 이름과, 작동에 대해 기술되 있을거임)
  var AbstractProduct ;  // 공장에서 생산할 제품들의 추상화된 인터페이스 (차, 시계, 신발 등등)
  var ConcreteProduct ;  // 해당 제품을 공장에서 만든다 생각 

  AbstractFactory = function(){
   this.location ='서울';
   this.companyName = 'nice';
  }; 

  AbstractFactory.prototype = {
   create : function(){
    console.log(this.product);
   },
   set : function(product){
    this.product = product.name;
   }
  };

  function ConcreteFactory(){
   var abstractFactory = new AbstractFactory
    abstractFactory.location = '경기';
    abstractFactory.companyName = 'nic';

   return abstractFactory;
  }

  function AbstractProduct_car(){
   this.name = 'car';
  }

  function AbstractProduct_shoes(){
   this.name = 'shoes';
  }


  var concreteProduct = new ConcreteFactory;
  var car = new AbstractProduct_car;
  var shoes = new AbstractProduct_shoes;
   concreteProduct.set(car);
   concreteProduct.create();
   concreteProduct.set(shoes);
   concreteProduct.create();
  


 </script>
 </body>
</html>

룩앤필(look and feel)

룩 앤드 필(Look and feel)은 마케팅, 브랜딩, 상표화와 같은 분야와 제품의 내용에 쓰이는 용어로, 사용자의 제품 체험과 겉모양, 인터페이스의 주된 기능을 나타낸다.
소프트웨어 디자인에서 룩 앤드 필은 그래픽 사용자 인터페이스의 관점에서 쓰이며 색, 모양, 레이아웃, 글꼴(룩)뿐 아니라 단추, 상자, 메뉴와 같은 동적인 요소의 동작(필)을 수반하는 디자인의 측면을 이루고 있다. 룩 앤드 필은 또한 API의 관점을 가리키기도 하며, 이 API의 관점 중 대부분은 기능적인 특성과 관련되어 있지는 않다. 룩 앤드 필이라는 용어는 소프트웨어웹사이트 두 곳에서 쓰인다.
룩 앤드 필은 다른 제품에도 적용할 수 있다. 이를테면, 문서에서 룩 앤드 필은 그래픽 레이아웃(문서 크기, 색, 글꼴 등)과 문체를 일컫기도 한다. 기기 환경에서 룩 앤드 필은 제품 라인의 제어, 디스플레이의 일관성을 일컫기도 한다.

위키 참조
https://ko.wikipedia.org/wiki/%EB%A3%A9_%EC%95%A4%EB%93%9C_%ED%95%84

2016년 2월 21일 일요일

자바스크립트 프록시 패턴(proxy pattern )

UML
[client] ---> [subject](interface) ← [proxy]
                        ↑
                 [real subject]


장점 : 사용자로부터 최적화와 관련내용을 감추어 코드를 단순하게 해준다.
단점 : 실제 객체가 생성되어 있다면, 오버헤드가 됨


proxy(대리자) : real subject로의 참조를 관리하고 접근을 제어한다. real subject가 구현하고 있는 인터페이스를 구현하므로 real subject를 사용하는 것처럼 사용할 수 있다.
subject : proxy와 real subject가 구현하고 있는 인터페이스, 이 인터페이스를 통해 이들이 상호 교환적으로 사용될 수 있다.
real subject : proxy가 대리하고 있는 실제 객체


<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>proxy</title>
 </head>
 <body>
<script>

 var urls = [];
 var image = function(){
  return new proxyimage;
 }; //subject
 var realimage = function(){
  this.getimg = function(){
   console.log(urls);
  };
 }; //
 var proxyimage = function(){
  this.getimg = function(url){
   if (urls.indexOf(url) == -1){ // real subject 로드 여부 판단
    urls.push(url);
   }else{
    return (new realimage).getimg();
   }
  };
 }; //

 var client = new image;
  client.getimg('imgurl return'); //proxy 로드 전 
  client.getimg('imgurl return'); //proxy 로드 후 real subject 로드 
</script>
 </body>
</html>







2016년 2월 20일 토요일

템플릿 메소드 패턴(template method pattern)

상위 클래스에서 처리의 흐름을 제어하고 하위클래스에서 처리의 내용을 구체화한다.
여러클래스에서  공통되는 사항은 상위 추상클래스에서 구현하고, 각각의 상세부분은 하위클래스로 구현한다, 코드의 중복을 줄이고 리팩토링에서 유리한 패턴으로 상속을 통한 확장 개발 방법으로 전략패턴과 함께 가장 많이 사용되는 패턴중 하나


[abstract class]
+ templateMethod();          
# subMethod();

  ↓↓↓↓↓

[ConcreteClass]
+subMethod();


== source ==
abstract class abcls{
   public templeteMethod(){}
   public abstract subMethod(){}
}

class concls extends abcls{
   @override
   public subMethod(){}
}

후크(hook) 란?

추상클래스에 들어있는 아무 일도하지 않거나 기본 행동을 정의하는 메소드로, 서브클래스에서 오브라이드 할 수 있다.


public abstract class abcls{
      public action(){

      }
      public deafult_action(){
   
      }
}

public class concls extends abcls{
   
      @override
      public deafult_action(){
   
      }

}

2016년 2월 19일 금요일

chrome(크롬)에서 ES6(harmony) 사용하기

1.
크롬 url창에
chrome://flags/#enable-javascript-harmony
입력


2. [사용버튼] 클릭-> 그러면 사용중지로 바뀜(사용되는상태), 재시작 하라고 뜸


2016년 2월 18일 목요일

시멘틱 웹(semantic web)

네이트가 이용한 (시맨틱) 기술은 전산학에서 꽤 오래된 분야로서 텍스트 분석, 자연어 처리, 기계 학습과 같은 분야는 인공 지능 분야에서 시맨틱 기술

시맨틱 웹은 웹을 데이터 단위로 구조화 시켜상호 관계성을 파악하려는 시도 즉, 웹을 데이터베이스화 혹은 지식 기반으로 만들고 이를 기반으로 추론을 목표로 한다

LinkedData라고 불리는 이름으로 RDF 기반으로 데이터 웹을 구조화 시키거나 RDFa나 마이크로포맷 같은 방식으로 HTML 의미 마크업을 시도하고 있는 것이다. 




온톨로지란 특정 도메인(domain) 내에서 공유되는 데이터를 개념화한 형식적이고 명백한 규정이다. 이는 특정 분야에서 사용되는 표준 어휘들의 모음이라고 할 수 있으며, RDF와 OWL은 이런 온톨로지를 표현하는 언어다. 따라서 온톨로지 언어가 시맨틱 웹의 중심이 된다고는 할 수 있으나, 이를 웹과 접목시키는 일이 더 중요

온톨리지
웹에 있는 자원에 관한 메타 정보를 표현하기 위한 언어. RW3C의 가장 기본적 시맨틱 웹 언어로서 웹 자원을 표현하는데 기본이 되는 제목, 저자, 최종 수정일, 저작권과 같은 웹 문서에 관한 메타 데이터를 XML을 기반으로 매우 간단하게 표현한다. 기본적으로 주어, 동사, 목적어에 해당하는 것을 URI를 써서 대상들을 문장으로 구성하거나 노드와 화살표를 써서 도식적으로 표현하기도 한다.

RDF

웹에 있는 자원에 관한 메타 정보를 표현하기 위한 언어. RW3C의 가장 기본적 시맨틱 웹 언어로서 웹 자원을 표현하는데 기본이 되는 제목, 저자, 최종 수정일, 저작권과 같은 웹 문서에 관한 메타 데이터를 XML을 기반으로 매우 간단하게 표현한다. 기본적으로 주어, 동사, 목적어에 해당하는 것을 URI를 써서 대상들을 문장으로 구성하거나 노드와 화살표를 써서 도식적으로 표현하기도 한다.


한 사이트, domain을 테이블 정도로 생각하고 거대한 웹을 데이터 베이스로 생각하는
각 사이트 안에 태그 등 정보를 메타데이터화 시키는 것

검색엔진에서 페이지들을 분석할때 검색어에 맞는 단어 매칭과 같은 단순한 string search만이 아닌 데이터베이스 처럼 활용 가능하게 한 것.

다음은 SPARQL의 사용 예다.

 SELECT DISTINCT ?name ?home ?orgRole ?orgName ?orgHome
FROM <http://www.w3.org/People/Ivan/>
FROM <http://www.w3.org/Member/Mail/>
WHERE {
?foafPerson  foaf:mbox ?mail;
             foaf:homepage ?home.
}


시맨틱 웹의 본질은 시맨틱 처리
시맨틱 웹의 본질적인 변화는 없다. 다만, 지금까지 시맨틱 웹에 대해 대다수의 사람들이 인식하고 있는 것은 온톨로지였으며, 이와 관련한 기술 개발이 중심이 된 것은 사실이다. 하지만 더 중요한 것은 웹에서의 시맨틱 처리가 가능해야만 본질적인 시맨틱 웹이 가능해질 수 있다는 것이다. 이를 위한 노력이 W3C에서 진행 중이며, 실생활에서도 이와 같은 시맨틱 웹이 이용될 수 있다.
결론적으로, 국제적으로는 XHTML이 단순한 문서를 위한 웹페이지로서 이용되는 것이 아니라, 기계적 처리가 가능한 데이터 집합소로서의 역할도 수행하며, 데이터 통합의 주요 수단으로 이용될 수 있다. 또한 웹페이지에서 쉽고 편리한 방법으로 데이터를 교환하고 재사용할 수 있는 방법에 대한 연구도 진행되고 있음로, 국내 기술 개발도 이런 부분을 간과해서는 안될 것이다.



http://m.blog.naver.com/jeonghj66/140038064614


2016년 2월 17일 수요일

builder 패턴

기본 구성
director : 무엇을 빌딩하는지 정확히 못한채 객체를 빌드
builder : director 가 생성을 수행하기 위해 사용하는 인터페이스
concrete builder :director의 지시에 따라 product를 실제로 빌딩한다 보통 외부에서(client에 의해) 혹은 abstract factory에 의해 생성된다.
product : director의 지시하에 builder가 빌딩하는 객체



<!doctype html>
<html lang="en">
 <head>
  <title>builder pattern</title>
 </head>
 <body>
  <script>
 var director = function(product){  //무엇을 빌딩하는지 정확히 알지 못한채 빌딩
  product.concrete_builder_action1() //director의 지시에 따라 product를 빌딩된다;
  product.concrete_builder_action2()
  product.concrete_builder_action3()
 }

 function Builder(){  //공통 인터페이스 
  var common_value1 = this.common_value1 = 1; 
  var common_value2 = this.common_value2 = 2; 
  var common_value3 = this.common_value3 = 3; 

  this.concrete_builder_interface1 = function(){ //구현 인터페이스 
   this.concrete_builder_action1 = function(){
    console.log("interface1:"+common_value1);
   }
   this.concrete_builder_action2 = function(){
    console.log("interface1:"+common_value2);
   }
   this.concrete_builder_action3 = function(){
    console.log("interface1:"+common_value3);
   }
  };

  this.concrete_builder_interface2 = function(){
   this.concrete_builder_action1 = function(){
    console.log("interface2:"+common_value1);
   }
   this.concrete_builder_action2 = function(){
    console.log("interface2:"+common_value2);
   }
   this.concrete_builder_action3 = function(){
    console.log("interface2:"+common_value3);
   }
  }
  
 }

  var build = (new Builder);  //공통 인테페이스 생성 
  var concrete_build1 =  new build.concrete_builder_interface1;  //구현 인터페이스 생성
  var concrete_build2 =  new build.concrete_builder_interface2;
 
  var product1 = function(){
   director(concrete_build1);
  };

  var product2 = function(){
   director(concrete_build2);
  };
 
 product1();
 product2();

  </script>
 </body>
</html>

2016년 2월 16일 화요일

심버(semver) 에 대한 설명

유의미적인 버전 붙이기(semantic versioning), 짧게 줄여 심버(semver)다. 
새로운 버전의 소프트웨어를 옮길때 명시
버전 번호는 MAJOR.MINOR.PATCH 형태, 정수 integer로 표시
major번호가 변경되는 것은 하위호환성이 깨진다는 것을 의미

2016년 2월 13일 토요일

[책]소프트웨어 작동법 - 검색

원하는 데이터를 찾아내는 기술 - 검색

데이터를 모아둔 것 - 데이터 집합(data collection)
각 집합에 있는 개별 데이터 - 레코드(record)
하나의 레코드는 key에 의해 구분됨

검색

순차검색 - 순서없이 정렬되어 있음, 처음부터 모두 검색
소트(sort) - 데이터 집합을 특정 순서대로 정렬하는 것

선택소트 (selection sort)
1. 가장 작은 값 가져옴
2. 그다음 가장 작은 값 가져옴

퀵소트(quick sort)
* 피봇(pivot) : 목록 중 특정숫자
- 계산량과 처리속도를 줄인것
- 목록중 아무거나 하나 집고 그것을 기준으로 높은것과 낮은거 정렬
[2,10,1,3,7] ->(피봇:3) ->[ 2,1,3,10,7]->
3 을 기준으로 서브목록 1(2,1) 서브목록2(10,7) 생김
->서브목록1 피봇1->[[1,2],3,10,7]-> 서브목록2 피봇10 ->[[1,2],3,[7,10]]-> 정렬 완료

@ 피봇이 이렇게 가운데면 참 좋은데 한쪽으로 쏠리면 과도하게 많이 걸릴수도 있음
@ 일반적으로 레코드 수가 커질수록 퀵소트가 선택소트보다 성능이 좋음

이진검색 (binary search)
여기서 이진이란 (binary)를 뜻하는 것이 아니고 두개중 하나를 뜻한다.
* 찾고자 하는 데이터 48이라는 키를 갖고 있음
* 집합은 정렬되어 있다 가정함
1. 가운데 있는 레코드를 본다 (62) 9개 남음 [1,,,,62]
2. 가운데 있는 레코드를 본다 (23) 5개 남음 [23,,,62]
3. 가운데 있는 레코드를 본다 (47) 3개 남음 [47,48,62]
4. 가운데 있는 레코드를 본다 (48) 이때 48이 아닐경우 값이 없다 리턴

인덱싱
레코드는 실제 어딘가에 존재(메모리 혹은 하드디스크)

고정길이(fixed-size)방식
- 저장공간 낭비가 발생됨
- 성능상(검색 속도) 이득
-> 고정주소일 경우 특정 레코드의 주소를 찾기 쉽다
(길이가 20이고 주소가 1000부터 시작한다 하면 1000->1020->1040의 형태로 찾을수 있다)

가변길이(variable-size)방식
- 데이터의 길이에 맞춰 저장하는 방식
-> 검색할 경우 고정길이가 아니면 모든 레코드를 세는 수 밖에 없음

* 윈도우의 32, 64는 메인메모리 주소크기 (고정길이)

ex> 4개의 음악이 있다고 치면 실제 데이터 파일은 하드디스크에 저장 하고
한개의 제목과 실제 데이터 파일의 주소 값을 가진 키값을 고정길이 형태로 메모리에 저장


인덱스는 레코드 키와 주소로 구성된 테이블(목록)

슬롯(slot)
- 레코드 저장 위치

해싱
해시함수(hash function)를 통해 slot / 노래제목 / 데이터주소 형태로 저장
- 장점: 일일이 검색하지 않아도 해시 함수를 통해 한번에 접근 할 수 있음
- 단점 :  해시 키값이 중복, 즉 충돌이 발생
충돌 발생 시..
1. 다음슬롯에 채움
-> 그럼 해시 검색시 찾는것이 없으면 다음거부터 순차검색.. 다음 자리가 비어있으면
먼 슬롯까지 순차 검색을 하게 될것이고 굉장한 비효율 발생
2. 슬롯을 삭제 할경우 다음 슬롯에 저장된 것은 찾을수 없음
-> 해당 슬롯에 데이터 주소와 슬롯을 제외한 값은 비워둠(묘석)
==> 이러한 이유로 정기적으로 재해시를 해야됨, 그리고 중복이 발생하지 않도록 해시 알고리즘 중요

웹검색
- 구글의 인덱스 크기는 100페타바이트 == 1억기가 바이트

검색엔진은 로봇(robot)이라는 것을 사용한다.
- 사람의 간섭 없이 자동으로 인덱스를 만들어내는 프로그램

순위결과
- 인바운드 링크 : 외부홈페이지에서 내 홈페이지 페이지로 링크들.
이 인바운드 링크를 통해 순위를 매김

링크파밍(link farming)
- 이러한 인바운드 링크를 무료 호스트나 버려진 웹 사이트에 특정사이트 링크를 걸어인바운드 링크수를 고의적으로 늘리는 작업




2016년 2월 12일 금요일

커맨드 패턴 (command pattern)


커맨드 패턴(Command pattern)이란 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 매서드 이름, 매개변수 등 요청에 필요한 정보를 저장 또는 로깅, 취소할 수 있게 하는 패턴이다. 

어떠한 행동에 대한 정의 들을 제어 할때 사용하면 좋다 .

- 명령(command), 수신자(receiver), 발동자(invoker), 클라이언트(client)의 네개의 용어가 항상 따른다.
-  요청과 수행을 분리시켜 느슨한 결합을 유지한다.

- 일련의 행동을 특정 Receiver하고 연결을 통해 캡슐화하고 execute()라는 메소드 하나만 외부에 공개한다.


장점
- 요청부분과 요청실행부분을 분리(낮은 결합도, 독립적 변경 가능)
- 실행취소, 보관, 로그 생성 가능

* 전략패턴(strategy pattern)과 비슷하지만 커맨드 패턴은 전달받은 객체가 하는 일에 대해 정확히 알지 못한다.

 - wiki 참조 -

// 자바스크립트로 구현 
<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>
  <script>
 // 커맨드 패턴
 // 리모컨 만들기
 // 1. 리시버에서 해당 기능 구현 
 // 2. command 에 interface 생성 
 // 3. command에 recevier에서 받은 객체를 실행하는 동작에 대해 execute에 정의
 // 4. invoker 에서 setcommand 명령에 대해 저장하는 처리
 // 5. invoker에 목적에 맞는 custom메서드를 생성 (ex> 리모컨켜기, 리모컨 끄기 등)

  function r(msg){
   return function(){
    document.body.innerHTML += (msg+"<br />");
   }
  }

  var client, recevier, invoker, command;
 
  function Light(){}  //recevier
  Light.prototype = {
   "on" : r("on"),
   "off" : r("off")
  };
  //(new Light).on();

  function lightOnCommand(receiver_obj){  //command
   this.execute = function(){
    receiver_obj.on();
   };
   this.undo = function(){
    receiver_obj.off();
   };
  }

  function lightOffCommand(receiver_obj){  //command
   this.execute = function(){
    receiver_obj.off();
   };
   this.undo = function(){
    receiver_obj.on();
   };
  }

  function RemoteControl(){    //invoker
   this.setCommand = function(cmd){
    this.obj = cmd;
   }
   this.press = function(){
    this.obj.execute();
    this.undocommand = this.obj;
   }
   this.undo = function(){
    this.undocommand.undo();
   }
  }


  client = function(){
   var light =  new Light;
   var lightOn = new lightOnCommand(light);
   var lightOff = new lightOffCommand(light);
   var remoteControl = new RemoteControl;
    remoteControl.setCommand(lightOn);
    remoteControl.press();
    remoteControl.undo();

    remoteControl.setCommand(lightOff);
    remoteControl.press();
    remoteControl.undo();

  }();

  </script>
 </body>
</html>

컴포지트 패턴(Composite pattern) javascript 구현




 
/*
  * 컴포지트 패턴(Composite pattern)이란 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로, 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다.
  * 컴포넌트 : 컴포넌트란 더 큰 프로그램이나 구조물에서 식별 가능한 "일부분"이다, 컴포넌트는 특정 기능이나 관련된 기능들의 조합을 제공한다.
  // 보통 트리구조
  // 현재 기본 구조 { figure : [rect,line,circle], group: figurelist[] }
  // 바꿀 구조 { figure : [rect,line,circle,group]}
 */
 function Figure(){
  this.shape = "none";
 }
 Figure.prototype= {
  draw : function(){
   console.log(this.shape);
  }
 };
 var figure = new Figure();
  
 function Rectangle(){
  this.shape = "Rectangle_shape";
 };
 Rectangle.prototype = figure;

 function Circle(){
  this.shape = "Circle_shape";
 };
 Circle.prototype = figure;

 function Line(){
  this.shape = "Line_shape";
 };
 Line.prototype = figure;

 var rectangle = new Rectangle;
 var line = new Line;
 var circle = new Circle;

// rectangle.draw();

 
 //각각의 figure를 통합하여 전체 그리기 시도시 이렇게 따로 구현 해야됨
 function Group(){
  var arr = [];
  this.add = function(figure){
   arr.push(figure);
  };
  this.totalDraw = function(){
   arr.forEach(function(me, i){
    me.draw();
   })
  };


 }
// 상속받는 기능 들에 대해서도 모두 따로 구현해줘야되는 부분을 
/* var group = new Group;
  group.add(rectangle);
  group.add(line);
  group.totalDraw();
*/

//구성 공유
 function Figure(){
  this.shape = "none";
  this.arr = [];  //배열에 부분들 추가 
 }

 Figure.prototype.add = function(figure){
   this.arr.push(figure);
 };

 function Group(){
  this.draw = function(){
   this.arr.forEach(function(me, i){
    me.draw();
   })
  };
 }

//같은 figure상속
 Group.prototype = figure;


 var group = new Group;
  group.add(rectangle);
  group.add(line);
//group 이어도 똑같은 draw메소드
  group.draw();

 var rectangle = new Rectangle;
//다른 draw도 정상적인 기능
  circle.draw();

// 객체와 객체 그룹간 동일한 인터페이스로 사용 가능 

2016년 2월 11일 목요일

라라벨 tinker

- tinker라는 뜻은 어설프게 고치다 라는 뜻, 테스트 해보고 연습해보기 편함
1. php artisan tinker

>>> DB::insert('insert into posts(title, body) values(?, ?)', ['Second Title', 'Second Body']);
=> true

>>> $post = DB::selectOne('select * from posts where id = ?', [1]);

>>> DB::update('update posts set title="Modified Title" where id = ?', [1]);
=> 1


라라벨 - 데이터베이스 마이그레이션

데이터 베이스를 만들자 (migration)


1. php artisan make:migration create_posts_table





2. 테이블 스키마 작성

class CreatePostsTable extends Migration
{
    public function up()
    {
        Schema::create('posts', function($table) {
            $table->increments('id'); // id INT AUTO_INCREMENT PRIMARY KEY
            $table->string('title', 100); // title VARCHAR(100)
            $table->text('body'); // body TEXT
            $table->timestamps(); // created_at TIMESTAMP, updated_at TIMESTAMP
        });
    }

    public function down()
    {
        Schema::dropIfExists('posts'); // DROP TABLE posts
    }
}

3. php artisan migrate








2016년 2월 10일 수요일

classic asp select case 문법 활용


<%
 'classic asp select case statement 
 ' 보기싫은 or절 개선 가능
 function exp1()
  exp1 = ""
 end function

 function exp2()
  exp2 = false
 end function

 function exp3()
  exp3 = true
 end function

 select case true 
  case exp1(), exp2()
   response.write "exp1,exp2"
  case exp3()
   response.write "exp3"
  case else
   response.write "exp4"
 end select

 'result : exp3
 

%>