컴퓨터

barbushin/php-imap으로 웹메일을 구현했는데 한글이 깨집니다.

PHP를 이용하여 웹메일을 구현하려고 barbhshin/php-imap이란 클래스를 사용해봤습니다. 첨부파일까지 따로 저장하고 꽤 간편하게 구현할 수 있었는데, 몇몇 이메일 중에 ks_c_5601-1987로 인코딩된 것은 한글이 깨지는 것이었습니다.

다 잘됐다면 한방에 날로 먹을 수 있었는데, 아쉽네

구글느님에게 방법을 찾아보니, 아래와 같이 하여 해결하였습니다.

PHP-IMAP 2.2.5 을 쓰신다면 (<=PHP 5.3)

Mailbox.php의 convertStringEncoding function 중에 779줄에

if(!$string || $fromEncoding == $toEncoding) {
	return $string;
}

밑에 아래 1줄 추가

$fromEncoding = !isset($fromEncoding) || $fromEncoding == 'ks_c_5601-1987' ? 'CP949' : $fromEncoding;	

PHP-IMAP 3.0.4 나 그 이후 버전을 쓰신다면 (>=PHP5.5)

Mailbox.php의 convertStringEncoding function 중에 746줄에

if(!$string || $fromEncoding == $toEncoding) {
	return $string;
}

밑에 아래 1줄 추가

$fromEncoding = !isset($fromEncoding) || $fromEncoding == 'ks_c_5601-1987' ? 'CP949' : $fromEncoding;	

깨졌던 한글이 쫙하고 제대로 나올 겁니다. 그럼 이만

수영

수영 평영 팔 동작 팁 - 가속이 붙는 것이 느껴져요

두 달 후면 수영을 배운 지 어느덧 4년이 되어 가는데, 1년 전만 해도 평영이 제일 쉬웠는데, 요새는 자세 교정을 받으면서 평영이 제일 어렵게 되었습니다. 감이 올 듯 말 듯하면서, 역시 뭔가 안 풀리고, 배워야 할 필요가 있을 때 동영상의 도움이 큰 것 같아서, 이번에도 한 번 정리해보고자 합니다.

평영 손동작이 스컬링을 닮았다?

1년 전만 해도 그냥 허우적대기만 해서 쉬웠던 평영 팔 동작이었는데, 요즘은 자세교정을 받으면서 평영 손을 더 벌리고, 깊숙이 잡아 퍼 올려 빨리 뻗어야 한다는데, 말처럼 쉽게 되지 않더군요. 팔 동작을 이해하는 데 도움이 되는 영상을 또 봐야 할 시간이군요.

Swimming - Breaststroke - Wide Pull

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

허리까지 상승 ㄷㄷ 물잡기가 얼마나 강했으면 저럴까?

제가 볼 때마다 감탄하는 평영 시범입니다. 엄청난 상승, 저런 상승이면 팔을 뻗어 슬라이딩할 때에 가속이 엄청날 거라는 생각이 듭니다. 팔 동작이 좋으면 돌고래마냥 저렇게 떠오를 수 있다는 좋은 예 인 것 같습니다.

Jessica Hardy | Breaststroke Stroke - Swim Technique

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

평영에서 발동작이 안 중요하다는 것이 아니지만, 집중 연습을 하다가 무릎과 고관절에 무리가 온 적이 가끔 있어서, 중년의 나이에는 평영을 연마(?)하는데 팔 동작에 집중하는 것도 좋은 것 같습니다. 좋은 팔 동작으로 쭉쭉 나가는 그 날까지, 잘 안되지만 연습하다 보면 되리라 믿습니다.

남은 이야기 - 따로 시간 내기 쉽지 않은 플립 턴 연습, 킥판 발차기할 때 같이 하자

지난번에 플립 턴에 대해서 다뤄봤는데, 지면을 할애해서 플립 턴의 생활화에 도움이 되었던 동영상을 한 편 더 소개해드릴까 합니다.

제가 요즘 늘 하는 연습 방법입니다. 몸풀기 자유형 때에 하기에는 체력적인 부담이 크지만, 발차기 때에 하는 것은 거리조절도 쉽고, 체력과 호흡의 부담이 적습니다. 양쪽 면에서 계속하면 어지러우므로 한쪽 면만 꾸준히 한다면, 자유형 하다가 그쪽 면으로 향하면, 몸이 기억하여 그냥 플립 턴이 됩니다.주1

킥판잡고 턴하기

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

각주.
  1. 저 같은 경우 한 두달 정도 그렇게 하니깐, 몸풀기 자유형 때에도 그냥 습관처럼 턴해버리게 되었습니다. [Back]
