미디어 위키 확장 기능 적용하는 방식이 변경되고 있다 (1.25 ~ )

클라우드 환경으로 미디어위키 이전하고 미디어위키 버젼 1.25.x로 업그레이드한 다음에 확장기능을 적용하면 위키가 제대로 열리지 않는 것들이 있었다.

몇번의 삽질을 통해서 알게된 부분은 이전 버젼까지는 거의 모든 확장기능을 적용하기 위해서 extension 디렉토리에 관련 파일을 올리고, LocalSetting.php에 require_once “$IP/extension/디렉토리/확장기능.php”; 라는 내용을 추가해주어야 했다.

그런데 1.25 버젼부터는 wfLoadExtension(‘확장기능이름’);을 넣으면 확장기능이 적용된다.

내가 했던 삽질처럼,
wfLoadExtension(‘확장기능이름’);
require_once “$IP/extension/디렉토리/확장기능.php”; 같이 두가지를 같이 쓰면 일부 확장 기능은 제대로 동작하지 않았다.

아직 확장 기능별로 예전 방식으로 추가해야하는 것들도 있고, 미디어위키의 버젼에 따라 새로운 방식으로 해야하는 것들도 있는 것 같으니, 확장기능을 적용할 때는 설정 방법을 한번씩 확인해 보는 것이 좋을 것 같다.

Advertisements
카테고리: 위키 | 태그: , | 댓글 남기기

딴지일보 기사를 모바일 버젼으로 바꿔주는 script

최근에 딴지일보도 모바일 페이지를 지원한다는 것을 알게 되었는데, 모바일로 바꿔주는 단추가 좀 찾기 쉽지 않아서 전에 네이버 블로그를 모바일로 바꿔주는 스크립트를 만들어 쓰고 있던 것을 응용해서 스크립트를 하나 만들어 놓고 써보려고 했다.

딴지일보 기사 url은 데스크탑에서는 http://www.ddanzi.com/ddanziNews/35839185 이고, 이것을 모바일 버젼으로 바꾸면 url이 http://www.ddanzi.com/index.php?mid=ddanziNews&document_srl=35839185&m=1 과 같은 형태로 바뀐다.

몇번의 시행착오 끝에 만들어진 스크립트는

javascript:if(location.href.search("ddanziNews")>0) {location.href='http://www.ddanzi.com/index.php?mid=ddanziNews&document_srl='+location.href.substr(location.href.search("ddanziNews")+11)} else { location.href='javascript:if(location.href.search("ddanziNews")>0)'+location.href.substr(7)}

else 이하는 아직 사용하지 않는 부분이라서 그냥 나둔 것이고 ddanziNews를 포함하는 경우에만 적용할 수 있다. 다른 url이 보이면 else 이하 부분에 적용하면 될 것이다.

덧. 이런 것들을 모아서 브라우저 앱으로 만들 수도 있겠다 싶은데… 차라리 브라우저의 에이젼트 설정을 바꾸는 것이 편하겠다. 전에 만든 네이버용 스크립트와 이것을 하나로 묶으면 어떨까?

그래서 수정한 것은 javascript:if(location.href.search("me")>0) {location.href='http://m.blog.naver.com/'+location.href.substr(7,location.href.search("me")-13)+'/'+location.href.substr(location.href.search("me")+3)} else if(location.href.search("ddanziNews")>0) {location.href='http://www.ddanzi.com/index.php?m=1&mid=ddanziNews&document_srl='+location.href.substr(location.href.search("ddanziNews")+11)} else { location.href='http://m.'+location.href.substr(7)}

자주 보는 네이버 블로그와 딴지일보 기사에서는 테스트했고, 나중에 조건을 벗어나는 부분이 있으면 추가로 수정하자.

