먹고 사는 이야기2010. 10. 5. 13:01

 지난달에 Amazon Web Services(AWS) CloudFront API의 새 기능으로 invalidation request 가 추가되면서 우리 쪽 서비스(유저스토리북)에도 적용을 하려고 준비 중이다.

 문제는 invalidation의 concurrent request 제한 기본값이 3이라는 건데,
 dynamic하게 수정되는 image 가 많이 많들어지는 서비스 특성상 해당 제한으로는
 제대로 활용 할 수 없다는 판단이 들었다.

 찾아보니 API document 에는 관련 내용이 아예 없고,
 FAQ 를 찾아보니 제한이 있다라는 정도의 언급만 있었다.

 하여.. 하루 종일 이에 투자하였는데.. 구글링으로도 별 얘기도 없고 (당연한가.. 이제 한달 되었으니)
 어찌어찌하여 찾은 request form

 http://aws.amazon.com/cloudfront-request/

 일단 요청 해 두었으니 결과를 기다릴 뿐.


 사용할 때 마다 느끼는 거지만, AWS는 개발 리소스 정리를 참 개판으로 하는 듯.


Posted by moriah
먹고 사는 이야기2010. 7. 7. 13:10

 요며칠 트윗믹스에 http://www.tweenbird.com 라는 링크가 많이 올라오고 있다.
 트위터 클라이언트인데, 뭔가 싶어 들어가 봤더니,

 그냥 흔해빠진 웹 클라이언트일 뿐이었다. 파이어폭스를 제대로 지원 안하는건지,
 레이아웃도 깨지고 속도도 시원찮고, 기능이 딱히 좋아보이지도 않는데

 왜 이리 많은 소개 트윗이 있나.. 궁금했는데

 twitter access 를 인증하는 순간 이놈들 말도 없이 남의 status 를 업데이트 친다.
 트윈버드에 대한 광고로.


 어쩌면 이리도 양아치같을 수 있나.
 자기가 만든 사이트 많은 사람이 이용하길 바라는 마음,  모르는 바는 아니지만,

 고객에게 그냥 광고를 노출시키는 것도 아니고,
 동의도없이 고객의 follower 의 timeline 을 광고로 도배시키다니?


 고객에게 직접 광고를 노출하는 것은 그 고객이 그 프로그램을 사용하는 정당한 댓가라고 볼 수 있다.
 하지만 고객의 타임라인에 광고를 노출하는 것은,
 해당 프로그램하고는 일면식도 없었을, 고객의 follwer 들이 1차적 피해자요,
 그로 인해 follower들에게 자신의 평판이 낮춰질게 뻔한 해당 고객 역시 매우 큰 피해자다.


 많은 사람이 쓰길 바라거든, 잘 만들어라.
 양아치짓으로 UV는 올릴 수 있겠지, "고객의 수" 까지 올릴 수는 없다.


Posted by moriah
먹고 사는 이야기2010. 7. 7. 12:37

 최근 몇일간 트위터 API 에 문제가 좀 있었다.
 .. 아니 지금도 물론 계속되고 있는데

 고로 트위터 API를 사용하는 트윗믹스 서비스도 동시에 불안해지는 문제가 발생.




인터넷 서점의 API 들을 이용해 책 정보를 가져와야 하는 유저스토리북에도 비슷한 상황이 있었다.
초기에 국내도서를 검색하기 위해 사용했던 알라딘이 지난 4월 22일부터 24일까지 사이트 전체가 예고없이
폐쇄된 적이 있었고, 부랴부랴 인터파크 쪽으로 수정했었다.

내가 관리중인 두개의 서비스인 유저스토리북, 트윗믹스가 모두 API 기반으로 돌아가다 보니
(특히나 트윗믹스는 더) API쪽에 문제가 생겨버리면 참 난처하다.



유저스토리북에도 사용자들이 API 를 제공할 것을 요구하는 글들이 가끔 올라오고 있는데,
아직 구체적인 계획은 세우고 있지는 있지만, API를 제공할 시기가 되면,
좀 더 많은 고민을 하여, 그 난처함을 주지 않도록 노력해야겠다고 다시 생각한다.


Posted by moriah
먹고 사는 이야기2010. 3. 18. 14:19

 TNC에서는 웹에서 텍스트 박스의 입력값에 대한 escaping이 적절이 처리되고 있는지
 확인하기 위해서 수행되었던 g-test 라는 것이 있었습니다.

 유저스토리랩에서도 해당 테스트는 사이트 구축 후 반드시 확인해야 하는 것 중 하나인데,
 
 우리 서비스가 아니라도, 신규 오픈하는 서비스가 있으면 한번식 해보기도 합니다.
 요즘은 프레임웍 단에서 그런 문제를 대부분 해결 해 주기 때문에 문제가 생기는 경우가
 잘 없는데요,

 어제 오픈한 네이트 커넥팅 딱 걸렸네요.

 참고로 아래 두 개는 같은 메시지입니다.

<네이트 커넥팅화면. 여긴 정상>

