파이썬 2.6의 상위 호환성 기능

파이썬 역사상 가장 큰 개혁인 3.0이 발표된 지 이제 한 달이 되어 갑니다.
이번 업데이트는 워낙 변한 것이 많아서 파이썬 개발팀 내부에서도 실제 개발에 적용되려면 2년은
걸릴 것으로 보고 있는데요. 그래서 중간 징검다리로 파이썬 2.6이 3.0을 전후로
발표되었습니다. 2.6에는 3.0 대비에 대한 기능이
많이 들어갔는데, 이 부분만 간단하게 맛보기로 소개해 드립니다~

파이썬 3.0 호환 대비 옵션

파이썬 2.6에서는 3.0에 대비하는 개발자의 편의를 위해서 -3 옵션을 지원합니다.
파이썬을 띄울 때 -3 옵션을 주면 3.0 호환성 경고가 뜹니다. 예를 들면 이렇게요~

이렇게 파이썬 3.0에서 없어지면서 대체할 수 있는 것을 쓰면 경고가 뜹니다.
옵션으로 주지 않고 프로그램 안에서 옵션을 넣어준 것 처럼 하려면
sys.py3kwarning 을 True로 설정해 주면 됩니다.
프로그램 안에서는 sys.py3kwarning을 보면
-3이 설정되었는지 알 수 있지만, 파이썬이 뜨고 나서는 바꿀 수 없습니다.

파이썬 3.0 호환 빌트인 함수

파이썬 3.0에서 새로 생기거나 동작이 바뀌는 빌트인 함수를 2.6에서 미리 쓸 수 있습니다.
그냥 3.0을 바로 쓰는 것과 무슨 차이냐 하면, 기존 2.x용으로 개발된 프로그램 안에서도
모듈 하나 안에서만 선택적으로 빌트인 함수를 3.0 것으로 바꿔서 3.0인 것처럼 쓸 수 있는
것이죠. 하나씩 이렇게 3.0용으로 바꾸다보면 돌아가는 상태를 유지한 채로 2.x에서 3.0용으로
부드럽게 넘어갈 수도 있고요~

future_builtins 모듈이 파이썬 3.0 빌트인 함수를 제공합니다.

파이썬 3.0에서 바뀌는 문법 미리 맛보기

파이썬 3.0에서 바뀌는 print나 유니코드 문자열, 바이트 문자열 같은 것들을 모듈 단위로 미리 쓸 수도 있습니다. 마찬가지로 부분 부분 대처를 해서 3.0용으로 부드럽게 넘어갈 수 있겠죠.

유니코드 문자열
print 함수

어때요! 한 번 해보고 싶으시죠!

다음에는 파이썬 3.0 호환성과 직접적인 관련은 없는 2.6의 새로운 기능을 소개해 드리겠습니다~

파이썬의 매력이 self를 쓰는 거라고 생각해요

종종 파이썬에 대한 평을 인터넷에서 한 번씩 검색해 보는데요. 많은 분들이 가장
많이 싫어하는 것은 뭐니뭐니 해도 "들여쓰기 강제"겠죠. 뭐 이거야 취향 문제라
어쩔 수 없는 것이고. 사실 파이썬 사용자들 중에서 "들여쓰기 강제"를 좋아하는 사람이
많기 때문에 파이썬의 원래 목적에도 더 맞다고 생각되고… ^.^;

그에 못지않게 자주 지적되는 것이, 객체 안에서 꼭 self.를 달아 줘야 된다는 것인데요.
저는 self.를 항상 명시적으로 붙이는 거야말로 파이썬의 참 매력이고, self가 없어지면
파이썬이 무너진다고 생각합니다! 특히 자바 프로그래머들이 파이썬의 self에 대해
많이 지적하는데, 자바와 파이썬 모두에서 영향력이 있는 브루스 엑켈도 self를
(메쏘드 선언에서만이라도) 없애보자
했는데, 그에 대한 응답으로 귀도가 불가능한 일이다라고
그 이유를 논리적으로 설명했었습니다.

브루스 엑켈의 제의가 선언에서만 없애자는 것이었기 때문에, 메쏘드 내부의 코드에서
없애면 안 되는 이유에 대해서는 귀도가 설명하지 않았는데요. 브루스 엑켈이 스스로 결론 내린
그 앞 부분의 문제 "self가 왜 있어야 하냐!" 그 이유에 대해서 좀 설명해서
자바 프로그래머 분들이 파이썬을 좀 더 이해할 수 있도록 도와볼까 합니다.

