글쓰기 메뉴

씬디에 대해서

씬디는 "민주적 글쓰기"를 위한 환경이 필요하다는 생각을 배경으로 시스템이나 기술의 측면에서 내가 기여할 수 있는 부분이 어떤 것이 있을까라는 고민의 결과물입니다.

"민주적"이라는 표현을 조금 더 쉽고 명확하게 다듬을 필요가 있겠습니다만 글에서 사용된 의미는 "누구나 자신의 생각과 의견을 나눌 수 있는 공간이 필요하다" 입니다.


1. 익명

계정이 없어도 글을 쓸 수 있고 기본적으로 익명으로 사용되는 이유는 아무얘기나 책임감없이 해도 좋다는 뜻이 아니라, 글을 읽는 사람이 글쓴이의 영향력에서 벗어나 글을 글로 받아들였으면 좋겠다는 생각의 일차원적 해석입니다. (오글거리는 글을 누구도 모르게 쓰고 싶다는 개인적인 욕망도...)


반대로, 글쓴이의 배경과 역사가 글에는 없는 다양한 의미를 가질 수 있다는 점도 생각하고 있기에 머지않아 닉네임이나 프로필사진, 자기소개 등으로 자신을 드러내는 것이 가능하도록 할 것 입니다.


그리고 하나 더.

"작가"와 "작품"이라는 단어가 사용되는 자리에 "사람"과 "글"을 넣고 싶습니다.

작품을 만들기 위한 글쓰기가 아니라 글을 쓰기 위한 글쓰기였으면 좋겠고 글빨이 있거나 없거나, 사회적 명성이 있거나 없거나 누구나 글을 쓸 수 있었으면 좋겠습니다.


2. 디자인과 컨셉

심심하고 깊이 없는 단순한 디자인은 디자이너가 없어서 글을 쓰고 읽는데 집중시키고 싶다는 생각의 표현이고 두루뭉실한 컨셉 - 글이 쓰고 싶을 때, 글 쓸 곳이 없을때 - 은 마케터가 없어서, 글빨이 부족해서 내용과 용도에 제한이 없다는 생각을 전달하고 싶어 사용하고 있습니다.


+)

"누구나 작가가 될 수 있습니다"가 아니라, "글을 쓰는데 자격이란게 있을리 없다", "너는 이미 충분하다", 라는 메시지를 전달하고 싶고, "작품이 되는 공간"이 아니라 "많은 사람들의 생각이 담겨있는 공간"이라는 메시지를 전달하고 싶은데 간단하고 멋지게 표현하지 못하겠습니다. 좋은 생각있으시면 좀 도와주세요.


3. 목표 (2015. 11~)

"민주적 글쓰기" 라는 목적을 이루기 위한 현재의 목표들은 다음과 같습니다.

1) 사용자 수 20,000% (200배) 증가

    에.. 이것은 서비스의 시작 시 사용자가 저 혼자 였으니 200명이 목표라는 얘기입니다...

2) 팀 구성

    민주적 글쓰기 공간의 필요에 공감하는 누구나를 대상으로 5명+ 정도의 팀을 구성

    가진 것도 없고 수익도 없으니 씬디의 지분을 나눠주고 종신계약! 모셔야지  

    관심있으신 분께선 hah@codemakes.com 으로 이메일 ㄱㄱ

3) 다른 목표는 사용자와 팀이 꾸려지면 ㄱㄱ!

    길게는 3개월, 짧게는 2주일 정도로 달성가능한 목표들을 세워야




소설을 써야겠다면 써라. 하지만 돈을 버는 건 우연한 사고라고 생각해라. 보상은 쓰는 것 자체로부터 얻어라. - 펄 S. 벅


pearl_buck.jpg



어디서 왔지?
[["synd.kr", 439], ["search.naver.com", 1], ["m.facebook.com", 30], ["unknown", 2206], ["www.google.com", 2], ["lm.facebook.com", 1], ["www.google.co.kr", 6], ["www.facebook.com", 20], ["m.search.naver.com", 1], ["www.synd.kr", 1]]
다른 글들
1 2

무명씨 인사합니다.

새벽에 내린 하얀 눈에, 첫 발을 내딛는 장난꾸러기 아이처럼,
하얀 벽에 무언가 낙서하고픈 그런 장난기 가득한 얼굴로,
이 글을 남겨 봅니다.
무명씨 인사드립니다.
2 1
Square

씬디 시즌투를 시작한다

