-13,6 +13,310 |
=== # Day 1 - 첫째 날: CPAN을 내 품에 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-01.html 첫째 날: CPAN을 내 품에] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>미러링</code> - <code>미러 사용</code> - <code>정리하며</code> |
* 언급된 모듈: <index(File::Rsync::Mirror::Recent)> , <index(distribution/File-Rsync-Mirror-Recent/bin/rrr-client)> , <index(App::cpanminus)> |
* '시작하며' 절의 내용: |
<blockquote> |
펄 사용자에게 있어서 CPAN(Comprehensive Perl Archive Network)은 정말 거대한 보물 창고입니다. 홈페이지의 설명에 보다보면 심지어 "LWPs, POEs, and DBIs -- oh my!"와 같은 부제가 달려있기도 하죠. |
그림 1. CPAN: LWPs, POEs, and DBIs -- oh my! (원본) |
CPAN은 1995년에 시작해서 현재까지 규모가 꾸준히 증가해서 기사를 쓰는 현 시점 기준으로 CPAN에는 157,981개의 펄 모듈과 32,708개의 배포판과 12,469명의 저자, 235개의 서버가 있습니다. 사실 CPAN은 한국에도 미러서버가 많은지라 대부분의 경우 불편함을 느끼지는 못합니다. 하지만 모듈을 개발한다던가, 다수의 장비에 다수의 모듈을 빈번하게 설치하고, 관리하고, 배포하는 경우 지역의 미러 서버를 이용한다하더라도 속도 측면에서 불편함이 있긴합니다. 이런 경우 단체 또는 사내, 심지어 개인 서버에 미러 서버를 구축하면 모듈 설치 및 업데이트 속도를 획기적으로 개선할 수 있습니다. |
</blockquote> |
=== # Day 2 - 둘째 날: 내 택배가 어디쯤 왔을까? by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-02.html 둘째 날: 내 택배가 어디쯤 왔을까?] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>Parcel::Track</code> - <code>배송 조회</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Parcel::Track)> , <index(Parcel::Track::KR::CJKorea)> , <index(Parcel::Track::KR::Dongbu)> , <index(Parcel::Track::KR::Hanjin)> , <index(Parcel::Track::KR::KGB)> , <index(Parcel::Track::KR::PostOffice)> , <index(Parcel::Track::KR::Yellowcap)> |
* '시작하며' 절의 내용: |
<blockquote> |
대부분의 직장인들에게 택배는 주문 및 결제를 완료한 순간부터 관심 그 자체입니다. '늦게 주문했는데 내일 올까? 아니 일괄 배송 시간이 지났으니 모레나 올거야.' 등 사실 우리가 택배가 어디있는지 관심을 보이든 보이지 않든 택배가 대문 앞에 도착하는 시간에는 하등 차이가 없음에도 관심을 놓을 수 없다는 것이 사실이긴 하지만요. :) 대부분의 택배사는 물류 및 배송 조회 서비스를 홈페이지에 제공하고 있으므로 이를 이용해도 되고, 각 쇼핑몰 홈페이지나, 택배 전용 모바일 전용 앱을 통해서도 배송현황을 조회할 수 있으니 세상 참 많이 편해졌죠? 하지만 역시 우리는 펄 해커! 해커에게 모든 것의 기본은 명령줄이죠? 꼭 해커여서가 아니더라도 명령줄에서 택배를 열람할 수 있다면 여러분이 상상해서 만들 수 있는 것이 더 많아질지도 모르겠네요. |
</blockquote> |
=== # Day 3 - 셋째 날: CPAN에서 만남을 추구하면 안되는 걸까 Vol. 1 by JEEN_LEE === |
* 링크: [http://advent.perl.kr/2015/2015-12-03.html 셋째 날: CPAN에서 만남을 추구하면 안되는 걸까 Vol. 1] |
* 저자: JEEN_LEE |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>그러면 문제는 뭔가?</code> - <code>준비물</code> - <code>내츄럴리?</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Sort::Naturally)> |
* '시작하며' 절의 내용: |
<blockquote> |
열심히 일하다보면 뜻대로 쉽게 풀리지 않는 일들에 휘둘리기 마련입니다. 그렇지 않으면 어떻게 돌아가게는 해놓고 나중에 다시 보면 뭔가 찜찜한 느낌이 들기도 하죠. '아, 내가 왜 이런 걸 주업으로 삼아서 이러고 있나' 싶기도 합니다. 이런 후레시한 네거티브향이 풀풀 풍길 때에 우리는 쉬이 뜻하고 있던 '만남'을 추구합니다. |
</blockquote> |
=== # Day 4 - 넷째 날: 한글 문자열 자모 단위 일치 검사 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-04.html 넷째 날: 한글 문자열 자모 단위 일치 검사] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>시작</code> - <code>음소 단위로 분리</code> - <code>한글 호환 자모로 변환</code> - <code>정리하며</code> - <code>참고</code> |
* 언급된 모듈: <index(Lingua::KO::Hangul::Util)> , <index(Lingua::KO::Hangul::JamoCompatMapping)> |
* '시작하며' 절의 내용: |
<blockquote> |
인터넷 검색 엔진이나 쇼핑몰 등의 검색 창을 보면, 타이핑을 시작하기 무섭게 검색어를 알아서 완성시켜 주기도 하고, 검색어의 일부만 입력해도 원하는 검색 결과를 보여주기도 합니다. 그림 1과 같이 말이죠. |
그림 1. 검색 엔진의 검색어 예측 (원본) |
그림 1을 보면 정규표현식을 입력하는 과정에서 일시적으로 정귶이라는 문자열이 만들어졌습니다 (세벌식 자판을 사용한다면 이런 일이 없겠지만...). 단순한 정규식 일치나 index 함수를 써서 검사한다면, 정귶은 정규표현식에 일치되지 않는 것으로 판정되어 버립니다. 직관적으로 생각해보면, 이 문제를 해결하기 위해서는 문자열을 일단 음소 단위로 분리하면 될 것 같습니다. 그러면 이제 ㅈㅓㅇㄱㅠㅍㅛㅎㅕㄴㅅㅣㄱ 안에서 ㅈㅓㅇㄱㅠㅍ을 찾는 문제가 되고, 이 검사는 일치 판정을 받을 것입니다. 이렇게 음소 단위로 분리하는 작업을 펄 모듈을 이용하여 해 봅시다. |
</blockquote> |
=== # Day 5 - 다섯째 날: Gmail로 메일 보내기 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-05.html 다섯째 날: Gmail로 메일 보내기] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>SMTP 세션 만들기</code> - <code>메일 보내기</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Email::Send::SMTP::Gmail)> |
* '시작하며' 절의 내용: |
<blockquote> |
프로그램을 써서 자동으로 메일이 발송되게 하고 싶은데, 직접 메일 서버를 설치하자니 설치나 설정도 어렵고, 최근에는 스팸 때문에 인증되지 않은 서버에서 발송된 메일은 아예 배달이 거부되는 경우도 있습니다. 간편하게 내가 가입한 Gmail 계정을 사용하여 메일을 발송하는 법을 알아봅시다. |
</blockquote> |
=== # Day 6 - 여섯째 날: 터미널 제목 바꾸기 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-06.html 여섯째 날: 터미널 제목 바꾸기] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>제목 바꾸기</code> - <code>바퀴의 재활용</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Term::Title)> , <index(Win32::Console)> |
* '시작하며' 절의 내용: |
<blockquote> |
여러분은 터미널용 유틸리티를 자주 만들곤 하나요? 유닉스의 철학 중 하나인 KISS답게 유틸리티를 만들다보면 대부분은 한 가지 일을 잘 수행하는 간결하고 짧은 프로그램을 작성하게 되지만 가끔씩은 많은 일을 아우를 수 있는 엄청난(?) 것을 만들게 되기도 합니다. 관리 도구라던가 사용자 명령을 기다리는 유틸리티들이 대표적인데요. 이런 프로그램들은 사용자가 종료하기 전까지는 계속 대기 상태로 있죠. 또는 간단한 프로그램이지만 처리 시간이 꽤 오래 걸리기 때문에 실행된 상태로 종료될 때까지 오랜 시간 대기 하는 경우도 있습니다. 이런 경우 현재 프로세스 상태를 터미널 제목에 표시한다면, 제법 유용할 것입니다. Perl을 이용해 터미널의 제목을 바꾸는 법을 알아보죠. |
</blockquote> |
=== # Day 7 - 일곱째 날: Mojolicious + Bootstrap + FontAwesome 삼종셋트 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-07.html 일곱째 날: Mojolicious + Bootstrap + FontAwesome 삼종셋트] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>Mojolicious</code> - <code>Bootstrap</code> - <code>FontAwesome</code> - <code>기타 등등</code> - <code>전체 코드</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Mojolicious)> , <index(Mojolicious::Plugin::FontAwesome4)> , <index(Mojolicious::Plugin::Bootstrap3)> |
* '시작하며' 절의 내용: |
<blockquote> |
현대의 웹 응용에 있어 디자인은 필수 불가결한 요소입니다. 제 아무리 뛰어난 기능을 가지고 있거나, 좋은 내용을 담고 있는 웹 페이지나 웹 응용이라 할지라도 속된 말로 때깔이 좋지 않으면 사용자들의 호감도는 급감합니다. 반대로 때깔이라도 좋으면 그래도 사용자들의 호감도는 증가합니다. 비록 이런 상황 자체가 바람직한 것은 아니나, 그럼에도 불구하고 최소 웹에서 금칠(?)이 중요하다는 사실에는 개발자나 사용자나 모두가 고개를 끄덕일 것입니다. 디자이너가 없는 개발자나 개발팀의 경우 아리따운 웹 화면을 구성하려면 많은 노력이 필요합니다. 하지만 오픈소스 커뮤니티의 노력으로 탄생한 Bootstrap과 FontAwesome 두 라이브러리만 있다면 최소한의 노력으로 미려한 웹 페이지를 만드는데 부족함이 없습니다. 펄(Perl)과 CPAN은 Mojolicious + Bootstrap + FontAwesome 이 삼종셋트를 손쉽게 사용할 수 있는 아주 획기적인 도구를 지원하고 있습니다. William Ghelfi씨의 Bootstrap in practice: a landing page 기사를 참고해 과연 얼마나 간단하게 이 삼종셋트를 이용해 웹을 꾸밀 수 있는지 알아보죠. |
</blockquote> |
=== # Day 8 - 여덟째 날: 돌리고~ 돌리고~ 작업 병렬 실행 by aer0 === |
* 링크: [http://advent.perl.kr/2015/2015-12-08.html 여덟째 날: 돌리고~ 돌리고~ 작업 병렬 실행] |
* 저자: aer0 |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>Parallel::ForkManager</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Parallel::ForkManager)> |
* '시작하며' 절의 내용: |
<blockquote> |
요즘은 물리적 CPU가 하나라도 내부 코어(core) 갯수가 한 개인 CPU는 찾아보기 어렵고 심지어 모바일 스마트폰의 CPU조차 여러 개의 코어를 지원하는 시대에 살고 있습니다. 따라서 어떤 작업을 할 때 멀티 코어의 장점을 살리려면 병렬 실행이 필수적입니다. 작업을 병렬로 실행하는 방법은 크게 스레드(thread)를 이용한 방법과 멀티 프로세스(multi-process)를 이용한 방법이 있습니다. Perl은 두 가지 방법 모두 지원합니다. Python, Ruby의 스레드가 GIL(Global Interpreter Lock)이란 구조 때문에 하나의 코어만 사용할 수 있는 반면, Perl 스레드는 여러 개의 코어를 동시에 활용 가능합니다. 하지만 네이티브 스레드와는 구조가 좀 다른 인터프리티드 스레드(interpreted thread)라는 구조를 택하고 있어서 요즘은 될 수 있으면 멀티 프로세스 구조를 사용하도록 추천합니다. |
단순히 독립적인 작업을 단순히 처리하는 것이 목적인 병렬 작업은 그냥 동시에 돌려놓고 작업들이 끝나기를 기다리면 그만이기 때문에 스레드를 이용하든 포크(fork)를 이용한 멀티 프로세스 구조든 간단합니다. 하지만 어떤 공통되는 성공 실패 카운트를 세는 변수가 있거나, 각 작업의 결과를 모아서 처리를 해야 하고 자신의 CPU 코어 수에 맞게 시스템이 응답지연 및 hang상태에 빠지지 않도록 과도한 부하가 가지 않게 동시에 실행되는 작업의 갯수를 적절하게 조절해야 되는 요구가 생기면 슬슬 신경 써야 할 부분이 많아지죠. 스레드 같으면 여러 스레드가 변수값을 동시에 변경하지 못하도록 mutex같은 lock을 써서 동기화시켜 주어야 하고 멀티 프로세스에서는 부모, 자식 프로세스간 메모리 영역이 공유되지 않기 때문에 자식 프로세스가 넘기는 결과나 값을 받으려면 파이프, 소켓, 임시파일 등을 통한 부모, 자식 프로세스 간에 데이터 통신을 하기 위한 IPC(inter-process communication)장치도 만들어야 합니다. 그리고 현재 동시에 작업하고 있는 스레드나 프로세스의 갯수를 세고, 지정한 개수를 초과하지 않도록 조절해야 합니다. 이걸 다 직접 구현하려면 머리가 지끈지끈하겠죠? 하지만 걱정마세요! Perl CPAN에는 이런 요구사항을 한방에 만족시켜주는 Parallel::ForkManager라는 모듈이 있으니까요. |
</blockquote> |
=== # Day 9 - 아홉째 날: Bootstrap + Bootswatch + Mojolicious::Plugin::Bootstrap3 삼종셋트 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-09.html 아홉째 날: Bootstrap + Bootswatch + Mojolicious::Plugin::Bootstrap3 삼종셋트] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>Mojolicious</code> - <code>Bootstrap + Mojolicious::Plugin::Bootstrap3</code> - <code>Bootswatch + Mojolicious::Plugin::Bootstrap3</code> - <code>전체 코드</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Mojolicious::Plugin::Bootstrap3)> , <index(Mojolicious)> |
* '시작하며' 절의 내용: |
<blockquote> |
일곱 번째 기사와 더불어 이번에도 삼종셋트 시리즈입니다. :-) 웹 화면에서 미려하면서도 통일된 디자인은 무척 중요합니다. 이전 기사와 마찬가지로 오픈 소스로 공개된 많은 디자인 관련 라이브러리 중 펄(Perl)과 Mojolicious와 함께 간단히 사용하는 것 만으로 웹 화면의 품질을 월등히 높일 수 있답니다. Bootstrap은 현재 가장 유명한 반응형 HTML, CSS, JS 오픈소스 프레임워크이며, Bootswatch는 Bootsrap을 위한 무료 오픈소스 테마입니다. 더불어 CPAN의 Mojolicious::Plugin::Bootstrap3 모듈은 Mojolicious에서 Bootstrap과 Bootswatch를 손쉽게 사용할 수 있게 도와주는 플러그인입니다. 역시 이번에도 얼마나 간단히 이 삼종셋트를 이용할 수 있는지 궁금하지 않나요? |
</blockquote> |
=== # Day 10 - 열번째 날: time-ago 구하기 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-10.html 열번째 날: time-ago 구하기] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>Time-Ago?</code> - <code>다국어 지원</code> - <code>정리하며</code> |
* 언급된 모듈: <index(DateTimeX::Format::Ago)> |
* '시작하며' 절의 내용: |
<blockquote> |
요즘은 트위터나 페이스북 같은 유명한 SNS 덕분에(때문에) time-ago 식 표현이 널리 사용된지 몇 년 되었죠. 자바스크립트를 비롯해 대부분의 언어에는 이런 time-ago 형식으로 시간을 표시할 수 있는 모듈이나 플러그인이 많습니다. 그렇다면 펄에서는 어떻게 사용해야 할까요? |
</blockquote> |
=== # Day 11 - 열한번째 날: QR 코드 ♡ 터미널 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-11.html 열한번째 날: QR 코드 ♡ 터미널] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>터미널에 QR 코드라고?</code> - <code>출력 색상 조정</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Term::QRCode)> , <index(Text::QRCode)> |
* '시작하며' 절의 내용: |
<blockquote> |
바코드(barcode)는 광학 기기가 판독할 수 있도록 고안된 굵기가 다른 흑백 막대로 조합시켜 만든 코드입니다. 전통적인 바코드는 서로 굵기가 다른 막대 모양의 이미지를 적절한 간격으로 배치해서 숫자나 문자를 표현합니다. 최근에는 QR 코드(QR code)처럼 단순한 막대 모양이 아닌 사각형의 배열의 점으로 자료를 표현하는 2차원 코드도 개발되어 많은 양의 정보를 담기도 합니다. QR 코드는 숫자나 영문자 뿐만 아니라 유니코드 문자를 담는데에 전혀 무리가 없기 때문에 활용도는 무궁무진합니다. 지금까지는 QR 코드를 이용하는 입장이었다면, 이번에는 반대로 전달하고 싶은 정보를 QR 코드로 제공한다면 어떨까요? 자신의 명령줄 프로그램에서 모바일 기기와 연동해서 정보를 전달해야 할 경우 해당 정보를 눈으로 보고 일일이 모바일 기기로 옮겨 적을 것이 아니라 QR 코드를 터미널에 짠!하고 뿌려준다면 손쉽게 정보를 보내줄 수 있겠죠? |
</blockquote> |
=== # Day 12 - 열두번째 날: 두 해시 합치기 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-12.html 열두번째 날: 두 해시 합치기] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>사용법</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Hash::Merge)> |
* '시작하며' 절의 내용: |
<blockquote> |
펄(Perl)에서 해시(hash)는 무척 유용한 자료구조입니다. 스크립트 언어의 가장 큰 특징이자 장점 중 하나는 배열이나 해시와 같은 복잡한 자료구조를 추가적인 라이브러리 적재없이 언어 내부에 구현해서 간단히 사용할 수 있다는 점입니다. 이러다보니 자연스럽게 계층적 자료인 경우 해시를 사용해서 저장하게 되는데 사용하다 보면 두 해시의 자료를 합쳐야 할 경우가 종종 있습니다. 단순한 해시라면 고민없이 해결하겠지만, 깊은 자료구조를 가진 해시라면 한참을 고민하거나 결국 합치는 루틴을 만들어야 하곤 합니다. 이런 류의 일은 꽤나 빈번하며, 역시 우리의 펄 선배들은 비슷한 생각을 하고 이미 바퀴를 발명해놓았지요. |
</blockquote> |
=== # Day 13 - 열세번째 날: 간단한 기본 통계 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-13.html 열세번째 날: 간단한 기본 통계] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>사용법</code> - <code>정리하며</code> - <code>참고자료</code> |
* 언급된 모듈: <index(Statistics::Swoop)> , <index(Statistics::Basic)> , <index(Statistics::Lite)> , <index(Statistics::Descriptive)> |
* '시작하며' 절의 내용: |
<blockquote> |
수치 배열을 가지고 작업을 하다보면 꽤 많은 경우 누계나 평균은 물론이고, 최댓값, 최솟값 등의 빈번하게 계산하기 마련입니다. 이런 기본적인 통계값을 생각 날때마다 반복문을 돌리며 연산하는 것은 번거로운 일이죠. 게으른 펄(Perl) 프로그래머에게 꼭 필요한 간단한 통계 모듈을 알아보죠. |
</blockquote> |
=== # Day 14 - 열네번째 날: CPAN에서 만남을 추구하면 안되는 걸까 Vol.2 by JEEN_LEE === |
* 링크: [http://advent.perl.kr/2015/2015-12-14.html 열네번째 날: CPAN에서 만남을 추구하면 안되는 걸까 Vol.2] |
* 저자: JEEN_LEE |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>1. 정규표현식</code> - <code>2. 날짜 형식에 맞는 파싱 모듈을 사용</code> - <code>3. 포맷 빌더를 사용해서 자체적인 포맷팅 모듈 만들기</code> - <code>정리하...</code> - <code>준비물</code> - <code>이제부터 진면목</code> - <code>정리하며</code> |
* 언급된 모듈: <index(DateTime)> |
* '시작하며' 절의 내용: |
<blockquote> |
업무에서 가장 빈번하게 접하는 데이터는 바로 날짜입니다. 날짜라면 단순한 데이터라고 할 수 있을텐데 현실 세계는 조금 더 잔인한 법입니다. 이런저런 사람들이 쏟아내는 날짜 형식이라고 부르는 데이터들은 아래와 같습니다. |
그렇다면 우리는 어떤 자세로 이런 데이터들을 대해야 할까요? |
</blockquote> |
=== # Day 15 - 열다섯번째 날: 디스크 정보 - 현재 작업 디렉토리 알기, cwd와 getcwd by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-15.html 열다섯번째 날: 디스크 정보 - 현재 작업 디렉토리 알기, cwd와 getcwd] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>시작</code> - <code>cwd와 getcwd의 차이?</code> - <code>절대 경로 알기</code> - <code>정리하며</code> - <code>참고</code> |
* 언급된 모듈: |
* '시작하며' 절의 내용: |
<blockquote> |
어떤 프로그램을 실행할 때, 시스템의 디스크 드라이브에 대해 이런 저런 정보를 얻어야 할 때가 있습니다. 그 중의 하나는 이 프로그램이 연결된 "작업 디렉토리(working directory)"입니다. 프로그램 내에서 파일 관련 연산을 할 때 상대 경로로 지정된 경로명은 모두 이 작업 디렉토리를 기준으로 동작하게 됩니다. 펄 스크립트 내에서는 chdir 내장 함수를 사용하여 작업 디렉토리를 변경할 수 있지만, 현재 작업 디렉토리가 어디인지를 알아내는 내장 함수(유닉스의 pwd 같은)는 따로 없습니다. 그러나 이 기능을 제공하는 모듈이 있습니다. |
</blockquote> |
=== # Day 16 - 열여섯번째 날: 디스크 정보 - 디렉토리 사용량, 디스크 남은 용량 등을 확인하기 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-16.html 열여섯번째 날: 디스크 정보 - 디렉토리 사용량, 디스크 남은 용량 등을 확인하기] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>파일 또는 디렉토리 사용량 알아내기</code> - <code>디스크의 남은 용량 확인하기</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Filesys::DiskUsage)> , <index(Filesys::DfPortable)> |
* '시작하며' 절의 내용: |
<blockquote> |
어떤 디렉토리의 용량, 즉 그 디렉토리 안에 있는 파일들과 서브디렉토리들이 차지하는 용량의 총합이 얼마나 될까 궁금하면 어떡해야 할까요? File::Find 모듈을 사용해서 서브디렉토리를 재귀적으로 탐색하며 모든 파일들을 찾으면서, 각 파일들의 크기를 구해서 더하면 되겠죠! 아니면 qx()를 사용하여 유닉스/리눅스 명령어인 du를 실행한 후 출력으로 나온 문자열을 정규식을 써서 해석하면 되겠지요. |
디스크 전체의 사용량과 남은 용량이 궁금하다면 어떡해야 할까요? 이번에도 리눅스 명령어인 df를 실행해 나온 출력을 갈무리한 후 정규식을 써서 원하는 부분을 추출하면 됩니다. |
흠... |
전부 맘에 들지 않는다는 까다로운 사람들을 위해, 다른 방법을 알아봅시다. |
</blockquote> |
=== # Day 17 - 열일곱번째 날: Perl과 보안: SQL Injection, Blind by vohrmana === |
* 링크: [http://advent.perl.kr/2015/2015-12-17.html 열일곱번째 날: Perl과 보안: SQL Injection, Blind] |
* 저자: vohrmana |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>SQL Injection: Blind</code> - <code>여기 취약한 페이지가 있습니다!</code> - <code>데이터베이스 이름 찾기</code> - <code>테이블 이름 찾기</code> - <code>컬럼 이름 찾기</code> - <code>정리하며</code> |
* 언급된 모듈: <index(WWW::Mechanize)> , <index(LWP)> |
* '시작하며' 절의 내용: |
<blockquote> |
우리는 펄(Perl)을 이용하여 문자열을 쾌적하게 다룰 수 있는 방법을 알고 있습니다. C만 했던 예전의 저에겐 몹시도 파격적이었죠. 시간 가는 줄 모르고 펄을 이용해 별 쓸모없는 코드들을 만들곤 했습니다. 그 중 웹 해킹 공부를 위해 만들었던 코드 하나를 소개합니다. 함께 SQL 삽입(SQL injection)중 블라인드(blind) 기법에 대해 알아보고 자동으로 블라인드 공격을 수행하는 툴을 간단하게 만들어 볼까 합니다. 무엇보다 SQL 삽입을 수행하기 위해 웹에 접근할 수 있는 수단이 필요합니다. CPAN의 WWW::Mechanize 모듈도 좋고, CPAN의 LWP 모듈도 좋습니다. 당연하지만 펄과 SQL에 대한 지식이 조금은 필요합니다. 원하는 정보를 빨리 찾아내기 위한 탐색 기법이나 스레드에 대한 기법이 필요할 수도 있지만 단순함을 위해 언급하지 않습니다. |
</blockquote> |
=== # Day 18 - 열여덟번째 날: Mojolicious - 폼 파라메터와 파일 업로드 처리 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-18.html 열여덟번째 날: Mojolicious - 폼 파라메터와 파일 업로드 처리] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>간단한 폼 만들기</code> - <code>간단한 텍스트 필드</code> - <code>같은 이름의 필드가 여러 개일 때</code> - <code>체크박스</code> - <code>파일 업로드</code> - <code>모든 입력값을 한꺼번에 보기</code> - <code>모든 파일 업로드 필드의 내용을 한꺼번에 보기</code> - <code>Mojolicious::Controller의 param() 메소드</code> - <code>정리하며</code> - <code>참고</code> |
* 언급된 모듈: <index(Mojolicious)> |
* '시작하며' 절의 내용: |
<blockquote> |
Mojolicious를 사용하여 웹 애플리케이션을 만들어보고 싶은데, 웹 프로그래밍에 익숙하지 않은 상태에서 막상 시작하면 막막할 때가 많습니다. 브라우저에서 폼에 입력한 값을 서버에서 받으려면 어떻게 해야 하는지, 한 번에 여러 개의 파일을 업로드하고 싶으면 어떻게 해야 하는지 같은 것들이 발목을 잡습니다. 어떤 때는 잘 되는 것 같은데 조금 수정하고 나니 제대로 값을 받지 못하곤 합니다. 공식 문서는 첫 단락에서는 덧셈을 가르치더니 두 번째 단락부터는 갑자기 미적분을 소개하는 느낌입니다. 사실 제가 저런 문제들 때문에 애를 먹곤 했던 터라, 이 기회에 간단히 정리해보겠습니다. |
</blockquote> |
=== # Day 21 - 스물한번째 날: p5-hubot - 날씨봇 만들기 by newbcode === |
* 링크: [http://advent.perl.kr/2015/2015-12-21.html 스물한번째 날: p5-hubot - 날씨봇 만들기] |
* 저자: newbcode |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>날씨 알림 봇</code> - <code>사람들의 이야기를 듣기</code> - <code>주간 예보</code> - <code>WOEID 값 얻기</code> - <code>당일 예보</code> - <code>실행!</code> - <code>크리스마스 숙제</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Hubot)> , <index(LWP::UserAgent)> |
* '시작하며' 절의 내용: |
<blockquote> |
휴봇(HUBOT)이라고 들어보셨나요? 휴봇은 GitHub에서 만든 채팅 봇으로 처음에는 사내용으로 만들어졌지만, 많은 발전을 거듭하며 현재는 오픈 소스로 공개되어 있습니다. GitHub에서는 그룹 채팅시 휴봇에게 "github xx부서의 핵심 업무를 알려줘."라고 물어보면 휴봇이 그에 대해 상세한 답변을 하는 식입니다. 더 나아가 구글 번역이라던가, 지도와의 통합, 프로젝트의 배포등의 일까지도 휴봇에게 지시할 수 있습니다. 휴봇은 Node.js 기반에 CoffeeScript로 개발되었지만 @aaonaa님께서 Perl로 포팅하셨기 때문에 Perl로도 휴봇을 이리저리 만질 수 있답니다. p5-hubot의 자세한 설명은 2012년도 크리스마스 캘린더를 참고하세요. |
</blockquote> |
=== # Day 22 - 스물두번째 날: Mojolicious - 폼의 필드를 자동으로 채워넣기 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-22.html 스물두번째 날: Mojolicious - 폼의 필드를 자동으로 채워넣기] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>시작</code> - <code>폼에 값을 채워넣기(1) - 수작업</code> - <code>폼에 값을 채워넣기(2) - 자동으로</code> - <code>전체 코드</code> - <code>정리하며</code> - <code>참고</code> |
* 언급된 모듈: <index(Mojolicious)> , <index(Mojolicious::Plugin::FillInFormLite)> , <index(HTML::FillInForm::Lite)> |
* '시작하며' 절의 내용: |
<blockquote> |
웹 페이지에서 폼을 띄워서 사용자에게 입력을 받을 때, 폼의 여러 입력 필드에 미리 어떤 값을 채워둔 상태로 두고 그 상태에서 사용자가 제출 버튼을 누르면 그 값이 전송되도록 하고 싶을 때가 있습니다. 일종의 디폴트 값인 셈입니다. 예를 들자면, 사용자의 정보 수정 폼에서는 기존 정보(전화번호나 주소)를 미리 채워넣고, 달라진 게 있는 항목만 사용자가 수정하도록 할 수 있을 겁니다. 또는, 사용자가 입력한 내용 중에 잘못된 값이 있어서 폼을 다시 작성하도록 해야 하는데, 제대로 넣은 값들까지도 전부 새로 넣으라면 사용자가 화를 낼 테니 미리 채워넣어 주는 게 좋을 것입니다. Mojolicious를 이용하여 만드는 웹 페이지에서 이렇게 폼의 필드를 채워넣는 작업을 자동으로 하는 방법에 대해 알아봅시다. |
</blockquote> |
=== # Day 23 - 스물세번째 날: 알록달록 터미널을 갈무리하기 by keedi === |
* 링크: [http://advent.perl.kr/2015/2015-12-23.html 스물세번째 날: 알록달록 터미널을 갈무리하기] |
* 저자: keedi |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>term2html</code> - <code>크리스마스 선물 #1: 한글</code> - <code>크리스마스 선물 #2: 터미널 배경과 전경</code> - <code>정리하며</code> |
* 언급된 모듈: <index(App::Term2HTML)> |
* '시작하며' 절의 내용: |
<blockquote> |
흑백 모니터를 사용하고, VT100을 사용하거나, ANSI 제어 문자를 제대로 쓰지도 못하던 먼 옛날과는 달리 알록달록한 칼라 모니터와 칼라 터미널은 너무도 당연한 시대입니다. Full-HD를 넘어 U-HD까지 지원하는 모니터가 나오는 시대에 칼라 터미널이라니 너무 시대에 동떨어진 이야기를 했나요? :-) 터미널에서 우리가 보는 알록달록한 색깔은 대부분의 경우 ANSI 제어 문자를 이용한 색상 표현 입니다. 터미널이란 것 자체에 워낙 기대를 하지 않고 보아서 그런지는 몰라도 이 터미널이란 화면 안에 알록달록하게 색상이 표시되면 그 아름다움(?)에 가끔 넋이 나가기도 합니다. (저만 그런가요? :) 이 터미널의 화면을 긁어서 누군가에게 보여주고 싶다는 생각을 해본적이 있나요? 하지만 긁어서 복사하는 순간 그것은 단지 단순한 텍스트가 될 뿐입니다. 터미널을 누군가에게 보여주어야 하는 순간이 온다면 결국 화면 갈무리를해서 그림 파일로 저장해야했죠. 이 알록달록한 화면을 갈무리하는 방법은 과연 없을까요? |
</blockquote> |
=== # Day 24 - 스물네번째 날: 구글 드라이브 API 이용하기 by gypark === |
* 링크: [http://advent.perl.kr/2015/2015-12-24.html 스물네번째 날: 구글 드라이브 API 이용하기] |
* 저자: gypark |
* 목차: <code>저자</code> - <code>시작하며</code> - <code>준비물</code> - <code>모듈 사용 준비하기</code> - <code>모듈 사용 예</code> - <code>정리하며</code> |
* 언급된 모듈: <index(Net::Google::Drive::Simple)> |
* '시작하며' 절의 내용: |
<blockquote> |
Google에서 제공하는 클라우드 스토리지인 Google Drive에 펄을 이용하여 파일을 업로드하거나 다운로드하는 방법을 알아봅시다. |
</blockquote> |
== # 2014년 크리스마스 달력 == |