파이썬에서 self가 붙게 된 역사적인 이유는 파이썬의 클래스 내 메쏘드는 기본적으로
외부에 독립되어 있는 함수에 껍데기를 씌운 것이기 때문입니다. 자바는 아예 독립 함수가 없고,
다른 언어에서는 대체로 독립된 함수들과 메쏘드는 다른 취급을 받는데, 파이썬에서는 그냥
함수를 메쏘드로 편입시켜서 쓸 수도 있고, 둘을 비슷한 방법으로 바꿔서 다룰 수 있습니다.
예를 들면 이런 코드가 가능하겠죠.

밖에서 선언된 함수를 클래스 정의할 때 메쏘드로 끌어들인 것이죠. 메타클래스를 쓴다면 더
동적으로 해 버릴 수도 있습니다. 도대체 이런 코드를 뭐에 쓰냐! 하는 의문을 가지실 수도 있는데요.
의외로 이런 기술이 많이 쓰입니다. egg함수를 C로 구현된 확장모듈에서 끌여들일 수도 있고요.
egg만 사용자가 구현할 수 있도록 노출시켜서 외부 모듈에서 불러올 수도 있고요. 심지어
R이나 .NET같은 브릿지에서 다른 언어로 구현된 것을 쓸 수도 있습니다. 메쏘드가 결국
함수기반이라는 것은 생각보다 강력한 개념으로, __로 시작하는 내부 속성을 쓰면 더욱 희한한 것도
제어할 수 있게 되고, 클래스를 안 쓴 코드와 클래스를 쓰는 코드 사이를 넘나들거나 점진적으로 변경할 때 아주 쓸모가 있습니다.

파이썬에서 instance.method(A, B) 는 class.method(instance, A, B) 와 같은 역할을 합니다.
이것은 함수가 메쏘드가 된 얘기 외에도, 다중상속을 받았거나 이름이 중복되는 메쏘드를 부를 때 쓰이기도 하고, 다양하게 상속받은 하위 인스턴스들을 명시적으로 한 메쏘드에게 콕 찝어 줄 때도 쓰이고, 이 규칙 하나가 수많은 모호함을 해결해 줍니다. 그래서 이 일관성이 문법 전반에 계속 흐르고 있습니다.

그렇다면 그냥 함수는 함수로 쓰고 메쏘드는 메쏘드로 쓰고 같은 데서 상속받으면 비슷한 인터페이스가
나올 수 있지 않겠느냐 하는 의문이 있을 수도 있습니다. self의 또 다른 존재 이유로 파이썬을 파이썬으로
만드는 가장 중요한 특징인 "네임스페이스"가 등장합니다.

"네임스페이스"는 파이썬에서 변수를 담아두는 공간으로, 원래는 로컬, 모듈 전체, 빌트인 세 가지 네임스페이스를 찾도록 되어 있다가, 파이썬 2.1부터 상위에 싸여있는 것들도 찾도록 돼 있습니다. 이해를 돕기 위해 예를 들어드리면

이런 파일이 있다면 A는 모듈 전체, 나머지는 로컬에 들어갑니다. 그런데 Y()의 입장에서 C는 로컬인데, B와 D는 자기 로컬은 아니면서 상위 네임스페이스에 속한 변수들이 됩니다. 따라서, 파이썬 2.1부터는 모듈 전체로 가기 전에 B, D가 있는 X영역부터 찾습니다. 파이썬은 변수 선언을 하지 않기 때문에, 변수의 네임스페이스는 대입이 한 번이라도 일어난 최소의 네임스페이스에 영역을 잡는데요. 위에서 C는 Y()안에서 대입이 있었기 때문에 Y()안의 네임스페이스에 잡히고, B, D는 X()에서 대입이 있기 때문에 X()의 네임스페이스에 잡힙니다. 그런데, A는 대입이 모듈에서만 있고, X()에는 없어서 X() 로컬이 아니라 글로벌로 잡힙니다.
이런 네임스페이스를 바꿔주는 키워드가 원래부터 지원되는 global과 파이썬 3.0부터 지원되는 nonlocal이 있습니다. 이건 따로 관심이 있으시면 매뉴얼을 보시면 되겠습니다. +_+

여기서 갑자기 웬 네임스페이스 설명을 self하는 데 하느냐! 하면..

