"개발자 좀 살려주세요!", "굿바이 IE6" 등의 캠페인 등으로 브라우저 업그레이드를 해왔지만, 그때뿐이고 Active-X로 점철된 금융권 사이트와 정부 사이트로 인해서 우리나라에서 IE는 쉽게 버전 업그레이드 할 수 없다. 때문에 최신 버전이 이미 10대를 넘었지만, 아직도 7을 써야만 하는 사이트가 있는 우리나라 현실에서는 아직도 IE 버전 체크가 필요한 경우가 자주 있다.

버전을 구분하는 방법은 여러가지가 있지만, 다음은 간단히 PHP 코드를 사용해서 구분하는 예제 코드이다.

if (preg_match('/(?i)msie [2-7]/',$_SERVER['HTTP_USER_AGENT']))
{
// IE 7 이하
}

elseif (preg_match('/(?i)msie [8-9]/',$_SERVER['HTTP_USER_AGENT']))
{
// IE 8~9
}
else
{
// IE 10 이상
}


Yeoman을 사용하여 프론트엔드 개발을 하면서 한가지 아쉬운 점이 있었다. 단일 페이지로 구성된 웹 애플리케이션이라면 문제가 없겠지만, 페이지가 많아지면서 중복 코드가 많아진다는 점이었다. HTML에도 include같은 기능이 있으면 좋겠지만, 그것은 불가능하니 자바스크립트의 힘을 빌리거나 조립해서 하나의 화면을 만들어줄 서버 프로그램이 필요하다. 하지만, 프론트엔드 개발 진행중에 서버 코드와 별개로 HTML/CSS로만 작업을 하려다보니 발생한 문제인데, Yeoman의 구성인 Grunt에서 사용할 수 있는 grunt-bake를 사용하면 해결할 수 있었다.

간단히 다음 명령으로 설치할 수 있다.

$ npm install grunt-bake --save-dev

이제 Gruntfile.js 파일을 수정해야 한다.