<하지만 네이트 메인으로 갔더니..>



두 개발팀간 커뮤니케이션 미스가 있었나 봅니다. ~_~


Posted by moriah
먹고 사는 이야기2010. 3. 17. 19:09

 자세한 사항은 아래 블로그를 참고하세요

 http://www.userstorylab.com/story/39



 네, 저와 함께 일하실 수 있습니다!

 망설이지 말고 롸잇 나우!


Posted by moriah
먹고 사는 이야기2010. 3. 9. 11:50

파이썬 장고의 HttpResponseRedirect 사용시
사파리 브라우저에서 비정상적인 딜레이(30초 가량)가 나타날 때.

redirect url 을 http:// 로 시작하는 호스트명을 포함한 url을 입력하면 문제가 해결됩니다


--------------------

PHP에서도
header ("Location: ..."); 사용시 같은 문제가 발생하며,

헤더에 Content-Length: 0 을 추가해 주는 것으로 문제가 해결된다고 합니다
(해 보진 않았습니다. 1번 해결책을 찾다가 찾았을 뿐..)



어째서 파이썬과 PHP에서의 해결책이 다른건지는
이해가 안 되긴 하네요.
참고로 장고 헤더에 content-length 를 추가하는 것만으로는 해결이 안 되었습니다.


Posted by moriah
먹고 사는 이야기2010. 2. 18. 18:41

구글 버즈 서비스가 런칭된지 몇일 지났음에도 불구하고.. 안 써보고 있다가
오늘 한번 들어가 봤는데..

<구글 버즈를 처음 실행시키면 나오는 화면, "확인" 버튼을 누르기 전까진 계속 나오는듯..>


아무리 생각해도 "나" 와 "사람들" 사이의 화살표의 방향이 어색하다.

위쪽 리스트에 있는 사람들은 나에게 정보를 "주는" 사람들인데,
정보의 방향을 생각 해 보면, 당연히 나 쪽으로 정보가 와야 정상이 아닐까?

아래쪽은 그 반대가 되어야 할 테고 말이다.

"사람 중심"으로 생각하면 이 화살표가 말이 될 수도 있겠지만,
버즈 서비스 자체가 정보의 흐름이 핵심이니
(스크린샷에는 없지만, 바로 아래쪽 문구에는 17명에게 소식 "받는중" 이라고 나온다.)


이 화살표는 아무리 생각해도 반대로 되어있다.


새삼 느낀다.
사소한것에 대한 세심한 배려의 중요함을.


Posted by moriah
먹고 사는 이야기2010. 2. 9. 12:15

여섯 단계의 분리(Six Degrees of Separation) 라는 유명한 이론이 있다.

간단하게 얘기하면,
"무작위의 두 사람을 선택해서 서로를 찾아갈때,
몇 단계의 링크를 통해 두 사람 사이가 연결 될 수 있을까?"
라는 질문에 대한 실험이다.

우리가 흔히 경험하는 "세상 참 좁네" 라는 것을 느낄 때
그게 과연 "얼마나 좁나?" 에 대한 해답을 주는 실험이라고 볼 수 있는데,

결과는 평균적으로 대략 여섯 단계 - 어떤 실험에서는 일곱 단계 - 를
거치면 지구상에 존재하는 아무개와 아무개 사이의
링크를 발견할 수 있다는 것이었다.