시즌1이라는게 없었는데 시즌2를 시작한다니 놀랍군.
어쨋든 시즌2는 다음과 같이 요약됨.
숨겨진 감성이든
누군갈 욕을하든
알게된 지식이든
맛있는 사진이든
자꾸쓰면 잘써진다.
잘쓰려면 자꾸쓰자.
글쓰기는 잔근육빨.
1 1
Square

SSL 인증서 설치 및 적용
스마트폰 ssh 접속으로 5분만에 완료?!!?!
그것도 무료??!!?!??!

이건 누구의 얘기도 아닌 제 얘기. 제가 씬디에 https 를 적용하기 않고 버틸 수 있던 합리적(!) 이유들.

하지만 계속 눈에 밟히는....
그리고 괜시리 갖고 싶은 녹색 자물쇠
그리고 오늘.. Let's encrypt 와 EFF 의 Certbot 으로 인증비용없이 뻥안치고 스마트폰으로 5분만에 SSL 도입 끝.
물론 후속 설정들과 이미지, 외부 소스 등에 대한 url 점검과 설정이 필요했지만 이건 레알 신세계.
근데 이거 나만 몰랐어???
불과 몇달전에도 클라한테 인증서 구매시키고 서버세팅했었는데???
블로그 참 열심히 하시는 존경스러운 outsider 님이 2015년에 베타를 경험했던 포스팅은 여기.
이후 EFF 에서 Certbot 에 Apache, Nginx 등의 소프트웨어와 서버 OS 를 플러그인으로 개발하면서 지금은 서버설정까지 Certbot 이 완료시켜주고 있음.
설치는 EFF Certbot 페이지에 가서 자신의 서버와 웹서버를 선택하면 나오는 메뉴얼대로 (대략 5 ~ 7 커맨드) 하면 끝.
난 심지어 지하철에서 스마트폰으로 ssh 연결해서 설정 끝냈음. ㅇㅇ
내 케이스는 nginx / ubunt 14.04 LTS 로 실제 설치 커맨드 히스토리는 아래와 같음. 아래가 전부임.
이렇게 하면 1) 이메일 주소 입력하세요. 2) 이메일 수신 OK? 3) (서버레벨에서 확인된 도메인 중) 어떤 도메인 쓸꺼임? 4) https 만 씀? 80도 같이 씀? 이렇게 4개 물어보고 답하면 된다.
이후에 nginx 에서 http 접속을 https 로 리디렉션 시키던지 Rails 에서 모든 연결에 ssl 을 적용하는 등의 설정을 하면 됨. 이건 별도의 글로 작성.
이제 Let's encrypt 라는 회사를 살짝 알아보자.
리눅스 재단 (Linux Foumdation) 과의 협력프로젝트라고 사이트 상단에 '이미지'가 박혀있는데 어떤 관계인지는 확인하지 못했다.
ISRG 라는 캘리포니아의 기업에서 "HTTP" 보안이 기업들과 사용자들의 비용절감에 직간접적인 도움이 된다는 생각으로 시작했다고한다.
기본적으로 ACME (인증관리자동화환경) 을 보고 있고 실제로 해당 목적을 훌륭하게 수행하는 솔루션이 있다. letsencrypt 에서 개발하다가 현재는 EFF 에서 개발하고 있으며 패키지이름은 Certbot. 인증절차 및 인증서 설치 이후 갱신을 "명령어 하나로" 처리해준다.
SSL CA 로 중요한것은 얼마나 많은 주효한 클라이언트가 이를 인증된 CA 로 받아들이는가 하는 부분인데 해당 목록은 이곳 링크에서 확인할 수 있고 파폭 2.0+, 크롬, 익스 XP3+, 엣지, 안드 2.3.6+, 맥 사파리 4.0+, iOS 사파리 3.1+ 등등 그냥 믿고 사용해도 되는 수준이다.
또 하나는 letsencrypt 의 생존력인데.. 인증서가 무료다보니 기업의 유지가능성도 살펴보는게 좋겠다.
기업 스폰과 기부금으로 운영되는 것으로 보이며 공식홈페이지에서 스폰서들은 소개하고 있다.
문서상으로 년간 30만불(3년유지) 또는 35만불을 지원하는 플래티넘 스폰서는 mozilla, Akamai, SISCO, EFF, OVH, chrome 등의 6개사이고 그 외 IdenTrust,  포드재단, 페이스북, 디지털오션, 볼터, 쇼피파이 등 다수의 스폰서들이 있다.
역시나 결론은 그냥 믿고 쓰면 되겠군이라는 결론 ㅋㅋ
EFF 는 Electronic Frontier Foundation 의 약자로 한국위키 이름이 "전자 프런티어 재단" 이다.

