레이어는 필요한 만큼 추가할 수 있다고 합니다.
디폴트로 사용해야할 레이어는 최소 3개로 나누어 진다고 하네요.
Background Layer
Color Layer
Line Art Layer
로 최소한 구분하여 일러스레이션 작업을 한다고 합니다. 여기서 필요에 따라서 추가하면 됩니다.
레이어는 필요한 만큼 추가할 수 있다고 합니다.
디폴트로 사용해야할 레이어는 최소 3개로 나누어 진다고 하네요.
Background Layer
Color Layer
Line Art Layer
로 최소한 구분하여 일러스레이션 작업을 한다고 합니다. 여기서 필요에 따라서 추가하면 됩니다.
ToolBox에 있는 도구를 선택해서 사용하다 보면 Object의 속성이 변경되어서 이전의 모습으로 되돌아갈 필요가 있을겁니다.
이럴때 Object Preference 에서 수정해 주면 됩니다.
접근법은 내가 알기론 ToolBox 의 Obect에서 더블클릭을 하면 Object Preference 창이 뜰 겁니다.
스마트폰을 잘 활용할수 있는 방법은 없을까? 잼나게 놀수 있는 방법은 없을까?
어플을 개발하기엔 시간이 마니걸릴것 같고 그러면 웹브라우저를 이용한 어플리케이션을 개발하면 어떨까? 생각해 보았습니다.
웹브라우저로는 안드로이드 버전의 크롬과 OS버전의 사파리가 스마트폰에 설치되어 있을 겁니다.
두 버전에서 잘 돌아갈수 있는 기술은 무엇이 있을까? 생각해 보니 HTML5 라는 도구가 나오더군요.
스마트폰의 화면에 뿌려주기 위한 기술은 HTML5를 사용하고 비지니스는 어떨까 처리해야 할까?
찾다보니 NODE 라는 자바스크립트 웹엔진을 발견하게 되었습니다.
자바스크립트를 서버사이드에서 처리해 줄수 있는 구글사에서 만들었고 크롬에 적용되어 있는 웹엔진이라고 합니다.
NODE 로 클라이언트에서 들어오는 Request 받아서 비지니스 로직을 수행하고 클라이언트로 Response 를 보낼수 있습니다.
자바스크립트로 만들어진 모듈이 많이 있더군요.
웹어플리케이션을 구조화 하여 만들수 있도록 지원해 주는 backbone.js
웹페이지를 템플릿으로 만들어서 쉽게 만들수 있도록 도와주는 undercore.js
웹페이지의 DOM구조에 접근하고 처리할수 있도록 지원하는 jquery.js 등
자바스크립트 오픈 기술과 소스는 인터넷에서 쉽게 접근할 수 있습니다. Github 로 저장해서 버전관리도 할수 있고요.
비지니스로직이 만들어 졌다고 하지요.
개발안은 어떻게 작성할까요? 그 전에 아키텍쳐는 어떻게 놓아야 할까요?
데이타베이스는 mongodb 로 하고 웹서버는 node.js 로 구조화된 웹어플리케이션을 만들기 위해서 backbone.js 로 모델, 뷰, 컨트롤러 로 만들면 될 것입니다.
모델과 컨트롤러로 자바스크립트 언어로 코딩해서 구현하면 문제가 없을 듯 합니다.
마지막을 남은 문제는 무었일까요?
뷰(View)~ ?!
예전에 JSP, SPRING , IBAITS, MSSQL 로 작업을 할때도 코딩기준과 개발표준이 잡혀있을때 제일 어려웠던것이
화면을 어떻게 만들어야 할까 였습니다.
화면 디자인~
유저들은 어떻게 느낄까? 화면배치는 어떻게 해야 할까? 색깔은? ...
지금도 어려워 보입니다.
첨부된 그림은 INKSCAPE 로 튜토리얼을 따라서 그려본 것입니다.
템플릿으로 화면을 구조화 하는 방법을 공부해 봐야 겠네요.
Inkscape 참고사이트
이클립스에서 new 생성으로 들어가면 Git 항목이 보입니다.
Git Repository를 선택하고 next버튼을 클릭하면 repository를 생성할수 있는 창이 뜹니다.
생성된 레파지토리는 Local Repository에 생성되어지고 후에 Remote Repository 와 연계해서 분산환경을 구축하면 됩니다.
이클립스환경에서 레파지토리를 생성하고 이 레파지토리를 프로젝트로 활용하는것은 좋은 습관이 아니라고 합니다.
향후에 하위 프로젝트를 생성해서 관리해야 한다면 또 레파지토리를 만들어서 해야 되니깐요.
레파지토리는 최상위 프로젝트의 이름을 따서 생성하고 하위에 서브 폴더를 생성해서 프로젝트를 구조를 만드는게 좋을것 같습니다.
GIT 버전관리시스템에서 스냅샷된 파일을 추척하기 위해서 제일 먼저 부딪히는게 해당폴더에서 이파일은 관리할 필요가 없는데
어떻게 하지? 일것입니다.
파일을 분류하고 불필요한 파일을 제거하도록 도와주는 파일은 .gitignore 입니다.
작성법은 영어로...
출처) http://git-scm.com/book/ch2-2.html
Ignoring Files
Often, you’ll have a class of files that you don't want Git to automatically add or even show you as being untracked.
These are generally automatically generated files such as log files or files produced by your build system.
In such cases, you can create a file listing patterns to match them named .gitignore.
Here is an example .gitignore file:
$ cat .gitignore
*.[oa]
*~
The first line tells Git to ignore any files ending in .o or .a
- object and archive files that may be the product of building your code.
The second line tells Git to ignore all files that end with a tilde (~),
which is used by many text editors such as Emacs to mark temporary files.
You may also include a log, tmp, or pid directory;
automatically generated documentation; and so on.
Setting up a .gitignore file before you get going is generally a good idea
so you don’t accidentally commit files that you really don’t want in your Git repository.
The rules for the patterns you can put in the .gitignore file are as follows:
Blank lines or lines starting with # are ignored.
Standard glob patterns work.
You can end patterns with a forward slash (/) to specify a directory.
You can negate a pattern by starting it with an exclamation point (!).
Glob patterns are like simplified regular expressions that shells use.
An asterisk (*) matches zero or more characters;
[abc] matches any character inside the brackets (in this case a, b, or c);
a question mark (?) matches a single character;
and brackets enclosing characters separated by a hyphen([0-9]) matches any character in the range (in this case 0 through 9) .
Here is another example .gitignore file:
# a comment - this is ignored
*.a # no .a files
!lib.a # but do track lib.a, even though you're ignoring .a files above
/TODO # only ignore the root TODO file, not subdir/TODO
build/ # ignore all files in the build/ directory
doc/*.txt # ignore doc/notes.txt, but not doc/server/arch.txt
재귀호출(Recursive Queries)이라고 하지요.
인사구조, 조직 등의 피라미드구조 나 BOM( 소요자재내역 ) 을 분석할때 필요한 알고리즘입니다.
데이타 구조상으로 보면 부모 - 자식 관계의 레코드가 원레벨로 연결되어 있습니다. 모자 관계라고도 합니다.
SQL서버 에서 알고리즘을 지원하지 않으면 WHILE 문이 FETCH 문으로 전개하는 프로시져을 작성해야 합니다.
최상위에 있는 레코드를 0 레벨로 보고 그 하위에 있는 레코드는 1레벨로 정하는 겁니다.
레벨을 증가시켜서 반복적으로 구조를 헤치고 들어가도록 루핑을 돌려면 되지요.
SQL Server 2008에서 지원하는 것 같은데 CTE( Common Table Expressions ) 을 사용해서
재귀호출이 기능을 작성할수 있습니다.
재귀호출 뼈대
WITH cte_name ( column_name [,...n] )
AS
(
CTE_query_definition -- Anchor member is defined.
UNION ALL
CTE_query_definition -- Recursive member is defined referencing cte_name.
)
-- Statement using the CTE
SELECT *
FROM cte_name
Example
-- Create an Employee table.
CREATE TABLE dbo.MyEmployees
(
EmployeeID smallint NOT NULL,
FirstName nvarchar(30) NOT NULL,
LastName nvarchar(40) NOT NULL,
Title nvarchar(50) NOT NULL,
DeptID smallint NOT NULL,
ManagerID int NULL,
CONSTRAINT PK_EmployeeID PRIMARY KEY CLUSTERED (EmployeeID ASC)
);
-- Populate the table with values.
INSERT INTO dbo.MyEmployees VALUES
(1, N'Ken', N'Sanchez', N'Chief Executive Officer',16,NULL)
,(273, N'Brian', N'Welcker', N'Vice President of Sales',3,1)
,(274, N'Stephen', N'Jiang', N'North American Sales Manager',3,273)
,(275, N'Michael', N'Blythe', N'Sales Representative',3,274)
,(276, N'Linda', N'Mitchell', N'Sales Representative',3,274)
,(285, N'Syed', N'Abbas', N'Pacific Sales Manager',3,273)
,(286, N'Lynn', N'Tsoflias', N'Sales Representative',3,285)
,(16, N'David',N'Bradley', N'Marketing Manager', 4, 273)
,(23, N'Mary', N'Gibson', N'Marketing Specialist', 4, 16);
-- execution
WITH DirectReports (ManagerID, EmployeeID, Title, DeptID, Level)
AS (-- Anchor member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, e.Deptid,
0 AS Level
FROM dbo.MyEmployees e
WHERE e.ManagerID IS NULL
UNION ALL
-- Recursive member definition
SELECT e.ManagerID, e.EmployeeID, e.Title, e.Deptid,
Level + 1
FROM dbo.MyEmployees AS e
INNER JOIN DirectReports AS d
ON e.ManagerID = d.EmployeeID)
-- Statement that executes the CTE
SELECT ManagerID, EmployeeID, Title, Level
FROM DirectReports
OPTION (MAXRECURSION 1000) -- Default 가 100이므로 지정하지 않았을경우 에러가 발생
또다른 예제
출처) http://sqlwithmanoj.wordpress.com/2011/12/23/recursive-cte-maximum-recursion-100-has-been-exhausted/
DECLARE @startDate DATETIME, @endDate DATETIME SET @startDate = '11/10/2011' SET @endDate = '03/25/2012' ; WITH CTE AS ( SELECT YEAR(@startDate) AS 'yr', MONTH(@startDate) AS 'mm', DATENAME(mm, @startDate) AS 'mon', DATEPART(d,@startDate) AS 'dd', @startDate 'new_date' UNION ALL SELECT YEAR(new_date) AS 'yr', MONTH(new_date) AS 'mm', DATENAME(mm, new_date) AS 'mon', DATEPART(d,@startDate) AS 'dd', DATEADD(d,1,new_date) 'new_date' FROM CTE WHERE new_date < @endDate ) SELECT yr AS 'Year', mon AS 'Month', count(dd) AS 'Days' FROM CTE GROUP BY mon, yr, mm ORDER BY yr, mm OPTION (MAXRECURSION 1000)
Output:- Year Month Days 2011 November 22 2011 December 31 2012 January 31 2012 February 29 2012 March 24
node.js의 영역에 대한 아키텍쳐 그림입니다.
정보를 찾다 보니 여기까지 오게 되었네요.ㅠㅠ 내것으로 만들기엔...
출처) http://www.ibm.com/developerworks/cloud/library/cl-nodejscloud/?cmp=dw&cpb=dwcld&ct=dwnew&cr=dwnen&ccy=zz&csr=042811
위사이트에는 2011년에 Node.js, Html5 에 관한 기초자료가 있습니다.
https://www.ibm.com/developerworks/mydeveloperworks/blogs/0fbe83eb-1b06-4f42-b5f3-45cd0a1dd129/entry/this_week_s_developerworks_newsletter_innovate_2011_node_js_html5_sugarcrm_and_more?lang=en
node, express
http://www.smartjava.org/content/tutorial-nodejs-and-expressjs-part-i-routers
Application Development with IBM DB2
라는 제목으로 Node.js 를 사용하여 DB2에 접근하는 프레임워크를 제시한 기술문서입니다.
출처 ) https://www.ibm.com/developerworks/mydeveloperworks/blogs/pd/?lang=en