매년 깃허브(Github)는 Octoverse 레포트를 통해 이용자들에게 가장 인기 있는 기술을 발표한다.  3백만이 넘는 개발자들과 2백만 개 그룹에서 사용된 언어를 통계낸 것이기 때문에 신뢰도가 높다. 레포트에 따르면 자바스크립트(Javascript)와 자바(Java)가 1, 2위를 차지했고 그 뒤를 파이썬(Python), PHP, C++과 C#이 차지했다. 상위권 언어는 역사가 오래된 만큼 많은 개발자들이 익숙하게 사용한다고 볼 수 있다.

2014-2018 프로그래밍 언어 이용 순위(Source: Github Octoverse)

타입스크립트(TypeScript) 2017년 10위, 2018년 7위로 약진

타입스크립트는 마이크로소프트에 의해 개발된 언어로 자바스크립트의 문법을 기반으로 하며 대규모 어플리케이션 개발을 위해 디자인 되었다. 때문에 '강력한 성능을 갖춘 자바스크립트'라고 여겨진다. 비슷한 문법 때문에 자바스크립트 개발자들이 쉽게 사용할 수 있고, 마이크로소프트의 지원이 뒷받침 되면서 빠르게 인기를 얻고 있다.


루비(Ruby) 2015년 5위에서 2018년 10위로 하락

루비 온 레일즈(Ruby on Rails) 프레임워크로 쉽게 개발할 수 있는 점을 무기로 널리 쓰였던 루비는 점차 인기가 하락하는 추세다. 루비로 개발된 서비스는 트위치(Twitch), 훌루(Hulu), 스퀘어(Square), 깃허브(Github) 등이 있는 것으로 알려져 있다.


가장 빠르게 성장한 언어는 Kotlin, HCL, TypeScript 순

아래 표를 보면 Kotlin, TypeScript, Rust 처럼 안정성(type safety)과 상호운용성(interoperability)에 초점을 맞춘 언어들이 트렌드를 이끌고 있음을 확인할 수 있다. 또한 HCL, PowerShell, Go 등도 높은 성장세를 보이며 인기를 끌었다.

2018 Contributor 증가율 Top 10(Source: Github Octoverse)


'Dev' 카테고리의 다른 글

[.NET] What's New in .NET Framework 4.0  (0) 2013.07.18


Canvas 의 사용 용도에 따라 눈금선이 필요한 경우가 있다. (Grid, Panel 등도 방법은 동일하다)

주로 그림판이나 이미지 관련 기능을 구현할 때 필요로 할텐데, 이를 구현해보자.


파워포인트의 눈금선 기능을 참고하자.



방법은 격자 무늬의 VisualBrush (혹은 DrawingBrush) 를 생성하고, 이를 컨트롤의 Background 로 지정하는 것이다.


상하, 좌우 각각 50pixel 간격의 격자를 생성하는 코드는 다음과 같다.


물론 위의 Brush 를 Resource 에 선언하고, Key 값을 통해 필요한 부분에서 사용하거나, xaml 측이 아닌 c# 측에서 선언하여 사용하는 방법도 가능하다.


위의 코드의 출력물은 다음과 같다.







3년 전에 만들었던 내용을 공유차 


'What's New in .NET Framework 4.0'


'Dev' 카테고리의 다른 글

2018년 가장 인기 있는 프로그래밍 언어 Top 10은  (0) 2019.01.26


WPF에서 이미지를 로드했을 때, 이미지의 품질이 떨어져 보이는 경우가 있다. 문서나 그래프가 포함된 이미지를 로드하면 확연히 그 차이가 보이는데, 그 이유는 품질 상의 이유로 렌더링 시 이미지의 품질을 낮추기 때문이다.


이는 'RenderOptions.BitmapScalingMode' 라는 의존속성을 변경하여 해결할 수 있다.

해당 속성은 기본으로 'Unspecified' 로 지정되어 있으며, 이는 품질이 떨어지는 대신 처리 속도가 빠르다.

이미지의 품질을 높이기 위해서는 BitmapScalingMode 라는 속성을 'HighQuality' 로 변경하면 되는데, 

xaml 에서 변경할 수도 있고, cs 측에서 다음의 함수를 호출하여 변경할 수도 있다.


RenderOptions.SetBitmapScalingMode(this, BitmapScalingMode.HighQuality);



그 차이를 비교하기 위해, 그래프와 텍스트가 포함된 이미지를 각각 기본 셋팅과 HighQuality 로 하여 불러왔다.

그래프와 텍스트를 구별하는데 확연한 차이가 있음을 확인할 수 있다.




화면을 통채로 캡쳐하고 싶은 경우가 있다.

이 때는 RenderTargetBitmap 객체를 사용하여 화면을 Bitmap으로 만들고 이를 저장하는 방법을 이용한다.


Canvas 객체를 파일로 저장하는 코드는 다음과 같다.



RenderTargetBitmap 객체를 통해 Visual 을 Bitmap으로 만들고, 이를 파일로 기록하는 방법이다.

Visual 클래스를 상속받은 객체들에 대해 위의 방법을 적용할 수 있다.

이 포스팅에서는


1. 선택된 행, 열 버튼에 표시하기

2. 행, 열 선택 시 라우팅 이벤트 발생


의 과정을 진행하겠다.


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

1. 선택된 행, 열 버튼에 표시하기


다시 Generic.xaml 로 돌아가자.

1. ToggleButton 내부에 적당히 행, 열을 표시하도록 TextBlock 들을 만든다.

