JetBrains 이전 버전 다운로드 링크 페이지

https://confluence.jetbrains.com/display/IntelliJIDEA/Previous+IntelliJ+IDEA+Releases



혹은 다운로드 페이지에서 Previous versions 링크 클릭 해도 해당 페이지로 이동 가능



- IntelliJ 14 download, install
- IntelliJ Previous version download
- IntelliJ 14 다운로드, 설치
- IntelliJ 이전 버전 다운로드, 설치



1. 다운로드 페이지 이동

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html


2. Java SE Development Kit 다운로드 목록에서 Accept License Agreement 클릭해서 약관 동의


3. OS에 맞는 항목 다운로드 후 설치

- Mac은 Mac OS X x64

- Windows의 경우 32비트는 Windows x86 / 64비트는 Windows x64




- jdk 1.7 install
- jdk 1.7 install on mac



Mac 환경에서 Maven을 설치하려고 보니 dmg나 pkg 같은 설치 형태로는 제공하고 있지 않다.

(http://maven.apache.org/download.cgi)


직접 받아서 설치해도 되지만 brew를 설치했다면 터미널에서 명령어 하나로 간단히 설치 가능하다.

(brew 설치는 http://hangaebal.tistory.com/7 참고)


brew install maven



메이븐 설치 끝!



------------------------------------------
- mvn: command not found
- mvn install on mac
- maven install on mac
- maven install on osx
- maven mac 설치
------------------------------------------

Homebrew


Mac OS 환경에서 개발하다가 이것 저것 설치하다 보면 rpm이나 apt-get 같은건 없나 싶은 경우가 있다.


Homebrew는 리눅스의 RPM(Red Hat Package Manager)나 우분투 등의 데비안 계열의 apt-get(Advanced Packaging Tool) 처럼 패키지 관리를 쉽게 할 수 있도록 도와준다.


- 설치는 터미널에서 아래 명령어를 입력하면 끝

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


- 이후 사용은 'brew install 패키지명' 형태로 한다.




- Mac OS homebrew brew install

- OS X homebrew brew install

- mac homebrew brew 설치


참고 :

http://brew.sh/index_ko.html

- Node socket 채팅 예제
- Node socket chat example



[Express.js] Node.js, socket.io 채팅 예제 (2)

채팅에 기능을 더 추가한다.

글을 작성하면서 개발한게 아니라 진행 과정은 추후에 정리해야겠다.



아래는 결과 소스



index.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});



var userList = [];


io.on('connection', function(socket){
  var joinedUser = false;
  var nickname;

  // 유저 입장
  socket.on('join', function(data){
    if (joinedUser) { // 이미 입장 했다면 중단
      return false; 
    }

    nickname = data;
    userList.push(nickname);
    socket.broadcast.emit('join', { 
      nickname : nickname
      ,userList : userList
    });

    socket.emit('welcome', { 
      nickname : nickname
      ,userList : userList
    });

    joinedUser = true;
  });


  // 메시지 전달
  socket.on('msg', function(data){
    console.log('msg: ' + data);
    io.emit('msg', { 
      nickname : nickname
      ,msg : data
    });
  });


  // 접속 종료
  socket.on('disconnect', function () {
    // 입장하지 않았다면 중단
    if ( !joinedUser) { 
      console.log('--- not joinedUser left'); 
      return false;
    }

    // 접속자목록에서 제거
    var i = userList.indexOf(nickname);
    userList.splice(i,1);

    socket.broadcast.emit('left', { 
      nickname : nickname 
      ,userList : userList
    });    
  });
});




index.html
<!doctype html>
<html>
<head>
  <title>Socket.IO chat</title>
  <style>
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body { font: 13px Helvetica, Arial; }
    form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
    form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
    form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
    #messages { list-style-type: none; margin: 0; padding: 0; }
    #messages li { padding: 5px 10px; }
    #messages li:nth-child(odd) { background: #eee; }

    #messages span.nickname { font-weight: bold; font-size: 120%; display: inline-block; width: 100px; }


    div.userList { text-align: center; width: 200px; min-height: 200px; border: 1px solid #999;}
    #userList { list-style-type: none; margin: 0; padding: 0; }
    #userList li { }

    #before { text-align: center; margin-top: 50%; }
    #after { display: none; }
    .noti { text-align: center; color: blue; }
  </style>
</head>
<body>

<section id="before">
  <p>닉네임을 입력하세요</p>
  <input id="nickname"><button id="joinBtn">들어가기</button>
</section>


<section id="after">
  <div class="userList">
    <h2>현재 접속자</h2>
    <ul id="userList"></ul>
  </div>

  <hr>
  <ul id="messages"></ul>
  <form>
    <input id="m" autocomplete="off" /><button>Send</button>
  </form>
</section>

<script src="/socket.io/socket.io.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>

var nickname;
var socket = io();

// 이벤트: join 클릭 
$('#joinBtn').click(function(e){  
  fnNickname(e);
});

// 이벤트: nickname 엔터키 
$('#nickname').keypress(function(e) { 
  if (e.which == 13) {
    fnNickname(e);
  }
});

// 송신: 닉네임
function fnNickname(e) {
  if ($('#nickname').val().trim() == '') {
    alert('Input your nickname!');
    return false;
  }
  nickname = $('#nickname').val().trim();
  socket.emit('join', nickname);  // 접속 이벤트
}



// 수신: 환영인사
socket.on('welcome', function(data){
  // 유저리스트 업데이트
  fnUpdateUserList(data.userList);

  $('#before').hide();
  $('#after').show();
  $('#messages').append($('<li class="noti">').text(nickname + '님 환영합니다.'));  
});


// 유저리스트 업데이트
function fnUpdateUserList(userList) {
  $('#userList').text('');
  for (i = 0; i < userList.length; i++) {
    $('#userList').append($('<li>').text(userList[i]));
  };
}

// 수신: 신규자 접속
socket.on('join', function(data){
  // 입장 알림
  $('#messages').append($('<li class="noti">').text(data.nickname + '님이 입장하셨습니다'));
  
  // 유저리스트 업데이트
  fnUpdateUserList(data.userList);
});

// 수신: 퇴장
socket.on('left', function(data){
  // 종료 알림
  $('#messages').append($('<li class="noti">').text(data.nickname + '님이 퇴장하셨습니다'));
  
  // 유저리스트 업데이트
  fnUpdateUserList(data.userList);
});


// 송신: 메시지
$('form').submit(function(){
  socket.emit('msg', $('#m').val());
  $('#m').val('');
  return false;
});
  

// 수신: 메시지
socket.on('msg', function(data){
  var span = $('<span class="nickname">').text(data.nickname);
  var li = $('<li>').append(span).append(data.msg);
  $('#messages').append(li);
});

</script>

</body>
</html>








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

블로거에 썼던 글을 데려옴

http://hangaebal.blogspot.kr/2015/12/expressjs-nodejs-socketio-2.html

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



+ Recent posts