grunt.initConfig( { bake: { your_target: { options: { // Task 옵션을 추가한다. }, files: { // 파일을 아래와 같은 형식으로 추가한다.
// "결과 파일": "작업 파일" "dist/index.html": "app/index.html" // etc ... } }, }, } )

위와 같이 설정을 해주면, app/index.html 내용은 아래와 같은 형식으로 작성하게 된다.

<html> <head></head> <body> <!--(bake includes/header.html)-->
<div class="content"> ... </div> <!--(bake includes/footer.html)--> </body> </html>

물론, includes/header.html 파일과 includes/footer.html 파일도 각 부분에 들어갈 내용으로 작성해준다.

이제 빌드를 위한 Task 설정을 수정할 차례이다. server Task와 build Task에 아래와 같이 "bake:build"를 추가해준다.

grunt.registerTask('server', function (target) {
    if (target === 'dist') {
        return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
    }
    grunt.task.run([
        'clean:server',
        'bake:build',
        'concurrent:server',
        'connect:livereload',
        'open',
        'watch'
    ]);
});
grunt.registerTask('build', [
    'clean:dist',
    'bake:build',
    'useminPrepare',
    'concurrent:dist',
    'concat',
    'cssmin',
    'uglify',
    'copy:dist',
    'rev',
    'usemin'
]);

그리고 livereload를 위해서 watch 설정에 페이지 부분 내용이 들어갈 폴더를 추가해준다.

watch: {
    compass: {
        files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'],
        tasks: ['compass:server']
    },
    styles: {
        files: ['<%= yeoman.app %>/styles/{,*/}*.css'],
        tasks: ['copy:styles']
    },
    bake: {
        files: [ "<%= yeoman.app %>/includes/**" ],
        tasks: "bake:build"
    },
    livereload: {
        options: {
            livereload: LIVERELOAD_PORT
        },
        files: [
            '<%= yeoman.app %>/*.html',
            '.tmp/styles/{,*/}*.css',
            '{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js',
            '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
        ]
    }
}

이제 모든 설정이 끝났다. 페이지에서 중복된 코드는 반복하지 말고, 모두 부분 HTML로 작성하면 된다.

긴 웹페이지에서 A태그를 사용해서 섹션별로 이동할 수 있도록 만들었는데, fixed로 고정되어있는 헤더가 이동한 섹션 일부를 가리는 문제가 발생했다. 다음은 이런 문제가 생기는 예제 코드이다. (문서 내용은 한글 Lorem Ipsum을 사용했다.)

위의 코드에서 헤더에 있는 각 링크를 클릭하면 동일한 페이지의 해당하는 섹션으로 이동하는데, 상단의 헤더가 고정되어 가리게 된다. 이 문제를 해결하기 위해서 스크립트를 사용하지 않고 CSS 스타일만으로 해결되는 간단한 방법이 없을지 여러 방법들을 테스트하다가 아래와 같이 코드를 작성하였다.

이 해결 방법의 핵심은 이동할 섹션 바로 앞쪽에 보이지 않는 요소를 헤더와 동일한 높이로 만들어서 섹션 id를 지정한다는 것이다. 바로 아래와 같은 코드이다.

/* CSS */
.anchor{
display: block;
height: 100px; /* 헤더의 height와 동일한 값 */
margin-top: -100px; /* 헤더의 height와 동일한 값 */
visibility: hidden;
}
<!-- HTML -->
...
<span class="anchor" id="section1"></span>
<div class="section"> ...

참고 : http://pixelflips.com/blog/anchor-links-with-a-fixed-header

원서는 The Hacker’s Guide to Python 이라는 제목이지만, 번역서는 무난한 느낌의 제목으로 출간되었다. “오픈소스 개발자가 알려주는 고급 기법과 실천법”이라는 부제답게 파이썬 프로젝트를 어떻게 시작해서 진행해야하는지 알려주고, ‘파이썬에 이런 것도 있었나?’ 하는 생각이 드는 파이썬의 고급 기능들을 다루고 있었다.

책의 앞부분에서 버전 번호 규칙이나 문서화 방법, 배포 방법, virtualenv를 사용한 가상 환경과 단위 테스트에 대한 내용들을 다루는데, 아직 스핑크스를 사용해본 적이 없어서 이것은 한번 꼭 써봐야겠다는 생각이 들었다. 그리고, 단위 테스트도 내 맘대로 작성하고 있었는데, 이 책에서는 tests 안에 모아놓는 것이 좋다고 제안하고 있었다.

데코레이터나 함수형 프로그래밍 등 여러가지 고급 주제에 대해서 다루면서, 인터뷰도 싣고 있어서 파이썬 개발을 하면서 한번쯤 고민을 해봤던 주제들을 다루고 있는데, 대표적으로 ‘ORM을 쓰는게 좋을까?’, ‘Python 2/3 호환성은 어떻게 해결하지?’ 같은 질문에 대한 대답들을 볼 수 있어서 좋았다.

파이썬을 사용하고는 있지만, 뭔가 부족함을 느끼는 나같은 사람에게는 비급과 같은 책이었다.



실전 파이썬 프로그래밍

저자
줄리안 단주 지음
출판사
인사이트 | 2014-12-13 출간
카테고리
컴퓨터/IT
책소개
좋은 프로그램을 만드는 데는 프로그래밍 언어 문법 외에도 다양한...
가격비교 글쓴이 평점  


12월 파이콘 세미나에 참석했다. 12월에 첫 타이핑이 시작된 Python 1.0을 기리기 위해서 파이썬 생일 기념 세미나로 기획되었다고는 하지만, 다른 세미나와 크게 다른 것은 없었다. 다만, 세미나 마지막 시간이 피자 토크라서 먹는 시간이 공식적으로 들어갔다는 것과 예약할 때가 아니고 참석할 때에 참가비를 받는 유료 세미나라는 점이 조금 특이했다.

행사 장소인 마루 180은 이번에 처음 가보면서 아산나눔재단에서 만든 창업지원공간이라는 걸 알게되었다. 1층과 지하 이벤트홀만 보았을 뿐이지만, 왠지 개발 의욕이 솟을 것 같은 느낌의 공간이었다. 지하 이벤트홀도 일부로 의도한 건지는 모르겠지만 인테리어가 차고같은 느낌이 강했다. 나중에 정말 주차장을 나눠서 만든 공간이라는 것을 알고나서는, 혹시 이벤트 없을때는 정말 주차장으로 사용하는게 아닐까하는 생각도 들었다.

이런 개발의욕 말고

세션 발표와 5분 정도의 짧은 발표 뒤에 피자를 먹으면서 이야기를 하는 “피자 토크” 시간으로 마무리 되었는데, 어느 분 이야기처럼 “피자만 있고 토크는 없는” 시간이 었다. 피자를 먹으면서 이야기를 한다는게 꽤나 불편하다는 걸 처음 알았다. 결국 피자가 동이 나고 나서 사람이 조금 줄어든 다음에야 이런 저런 이야기를 할 수 있었고, 남은 사람들은 이야기하면서 치킨을 먹었는데, 나중에 생각해보니 먹고 갈 사람들은 먼저 보내고 남은 사람들끼리 나중에 후식(?)같은 걸 먹으며 이야기하는 것도 나쁘지 않다는 생각이 들었다.

그럼, 이번 세미나 발표를 정리해본다.


평범한 유부남의 덕통사고, Brickstat.us - 서정민

첫 발표자가 개발자가 아니라는 점에 놀랐고, 혼자 재미로 개발하는 프로젝트를 완성해서 런칭하고 운영하는 방법을 발견한 시간이었다. 기술 내용이 많이 등장하지 않았지만, 발표 자체가 무척 재미있었다. 참고로 이분은 celebshot.us, 아스카와 나의 신혼방을 만들어 운영 중이시고, 최근에 brickstat.us를 런칭하셨다. 나중에 들은 이야기이지만, 국내에서 구글 애드센스는 정말 방문자가 엄청 많지 않으면 돈이 별로 되지 않고 차라리 해외 서비스의 경우가 광고 수입이 좀 되는 경우가 있다고 한다.

슬라이드


Django, 저는 이렇게 씁니다 - 정경업(블로그)

Django를 사용한 경험을 바탕으로 몇가지 팁(주로 용도에 적절히 사용할 모듈)을 공유했다. 생각나는 것 몇개를 적어보면,

슬라이드


Hacker’s Guide to Python : 번역자의 주요내용 정리 - 김영후(@0hoo)

책 소개가 주된 내용이었는데, Python 개발을 하거나 오픈소스 프로젝트를 하고 싶다면 유용한 내용이 많았다. 자세한 건 을 읽어보자.


여기까지가 메인 발표였고, 이어서 짧은 라이트닝 토크가 이어졌다.


초중고 코딩교육을 위한 파이썬 (Computer Programming for Everybody) - 이광춘

기억나는 키워드만 나열해본다.


파이썬을 모른다고 번역을 못하는건 아니다 - 권정민

파이썬을 활용한 베이지안 통계를 번역한 분인데, 앞서 발표한 김영후 님과 함께 번역자 분이 두분이나 발표하셔서 책 번역에 대해서 조금 알 수 있는 기회가 되었다. 번역에 가장 중요한 요소는 어학능력이며, 한국어 능력이 좀 더 중요하다는 것이 기억에 남는다.


Awesome List - 정기영

Github에서 공유되고 있는 Awesome List 저장소에 대한 소개

슬라이드


파이썬엔진 Kivy로 게임만들기 - 장지호

약 일주일동안 간단한 게임을 만들어 본 후기형식의 발표였는데, 나도 한번 해보고 싶다는 생각이 들었다.

발표자료


IPython widget - 김슬

IPython을 사용할 일이 없어서 그냥 저런 것도 있구나 하고 보았다.

발표자료


IPython extension - 신예지

위와 같음.

관련자료


Digital Nomading 시대의 Software Development - 김승진

이 발표를 듣고 나도 재택근무를 할 방법을 고민하기 시작했다.


열정페이와 오픈소스의 차이를 논하시오 - 박현우(@lqez)

오픈소스 프로젝트 npk을 시작한 경험과 summernote에 참여한 경험을 바탕으로 열정페이와 오픈소스 활동의 차이를 이야기해주셨다.

  • 공통점 : 좋아서한다. 돈이 안 된다. 보람은 있을지도
  • 차이점 : (오픈소스는) 원해서 한다. 과정도 중요하다. 스스로 발전할 수 있다.

슬라이드


PyCon KR 2015 Trailer - 김영근(@scari_net)

스타워즈 영상을 사용해서 만든 내년 파이콘 예고 영상을 보았다. 저작권 문제가 있어서 배포는 어렵다는 것이 안타깝다. 오늘 발표된 예정일은 2015년 6월 27~28일이었다.


관련글


no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

우분투 머신 콘솔에서 갑자기 위와 같은 메시지가 나오기 시작했다. 막 14.04로 업그레이드를 끝낸 직후라서 업그레이드가 잘못되었는지 알았는데, libpam-smbpass에 문제가 있는 것 같다.

현재까지 제안된 임시조치는

  1. libpam-smbpass 패키지를 삭제하거나
  2. sudo pam-auth-update 를 실행한 뒤에, SMB password synchronization 체크를 끄는 방법이 있다.

이렇게 하면, 일단 버그가 수정될 때까지는 저런 메시지가 나오지 않도록 할 수 있다..


웹사이트 접근성을 보장하기 위해서 준비해야할 것, 적용 방법, 실무에 적용하다가 나오기 쉬운 질문들까지 다루고 있는데, 각 접근성 항목별로 좋은 예와 나쁜 예를 보여줘서 어떻게 해야 접근성이 좋은 것인지 이해하기 쉽게 되어 있다.

아래와 같은 몇가지 검사 도구도 소개하고 있다.

  • N-WAX - 검사용 확장 기능
  • UIA Verify - 플래시, 실버라이트 등의 접근성 검사
  • PEAT - 발작 위험을 일으킬 위험이 있는지 검사
  • 브라우저 개발자 도구 - IE 개발자 도구(CSS 사용안함, 이미지 대체 텍스트 보기, 유효성 검사 등)

그리고, 널리에는 웹 개발에 유용할만한 다른 도구들도 공개되어 있다.


웹접근성 프로젝트 시작하기(TECH@NHN 6)

저자
박태준, 조진주, 김한솔 지음
출판사
위키북스 | 2013-01-11 출간
카테고리
컴퓨터/IT
책소개
웹 접근성이란 무엇인가? 웹 접근성은 특정인을 위한 것인가? 웹...
가격비교


'Etc' 카테고리의 다른 글

12월 파이콘 세미나  (0) 2014.12.14
주한나 - 개발자를 부탁해  (0) 2014.11.24
SpringCamp 2014  (0) 2014.05.31

개발자의 연애, 업무, 해외 취업 등에 관한 이야기와 팁 등을 다룬 가볍게 재미삼아서 읽기 좋은 책.

저자 블로그 : http://theonion.egloos.com


개발자를 부탁해

저자
주한나 지음
출판사
인사이트 | 2011-09-30 출간
카테고리
컴퓨터/IT
책소개
대스러움이란 무엇이기에 이다지도 공대생은 고생하는가!주로 이과를...
가격비교



'Etc' 카테고리의 다른 글

TECH@NHN - 웹접근성 프로젝트 시작하기  (0) 2014.11.25
SpringCamp 2014  (0) 2014.05.31
Firefox 개발자 콘퍼런스 2014  (0) 2014.04.10

SpringCamp 2014에 다녀왔다. SpringCamp에 가본 것은 처음인데, 참가신청 페이지의 컨퍼런스 소개글을 보면 다음과 같이 소개하고 있다.

애플리케이션 서버 개발자들과 함께 가치있는 기술에 관한 지식과 정보를 '공유'하고 참가한 사람들이 서로 '인연'을 만들고 시끌벅적하게 즐길 수 있는 '개발자들을 위한 축제'를 목표로 하는 컨퍼런스

"Spring"이라는 이름이 들어갔지만, 세션 내용들은 Spring Framework에 대한 이야기에 국한되지 않은 점에서 서버 개발자들의 지식, 정보의 "공유"라는 측면은 좋았다. 하지만, "인연"을 만드는 부분은 좀 아쉬웠다. 이런 컨퍼런스에서 그저 많은 사람들이 한자리에 있다고 해서 통성명하고 이야기를 나누게 되는 것이 자연스러운 일은 아닌 것 같다. 아무래도 중간에서 소개하는 사람이 있지 않으면 새로운 인연을 만들어가기가 쉽지 않은데 이런 점이 좀 더 고민되어야하지 않나 하는 생각이 들었다.

그러면, 들은 발표를 간단히 정리해본다.


조금 더 좋은 개발자가 된다는 것 : 컨퍼런스 발표자가 된다는 것 - 박용권

일종의 기조 연설같은 느낌의 발표였는데, 요지는 이런 자리에서 발표하는 것을 망설이지 말라는 내용이었다.


설계도구 실전 활용 사례 - 안영회

설계도구를 활용하는 것까지는 아직 검증이 되지 않아서 이미 공지된 제목의 발표를 하지 못하고 주제를 바꿨다는 설명을 발표에 앞서 하면서 "실용적 소프트웨어 설계를 위한 근본적인 질문들"이라는 제목으로 발표가 진행되었다. 갑자기 주제가 바뀌었다는 말을 들어서인지 발표를 들으면서도 이상하게 집중도 어렵고 이해도 어려웠다. (그냥 내가 설계에 대해서 아는게 없어서..) 그래도 몇가지 기억에 남는 것만 적어본다.

  • 설계시 사용하는 용어의 통일이 중요하다.
  • 소프트웨어는 계속 변화하는 유기체이다.
  • 완벽하게 설계를 하겠다는 결벽증은 버리자.
  • 새로운 개발자는 코드를 파악하고 "멘탈 모델"을 그리는게 중요함


스프링 어플리케이션의 문제해결 사례와 안티패턴 - 정상혁

아주 명확하고 실제로 도움이 될만한 팁을 전수받는 느낌의 발표였다. View cache 기능 관련해서 Spring에 패치된 코드는 간단한 캐쉬를 구현하기에 좋은 예제가 될 수 있다는 것을 알았고, XXE Injection이라는 것을 처음 들어봤다. 자세한 내용은 발표 자료가 공개되면 보면 될 것 같다.

발표 내용과는 관계없지만, 우분투 노트북으로 데모도 보여주면서 발표하는 모습이 자연스러워서 인상적이었다.


실시간 알림 기능 구현 사례 - 이연복

vert.x와 zookeeper를 사용한 푸시 서버를 구현한 사례였는데, BlazeDS와 Flex도 사용했다고 한다.


내가 파이썬을 선택한 이유 - 최윤석

자바(Spring Framework)을 버리고 파이썬(Django Framework)을 사용한 사례에 대한 발표였다. 제목인 "선택한 이유"는 빠른 개발 속도와 필요한 만큼만 배워서 쓸 수 있다는 점에 있었다. 라이브 코딩을 진행했는데 마치 예전에 루비온레일즈를 유명하게 만든 블로그 만들기 동영상을 보는 것처럼 빠르고 간편하게 코딩을 하는 모습을 체험할 수 있었다.


린 스타트업 하다가 "잘"망한 이야기 - 강규영

나에게 오늘의 최고의 발표를 꼽으라면 이 발표를 꼽을 것 같다. 서비스를 만들고, 발전시키다가, 정리하게 된 것 까지 순서대로 흥미롭게 이야기했다.

  1. 사용자 조사 : 경쟁 앱을 직접깔아서 사용자들에게 물어봤음 -> 여 - 매너("변태" 문제), 남 - 답장 중요함
  2. 디자인
  3. ?? (생각이 잘 안남)
  4. 프로그래밍 : GAE, Urban Airship
  5. 릴리스
  6. 마케팅 : 경쟁 앱을 통해서 메시지로 홍보함. 직접 홍보(X) 간접적인 메세지로 홍보(O)
  7. 중지 : 갑작스런 사용자 증가로 비용이 증가, 푸시 서비스 중단
  8. 점진적 개선 : OORP에 나오는 Bridge to New Town 패턴을 사용. memcached를 임시 저장소로 사용. Active 사용자의 정보를 구/신 저장소에 모두 저장하다가 Inactive 사용자는 batch로 마이그레이션.

사용자에게 중요한 요소로 파악된 요소 중 하나인 매너를 확보하기 위해서 수행한 것은 변태(적인 메시지를 보내는 사람)와의 전쟁이었고, 이것에 성공하지 못한 것이 발표자가 밝힌 사업 철수의 한 원인이기도 했다. "변태"를 퇴치하기 위해서 사용한 방법들로 기억나는 것을 적어보면,

  • 메시지 필터링 : 정확도는 낮지만 비매너 메시지를 다 잡는 필터A, 정확도가 높아서 확실한 비매너 메시지만 잡는 필터B
  • 유죄 추정의 원칙 : 남자의 경우 "변태"로 추정하고 답장을 받았을 경우에만 매너남일거라고 추정함
  • 신고 : 신고를 받으면 메시지 전송을 제한
  • 거짓 신고 방지 : 24시간 유지되는 DB에 한 사용자가 3번까지 할 수 있으며, 3명 이상이 신고하면 처리됨. 처리되면 추가 신고 가능해짐

그리고 또다른 사용자들의 요구 사항 중의 하나인 답장을 받을 수 있도록 하는 방법은 성비 불균형 문제를 해결하는 것이었다. 성비를 비슷하게 만들기 위해서 고안한 장치가 흥미로웠는데 발표자료가 공개되면 그림으로 다시 확인할 수 있을 것 같다. 대충 설명해보면 Active 남자가 보내는 메시지는 Active 여자에게만 보내고, 남는 것들은 쌓아둔 상태로 Inactive 여자에게 메시지가 있다는 것을 알려주는 역할로만 기능하다가 Active로 전환되면 그때 보내는 방식이었다.

그 외에 여자 사용자의 참여를 독려하기 위해서 부영이에게 말풍선을 달아서 메시지를 작성하도록 했더니 5%의 실제 메시지 작성 증가가 있었다는 것이나, 수익구조로 부엉이 꾸미기를 계획했다든지 하는 내용도 있었고, 단문 분석을 위해서 자소분리 후 분석해서 좀 더 많은 정보를 분석할 수 있었다는 내용도 있었다.


즐거운 개발을 위한 스마트한 습관 - 강대권

Redmine + SonarCube + Jenkins = 자동화로 인한 개발 편의


비동기 그리고 이벤트 - 강지훈

비동기나 이벤트라는 것이 새로운 기술이 아니고, 어떤 서비스를 구현할때 적당한 알고리즘이나 솔루션보다는 요즘 유행하는 키워드에 맞는 것만 생각하려는 경향을 경계해야한다는 요지의 이야기가 기억에 남는다.


아직 공개된 발표자료도 몇 개 없지만, 관련된 링크를 모아봤다.


'Etc' 카테고리의 다른 글

주한나 - 개발자를 부탁해  (0) 2014.11.24
Firefox 개발자 콘퍼런스 2014  (0) 2014.04.10
릭 채프먼 - 초난감 기업의 조건  (0) 2014.01.05

Firefox 개발자 콘퍼런스 2014가 있었다. 유료행사에 평일이었지만, Firefox OS에 관심이 좀 있었기때문에 가보았다. 딱히 정리할만한 내용은 없는 것 같고, 기억에 남는 것들을 키워드와 URL 위주로 나열해 본다.

라인앱 개발 사례 발표자가 발표 중 강조하는 것이 메모리였다. 메모리가 2G 이상은 되어야 앱 개발해서 쓸만한 폰이라고 이야기하더라.

기타 내용은 공식사이트에 동영상도 올라오니 참고하면 되겠다.

'Etc' 카테고리의 다른 글

SpringCamp 2014  (0) 2014.05.31
릭 채프먼 - 초난감 기업의 조건  (0) 2014.01.05
제프 앳우드 - 코딩 호러의 이펙티브 프로그래밍  (0) 2013.12.07

+ Recent posts