2015.05.07 16:03
Coconut은 서비스를 위해 가동되는 시스템을 손쉽게 관리하기 위해 만들어졌습니다.

Coconut은 관리자가 지정한 그룹이름과 특정 시스템에 부여한 별칭으로 손쉽게 정렬하고 모니터링 할 수 있습니다.

자신이 지정한 특정한 어플리케이션의 이상유무를 실시간으로 파악하여 보고하며, 

서비스를 위한 패치를 버튼 몇번을 누름으로서 손쉽게 배포/패치할 수 있습니다.

그리고, 툴에서 제공하는 하나의 터미널 화면을 통해 자신의 모든 시스템에 손쉽게 접근하여, 자신이 원하는 작업을 처리할 수 있습니다. 

제공하는 주요 기능은 아래 툴 화면을 통해 설명드립니다.



(터미널 탭) : 이 창을 통해 각 서버로 접속하여 상세한 컨트롤을 할 수 있습니다.
(그룹 탭) : 모니터링 혹은 명령 전달을 특정 그룹별에 전달하기 위해 서버를 정렬하거나 선택/해제를 할 수 있습니다.
(App 관리 탭) : 가동중인 프로세스 중 특정한 어플리케이션을 지정하여 시작/중단/재시작을 지시할 수 있으며, 
특정 서버 혹은 그룹에 지정한 파일을 전달할 수 있습니다. (6월 업데이트에서 원격 저장소에서 다운받는 기능이 추가될 예정입니다.)
(모니터링 탭) : 등록된 서버들의 리소스를 모니터링할 수 있는 탭으로, 특정한 리소스가 한계에 달하거나, 관리 대상의 어플에 문제가 발생하면 붉은색으로 표기됩니다.

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

모든 소스는 GPL v2로 오픈되어 있으며, 아래의 주소에서 다운 받으실 수 있습니다.


아래의 메뉴얼에서 간단한 설치 방법을 보실 수 있습니다.


아래 주소에서 제공되는 메뉴얼을 참고하시면, 사용법을 쉽게 확인할 수 있습니다. 


사용하시면서 불편한 점, 추가로 필요한 내용을 이슈에 올려주시면 빠른 시간에 검토하여 관련 처리에 대한 내용을 답변드리겠습니다.

https://github.com/blackwitch/Coconut/issues 로 많은 의견 부탁드립니다.


앞으로 지속적으로 개선/발전시켜 많은 분들이 사용하는 통합툴로 발전시킬 예정입니다. 

많은 관심 부탁드립니다. 


저작자 표시 비영리 동일 조건 변경 허락
신고
2015.05.04 01:49

인터넷 라디오 프로토타입을 완성. 실행 후 버튼을 누르면 채널이 변경되도록 만들었다. 


일단 회로도 구성은 아래와 같다. 아직은 버튼이 하나라 간단하다. 



YELLOW BUTTON : 3.3V로 전원이 들어가고 10K옴을 통해 버튼으로 들어간다. 위 그림에서 위 오른쪽 다리 방향으로 GND로 이어지고, 버튼의 입력은 18번 핀으로 받도록 설정했다. 18번 pin은 wiringPI에서 5번이다.


실행 후 노란 버튼을 누르면 미리 입력된 채널이 변경되도록 했다. mms 출력을 위해 mplayer를 사용하며, mplayer 설치 방법 을 참고하기 바란다. 


코드는  아래와 같다. 

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <time.h>

#include <unistd.h>

#include <wiringPi.h>


int main (void)

{

  if(-1 == wiringPiSetup())

    return 1;


  int SWITCH = 5; //  pin 18

  pinMode( SWITCH, INPUT);


  clock_t startPush = 0;// for shutdown

  const char *radiolist[] = {

    "mms://210.105.237.100/mbcam"

    ,"mms://211.181.136.136/livefm"

    ,"mms://114.108.140.39/magicfm_live"

    ,"mms://115.84.165.160/fmlive"

    ,"mms://211.218.209.124/L-FM_300k"

  };


  int count = sizeof(radiolist)/sizeof(int);

  printf("radio list count = %d\n", count);

  printf("now time = %d \n", startPush);


  pid_t sndPID = -1;

  pid_t myPID = getpid();

  int radioIdx = 0;

  for (;;)

  {

    if( digitalRead(SWITCH) == 0)

    {

        if(sndPID != -1)

          kill(sndPID, SIGQUIT);

        sndPID = fork();

        if(sndPID == 0)

        {

          sndPID = execl("/usr/bin/mplayer", "mplayer", "-quiet", radiolist[radioIdx], NULL);

        }else{

          ++radioIdx;

          if(radioIdx >= count)

            radioIdx = 0;

        }

    }

  }

  return 0 ;

}