self.을 생략하게되면 로컬 네임스페이스와 인스턴스 네임스페이스가 섞이게 된다는 것입니다. 즉 클래스에서 x = 1하면 이게 로컬로 갈 지, 인스턴스로 갈지 모호해 지는거죠. 자바나 C++은 명시적으로 선언을 하기 때문에 헷갈리지 않지만, 파이썬은 선언을 않기에 명시적으로 쓸 필요가 있죠. 그래서 펄이나 루비에서는 따로 @나 !같은 기호를 도입해서 쓰는데.. 파이썬의 원칙 중 매우 중요한 것으로 "연산자 너무 늘리지 말자"가 있어서 고려 대상은 아닙니다. self.라고 쓰면 파이썬 문법을 모르는 사람도 아 이게 뭐구나! 하고 추측을 할 수 있지만 @같은 걸 붙여놓으면, 문법책을 참조하거나 고난도의 눈치를 보지 않고서는 인스턴스 네임스페이스인지, 클래스 네임스페이스인지, 글로벌 네임스페이스인지 알기가 힘들겠죠.

그럼 또 제기될 수 있는 의문! 대입은 그럼 명시적으로 하고, 쓸 때만 인스턴스와 클래스도 한 번 타 주면 되지 않겠니? 하고 소극적인 부탁을 해 볼 수도 있겠는데요. 읽는 방법, 쓰는 방법이 다른 건 아무래도 파이썬 원칙에는 맞지 않고, 속도도 많이 느려집니다.

모호한 것을 보면, 추측할 수 있을 거라는 유혹은 단호하게 거절한다. (In the face of ambiguity, refuse the temptation to guess.) — 팀 피터스, 파이썬의 선(Zen)

Watch movie online The Transporter Refueled (2015)

오픈룩에 관계된 숫자들

제가 좋아하는 다큐멘터리 3일 (KBS)에 보면 끝날 때 주제에 대한 사실을 전달하면서도 신선한 반전을 주는 간단한 숫자 몇 가지가 나옵니다. 예를 들면 "추석택배전쟁 72시간"에서는 택배 배송에 관련된 여러 사람들의 고생을 간접체험하는 구성을 하고, 끝에는 "2007년 택배업 종사자는 전년 대비 50% 급증했다."라고 보여줬습니다. 그래서 오픈룩도 그냥 갑자기 몇 가지 간단한 숫자로 정리해 봅니다. 크크; -o-

동아시아 민족의 유전적 관계

작년에 구글이 투자한 것으로 주목 받았던 23andMe가 올해 타임즈가 2008년 최고의 발명품으로까지 선정할 정도로 대박을 치면서 단일염기다형성(SNP)이라는 말이 더 이상 유전학 전문 용어가 아니라 "돌연변이"처럼 일반 상식에 들어가게 될 무렵… 유럽인들의 유전자 조사를 해 봤더니 지리적 관계와 신기할 정도로 일치하더라!하는 논문이 블로그계에서 한동안 인기를 끌었습니다. 이 논문에서 재미있었던 것은, 단지 유전자 변이 관의 관계만 가지고도 거의 지도를 재현할 수 있을 정도로 지리적 관계가 나왔다는 것도 있었고요. 핀란드가 유전적으로 유럽에서 뚝 떨어져 있다는 사실도 역사를 그대로 재현하듯 나왔다는 것입니다.

세계적으로 유럽 뿐만 아니라 인간 유전적 다형성 연구(HGDP), 세계 주요 인구의 유전적 다형성(HapMap) 등의 대형 프로젝트가 꾸준히 SNP 데이터를 수집해서 가공하고 연구하고 있습니다. 한국인은 앞의 두 프로젝트에서 여러가지 이유로 빠졌는데, 한국에서도 국립보건원생명공학연구원/대학 컨소시움에서 독립적으로 한국인의 단일염기다형성 데이터베이스를 구축해서 올해부터 뭔가를 발표하기 시작했습니다. 한편으로는, 며칠 전에 최초로 한국인 유전체 서열이 공개되어서 떠들썩 했는데요. 이제 한국에서도 외국 논문에서만 봤던 쌔끈한 그래프들을 직접 만들어 볼 수 있는 날이 점점 다가오고 있습니다!