컴퓨터

Composer가 왜 자주 등장하지?

PHP를 이용하여 Invoice 출력을 위한 PDF 변환 패키지를 찾던 중, 이 패키지 설치 과정에서 Composer가 필요하다는 것을 알게 되었습니다. Composer에 공부할 시간은 없고, 대신 다른 WORD 변환 패키지로 대신 찾던 중, 역시 거기도 Composer가 어김없이 등장하였습니다.

아, 요새는 Composer가 대세인가? 피해 갈 수 없겠군

이란 생각이 들어, 여기서 한번 배운 걸 정리해보았습니다.

PHP 의존성 관리 도구 Composer

Composer

컴포저는 PHP로 프로젝트를 개발할 때에 다양한 패키지나 라이브러리를 관리하기 편하게 해주는 도구입니다.

예를 들어 A 프로젝트는 1년 전에 작성하였고 B 프로젝트는 최근에 작성하였는데, 같은 패키지라도 A는 패키지 1.0판에서만 작동하고 B는 패키지 2.0판에서만 작동한다면, 패키지를 도저히 전역적으로 설치해서 관리하기 힘듭니다.

컴포저를 사용하기 전에는 user_lib 이라는 폴더에 여러 가지 패키지를 몰아넣고, 같은 패키지라도 판별로 넣어두고 사용했지만, 컴포저가 있다면 이제는 프로젝트의 composer.json에 미리 선언만 해두면 프로젝트 내의 하위 폴더 (ex.)vendor)에 자동으로 설치되고 관리되며, 다른 서버로 배포되거나 이동되더라도 이미 선언된 패키지의 버전만 자동으로 설치됩니다.

어떻게 사용하지?

4줄 요약

  • 서버에 Composer를 먼저 설치해 놓자
  • 개발하고 있는 프로젝트에, composer.json 파일을 만들어서 거기다가 사용할 여러 패키지를 선언해둔다.
  • 선언해 두면, Composer가 알아서 개발하고 있는 프로젝트 폴더에 vendor 란 하위 폴더가 만들면서, 선언해 둔 패키지들이 자동으로 내려받아 진다.
  • 개발하는 page에 require '/vendor/autoload.php'; 를 삽입한다.

Composer 설치하기

컴포저 홈페이지

사용환경 : PHP 5.3.2+ 이상

설치방법은 위의 컴포저 홈페이지에 나와 있지만, 간단히 설명해 드리면,

  • 윈도우인 경우 : Composer-Setup.exe 를 내려받아 실행
  • 리눅스인 경우는 putty.exe 등으로 터미널로 들어가서 :
    php -r "readfile('https://getcomposer.org/installer');" > composer-setup.php
    php -r "if (hash('SHA384', file_get_contents('composer-setup.php')) === 'fd26ce67e3b237fffd5e5544b45b0d92c41a4afe3e3f778e942e43ce6be197b9cdc7c251dcde6e2a52297ea269370680') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); }" 
    php composer-setup.php 
    php -r "unlink('composer-setup.php');"
    

    4줄을 실행하면 putty에서 4줄 명령어를 실행한 그 위치에 composer.phar 파일이 생성됩니다.

    mv composer.phar /usr/local/bin/composer

    이렇게 하면 설치가 완료.

composer.json 만들기

저 같은 경우 invoice 프로젝트를 만들고 있는데 /bill 폴더에서 작업하고 있습니다. putty로 접속하여 /home/www/board/bill 경로에서

composer require mikehaertl/phpwkhtmltopdf

이렇게 선언하면 /bill 폴더에 Vendor란 폴더가 생기면서 선언된 패키지가 자동으로 내려받아 지고, /bill 폴더에 composer.json 파일이 생기게 됩니다. composer.json을 열어보면

{
    "require": {
        "mikehaertl/phpwkhtmltopdf": "^2.1",
    }
}

이렇게 내용이 작성됩니다.

만약 다른 패키지를 또 선언한다면

composer require phpoffice/phpword

역시 /bill 폴더의 Vendor에 다른 패키지가 자동으로 내려받아 지고, composer.json에도 추가로 등록됩니다.

{
    "require": {
        "mikehaertl/phpwkhtmltopdf": "^2.1",
        "phpoffice/phpword": "^0.12.1"
    }
}

이렇게 추가됩니다.

개발하고 있는 프로젝트 파일에 autoload 선언하고 사용하면 끝

제 프로젝트 파일은 bill00.php인데, 상단에 autoload를 추가하면 됩니다.

require __DIR__ . '/vendor/autoload.php';

이후에는 추가한 패키지의 홈페이지에서 알려주는 설치방법대로 사용하면 됩니다.

