본문 바로가기

Programing

(403)
[Hours] 1.4 update - ComboBox 후처리를 위해 추가한 TextField 대신 Combo Box로 바꾸기로 하였다. Finder에서 '폴더로 이동'에 보면 최근 사용한 5개의 경로를 최근 사용한 순서대로 보여주는데 이런 구조면 편리하리라 생각했다. 문제점1 - 디센더가 짤린다. g, j, q 같은 글씨의 아래 부분이 짤리는 문제가 있었다. 타이포그래피에서는 디센더(Descender)라고 부른다. Size Inspector에서 보니 Height 가 25로 고정이었다. 우선 Control의 Size를 Regular에서 Small 로 바꾸니 글씨가 작아지기는 하는데 짤리는 것은 적어졌다. 글씨가 작아지니 디자인적으로 균형이 맞지 않는 것 같아서 다시 Regular로 복귀하고 속성을 찾아보았다. Border를 조정하니 괜찮아졌다. 기본적으로 B..
[Redis] 난 Redis가 Ruby로 짰는 줄 알았는데... 난 Redis가 Ruby로 짰는 줄 알았는데... 코드를 받아보니 C로 짜여져 있다. server.h를 보면 ae.h를 포함하고 있다. Jim's event-loop 를 위해 만든 event-driven 프로그래밍 라이브러리를 재사용하기 편하게 라이브러리화 한 것이다. ae.c에 보면 시스템에서 지원하는 최적(최고)의 멀티플렉싱 레이어를 포함하는 코드가 있는데, evport -> epoll -> kqueue -> select 순으로 되어 있다. #ifdef HAVE_EVPORT #include "ae_evport.c" #else #ifdef HAVE_EPOLL #include "ae_epoll.c" #else #ifdef HAVE_KQUEUE #include "ae_kqueue.c" #else #incl..
[JS] ESLint를 썼더라면... 자바스크립트는 유연한 언어이다. 특히 타입에 있어 dynamic typing을 하고 있어 어려움이 많다. 일부 혹자는 타입이 없다는 말도 안되는 주장을 하는 사람도 있지만 말이다. 이런 특성으로 인해 어제 배포시에 버그가 끼어들어간 일이 있었다. 동일하지만 약간 다른 두 시스템에 배포를 했는데, 문제의 Command-C, Command-V 코드가 문제. 하나는 require를 추가했는데 다른 코드는 추가를 안했다. 문제의 util.js IntelliJ IDEA가 보여주는 코드 상에는 특별한 문제가 없어 보였다. 하지만 import를 하는 부분이 빠져 있었다. 옆에 용혁님의 화면에서는 util이 빨간펜 선생님이 밑줄 쫙 하듯이 아래와 같이 표시가 되어 있었다. 혹시 IDE의 차이가 이런 안전망(밑줄쫙)을 ..
[Java] Effective Java : Item 36 EnumSet, 유스케이스 in Java 8 한국어판: 아이템 36. 비트 필드 대신 EnumSet을 사용하라 (6장) Win32 윈도우 프로그래밍을 해본 사람은 알겠지만 비트 연산의 조합으로 만드는 여러가지 윈도우 API를 많이 사용한다. 예를 들면 AnimateWindow 함수는 3번째 인자(dwFlags)로 비트 연산자 OR(|)로 여러가지 조합된 상태를 입력을 할 수 있다. // WinUser.h #define AW_HOR_POSITIVE 0x00000001 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 #define AW_VER_NEGATIVE 0x00000008 #define AW_CENTER 0x00000010 #define AW_HIDE 0x00010000..
[Java] Stream in depth : Stream & Pipeline 스트림의 내부 구조 및 원리를 확인하다 두서없이 정리해두었다. 스트림의 사용에 대한 내용이라면 자바 기본서에 있는 것을 보는 것이 좋을 것이다. BaseStream 인터페이스 BaseStream 인터페이스는 위의 다이어그램에 적혀있는 메서드들을 가지고 있는 인터페이스이다. try with resource에 유용하게 사용가능한 AutoCloseable 인터페이스를 상속하고 있다. public interface BaseStream extends AutoCloseable 또한 제너릭 인자 두 개를 갖는데 하나는 스트림 원소들의 타입(T)이고 나머지는 BaseStream을 구현하는 또 다른 타입(S)이다. S는 BaseStream - 즉 자기자신을 bounded 하였기 때문에 BaseStream을 상속하고 있는..
[Sonarqube] Functional Interfaces should be as specialised as possible 함수형 인터페이스는 가능하면 스페셜한 놈을 찾아써라... Core Java SE 9 For the impatient (가장 빨리 만나는 코어자바9)책에도 한 페이지지만 분명 언급되어 있었다. (158쪽) 기본 타입 int, long, double에 특화된 함수형 인터페이스 34개... 이것을 사용을 하면 오토박싱을 줄일 수 있어서 성능에 향상을 줄 수 있다. Current Interface Preferred Interface Function IntFunction Function LongFunction Function DoubleFunction Function DoubleToIntFunction Function DoubleToLongFunction Function LongToDoubleFunction Fu..
[Spring] Bean 생성시 필드주입 시점은? 객체의 생성은 프레임워크가 해준다. 문제는 프레임워크가 JVM을 넘어 마술을 부리는 줄 아는 경우가 있다. 아래 글을 읽어보면 결국 프레임워크도 JVM이 제공해주는 리플렉션 도구들을 이용해서 객체를 만들고 private 필드에 값을 설정함을 알 수 있다. 질문 import org.springframework.stereotype.Service; @Service public class TestService { public void print() { System.out.println("TestService - print"); } } import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype..
[Swift] Hours 5 - v1.2.1 : viewDidAppear 희찬님 환경에서 버전 정보가 여러개 붙는 버그를 발견했다. 그런데 나한테는 재현이 안된다. 처음에는 High Sierra에서만 발생하나 생각했다. 그러다가 원인을 찾았다. 앱버전을 붙이는 것을 viewDidAppear에서 수행하고 있었다. override func viewDidAppear() { super.viewDidAppear() let beforeTitle = self.view.window?.title let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String self.view.window?.title = "\(beforeTitle!) (v\(appVersion!))" } 문제는 애플리케이션이 Hide 상..