Lea Verou씨가 Best of Fluent 2012에서 했던 강연 동영상에서 나왔던 내용으로 다음과 같은 것이 있다.

function wordCount(text) {
  return text.split(/\s+/).length;
}
 
// Hex color 
/^#([a-f\d]{3}){1,2}$/i.test(str);
 
// A 6+ letter password with at least: 
// one number, one letter and one symbol 
/^(?=.*\d)(?=.*[a-z])(?=.*[\W_]).{6,}$/i
 
// Any number that's Not divisible by 50 
/\b(?!\d+[50]0)\d+\b/
 
// Anything that doesn't contain "foo" 
/^(?!.*foo).+$/

함께 소개된 RegExp playground 사이트도 웹 브라우저에서 간단한 Regular Expressions를 실험해 볼 수 있는 도구로 안성맞춤이고, 해당 패턴을 tweet으로 공유할 수도 있다.

영상 끄트머리에도 얘기되었는데 정규식 패턴을 짤 땐 그 정확도도 중요하지만, 너무 정확도에 치중한 나머지 실제 적용하면 들인 노력에 비해 그 성능이나 실용성 면에서 별 큰 이득이 없을 수도 있다는 점을 명심해야 한다.

node.js와 함께하는 대표적 NoSQL DB 가운데 하나인 MongoDB를 설치해서 이것저것 실험해보고 있는데, 우연하게 mongodb.log 파일을 열어보니 DB를 실행할 때마다 다음과 같은 경고문을 찍어내고 있었다.

** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

알아보니, mongod가 적절하게 운용되려면 시스템 자원의 운용과 관련해서 리소스 한계치 설정 값(ulimit settings)을 권장치 만큼 지정해 줄 것을 장려하고 있다.

경고 문구에 찍힌 현 Mac 시스템의 Number of files 값은 터미널에서 ulimit -a 혹은 launchctl limit 명령을 주면 확인할 수 있는데, 기본 설정 값이 명령에 따라 각기 open filesmaxfiles라는 이름으로 표시되며 그 값은 256으로 정해져 있다. (관련 문서 – Where are the default ulimits specified on OS X (10.5)?)

테스트 목적으로 MongoDB를 운용한다면 별 신경을 안 써도 되겠지만, 대용량 DB를 다루면서 빠른 응답속도가 요구되는 production 환경에선 이 시스템 자원의 운용에 관한 설정이 무척 중요해질 것이다.
MongoDB의 Number of files 관련 경고 메시지를 없애는 법(이)란 제목의 글 마저 읽기 →

터미널에서 많이 쓰이는 명령으로 특정 디렉터리를 만든 후 해당 디렉터리로 바로 이동하려고 할 때 다음과 같은 명령을 자주 쓴다.

$ mkdir foo
cd foo

하지만 이 mkdir와 cd 작업을 명령어 하나로 한꺼번에 수행해주는 방법이 있는데, ~/.bashrc 파일에 다음과 같은 함수를 저장한 후 사용할 수 있다.

function mkcd {
  if [ ! -n "$1" ]; then
    echo "Enter a directory name"
  elif [ -d $1 ]; then
    echo "\`$1' already exists"
  else
    mkdir $1 && cd $1
  fi
}

그러면, 터미널에서 다음과 같은 명령어 하나로 두 작업을 동시에 처리해준다.

$ mkcd foo

덤으로, cd 명령을 좀 더 유연하게 사용할 수 있는 것으로 다음과 같은 fuzzy cd 명령어를 등록해 놓으면, 이동하고자 하는 디렉터리의 이름 중 일부분만을 입력해도 자동으로 인식해서 해당 디렉터리로 이동시켜주므로 타이핑의 수고를 아주 약간 더 줄일 수 있다.

function cf {
  shopt -q nocasematch || resetcase=1
  shopt -s nocasematch
  for i in *; do [ -d "$i" ] && [[ "$i" == *"$1"* ]] && cd "$i" && break; done
  [ $resetcase ] && shopt -u nocasematch
}

가령, CSS3 애니메이션 효과를 적용할 때 미지원 브라우저한테는 대신에 JavaScript를 써서 애니메이션 효과를 대체하려고 할 때 유용한 gist로 jQuery plugin 형태로 다음과 같은 것이 있다.

$.support.cssProperty = (function() {
  function cssProperty(prp) {
    var b = document.body || document.documentElement,
    s = b.style;
 
    // No css support detected 
    if(typeof s == 'undefined') { return false; }
 
    // Tests for standard prop 
    if(typeof s[p] == 'string') { return rp ? p : true; }
 
    // Tests for vendor specific prop 
    v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms', 'Icab'],
    p = p.charAt(0).toUpperCase() + p.substr(1);
    for(var i=0; i<v.length; i++) {
      if(typeof s[v[i] + p] == 'string') { return rp ? (v[i] + p) : true; }
    }
  }
 
  return cssProperty;
})();

출처 – Extends the jQuery.support object to CSS Properties

처음부터 무조건 JavaScript를 써서 애니메이션 효과를 주지 않는 이유는, 당연 CSS3 애니메이션 효과를 지원하는 브라우저에선 더 매끄러울 테니까 그렇다.
사용 예: CSS3 Dropdown Menu – CodePen

얼마 전 무료로 공개된 Tuts+ Premium 코스인 30 Days to Learn jQuery 영상에서 따온 요령으로, Python의 내장된 간단한 웹 서버를 현 작업 디렉터리에서 실행시키는 명령인데 다음과 같이 쓰일 수 있다.

터미얼을 열고,

cd /some/test/directory
open http://localhost:8000 && python -m SimpleHTTPServer

편한 것이 굳이 일반 웹 서버를 실행시킬 필요 없이, 예를 들어 ajax call 실험용으로 간단한 테스트만 할 때 손쉽게 사용할 수 있다. PHP와 Python 그리고 Ruby의 한 줄 내장 웹 서버 실행(이)란 제목의 글 마저 읽기 →