설치한 패키지를 모두 지우고 싶다고요? 그냥 composer.json 파일과 vendor 폴더를 지워버리면 됩니다.

남은 이야기

우연히 PHP WkHtmlToPdf를 판올림하다가 Composer 없이는 설치할 방법이 없게 되어서 부득이 배우게 되었습니다. 마찬가지로 Phpword 또한 Composer 설치로 바뀌어서, 이제는 composer 추세가 된 듯합니다. 제 프로젝트는 아직 개발 중이지만, 앞으로 필요한 메일 구성이나 템플릿 관련 패키지도 뭐가 있는지 구글로 눈요기하면서 composer를 이용해 설치해볼 생각입니다.^^

컴퓨터

기계식 키보드 볼텍스 TYPE EF 사용기

최근에 우연히 기계식 키보드를 타건해보고 나서, 키감의 신세계를 맛보게 되었습니다. 지금까지 쓰던 것이 스카이디지탈 nKEYBOARD nKey-1이어서, 기계식 키보드도 스카이디지탈 쪽으로 눈팅을 했는데, 단순하고 필요한 기능만 있는 볼텍스 TYPE EF가 끌려서 구매하게 되었습니다.

Vortex Type EF Keyboard

기존에 쓰던 일반 nKey-1보다도 오히려 작고, 외형은 무광택인 데다가 자투리 공간도 없고, 단순 그 자체입니다. 묵직함이 있어서 예전처럼 툭툭 쳐서 본체를 움직이는 것은 불가능할 듯합니다. 자판은 LED를 켜지 않으면 일반 키보드보다 흐릿해 보여서 역시 LED를 켜야 선명하게 보이더군요.

Vortex Type EF Keyboard

키감

갈축으로 구매하였는데, 갈축의 느낌을 표현하면, 가볍고, 딸각하고 걸리는 느낌은 없지만 따닥거리는 느낌이 경쾌해 보입니다. 이보다 더 가볍다면 누르는 느낌이 없어서 안 좋을 것 같다는 생각이 듭니다. 아직 게임 등을 해보진 않고 타이핑만 해보았지만, 장시간 사용에 손가락 부담을 많이 덜어 줄 것으로 기대됩니다. 구입하면서 청축도 한번 타건해봤는데, 뜻밖에 소리가 크지 않고 청축도 괜찮은 것 같습니다.

윈7에서 한영전환 안 되는 문제

윈7에서 처음 설치하고 한영 키가 안 먹어서 약간 당황했지만, 다행히 제조사에서 제공하는 팁으로 잘 해결하였습니다.

내려받기 링크 : vortex 한영키 해결

right_alt_key.zip을 내려받아서 USB-키보드-변경(오른쪽ALR키를-한영으로전환).reg 를 실행하고 재부팅 하니 한영전환이 잘 되었습니다.

아니면, 굳이 내려받지 않고 아래의 내용을 메모장에 복사해서 위의 파일 이름으로 저장하여 실행해도 될 것 같습니다.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\i8042prt\Parameters]
"LayerDriver KOR"="kbd101c.dll"
"OverrideKeyboardIdentifier"="PCAT_101CKEY"
"OverrideKeyboardSubtype"=dword:00000005
"OverrideKeyboardType"=dword:00000008
 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,\
                   00,00,00,00,\ 
                   03,00,00,00,\
                   72,00,38,E0,\ 
                   71,00,1D,E0,\
                   00,00,00,00

기능키 요약

상자에 첨부된 기능키 설명서가 영어라 간단히 한글로 정리해보면

  • FN + X : 원래 FN키 자리에 있던 메뉴키 사용
  • FN + 윈도우키 : 윈도우키 잠금 (왼쪽 윈도우 키 LED가 켜짐)
  • 한 번 더 누르면 풀림 (풀릴 때는 왼쪽 윈도우 키 LED가 꺼짐)
  • FN + F12 : 6+1 롤오버 (키보드 보안이 필요한 환경) (F12 키 LED가 켜짐)
  • 한 번 더 누르면 무한입력 (게임 사용 시) (F12 키 LED가 꺼짐)
  • FN + 0 ~ 8 : 0 : 꺼짐 1~7 : 밝기조절 8 : 밝았다가 어둡다가 반복 (일명 숨쉬기 모드)
  • FN + S : 부팅을 하면 조절해 둔 밝기가 초기화가 되므로 원하는 밝기로 저장하는 기능

오른쪽 위 4가지 기능키는, 소리뮤트토글, 소리 작게, 소리 크게, 계산기입니다.

남은 이야기