그러던 참에, 어제 온라인 오픈액세스 저널인 PLoS ONE에 동아시아인의 유전적 구조에 관한 논문이 발표됐는데요. 앞에서 소개했던 유럽에서의 조사를 동아시아에서 재현한 것입니다. 한국, 일본, 중국 뿐만 아니라 태국, 필리핀, 베트남, 캄보디아 등등 많은 국가를 상대로 했는데, 실제로 이 연구에서 직접 만든 SNP 데이터는 한국인과 미국에 사는 아시아인 밖에 없고, 나머지는 다 앞에서 언급했던 HGDP와 HapMap에서 가져왔네요. 한국인은 아직 KHapMap이 발표되기 전에 시작했는지 직접 21명 피를 한국에서 뽑아갔다고 하는군요~ (요새 환율로 60만원 정도 하는 걸 공짜로… 아.. 부럽다.. ㅡㅠㅡ)

동아시아의 유전적 관계 doi:10.1371/journal.pone.0003862.g001

왼쪽은 그냥 동아시아 지도가 가물가물하는 사람을 위해 그려놓은 (;;) 것이고, 오른쪽은 유전정보의 관계만을 사용해서 PCA로 두 가지 기준 수치로 2차원으로 표현한 것입니다. 잘 비교해 보면 기가 막히게도 지리적 관계와 유전적 관계가 맞아떨어집니다! 이 조사에서 나타난 결과로는 한국인은 중국 한족과 일본인의 중간 쯤 되는데, 일본과 훨씬 더 가깝게 나타났다고 합니다. 그리고 시베리아 북쪽의 사하공화국에 사는 야쿠트족은 원래 역사에서 중앙 아시아에서 온 민족답게, 대부분 나라에서 동중국이 기원이라고 추측되는 가운데 야쿠트족만 따로 떨어져 나타났습니다.

이런 연구에서 실용적으로(?) 쓰려고 만드는 몇 가지 도출 정보로는 "유전변이 몇 개를 봐야 어느 나라 출신인지 알 수 있나?" 같은 게 있는데요. 사실 진짜 실용적이라기보다는, 23andMe같이 개인 유전체학으로 사업하는 데서 고객들의 흥미를 끌기 위한 서비스로 이것보다 재미있는 게 없죠. 그래서 이 논문에서도 그런 연구를 했는데, 한국인과 일본인을 구분하려면 5000개 정도 SNP를 보면 비교적 정확하게 구분할 수 있었다고 하고요. 논문에서는 미국에 사는 중국인들이 조상알아보기마커 1500개를 활용하면 싸게 자기 유전적 조상을 알아볼 수 있지 않겠냐 하긴 하는데.. 사실 유럽인들하고 달리 아시아 출신들은 자기 조상이 어디서 왔는지는 워낙 잘 알아서 새삼 신기할 것도 없지 않을까요? ;;

그나저나 어서 중국 김가장에 사는 사람들과 경주 김씨 종가 남자들 침을 받아다가 23andMe에 보내서 진짜 경주 김씨가 흉노족 후예인지 알아봐서 미스터리를 풀어주세요!

xkcd “파이썬” 3.0 수정판

며칠 전에 올린 파이썬 3.0 발표 소식에 까리용님께서 만화 속의 호환성 버그를 발견하셔서
3.0 지원 버전으로 만화를 고쳐봤습니다.

xkcd - Python (fixed for 3)

원본은 xkcd에서 온 것이고, 원라이선스는
CC 원저자표시-비상업적사용 2.5입니다.

혹시 손글씨 잘 쓰시는 분 있으시면 한국어판 번역도 하나 만들면 좋겠네요~
xkcd는 손글씨모양 글꼴을 쓰지 않고 모두 일일이 쓰는 게 매력이라, 역시 이것도 손글씨를
써서 입혀야 할 것 같아서.. ?

film Miss You Already 2015

파이썬 3

드디어 예정대로 파이썬 3.0 정식 버전이 나왔습니다.

파이썬 3.0은 그동안 이 블로그에서 꾸준히 소개해 와서 특별히 또 소개하지는 않고요. (2007년 3월 1일, 2007년 8월 31일, 2008년 8월 1일) 자세한 내용은 파이썬 3.0에는 뭐가 새로 나왔나!를 참조하시면 되겠습니다~

릴리스 안내문에서 언급한 간단한 바뀐점 목록을 번역해서 옮겨적어 봅니다.

  • 오래된 언어들의 지저분한 것들을 많이 고침
  • 오랫동안 쓰지 말라고 했던(deprecated) 기능들과, 중복되는 문법들을 없앰
  • 표준 라이브러리를 개선하고 구조를 바로 잡음
  • 문자열과 사전 같은 내장 객체들의 세세한 동작을 더 파이썬스럽게 바꿈
  • 그 외에 수많은 새로운 기능이!

