운영하는 서버에 /tmp 디렉토리 용량이 필요해져서 추가 디스크를 붙여서 마운트해서 사용할 필요가 생겼다. 아무래도 임시 파일을 저장하는 곳이니, 루트 파일 시스템으로 사용하고 있는 ext4보다 적당한 것이 있지 않을까 싶어서 검색을 좀 해보았다. 하지만, 그런 건 없었다.

램 디스크를 사용하는 "tmpfs"가 있기는 한데, 이건 용량이 제한되기 때문에 내가 사용하려는 용도와는 맞지 않아 사용할 수 없었다.

그냥 ext4를 사용하되, 마운트 옵션으로 다음 옵션들을 사용하면 좋다고 한다.

barrier=0,noatime

"barrier=0" 은 몇몇 경우에 파일 쓰기 성능을 향상시켜 준다고 하고, "noatime"은 파일 접근 시간을 업데이트하는 것을 막아서 파일 입출력 속도를 높일 수 있다.

참고 : http://askubuntu.com/questions/1637/good-filesystem-for-tmp

'Operating' 카테고리의 다른 글

fstab 마지막 두 항목의 의미 - dump, pass  (0) 2015.02.03
vipw - passwd 파일 편집  (0) 2015.01.31
"leaking memory" messages in ubuntu  (0) 2014.12.12

# vi /etc/passwd

(앞의 vi는 다른 에디터를 쓸 수도 있지만) passwd 파일을 편집하기 위해서는 항상 위와 같이 했었다. 그런데, 저 역할을 하는 간단한 명령어가 있었다.

# vipw

이런 간단한 작업을 위해서 일부러 명령어를 따로 익힐 필요는 없겠지만, 너무 간단해서 이미 알게된걸 일부러 안 쓸 필요도 없으니, 필요할때 사용해야겠다.

'Operating' 카테고리의 다른 글

리눅스 tmp 디렉토리 파일 시스템  (0) 2015.02.02
"leaking memory" messages in ubuntu  (0) 2014.12.12
Subversion 저장소를 Git으로 옮기기  (0) 2014.03.05

PHP에서 논란이 많은 것 중에 하나가 Exception 이외에 핸들링하기 어려운 Error가 또 있다는 것이다. 작은 규모의 웹 애플리케이션에서는 별 문제가 되지않고, 오히려 장점도 있을 수 있겠지만, 규모가 조금 큰 웹 애플리케이션에서는 문제가 될 수 있고, 특히 서버 콘솔 프로그램을 만들었다면 치명적일 수 있는 문제이다.

물론 Error도 set_error_handler()를 사용해서 핸들링할 수 있다고는 하지만, Exception 처리와는 별개로 처리하다보면 코드 흐름이 엉망이 되기가 쉽기도 하고 해서 Exception으로 변환해서 처리를 하는게 낫다고 생각이 들때가 있는데, 그럴때는 아래와 같은 코드를 사용하면 된다.

set_error_handler(function ($errno, $errstr, $errfile, $errline) {

    throw new ErrorException($errstr, $errno, $errno, $errfile, $errline);

});

참고 : http://www.sitepoint.com/forums/showthread.php?632913-Converting-native-PHP-errors-to-Exceptions

"개발자 좀 살려주세요!", "굿바이 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

+ Recent posts