작년부터 라즈베리파이를 살까 말까 고민했었는데.. 


무얼 만들지를 고민하다가 최근 아내가 간단한 라디오를 원해서, 


1) 부엌에 설치할 음성인식 인터넷 라디오.. 


아이가 요괴워치 시계를 사고 싶어 하는데 갈 때 마다 없어서 만들기로 한.


2) 메달을 삽입하면 TFT 화면에 소환 영상이 같이 출력되면서 소리가 나는 요괴워치 장남감.


을 만들려고 구매를 결정.


어제 손이 들어왔다. 


새로운걸 배우는건 언제나 두근두근이라.. ^^


게다가 이런 소식도... 윈도우10 라즈베리파이 지원!!


'개발/경험 > RaspberryPi' 카테고리의 다른 글

버튼으로 LED, Sound 처리하기  (0) 2015.05.01
blink 샘플 실행  (0) 2015.04.29
기본적이지만 중요 정보 몇가지  (0) 2015.04.18
드디어 왔다!!  (0) 2015.04.17

(링크포멜로 아키텍처 개요


잘 정리되어 있어서 링크만 업데이트 합니다. 


곧 프레임워크의 흐름(링크)을 정리해서 업데이트 하겠습니다. 


^^


클라이언트는 브라우저, 서버는 nodejs로 가정.


업데이트 진행 과정을 확인할 수 있도록 만들었다.


브라우저에서는 아래와 같은 코드로 작업을 하면 된다. 스트림으로 보낼 파일을 지정하고, 해당 서버로 소켓 연결해서 보낸다. 'data' 메세지를 통해 현재 업데이트된 사이즈를 확인할 수 있다.

var fn =$("input[type=file]")[0].files[0]; // input 폼을 이용해서 지정된 파일 확인

var AllSize = fn.size; // 진행 사항을 체크하기 위한 파일 전체 사이즈

var UploadedSize = 0; // 현재 업로드된 용량

var socket = io.connect('localhost:8765');

var stream = ss.createStream();

ss(socket).emit('upload', stream, {path: tarpath, name: fn.name, size: fn.size});

var blobstream = ss.createBlobReadStream(fn);

blobstream.on('data',function(chunk){

UploadedSize += chunk.length;

      console.log(' updated >> ' + UploadedSize + '/' + AllSize );

});

blobstream.pipe( stream );


서버에서는 upload 메세지로 전송되는 데이타를 받아 지정된 파일로 저장한다.

(*path.basename 는 지정된 경로명을 제외하고 파일명만 추려낸다.)

var io = require('socket.io').listen(8765);

var ss = require('socket.io-stream');

var path = require('path');


io.sockets.on('connection', function(socket){

ss(socket).on('upload', function(stream,data){

var fn = path.basename(data.name);

stream.pipe(fs.createWriteStream(fn));

});

});


필요해서 만들어 봄. -0-



  1. 진이 2015.05.19 15:27 신고

    간략한 소스만 있어서 이해가 잘 되질 안네요.

    전체적인 소스를 보여주실순 없나요~?

    • 가끔.하늘 가온아 2015.05.27 11:37 신고

      댓글을 지금에서야 봤네요.

      이 샘플은 "https://github.com/blackwitch/Coconut" 을 개발하면서 올렸던 글입니다.

      해당 프로젝트에서 파일을 전송하는 부분이 있는데 그걸 참고하시면 됩니다. ^^

      Web -> Manager -> Agent로 파일이 전달되기에서 웹에서 nodejs로 nodejs에서 다른 nodejs로 전달되는 모든 과정이 구현되어 있습니다.

      manager와 Agent의 app 하단 부분을 보시면 됩니다.

      도움 되시길 바랍니다.

없으면 인스톨.. 


apt-get install mpstat


기본으로 mpstat를 입력하면 아래와 같은 결과가 출력됨.


sudo mpstat


Linux 3.13.0-45-generic (rs2mapp1)      04/10/2015      _x86_64_        (2 CPU)


CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle

all       0.02    0.01      0.00   0.02     0.00    0.00    0.00    0.00      0.00    99.95


이걸 코더별로 사용률을 보려면 아래와 같이 실행하면 된다. 

sudo mpstat -P ALL


01:54:52 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle

01:54:52 PM  all    0.02    0.01    0.00    0.02    0.00    0.00    0.00    0.00    0.00   99.95

01:54:52 PM    0    0.02    0.01    0.00    0.03    0.00    0.00    0.00    0.00    0.00   99.94

01:54:52 PM    1    0.01    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.97


각 CPU에 대한 내용만 보고 싶다면..

sudo mpstat -P ALL | tail -2 (cpu가 2개니까 밑에서 두줄만 보겠다는 필터 적용)

01:56:08 PM    0    0.02    0.01    0.00    0.03    0.00    0.00    0.00    0.00    0.00   99.94
01:56:08 PM    1    0.01    0.00    0.00    0.01    0.00    0.00    0.00    0.00    0.00   99.97

특정 시간 간격으로 계속 나오게 하고 싶다면

sudo mpstat -P ALL 5 (5초 간격으로 계속 출력하기.)


예전에 한참 사용할 땐 알겠는데, 너무 오랜동안 사용 안하니 당췌 기억이 안나네. 


찾아서 정리해둔 내용.

  1. 홈짱 2015.11.19 15:17 신고

    고맙습니다. 덕분에 좋은 내용 알아가네요.

젤 눈에 띄는데 Android와 관련 디바이스를 위한 io.js 컴파일이 가능해졌다는 내용이네요. 


그 외 npm upgrade , openssl OpenSSL 1.0.2a 적용 준비, timers : 마이너한 메모리릭 수정 등이 있습니다. 


https://iojs.org/ 참고하세요. 



패치 모듈 만들다가 패치 모듈의 코루틴을 써야되는 상황일 때.. 


StartCoroutine은 non-static member function입니다. 


결론만 간단히 ... 


아래와 같이 활용하세요. 


// 활용 코드

Test test  = GameObject.Find("TestPrefab").GetComponent<Test>();

yield return test.StartCoroutine( test.startPatch());



   (in Test.cs)

// 샘플 Test class 선언 형태

public class Test : MonoBehaviour

{

public IEmumerator startPatch(){

   .

   .

   .

}

}


* TestPrefab을 만들어서 Test script 연결해 해당 씬에 등록하세요.




https://github.com/Maximus5/ConEmu



최근 들어 nodejs 작업을 많이 하다보니 콘솔 띄울일이 많네요. 개발을 윈도우에서 한 후 linux 서버로 옮기다보니 윈도우에서 콘솔을 여러개 띄워야 되는데 기본 콘솔을 쓰다보니 여간 불편한게 아니더군요.


그래서 이것 저것 찾다가 ConEmu를 쓰고 있는데, 창 관리가 쉬워서 좋습니다. 

창이 많아지니 조금 버벅이는 느낌이 드는건 제 PC 사양이 부족해서 그런가.. -0-a


다 좋은데, 세팅한 창을 저장했다가 다음에도 쓰고 싶은데... 그게 안되네요. 다른 것들도 찾아봤는데.. 


없네요. 


근본적으로 에뮬레이터다보니 아마 그 안에서 진행되는 실질적인 내용을 확인하고 저장하기는 쉽지 않겠죠.


그런것까지 바라는건 아닌데, 창 세팅, 마지막 경로 위치까지만 저장할 수 있으면 딱 일텐데... 


혹시 이런 기능을 지원하는 콘솔 에뮬 아시느니 분 있으면 댓글 좀 부탁드립니다. 꾸벅~~~


다들 좋은 하루 되세요.

스터디용 게임일까??  제목은 unrusted.


스테이지를 코드를 조작해서 풀어가는 게임. 


코딩을 배우는 사람들에게 재밌을 듯 함. 해보니 재밌네 ㅋ


아래 이미지를 보면 초록색 @가 플레이어, 파란색 ㅁ가 출구. 우측 코드를 조작하여 입구를 만들어서 탈출해야 함. ^^


http://alexnisnevich.github.io/untrusted/



자주 안쓰는거니 이번에 확실히 정리하자.


준비물은 아래와 같다. 


- 안드로이드 OS가 설치된 디바이스.

- 유니티 5.0 이상 (개인/기업 버전 둘 다 가능)

- AP (PC와 모바일 디바이스가 같은 AP를 사용해야 서로 접근이 가능하다.)

  : 집에서는 보통 같은 공유기를 사용하기 때문에 문제없을 듯.

  : 보통 사무실에서는 보안등의 문제로 PC는 유선, 모바일은 별도의 무선을 사용할 듯. 

   이럴 경우 보통 2만원정도의 싼 공유기를 사면 AP로 사용 가능. 공유기 설정을 통해 AP로 변경하고, 모바일 디바이스의 wifi를 설정된 AP에 연결한다. 그러면 자동으로 할당하는 IP를 통해 이를 진행할 수 있다. 최근에는 일반적으로 디바이스 보안 정책이 있으므로 문제가 발생하면 관리자와 확인이 필요할 수 있음.

- logcat filter : http://cafe.naver.com/logcatfilter (디바이스에서 발생하는 로그를 볼 수 있는 뷰어. 개발자님에게 무한 감사. 덕분에 시간 많이 아꼈어요.!!)

- Android SDK의 sdk\platform-tools\adb.exe


아래와 같은 순서로 진행하면 된다.


1. adb 설정

    adb tcpip 8989 (포트는 원하는 번호로 변경 가능)

    adb connect 192.168.100.8:8989 (위에 적은 포트를 뒤에 사용. 192.168.100.8은 여러분의 모바일 디바이스에 할당된 IP로 변경하면 됨.)

   이렇게 하면 연결되었다는 메세지를 볼 수 있는데, 문제가 발생할 경우

   adb kill-server, adb start-server  두 명령어를 통해 재가동을 해보고 다시 시도해 보면 됨.

   (안 될 경우 에러메세지를 보고 추가 조정을 하세요.)


2. logcat filter 설정.

   가동 후 상단 디바이스 탬의 192.168.100.8:8989를 선택.

   시작 버튼을 누른 후 text 필더에 자신이 보고 싶은 로그에 포함된 텍스트를 입력하면 됨. 가능하면 로그를 남길 때 종류별로 검색/구분을 위한 텍스트를 삽입해 두는게 좋다.


3. monodevelop 세팅

   run 메뉴 -> Attach to .. 선택 -> 192.168.100.8:8989 선택. 

   (* 어플을 가동하기 전에는 192.168.100.8:8989는 보이지 않는다. 가동과 함께 시작되는 부분에 대한 코드 검증은 쉽지 않을 듯. 로그를 통해 검토하는 것을 추천.)

   (* 코루틴은 시작과 끝에만 브레이크가 걸림. 정상적으로 볼 수 있는 방법을 아시는 분은 댓글 부탁드립니다)







Unity5 발표 이후 공개된 여러 AssetBundle 관련 문서를 번역하다가 지금까지 알게된 주요 변경 사항들을 정리해봤습니다. 


처음 만져본 unity 버전이 5.0입니다. 현재 패치툴을 만들면서 보고 있어, 아직 발견하지 못하거나 이해가 낮아 잘못알고 있는 내용들이 발견되더라도 양해 바라면 댓글 달아주시면 수정/추가하겠습니다.

1. 5.0에서는 각 Asset (코드 파일 제외)별로 AssetBundle Name과 variant를 지정할 수 있다. 
   (Asset 미리보기 창의 하단에 설정 UI가 있습니다.)

2. name은 해당 Asset이 속할 AssetBundle의 이름이며, 설정 UI에서 선택하거나 새롭게 생성할 수 있습니다. 
   이 과정은 5.0 이전 버전에서는 수동으로 설정을 해야 했기 때문에 상당히 번거로웠으며, 이 작업을 편리하게 도와줄 수 있는 bundle mnager 같은 에셋이 발매되어 있습니다. (* 최근 5.0 버전에 맞게 개선된 버전이 나왔더군요.)

3. variant는 AssetBundle의 이름에 연결된 옵션이며, unity 공식 데모에서는 앱 실행 중 실시간으로 텍스쳐의 퀄리티를 변경할 수 있는 예로 사용되었습니다. 
 (* http://files.unity3d.com/vincent/assetbundle-demo/users_assetbundle-demo.zip를 참고하세요.)

4. 이전 버전에서는 변경되지 않은 Asset들도 모두 빌드되어 패치를 작성하는데 많은 어려움이 있었다고 합니다. (전 첫 unity 버전이 5.0이라 이전 경험자 분들의 이야기를 들어본 바에 의해서 적습니다.) 5.0 버전에서는 변경된 에셋들만 추려서 빌드됩니다. 

5. AssetBundle 이름을 검색하는 기능이 추가되었습니다. 검색 UI에 "b:"를 입력 후 원하는 에셋번들 이름을 넣으면 해당 이름을 가진 모든 에셋을 볼 수 있습니다.

6. 유니티가 직접 종속 관계를 관리하며, 이는 기존에 사용하던 PushAssetDependencies/PopAssetDependcies API를 사용할 필요가 없습니다. (* 공개된 원문에 있던 내용인데, 이전 버전을 사용해보지 않아 와닫진 않네요. ^^;)

이상입니다. 이 외 typetree, 이전 버전과의 혼용 등에 대한 내용들이 있었는데 추후 내용이 파악되면 추가하겠습니다. ^^a


+ Recent posts