한가지 배운 것은 자바스크립트에서 if(조건) {참인 경우} else if(조건2) {{조건2가 참인경우} else {조건1,2 모두 거짓인 경우}로 사용할 수 있다.

생각해보니 다음 블로그도 모바일로 보면 스크랩이 쉬워진다. 그래서 다음 블로그에도 사용할 수 있게 스크랩트를 아래와 같이 수정했다.
javascript:if(location.href.search("me")>0) {location.href='http://m.blog.naver.com/'+location.href.substr(7,location.href.search("me")-13)+'/'+location.href.substr(location.href.search("me")+3)} else if(location.href.search("ddanziNews")>0) {location.href='http://www.ddanzi.com/index.php?m=1&mid=ddanziNews&document_srl='+location.href.substr(location.href.search("ddanziNews")+11)} else if(location.href.search("blog.daum")>0) {location.href='http://m.blog.daum.net/'+location.href.substr(location.href.search("daum")+9)} else { location.href='http://m.'+location.href.substr(7)}

location.href.search(검색할 단어)는 url에서 검색할 단어가 있는 위치를 찾아준다. 제일 앞 글자의 자리수를 반환한다.

location.href.substr(첫번째 위치, 두번째 위치)는 첫번째 위치와 두번째 위치 사이의 단어를 잘라준다.

두개를 조합한 location.href.substr(location.href.search("daum")+9)는 daum이라는 단어가 나오는 자리부터 9자 뒤에서부터 string을 잘라내주는 것이고, location.href.substr(7,location.href.search("me")-13)는 url의 7번째 글자부터 me 가 나오는 자리에서 13자리 앞의 글자 사이를 잘라내준다.

추가, 티스토리가 이름.tistory.com/m/글 번호 형태로 모바일 페이지를 제공하는 것을 알게되어서 이것도 추가했다.

추가, 이글루스도 이름.egloos.com/m/글번호 형태로 모바일 페이지를 제공하므로 추가했다.
javascript:if(location.href.search("me")>0) {location.href='http://m.blog.naver.com/'+location.href.substr(7,location.href.search("me")-13)+'/'+location.href.substr(location.href.search("me")+3)} else if(location.href.search("ddanziNews")>0) {location.href='http://www.ddanzi.com/index.php?m=1&mid=ddanziNews&document_srl='+location.href.substr(location.href.search("ddanziNews")+11)} else if(location.href.search("blog.daum")>0) {location.href='http://m.blog.daum.net/'+location.href.substr(location.href.search("daum")+9)} else if(location.href.search("tistory")>0) {location.href=location.href.substr(0,location.href.search("tistory")+12)+'/m/'+location.href.substr(location.href.search("tistory")+12)} else if(location.href.search("egloos")>0) {location.href=location.href.substr(0,location.href.search("egloos")+10)+'/m/'+location.href.substr(location.href.search("egloos")+11)} else { location.href='http://m.'+location.href.substr(7)}

2016/08/11, 트위터를 모바일로 바꿔주는 것을 추가하고 id에 “me”가 들어가는 이글루스 사이트가 있어서 네이버 식으로 바꾸는 오류가 보여서 me를 me/로 바꿈.

javascript:if(location.href.search("me/")>0) {location.href='http://m.blog.naver.com/'+location.href.substr(7,location.href.search("me")-13)+'/'+location.href.substr(location.href.search("me")+3)} else if(location.href.search("ddanziNews")>0) {location.href='http://www.ddanzi.com/index.php?m=1&mid=ddanziNews&document_srl='+location.href.substr(location.href.search("ddanziNews")+11)} else if(location.href.search("blog.daum")>0) {location.href='http://m.blog.daum.net/'+location.href.substr(location.href.search("daum")+9)} else if(location.href.search("tistory")>0) {location.href=location.href.substr(0,location.href.search("tistory")+12)+'/m/'+location.href.substr(location.href.search("tistory")+12)} else if(location.href.search("egloos")>0) {location.href=location.href.substr(0,location.href.search("egloos")+10)+'/m/'+location.href.substr(location.href.search("egloos")+11)} else if(location.href.search("twitter")>0) {location.href='http://m.'+location.href.substr(8)} else { location.href='http://m.'+location.href.substr(7)}

카테고리: 기타등등 | 댓글 남기기

클라우드 환경으로 미디어위키 이전

개인적으로 노트북에 EasyPHP를 깔아서 서버 환경을 만들고 미디어위키를 사용해왔습니다. 개인적인 내용들이라서 상황이 되면 호스팅 서비스에 올릴까는 고민했지만 위키아 같은 공개형 위키 서비스를 사용할 생각은 없었습니다.

이전부터 아마존의 클라우드 서비스에 미디어위키를 설치해서 사용할 수 있고, 그렇게 한다는 이야기는 보았지만 익숙하지 않아서 진행하지 않았고, 혹시 구글의 클라우드 관련 서비스에 미디어위키를 올리면 쓸 수 있지 않을까 하는 생각은 했지만 방법이 마땅치 않더라구요.

Bitnami에서 Google cloud platform에 미디어위키를 사용할 수 있게 해주는 서비스가 있는 것을 보았지만 유료 서비스라 망설이고 있었는데….

네트워크 환경이 불안정해서 외부에서 위키에 접속할 수 없는 상황도 생기고, 노트북을 서버로 사용하다보니 뭔가 부하도 많이 받는 것 같은 상황에 미디어위키 1.25.1로 업데이트하려는데 뭔가 부수적인 것을 설치해야하는 문제가 생겨서…. ㄱ갑자기 Bitnami를 통해서 구글 클라우드에 미디어위키를 깔고 데이타 이전까지 했네요.

비트나미 서비스는 미디어위키 관련된 이미지를 만들어놓고 요청이 있으면 구글 클라우드에 관련된 내용을 설치해 주는 서비스이고 미디어위키 1.18인가를 깔아주는데 별 어려움 없이 1.25.1로 업그레이드가 가능했어요.

4~5년 전에 EasyPHP 업데이트를 오래 안하다보니 아파치, php, 위키 버젼이 다 다른 것때문에 덤프가 안되서(또는 방법을 정확히 몰라서) 문서들을 하나씩 삽질하며 옮겼던 것에 비하면 이번에 데이타 이전은 정말 수월했어요. 디비 테이블에 MW_ 라는 것이 붙은 것만 다르고 테이블 구조나 그런 것들은 동일해서인지 비트나미에서 만든 미디어위키 디비에 있는 테이블들을 한방에 날려버리고 백업한 디비를 모두 올린 다음에 테이블들의 이름에서 MW_ 을 하나씩 수정한 다음에 미디어위키의 update.php를 실행시키니 제대로 돌아가네요.

아마 이번달까지는 구글에서 제공하는 60일 시험 기간이니 따로 요금이 나오진 않을 것 같고, 담달부터는 요금이 고지될 것 같은데 한달에 4~5천원 정도가 될 것 같다고 하네요 뭐 이정도 수준이면 그냥 써도 괜찮은 수준일 것 같아요.

LocalSetting.php 파일 수정해야 하는 경우, 터미널로 연결하고 vi 에디터를 써야하는 것이 조금 번거롭고, 사용하던 확장 기능들 중에 충돌이 생겨서 사용하지 못하는 것들이 있기도 하지만 노트북 부하가 줄고, 대다수의 미디어위키가 리눅스 환경에서 돌아가고 있기 때문에 문제가 생겨도 해결 방법을 찾기가 훨신 수월해진 점이 좋구요. 무슨 원인인지 아직도 모르겠지만 모바일 환경에서 편집이 안되던 문제도 얼덜결에 해결되고 나니 아무곳에서나 위키에 접속해서 내용을 확인하고 수정할 수 있으니 정말 편리하네요.

이제 전에 사용하던 scrapping 파일을 조금 손봐서…. (조금이 아니지만…) 인터넷에서 본 기사를 위키로 바로 스크랩할 수 있는 것만 만들면 되는데… 이부분을 해결하는 것은 좀 더 시간이 걸릴 것 같네요.

2016/3/29 추가

혹시 비슷한 일을 진행해 보실 분들을 위해서 처음에 설치할 때 주의할 점 몇가지.

  1. 설치될 디렉토리 등을 잘 보고 결정하세요. 비트나미의 이미지 파일로 한번에 풀어 넣는 것이라서 폴더 위치 같은 것이 어느 단계에서 결정되는지 애매한 부분인데, 데이타가 쌓이기 전 단계에서 아니다 싶으면 엎고 다시 깔아서 폴더 구조 같은 것을 일반적인 리눅스 기반 시스템에 설치할 때와 비슷하게 만드는 것이 나중에 문제가 있을 때 찾아서 대응하기가 쉬울 거에요.

  2. 미디어위키의 경우 외부 웹브라우저를 통해서 공개되는 htdocs 디렉토리에 설치되는데, 반드시 w 또는 미디어위키 버젼 폴더를 만들고 거기에 미디어위키를 설치하세요. root 디렉토리에 미디어위키가 설치하면 두가지 문제가 생깁니다.

1) 미디어위키에서 만드는 문서의 제목에 제약이 생깁니다. 예를 들어 LocalSettings.php 파일이 있기 때문에 동일한 이름의 미디어위키 문서를 만들 수 없어요.