뭔가 틀리진 않았지만 우습달까?
EFF 는 '디지털 월드' 에서 사용자들의 자유를 지키기 위해 1990년 설립된 비영리 재단으로 블루 리본 캠페인도 여기서 시작했다고 한다.
물리적으로는 관계되기 힘든 연결고리 없는 사람들과 조직이 어느날 나에게 직접적으로 혜택을 주는 일들이 많아지는게 참 재밌고 고마울 뿐이다.

진짜 고마우면 Donate! 
Support Let's encrypt
Support EFF Certbot
4 0
Square

언론사의 위기는 언제 찾아올까?

해외의 미디엄이나 국내의 브런치 같은 "글쓰기 플랫폼" 서비스는 블로그 스피어의 무덤위에서 Feedly, Flipboard 같은 어그리게이션, 구독 서비스들이 풍기는 죽음의 냄새를 양분삼아 Pinterest, Pocket 등의 일부 생산 서비스의 강점을 영양분으로 "완결된 디지털 콘텐츠 경험"을 제공하는 서비스다.

이들은 영상분야의 1인 크리에이터들과 MCN 사업자들의 바탕이 되는 유튜브와 같은 포지션에서 다른 언어를 사용하는 크리에이터들에게 토양을 제공하고 있으며 생산과정이 통합되어 있다는 차별화된 강점도 지니고 있다.
부족한 점이라면 아직 크리에이터들에게 유튜브의 규모로 수익을 돌려줄 수 없다는 정도.
나는 이런 플랫폼의 발전이 지난 5~7년간 듣기만 했던 "언론 위기"의 실체라고 본다.
모든 언론사가(그야말로 모든 언론사가) 카드뉴스의 적절한 사이즈와 가독성이 높은 폰트에 대해 고민하고, CMS와 기술 시스템을 문제의 중심에 놓고 얘기하고 있는 지금 이 순간에도 미디엄과 브런치는 "디지털 콘텐츠 전문가"들을 훈련시키고 있다.
카드스택이니 스노우폴링이니, 인터렉티브니 하는 것들은 애당초 고민의 대상이 아니다. 글쓰기에 집중할 수 있는 환경은 지속적인 생산을 가능케하고 충분히 연결되어 있는 독자들과 이들의 피드백은 어떤 구성과 형식을 취해야할지 체득할 수 있는 환경을 제공한다.
언론사들이 버즈피드나 피키캐스트 같은 미디어에 대해 상상할 수 있는 가장 방어적인 해석을 내놓고 서로 어깨를 두드리며 위로하는 것 처럼 미디엄과 브런치가 뉴스와 무관한 비전문가들의 텍스트 놀이라고 판단하고, 그래서 이들이 경쟁자가 아니라고 생각하는 순간 소문처럼 떠돌던 그 위기가 반드시 찾아 올 것이다.
뜬금없이 개인적인 경험을 애기하자면, 난 저서 활동이 활발한 글쓰기 전문가인 언론인들을 신뢰하고 존경했으며 그 전문가들이 만든 기사에 그들에 대한 신뢰를 투영했었기 때문에 그들이 만드는 뉴스와 소속된 언론사에 대해 믿음을 가질 수 있었다.
하지만 지금.
기자들은 디지털 환경에서 여전히 "글쓰기"에 대해 전문가일까?
독자들이 생각하는 디지털 콘텐츠 전문가들은 누구일까?
아래는 조금 전 알렉사에서 확인한 브런치의 트래픽 랭크다. 
그리고 아래는 같은 시각에 확인한 피키캐스트의 트래픽 랭크다.
접는 서비스가 더 많은 다음카카오니까 모기업의 영향력이라는 이상한 생각은 접으시고, 왜 브런치가 성장하고 있는지, 지금 시점에 미디어는 무엇을 준비해야할지 다들 고민해보자.
1 1
Square

[3분 복붙] 기사면 랜딩 PV 2배로 올리기.
브라우저 뒤로가기 제어.
이딴거 만들지 말자.

