글 목록 보기

Lyn
조회 수 284 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1.PNG
 

 

  1.  본인의 수준
  •  Python : 대충 그럭저럭 프로젝트 하는 수준
  •  CUDA : 예전에 한번 프로젝트 진행 해본 수준
  •   Multi Thread / 비동기 : 전문가 수준

2. 썰

  • 일단 번역이 굉장히 어색해서 읽는데 거부감이 듬
  • 책 구성이 이상하다. 이슈를 던진 후 설명도 안하고 다음 예제로 넘어가는 식. 독자가 궁금해 할 만한 내용에 대해 제대로 설명이 안되어있다,  애초에 저자가 자기가 쓰고 있는 내용을 이해는 하고 있나 싶은 수준
  • 책 두께에 비해 너무 많은 내용을 다룬다. 키워드 하나 던지고 예제하나 보여주고 다음내용으로 넘어가는 식. 예제도 도움이 되는 내용이 없다
  • 역자는 학생이고, 저자도 책의 출간 시점을 생각하면 아마도 이 책도 졸업학기 내지는 졸업 직후 씌여진 것 같은데 좀 더 알고서 책을 썼으면 좋았겠다.

3. 점수

  • 1.0 / 5.0

4. 한줄평

  • 프로그래밍에 대해 쌩판 모르는데 키워드만 빨리 캐치하고 싶은 사람이 아니면 시간이 아깝다. 그런데 사실 이정도는 구글 검색만 해도 나온다.

 

 

?

Lyn
조회 수 247 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

3.jpg

 

1. 본인의 수준

  • Web : 대충 그럭저럭 프로젝트 하는 수준(주로 vue.js 이용)
  • Angluer : 기본적인 수준
  • TypeScript : 중급 수준

2. 썰

  • 기본적으로 책의 테마 자체가 공식 문서에서 잘 나오지 않은 부분을 다루는 것으로 하였다고 한다. 실제 내용도 그렇다. 공식 문서를 그대로 출력해서 책으로 만든 경우도 가끔 보는데, 개인적으로 그건 그냥 종이낭비라고 밖에 생각 되지 않는다. 웹에 있는 공식 문서는 웹에서 보자(계속 갱신되니 비교적 최신 정보를 볼수있다는 장점도 있고)
  • Modern Web 개발에 대해 어느정도 알고 있는 상태에서 읽을 수 있다. Javascript 로 웹개발 하는데 컴파일을 한다고 했을때 이상해 하지 않을 정도의 지식은 필요하다.
  • TS 관련 내용은 없다. MS문서를 보고 TS에 대해서 공부를 어느정도 해 놔야 한다
  • 자주 쓰이는 기술의 유래, 간단한 예제, 설명, 문제 해결법이 잘 짜여져서 나와 있다.
  • 중간에 PC의 스크린샷이 가끔 나오는데, 해상도가 높지 않아 흐릿하여 알아보기 힘들다. 스크린샷을 좀 작게 찍었으면 좋았을것 같다.
  • 바로 전에 읽은 책이 컬러였다 보니 흑백 코드 보기 힘들어서 좀 아쉽다
  • 혹시 내가 아는것 중 빠진 부분이 있는지 생각해봐도 찾기 힘들만큼 Anguler 4 에 대해 전방위적으로 다루고 있다. 책이 얇다고(전방위적으로 다루는 것 치곤 400페이지가 채 되지 않는다) 내용이 부실하진 않다.

 

3. 점수

  • 4.0 / 5.0

4. 한줄평

 

  • Modern Web 을 대충 알면서 Angluar 를 공부하려고 하면 이 책을 선택해도 후회가 없을것이다
?

Lyn
조회 수 202 추천 수 0 댓글 0
Atachment
첨부 '1'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 

2.PNG

 

 

1. 본인의 수준

 

  • Python : 대충 그럭저럭 프로젝트 하는 수준 
  • 딥러닝 : 알파고가 뭔지는 아는 수준
  • 텐서플로 : 예제 코드 돌려본 수준
  • 수학 : 공대 1학년 수준의 지식만 있음

