Posted
Filed under 프로그래밍
오호라...이런 컬렉션을 구성할수 있다니..

size의 단위는 바이트다.
max는 최대 등록 도큐먼트의 수이다.

db.createCollection( "log", { capped: true, size: 100000 } )

또는

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

용량이 size에 정한것을 넘거나 도큐먼트의 수가 max에 도달하면
가장 옛날 도큐먼트를 삭제하고 기록하게 되기때문에
정해진 사이즈 정해진 도큐먼수 수량으로 유지된다.


단점:
  샤딩 컬렉션으로 지정할수 없다.
  도큐먼트단위로 삭제할수 없다. (drop으로 전체를 날리고 다시 생성해야 한다)
  파이프라인에 $out 사용할수 없다.



https://docs.mongodb.org/manual/core/capped-collections/



2015/12/17 15:41 2015/12/17 15:41
Posted
Filed under 프로그래밍/PHP

 if(!preg_match('/^[0-9a-zA-Z]([\-.\w]*[0-9a-zA-Z\-_+])*@([0-9a-zA-Z][\-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9}$/', $email))
 {
     // 통과못했을경우
 }


2015/11/19 18:45 2015/11/19 18:45
Posted
Filed under 프로그래밍
mysql의 기본설정은 대소문자를 구분하지 않는다.
쿠폰코드같은 대소문자를 구분해야하는 서비스의 경우 당황스러울수 있다.

데이터정렬방식을 utf8_bin 으로 설정해주면 해당 컬럼만 대소문자를 구분하게 할수 있다.

`coupon_num` varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '쿠폰 번호',


2015/11/18 10:33 2015/11/18 10:33
Posted
Filed under 프로그래밍/PHP
Nibbleblog는 별도의 DB를 사용하지 않는다.
그래서 백업도 폴더를 그대로 복사하면된다.
가벼워서 라즈베리파이B 에서도 상당히 빠르게 돌아간다.

기본적으로 한글팩이 포함되어있지 않다.
cd languages
wget http://nblang.nibbleblog.com/download/thebe/language/ko_KR.bit

이 한글팩은 나온지 좀 됐지만 사용하기에 무리는 없다.
관리자 설정에사ㅓ 언어를 한국어로 변경해준다.

Nibbleblog 에서 짧은 주소(Friendly URLs)를 nginx에서 사용하려면
아래 설정을 추가하면 된다.

 location / {
  # First attempt to serve request as file, then
  # as directory, then fall back to displaying a 404.
  #try_files $uri $uri/ =404;
  try_files $uri $uri/ @rewrites;
 }

 location @rewrites {
  rewrite ^/category/([^/]+)page-([0-9+])$ /index.php?controller=blog&action=view&category=$1&number=$2 last;
  rewrite ^/category/([^/]+)/$ /index.php?controller=blog&action=view&category=$1&number=0 last;
  rewrite ^/tag/([^/]+)/page-([0-9]+)$ /index.php?controller=blog&action=view&tag=$1&number=$2 last;
  rewrite ^/tag/([^/]+)/$ /index.php?controller=blog&action=view&tag=$1&number=0 last;
  rewrite ^/page-([0-9]+)$ /index.php?controller=blog&action=view&number=$1 last;
  rewrite ^/post/([^/]+)/$ /index.php?controller=post&action=view&post=$1 last;
  rewrite ^/post-([0-9]+)/(.*)$ /index.php?controller=post&action=view&id_post=$1 last;
  rewrite ^/page/([^/]+)/$ /index.php?controller=page&action=view&page=$1 last;
  rewrite ^/feed/$ /feed.php last;
  rewrite ^/([^/]+)/$ /index.php?controller=page&action=$1 last;
 }


2015/11/06 12:34 2015/11/06 12:34
Posted
Filed under 프로그래밍/PHP
Guzzle은 HTTP형태의 API등을 호출하기 쉽게 하는 모듈이다.
사용법도 무쟈게 간단하고...특히 동기,비동기를 구분해서 보낼수가 있는게 젤 맘에 든다.ㅋㅋ
curl 쓰지 말고 이거 쓰자

https://github.com/guzzle/guzzle
http://docs.guzzlephp.org

2015/11/03 15:28 2015/11/03 15:28
Posted
Filed under 프로그래밍/PHP
요즘 해외에서는 Phalcon과 Laravel이 핫하다.
Pahlcon은 C로 컴파일하여 메모리점유율이 낮고 속도가 무쟈게 빠르다고 하다.
Laravel은 CI와 Slim을 짬뽕해놓은것 같은 느낌인데 국내에는 정보가 그닥 많지 않다.
속도가 생각만큼은 안나오네...

Phalcon사이트에 있는 이미지를 한장 올리겠다.
Slim은 micro framework 이긴하지만 Phalcon 다음으로 처리속도가 빠른것으로 나와있다.
Phalcon은 full stack framework 이다.

다음에는 Phalcon을 사용해 볼까?

사용자 삽입 이미지

일본사람이 벤치마크한 부분에는 속도는 여전히 Phalcon이 넘사벽이지만 메모리 사용에서는
ci,slim하고 같은것으로 표시되고 있다.

http://blog.a-way-out.net/blog/2015/03/27/php-framework-benchmark/


2015/11/03 15:18 2015/11/03 15:18
Posted
Filed under 프로그래밍
PUB,SUB 와는 틀리게 특정 클라이언트에 메세지를 전송할수 있다.
RabbitMQ처럼 사용할수 있는게 특징이다.

