'Repository'에 해당되는 글 173건

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 일상생활

​​



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

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

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
mysql 10061 에러 해결방법  (1) 2016.03.24

[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

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 시켜도 잘 돌아간다.

mongodb not authorized? how to create database in mongodb

Posted by nopsled
2018.04.18 11:01 데이터베이스

[root@dataking01 data]# mongo

MongoDB shell version v3.4.9

connecting to: mongodb://127.0.0.1:27017

MongoDB server version: 3.4.9

> use testdb

switched to db testdb

> db.createCollection("test_collection")

{

"ok" : 0,

"errmsg" : "not authorized on testdb to execute command { create: \"test_collection\" }",

"code" : 13,

"codeName" : "Unauthorized"

}

>


위와 같이 authorized가 안되어 있어서 컬렉션도 못만들고 난리가 났다.



[root@dataking01 data]# ps -ef | grep mongo

root     11876     1  0 10:57 ?        00:00:01 /usr/bin/mongod --auth -f /etc/mongod.conf

root     12127  8518  0 11:01 pts/0    00:00:00 grep mongo

[root@dataking01 data]# kill -9 11876

[root@dataking01 data]# 


서비스 확인해주고 11876 죽여준다음에


[root@dataking01 data]# /usr/bin/mongod -f /etc/mongod.conf

about to fork child process, waiting until server is ready for connections.

forked process: 12173

child process started successfully, parent exiting

[root@dataking01 data]# 


--auth flag 빼버리고 mongodb를 시작해준다.


그리고 mongo로 접속해서 use database_name, db.createCollection("collection_name") 해주면 된다.


이거 했다고해서 --auth flag를 다시 넣어주는거 깜빡하지말자.. 골로간다



[root@dataking01 data]# ps -ef | grep mongo

root     12173     1  0 11:02 ?        00:00:00 /usr/bin/mongod -f /etc/mongod.conf

root     12232  8518  0 11:03 pts/0    00:00:00 grep mongo

[root@dataking01 data]# kill -9 12173

[root@dataking01 data]#

[root@dataking01 data]#

[root@dataking01 data]# /usr/bin/mongod --auth -f /etc/mongod.conf

about to fork child process, waiting until server is ready for connections.

forked process: 12278

child process started successfully, parent exiting

[root@dataking01 data]# 


--auth flag를 줘야 혹여나 안털린다


오늘의 삽질 끝.

Mac high sierra apache connection refused error

Posted by nopsled
2018.01.08 17:58 운영체제

맥북 사용하는데 high sierra 업데이트 후 아파치가 고장났다...


cd /etc/apache2/  
sudo mv httpd.conf httpd.conf-afterupdate  
sudo mv httpd.conf.pre-update httpd.conf  
sudo apachectl configtest  
sudo apachectl restart 


config file을 새로 바꿔주면 잘 동작한다.


전에 설정해놓은 http.conf 파일은 알아서 잘 수정해서 httpd.conf.pre-update에 반영해주면 된다.


이래서 업데이트 하겠나.. 짜증짜증.. T.T