2. 각각의 TextBlock 의 Text 를 'Row', 'Column' 의존속성과 바인딩 시킨다.

  - 이 때, Row, Column 은 int 형 의존속성으로, 바로 바인딩 시킬 수 없다. 따라서 컨버터(Converter)를 사용한다.

  - 컨버터의 사용은 이전의 포스팅([WPF] Binding (바인딩) - Converter (컨버터))을 참고한다.



완료한 후 실행하면 다음과 같다.




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

2. 행, 열 선택 시 라우팅 이벤트 발생


라우팅 이벤트를 만들고 발생시키는 과정은 이전의 포스팅 ([WPF] Custom Routed Event (라우팅 이벤트 만들기)) 에서 다룬 적이 있기 때문에 자세한 설명은 생략하도록 한다.


포스팅과 동일한 방법으로 라우팅 이벤트를 생성하고, 

사각형이 클릭되었을 때 해당 이벤트를 발생시키도록 한다.

(앞에서 정의한 MouseLeftButtonUp 이벤트 핸들러에 추가하면 된다)



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



여기까지 진행하면 행, 열을 선택할 수 있는 '행열 선택기' 가 완성되었을 것이다.

이외에 필요한 기능은 별도로 작성하여 사용하면 되겠다.


이외에 필요한 컨트롤이 있다면 위와 비슷한 과정으로 진행하여 만들 수 있고,

ColorPicker, Spinner, Calculator 등의 다양한 컨트롤들이 이미 ExtendedToolkit 에 포함되어 있다.

코드도 공개가 되어 있으니 이를 참조하여 새로 만들 수도 있을 것이다.






이번 포스팅에서는


1. 선택된 행, 열의 갯수를 지정하는 의존속성(Dependency Property) 생성

2. 작은 사각형(CustomRectangle) 에 마우스 이벤트 구현


을 진행하도록 하겠다.


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

1. 선택된 행, 열의 갯수를 지정하는 의존속성(Dependency Property) 생성


의존속성은 이전 포스팅에서도 다루었지만 쉽게 생성하여 일반 전역변수처럼 사용할 수 있다.


다음과 같이 행(Row), 열(Column) 에 해당하는 의존속성을 생성하도록 한다.





여기에 덧붙여, 앞의 과정에서 사각형들을 생성할 때 사용했던 변수들(MaxRows, MaxColumns, RectangleSize, ...) 등도 의존속성으로 생성하여, 추후 변경이 쉽게 가능하도록 생성하였다.


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

2. 작은 사각형(CustomRectangle) 에 마우스 이벤트 구현


사각형들 위에서 마우스가 움직일 때마다 사각형들을 선택 혹은 해제하도록 하는 과정이 필요하다.

이를 위해서 앞에서 CreateRectangles() 함수 내부에서 생성한 CustomRectangle 각각에 이벤트를 연결하는데, 

연결할 이벤트는 MouseEnter, MouseLeftButtonUp 의 2개이다.


MouseEnter의 경우 마우스가 이동할 때마다 사각형들을 선택/해제 하도록 하고

MouseLeftButtonUp 의 경우 해당 사각형에 맞는 행, 열의 갯수를 선택하도록 한다.


각 사각형들마다 Row, Column 값을 가지고 있으므로, 

한 사각형에 MouseEnter 이벤트가 발생하면, 해당 사각형보다 Row, Column 이 작은 사각형들을 하이라이트 해주고,

한 사각형에 MouseLeftButtonUp 이벤트가 발생하면, 해당 사각형의 Row, Column 값을 1. 에서 생성한 의존 속성에 넣어주면 된다.




* 위에 언급한 것 외에 팝업을 닫고, Custom RoutedEvent 를 발생시키는 등의 작업이 필요할 수 있다.


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

여기까지 완료한 후 실행한 결과는 다음과 같다.









이번 포스팅에서는


1. 팝업창 내부의 구조를 구현하고

2. 작은 사각형들을 동적으로 생성한다.


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

1. 팝업창 내부의 구조


이제 팝업창 내부에 행, 열을 선택하는 화면을 구현해보자.


팝업창 상단에는 현재 선택된 행, 열의 갯수가 보여지도록 TextBlock 을 넣고

하단에는 사각형들을 배치할 'UniformGrid'를 하나 넣어준다.


여기까지 넣으면 간단한 구조는 다음과 같다


<Popup>

<Grid>

<TextBlock />

<UniformGrid />

</Grid>

</Popup>


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

2. 작은 사각형들 생성


작은 사각형들을 생성하여 위에서 생성한 UniformGrid에 차곡차곡 넣어주어야 한다.


간단한 과정은 다음과 같다.

1. 먼저 UniformGrid 에 Row, Column 을 원하는 값으로 지정한다.

2. 해당 UniformGrid에 Row x Column 개 만큼의 사각형을 생성하여 Children으로 추가한다.


이 과정을 실행하는 시점은, Generic.xaml 에 정의된 Template가 적용되는 시점으로 하는 것이 바람직하며

이는 OnApplyTemplate() 함수를 override 하여 사용하면 된다.


이 과정을 코드로 작성하면 다음과 같다.



MaxRows, MaxColumns, RectangleSize, RectangleMargin, RectangleColor 등은 몇 칸을 어느 정도의 크기와 색으로 만들지에 대한 변수이며, 

CustomRectangle 은 'Rectangle' 에 2개의 int 형 변수 :  Row, Column 을 추가한 객체이다.


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

여기까지 완료하고 실행시켜보면 다음과 같은 화면을 볼 수 있다.





+ Recent posts