Install MongoDB + phpMongoDriver in Mac OSX High Sierra

Posted by nopsled
2018.09.13 16:25 데이터베이스

 brew install mongodb 

First, you have to install mongodb.


nopsled@smleeo3o:~/dump (=`ω´=)$ php -v

PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )

Copyright (c) 1997-2017 The PHP Group

Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 



Second, check your php version. this example's php version is 7.1.


 brew tap kyslik/php

 brew install php71-mongodb


Third, we have to install php MongoDriver 7.1



nopsled@smleeo3o:~ (=`ω´=)$ cd /usr/local/Cellar/php71-mongodb/1.4.0

nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ ls

INSTALL_RECEIPT.json  mongodb.so*

nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ cp /etc/php.ini.default /etc/php.ini 


Check mongodb.so file and copy your /etc/php.ini.default to /etc/php.ini.


 878 ; ... or with a path:

 879 ;

 880 ;   extension=/path/to/extension/msql.so

 881 ;

 882     extension=/usr/local/Cellar/php71-mongodb/1.4.0/mongodb.so

 883 ; If you only provide the name of the extension, PHP will look for it in its

 884 ; default extension directory.

 885 ;

 886 ; Windows Extensions 

And you have to add mognodb.so files location in /etc/php.ini.


 nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ sudo apachectl restart

restart your apache.


이 댓글을 비밀 댓글로

중년기사김봉식 매크로

Posted by nopsled
2018.08.09 23:52 일상생활


심심해서 만든 중년기사김봉식 매크로


애초에 심심해서 혼자 쓰기 위해서 개발했다. 캡챠가 있는것도 아니라서 개발에 어려움은 없었다.


만들고나니 내가 왜 만들었지 라는 생각... 하루였던가 돌리면 10000보석 이상이었던걸로 기억한다.


동영상 스킵은 게임내에 있는 동영상 스킵 구매(과금)로 진행되는게 아닌 자체개발로 만들어졌다.


꽤 짭짤했는데 요즘은 잘 안쓰게된다.. 심심한데 또 뭐 만들꺼없나...

'일상생활' 카테고리의 다른 글

중년기사김봉식 매크로  (5) 2018.08.09
18.02.22 전역  (0) 2018.04.25
페이스북 video_xxxx.zip  (0) 2017.12.17
2017.09.12  (0) 2017.09.12
2017.06.10  (0) 2017.06.10
육군 정보보호병  (5) 2016.04.23
    • 2018.08.22 07:12
    비밀댓글입니다
    • 2018.08.23 22:19
    비밀댓글입니다
    • 영탁2
    • 2018.08.25 12:12 신고
    혹시 공유 가능하신가요??
    • 2018.09.14 00:26
    비밀댓글입니다
    • 2018.09.28 11:42
    비밀댓글입니다
이 댓글을 비밀 댓글로

linux UTC to KST (also hardware time too)

Posted by nopsled
2018.06.05 10:29 운영체제

매일매일 VM 셋팅해주면 region 때문에 time이 문제다.


아시아로 맞춰주면 UTC로 변하질 않나.. rdate로 타임서버랑 싱크 맞춰도 안맞질 않나... 짜증나서 열심히 삽질하다가 올려본다.


참고로 환경은 Ubuntu 16.04 LTS다.



nopsled@vmtest:~/$ ls -al /usr/share/zoneinfo/Asia | grep Seoul

lrwxrwxrwx  1 root root    6 Nov  9  2017 Seoul -> ../ROK

nopsled@vmtest:~/$ 



위와 같이 Seoul이 있는거 확인하면 된다. 참고로 환경이 Ubuntu라 경로가 바뀔 수 있음을 알아두자.



nopsled@vmtest:~/$ ls -al /etc/localtime

lrwxrwxrwx 1 root root 30 Jun  4 18:22 /etc/localtime -> /usr/share/zoneinfo/US/Pacific

