카테고리 보관물: 기술사례

미디어위키에서 구글 애드센스 연동하기

미디어위키에서 구글 애드센스 연동하기

미디어위키에 광고를 보여주는 코드를 삽입하는 방법을 알려주는 글입니다. 스킨에 광고를 삽입하는 방법 대신에 hooks를 이용합니다. 이 방법은 2가지 장점이 있습니다.

  • 개별적으로 각각의 스킨을 수정할 필요가 없습니다. 이것은 사용자가 스킨을 변경하더라도 광고를 동일한 장소에 디스플레이 될것입니다.
  • 업그레이드 작업이 간단합니다. Hooks는 스킨과는 달리, 미디어 위키의 버전 업그레이드에 의해 수정되지 않은 LocalSettings.php에 있습니다.

아래의 예는 각 페이지의 머리글, 바닥글 및 사이드 바에 광고를 삽입하는 방법을 보여줍니다. 구글 애드 센스 광고 서비스 코드를 사용했지만, 그것은 쉽게 다른 광고 네트워크의 광고 서비스 코드에 의해 대체 될 수 있습니다.

머리글

사이트 공지사항 밑이나 문서 헤더 위의 광고 코드를 배치할 SiteNoticeAfter hook를 사용합니다.

Header ad.jpeg
다음 코드를 LocalSettings.php에 추가합니다. 당신은 당신이 받은 광고코드와 일치하도록 EOT 라인 사이의 광고 코드를 수정해야합니다.일반적으로 728x90px 리더 보드를 사용하시면 됩니다.

$wgHooks['SiteNoticeAfter'][] = function(&$siteNotice, $skin) {
        $siteNotice .= <<< EOT
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:728px;height:90x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
        return true;
};

바닥글

SkinAfterContent Hook입니다. 문서 내용 후 배너를 표시 할 수 있습니다.

Footer ad.jpg

이전과 같이 EOT 다음에 광고코드를 삽입합니다. 대부분의 수평광고는 위치가 잘 맞는 편입니다. 어째든 한번더

를 이용해서 광고를 중앙에 위치할수 있도록 지정해줍니다.

$wgHooks['SkinAfterContent'][] = function(&$data, $skin) {
        global $myAdCode;
        $data .= '<div style="text-align:center;">';
        $data .= <<< EOT
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:728px;height:90x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
 
        $data .= '</div>';
        return true;
};

사이드 바

Sidebar ad.jpg

사이드바에 광고를 배치하는 것은 기존 머리글과 바닥글에 광고를 삽입하는 것보다 까다롭습니다.

SkinBuildSidebar은 Navigation portal and the ToolBox사이에 광고를 삽입할 수 있도록 해줍니다.그러나 몇 가지 주의 사항이 있습니다 :

첫번째는, 기본 벡터 스킨을 사용할때 광고크기를 잘 선택해야 합니다. 옆에 표시된 광고는 120x600px 스카이스크래퍼 광고입니다.

둘째, 사이드 바에서 각 포털은 제목이 있습니다.광고가 포함 된 포털의 제목은 “Ads”입니다. 위키 영어가 아닌 경우, 당신은 아마 그것을 번역하는 것이 좋습니다. 위키에 광고 거기에 번역을 쓰기 이렇게하려면, 당신은 MediaWiki:Ads 페이지를 당신의 위키를 작성해야합니다.

$wgHooks['SkinBuildSidebar'][] = function($skin, &$bar) {
        $out = <<< EOT
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- gamedic sidebar2 -->
<ins class="adsbygoogle"
     style="display:inline-block;width:120px;height:600px"
     data-ad-client="ca-pub-69332184xxxxxxxxx"
     data-ad-slot="4372734253"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
        $out .= "<script>$('#p-Ads').addClass('persistent');</script>";
        $bar['Ads'] = $out;
        return true;
};

만약 160×600 와이드 스카이스크래퍼 광고를 삽입하고 싶으시면 아래와 같이 스킨의 크기를 크게 변경한 후에 삽입해주세요.

/* increase Vector sidebar width to accommodate ads */
div#mw-panel { width: 12em; }
div#footer, #mw-head-base, div#content { margin-left: 12em; }
#left-navigation { margin-left: 12em; }

If your wiki is in RTL language, you need to use a modified snippet:

/* increase Vector sidebar width to accommodate ads */
div#mw-panel { width: 12em; }
div#footer, #mw-head-base, div#content { margin-right: 12em; }
#left-navigation { margin-right: 12em; }

LocalSettings.php 아래에 배치 될 필요가 코드이다. 다시 말하지만, 당신은 EOT 라인 사이의 광고 코드를 교체해야합니다.

$wgHooks['SkinBuildSidebar'][] = function($skin, &$bar) {
        $out = <<< EOT
<script async src="http://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
    style="display:inline-block;width:160px;height:600x"
    data-ad-client="ca-pub-xxxxxxxxxxxxxxxx"
    data-ad-slot="6440411535"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
EOT;
        $out .= "<script>$('#p-Ads').addClass('persistent');</script>";
        $bar['Ads'] = $out;
        return true;
};

광고의 세 가지 유형 중 2가지를  http://GameDic.org 에서  볼 수 있습니다.