파이썬 3.0 새 소식이 나오면 가장 많이 궁금해 하실 부분이, "지금 파이썬을 배우려면 3.0을 배워야 하냐 2.x를 배워야 하냐"하고, "프로그램이 다 2.x용으로 돼 있는데 3.0으로 어떻게 넘어가냐" 일텐데요.

우선 1번) 파이썬 3.0은 하위호환성을 상당 부분 포기했기 때문에, 당장은 업계에서 2.x를 계속 쓰게 될 것입니다. 파이썬 2.x와 3.0이 겉보기에는 문법 차이가 좀 있는 것처럼 보이지만, 파이썬의 기본 이념은 그대로 가지고 있기 때문에 우선 파이썬 2.x를 배운 다음에 3.0 문법을 나중에 배우는 것은 별 일이 아닙니다. 지금 배운다면 2.x를 배우고 쓰시다가, 좀 익숙해진 다음에 3.0에서 다른 게 뭔지 한 번 봐 두시면 됩니다.

2번) 파이썬 2에서 3으로 넘어가는 것은 거의 모든 파이썬 프로그램이 다 2~3년 안에는 겪어야 할 일이기 때문에, 미리 파이썬 3.0을 디자인하면서 자동으로 문법을 변환할 수 있을 것인가! 같은 것까지도 고려 대상이 됐습니다. 그래서 파이썬 3.0에는 2to3이라는 프로그램이 들어있는데, 이걸 사용하면 웬만한 것들은 대부분 자동으로 파이썬 3.0용 프로그램으로 변신할 수 있습니다. 그리고, 파이썬 2.6이 파이썬 3.0을 대비하기 위한 중간 계단으로 같이 나왔습니다. 파이썬 2.6을 쓰시면 파이썬 3.0에 아주 잘 대비된 프로그램을 만들 수 있습니다. 2.6에도 2to3이 같이 들어 있습니다.

참, 그리고 파이썬 3.0 최종판에는 아쉽게도 텔레파시 지원은 예정과 다르게 빠졌지만,
반중력 비행 기능이 생겼습니다. x로 시작하는 모 사이트에 따르면(!) 파이썬에서 import antigravity를
했더니 날 수 있었다고 합니다! (한 번 해 보세요!)

Watch Full Movie Online Streaming Online and Download

프로그래밍 과목 조교하기