nopsled@vmtest:~/$ 


/etc/localtime이 있는지 확인



nopsled@vmtest:~/$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

nopsled@vmtest:~/$ ls -al /etc/localtime

lrwxrwxrwx 1 root root 30 Jun  5 10:26 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul

nopsled@vmtest:~/$ date

Tue Jun  5 10:27:11 KST 2018

nopsled@vmtest:~/$ sudo hwclock --show

Tue 05 Jun 2018 10:27:13 AM KST  .956086 seconds

nopsled@vmtest:~/$ 


파일이 root 권한이므로 sudo로 링크 다시 걸어주고 제대로 적용되었는지 /etc/localtime을 확인


마지막으로 date와 sudo hwclock --show로 하드웨어 타임과 맞는지 확인하며 끝낸다.

이 댓글을 비밀 댓글로

python pyodbc 설치 탐험기

Posted by nopsled
2018.06.04 15:59 프로그래밍

우선 환경은 Ubuntu Server 16.04 LTS이다.  (Azure)


python pyodbc를 설치하려고 하는데 자꾸 에러가 뜬다..

날 괴롭힌 에러는 다음과 같다.


error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

위에 있는 에러가 자꾸 뜬다...


열심히 찾아봤는데 자꾸 이상한 lib들 설치하라고 난리친다.


sudo apt-get install unixodbc-dev


wget https://packages.microsoft.com/ubuntu/16.04/prod/pool/main/m/msodbcsql17/msodbcsql17_17.0.1.1-1_amd64.deb


sudo dpkg -i msodbcsql17_17.0.1.1-1_amd64.deb


pip install pyodbc


이거 하면 잘된다.


1번라인 : unixodbc develop 관련 라이브러리 설치

2번라인 : mssql odbc drvier 17 다운

3번라인 : 다운받은 데비안 패키지 설치

4번라인 : pyodbc 설치


끝..


'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
이 댓글을 비밀 댓글로

[mongodb] how to find dictionary not null

Posted by nopsled
2018.04.30 18:17 데이터베이스

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test2@gmail.com",

    "name" : "test2",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test3@gmail.com",

    "name" : "test3",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


You have to know object's dictionary key.


If you want find loc(dictionary) not null data, using next query.


db.users.find({"loc.country":{$exists:true}}) 



debug result

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


이 댓글을 비밀 댓글로

crontab checker

Posted by nopsled
2018.04.26 18:13 운영체제

직장에서 crontab을 이렇게 열심히 쓸줄은 몰랐다.


심심해서 crontab checker 만들려고 했는데 누가 만들어놨다... 그것도 온라인으로.....


https://crontab.guru/

위 링크에서 cron command 만들고 


http://cron.schlitt.info/


위에서 테스트하면 확실하게 알 수 있다.

이 댓글을 비밀 댓글로

18.02.22 전역

Posted by nopsled
2018.04.25 00:55 일상생활

​​



오래전에 했지만 지금 올린다. 고마운 녀석들😊 고생많았다

'일상생활' 카테고리의 다른 글

중년기사김봉식 매크로  (5) 2018.08.09
18.02.22 전역  (0) 2018.04.25
페이스북 video_xxxx.zip  (0) 2017.12.17
2017.09.12  (0) 2017.09.12
2017.06.10  (0) 2017.06.10
육군 정보보호병  (5) 2016.04.23
이 댓글을 비밀 댓글로

[javascript] calculate datetime

Posted by nopsled
2018.04.24 17:39 프로그래밍

Calculate datetime 2 ways.



1 way will be calculate about YYYY-MM - YYYY-MM


function calMonthRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 7 || val2.length != 7)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1]);
var to_dt = new Date(end_dt[0], end_dt[1]);
return Math.ceil((to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24 / 30);
}

calMonthRange("2017-08", "2018-04")


/*
Debugging output
*/
9




/*
1 way apply code
*/