2) 더 중요한 부분은 미디어위키 업그레이드 할 때 생깁니다. 요즘은 미디어위키 업그레이드할 때 보통 기존에 있던 파일들은 모두 배제해야하기 때문에 새로운 폴더를 만들고 거기에 설치하는 것이 보통인데, 루트 디렉토리에 설치되어 있기 때문에 파일들을 다른 디렉토리로 옮기고 다시 복원하고 하는 과정에서 실수가 생길 것 같아요.

카테고리: 위키 | 태그: | 댓글 2개

php 파일에 어떻게 보일러파이프를 깔면 좋을까요?

에버노트의 웹클리핑은 웹에서 본 글의 본문만 잘 추려서 에버노트에 정리할 수 있도록 도와줍니다. 그러나 저는 에버노트가 아닌 다른 곳에 글을 저장하고 싶었습니다. 그래서 snoopy라는 라이브러리(?)를 가져와서 제게 맞는 형태의 html 파일로 출력할 수 있도록 php 파일을 만들어서 사용하고 있는데, 스누피에는 좀 한계가 많이 있더군요.

똑똑한 뉴스 서비스 만들기라는 글에서 boilerpipe라는 것을 알게되었고,  http://boilerpipe-web.appspot.com/ 에서 보여주는 API를 활용하면 스크랩하고 싶은 글의 본문을 긁어오는 것은 스누피보다 훨씬 잘해주는데요. 문제는 제 지식이 짧아서 보일러파이프를 php 파일과 어떻게 연결하며 되는지 막막하다는 점입니다.

