Unix Philosophy

Attitude Matters Too

When you see the right thing, do it — this may look like more work in the short term, but it’s the path of least effort in the long run. If you don’t know what the right thing is, do the minimum necessary to get the job done, at least until you figure out what the right thing is.

To do the Unix philosophy right, you have to be loyal to excellence. You have to believe that software design is a craft worth all the intelligence, creativity, and passion you can muster. Otherwise you won’t look past the easy, stereotyped ways of approaching design and implementation; you’ll rush into coding when you should be thinking. You’ll carelessly complicate when you should be relentlessly simplifying — and then you’ll wonder why your code bloats and debugging is so hard.

To do the Unix philosophy right, you have to value your own time enough never to waste it. If someone has already solved a problem once, don’t let pride or politics suck you into solving it a second time rather than re-using. And never work harder than you have to; work smarter instead, and save the extra effort for when you need it. Lean on your tools and automate everything you can.

Software design and implementation should be a joyous art, a kind of high-level play. If this attitude seems preposterous or vaguely embarrassing to you, stop and think; ask yourself what you’ve forgotten. Why do you design software instead of doing something else to make money or pass the time? You must have thought software was worthy of your passion once….

To do the Unix philosophy right, you need to have (or recover) that attitude. You need to care. You need to play. You need to be willing to explore.

We hope you’ll bring this attitude to the rest of this book. Or, at least, that this book will help you rediscover it.

 

출처 : http://www.faqs.org/docs/artu/ch01s09.html

MSSQL TIP – 특정 컬럼(column)을 가진 테이블 찾기

MSSQL TIP – 특정 컬럼(column)을 가진 테이블 찾기

특정 컬럼을 가진 테이블을 한번에 찾아주는 쿼리입니다.

1
2
3
4
5
6
7
8
9
10
DECLARE @COLUMN_NAME VARCHAR(200)
SET @COLUMN_NAME = 'Col_Name'

SELECT @COLUMN_NAME AS ColumnName

SELECT
tbl.[name] AS TableName
FROM sys.all_columns col
INNER JOIN sys.tables tbl ON col.object_id = tbl.object_id
WHERE col.[name] = @COLUMN_NAME

 

반대로 특정 컬럼이 없는 경우를 찾고 싶다면 위 쿼리에 NOT IN 절을 사용하면 되겠죠.

1
2
3
4
5
6
7
8
9
10
11
12
13
DECLARE @COLUMN_NAME VARCHAR(200)
SET @COLUMN_NAME = 'Col_Name'

SELECT @COLUMN_NAME AS ColumnName

SELECT tbl.[name] FROM sys.tables tbl
WHERE tbl.[name] NOT IN (
SELECT
tbl.[name] AS TableName
FROM sys.all_columns col
INNER JOIN sys.tables tbl ON col.object_id = tbl.object_id
WHERE col.[name] = @COLUMN_NAME
)

 

위 쿼리를 실행한 결과 화면입니다

SEARCH COLUMN RESULT

QuickStart Vue.js 2장 Part 1

QuickStart Vue.js 2장

1. hellovuejs 예제 분석

  • {{ }} 템플릿 표현식 : 콧수염 표현식(mustache Expresssion), 보간법 (Interpolation)
  • MVVM 패턴
    MVVM Descriptions

2. 기본 디렉티브

  • 단방향 데이터 바인딩

    • v-text, v-html
      • v-html의 경우엔 XSS 취약점이 발생할 수 있으므로 사용시에 유의해야 한다
    • v-bind
      • 태그의 Attribute를 수정하는데 사용됨
  • 양방향 데이터 바인딩

    • v-model
      • 주로 Form 태그 내부에서 사용자의 입력을 받을 때 주로 사용
      • Checkbox, select multiple 의 경우 모델의 배열 객체와 연결이 되고, 이외에는 단일 객체에 연결이 된다.
  • 조건문

    • v-show vs v-if
      • v-show는 html tag 내용은 입력을 하고 css 의 display : none 으로 보이고 안보이고를 제어함
      • v-if는 조건에 맞지 않으면 html tag 내용 자체를 아예 입력하지 않음
      • 처리 속도면에서는 v-show가 유리하다
      • 아래 스샷에서 주석처리된 부분이 v-if 조건이 false인 경우
    • v-if, v-else, v-else-if
      • 대부분 언어의 작동하는 방식과 같음

  • 반복문

    • v-for
      • 배열 데이터를 위한 반복문 표시 형식
        <div>
        <div><template v-for="(data, idx) in data_array"></div>
        </div>
      • 객체 데이터를 위한 반복문 표시 형식
        <div>
        <div><option v-for="(val, key, idx) in data_object"></div>
        </div>
      • Tag에 :key 특성을 통해 가상 DOM 수행에 도움을 줄 수 있다
      • 배열 데이터 변경시 배열 행 전체 값을 index를 통해서 바꾸면 감시자가 알아채지 못하고, Vue.set 메서드를 사용해야 한다
        // wrong code - vue watcher can't know data was changed.
        list.contacts[0] = { no: 100, name: 'Martin', ..... }
        // correct code
        Vue.set(list.contacts, 0, { no: 100, name: 'Martin', ..... })
      • 또는 push, pop, shift, unshift, splice, filter, contact, slice, reduce 등의 배열 지원 메서드를 사용한다