function formatMonth(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
year = d.getFullYear();

if (month.length < 2) month = '0' + month;

return [year, month].join('-');
}

function calMonthRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 7 || val2.length != 7)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1]);
var to_dt = new Date(end_dt[0], end_dt[1]);
return Math.ceil((to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24 / 30);
}

for(var i=0; i<calMonthRange("2017-08", "2018-04"); i++) {
    console.log(formatMonth(new Date("2017-08").setMonth(new Date("2017-08").getMonth() + i)))
}



/*
Debugging output
*/
2017-08
2017-09
2017-10
2017-11
2017-12
2018-01
2018-02
2018-03
2018-04




2 way will be calculate about YYYY-MM-DD - YYYY-MM-DD

function calDateRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 10 || val2.length != 10)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1], start_dt[2]);
var to_dt = new Date(end_dt[0], end_dt[1], end_dt[2]);
return (to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24;
}

calDateRange("2018-03-22", "2018-04-24")


/*
Debugging output
*/
33




/*
2 way apply code
*/

function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();

if (month.length < 2) month = '0' + month;
if (day.length < 2) day = '0' + day;

return [year, month, day].join('-');
}

function calDateRange(val1, val2)
{
var FORMAT = "-";
if (val1.length != 10 || val2.length != 10)
return null;
if (val1.indexOf(FORMAT) < 0 || val2.indexOf(FORMAT) < 0)
return null;
var start_dt = val1.split(FORMAT);
var end_dt = val2.split(FORMAT);
start_dt[1] = (Number(start_dt[1]) - 1) + "";
end_dt[1] = (Number(end_dt[1]) - 1) + "";
var from_dt = new Date(start_dt[0], start_dt[1], start_dt[2]);
var to_dt = new Date(end_dt[0], end_dt[1], end_dt[2]);
return (to_dt.getTime() - from_dt.getTime()) / 1000 / 60 / 60 / 24;
}

for(var i=0; i<calDateRange("2018-03-22", "2018-04-24"); i++) {
console.log(formatDate(new Date("2018-03-22").setDate(new Date("2018-03-22").getDate() + i)))
}



/*
Debugging output
*/
2018-03-22
2018-03-23
2018-03-24
2018-03-25
2018-03-26
2018-03-27
2018-03-28
2018-03-29
2018-03-30
2018-03-31
2018-04-01
2018-04-02
2018-04-03
2018-04-04
2018-04-05
2018-04-06
2018-04-07
2018-04-08
2018-04-09
2018-04-10
2018-04-11
2018-04-12
2018-04-13
2018-04-14
2018-04-15
2018-04-16
2018-04-17
2018-04-18
2018-04-19
2018-04-20
2018-04-21
2018-04-22
2018-04-23




'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
이 댓글을 비밀 댓글로

[javascript] get ip only using javascript

Posted by nopsled
2018.04.19 18:06 프로그래밍

Client

>> 내부 아이피


/**

 * Get the user IP throught the webkitRTCPeerConnection

 * @param onNewIP {Function} listener function to expose the IP locally

 * @return undefined

 */

function getUserIP(onNewIP) { //  onNewIp - your listener function for new IPs

    //compatibility for firefox and chrome

    var myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection;

    var pc = new myPeerConnection({

        iceServers: []

    }),

    noop = function() {},

    localIPs = {},

    ipRegex = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/g,

    key;


    function iterateIP(ip) {

        if (!localIPs[ip]) onNewIP(ip);

        localIPs[ip] = true;

    }


     //create a bogus data channel

    pc.createDataChannel("");


    // create offer and set local description

    pc.createOffer().then(function(sdp) {

        sdp.sdp.split('\n').forEach(function(line) {

            if (line.indexOf('candidate') < 0) return;

            line.match(ipRegex).forEach(iterateIP);

        });

        

        pc.setLocalDescription(sdp, noop, noop);

    }).catch(function(reason) {

        // An error occurred, so handle the failure to connect

    });


    //listen for candidate events

    pc.onicecandidate = function(ice) {

        if (!ice || !ice.candidate || !ice.candidate.candidate || !ice.candidate.candidate.match(ipRegex)) return;

        ice.candidate.candidate.match(ipRegex).forEach(iterateIP);

    };

}


