링크 : stackoverflow.com/questions/29917705/how-can-i-change-the-default-style-of-wpf-controls-for-a-single-assembly

스킨은 UI 컨트롤의 색상과 이미지 정도만 바꾸는 것이고, 테마(Theme)은 스킨에 더해 컨트롤의 크기나 연출 방식 까지도 바뀌는 걸 의미한다. (더 큰 개념)

 

WPF 어플에서 테마나 스킨을 사용하려면 다음과 같은 것을 고려해야 한다.

 

1. 윈도우의 기본 테마 중 하나를 가져다 쓰기.

2. 프로그램 내부에 테마나 스킨을 미리 세팅하기 vs 외부 파일(*.xaml)로 저장해서 그 중 하나를 읽어 오기 (내장 혹은 외부 파일)

3. 프로그램 구동시 정해진 테마나 스킨 중 하나를 선택하기(static) vs 프로그램 구동 중에 바꿀 수 있게 하기(dynamic)

 

등 여러가기 경우가 있기 때문에 이 중 어떤 방식을 사용할 것인가에 따라 구현 방식도 달라진다.

자세한 내용은 아래의 링크를 참고하자.

 

michaelscodingspot.com/wpf-complete-guide-themes-skins/

 

WPF complete guide to Themes and Skins - Michael's Coding Spot

In WPF we define a UI resource system (mostly in XAML resource dictionaries) which includes colors, templates, icons, styles and so on. Sometimes, we need the ability to change our application’s look and feel dynamically, allowing different Themes or Sk

michaelscodingspot.com

위의 블로그를 가보면 내부분의 내용은 이미지나 글로 설명이 되어 있고, 실제 구동하는 소스는 아래쪽에 링크가 첨부 되어 있다.

 

윈도우 7 내장 테마를 적용하는 방법

stackoverflow.com/questions/2075720/windows-7-theme-for-wpf

 

Windows 7 theme for WPF?