원문

https://www.guyrutenberg.com/2014/10/13/displaying-google-adsense-in-mediawiki/#comments

xenserver6.5 랜덤 리붓 원인과 해결.

xenserver6.5가 올해 1월 발표되었고 새로운 버전에 대해 빠르게 적용해보시려고 했던분들은 이미 어느정도 6.5 버전으로 올렸을텐데요

저희도 xenserver6.5버전에 대한 적용전 테스트를 진행하였습니다. 그런데 뜻하지 않은 랜덤 리붓현상이 발생하였습니다… 일정 이상의 파일 이동복사시 해당 현상이 발생하였고 뚜렷한 해결방안이 없어 일시 중단을 했었습니다.

해당 랜던 리붓 현상은 Intel 55×0 chipset errata – Interrupt remapping issue 이슈로 인해 발생했던 문제이며 Intel 5500/5520/X58 chipset이 대상이 됩니다. 해결 방안은 아래와 같습니다.

# xl debug-keys V
# xl dmesg | grep “Interrupt Remapping” 

위 두 명령어를 통해 intel VT-d interrupt Remapping 상태가 enable, disable 여부 확인 합니다.  enable상태로 나온다면  아래와 같이 xen boot 파라미터를 추가합니다.

/boot/extlinux.conf에 “iommu=no-intremap” 추가

/opt/xensource/libexec/xen-cmdline –set-xen iommu=no-intremap

적용 후 리붓 진행을 하게 되면 랜던 리붓 현상이 해결됩니다.

 

사설망(Private Network) IP 대역

사설IP로 할당되어있는 IP 대역은 아래와 같다.

10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 – 192.168.255.255

대역 이외의 IP를 공인IP라고 한다.

미국의 InterNIC 이라는 기관에서 부여한 공인ip주소가 배포된다. 실제로 유저가 사용하는 공인 IP 주소 배분은 각국의 ISP(Internet Service Provider)에서 받을 수 있다.

여기서 궁금한 한가지!
배포기관이 있고, 어디에선가 관리되고 있다면, 각국의 IP블럭을 알 수 있지 않을까?
여기에 대한 해답은 ‘그렇다’는 것이다.

인터넷 상에 공개되어있고, 계속 갱신되는 모습을 볼 수 있다.

http://ftp.apnic.net/stats/apnic/delegated-apnic-latest

여기에 보면 KR이니 CN, JP등의 국가 코드가 있다. 이 국가 코드는 ISO3166 2-letter 규약에 따른다.

mongoDB 2.2.3 설치 방법

mongoDB 2.2.3 설치 방법

이 설치는 CentOS 6.5 64bit에 mongoDB 2.2.3 버전을 설치하는 방법이다.
그전에는 yum 으로 설치가 가능했으나, 현재상태(2015년 2월 11일) yum으로 설치를 실패했다.

그래서 해당 RPM을 다운받아서 설치를 하게됨

1. mongoDB 2.2.3 를 다운받는다.

wget http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/RPMS/mongo-10gen-server-2.2.3-mongodb_1.x86_64.rpm
wget http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/RPMS/mongo-10gen-2.2.3-mongodb_1.x86_64.rpm

2. mongoDB를 설치한다.

rpm -ivh mongo-10gen-2.2.3-mongodb_1.x86_64.rpm
rpm -ivh mongo-10gen-server-2.2.3-mongodb_1.x86_64.rpm

3. mongoDB 컨피그를 수정한다.

vi /etc/mongo.conf

4. 리붓시에도 mongoDB가 실행되도록 셋팅한다.

chkconfig mongod on

5. mongoDB를 실행한다.

service mongod start

xenserver p2v kernel panic 발생 사례

써드아이시스템의 기술지원을 받고 있는 사이트중 물리서버 전체를 가상화로 이전을 원하는 사이트가 있어 P2V 작업을 진행하던 중 centos 4.8 버전에서 PtoV진행 시 아래와 같이 kernel panic 현상이 발생하였다.

FullSizeRender

가상화 하이퍼바이저 엔진과 centos4.8에서 문제로 인해 발생하는 문제로 우선 kernel을 업데이트를 진행하였다.

centos4.8버전은 지원이 종료되어 yum을 이용한 업데이트시 repo파일을 수정해줘야한다.

이후 kernel panic이 해결이 될지 알았으나 이후 새로운 문제로 인해 동일 증상이 발생하였으며 확인 결과 4.8버전의 update된 마지막 커널 버전에서 버그로 인해 panic이 뜬다는것을 확인 하였다.(kernel-2.6.9-100.ELsmp이상에서 발생)

이를 해결하기 위해 리눅스 설치 디스크의 복구 모드로 진입하여 아래의 mkinitrd를 실행한다.

mkinitrd -f -v –with=scsi_mod –with=sd_mod –with=mptbase –with=mptscsi –with=mptspi –with=mptsas –with=mptscsih /boot/<kernel version>.img <kernel version>.EL

이후 정상적인 booting이 진행 되었으며 해당 이슈는 해결 되었다.

해당 문제는 vmware에서는 발생하지 않으며 xenserver에서 발생한다.