// Usage


getUserIP(function(ip){

    alert("Got IP! :" + ip);

});


>> 외부 아이피

 $.getJSON('http://ipinfo.io', function(data){

console.log(data);

});


얘들도 답이 없는지 외부 사이트로 xhr 쏜다... jQuery 싫으면 axios로 쏴도된다.

출처 : https://ourcodeworld.com/articles/read/257/how-to-get-the-client-ip-address-with-javascript-only




Server

Routes.route('/testAPI').get(async (req, res) => {

const ip = req.connection.remoteAddress.split(':')[req.connection.remoteAddress.split(':').length-1]

}); 

request 헤더 중에 connection.remoteAddress이 있다. ipv6까지 표시해주는거 같은데 필요없으니까 잘라 주려고 split하고 가져온다.



var ip = req.header('x-forwarded-for') || req.connection.remoteAddress;

아니면 그냥 이거 써도 된다.

'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
    • 2018.04.22 11:55
    비밀댓글입니다
    • 안녕하세요.

      늦은 답글 죄송합니다. 네 맞습니다.
    • 아 네이버 블로그 시절 서로 이웃이였던 koreascretForce입니다. 아아 오토핫키 덕분에 자주 왕래했었던 기억이 나네요. 한참 마단오토 제작하셨을 때요! 다름이 아니오라 제가 근 2달 전에 외국에서 온 스팸 메일을 한 번 열고 그 메일에 있는 주소에 들어간 적 있습니다. 허나 그 이후로 영어로 된 스팸 메일이 끊임 없이 오는데 혹 차단할 방법이 있거나 이게 뭐 링크로 들어가서 어떠한 프로그램이 자동으로 설치될 리는 없겠지만 혹여나 그런가 싶어 문의드리고자 간만에 찾아뵙네요.. 혹시 아직도 군인 신분 이신건가요?!
    • 앗 안녕하세요! 오랜만이네요. 걱정 안하셔도 됩니다 ㅋㅋ 대부분 자동으로 수집해서 스팸 쏘는거니까 무시하시면 됩니다!
      2.22에 전역했어요
    • 근데 이전에는 오지 않다가 그 주소를 클릭한 뒤에 메일 주소가 계속 바뀌면서 와서 이거 뭐 어떻게 대응할 지 모르겟어서요ㅠㅠㅋㅋㅌㅌㅌㅌㅌ
이 댓글을 비밀 댓글로

ssh process continue after logout

Posted by nopsled
2018.04.19 17:58 운영체제

node js를 돌리는데 자꾸 죽어서 왜 죽지.. 하고 생각해봤는데 ssh session이 terminate가 되면 프로세스가 처음에는 살아있다가 나중엔 죽어버린다.


그래서 방안이 없나 하다가 (사실 예전에 알았는데 안쓰다보니 까먹었다..) screen을 사용하였다. session이 terminate되어도 잘 돌아간다.




  • screen
    • 스크린 진입 (일반적으로 귀찮으면 그냥 생성하려면 위와같이 입력하면 된다.)
  • screen -r
    • 스크린 세션 진입할때 이름 넣어주면 된다.
  • screen -S
    • 세션의 이름을 지정하여 스크린 진입



나는 자주 쓰는거만 설명하도록 하겠다. (screen 세부 명령어는 알아서 찾아보도록)



npm start &

^A

d


위는 예제다. npm start &로 시작하고 ctrl+a를 누른뒤에 d를 눌러주면 스크린에서 detach되고 ssh session terminate 시켜도 잘 돌아간다.

이 댓글을 비밀 댓글로