예전에 스누피로 만든 php 페이지를 구동하는 javascript에는 마우스로 긁어놓은 부분을 제목으로 가져오도록 하였고, javascript:location.href='scrapper.php?surl='+encodeURIComponent(location.href)+'&stitle='+window.getSelection()

scrapper.php 안에 스누피가 동작해서 본문을 추출하면 아래와 같이 본문이 표시되도록 되어 있어요.

$html = file_get_contents($scrap_url); 스크랩할 url의 내용을 읽어서 $html에 할당함.

$extractor = new ContentExtractor(); 변수 초기화

$content = $extractor->extract($html); 해당 url에서 본문을 추출한다.

echo $content; 화면에 뿌려준다.

php로 만들어진 것이라 쉽게 html 페이지로 출력할 수 있었는데요. 이렇게 본문을 표시해주는 부분을 어떻게 바꾸면 보일러파이프의 api를 사용하면 보이는 페이지를 제 웹사이트로 가져올 수 있을까요?

제가 필요한 부분을 제대로 모르는 상황에 질문이 제대로 전달이 되려나 모르겠군요. 하여간 보일러파이프 소스를 제 사이트에 설치하지 않고 보일러파이프의 api에서 구현해주는 것만 가져오는 방법이 있으면 알려주시면 좋겠습니다.

문제 해결의 실마리 발견!!

기존에 snoopy에서 사용하는 $scrap_url 변수를 boilerpipe API의 주소로 변경해서 글을 긁어오는 방식으로 기본적인 것은 성공. 그러나 사이트에 따라서 어떤 경우는 스누피가 더 나은 경우도 있고, 어떤 경우는 보일러파이프가 나은 경우도 있어서 두가지를 혼용해서 사용해야할 것 같군요.

$scrap_url = "http://boilerpipe-web.appspot.com/extract?url=" . $scrap_url . "&extractor=ArticleExtractor&output=htmlFragment&extractImages="; 본문 추출할 url과 보일러파이프 API url을 조합한다.

$html_boilerpipe = file_get_contents($scrap_url); 만들어진 url의 내용을 $html에 저장한다.

$extractor = new ContentExtractor(); 변수를 초기화한다.

$content_boilerpipe = $extractor->extract($html_boilerpipe); $html에서 본문을 추출한다.

echo $content_boilerpipe; 추출된 본문을 화면에 표시한다.

2015/11/25 추가.
자바스크립트 웹페이지 읽기에 간단한 스크립트가 보인다. 이것을 그냥 기존에 쓰던 php 파일에 넣어주거나 자바스크립트로 웹페이지 읽어오기를 응용하면 보일러 파이프 API 에서 가져온 것을 기존 스누피로 만든 것과 조합할 수 있을 것 같다.

카테고리: 기타등등 | 댓글 3개

reshoring 에서 생각해보는 영어단어

3D 프린터 등의 새로운 기술로 인해 해외로 나갔던 제조업이 미국으로 다시 돌아가는 것을 의미하는 단어가 있다. Reshoring.

re-shore-ing의 형태이며 shore는 해변이라는 의미이다.

이와 관련해서 해변을 의미하는 영어단어 coast와 shore의 차이에 대한 설명을 보면 coast는 육지에서 생각하는 해변이고, shore는 바다에서 보는 해변이라는 차이가 있다고 한다.

그러면 reshoring의 의미가 더욱 명확해진다. 미국 기준으로 해외에 있던 기업이 미국으로 돌아가는 것이므로 바다쪽에서 해변에 접근하는 것이기 때문에 coast가 아니고 shore를 사용한 것으로 보인다.

카테고리: 기타등등 | 댓글 남기기

왕좌의 게임

왕좌의 게임.

카테고리: dictionary | 댓글 남기기

블로그

위키백과의 블로그

블로그(blog 또는 web log)란 웹(web)과 로그(log, 기록)를 합친 낱말로, 스스로가 가진 느낌이나 품어오던 생각, 알리고 싶은 견해나 주장 같은 것을 웹에다 일기처럼 차곡 차곡 적어 올려서, 다른 사람도 보고 읽을 수 있게끔 열어 놓은 글들의 모음이다. 보통 시간의 순서대로 가장 최근의 글부터 보인다.

카테고리: dictionary | 댓글 남기기