2. 썰

  • 딥러닝에 관한 이론과 실제 코드를 간단한 수학과 예제로 쉽게 설명 하고 있음. 내가 다른 머신러닝 관련 책을 보면서 첫페이지에서 부터 멘붕하게만들었던 어려운 수학 공식이 나오지 않는다(기껏해야 편미분 수준). 하나의 문제를 던진 후 해결방식을 제한하는 방식의 구성으로 소설처럼 쭉쭉 읽어 나갈 수 있었다. 고수준의 라이브러리(keras) 를 사용하면서 중간에 tf 만을 사용해 개념설명을 따로 해주는것도 좋았음.
  • 파이썬 관련 내용은 없다. 만약 프로그래머가 아니라 연구를 목적으로 이 책을 볼 경우에는 파이썬 기본 지식은 다른 책에서 배우고 와야 한다. 하지만 그리 어려운 코드가 나오지 않아 일단 무시해도 될듯
  • 지도학습에 대해서만 다룬다. 비지도학습이나 강화학습관련 내용은 없다. 이건 저자가 의대에서 연구중이라 그런듯
  • 이 책을 읽고나면 이정도면 나도 딥러닝 할수 있겠다는 근자감이 생긴다. 입문서로는 최고
  • 코드와 그래프에 색이 입혀져 있어 굉장히 가독성이 좋다. 

 

3. 점수

  • 4.5 / 5.0

4. 한줄평

  • 머신러닝은 천재들이나 하는거라고 생각하고 포기했던 나같은 사람에게 나도한번 해볼까? 라는 생각을 들게 만드는 좋은 책
?

Lyn
조회 수 169 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

요즘 심심해서 가끔 책을 빌려다 읽고 사진을 올렸더니 책이 어떠냐고 물어보시는 분들이 많아 ...

공부할 겸 독후감 겸 서평을 써볼까 합니다.

 

목표 : 100권. 1주일에 1~2권의 템포.

조건 : 출간 3년 이내의 회사 자료실에서 빌릴 수 있는 책

 

시작합니다.

?

Lyn
조회 수 194 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

Lyn
조회 수 1996 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Decorator border = VisualTreeHelper.GetChild(listViewName 0) as Decorator;
ScrollViewer scrollViewer = border.Child as ScrollViewer;
scrollViewer.ScrollToVerticalOffset(scrollViewer.VerticalOffset + 1);

 

ListView 의 ScrollBar 는 저렇게 2단계를 거쳐서찾아 올 수 있고, ScrollToVerticalOffset를 이용 하여 Item 단위로 스크롤을 조절할 수 있다.

TAG •
?

Lyn
조회 수 891 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

WPF 에는 표처럼 오브젝트를 배치할 수 있는 Grid 라는 Layout 컨테이너가 존재한다

 

그런데 이 컨테이너는 Layout 만 잡아 줄 뿐 표처럼 선을 그려주는 기능은 없... 진 않지만 내장되어 있는 ShowGridLines 는 사실상 UI 디버깅 용도 외에는 쓰기 힘들정도로 심각하게 기능이 구리다.

 

그래서 유명하신 정성태님이 아래와 같은 글을 쓰셧다

 

WPF - Grid 컨트롤의 ShowGridLine 개선

 

윗 링크의 글을 보면 아래와 같은 부분이 있다

 

"생각 자체는 그리 어렵지 않습니다. 예를 들어, 가로선을 그을 때(Row별로) 컬럼 단위만큼 그리며 진행하다가 다음번 그려야 될 곳이 RowSpan으로 되어 있으면 그 구획은 긋지 말고 건너뛰면 됩니다. 세로선도 마찬가지겠지요."

 

그리고 해당 컨트롤을 구현한 솔루션이 링크되어 있는데... 실제로는 구현이 반대로 되어 있다. Element 를 뒤져 가며 Span 된 부분을 건너뛰는 것이 아니라 Span 이 아닌 부분을 그리는 식으로. 사실 이렇게 하더라도 저 위 샘플에선 전혀 문제가 없이 나오는데... 문제는 저 Grid에 어떤 Element 도 없는 "빈칸" 이 존재할 경우 그 부분은 아예 Border 가 그려지지 않는다는 것이다...

 