QuickStart Vue.js 1장

QuickStart Vue.js

1장 시작하기

  1.  Vue.js?

    • 최근 인기가 가장 빠르게 높아지고 있는 프론트엔드(Front End) 자바스크립트 프레임워크
    • 유연성 & 경량 (Lightweight)
    • Angular 1 은 단일 페이지 어플리케이션(SPA: Single Page Application) 아키텍처 구성을 지향하는데, Vue.js는 일부 페이지에만 적용하는 것 또한 가능하다.
      • 사실 Angular 1 도 단일페이지 어플리케이션뿐만 아니라 일부 페이지 적용이 가능하다. (본인이 초기부터 개발한게 아닌 중간에 인수받아서 진행한 프로젝트가 그렇게 되어있었음)
      • 하지만 Vue.js에 비해 렌더링 속도가 느리고, 실제 구글의 Documentation 도 SPA를 상정하여 설명했던 것으로 기억함
    • Angular 2, React를 사용하기 위해서 학습 곡선이 너무 가파름
      • Angular 2 – Typescript, Webpack, Gulp가 필수 (선택 여지가 없음)
      • React – ECMAScript 6(Babel) 반강제, Webpack, JSX 등
    • MVVM 패턴 사용 (Vue.js 코어만 CDN으로 참조해서 사용할 시에 느낌이 Knockout.js 과 비슷)
    • 훌륭한 한글 가이드 문서 (https://kr.vuejs.org/v2/guide/index.html)
      • 그에 비해 Angular, React는 영문 Documentation 만 제공
  2. 개발 환경 설정

    • Node.js
      • 서버사이드 자바스크립트 플랫폼
      • NPM 설치를 위해 같이 설치됨.. (곁다리냐..)
    • NPM (Node Package Manager)
      • 앱 의존성 관리 및 편리한 패키지 설치 지원
      • npm install -g npm #update latest npm
    • Visual Studio Code
      • 코드 편집기 (IDE 대용)
      • 대표적인 Modern Text Editor
      • 추천 플러그인 목록
        • View in Browser
        • HTML Snippets
        • JS-CSS-HTML Formatter
        • Vue 2 Snippets
        • Vue-beautify
        • ESLint
        • vetur
          • 현재 vetur 에서 다른 vue 플러그인과 같이 설치하면 경고창을 띄우는데 이러한 경고가 싫어서 다른 플러그인을 삭제하였다.
    • Chrome & Vue.js devtools
      • 이상하게 아래 vue-cli를 통해 프로젝트를 설정했을 경우 vue.js devtools 탭이 활성화 되지 않았음
    • Vue-CLI
      • 앱 작성을 위한 기본 틀 제공
      • 다음 명령으로 NPM 사용하여 설치
        • # 관리자 권한 실행 필요 (mac, linux는 sudo 명령 추가해서 가능)
          npm install -g vue-cli
        • 명령 실행 방법
          • vue init [템플릿명] [프로젝트명]
          • ex) vue init sample hellovuejs
  1. Vue.js 첫번째 예제 : Link
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome to Vue</title>
<script src="https://unpkg.com/vue"></script>
</head>
<body>
<!-- Start View Part -->
<div id="simple">
<h2>{{message}}</h2>
</div>
<!-- End View Part -->

<script>
var model = { // Model Part
message : 'Vue.js app in first time'
}

var simple = new Vue({ // ViewModel Part
el: '#simple',
data: model
})
</script>
</body>
</html>

Java SDK Install on Ubuntu

Java SDK 설치 (installed on Ubuntu 16.04 LTS)

  1. Oracle PPA 등록
    • sudo add-apt-repository ppa:webupd8team/java
    • sudo apt-get update
  2. 패키지 매니저 명령을 통한 설치
    • sudo apt-get install oracle-java6-installer   ## java 6
    • sudo apt-get install oracle-java7-installer   ## java 7
    • sudo apt-get install oracle-java8-installer   ## java 8
    • sudo apt-get install oracle-java9-installer   ## java 9
  3. 약관 동의에서 ‘OK’ -> ‘예’ 선택