좋아하던 고전 게임 Tyrian의 첫 스테이지 배경음악 Remix 버전입니다.
참고로 이 게임은 gog.com 에서 무료로 배포중입니다.
Linux 하위 디렉토리들 / 파일들 일괄 퍼미션 수정
Linux 환경에서 일하다보면 특정 디렉토리 이하의 모든 디렉토리에 특정 권한을 줘야하는 경우가 자주 생깁니다 (e.g. 웹 계정을 관리할 때). 이런 경우 find 커맨드를 사용하면 간단히 해결할 수 있습니다.
1 |
find <directory path> -type d -exec chmod 777 {} ; |
파라미터들을 하나씩 살펴보면,
- <directory path> : 검색하려는 디렉토리 경로. 현재 디렉토리에서 검색하려면 . 으로.
- -type d : 지정된 디렉토리 이하 (해당 디렉토리도 포함) 모든 디렉토리만 검색. 파일만 검색하려면 -type f.
- -exec chmod 777 {}; : 검색된 각 디렉토리(혹은 파일)에 대해 실행할 명령어. {} 부분이 검색된 디렉토리(혹은 파일)로 대체되어 실행됩니다. chmod 777 은 예시니까 원하는 명령어로 바꿔주면 됩니다.
Mac / Linux 에서 잘 동작합니다. 실행하는 명령에 관리자 권한이 필요한 경우에는 제일 앞에 sudo 붙여주면 됩니다.
iOS 5.0 업데이트시 앱 유지하기
정보 출처: https://discussions.apple.com/thread/2559330?start=0&tstart=0
평소에 iTunes 를 통해 앱 동기화를 하고 있지 않았다면, iPhone 에 iOS 5.0 업데이트를 시도하면 업데이트한 뒤 앱이 다 날아갈거라는 경고가 나옵니다. 실제로 업데이트 후에 다 날아가서 수동으로 복구하셨다는 분도 좀 보이구요. iTunes 에서 “응용 프로그램 동기화” 를 체크해서 동기화를 켜주고 업데이트하면 되지만, 이렇게 하면 iPhone 에 깔끔하게 정리되어 있던 아이콘 위치, 폴더 등이 다 뒤죽박죽이 된다는 문제가 있지요. 이 문제를 해결하려면 다음과 같이 해보세요. 한국어 iTunes 기반으로 설명합니다.
1) iTunes 켜고 iPhone 연결한 상태에서 왼쪽에 장비 탭에서 iPhone 기기를 마우스 우클릭 한 뒤 “구입 항목 전송”을 눌러서 iPhone 에는 있지만 iTunes 쪽에 없는 앱들을 모두 전송합니다.
2) iTunes 왼쪽 탭에서 iPhone 을 선택한 뒤, 응용 프로그램 탭으로 갑니다. “응용 프로그램 동기화” 를 체크합니다.
3) 방금 체크한 박스 바로 아래에 앱 목록이 활성화되었을 것입니다. 원하는 앱 모두 다 (아마도 전부 다) 체크해 줍니다. 오른쪽에 보이는 미리보기 화면은 순서가 이미 뒤죽박죽 된 상태일 것입니다.
4) 이제 해야할 일은, 동기화를 시킨 뒤 곧바로 취소시키는 것입니다. iTunes 오른쪽 아래에서 “적용” 버튼을 눌러준 뒤에, 동기화가 시작되면 iTunes 위쪽 가운데 바 오른쪽에 있는 까만 X 버튼을 바로 눌러줍니다.
5) 동기화가 취소될 때까지 기다립니다. 이제 3) 번에서 체크했던 목록은 그대로 유지된 채로 오른쪽 미리보기 화면에도 원래 iPhone 과 동일한 모습의 레이아웃이 나타납니다.
6) 이제 다시 iTunes 오른쪽 아래 “적용” 버튼을 눌러서 실제로 동기화를 해주세요. 원래 다 iPhone 에 있는 앱들이니까 동기화는 얼마 안걸립니다.
7) 이제 iOS 5.0 업데이트를 실행합니다.
저는 이 방법으로 앱 제대로 유지한 채로 업데이트 성공했는데 다른 분들은 어떨지 모르겠네요. 꼭 업데이트할 목적이 아니더라도, 앱 동기화가 꺼져 있는 상태에서 정보 손실 없이 동기화를 켜고 싶을 때 2) ~ 6) 단계만 밟아주면 됩니다.
Google Code에 TortoiseHg로 Push할 때 암호 저장
한줄요약: Turn on “mercurial_keyring” extension.
Google Code project hosting 서비스를 사용중인데, 모두 Mercurial 기반으로 사용하고 있습니다. TortoiseHg를 Mercurial 클라이언트로 죽 사용해오고 있고 Google Code에도 그대로 사용할 수 있다는 점이 정말 편리하고 좋지만, local change를 서버로 push할 때마다 매번 암호를 물어본다는 것이 좀 불편했습니다. 이 암호는 Google account 암호와는 달리, Google Code에서 자동생성해준 암호를 사용해야 되는데, 외우기도 정말 힘들어서 매번 사이트에 들어가서 암호를 복사해서 붙여넣곤 했습니다. Google Code 사이트의 FAQ에 보면 push 서버 주소에 다음과 같이 암호를 포함해주면 된다고 나와있습니다.
1 |
http://user:password@mydomain.org |
그런데 plaintext로 암호를 저렇게 저장해 두는 것은 아무리 생각해도 별로 좋은 방법은 아니어서 좀 꺼림찍 했습니다. 검색을 좀 해보니 의외로 해결방법이 간단했습니다. mercurial_keyring 이라는 extension을 켜주면, repository별로 암호를 처음 한 번만 입력하면 암호화된 DB에 저장해두고 계속 사용한다는 것입니다.
TortoiseHg에서 이것을 켜는 방법은 아래와 같습니다.
C# ?? (null-coalescing) Operator
http://msdn.microsoft.com/en-us/library/ms173224.aspx
이걸 이용하면, Singleton 패턴 구현할 때의 GetInstance() 메서드를 다음과 같이 바꿀 수 있습니다.
1 2 3 4 5 6 7 8 9 |
public static MyClass GetInstance() { if (_instance == null) { _instance = new MyClass(); } return _instance; } |
1 2 3 4 |
public static MyClass GetInstance() { return _instance ?? (_instance = new MyClass()); } |