최선을 다하겠습니다!

최선을 다해서 뭘 할건데? 어떻게 할건데?
다른 직업도 그럴 수 있겠지만 개발자인 나로서는 ‘최선을 다한다’는 말이 그닥 와닿지 않는다.

개발자가 최선을 다한다는 것은 뭘 어떻게 하겠다는 것일까? 열심히 검색하기? 열심히 생각하기? 열심히 야근하기? 뭔가를 열심히 한다고 해서 그렇게 효율이 좋을 것 같진 않다.

내가 생각하는 “개발자가 최선을 다한다는 것”은 적당한 선에서 만족하지 않는 것이다. 적당한 선에서 타협은 할 수 있겠지. 원래 생각하고 있던 건 아니고 오늘 “최선을 다하겠습니다”란 말에 대해 비판적인 생각을 하다가 그렇게 결정했다.

개발자들 중에는 원하는 아웃풋을 만들어 낸 시점이 바로 끝인 사람도 있고, 그 시점에서 한번 더 생각해보는 사람도 있다. “이 변수가 마음에 안들어” “이 루틴은 따로 뺄 수 있을 것 같아” “이 부분은 구조를 바꾸면 더 사용하기 쉽겠어” “이건 내가 사용자라면 불편할 것 같아 등. (여러 의미에서. 가독성이 될 수도 있고, 재활용성, 최적화, 아니면 그 언어의 철학에 맞게 코딩했는지 등) 당연한 말이지만 후자가 더 개발자에 어울리는 사람이다.

더 길게 생각해보면 다른 답이 나올 수도 있겠는데 여기서 끊어야겠다. 사실 얼마전에 Java로 작성된 코드를 구조변경 없이 Swift로 구현해달라고 해서 개발해준 적이 있었다. 그 때 너무 짜증나서 어쩔 수 없는 부분을 제외하고는 클래스명, 함수명까지 그대로 만들어주고 탈출한 적이 있었다. 물론 전~혀 Swifty하지 않게! 그런데 이런 환경에서도 짜증내지 않고 묵묵히 개발하면서 수정할 수 있는 부분이라도 수정하며 개발하는 것이 “최선을 다한다”는 말에 어울리는 것 같기도 하다. 아마 관리자들도 이런 개발자들을 더욱 좋아할 듯 하고.

하지만 나의 최선은 그렇게 참아내는 것이 아니라 즐기는 것이었으면 한다.

간단한 텍스트를 기반으로 Sequence Diagram 을 만들어낼 수 있다.

접속해보면 사용 방법을 바로 알 수 있음.


https://www.websequencediagrams.com/

예전에 한과장님 '에라토스테네스의 체'를 설명할 때는 수학에 '체'가 무슨 말인가? 했었는데, 이 Animated GIF를 보고 한번에 이해됐다.


1부터 120 사이에 있는 소수를 구하는 방식인데, 소수인지 판별하는 부분이 아니라 이미 소수로 판정이 된 수의 배수를 걸러내는 방식이다.



샘플에 나눔고딕을 적용했는데, 실제로 배포해야 하는 것이 귀찮...

그래서 방법을 찾다가 심플하게 구현하는 방법이 있길래 알려드립니다.


구글웹폰트를 활용하는 방법이고요, 상업적인 용도로도 무료라고 하네요.


사용방법은 매우 간단합니다.

구글에서 작성해둔 css파일을 import 한 뒤에 폰트를 사용하면 끝입니다.


사용방법 : ex) css에서 p 태그에 폰트 설정하는 경우

