젠킨스가 만들어내는 차트의 폰트가 뭉개지는 경우

젠킨스로 프로젝트를 빌드하면 필요에 따라 다양한 리포트를 만들어냅니다.
커버리지 차트, 테스트 결과 트렌드, PMD 트렌드 등등

대쉬보드에서는 이 리포트들을 그래프 차트로 볼 수 있는데 이게 xml로 된 리포트 데이터를 가지고 젠킨스가 그래프 이미지로 만들어냅니다.

문제는 그래프에 나오는 숫자나 영문 글자들이 뭉개진다는 겁니다. 구글링을 해도 시원한 대답을 찾지 못 하다 젠킨스 플러그인 페이지에 달린 댓글 하나로 실마리를 찾았습니다.

msttcorefonts 패키지를 설치하라. 데비안이나 우분투는 저장소에 ms 트루타입 폰트 패키지가 기본으로 들어가 있어서 쉽게 설치가 가능하지만 레드햇 계열인 centOS에서는 직접 패키지를 빌드해서 설치해야 합니다.

패키지 설치에 관한 자세한 정보는 An easy way to install Microsoft’s TrueType core fonts on linux

Advertisements

스킨을 새로 만들고 있습니다

텀블러에서 제공하는 스킨 중 맘에 드는 형태를 찾는 것도 귀찮고 html5도 파악할 겸 해서 직접 만들기로 했습니다.

header, nav, section 같은 태그가 5에서 새롭게 등장한 덕분에 디자인은 직접 해야하지만 문서 구조가 명확해지니 페이지 레이아웃을 잡기가 한층 편해진 느낌입니다.

스킨에 넣을 아이디어가 있으시면 완전 환영입니다

레일즈 튜토리얼 두번째 판의 베타가 나왔네요

개인적으로 레일즈 익히기 시작할 때 제일 좋은 교재로 생각하는 레일즈 튜토리얼이 업데이트 됐네요
아직은 베타라고 합니다만 레일즈 3.2와 루비 1.9를 모두 담았습니다.

추가 된 주요 내용 중에
어셋 파이프라인과 capybara와 rspec 으로 하는 BDD 가 땡기네요.
심심한 명절에 튜토리얼이나 한 번 돌려봐야겠네요.

업데이트에 관한 자세한 소식은
http://news.railstutorial.org/ruby-on-rails-tutorial-second-edition-updated

온라인 버전은
http://ruby.railstutorial.org/ruby-on-rails-tutorial-book?version=3.2#top

참고로 한글로 된 가장 좋은 교재는 최효성님이 운영하시는 ROR Lab 이 아닐까 합니다.
문서와 스크린캐스트가 깨알같이 들어차 있습니다. 특이하게 최효성님은 전업 프로그래머는 아니신듯 합니다.

톰캣의 세션을 memcached로 관리 할 때 주의할 점 한 가지

다수의 톰캣 인스턴스를 사용할 때 세션 공유 하는 방법은 여러가지가 있다.
톰캣에서 기본으로 제공하는 p2p 세션 클러스터가 있으며 memcached나 gemfire 같은 캐쉬 시스템에 세션을 저장해 공유하는 방법도 있다.

사실 이런 아이디어는 레일즈 같은 개발 스텍에서는 당연하게 쓰는 접근법인데 자바 세상에는 구현하기 시작한지 얼마 안 된것 같다.

현재 사용하고 있는 방법은 멤캐쉬드를 이용해 세션을 공유하는 것인데 자세한 내용은 memcached-session-manager 프로젝트에서 알 수 있다.

도메인 객체를 세션에 저장하려고 하니 세션 매니저쪽에서 시리얼라이즈 할 수 없다면서 에러를 내뱉고 있어서 에러 로그를 살펴보니 객체 안에 lazy 로 로딩되는 연관 객체들을 시리얼라이즈 하려다가 에러를 낸다.
하이버네이트 세션이 클로즈 된 상태에서 lazy로 로딩하는 연관 객체들은 실제 객체가 아닌 proxy 객체라서 map 형태로 시리얼라이즈 할 수 없는듯 하다.

이 문제를 해결 할 수 없을까 하고 잠들기 전 잠깐 검색을 해보니 프로젝트에서 이미 컨버터를 구현해놓았다.
SetupAndConfiguration 페이지 하단의 설정 옵션을 살펴보니 customConverter 라는 항목이 있다.
msm-kryo-serializer를 지원하는 컨버터가 몇 개 있다. 그중에 CGLIB 프록시 컨버터와 하이버네이트 콜렉션 컨버터가 현재 문제를 해결 할 수 있는 방법이 될 것 같다.

  • de.javakaffee.web.msm.serializer.kryo.CGLibProxySerializerFactory: serializes/deserializes CGLIB proxies.
  • de.javakaffee.web.msm.serializer.kryo.HibernateCollectionsSerializerFactory: serializes/deserializes hibernate persistent collections (required if you store collections loaded by hibernate in your session)

어째 요즘은 코드로 하는 삽질보다는 시스템으로 하는 삽질이 많아지고 있다.