그래서 위에 인용한 글 대로 Skip 하는 식으로 변형을 해서 쓰기로 했고, 그 코드를 공개한다

 

public class BorderGrid : Grid
{
    public BorderGrid() : base()
    {

    }

    public Thickness CellPadding
    {
        get
        {
            return (Thickness)this.GetValue(CellPaddingProperty);
        }
        set
        {
            this.SetValue(CellPaddingProperty, value);
        }
    }

    public static readonly DependencyProperty CellPaddingProperty =
        DependencyProperty.Register("CellPadding", typeof(Thickness), typeof(BorderGrid),
            new FrameworkPropertyMetadata(new Thickness(0.0, 0.0, 0.0, 0.0), FrameworkPropertyMetadataOptions.AffectsArrange,
            OnCellPaddingChanged)
        );

    static void OnCellPaddingChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs eventArgs)
    {
        BorderGrid grid = (dependencyObject as BorderGrid);
        foreach (UIElement uiElement in grid.Children)
        {
            ApplyMargin(grid, uiElement);
        }
    }

    protected override void OnVisualChildrenChanged(DependencyObject visualAdded, DependencyObject visualRemoved)
    {
        FrameworkElement childElement = visualAdded as FrameworkElement;
        ApplyMargin(this, childElement);

        base.OnVisualChildrenChanged(visualAdded, visualRemoved);
    }

    public static void ApplyMargin(BorderGrid PaddingGrid, UIElement element)
    {
        FrameworkElement childElement = element as FrameworkElement;
        Thickness cellPadding = PaddingGrid.CellPadding;

        BorderGrid childPaddingGrid = element as BorderGrid;
        if (childPaddingGrid != null)
        {
            childPaddingGrid.CellPadding = cellPadding;
        }
        else
        {
            if (childElement != null)
            {
                childElement.Margin = cellPadding;
            }
        }
    }

    Pen line = new Pen(Brushes.Black, 2);
    protected override void OnRender(System.Windows.Media.DrawingContext dc)
    {
        base.OnRender(dc);

        BorderGrid customGrid = this.Parent as BorderGrid;
        if (customGrid == null)
        {
            dc.DrawRectangle(null, line, new Rect(0, 0, this.ActualWidth, this.ActualHeight));
        }

        double linePoint = 0;
        double posFrom = 0.0;
        double posTo = 0.0;

        int rowCount = Math.Max(this.RowDefinitions.Count, 1);
        int columnCount = Math.Max(this.ColumnDefinitions.Count, 1);

        bool[,] rowCellIgnoreStatus;
        bool[,] columnCellIgnoreStatus;

        GetRowLineCellStatus(rowCount, columnCount, out rowCellIgnoreStatus, out columnCellIgnoreStatus);

        if (this.ColumnDefinitions.Count != 0)
        {
            for (int row = 0; row < rowCount - 1; row++)
            {
                var r = this.RowDefinitions[row];

                linePoint += r.ActualHeight;
                for (int column = 0; column < columnCount; column++)
                {
                    bool ignoreLine = rowCellIgnoreStatus[row + 1, column];
                    posTo += this.ColumnDefinitions[column].ActualWidth;

                    if (ignoreLine == false)
                    {
                        dc.DrawLine(line, new Point(posFrom, linePoint), new Point(posTo, linePoint));
                    }

                    posFrom = posTo;
                }

                posFrom = 0.0;
                posTo = 0.0;
            }
        }

        linePoint = 0;
        posFrom = 0.0;
        posTo = 0.0;

        if (this.RowDefinitions.Count != 0)
        {
            for (int column = 0; column < columnCount - 1; column++)
            {
                var r = this.ColumnDefinitions[column];

                linePoint += r.ActualWidth;
                for (int row = 0; row < rowCount; row++)
                {
                    bool ignoreLine = columnCellIgnoreStatus[row, column + 1];
                    posTo += this.RowDefinitions[row].ActualHeight;

                    if (ignoreLine == false)
                    {
                        dc.DrawLine(line, new Point(linePoint, posFrom), new Point(linePoint, posTo));
                    }

                    posFrom = posTo;
                }

                posTo = 0.0;
                posFrom = 0.0;
            }
        }
    }

    private void GetRowLineCellStatus(int rowCount, int columnCount, out bool[,] rowCellIgnoreStatus, out bool[,] columnCellIgnoreStatus)
    {
        rowCellIgnoreStatus = new bool[rowCount, columnCount];
        columnCellIgnoreStatus = new bool[rowCount, columnCount];

        foreach (UIElement element in this.Children)
        {
            int row = Grid.GetRow(element);
            int column = Grid.GetColumn(element);

            int spanCount = Grid.GetColumnSpan(element);

            for (int span = 1; span < spanCount; span++)
            {
                try
                {
                    columnCellIgnoreStatus[row, column + span] = true;
                }
                catch (Exception)
                {
                    //
                }
            }

            spanCount = Grid.GetRowSpan(element);
            for (int span = 1; span < spanCount; span++)
            {
                rowCellIgnoreStatus[row + span, column] = true;
            }
        }
    }
}

 

