애드센스 최적화수업

 인터넷 미팅으로 애드 센스 최적화 수업에 참여해 보았다.

 약 20분간 진행되는 수업은 음성으로 진행되고 화면으로 정보가

 제공된다.

 오늘의 수업에서 얻은 것은 애드센스의 광고 클릭 비용의 효율적

 배치에 대한 것과 채널이름을 만드는 방법에 대한 것이다.

 많은 사람들이 알고 있었겠지만 수업을 들어보고 알게 되었다.

 주요한 네가지는 아래와 같다.

1. 광고는 상단에 있을 수록 좋음
   -> 사용자들이 상단에 있는 내용을 주로 보게됨

2. 중간 직사각형과 리더보드와 같이 넓은 광고가 좋음
   -> 이건 사람들이 넓게 보는게 더 클릭율이 높아서 그렇다고 함

3. 소스코드 상단에 있는 광고가 단가가 더높음
   -> 광고단가가 상단부터 책정됨
       만약 사용자들이 중간의 광고를 더 많이 클릭한다면 상단의 광고를 삭제하는게
      수익률을 높일 수 있다.

4. 게제위치 타겟팅을 위해서 사용자 설정이름을 구체적으로 기재
   -> "사이트이름_섹션_광고위치_사이즈" 등으로 구체적으로...
      국문예) 애드센스천국_가사가운데하단_300x250
      영문예) HomeTopLeaderMotherEarth
                 HomeMidRectMotherEarth
                 HomeRightSkyscpMotherEarth
                 HomeLeftNavLinksMotherEarth


이번 기회로 이런 내용도 있구나 알게 되어서 한번 적용해 보기로 했는데,

수익률이 더 높아질지는 두고봐야 겠다.



[Android] Gaussian filter 와 마스크 형식 변경

이전의 마스크 필터는 배열을 선언하면서 값을 직접 입력하는 방식이었는데, 5x5, 7x7 등의 마스크표현과 Gaussian 필터 설정을 위해서 마스크 형식을 바꾸기로 했다.

우선 마스크는 이미지 배열과 곱하는 부분이 항상 같은 위치에 있으므로 convolution 계산을 하는 커널의 위치가 같아서 계산방식을 변경하였다. 기존의 convolution 계산은 미리 커널의 크기만큼을 계산식에 넣어놓아서 고정되어 있었지만 반복적 계산을 적용하여 커널의 크기가 변경되어도 계산될 수 있도록 하였다.

마스크는 double 형식으로 해서 향후 가우시안을 적용하거나 블러링 적용시 계산이 되도록 하였고, 값이 초과될 경우 색의 기준이 변하므로 최대, 최소를 각각 255, 0 으로 고정하여 녹색 이미지로 되도록 하였다.

private int[] mask(int[] colors, int W, int H) {
       int ST;
       int orgColor=0;
       int greenColor=0;
             
       ST = W;
             
       int avrColor=0;
       int Mh, Mw;
       Mh = Mw = 5;
       //double[] masks = makeMask(Mh);//블러링 mask
       double[] masks = GaussianMask(0.8);//Gaussian Mask 적용

       double var=0;
              
       //get bitmap color
        for (int y = 0; y < H; y++) {
               for (int x = 0; x < W; x++) {
                greenColor = 0x0000FF00 & colors[y * ST + x];
                  greenColor = greenColor>>8;
                colors[y * ST + x] = greenColor;
               }
           }
        //calc. average value of colors
       for (int i=0;i<H*W;i++){
        avrColor += colors[i];
       }
       avrColor /= H*W;
       //mask the color
       //i는 계산될 높이 계산될 폭만큼의 반복범위임
       for (int i=0;i<(H-Mh)*(W-Mw);i++){
        
         //기존 mask 계산
          //var = colors[i]*masks[0]      + colors[i+1]*masks[1]      + colors[i+2]*masks[2]
          //     +colors[W+i]*masks[3]    + colors[W+i+1]*masks[4]    + colors[W+i+2]*masks[5]
          //     +colors[(W+1)+i]*masks[6]+ colors[(W+1)+i+1]*masks[7]+ colors[(W+1)+i+2]*masks[8];
          for(int m=0;m<Mh;m++){
           for(int n=0; n<Mw;n++){
            var += (double)colors[i+W*m+n]*masks[Mh*m+n];  
           }
          }
          
                    
          if(var>255)var=255;
          if(var<=0)var=0;
          
          colors[i]=(int)var;
          var = 0;//var 초기화       
       }
       
       //make argb style
          for (int y = 0; y < H; y++) {
              for (int x = 0; x < W; x++) {
               greenColor = colors[y * ST + x];
               greenColor = greenColor<<8;
               greenColor = 0x0000FF00 & greenColor;             
               colors[y * ST + x] = greenColor;
              }
          }
        return colors;
      }

마스크는 아래와 같다. 해당마스크는 블러링을 적용하기 위한 것이다.

private double[] makeMask(int maskSize) {
          int Mh, Mw;
          Mh = Mw = maskSize;
          double[] RetMask = new double[Mh*Mw];
          
          for(int m=0;m<Mh;m++){
     for(int n=0; n<Mw;n++){
      RetMask[Mh*m+n] = 1.0/(Mh*Mw);  //블러링 적용을 위한 생성값
     }
    }
          return RetMask;
          
         }
         
가우시안 마스크는 아래와 같다. 표준편차인 시그마 값에 의해 커널의 크기가 결정된다. 

         private double[] GaussianMask(double sigma) {
          int length = (int)(6*sigma)+1;
          int center = length / 2;
          
          int Mh, Mw;
          Mh = Mw = length;
          double[] RetMask = new double[Mh*Mw];
          
          for(int m=0;m<Mh;m++){
     for(int n=0; n<Mw;n++){
      RetMask[Mh*m+n] = (1.0/(2.0*Math.PI*sigma*sigma))*Math.exp(-((m-center)*(m-center)+(n-center)*(n-center)*(1.0/(2.0*sigma*sigma))));  //가우시안 함수
     }
    }
          return RetMask;
          
         }

가우시안 필터를 적용한 결과는 아래와 같다. 시그마 값은 0.8을 적용하여 5x5 마스크를 적용하였다.




Interesting/ANDROID | Posted by hyena0 2008. 10. 31. 00:36

Android 뚜껑 열리다.




Android 뚜껑 열리다.

구글 안드로이드가 OS를 공개하고 본격적인 오픈소스의 행보를 이어간다.

아래의 안드로이드 모양과 같이 오픈소스의 특성을 가지고 다양한 사용자가 다양한 수천수만개의 안드로이드 플랫폼을 가질 수 있게 될 것이다.

이로 인해 우리가 생각하지 못했던 서비스 들이 출현할 것으로 예상된다.

게다가 안드로이드 마켓이 27일부터 서비스가 되기 시작했다. 자세히는 읽어보지 못했지만, 건당 등록비가 25불인데 S/W의 질을 높이기 위한 것이라고 한다. S/W를 다운로드 받게 되면 이익은 7:3으로 7만큼을 개발자가 가져가게 되는데, 25불 등록비 내는 것을 감안한다면, 얼마의 비용을 책정하고 값을 매겨야 할지 고민이 될 부분이라고 생각한다. 물론 다운로드가 엄청 많이 된다면야...가격이 낮아도 문제가 없겠지만 말이다.



Open Source Project, How will you shape it?