2013년 11월 21일 목요일

[Ucrew] Ativ Tab 3 사용 후기



저는 정말 다양한 곳에서 이 기기를 사용하고 있는데요.

추천해드리고 싶어 포스팅 합니다.



학교

예전에는 항상 모든 PPT를 다 출력해서 필기했었는데

저희 과는 모든 과목이 PPT나 PDF를 이용하기 때문에

때문에 종이 낭비가 굉장히 심했었어요.

(A4 한통 산거 한 학기에 다쓰고도 모자람...)










하지만 이젠

이렇게 강의중에 Ativ Tab 3를 켜고

PPT를 띄워서 그대로 필기를 할 수 있습니다.





















 S 노트 앱을 켜면 이렇게 필기도 되고 음성 메모라고 해서

교수님이 말씀하고 계신것을 녹음도 할 수 있어요 !

사실 이 기능은 있는지 잘 몰랐었는데

앞으로 유용하게 사용할 수 있을 것 같습니다.













동아리

저는 오케스트라 동아리에서 활동중인데요.

악보를 안가져 왔거나

새로운 곡을 한번 연주해보고 싶을때.

항상 악보를 뽑을 수는 없잖아요?










요렇게 악보를 바로 띄우면 됩니다!

얼마나 간편한지.

옛날 같았으면 이 추운날 다시 도서관 가서

악보를 프린트해와야 합니다.











전공

그리고 저는 소프트웨어 학과다 보니

코딩해야 할 일이 많습니다.









네 여긴 지하철인데요,

이렇게 가지고 다니면서

코딩도 할 수 있어

시간이 절약됩니다!

(Visual Studio 2012입니다.)










그래봤자 탭인데 뭐가 잘 되겠어? 라고 생각하시는 분들

보십시오.























자그마치 버츄얼머신이 돌아갑니다 !

왼쪽은 Putty로 오른쪽 리눅스에 터미널 접속을 하려고 하는 것이구요

오른쪽은 리눅스(Redhat)를 VirtualBox에서 띄운 화면입니다.



코딩도 되고 VM도 돌아가고 오피스도 되고 필기에 음성녹음...

성능이 좀 떨어지긴 하지만

여태 이거 없이 어떻게 살았나 싶을 정도로

이번학기에

저에게 있어서 정말 없어서는 안될 소중한 기기라고 생각합니다.

특히, 가벼우니까요.


강추.


2013년 11월 18일 월요일

[Node.js] MySQL 커넥션이 빠르게 끊어질 때

Hello SyntaxHighlighter

Mysql Pool

이번에 사용 하는 클라우드 서버는
Mysql 설정 파일을 바꿔도 윗단에서 커넥션을 빠르게 끊어버리는 바람에 문제가 되었습니다.

맨 처음에는 setInterval와 end 함수의 콜백을 이용해 특정 시간이 될 때마다
커넥션을 모두 끊고 다시 연결을 만들도록 했었는데요.
그래도 어느 순간이 되면 커넥션 에러가 발생 했습니다.

다음 시도는 Mysql-simple-pool모듈을 사용 하는 것이었습니다.
저번에 Mysql-simple-pool에 관해 포스팅을 한 적이 있었죠.
그런데 사용시 전에는 없었던 문제가 생겼습니다. 그것은 쿼리를 처음 할 땐 에러가 난다는 것이었죠.
쿼리를 몇 번 하고 나서야 에러가 안나고 잘 처리 되었습니다.

여러가지 해결 방법을 찾아보다가 Mysql모듈도 Pool을 지원한다는 사실을 알게 되었습니다.


var mysql = require('mysql');

var mysqlConfig = {
  host:       "아이피",
  port:       "포트",
  user:       "아이디",
  password:   "암호",
  database:   "데이터베이스" 
  };

var pool= mysql.createPool(mysqlConfig);

    pool.getConnection(function(err,connection){
        connection.query("쿼리",function(err,rows){
        //rows를 처리할 내용
        //release를 해주어 커넥션이 pool로 되돌아 갈 수 있도록 해줍니다.
        connection.release();
        //이제 이 커넥션은 pool로 돌아가 다른 주체가 사용 할 수 있도록 준비합니다.
        });
    });

//추가사항 : 이렇게 해줘도 끊기는 현상이 발생 할 때가 있었습니다.
//이건 최후의 방법인데 특정 시간마다 연결했다 끊는겁니다.
//저는 결국 이 방법으로 해결했습니다.

function keepAlive(){
   pool.getConnection(function(err, connection){
     if(err) { return; }
     connection.ping();
     connection.release();
   });

    //redis client를 사용중이라면, 아마 Redis연결도 빠르게 끊길겁니다.
    //client.ping();  // 라고 해주면 Redis연결도 유지합니다.
 }
 setInterval(keepAlive, 60*1000);







2013년 11월 14일 목요일

[Node.js] Android-client not handshaken client should reconnect

Hello SyntaxHighlighter

Socket.io



이 문제가 또 저를 붙잡았습니다.

예전에 자바스크립트로 코딩할 때, 알 수 없는 이유로 클라이언트 측에서

엄청나게 많은 reconnect를 요구하는 바람에 노드 서버가 아무것도 못하고

뻗어버리는 현상이 있었는데요