대부분의 서비스가 보다 많은 활동 사용자를 목표로 함은 분명하다.
하지만 얼마나 많은 활동 사용자가 있는지를 가늠할 수 있는 지표에 대한 목표설정은 좀 다른 얘기라고 생각한다.
심지어 그 목표의 달성을 위한 실현 과정이 사용자들을 열받게 만든다면 이 얼마나 근시안적 추태인지...
PV (Page View, 페이지 조회수) 에 대해 강한 집착을 보이는 국내 언론사들이 근래 "뒤로가기"가 실행되는 경우 이전 페이지로 보내지 않고 메인페이지로 이동되도록 하는 기능을 속속 도입하고 있더라. (좀 됐지.. 내가 잠수였던거지..)
사용자 입장에선 개빡치는 UX. 
그렇지만 남들이 한다니까 자기들도 해달라는 클라이언트의 등장은 당연지사.
해당 기능을 도입한 사이트들을 둘러보니 대부분 광고대행사 등이 제공한 스크립트를 사용하는 것 같더라.
메인페이지를 거치는 것도 짜증나는데 그 중간에 광고까지 껴있으니 개짜증..
이딴거 누가 안만들면 좋겠는데 일개 개발자가 뭘 할 수 있겠냐 고민하다가...
클라이언트에게 만들어준 간단한 스크립트를 모두에게 제공하고 너도나도 다들 도입해서 더 많은 사용자들이 더 빠르게 빡돌게 만들면 슬슬 이딴 쓰레기 같은 기능을 버리지 않을까라는 골때리는 결론에 도달했다.
0.
jQuery 를 사용하고 있다고 가정한다.
1.
아래의 코드를 기사 페이지 등 기능이 동작될 페이지에서 로드되는 js 파일에 추가한다.
3번 라인 정규식 패턴안의 synd\.kr 부분은 자신의 도메인으로 변경한다.
2.
기능이 동작될 페이지 HTML 코드 사이에 아래의 코드를 삽입한다.
완성!
코드는 단순해서 쉽게 이해할 수 있겠지만 몇몇 부분을 설명해보자면...
1. pushState 이후에 replaceState 를 다시 콜하는 이유.
pushState 만으로 history 를 조작할 경우 firefox 에서 백버튼이 골때리게 반복된다.
external > page > main > page > main > external
replaceState 를 다시 콜하면 아래와 같이 의도한대로 동작된다.
external > page > main > external
2. popState 이벤트를 사용하지 않고 hashChange 를 사용하는 이유
페이스북 앱 등 in app browser 를 사용할 때 해쉬가 없는 경우 뒤로가기 실행시 popState 이벤트가 발생되지 않음
해쉬를 추가해야 뒤로가기 실행 시 기존 URL (해쉬없는) 로 페이지 변화없는 이동이 발생하고 이 타이밍에 hashChange 가 콜 됨.
또한, Safari 9버전 이하에서 popState 가 지멋대로 fire 됨.
3. 이건 좀 쓸데없는 설명이지만 location.href 는 history 에 기록되고 location.replace 는 history 에 남지 않기 때문에 replace 를 사용해야함.
지원브라우저
웹이고 모바일이고 html5 history api 를 지원하는 브라우저 (http://caniuse.com/#search=history) 에선 기본적으로 모두 동작된다고 기대할 수 있으나 아이폰 크롬에서 동작안됨.
그 외 페이스북 앱 등 인앱에서 웹뷰를 사용하는 경우도 정상 동작.
Tested.
Microsoft Edge.
Microsoft IE 11.
Firefox 52.x (Windows)
Firefox 47.x (Linux)
Firefox 52.x (Mac)

Firefox 52.x (Android)
Firefox 6.x (iOS)
Chrome 57.x (Windows)

Chrome 48.x (Linux)
Chrome 56.x (Mac)

Chrome 57.x (Android)
Chrome 57.x (iOS) *동작안됨
Safari 10.x (Mac)
Safari 10.x (iOS)
Android 6 browser 4.x
Facebook App
자 이제 자리에서 일어나서 팀장이든 부장이든 상사에게 "저희 PV 를 2배로 올리겠습니다!" 라고 보고하고 보다 많은 사용자들의 빡을 돌려(?) 주삼. 
2 4
Square

차별이 뭔지 못 배웠고
차별금지법도 없고

언젠가 무슨 이유였는지 모르겠지만 별로 친하지 않은 열댓명이 모였다. 다들 놋북을 꺼내놓고 작업도 하고 얘기도 나누고 있었다. 새로 들어온 누군가가 크고 까만 놋북을 꺼낸다. 앉아있던 사람 중 하나가 웃음을 터트린다.
"푸하 그거 뭐에요? 와~ 나 윈도우 놋북 진짜 오랬만에 봐. 거기서 개발 잘 돼요? 여기도 다 맥이고 요즘 만나는 사람들은 다 맥 쓰던대"
내가 소심하다고 생각해본적은 없는데 가방속에 들어있는 놋북을 꺼내려다가 슬며시 다시 집어넣었다. 나도 윈도거든. 
"어? 형도 윈도써요? 개발 가능?" 
이 지랄하고 깝치면 안 때릴 자신이 없어서 못 꺼내겠더라.
어떤 OS 를 사용하는지를 이유로 자연스럽게 사람을 구분하고 구별하는게 니가 싫고 차별을 막기 위한 교육도 법도 없는 나라도 밉다.
5 3

꽤나 쾌적하지 못한 환경이군요

운영자님 봐주세요.
요원 106 이하 게스트들이 아직도 글인지 광고인지 모를 것을 지속적으로 쓰고 있네요. 단순한 광고가 목적이 아닌 불쾌함을 목적으로 한 글이라면 목적을 초과달성한 것이 아닐까 싶을 정도로 매력적인 글일 것이고, 광고가 목적이었다면 html 태그가 안 통하는 이상 실패입니다만, 아마도 후자라는 생각이 듭니다. 아마 지금까지의 대처는 두가지였을거라 봅니다.
1. IP 블럭. 아마 실패할겁니다. 이 친구들 약삭빠르게 유동 IP를 사용할테니까요.
2. ID 차단. 역시나 위와 같은 이유로 실패할 겁니다.
그러므로 쾌적한 씬디가 되기 위해 아래의 두가지를 제안합니다.
1. ID나 IP가 아닌 키워드를 블럭하는 겁니다. 지금 계속 불법 도박 사이트를 광고하고 있는데, 글을 쓸 때 '바카라, 사다리'를 금칙어로 지정하는 것만으로 글을 복붙하는 것은 막힐 겁니다. 이렇게 몇몇 키워드를 블럭하는 것으로 광고글을 꽤 막을 수 있을 것으로 보입니다.
2. 고소하세요. 스샷은 확보해두었지만 운영자님이 직접 고소하는 것이 맞다고 봅니다. 관련 근거는 아래와 같으니 사이버수사대에서 협조 해 줄 것입니다.
정보통신망 이용촉진 및 정보보호 등에 관한 법률 제50조의7(영리목적의 광고성 정보 게시의 제한) ① 누구든지 인터넷 홈페이지 운영자 또는 관리자가 구체적으로 밝힌 거부의사에 반하여 영리목적의 광고성 정보를 인터넷 홈페이지에 게시하여서는 아니 된다.
② 인터넷 홈페이지 운영자 또는 관리자는 제1항을 위반하여 게시된 영리목적의 광고성 정보를 삭제하는 등의 조치를 할 수 있다.
제76조(과태료) ① 다음 각 호의 어느 하나에 해당하는 자와 제7호부터 제11호까지의 경우에 해당하는 행위를 하도록 한 자에게는 3천만원 이하의 과태료를 부과한다. <개정 2011.3.29, 2012.2.17>
(중략)7. 제50조제1항부터 제3항까지의 규정을 위반하여 영리 목적의 광고성 정보를 전송한 자
8. 제50조제4항 또는 제5항을 위반하여 광고성 정보를 전송할 때 밝혀야 하는 사항을 밝히지 아니하거나 거짓으로 밝힌 자
9. 제50조제7항을 위반하여 비용을 수신자에게 부담하도록 한 자
10. 제50조의5를 위반하여 이용자의 동의를 받지 아니하고 프로그램을 설치한 자
11. 제50조의7제1항을 위반하여 인터넷 홈페이지에 영리목적의 광고성 정보를 게시한 자 (후략)
0 5
Square

한글날 (569돌, 2015년) 기념 폰트 다운로드, 배포 관련 정보

http://www.asan.go.kr/font

아산시에서 제 569돌 한글날을 기념하며 무려 "성웅 이순신장군의 웅혼한 서체!" 를 배포하고 있다.
- 개인,학교,공공기관 등 누구나
- 영상, 인쇄물, 웹, 모바일 어느 곳이나
http://dnomade.com/web/m_page.php?ps_pname=print_datawork04

디노마드에서 3개월간 산돌구름을 사용할 수 있는 쿠폰코드를 제공하고 있다.
산돌구름의 신규회원만을 대상으로 진행되며 탈퇴 후 재가입해도 안된다고...
- 상업용도 사용가능
- 모바일 불가 (PC Only)
- 원본 폰트 사용 불가 (웹폰트 X, 어플리케이션 삽입 X)
- 자세한 라이센스는 산돌구름에 문의하거나 링크 참고
http://m.cast.yanolja.com/detail/2171

야놀자에서는 싸인펜으로 쓴 손글씨를 모티브로 제작한 야체를 무료 배포하고 있다. 
- 개인, 기업 사용자 모두
- 언급은 없으나 광고에 활용하라는 설명은 인쇄물에도 쓸 수 있는게 아닐까?
- 하지만 라이센스 확인은 필수
http://www.spoqa-han-sans.com

구글과 어도비가 합작으로 만든 Noto Sans 를 커스터마이징한 폰트로 한국어, 영어, 일본어 포함.
깃허브를 통해 웹폰트도 서빙하고 있고 서브셋 용량이 414KB 라고하니 여러모로 활용도가 높을 듯.
이건 링크타고 소개페이지 꼭 보셔야함.
폰트에 대한 호불호를 떠나 스포카가 얼마나 노력했는지 느껴짐.
- 라이센스에 대한 정확한 언급이 없으나 Noto Sans 의 라이센스인 Apache License 2.0 이 아닐까 짐작. 문의 필요.
- OFL 이라고 페이지 하단에 링크 있네요
http://goo.gl/tzQpJn
산돌구름 스튜던트 6개월.
산돌구름 자체 이벤트나 디노마드 이벤트는 3개월인데 비해 기간이 2배! (그런데 스튜던트!)
대학생 필수 앱 에브리타임을 설치하고 한글날 배너를 클릭하면 된다고 함.
http://www.busanbadattf.com/

부산대 학생 남승우씨(후.. 훈남이네)가 부산체를 수정 개발한 폰트
머니투데이의 기사에 따르면 하루 10~20자씩 27개월간 개발했다고. (짝짝짝!)
- 개인, 기업 사용가능
- OFL 1.1 (오픈 폰트 라이센스)
http://googledevkr.blogspot.kr/2015/10/noto.html

Noto Sans KR 의 웹폰트가 드디어 Early Access 에서 제공됩니다.
한글날은 조금 지났지만 "훈민정음 반포 569돌을 맞이해서 자그마한 선물을 마련했습니다." 라고 밝히고 있어 이 포스팅도 업데이트 합니다.
1 3

페이스북 임베드 URL,
소셜 플러그인 (XFBML) 파싱

임베드 대상 페이스북 콘텐츠는 "포스트", "비디오", "사진" 이렇게 종류별로, 웹과 모바일에서 각각 URL 형식이 조금씩 달라 프로그램으로 이를 처리하기 위해 동일한 형태의 주소가 필요하다.
SDK를 사용해 페북 컨텐츠를 임베드하는 경우 기준이 되는 URL 은 웹용 URL 이다.
뭐, URL은 딱보면 알겠지만 fbid 라는 고유ID만 빼오면 된다. 
모바일에서 포스트에 대한 주소만 URL 파라미터로 처리되어 있고 나머지는 전부 URL Path에 포함되어 있으니 아래와 같은 정규식으로 fbid부터 발라내자
정규식은 Ruby 2.x 버전에서만 동작을 확인했지만 look-behind 와 look-ahead 외에 정규식 엔진을 타는 내용이 없기 때문에 동작이 안된다면 그 부분만 수정하자.
사실 효율을 생각한다면 저딴 정규식으로 한방에 fbid 를 뽑는 것 보다 fbid 가 파라미터로 존재하는 케이스를 분리시키고 나머지 정규식도 2회로 나눠 돌리는게 더 좋지만... 귀찮으니 한 줄로 하자.
상식적으로 fbid 만 뽑아내면 될 것 같으나 페북 임베드에 사용되는 URL은 사용자 아이디가 버킷 이름처럼 포함되어 있다. 문제는 모바일 URL에 사용자 아이디-문자-가 없다는 점.
이 문제는 페이스북의 짧은 주소 fb.com 을 사용해 해결할 수 있다. http://fb.com/<fbid>의 형식으로 리퀘스트를 보내면 해당하는 완성된 주소로 리디렉션 시켜준다. - 임베드 코드 생성 시 fb.com 을 그냥 쓸 수 있으면 좋을텐데 안되더라.
curl 로 리디렉션된 최종 URL을 뽑는 코드는 아래와 같다.
내가 쓰는 Typhoeus 에선 아래처럼 최종 URL을 받으면 된다. 
이렇게 얻은 URL 로 
위와 같은 XFBML을 사용해 임베드가 가능하다. 다양한 옵션은 페북 문서 확인.
Javascript SDK 를 사용하는 경우 SDK 가 로드된 후 FB 객체를 initialize 하면서 페이지에 있는 모든 XFBML 을 파싱할 수 있고, 이와 다른 타이밍에 추가적으로 XFBML 을 파싱해야하는 경우는 아래의 코드로 가능하다.
특정 엘레먼트만 파싱하려면
jQuery 로 돔을 잡아 파싱하려면
이렇게 파싱하면 컨텐츠가 임베드된다.
0 0

UFW 방화벽 사용하기 - 우분투 14.04

UFW 는 iptables 의 설정 도구로 Uncomplicated Firewall 이란 뜻이며 문자 그대로 복잡하지 않은 방화벽 설정을 위해 사용된다.
서버는 어떤 목적이든, 공인 IP가 있든 없든 외부에서 접근이 가능하다면 보안 위험에 노출될 수 밖에 없다. IDC 레벨이나 네트워크 구성에서 하드웨어/소프트웨어 방화벽이 이미 사용되고 있을 수 있지만 그런 경우에도 각 서버의 방화벽 설정은 매우 유용하다(고 생각한다)
이런 목적으로 사용하기에 iptables 가 매우 적합하나 설정과 관리가 꽤나 복잡하여 나 같은 사람은 필요할 때 검색으로 룰을 설정했다가 어느 순간 뭔가 동작이 이상하면 iptables 전체를 내려버리는 괴상한 방식으로 운영하게되니 계륵이 아닐수가...
그런 의미로 UFW는 신세계! 방화벽이 미적용된 서버가 있다면 당장 UFW를 올려보자!
설치
기본 정책 설정 (들어오는 패킷은 차단, 나가는 패킷은 허용)
ssh, http, https 허용 (ssh 포트를 변경해서 사용한다면 반드시 직접 포트를 입력하자)
포트를 변경해 사용하거나 특정 포트를 허용
방화벽 ON!
위의 명령을 실행하면 "현재 ssh 연결에 문제가 생길 수 있습니다. 적용하시겠습니까?" 뭐 이런 질문이 나온다. ssh 포트는 허용으로 변경했으니 "y" 를 입력해 진행할 수 있다.
확인
ufw 가 실행되고 있지 않다면 아래와 같은 결과가 리턴된다.
방화벽을 끌 때는 아래와 같은 명령어를 입력한다
등록된 규칙을 삭제할 때는 2가지 방법이 있다.
첫번째는 등록 시 사용한 규칙을 그대로 입력하는 방법
두번째는 각 규칙의 번호를 확인하고 번호로 지우는 방법
등록된 규칙의 번호는 줄 맨앞에 있는 [숫자]
2번 규칙 80/tcp 를 지우려면
새로운 규칙의 추가는 동일한 방식으로 가능하다
포트 뒤에 tcp 나 udp 를 지정할 수 있고 지정하지 않는다면 모두 적용된다
새로운 설정을 적용하려면 disable > enable 해도 좋고 아래와 같이 reload 가 가능하다
특정 IP만 허용할 경우 
특정 IP에게 특정 포트만 허용할 경우
포트의 범위를 규칙으로 사용할 경우
특정 아이피에만 일정 범위의 포트를 tcp 패킷만 허용할 경우
서브넷을 특정 포트에 허용할 경우
이 정도면 내가 써봤던 명령어는 다 정리한 것 같다.
4 4
Square

업데이트 정리
알림과 글거리

열흘 정도 씬디는 손도 못대다가 이틀정도 짬을 내 몇가지 업데이트를 적용했습니다.
더딘 작업의 원인은 작업 시간과 인력이라는 절대적인 리소스의 부족도 있습니다만 그보다는 "잘 쓰고 잘 보여준다" 라는 주제가 너무 어려워 스케치와 설계만 반복하던게 더 크네요.
페이지 단위의 글쓰기나 기절할 정도로 화끈한 결과물 디자인은 설계와 스케치 그리고 자료조사만으로 시간을 잡아먹고 있었고 구글 보이스 입력은 적용 직전까지 개발했었으나 개발단계에서의 테스트 결과와 실사용 테스트 결과의 차이가 커서 시간만 잡아먹고 후일로 미루게 됐네요.
그 외에 사용자 행동과 입력 내용을 분석해 딥/머신 러닝으로 새로운 글쓰기를 제안해보자는 의견도 실사용이 가능한 수준으로 개발하자니 덩어리가 커서 망설이고 있습니다.
십여일의 방치가 마음의 짐이되어 괴로움을 떨쳐내기위해 조금 덩어리가 작고 맥락이 다른 기능들을 업데이트했습니다.
1. 폰트 변경
주 폰트였던 네이버의 나눔 고딕과 MS의 맑은 고딕을 구글과 어도비의 Noto Sans KR 로 변경했습니다.
제목에는 noto 폰트가 사용되고 있었습니다만 이를 본문 등으로 확대 적용했습니다.
그간은 PC와의 평균적인 스타일 유지를 위해 보다 범용적인 고딕체를 사용했습니다만 모바일 사용자가 압도적이라 모바일 기준으로 변경했습니다.
2. 카드 디자인 변경
noto 폰트의 굵기(weight)를 normal 보다 한단계 낮은 300으로 사용하고 있습니다. 기존의 둥그런 덩어리의 카드 디자인이 여리여리한 폰트와 잘 맞지 않아 선을 살려보려고 디자인을 변경했습니다. 덩달아 제목의 크기도 살짝 작아졌습니다.
낯설고 마음에 들지 않는다는 의견이 있습니다만 ㅠ.ㅠ
3. 알림
요원(!)간의 활동과 내부활동을 위한 일반적인 알림 기능을 적용했습니다. 웹소켓 등을 사용하지 않고 있어 완전한 실시간은 아닙니다만 현재의 규모에선 아직 필요를 못 느끼고 있습니다. 
작성 글에 댓글이 등록되거나, 작성한 글이나 댓글이 추천받을 때, 댓글 입력시 @로 사용자를 호출할 때 알림이 생깁니다. 최근 5건의 알림은 우상단에 있는 종 아이콘을 눌러 확인할 수 있습니다.
알림은 7일간 보관되고 7일간의 전체 알림을 확인하는 페이지는 아직 없습니다.
4. 글거리
"ㅇㅇ에 대해 글을 써보세요" 라는 기능의 시작은 게스트 사용자들이 "asdf" 식의 무의미한 테스트 글을 작성하는 것을 좋은 방향으로 유도해보자는 의도였습니다.
그리고 그 뒤로 의미없는 문자들로 작성되는 게스트글들이 사라졌으니 효과가 있었네요.
게다가 주제어를 사용한, 주제어와 유사한 글이 간간히 등록되는 것에 혼자 고무되어(!) 이를 "글거리"라는 이름으로 모두에게 공개하면 좋겠다고 생각하게 됐습니다.
메뉴에서 글거리 항목을 클릭하고 들어가면 간단하게 글거리를 등록할 수 있습니다.
글거리를 등록한 요원이 누군지는 노출되지 않습니다. 재밌는 거리들이 등록되면 저도 멋진 글 좀 써보고 싶습니다 ㅎㅎ
5. 추천글 로직 변경
이건 뭐 씬디 없어지는 날까지 계속 변경되지 않을까 싶습니다. 태그와 키워드, 작성자를 기준으로 보여주던 것 중 작성자 기준을 삭제하고 일정 시간 이내의 추천수와 조회수로 변경해봤습니다.
여전히 딱히 마음에 드는 결과가 나오진 않네요 ㅎㅎ
끝!
+)
아. 시스템 업데이트도 있었네요.
딱히 해킹을 당했거나 성능에 영향이 있는 정도는 아니였지만 스팸시스템들도 계속 스팸 등록을 시도하고 있었고 널리고 널린 감염 시스템들이 묵묵히 공격을 수행하고 있기에 fail2ban 필터를 늘리는 등의 보안 강화 작업이 있었습니다.
그냥... 그랬다구요. ㅎㅎㅎ
뜬금없음에 종지부를 찍어보자면...
씬디 요원님들 애정합니다~ ㅎㅎ
1 0

레일즈4 어플리케이션 이름 변경

2.x 버전에서 어플리케이션 이름 변경해봤었는데 '아, 그냥 프로젝트 새로 만들고 소스 카피가 좋겠다' 라는 생각이 들 정도로 변경해야 할 파일의 갯수가 찝찝한 기분을 지울 수 없었지.
그 이후로 한참 그럴 필요가 없었는데 이번에 기존 소스를 카피할 일이 생겼지.
레일즈 4.1.x 이상의 버전에서 단 2개의 파일에만 어플리케이션의 이름이 지정되어 있더군. 깔끔하게 정리된겨.
config/application.rb 파일에서 module 이름을 변경하고,
config/initializers/session_store.rb 파일에서는 세션 스토어의 키 이름만 변경해주면 끝!

수고하고 있는 루비 커뮤니티에 축복을! ㅋㅋ
+)
3버전이나 4.0.x 버전에서는 https://github.com/get/Rename 을 사용해서 깔끔하게 변경가능.
참고)
https://stackoverflow.com/questions/20988813/how-to-rename-rails-4-app/23753608#23753608?newreg=15907dbe38c743fa9f7aca841050ba57