18번 핀의 입력을 받으면 저장한 라디오 주소를 바꿔주도록 했다.


결과는 아래와 같다. 



다음에는 볼륨 조절, 종료 코드를 추가해 볼 예정이다. 

이후 블루투스 스피커 연결, 외형 제작, 실기 테스트 순서로 진행되어 마무리 될 예정. 


다들 좋은 하루 되세요. ^^





저작자 표시 비영리 동일 조건 변경 허락
신고
2015.04.18 22:06

이 글은 개인적으로, 라즈베리파이를 활용한 첫번째 프로젝트이다. 


아내가 집 안쪽에서 라디오 안잡혀서 힘들다고 불평이었다. ipad에 라디오 어플을 설치해줘도 각 방송사마다 별도 어플을 설치해야 되서 힘들다고.. 


고민끝에 라파이로 라디오를 만들어주기로 했다. 


그래서 최근에 라파이를 구매했고, 오늘 라이브러리 설치해서 테스트까지는 했다. 


과정은 아래와 같다.

(* 아래 과정은 http://kocoafab.cc/tutorial/view/340 블로그의 내용을 참고해서 제작되었으며, 짧은 진행을 위해 불필요한 과정 생략, 내 환경과 틀린 부분을 수정하여 제작되었음을 알립니다.)


(* command의 모든 과정은 sudo 명령을 먼저 입력하고 진행하자. 혹은 귀찮다면 나처럼, sudo su를 입력해서 권환을 획득 후 진행해도 된다.) 


1. 일단 패키지 설치를 위해 apt-get 업데이트를 해보자.

   apt-get update

   apt-get upgrade


2. 사운드 드라이버가 설치되었는지 확인합니다. 



만약 설치가 안되었다면 아래 명령을 통해 설치를 해보시기 바랍니다. 

modprobe snd-bcm2835


3. 이제 라디오 방송을 듣기 위해 mplayer를 설치합니다.
우리나라의 라디오 방송은 대부분 Microsoft Media Server (mms , http://goo.gl/XPTGJv 참고)로 전송됩니다. 이를 플레이 할 수 있는 대표적인 플레이어 입니다. 

apt-get install mplayer

설치 후 mplayer config에서 오디오 출력장치에 대한 설정을 수정해야 합니다. 

ctrl+w 로  ao=pulse, alsa, sdl: aalib 부분을 찾아 주석을 처리해 주세요. 

4. 이제 들어봅시다.

아래와 같이 입력해서 라디오를 들어봅시다. 

mms 주소는 인터넷으로 검색해 보시면 많이 나옵니다. 



이상입니다. 


다음 과정은 아래와 같이 진행될 예정입니다. 진행에 문제가 발생할 수 있어, 아래 과정은 변경될 수 있습니다.


1. 라즈베리파이 설정 

2. 전용 플레이어 프로그램 구현

3. 여러 mms 주소를 입력해두고 채널을 전환하는 과정 구현

4. 외부 스위치를 통해 채널 전환하는 과정

5. 설치 구동 영상 


저작자 표시 비영리 동일 조건 변경 허락
신고
2015.04.16 14:39

https://github.com/blackwitch/EasyPatcher/


Github에 업데이트 되었습니다. 


메뉴얼에도 있지만 이곳에 간단히 강좌 형태로 업데이트 할 예정입니다. 


많은 활용과 피드백 부탁드립니다. 


github 이슈 혹은 메일을 같이 남겨주시면 피드백될 사항들에 대해서는 어떻게 반영할지에 대해서 꼭 답변 드리겠습니다. 결정에는 다소 시간이 걸릴 수 있으니, 바로 답변을 못받으시더라도 양해 바랍니다.





저작자 표시 비영리 동일 조건 변경 허락
신고

'프로젝트 > 유니티 프로젝트 패치툴' 카테고리의 다른 글

GitHub 업데이트 !!  (3) 2015.04.16
Easy Patcher 4월 중 공개 예정  (0) 2015.04.09
2015.04.09 14:12

서비스 관리를 위한 전용 관리툴을 오픈소스로 오픈할 예정입니다. 


메뉴얼도 전달되지만, 이 카테고리를 통해 필요한 정보를 전달할 예정입니다. 






Coming Soon!!

저작자 표시 비영리 동일 조건 변경 허락
신고
2015.04.09 11:33

Unity5 이상을 지원하며, AssetBundle로 구성된 컨텐츠의 업데이트를 지원하는 툴입니다. 


4월 중 메뉴얼, 기능을 다듬어 에셋스토어와 GitHub에 업데이트 할 예정입니다. 





Coming Soon!!


저작자 표시 비영리 동일 조건 변경 허락
신고

'프로젝트 > 유니티 프로젝트 패치툴' 카테고리의 다른 글

GitHub 업데이트 !!  (3) 2015.04.16
Easy Patcher 4월 중 공개 예정  (0) 2015.04.09
2015.01.12 14:39

impact-slash-loader : 로딩씬 처리

scale.js : entity의 스케일 조정

touch-button.js : 모바일 디바이스의 터치 이벤트 처리


notive font plugin

https://github.com/quidmonkey/Canvas-Native-Fonts-Plugin




저작자 표시 비영리 동일 조건 변경 허락
신고
2013.06.09 12:58

샘플 이미지는 이걸로... gameadvence에서 잴 좋아했던 게임 advence war의 타일과 기본 캐릭터로...





배경 설정부터.. 


화면이 열리면 상단의 기본 메뉴들과 (load, save, new 등등) 오른쪽에 붙은 entities와 collision메뉴가 나온다.


상단의 new 를 누르고, 배경을 만들어보자.


우측의 Layers옆에 + 기호가 있는데 이걸 누르면 새로운 레이어를 추가할 수 있다. 하단의 delete 버튼으로 현재 선택된 레이어를 삭제할 수 있다.


일단 타일 사이즈는 16 (16 by 16으로 세팅됨.), dimensions는 40x40으로 세팅 후 "apply changes"를 클릭하면 화면이 적용된다. 

Name에 레이어의 이름을 넣고

tileset을 누르고 사용할 타일 이미지 파일을  선택한다. (샘플에서는 16x16으로 만들어진 위 샘플을 사용했다.)

 - 우측 마우스를 누르고 화면이 이동하면 기본 좌표값을 이동하여 볼 수 있으며, 

 - 휠을 사용하면 화면을 확대, 축소 할 수 있다. (최대 4배까지 확대 가능)

 - "SPACE BAR" 버튼을 누르면 지정한 타일을 선택할 수 있다.

 - ctrl + z or Y로 undo와 redo를 지원한다.

 * "lib/weltmeister/config.js"파일에서 이런 컨트롤 기능들을 수정할 수도 있다.


이제 그려보자.




그리고 상단의 "SAVE"버튼을 눌러 저장하면 이름 지정이 나오는데 파일 이름을 수정하여 저장한다. 위치는 "lib/game/levels/stage_1.js" 이렇게 저장된다.


그 다음 collision 레이어를 선택하고 못가는 지형을 선택한다.


(스샷 생략)


그 다음은 entity들을 생성해보자. 


일단 entity를 설정하기 위해서는 lib/game/entities에 원하는 객체를 정의해야 한다. 

기본은 delay밖에 없다. 


샘플 작업을 위해 shooter.js를 만들어 툴 작업을 계속 진행해봤다. (shooter.js는 http://impactjs.com/documentation/class-reference/entity 참조)


shooter.js를 entities에 구현하고 툴을 리로드 한 후 entities 메뉴 선택 후 스페이스 바를 누르면 메뉴에 shooter가 추가된 것을 확인할 수 있다.




그 외 entities에는 내가 제작한, 게임에 사용할 각종 entities를 등록하여 배치할 수 있다.


예를들어 "http://impactjs.com/documentation/video-tutorial-weltmeister" 를 보면, 특정 영역에서 작동할 tigger를 등록하는 샘플을 볼 수 있다.


js와 게임에 대한 개념만 알고 있다면 뚝딱!! 게임을 만들 수 있을 정도. 



저작자 표시 비영리 동일 조건 변경 허락
신고
2013.06.08 21:12

getting start 읽고 해볼걸... 


웹 서버에 올리고 실행해야 하는 것을 ㅠ_ㅜ


아래의 내용은 http://impactjs.com/documentation/getting-started 를 참고로 해서 


내 맘대로 재정리 해둔 것이다.


[기본 세팅]


기존에 설치했던 xampp로 아파치 서버 올리고,  전달된 코드를 모두 htdocs에 올리고, 테스트 해보니 모두 정상 가동됨. 하지만, 이렇게되면 불필요한 파일들도 다 로딩되는거 아닌가? 이건 나중에 따로 체크해볼 필요가 있겠다. 레벨별로 로딩도 필요할텐데...


[폴더 구조]

폴더 구조는 아래와 같다.


media/
lib/
lib/game/
lib/game/entities/
lib/game/levels/
lib/impact/
lib/weltmeister/


media/ => 게임에 사용할 각종 리소스들. sound, image 등등... 이곳에 넣어두면 시작시 프리로딩이 자동으로 된다. 


lib에는 코드와 관련된 파일들이 저장된다. 


lib/game에 game.js 파일이 있는데, 초기화를 담당하는 파일이다. 이 파일을 중심으로 코드를 늘려가면 된다.


lib/weltmeister/는 impact에서 제공하는 레벨 에디터가 있다. 직접 수정할 건 아닌 듯.


기타 폴더에는 코드는 아니고 게임에 사용되는 데이터를 포함하게 될 듯. 레벨 에디터를 사용하면 자동으로 세팅될 듯.


[모듈 제작]

새로 제작되는 모듈들을 추가할 때 js는 include를 제공하지 않으며, AJAX의 include를  사용할 수 있지만, 디버깅이 안된다는 단점이 있다. 


impact의 소스 코드는 모듈로 구성된다. 모듈의 정의는 아래와 같은 형태로 구성된다.







아래는 샘플 테스트 진행 내용들...


1. 일단 소스 전체를 test 폴더라는 이름으로 웹서버 htdocs 한켠에 복사하고..

ig.module( 
    'game.my-file' 
)
.requires(
    'impact.game',
    'impact.image',
    'game.other-file'
)
.defines(function(){

    // code for this module

});

ig.module에는 자신 파일의 이름.

requires에는 자신이 인클루드할 js 파일 이름을 넣는다.

그리고 defines에 자신의 코드를 정의한다.


[Impact가 어떻게 작동하는지]

Impact는 라이브러리가 아니라 프레임워크라네. 개인적으로 애매한 정의일 듯. 보통 상용 엔진들은 둘 다를 제공하거나 .. 라이브러리를 제공하는 경우인데. 프레임워크만 제공하다니.

근데 코드를 보면 라이브러리를 제공 안하는건 아닌데.. 왜 이렇게 말하는 걸까. 이유는 좀 더 살펴보고 생각해 봐야겠네. 


게임에 사용되는 모든 오브젝트는 ig.Entity를 상속받아 구현하라. 


impact는 초당 60번 ig.system.run()를 호출하도록 세팅되고, 이 녀석이 내가 만든 run을 다시 호출하도록 되어 있다. 그리고 이 안에서는 기본적으로 update와 draw를 호출하게 된다네.


ig.Game의 draw는 화면을 지우고, 각 background layer와 entity들의 .draw를 호출한다.

update는 background layer와 entity들의 update를 호출한다. entity의 기본 update에서는 position, velocity, bounciness 등과 같은 물리속성에 따라 entity들을 이동시킨다. 


모든 entity들의 업데이트가 완료되면, 게임은 checkEntities()를 호출하는데, 이는 entity들간의 충돌 처리와 같은 동적 충돌을  처리하며, entity들의 check 함수를 호출한다. 


필요하다면 ig.Entity와 ig.Game을 재정의하여 나만의 로직을 정의할 수 있고, 또 필요할 경우 this.parent()를 사용하여 원래 기능들을 사용할 수 있다. 


저작자 표시 비영리 동일 조건 변경 허락
신고
2013.06.08 08:05

자바 스크립트 엔진 어떤게 좋을지 이것저것 찾아보고 써봤는데 


유료긴 하지만 툴과 기능이 가장 간편한 impact를 사용하기로 결정.


99$ .. 한화로 12만원 정도.



받아서 제작툴 기능을 하는 weltmeister.html 을 실행해 봤지만, 크롬과 익스에서 모두 정상 작동안됨. 


인덱스 파일도 익스에서만 자동함. 


뭐가 문제지 ㅠ_ㅜ



하여간.. 샀으니 열심히 공부해봐야지. ~ 


아, 특히 이걸로 만들고 ios에서 어플처럼 작동시킬 수 있는 점이 강점인 듯. 


그것도 써봐야 알겠지만... ^^a

저작자 표시 비영리 동일 조건 변경 허락
신고