TAG •
?

Lyn
조회 수 3332 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

Windows 는 Vista 부터 고 DPI 지원을 하기 시작 했는데, 이게 버전마다 좀 차이가 있다.

 

Vista : DPI 변경시 재부팅 필요함

7 : DPI 변경시 로그아웃 필요함

8 : DPI 변경시 로그아웃 필요함.

8.1 : DPI 변경시 로그아웃 필요 없음!!!

 

여기서 중요한 이슈가 발생 하는데, 8.1에서 로그아웃이 필요 없다는 것은 프로그램 실행중에 DPI 가 바뀔 수 있다는점이다. 결국 MS는 이 문제를 해결하기 위해 메시지 하나를 추가하는데 바로 WM_DPICHANGED 이다. 당연하겠지만 Windows 8.1 이상에서만 발생하며, Windows SDK 도 8.1 이상을 써야한다(뭐 어차피 달랑 정수값 하나니 그냥 선언해서 써도 되긴 하지만 ...)

 

 

참조 : https://msdn.microsoft.com/en-us/library/windows/desktop/dn312083(v=vs.85).aspx

TAG •
?

Lyn
조회 수 46843 추천 수 0 댓글 0
Atachment
첨부 '4'
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

1. nuget 사이트에서 nuget command-line utility 를 다운로드 받는다.

01.png


2. nuget.exe를 적당한곳에 복사하고 nuget install redis-64 를 입력한다

(redis-64 패키지의 주소는 http://www.nuget.org/packages/redis-64/   이지만 별로 중요하지 않다. 패키지 명만 알면 됨)

02.png


설치된 redis 는 C:\Redis-64.2.8.17 에 있다.(현재 최신버전인 2.8.17 기준)


3. redis 를 서비스로 등록하기 위해 redis 설치 폴더로 이동해서 아래와 같은 명령을 친다(관리자권한이 필요하다)

redis-server --service-install redis.windows.conf


여기서의 redis.windows.conf는 기본적으로 존재하는 redis 설정 파일이다. 만약 다른설정파일이 있으면 원하는대로 수정 하면 OK

만약 여러개 생성하는것이 목적이라면(사실 달랑 하나 쓸 경우보단 여러개 띄울 경우가 많을거다... redis 는 single thread밖에 사용하지 못하기 때문에)

–service-name redisServiceName –port 10000 처럼 서비스명과 포트번호를 추가하여 여러개 띄울 수 있다


03.png


4. 서비스를 시작시키고 redis-cli 를 실행시켜 테스트 해본다

04.png



정상이다 : ) 이제 잘 갈궈서 (...) 써먹을일만 남았다



TAG •
?

Lyn
조회 수 7698 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

http://windows.microsoft.com/ko-kr/windows/preview-download?ocid=tp_site_downloadpage


아쉽게도 한국어는 없군요. 설치 후기는 차후 올려보겠습니다.
아직 자료 정리중이라

?

Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
/ 14