@import url(http://fonts.googleapis.com/earlyaccess/nanumgothic.css);

@import url(http://fonts.googleapis.com/earlyaccess/nanumgothiccoding.css);


....

/* 나눔고딕 */

p { font-family:'Nanum Gothic'; }

...

/* 나눔고딕코딩 */

p { font-family:'Nanum Gothic Coding'; }


해당 CSS 링크로 가 보면 실제 코드를 볼 수 있습니다.

어쨌든 로딩시간이 있다는 웹폰트의 단점은 그대로.


구글웹폰트 : http://www.google.com/fonts/earlyaccess

위 링크에서 Nanum을 검색하면 사용방법과 지원하는 폰트를 확인할 수 있으니 참고하세요.


몇년전에 Doxygen 주석으로 PDF를 생성하려다 포기했었는데, 월요일에 도전했다가 우연찮게 성공했습니다. ^^;


현재 Doxygen 주석은 다 작성되어 있고, html API 문서를 생성할 수 있는 상태라고 생각하고 그 이후부터 설명하겠습니다.

모르면 이건 검색해보면 자료가 많아요 ^^;


일단 필요한 건 다음과 같습니다.

1. kotexlive2012-full-20130309.exe (http://faq.ktug.org/faq/KoTeXLive)

2. Ghostscript 9.07 for Windows (http://www.ghostscript.com/download/gsdnld.html)


그리고 GhostScript 명령어를 콘솔에서 찾을 수 있도록 환경변수의 Path에 등록해줍니다.

- C:\Program Files\gs\gs9.07\bin


Doxywizard를 실행하여 Wizard 탭의 Output에서 LaTex를 체크합니다. 그 아래 세부 옵션은 취향대로 선택하세요.

 - 사용하기에는 링크 기능이 있는 첫번째가 편하지만 링크때문에 컴퓨터로 보면 좀 지저분합니다. 편하기로 따지자면 html이 훨씬 좋으니 전 2번째를 추천합니다.


사용이 더 편리하고 이쁜 HTML을 놔두고 굳이 PDF를 만드는 이유는 외부 배포를 위해서입니다. 그런데 수정해야 할 점이나 버그 목록, 이런 것들을 꼭 추가해야 할 필요는 없겠죠.

Expert 탭의 Build에서 다음 4가지의 체크를 해제합니다.

GENERATE_DEPRECATEDLIST 같은 경우는 필요하다고 생각하지만 번역이 마음에 안 들어서 제외했습니다.


제가 해결한 부분이 바로 이 옵션인데요, 항상 make 할 때 오류가 발생했었는데 다음의 옵션을 설정한 후 오류가 발생하지 않게 되었습니다.

뭐... LaTex에 batchmode 옵션을 추가해준다는 것 같네요. 설명에 if errors occur 보고 혹시? 하는 마음에 체크 해봤는데 되더라구요 ^^;


그 다음 Doxygen을 실행하면 출력 디렉토리에 latex가 생기는데요, 여기서 refman.tex 파일을 텍스트 편집기로 열어서 다음 부분을 수정합니다.

 - \usepackage{hfont} => \usepackage{kotex}

수정이 끝났으면 저장하고, make.bat 파일을 실행하면 refman.pdf 파일이 생성됩니다.


제 개인적인 생각으로는 html이 훨~씬 더 좋으네요.

가끔 무조건 PDF 형식으로 만들어달라고 요구하는 업체가 있어서... 이럴땐 유용할 거 같습니다.


경고 : 레지스트리 조작에는 백업이 필수입니다! 다음 사례를 참고

 1. 오늘 TabProcGrowth를 삭제할 경우 IE가 시작과 동시에 죽는 현상이 발견되었다.

 2. SysInternals의 ProcMon.exe 로 TabProcGrowth 레지스트리를 확인해보니 IE가 다음 2곳의 레지스트리에도 접근하는 것을 확인하였다.

  2.1. HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main

  2.2. HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main

 3. 위의 레지스트리도 삭제한 후에 정상동작을 확인했다.

 4. 위의 레지스트리 값이 있으면 삭제하도록 수정된 레지스트리 파일과, IE가 안 뜰 경우를 대비해 TabProcGrowth를 0으로 설정하는 레지스트리를 추가했다.


요즘 기술지원을 하다보니, ActiveX가 정상동작하지 않는다는 연락을 많이 받는다.

계속 설치해도 또 설치하라고 뜨는 현상이 대부분.

원인이야 여러가지 있겠지만, 결과적으로 IE가 64비트로 실행되기 때문이다.


Internet Explorer 9

이 경우는 먼저 IE 바로가기의 경로를 먼저 확인해봐야 한다.

IE 바로가기의 속성에서 "대상"이 "C:\Program Files\Internet Explorer\iexplore.exe" 로 되어 있으면 "C:\Program Files (x86)\Internet Explorer\iexplore.exe" 으로 수정하여 32비트 IE를 실행하도록 한다.

이것은 64비트 윈도우에서 IE9를 사용할 경우에만 적용된다.


Internet Explorer 9 & 10

또 한가지는 LCIE(Loosely Coupled Internet Explorer)가 제대로 동작하지 않아서 발생하는 경우다.

Windows 8 사용자라면 90% 이상은 이 문제일 것이라고 생각한다.


LCIE와 관련된 값은 여러가지가 있지만, 내가 지원했던 사용자는 다 TabProcGrowth 레지스트리 문제였다.


1. 다음 레지스트리에 TabProcGrowth가 있으면 삭제한다. (어려우면 첨부된 LCIE 활성화 레지스트리 파일 사용)

 - HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main

 - HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Main


2. 만약 IE가 실행되지 않을 경우, 다음의 위치도 확인하여 TabProcGrowth가 있으면 삭제한다. (2013년 06월 03일 추가)

 - HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main

 - HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\Main


3. 그래도 안되면 포기하고 LCIE 비활성화 레지스트리 파일을 사용하여 TabProcGrowth를 설정한다. (원복은 아니지만 비슷한 개념)


LCIE 활성화 레지스트리

RemoveTabProcGrowth.reg


LCIE 비활성화 레지스트리 (LCIE 활성화 후 IE가 동작하지 않으면 원복을 위해 사용)

ResetTabProcGrowth.reg


안랩에서 배포하는 프로그램- 추천

안랩에서도 IE 64비트 실행을 방지하는 프로그램을 내놨네요. 삼성카드에서 배포하는 것을 보고 가져왔습니다.

아무리 수정해도 악성 툴바들이 매번 원복시키는 경우가 골치 아팠는데, 안랩에서 배포하는 것이니 이런 것에 대한 처리가 잘 되어 있겠죠?

IE가 64비트로 실행되는 경우 정리 (참고한 사이트)



기본 내용 참고 사이트

 - 2가지 모드의 Internet Explorer 10 과 ActiveX

 - 64비트 윈도우에서 Internet Explorer 10 이 항상 64비트로만 실행된다면?

 - Internet Explorer 10 32비트 실행

 - IE10 자동 업데이트와 64비트 ActiveX 호환성 문제



이 포스트는 FireBreath의 동영상 튜토리얼을 정리한 내용입니다.

아래 사전 설정의 프로그램들이 이미 설치되어 있어야 합니다.


사전 설정

1. git 설치

2. Python 설치

3. cmake 설치


튜토리얼 실행

1. FireBreath 가져오기

c:\code\tutorial>git clone https://github.com/firebreath/FireBreath.git --recursive -b firebreath-1.7


2. fbgen.py를 실행하여 FireBreath 플러그인 프로젝트 (TutorialTestPlugin) 생성

c:\code\tutorial>python.exe fbgen.py

Plugin Name []: Tutorial Test Plugin

Plugin Identifier [TutorialTestPlugin]:

Plugin Prefix [TTP]:

Plugin MIME type [application/x-tutorialtestplugin]:

Plugin Description []: Test plugin for the tutorial

Plugin has no UI [false]:

Company Name []: FireBreath Team Unicorporated

Company Identifier [FireBreathTeamUnicorporated]:

Company Domain [firebreathteamunicorporated.com]:


3. c:\code\tutorial\FireBreath\projects 에 생성된 TutorialTestPlugin 디렉토리를 C:\code\tutorial 로 이동


4. c:\code\tutorial\TutorialTestPlugin> 에서 다음을 실행

c:\code\tutorial\TutorialTestPlugin>git init .

c:\code\tutorial\TutorialTestPlugin>git add .

c:\code\tutorial\TutorialTestPlugin>git commit -m "Initial commit with just the project"

c:\code\tutorial\TutorialTestPlugin>git submodule add https://github.com/firebreath/FireBreath.git firebreath

c:\code\tutorial\TutorialTestPlugin>git submodule update --init --recursive


5. 사용할 VS 버전에 맞는 명령어 실행하여 VS 프로젝트 생성 (여기서는 VS 2010을 사용함)

c:\code\tutorial\TutorialTestPlugin>firebreath\prep2010.cmd . build


6. 생성된 VS 프로젝트 (build\FireBreath.sln) 실행

c:\code\tutorial\TutorialTestPlugin>start build\FireBreath.sln


7. TutorialTestPlugin 프로젝트 빌드


8. c:\code\tutorial\TutorialTestPlugin\build\bin\TutorialTestPlugin\Debug의 npTutorialTestPlugin.dll 을 COM에 등록 

c:\code\tutorial\TutorialTestPlugin>cd build\bin\TutorialTestPlugin\Debug

c:\code\tutorial\TutorialTestPlugin\build\bin\TutorialTestPlugin\Debug>regsvr32 npTutorialTestPlugin.dll


9. C:\code\tutorial\TutorialTestPlugin\build\projects\TutorialTestPlugin\gen\FBControl.htm 파일을 WebBrowser로 확인


10. 웹브라우저의 개발자 도구의 콘솔에서 다음 명령어들을 입력하여 확인 가능

> plugin().valid

  true

> plugin().echo("test text")

  "test text"

> plugin().echo([1,2,3,4,5])

  [1,2,3,4,5]

>


끝!

심볼파일에 소스 인덱싱을 하기 위해서 해야할 건 다 했는데 인덱싱이 안된다. (프로그램 설치 및 Path 지정, 파일 수정 등)


"zero source files found" 에러만 계속 뱉어내서 3일을 헤매다가 펄은 모르지만 그냥 분석해보기로 결정.


svnindex.cmd 는 svn.pm 을 호출하므로 이 파일을 열어봤다.


일반적으로 한글 지원을 위해 수정해야 하는 것으로 알고 있는 부분은 Path: 와 Revision: 이다.

m/^Path:[\s\t]*(.*)$/i

m/^Revision:[\s\t]*(\d*)$/i

이 부분을 다음과 같이 수정해야 한다.

m/^Path|^경로:[\s\t]*(.*)$/i

m/^Revision|^리비전:[\s\t]*(\d*)$/i

[m/정규표현식/i]는 다른 언어에서도 사용하는 방식의 정규표현식이라 한눈에 알아봤다.

'^'는 라인의 시작, '$'는 라인의 끝과 매치된다. (http://www.rubular.com/ 에서 아래쪽에 나오는 원문으로 확인 가능)

예전에는 [|경로, |리비전] 처럼 '^'를 추가하지 않아도 됐는데, 어느 순간부터 안 되어서 내가 수정했다.


그럼 이 정규표현식을 사용할 원문은 어디서 가져올까?

분명 svn.exe 명령어를 사용한 결과일 것이다.

$$self{'SVNCMD'} = "svn.exe";

...

open($hProcess, "$$self{'SVNCMD'} info -R \"$SourceRoot\"|")

이걸로 해당 명령어는 [svn.exe info -R "소스루트경로"] 임을 알 수 있다.

(사실 "|"가 뭔지 몰라서 넣어봤지만 명령 구문이 올바르지 않다고 한다)


커맨드창에서 해당 명령어를 입력해보니 정보가 쭉 나오는데, 다 볼 필요는 없을 것 같아서 Ctrl+C로 중단했다.

파일 하나의 출력을 보니 다음과 같았다.

경로: relative_path\source_file.c

이름: source_file.c

작업 사본의 루트 경로: C:\absolute_path

URL: http://source_server_url/svn/XXX/trunk/relative_path\source_file.c

저장소 루트: http://source_server_url/svn/XXX

저장소 UUID: 00000000-0000-0000-0000-000000000000

리비전: 863

노드 종류: 파일

스케쥴: 일반

마지막 수정 작업자: ldevil63

마지막 수정 리비전: 852

마지막 수정 일자: 2012-12-06 17:23:34 +0900 (2012-12-06, 목)

마지막 내용 수정 일자: 2013-01-03 10:51:37 +0900 (2013-01-03, 목)

체크섬: 28ea7d26eac7015034cc15075cd11faa630f5646


여기서 출력 결과가 한글이기 때문에 위에서 처럼 정규표현식 구문을 수정했던 것이다.

svn.exe가 영문이라면 경로:Path:로, 리비전:Revision:으로 출력된다.


pdb 파일을 텍스트 에디터로 열어서 확인해보면 소스 경로는 절대경로로 입력되어 있다. (srctool.exe를 사용해도 확인 가능)

하지만 여기서 찾은 경로 값은 상대경로이다.


예전에 잘 되었을 때의 pdb 파일을 열어보니 다음과 같은 식으로 입력되어 있다.

C:\absolute_path\relative_path\source_file.c*http://source_server_url/*svn/XXX/trunk/relative_path\source_file.c*863

이것도 절대경로...


그런데 svn.pm에서 위 부분을 삽입하는 부분은 조금 이상하다.

@{$$self{'FILE_LOOKUP_TABLE'}{lc $LocalFile}} = ( { }, "$LocalFile*$FileRepository*$FileRelative*$FileRevision");

앞 부분은 잘 모르겠고, 뒤의 변수들 값을 찾아보니, 다른 건 다 일치하는데 $LocalFile은 상대경로였다.

if ( $curline =~ m/^Path|^경로:[\s\t]*(.*)$/i ) {

    $LocalFile = lc $1;

    ...

}

참고로 $1은 정규표현식에서 매칭된 문자열의 첫번째 괄호 부분이다.

따라서 제일 처음의 "relative_path\source_file.c" 이다.


절대경로로 변경해서 해보려고 svn.pm 파일을 수정하였다. (일부만 발췌)

my $LocalFile;

my $LocalFilePathRelative;

my $LocalFilePathAbsolute;

...

if ( $curline =~ m/^(Path|경로):[\s\t]*(.*)$/i ) {

    $LocalFilePathRelative = lc $2;

    ...

    # Parse Working Copy Path

    if ( $curline =~ m/^(Working Copy Root Path|작업 사본의 루트 경로):[\s\t]*(.*)$/i ) {

        $LocalFilePathAbsolute = lc $2;

        $LocalFile = $LocalFilePathAbsolute . "\\" . $LocalFilePathRelative;

    }

}


절대경로로 변경하고 나니 잘된다 ㅋㅋ

=========================================================================================================================================

하다보니 또 안되는 경우가 생겼다.

svn info 명령을 실행하는 위치가 작업 사본의 루트이면 경로: 의 값이 상대경로로 나오고, 그 외에는 다음처럼 절대경로로 나온다.

경로: C:\absolute_path\relative_path\source_file.c

이름: source_file.c

작업 사본의 루트 경로: C:\absolute_path

URL: http://source_server_url/svn/XXX/trunk/relative_path\source_file.c

저장소 루트: http://source_server_url/svn/XXX

저장소 UUID: 00000000-0000-0000-0000-000000000000

리비전: 863

노드 종류: 파일

스케쥴: 일반

마지막 수정 작업자: ldevil63

마지막 수정 리비전: 852

마지막 수정 일자: 2012-12-06 17:23:34 +0900 (2012-12-06, 목)

마지막 내용 수정 일자: 2013-01-03 10:51:37 +0900 (2013-01-03, 목)

체크섬: 28ea7d26eac7015034cc15075cd11faa630f5646


절대경로의 루트부분이 중복되어 입력되어 다음과 같은 이상한 경로가 입력된다.

C:\absolute_pathC:\absolute_path\relative_path\source_file.c

따라서 소스 위치가 아닌 곳에서 소스 인덱싱을 하는 경우에는 정상동작을 하지 않을 것이다.


아래와 같이 작업 사본의 루트 경로 위치에 따라 입력하도록 svn.pm을 다시 수정하였다.

    # Parse Working Copy Path

    if ( $curline =~ m/^(Working Copy Root Path|작업 사본의 루트 경로):[\s\t]*(.*)$/i ) {

        $LocalFilePathAbsolute = lc $2;

        if ( index ($LocalFilePathRelative, $LocalFilePathAbsolute) != -1)  {

            $LocalFile = $LocalFilePathRelative;

        } else {

            $LocalFile = $LocalFilePathAbsolute . "\\" . $LocalFilePathRelative;

        }

    }

첨부된 파일은 다시 수정된 svn.pm 파일이다.

svn.pm


이상 기록 끝.


=========================================================================================================================================

다른 회사에서 해봤더니 또 안되는 경우가 발생!

삽질 엄청 하다가 알아낸 결론은... GIt 때문이었다.

망할 Git 의 bin 디렉토리에 perl.exe가 있어서 발생한 오류 ㅠ_ㅠ 

Git 을 설치했다면 Path에 ActivePerl 의 경로가 앞에 오도록 설정해주면 된다.



calc : 계산기
charmap : 문자표
cleanmgr : 디스크 정리
clipbrd : 클립보드에 복사된 내용 표시
cmd : 명령 프롬프트
sysedit : 시스템 구성 유틸리티의 실행 목록을 편집
desk.cpl : 디스플레이
dxdiag : 다이렉트 x 및 시스템 정보
eudcedit : 사용자정의 문자 편집기
explorer : 윈도우 탐색기
maqnify : 돋보기
mobsync : 동기화
mmc.exe : 콘솔 루터
msconfig : 시스템 구성요소 유틸리티
msinfo32 : 시스템 정보
mspaint : 그림판
notepad : 메모장
osk : 화상키보드
recent : 최근 사용 문서
regedit : 레지스트리 편집기
system.ini : 시스템 구성 편집기
taskmgr.exe : 작업관리자
telephon.cpl : 전화 및 모뎀 옵션
timedate.cpl : 날짜 및 시간
winver : 윈도우 버젼 확인
wmplayer : 윈도우 미디어 플레이어
wordpad : 워드패드

제어판 관련
access.cpl : 내게 필요한 옵션
appwiz.cpl : 프로그램 추가/제거
control : 제어판
control admintools : 관리 도구
control userpasswords : 사용자 계정
control userpasswords2 : 사용자 계정(고급)
hdwwiz.cpl : 새 하드웨어 추가
intl.cpl : 국가 및 언어 옵션
joy.cpl : 게임 컨트롤러
main.cpl : 마우스
mmsys.cpl : 사운드 및 오디오 장치
ntbackup : 백업 및 복원 마법사
powercfg.cpl : 전원 옵션
sysdm.cpl : 시스템 등록정보
wscui.cpl : 보안센터

네트워크 관련
inetcpl.cpl : 인터넷 옵션
mstsc : 원격 데스크톱 연결
netstat : 열린 포트와 TCP / IP 프로토콜 정보
ncpa.cpl : 네트워크 연결
ping 주소 : 핑 테스트
telnet open 주소 : 텔넷 접속
ipconfig : ip주소 확인

======================
언어 언어(국가) ANSI OEM
======================
Afrikaans   Afrikaans      1252  850
Albanian   Albanian      1250  852
Arabic    Arabic (Algeria)    1256  720
Arabic    Arabic (Bahrain)    1256  720
Arabic    Arabic (Egypt)     1256  720
Arabic    Arabic (Iraq)     1256  720
Arabic    Arabic (Jordan)     1256  720
Arabic    Arabic (Kuwait)     1256  720
Arabic    Arabic (Lebanon)    1256  720
Arabic    Arabic (Libya)     1256  720
Arabic    Arabic (Morocco)    1256  720
Arabic    Arabic (Oman)     1256  720
Arabic    Arabic (Qatar)     1256  720
Arabic    Arabic (Saudi Arabia)   1256  720
Arabic    Arabic (Syria)     1256  720
Arabic    Arabic (Tunisia)    1256  720
Arabic    Arabic (U.A.E.)     1256  720
Arabic    Arabic (Yemen)     1256  720
Armenian   Armenian      0   1
Azeri (Cyrillic) Azeri (Cyrillic)    1251  866
Azeri (Latin)  Azeri (Latin)     1254  857
Basque    Basque       1252  850
Belarusian   Belarusian      1251  866
Bulgarian   Bulgarian      1251  866
Catalan    Catalan       1252  850
Chinese    Chinese (Hong Kong S.A.R.)  950   950
Chinese    Chinese (Macau S.A.R.)   950   950
Chinese    Chinese (PRC)     936   936
Chinese    Chinese (Singapore)    936   936
Chinese    Chinese (Taiwan)    950   950
Croatian   Croatian      1250  852
Czech    Czech       1250  852
Danish    Danish       1252  850
Divehi    Divehi       0   1
Dutch    Dutch (Belgium)     1252  850
Dutch    Dutch (Netherlands)    1252  850
English    English (Australia)    1252  850
English    English (Belize)    1252  850
English    English (Canada)    1252  850
English    English (Caribbean)    1252  850
English    English (Ireland)    1252  850
English    English (Jamaica)    1252  850
English    English (New Zealand)   1252  850
English    English (Philippines)   1252  437
English    English (South Africa)   1252  437
English    English (Trinidad)    1252  850
English    English (United Kingdom)  1252  850
English    English (United States)   1252  437
English    English (Zimbabwe)    1252  437
Estonian   Estonian      1257  775
Faroese    Faroese       1252  850
Farsi    Farsi       1256  720
Finnish    Finnish       1252  850
French    French (Belgium)    1252  850
French    French (Canada)     1252  850
French    French (France)     1252  850
French    French (Luxembourg)    1252  850
French    French (Monaco)     1252  850
French    French (Switzerland)   1252  850
FYRO    Macedonian FYRO Macedonian  1251  866
Galician   Galician      1252  850
Georgian   Georgian      0   1
German    German (Austria)    1252  850
German    German (Germany)    1252  850
German    German (Liechtenstein)   1252  850
German    German (Luxembourg)    1252  850
German    German (Switzerland)   1252  850
Greek    Greek       1253  737
Gujarati   Gujarati      0   1
Hebrew    Hebrew       1255  862
Hindi    Hindi       0   1
Hungarian   Hungarian      1250  852
Icelandic   Icelandic      1252  850
Indonesian   Indonesian      1252  850
Italian    Italian (Italy)     1252  850
Italian    Italian (Switzerland)   1252  850
Japanese   Japanese      932   932
Kannada    Kannada       0   1
Kazakh    Kazakh       1251  866
Konkani    Konkani       0   1
Korean    Korean       949   949
Kyrgyz    Kyrgyz (Cyrillic)    1251  866
Latvian    Latvian       1257  775
Lithuanian   Lithuanian      1257  775
Malay    Malay (Brunei Darussalam)  1252  850
Malay    Malay (Malaysia)    1252  850
Marathi    Marathi       0   1
Mongolian   Mongolian (Cyrillic)   1251  866
Norwegian(Bokmal) Norwegian (Bokmal)    1252  850
Norwegian(Nynorsk) Norwegian (Nynorsk)    1252  850
Polish    Polish       1250  852
Portuguese   Portuguese (Brazil)    1252  850
Portuguese   Portuguese (Portugal)   1252  850
Punjabi    Punjabi       0   1
Romanian   Romanian      1250  852
Russian    Russian       1251  866
Sanskrit   Sanskrit      0   1
Serbian (Cyrillic) Serbian (Cyrillic)    1251  855
Serbian (Latin)  Serbian (Latin)     1250  852
Slovak    Slovak       1250  852
Slovenian   Slovenian      1250  852
Spanish    Spanish (Argentina)    1252  850
Spanish    Spanish (Bolivia)    1252  850
Spanish    Spanish (Chile)     1252  850
Spanish    Spanish (Colombia)    1252  850
Spanish    Spanish (Costa Rica)   1252  850
Spanish    Spanish (Dominican Republic) 1252  850
Spanish    Spanish (Ecuador)    1252  850
Spanish    Spanish (El Salvador)   1252  850
Spanish    Spanish (Guatemala)    1252  850
Spanish    Spanish (Honduras)    1252  850
Spanish    Spanish (International Sort) 1252  850
Spanish    Spanish (Mexico)    1252  850
Spanish    Spanish (Nicaragua)    1252  850
Spanish    Spanish (Panama)    1252  850
Spanish    Spanish (Paraguay)    1252  850
Spanish    Spanish (Peru)     1252  850
Spanish    Spanish (Puerto Rico)   1252  850
Spanish    Spanish (Traditional Sort)  1252  850
Spanish    Spanish (Uruguay)    1252  850
Spanish    Spanish (Venezuela)    1252  850
Swahili    Swahili       1252  437
Swedish    Swedish       1252  850
Swedish    Swedish (Finland)    1252  850
Syriac    Syriac       0   1
Tamil    Tamil       0   1
Tatar    Tatar       1251  866
Telugu    Telugu       0   1
Thai    Thai       874   874
Turkish    Turkish       1254  857
Ukrainian   Ukrainian      1251  866
Urdu    Urdu       1256  720
Uzbek (Cyrillic) Uzbek (Cyrillic)    1251  866
Uzbek (Latin)  Uzbek (Latin)     1254  857
Vietnamese   Vietnamese      1258  1258

+ Recent posts