Is there any way to make a WPF app look like it's running on Windows 7 even if it's running on XP? I'm looking for some kind of theme I can just paste in. I'm aware of the themes project on Codeplex (

stackoverflow.com

 

코드 내부에 정의된 스킨 사용 예제

www.codeproject.com/Articles/19782/Creating-a-Skinned-User-Interface-in-WPF

 

Creating a Skinned User Interface in WPF

Reviews the basics of creating a WPF user interface with various visual styles.

www.codeproject.com

 

윈도우 테마와 내부 테마 파일로 정의된 테마까지 다 사용하는 테마 스킨 엔진 예제

www.codeproject.com/Articles/22575/WPF-Themes-and-Skins-Engine

 

WPF Themes and Skins Engine

In this article, I will talk about different techniques to load WPF themes and skins. I will also provide a helper class for loading and unloading themes.

www.codeproject.com

 

위와 같이 솔루션 이름 뒤에 브랜치 이름을 붙일 수 있는 플러그인 발견했다.

 

플러그인 다운로드 경로 : marketplace.visualstudio.com/items?itemName=mayerwin.RenameVisualStudioWindowTitle

 

Customize Visual Studio Window Title - Visual Studio Marketplace

Extension for Visual Studio - This lightweight extension allows changing the window title of Visual Studio to include a folder tree with a configurable min depth and max depth distance from the solution/project file, and the use of special tags to help wit

marketplace.visualstudio.com

 

git을 사용하면 경우엔 위와 같은 식으로 설정하면 된다.

 

*경고* 스포를 원치 않으시면 나가주세요~

 

 

 영화 '포드 v 페라리'를 보면 1966년 르망24시 경주에서 세 대의 GT40이 나란히 결승점을 통과한다. 눈 크게 뜨고 봐도 1cm의 오차도 없어 보일 정도로... 그런데, 동시에 들어 올 경우 공동 우승이 아니라, 경기 시작시 좀더 뒤에서 출발한 차가 이긴다는 숨은(?) 규칙 때문에 주인공인 켄 마일즈 대신 멕라렌이 우승하게 된다.

 

 저렇게 정확하게 운전하면서 들어왔다고? 이해는 잘 안되었지만, 그냥 그런가보다 하고 넘어갔다가 나중에 인터넷에 돌아다니는 다른 글들 때문에 헷갈리기 시작했다. 영화와는 다르게 실제로는 '결승점 바로 앞에서 멕라렌이 약속을 깨고 먼저 들어가는 바람에 순위가 바뀌었다'라는 주장이었다. 맥라렌이 나쁜 짓(?)을 했지만, 영화에서 사실대로 묘사하면 너무 욕을 먹을까봐 적당히 각색해서 찍었다는 추론이 가능한 주장이다. 나는 그가 정말로 그러했는지 궁금해서 당시 기록 영상을 찾아봤다.

 

12분 즈음에 결승 통과하는 장면 나옴.

 

영상을 찾아보니 정말로 그렇게 보였다. 영상에서 하늘색 1번이 켄 마일즈의 차량이고, 검정색 2번이 멕라렌이 운전한 차량이었는데 결승점을 통과할 때 확실히 검정색의 2번 맥라렌 차량이 먼저 들어온다. 영화와는 다른 점이다. 그렇다면 그 주장이 사실인 것일까?

 

 그래서 좀더 검색을 해보았다. 그런데, 뭔가 이상하다. 실제 경기를 설명하는 글들을 읽어 보니 영화와 별로 다르지 않다. 켄 마일즈가 속도를 일부러 늦춘 것도 사실이고, 경기 결과도 1차적으론 무승부(dead heat)였지만, 무승부일 경우 가장 먼 거리를 주행한 차가 우승한다는 룰 때문에 승부가 뒤집어진 것도 사실이라는 글들을 발견했다. 그렇다면 왜 저런 오해가 생긴 것일까?

 

 그것은 르망24시 경주만의 독특한 룰 때문이었다.

 

 당시 르망 24시에서 순위를 가르는 기준은 다른 레이싱 경기와 달리 시간이 아닌 거리였다. 이론적으론 24시간을 지난 시점 딱 그 시점의 주행 거리이다. 하지만, 24시간이 경과했을 때 모든 차의 위치를 정확히 기록할 수는 있는 방법이 당시엔 없었기에, 24시간이 지난 후 결승선을 통과했을 때를 기준으로 총 몇 바퀴를 돌았는지를 비교했다. 굉장히 부정확해 보이지만 이게 가능했던 이유는, 그 당시까지만 해도 1등과 2등 차이가 최소 2~4바퀴 이상 크게 벌어졌기 때문이다. 그래서, 두 대 이상의 차가 같은 바퀴 수를 돌고 들어오는 바람에 그걸 무승부로 간주하고 시작 위치까지 따지는 숨은 룰을 적용해야 했던 적은 한번도 없었던 걸로 보인다. 1966년 포드 GT40 세 대가 거의 동시에 결승선을 통과하기 전 까지는... 

 

참고로, 1966년 당시 순위는 이렇다. (1, 2위가 같은 바퀴 수를 돌았다.)

1위 : 360 바퀴 - Ford GT40 Mk.II - Bruce McLaren, Chris Amon

2위 : 360 바퀴 - Ford GT40 Mk.II - Ken Miles, Hulme

3위 : 348 바퀴 - Ford GT40 Mk.II - Ronnie Bucknum, Dick Hutcherson

 

 이전에 그런 사례가 없었기 때문에 당시의 레이서들도 그런 숨은 룰이 있다는 걸 모르고 경주를 했던 거 같다. 포드 팀에서는 마지막 랩에 들어서야 그런 룰이 있다는 걸 뒤늦게 발견했지만 레이서에게 알릴 방법이 없었다고 한다. 동시에 들어오자는 아이디어가 현장에서 즉흥적으로 나온 거라서 충분히 검토할 시간이 부족했던 거 같다. 결국 그 아이디어는 켄 마일즈가 3관왕을 못하는 참사로 이어졌다. 르망24의 이 애매한 규정은 1971년에 롤링 스타트가 도입 되면서 고쳐졌는데, 바퀴 수가 동일할 경우 총 주행시간이 짧은 차, 즉 지금 우리에게 익숙한 방식인 '결승선에 먼저 들어오는 차가 우승'하는 방식으로 바뀌었다.

 

 결국, 영화에서 차량 3대가 동시에 들어오는 것처럼 보여 준 이유는 지금의 상식으로는 잘 이해되지 않는 당시의 룰을 제한된 시간 안에 관람객들에게 효과적으로 전달할 수 있는 방법을 고민하다가 지금의 룰과 비슷하게 연출하여 관객들의 혼란을 줄이려 한 일종의 궁여지책으로 보인다.

 

사족1. 영화를 보면 켄 마일즈가 페라리를 추월하는 장면이 두번 나온다. 첫번째 추월에서는 상대 페라리 드라이버가 그냥 기분 나빠하는 정도이지만, 두번째에는 크게 당황하는데 한바퀴 이상 벌어지면 순위가 확실히 바뀌기 때문이다.

 

사족2. 당시 우승한 맥라렌은 우리가 아는 유명한 슈퍼카의 그 맥라렌이 맞다. 안타깝게도 켄 마일즈처럼 맥라렌도 1970년에 신형 자동차를 서킷에서 테스트하다 사고로 사망했다. 

 

참고 링크 : https://en.wikipedia.org/wiki/1966_24_Hours_of_Le_Mans

 

1966 24 Hours of Le Mans - Wikipedia

This article is about the race. For the 2019 film released internationally as Le Mans '66, see Ford v Ferrari. The 1966 24 Hours of Le Mans was the 34th Grand Prix of Endurance, and took place on 18 and 19 June 1966.[1][2] It was also the seventh round of

en.wikipedia.org

참고 링크 : https://www.thewrap.com/ford-v-ferrari-fact-check-did-le-mans-66-really-end-that-way/

 

'Ford v Ferrari': Did All 3 Cars Cross the Finish Line at the Same Time at Le Mans '66?

James Mangold's film starring Matt Damon and Christian Bale opens this weekend

www.thewrap.com

참고 링크 : https://en.wikipedia.org/wiki/24_Hours_of_Le_Mans#Classification

 

24 Hours of Le Mans - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Sports car race held in France The 24 Hours of Le Mans (French: 24 Heures du Mans) is the world's oldest active sports car race in endurance racing, held annually since 1923 near the t

en.wikipedia.org

 

크리스마스 선물에 감동 받은 펭수

'그림' 카테고리의 다른 글

펭수 표정 모음  (0) 2019.12.18
펭수 어이없음  (0) 2019.12.18
나무 한번 그려봄  (0) 2019.11.24
태권브이를 개조해 보았다  (0) 2019.03.11

클립 스튜디오 + 포토샵

'그림' 카테고리의 다른 글

펭수, 메리 크리스마스~  (0) 2019.12.24
펭수 어이없음  (0) 2019.12.18
나무 한번 그려봄  (0) 2019.11.24
태권브이를 개조해 보았다  (0) 2019.03.11

클립 스튜디오로 그려 봄

'그림' 카테고리의 다른 글

펭수, 메리 크리스마스~  (0) 2019.12.24
펭수 표정 모음  (0) 2019.12.18
나무 한번 그려봄  (0) 2019.11.24
태권브이를 개조해 보았다  (0) 2019.03.11

간만에 스케치북 구입한 기념으로 나무 한번 그려봄.

'그림' 카테고리의 다른 글

펭수, 메리 크리스마스~  (0) 2019.12.24
펭수 표정 모음  (0) 2019.12.18
펭수 어이없음  (0) 2019.12.18
태권브이를 개조해 보았다  (0) 2019.03.11

팀시티 2018.2.3 버전 기준으로 설명하겠습니다.


팀시티 설치파일은 아래의 링크에서 받을 수 있습니다.


https://www.jetbrains.com/teamcity/download/


Download 버튼을 누르면 바로 받을 수 있습니다.


설치파일을 실행합니다.


팀시티가 설치될 PC에 특별한 게 없다면, 모두 기본 옵션으로 설치해도 됩니다.


첫 화면


라이센스 동의 화면


설치 폴더는 기본으로 c:\TeamCity 폴더로 되어 있습니다.


서버와 에이전트를 같이 깝시다.


설치 중...


웹서버 포트가 기본으로 80으로 되어 있는데, 혹시 다른 웹서비스가 이미 구동 중이라면 다른 포트(예: 8080)로 바꿔 주세요.


그냥 Save 누르면 됩니다.


workDir에 대해 잠시 설명 드리자면, 프로젝트 생성시 작업경로를 따로 지정하지 않으면 workDir 쪽에서 임의의 폴더를 만들어서 소스를 다운로드 받고 컴파일 하는 작업을 하게 됩니다. 일부 CI 툴에서는 저 작업 경로를 바꿀 수 없습니다. 하지만, 팀시티에서는 프로젝트 마다 작업폴더를 임의로 지정할 수 있으므로 workDir 경로값은 무시해도 됩니다.



팀시티 구동에 필요한 계정 종류를 선택합니다.

위쪽은 시스템 계정이고, 아래쪽은 유저 계정입니다.


경험상 유저 계정을 사용하는 게 좋습니다.

Git 이나 Subversion 로그인에 필요한 자격증명이나 기타 여러가지 설정을 저장해서 사용해야 된다면, 유저 계정을 사용하는 게 낫습니다.


서비스를 구동할 윈도우 유저 계정의 아이디와 비번을 입력합니다.


서비스를 지금 시작합니다.


설치 작업이 완료되었습니다.


Finish를 누르면 팀시티 웹페이지(예: http://localhost:80)가 뜹니다.


혹시 원격으로 팀시티 홈페이지에 접속하려고 하는데 잘 안된다면, 윈도우즈 방화벽 메뉴에서 인바운드에 새 항목으로 TCP, 80(혹은 8080) 포트를 추가하면 됩니다.



팀시티 웹페이지를 처음 띄운 경우, 몇가지 초기 설정을 해야 합니다.

먼저 데이터 경로를 지정합니다. 기본값 그대로 진행합니다.


DB 선택화면이 나옵니다. MySQL을 선택합시다.




Download JDBC driver 버튼을 누르면 자바 컨넥터를 자동으로 다운로드 받아서 설치합니다.



다운로드가 정상적으로 되었다면 Loaded JDBC driver version: 5.1 이라는 메시지가 뜹니다.

MySQL에서 사용중인 컨넥터는 8.1이지만... 이걸로도 통신은 되므로 그냥 넘어갑시다.



다른 항목의 값은 다음과 같습니다.


Database Host[:port]는 비워놔도 됩니다. (원래는 localhost:3306 입니다.)

Database name은 teamcity 라고 입력합니다. (MySQL에서 생성한 DB 이름)

User name은 root 라고 입력하고요.

Password : MySQL 설치시 사용했던 비번을 입력하면 됩니다.


그 다음에 진행(Proceed)을 누르면 됩니다.



혹시 이 단계에서 다음과 같은 에러가 뜬다면

이전에 사용중이던 DB가 이미 있어서 발생한 문제입니다.

백업이 필요한 DB가 아니라면, MySQL에서 teamcity DB를 지우고(drop) 다시 생성(create)한 후 재시도하면 됩니다. 



만약, 이 단계에서 자바 컨넥터 연결이 잘 안된다는 에러가 뜨면 자바 컨넥터를 수동으로 설치해야 합니다.

일단, 서비스에서 TeamCity를 내리고요.


MySQL에 들어 있는 자바 컨넥터 파일을 Teamcity 폴더로 복사해 줘야 됩니다.

c:\Program Files (x86)\MySQL\Connector J 8.0\mysql-connector-java-8.0.15.jar

=> ​c:\ProgramData\JetBrains\TeamCity\lib\jdbc\


이때, Teamcity폴더에 예전 커넥터 파일이 있다면 삭제해 주세요.


이후 Teamcity 서비스를 다시 구동하고요.

웹페이지를 띄워서 다시 진행하되 Download JDBC driver 버튼은 누르지 마세요.


DB와 정상적으로 연결되었다면 이렇게 나옵니다. 시작 중...



라이센스 동의 화면이 한번 뜹니다.


관리자 계정 생성 화면이 뜹니다.

보통 설치하는 사람이 관리자이므로 본인이 사용할 아이디와 비번을 입력하면 됩니다.

Create Account를 눌러서 생성하면 다음 화면으로 넘어갑니다.


혹시 이 화면이 안 뜬다던가, 이전에 생성한 아이디나 비번을 잊어 버린 경우엔 슈퍼유저로 로그인 하는 방법이 있습니다.

위의 스샷 하단에 나와 있는 거 같은 Login as Super user 이라는 글자를 누르면...

인증 토큰을 입력하라는 화면이 뜹니다.


토큰은 c:\TeamCity\logs\teamcity-server.log 파일에 있습니다.

해당 파일에서 Super user authentication token 라는 걸 찾습니다.

맨 마지막에 나오는 걸 찾은 다음에 옆에 있는 숫자를 복사해서 토큰 입력창에 넣어주면 로그인이 됩니다.


참고 링크 : https://confluence.jetbrains.com/display/TCD18/Super+User



다시 관리자 계정을 성공적으로 생성했을 때의 화면으로 되돌아가면, 아래와 같이 뜹니다.

Email 정도만 입력하고 Save changes를 눌러 저장하면 됩니다.


좌측 상단 TC 아이콘을 눌러서 메인화면으로 갑시다.


드디어 메인화면에 도달했습니다.


아직 프로젝트 생성이 안되어 있기 때문에, Create project 버튼만 보이고 있습니다.


다음에는 다른 유저 계정 만들기, 프로젝트 설정 백업과 복원, 프로젝트 생성과 관리 방법 등을 다루도록 하겠습니다.




'개발 > 팀시티' 카테고리의 다른 글

팀시티 2018에서 사용할 MySQL 설치하기  (0) 2019.03.12

팀시티는 기본 내장 DB의 성능이 안 좋습니다.

그냥 설치해서 사용하면 다른 DB를 사용하라는 경고 메시지가 계속 뜹니다.

그래서 MySQL을 깔아서 같이 사용해 주는 것이 좋습니다.


이번 글에서는 팀시티를 위해 MySQL을 설치하는 법을 설명하겠습니다.

8.0.15 버전 기준으로 설명하겠습니다.


MySQL은 팀시티를 설치할 PC에 같이 설치해 주면 됩니다.


우선 아래의 다운로드 페이지로 갑니다.

https://dev.mysql.com/downloads/installer/


mysql-installer-community-8.0.15.0.msi 를 다운로드 받습니다.


Download 버튼을 누르면 로그인하라는 버튼이 크게 나오는데, 무시하고 아래의 No thanks, just start my download 글자를 눌러서 바로 받습니다.


다운로드 받은 설치파일을 실행합니다.

라이센스 동의 화면이 뜨면 동의하고 넘어갑시다.


설치 타입은 Custom을 고릅니다.



MySQL Servers, MySQL Workbench, Connector/J(자바)를 선택합니다.


서버는 기본으로 필요한 요소이고요.

워크벤치는 DB를 생성하거나 관리/삭제할 때 사용하는 UI 툴입니다.

컨넥터는 팀시티와의 통신을 위해서 필요한 드라이버입니다.



Execute를 누르면 설치를 시작합니다.


설치중...


설치완료


제품 설정을 해야 합니다. Next를 누르고요.


기본 옵션 그대로 Next


기본 옵션 그대로 Next


여기서 포트 번호 3306 이라는 게 중요합니다. 특별한 경우가 아니라면 바꾸지 맙시다.



인증 방법도 기본으로 두고 Next


루트 계정용 비번을 만들어야 합니다. 두번 입력하면 되고요.

아래쪽 유저 계정 추가로 만드는 건 필요없습니다.


그냥 이대로 두면 됩니다 Next


Execute를 눌러서 설정을 적용합니다.


적용이 다 되었습니다. Finish 누르세요.


이 화면 다시 한번 나오는데 그냥 Next 누르세요.


모든 설치가 완료되었습니다.


Finish 누르면 설치 프로그램은 종료되고, 아래처럼 워크벤치가 뜹니다.

MySQL80을 클릭합니다.



아까 입력한 비번을 넣어주고요.

Save password in vault(비번저장) 옵션을 체크하고 OK


DB에 연결된 화면입니다.

이제 팀시티용 데이타베이스를 만들어야 합니다.


create database Teamcity; 까지 입력하고 Ctrl+Shift+Enter를 치면 이 SQL 문장을 실행합니다.

아래쪽에 1 row(s) affected 글자가 뜨면 성공입니다. (순식간에 뜹니다.)


참고로 데이터 베이스를 삭제하는 명령은 drop database {DB 이름}; 입니다.

팀시티 설치과정에서 뭔가 잘못되어 재설치를 해야 될 경우 등에 사용하세요.


왼쪽 패널의 Schemas 탭을 눌러서 teamcity 스키마가 생성된 것을 확인합니다. (대소문자 다른 건 중요하지 않으니 그냥 넘어갑시다)


워크벤치는 이제 종료합니다.



이 상태로 팀시티를 설치하면 팀시티에서 아래와 같은 경고가 뜨기 때문에, 한가지 할 일이 더 남아 있습니다.


c:\ProgramData\MySQL\MySQL Server 8.0\my.ini 파일을 열어서 편집해야 합니다.


innodb_flush_log_at_trx_commit 항목을 찾습니다. 기본값인 1이 지정되어 있을 건데요. 

아래처럼 2로 바꾸고 저장합니다.


innodb_flush_log_at_trx_commit=2


MySQL 서비스를 재시작합니다.

윈도우 10이라면 작업 관리자의 서비스 탭에서 가능합니다.

MySQL 설치는 이걸로 완료되었습니다.

다음 글에선 TeamCity 설치 방법을 설명하겠습니다.


'개발 > 팀시티' 카테고리의 다른 글

팀시티 2018 설치하기  (0) 2019.03.12

+ Recent posts