( 보다 자세한 내용이 궁금하면 wiki를 참고하자
   http://en.wikipedia.org/wiki/Six_degrees_of_separation )

------------------------------------------------------------------

회사 일로 한국 트위터 유저의 목록을 구하는 일을 해야 했었는데
내가 생각한 방법은

 + 나로부터 시작
 + 내가 following 하는 사람들의 목록을 긁고
 + 그 사람들 중 한국 사람들을 분석
 + 한국 사람의 경우 목록에 추가하고 다시 그 사람이 following 하는
   사람들로 확장

이렇게 하고, 총 다섯 단계까지 확장하도록 간단하게 코드를 작성했다.

프로그램을 돌리고 나서 놀라운 결과를 접하게 되었는데,
최종 parent 인 나는 단지 여섯 명을 following 하고 있는 상황에서

불과 한시간만에 만명 이상의 트위터 한국어 사용자의 목록을 얻을 수 있었다.

더욱 놀라운 것은, 만명을 돌파하던 그 순간까지도,
내 인맥 트리 속에서는, 내 바로 아래 child 여섯명 중
단 한명에 머무른 상태에서 검색했을 때의 상황이었다는 것이다.

즉, 네 단계가 채 넘어가기도 전에 만명으로 확장이 되었다는 얘기인데,

Korean twitter User Self Intro 에 등록 된 한국어 트위터 사용자 목록이
13,170명 밖에 되지 않는다는 것은 감안하면, 사회적 네트워크의 힘이
절로 느껴지는 대목이다.

(이 글을 쓰면서 알게 된 것인데, 위의 Korean twitter User Self Intro
사이트의 디자이너 중 한명이 저와 같이 일을 하고 있는 hi8ar 님이라니
세상 좁다는 걸 또다시 느낀다)

------------------------------------------------------------------

위에서 얘기한 "여섯 단계의 분리" 이론은 꽤 유명한 얘기라서,
이 바닥에서 종사하는 나에게는 단지 "머리로 알고" 있던 이론이었지만,
관련해서 재미있는 결과를 두 눈으로 보게 되니 참 신기하기도 하고,
재미있기도 하다.

교통/통신의 발달 이전의 세계에서 여섯 단계로 링크가 되는 것은
아마 상상하기 어려운 일이었을 것이다.

여섯 단계의 분리도 결국 전화나 이메일 등의 통신수단의
발전으로 가능했을 것이라는 사실을 생각 해 볼때,

SNS의 발달로 인해 한 사람이 가지고 있는 링크의 숫자가 늘어난 것을
생각 해 보면, 이제 그 단계는 더욱 줄어들게 되지 않을까 생각 해 본다.


이런 멋진 바닥에서 일을 하고 있으니, 기쁘지 않을 수가 없다.




내가 이 글을 작성하는 동안에도, 로봇은 열심히 일하여
Korean twitter User Self Intro의 사용자보다 많은 한국어 트위터 유저를
검색했다. (현재 15,810명) SNS의 놀라운 힘이여!

Posted by moriah
먹고 사는 이야기2009. 12. 1. 18:32

 유저스토리랩의 첫번째 서비스인
 책으로 표현하는 나, 유저스토리북 서비스가 오늘 새벽 0시에 오픈하였습니다.

 웹 서비스를 오픈 한 경험은 지금까지도 적잖이 있습니다만,
 개발에 관련해서 혼자의 힘으로 이 정도 규모의 서비스를 오픈하는 것은 처음이라

 참 많이 긴장되고, 걱정도 되었습니다.


 그래도 윤호님과 봉간님의 재미있는 기획, hi8ar님의 멋진 디자인에 힘입어
 호평속에 서비스가 시작되어 뿌듯합니다.



 현실은 오픈한지 20시간쯤 지난 지금까지도 폭주하는 트래픽과 속출하는 버그 속에서
 여전히 허우적대고 있습니다만.. 말이죠 ㅜㅠ

 그런고로, 오늘도 야근 결정입니다!


Posted by moriah
먹고 사는 이야기2009. 11. 30. 23:10
To see in English, scroll to page bottom

UserstoryBook 서비스에서 이용되는 모든 프로필 이미지 조정은
Google account에서 하는 방식과 같이
사용자가 범위를 지정하여 자르고 조정하도록 되어 있다..

그러한 까닭에 이미지를 저장할때, 일정 비율로 resize 한 다음,
해당 resize 된 이미지를 새 이미지 파일에 붙여넣는 방식으로 처리하는데
이때 이미지에 한하여 이미지 품질의 저하가 일어나는 현상이 나타났다.

몇 시간을 구글링을 해도, 비슷한 질문은 많았지만 딱히 뚜렷한 대답이 없었다.
(그렇기 때문에 문제를 해결한 지금 내가 포스팅하고 있기도 하고..)

범인은 GIF 팔레트.
PIL에서 GIF 를 저장할때 Browser-safe color palette로 변환하기 때문이었다.

해결책으로 이미지 형태가 gif 인가를 테스트하여 gif인경우
resize 등의 작업을 하기 전에 이미지 포맷을 변경하여 주면 된다.

(참고로 본인의 경우, 몇 시간동안 씨름하던 gif 가 잘 변환되는 기쁨에 젖어
변환 gif 테스트를 하지 않았던 코드를 그대로 썼더니,
gif 품질은 좋아졌지만 jpg 등에서 오히려 화질 저하가 되는 문제점이 있었다.
gif 테스트는 꼭 거쳐야 한다.)

코드는 다음과 같다

_thumb = Image.open(_filename)
if (_thumb.format == "gif"):
_thumb = _thumb.convert("P", dither=Image.NONE, palette=Image.ADAPTIVE)
_thumb.save(_filename_converted, "png", quality=100)
_thumb = Image.open(_filename_converted)
# 이 부분에 원하는 처리를 하면 됩니다.


PS) 왜 궅이 _thumb 를 저장하고 다시 오픈하는 삽질을 하시냐 물으신다면...
저도 모르겠습니다만, 꼭 그래야 되더군요 -_-;;



By default, Python Image Library (PIL) uses web safe palette when you
try to work with GIF images and this degeades image quality.

To remedy this situation; Convert a image to a different palette
before you deal with gif like below

_thumb = Image.open(_filename)
if (_thumb.format == "gif"):
_thumb = _thumb.convert("P", dither=Image.NONE, palette=Image.ADAPTIVE)
_thumb.save(_filename_converted, "png", quality=100)
_thumb = Image.open(_filename_converted)
# Put your code(s) here.


You may wonder why I save the image and open it again,
but When I didn't do this, image conversion didn't work fine.

If you have any idea about this, please email to: binseop__at__gmail.com. Thank you in advance.

Posted by moriah