후방주의, 마눌 어그로를 팍팍 끄는 휘황찬란한 스타일보다는, 여타 게이밍 기계식 키보드보다 저렴하면서, 필요한 기능만 딱 맞는 단순한 키보드를 찾으시는 분에게 권할만합니다.주1

각주.
  1. 참고로 저는 볼텍스와 아무런 이해관계가 없습니다. [Back]
수영

수영 플립 턴 팁 - 보는 사람도 신나는 플립 턴 연습 방법

이번에는 플립 턴을 한번 살펴보겠습니다. 한 달 후면 수영을 배운 지 3년이 되어 가지만, 익숙한 사이드 턴에 비해, 플립 턴은, 여전히 저에게는 풀어야 할 숙제입니다. 사이드 턴을 할 때 시간 단축을 위해 벽을 강하게 차곤 하는데, 잘못된 자세로 차거나 반복해서 강하게 차면, 허리에 부담되고, 실제로 다치기도 했기 때문에, 플립 턴으로 바꿔보고 싶었습니다.

다음은 플립 턴 연습에 참고되었던 유튜브 동영상을 공부할 겸 정리해 볼까 합니다.

벽 앞에서 하는 것과 함께, 수영하면서 플립 턴 연습해 보기

제가 제일 좋아하는 플립 턴 동영상입니다. 항상 이것을 염두에 두고 연습을 합니다. 수영하면서 플립 턴 연습을 하면, 평상시에도 연습할 수 있고 횟수도 늘어나기 때문에 좋은 것 같습니다. 플립 턴 연습기회가 거의 없으므로, 저는 강습이 끝나고 한 번씩 꼭 하거나 자유 수영 시간에 짬짬이 합니다.

Freestyle Swimming Drills: Flip-turn Progression

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

돌 때 코로 내뱉는 것이 습관이 되도록 하자.

6팔1턴 연습을 하다 보면, 그냥 안 뱉고 돌 때도 있고, 아참, 하고 생각나서 뱉고 돌 때도 있습니다. 계속 염두에 두고 돌면서, 어느새 생각을 안 해도 저절로 내뱉고 돌 정도로 몸에 배야 합니다. 뱉을 때 아래와 같이 입을 코에 붙이고 돌면, 호흡을 아끼는 데 도움이 됩니다.

Turns - Air Control Flip Turn

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

플립 턴의 완성체 모습

이제 멋진 플립 턴 영상을 보셔야겠지요? 항상 설명이 잘 정리된 영상을 좋아하는데, 이것도 그중에 하나인 것 같습니다. 한글 자막이 없어서 아쉽지만, 중요한 것만 정리해본다면,

  • 플립 턴이 사이드 턴보다 효율적이다.
  • 벽과 적당한 거리를 재기 위해 '벽 보기'라고 부르는 과정이 필요하다.
  • 벽과 한 팔 정도로 가까워지면, 선두 팔을 뒤로 잡아당기고 턱을 가슴 쪽으로 떨어뜨리면 턴이 시작된다.
  • 머리가 밑으로 도는 동안, 엉덩이는 솟은 V 형태로 떠오른다. 이때에 무릎을 가슴으로 끌어당겨 공중제비 동작을 완성한다. 발은 위로 회전하면서 벽으로 향하고, 푸시 오프가 준비된다.
  • 큰 모양보다 작은 모양이 빠른 회전에 유리하다는 것을 명심하면서, 무릎을 가슴쪽으로 집어 넣는 것을 유지한다.
  • 엉덩이에서 머리로 향한 강하고 파워풀한 손의 풀링이 빠르고 효율적인 회전을 도울 것이다.
  • 발이 벽에 닿을 때에, 무릎의 각도를 90도를 유지하면 벽을 박차고 나올 때에 가장 강한 힘을 얻을 수 있다.
  • 다리와 발가락으로 푸시 오프하면서 최대 거리를 얻기 위해 일직선으로 향한다.
  • 무릎이 수면 밖 위로 향해 도느냐, 옆으로 향해 도느냐는 수영 선수의 취향이다.
  • 공중제비 동작을 완성하기 위해, 깊지 않은 풀의 벽에서 연습해보라.
  • 턱을 가슴쪽으로 누른 상태에서의 작고 힘찬 돌핀킥 동작을 연습하라. 빠른 회전에 도움이 될 것이다.
Ryan Lochte | Freestyle Turn Technique

클릭하시면 레이어팝업창으로 동영상을 감상하실 수 있습니다.

남은 이야기

개인적으로 턴과 입수가 수영 중에 제일 재밌는데, 앞으로 연습을 많이 해서 플립 턴을 자유자재로 구사하는 날이 빨리 왔으면 좋겠습니다.^^