저희 학교는 등록금이 상당 부분 세금에서 지원되는 대신, 모든 학기에 뭐든 조교를 하도록 돼 있습니다. 학과 사무실 조교 같은 자잘한 일 도와주는 조교부터 시작해서, 슈퍼컴 관리 조교, BK21 서류 관리 조교도 있지만 대부분은 수업을 돕는 학과목 조교를 합니다. 저도 지금까지 쭉 운도 없이 계속 학과목 조교를 해왔습니다. 지난 학기까지는 쭉 과학 기초과목을 해서 별로 특별한 것은 없었는데, 이번 학기에는 전산, 전자과에서 누구나 듣는 기초과목에다가 바이오를 짬뽕한 "바이오데이터구조"라는 과목을 맡았는데요. 과에서 2학년 필수과목이다보니 보통 저희 과 과목은 수강생이 많아도 10명 정도인데, 이 과목은 처음엔 수강생이 60명이 넘었습니다. (물론 이 안에는 학점을 쉽게 따려고 오는 전산과, 전자과 고학년들도 있긴 하죠. 🙂

처음 맡는 프로그래밍 관련 과목이라, 제가 학부 때 느꼈던 "조교가 이런 걸 하면 무척 좋지 않을까!"를 한 번 실행에 옮겨 보기로 했습니다. 사실 중간고사증후군보다 졸업논문증후군이 훨씬 심하죠 –;;

제가 맡은 부분은 학기 프로젝트 관리/채점 부분이라서, 이런 것들을 한 번 생각해 봤는데요.

  • 괜히 코드에 a = 1; 같은 것까지 주석 달아야 점수 잘 나온다는 생각은 안 갖게
  • 코드의 실행 결과가 제대로 안 나오거나 만들다 말았어도, 코드의 세세 부분을 보고 겪었을 만한 세부 경험을 기준으로 채점해서 프로그래밍을 잘 못해도 포기하지 않도록
  • 코딩 결과 자체보다, 코드를 돌려본 결과를 성능/속도/알고리즘 등 여러 측면에서 시험해 보는 과정과 원인 분석 과정, 개선 방안, 도메인 문맥에서의 의미 등을 살펴보게
  • 결과 보고서와 코드가 결국 조교 혼자 보라고 쓰는 것이라고 생각하면 영 지루하니, 어떻게든 피드백을 많이 줘서 누군가 읽긴 읽었구나 하는 느낌을 확실히 받도록
  • 프로젝트 진행 중에 학생들의 질문에는 스펙 설명같은 것 자체에 곁들여서, 진행과 관련된 현실적인 조언이나 관련 학문에서의 정보를 전달하게
  • 질문에 대한 답변이나 채점 결과는 가급적이면 빠를 수록 공부에 효과가 좋으므로 가급적 빠르게

그래서 프로젝트를 시작할 무렵에는 우선 가이드라인을 제시했습니다. 원래 내용은 꽤 길지만 요약하면

  • 주석 너무 많이 달지 마라, 주석이 적어도 잘 이해되는 코드가 좋은 거다.
  • 사소한 문제 때문에 진행하기가 힘든 상황이면, 그런 것들은 보고서와 코드에 표시하고 우선 상황을 대충 억지로 넘긴 다음에 시간이 날 때 다시 봐라.
  • 보고서에는 이런이런~~ 것들에 대한 토론이 있으면 좋다. (예시 10가지)

이렇게 시작하고 나중에 오는 질문에는 가급적이면 질문 자체에 대한 직접적인 답보다는, 왜 그렇게 되는지, 실제 프로젝트의 상황에서 어떤 경우가 있어서 그런 결정을 해야하는지 같은 것들을 가급적이면 같이 썼는데, 사실 처음 배우는 프로그래밍 과목에서 하기로는 좀 어려운 프로젝트다보니 제대로 전달이 잘 안 된 것 같아서 좀 아쉽기는 했습니다.

드디어 제출이 다가왔을 때는, 직접 내면 좀 번거로우니까 전자메일로 받기로 했는데요. 아무래도 전자메일에 큰 첨부파일을 보내다보면 사고도 많이 생기고 해서, 별도의 2가지 경로로 보낼 수 있게 메일 주소를 따로 2개를 마련해서 둘 다 보내도록 했습니다. 그리고, 그래도 혹시 또 메일은 알 수 없으니, 과목 홈페이지 게시판에 MD5 체크섬을 올리면 MD5 체크섬이 맞으면 나중에 제출해도 게시판에 올린 시간으로 인정하기로 했습니다. 그런데 정말로 한 학생이 5일 뒤에 메일이 안 갔냐고 자기 성적이 안 올라왔다고 그러는데, 메일이 유실됐는지 전혀 로그에서도 찾을 수 없는 일이 발생했습니다. 마침 게시판에 MD5 체크섬이 올라와 있어서 구원해 줄 수 있었죠.

결국 약간 늦은 학생도 있었지만 대부분 제출이 끝나고 채점을 했는데요. 역시 채점은 하다보면, 점수로만 표현하기는 좀 아쉬운 뭔가 그런 것이 있습니다. 그래서, 아예 성적표 사이트를 하나 만들어서, 각각의 개인의 제출물에 대한 피드백과 학생들의 부분별 상대적 위치를 알 수 있는 도표를 볼 수 있도록 했습니다. (실제 인물이 아니라 이 글에서 인용하려고 가상의 학번을 만들었습니다.)

피드백은 직접 일일이 쓰기는 좀 많아서, 세부항목별로 따로 Z-score를 계산해서 낮은 순서로 몇 개, 높은 순서로 몇 개를 추려서 "좀 더 열심히", "참 잘했어요" 아래에 코멘트를 자동으로 쓰게 했습니다. 뭐 그런대로 괜찮게 나오더군요. 🙂 하나 재미있는 것은, 웹서버 로그를 보니까, 자기 성적만 보고 가는 학생은 30% 정도 밖에 안 되고, 나머지는 친구 학번을 다 넣어보고 가더군요.;; (친구 관계 네트워크라도 그릴 수 있을 정도!)

이제 프로젝트가 끝나긴 했는데, 제가 맡은 부분이 기말고사가 또 남아있어서.. ㅡㅡ; 또 하려니 막막하네요 -ㅇ-; 그래도, 학생들이 그냥 조교라서 하는 아부도 많이 섞여있겠지만 제출하는 메일이나 게시판 댓글에서 도움이 많이 됐다, 좋은 경험을 할 수 있었다, 많은 것을 배울 수 있었다. 라고 해 줘서 무척 힘이 났습니다. 이제 졸업 준비를 해야하는데.. -ㅇ-;;