그때는 자바스크립트 측에 강제로 횟수 제한을 두어서 계속 연결 시도를 못하게 했었습니다.

이번에는 클라이언트가 자바인 경우인데요.

많은 Reconnect를 요구하는 것이 아니라 제대로 연결이 안됩니다.

게다가 될때도 있고 안될때도 있어서 매우 혼란스러운 상황이었습니다.

일단 로그는 다음과 같습니다.

서버측 : client not handshaken client should reconnect
클라이언트측 : IOCallback() 의 onError 작동

해결은 다음과 같이 했습니다.
// 사용 : https://github.com/Gottox/socket.io-java-client

static public int socketCnt=0; // 사용될 전역변수입니다.
static Thread tRecv;

public static void initialize(){
    tRecv = new Thread() {
    public void run() {
    try {
     socket = new SocketIO("http://***:***/");
     IOCallback IOC=new IOCallback() {
      @Override
      ...

      @Override
       public void onError(SocketIOException socketIOException) {
         System.out.println("an Error occured");
                   //그러니까 요지는, 에러가 나면 다시 연결을 시도 한다는 겁니다.
                   //횟수 제한을 두도록 했습니다.
         try {
  if(socketCnt<10){
  socket = new SocketIO("http://***:***/");
  socket.connect(this);
  socketCnt++;
  }
 } catch (MalformedURLException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 socketIOException.printStackTrace();
 }
     @Override
     ...
     socket.connect(IOC);
 } catch (Exception e1) {
 // TODO Auto-generated catch block
 e1.printStackTrace();
 }
     }
            
   };
   tRecv.start();
 try {
 tRecv.join();
 } catch (InterruptedException e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
 }
}
일단은 해결 된 듯 보이지만 시간이 지나봐야 알 것 같네요ㅋㅋ

2013년 11월 12일 화요일

[CentOS] Node Forever


서버가 죽어도 프로그램을 재시작하는 Forever를 설치하고 실행해 봅시다.

npm install forever -g 로 설치합니다.

forever start /경로/실행시킬 서버 자바스크립트파일
forever stop /경로/실행시킬 서버 자바스크립트파일

forever list 를 치면 [0]등 번호가 나옵니다.

그 번호를 이용해서

forever stop 0 은 멈춤

forever logs 0 은 로그를 볼 수 있습니다.

2013년 11월 2일 토요일

[CentOS] Security (보안 설정)

CentOS 6.x 기준

SSH 로그인
vi /etc/ssh/sshd_config

#루트권한 로그인을 막으려면 파일을 열어 다음을 추가한다.
PermitRootLogin no

#패스워드 없는 계정으로 로그인이 불가능 하도록 한다.
PermitEmptyPaswords no

TCP Wrapper
vi /etc/hosts.allow
#Wrapper를 이용하여 방화벽 역할을 하게 한다.
#ftp 데몬을 들어오는것 중 211.189 대역 허용
in.ftpd:211.189.0.0/255.255.0.0

vi /etc/hosts.deny
#인가 되지 않은 것은 모두 막는다.
ALL:ALL

sshguard 설치
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
wget http://sourceforge.net/projects/sshguard/files/sshguard/sshguard-1.5/sshguard-1.5.tar.bz2/download
bunzip2 sshguard-1.5.tar.bz2
tar -xvf sshguard-1.5.tar
cd sshguard-1.5
sudo yum install gcc make
sudo ./configure --with-firewall=iptables
sudo make && sudo make install

chkrootkit 설치
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install chkrootkit
#실행시킨다
chkrootkit 



보안은 양날의 칼입니다. 보안을 강화하면 불편해지고 느려지죠

편리하고 빠르면서도 강한 보안을 갖게 할 수는 없을까요?...

다음은 방화벽에 대해 포스팅 해 보도록 하겠습니다.

2013년 11월 1일 금요일

[Node.js] Redis 의 List 이용하기

Hello SyntaxHighlighter

Redis 의 List (lpush, llen, lrange, lrem)

var redis = require('redis');
/*
* (왼쪽에)
* 값을 넣는것은 lpush
* 길이 측정은 llen
* 범위 출력은 lrange
* 특정 값 삭제는 lrem
*
* (오른쪽)은 안해봤는데 아마 앞에 접두어로 r이 붙이면 될 것 같습니다.
*
* 그리고 모든 함수는 콜백을 지원합니다.
* 예 ) client.lrange('list',0,-1,function(err,obj){ ... });
*/
var client=redis.createClient(포트,호스트,null);

client.lpush('list','a');    //키 list에 a가 들어갑니다.
client.lpush('list','b');    //키 list에 b가 들어갑니다.
client.lpush('list','c');    //키 list에 c가 들어갑니다.
client.lpush('list','d');    //키 list에 d가 들어갑니다.

client.lrem('list',1,b);     //키 list에 b가 있다면 하나만 지웁니다.
client.lrange('list',0,-1);  //키 list를 모두 출력합니다. a, c, d 가 나옵니다.
client.lrange('list',1,2);   //키 list의 index기준 1~2를 출력합니다. c, d 가 나옵니다.
client.llen('list');         //키 list의 길이를 출력합니다. 3 이 나옵니다.



Node.js 에서 Redis의 리스트를 사용하는 예제를 찾아봤는데 없더군요.. 그래서 정리해서 올려봅니다.