* 넣은 순서대로 가지고 온다
* 한번에 하나씩 가지고 온다.
* 가져가면 소멸한다.

ch_test에 메세지가 올때까지 대기한다.
(brpop의 두번째 인자가 timeout초 0은 메세지가 올때까지 대기)
<?php
ini_set('default_socket_timeout', -1);
$redis = new Redis();
$redis->connect('localhost',6379);

$test=$redis->brpop('ch_test',0);

print_r($test);
?>


ch_test에 test라는 메세지를 보낸다.
<?php
$redis = new Redis();
$redis->connect('localhost',6379);

$redis->lpush('ch_test','test');
?>
2015/10/02 18:31 2015/10/02 18:31
Posted
Filed under 프로그래밍
Redis 는 SUBSCRIBE 대상자 전체에게 PUBLISH 하는 기능이 있다.
메세지를 보관하지 않기때문에 클라이언트가 못받으면 해당 메세지는 다시 받을수 없다.
그래서 RabbitMQ 와는 틀리다.

redis-cli 에서 실행한다면

test 이라는 채널을 구독한다.
SUBSCRIBE test

그러면 메세지를 받을수 있는 대기상태로 전환된다.
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "test"
3) (integer) 1

다른 클라에서 보낸다.
PUBLISH test babo

해당 채널을 구독한 모든 클라는 같은 메세지를 받게 된다.
1) "message"
2) "test"
3) "babo"

복수 구독도 가능하다.
SUBSCRIBE test1 test2 test3

PHP 에서 redis 라이브러리 사용 (Ubuntu 기준)
apt-get install php5-redis

PHP에서 SUBSCRIBE 예제
<?php
function f($redis, $chan, $msg) {
 switch($chan) {
 case 'chan-1':
 print "get $msg from $chan\n";
 break;
 case 'chan-2':
 print "get $msg FROM $chan\n";
 break;
 case 'chan-3':
 break;
 }
}

ini_set('default_socket_timeout', -1);

$redis = new Redis();

$redis->pconnect('localhost',6379);

$redis->subscribe(array('chan-1','chan-2','chan-3'), 'f');
print "\n";
?>


PHP에서 PUBLISH 예제
<?php 
//publish.php 
$redis = new Redis(); 
$redis->pconnect('localhost',6379);
 $redis->publish('chan-1', 'hello, world!'); // send message to channel 1.
 $redis->publish('chan-2', 'hello, world2!'); // send message to channel 2.
 
 print "\n";
 $redis->close();
?>
2015/09/30 17:05 2015/09/30 17:05
Posted
Filed under 프로그래밍
보통 top을 사용하지만 그것보다 좀더 보기 편한넘이 있는데 htop이라고...
사진처럼 cpu와 메모리 사용량이 상단에 그래프로 나온다.
밑에는 뭐 top이랑 비슷하고.

우분투의 경우 apt-get install htop 으로 간단히 설치 할수 있다.

사용자 삽입 이미지
2015/08/27 16:35 2015/08/27 16:35
Posted
Filed under 프로그래밍/PHP
vi /etc/php5/fpm/pool.d/www.conf

아래 항목이 주석이 되어있는데 주석을 푸고 원하는 확장자를 추가해주자
기본은 .php 만 허용이다.

security.limit_extensions = .php .html .htm

php5-fpm 재시작

2015/08/25 12:23 2015/08/25 12:23
Posted
Filed under 프로그래밍
2017년 11월30일 18시 이후로 무료 서비스가 종료되고 지원하던 라즈베리파이도 없어진다.
그동안 서비스 하던 모든 데이터를 삭제하고 유료서비스만 한다고 한다.
그래서 서버업체에서 무상으로 제공하는 관제서비스를 사용하려고 한다.

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


오늘 클라우드 서버를 받았는데
/usr/whatap/monitoring/whatap_agentd
이런게 깔려있다?

이게 뭘까를 찾아봤다.

와탭(WHATAP) 이라는 서버모니터링 서비스네~
간단하게 모니터링 하고 싶다면 쓸만은 하겠다

유료모델 사용하면 얼럿(sms등..) 해주긴하는데
이게 서버당 최소 3만원(부가세 별도)이다..ㅋㅋㅋㅋ
서버 10대면 매월30만원~
비용이 좀 과하다 싶다

그리고...라즈베리 항목이 별도로 있다..ㅋㅋㅋㅋ

사용자 삽입 이미지

 
또 아쉬운 점은 이 데몬이 CPU를 생각보다 많이 사용한다는것과
프로세스는 관제할수 있지만 PORT는 할수없다.

http://www.whatap.io/

2015/08/18 19:37 2015/08/18 19:37
Posted
Filed under 프로그래밍
우분투에서 datadir을 변경했을때 이런 오류가 날수 있다.

start: Job failed to start

datadir만 변경해서 해결될 문제가 아니다..ㅋㅋㅋ

/home/mysql 로 datadir을 변경할경우의 예이다.
root에서 실행한다.

service mysql stop

rsync -av /var/lib/mysql /home

vi /etc/mysql/my.cnf
datadir = /var/lib/mysql
부분을
datadir = /home/mysql
으로 변경.

vi /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/
/var/lib/mysql/**
부분을
/home/mysql/
/home/mysql/**
으로 변경.

service mysql start
2015/08/18 17:15 2015/08/18 17:15