iOS에서 블루투스로 데이터를 보내고 싶었을 뿐인데..

스택오버플로우의 답변

  1. 나는 Qt를 이용해 SPP 프로파일만 지원하는 블루투스 기계(다른 통신방법은 RS232)와 아이폰 사이에 데이터를 교환하고싶었다. 그렇게 삽질은 시작됐다.

  2. 일주일동안의 삽질을 통해 겨우 블루투스에 대해 겉핥기만 할 수 있었다. 블루투스 프로필 종류, 버전에 따른 소소한 차이점, 애플의 정책에 대해 알아가고 있을뿐이다. 위 스택오버플로우 답변을 정리하면, 블루투스 ‘Classic’ 버전 모듈을 사용할 때 iOS: 지원되는 Bluetooth 프로파일 의 프로파일을 사용할 수 있다. (단, 해당 모듈이 MFi 프로그램에 가입되어있어야한다.) 다른 방법으로 BLE(Bluetooth Low Energy) 모듈을 사용하는 방법이 있다. 이 방법은 해당 모듈이 MFi에 가입되어있지 않아도 된다. 즉, MFi 프로그램에 등록되어있지않은 블루투스 기계는 BLE 모듈을 중간자로 연결하여 아이폰과 통신이 가능하다. 문제는 국내에는 RS232<->BLE 모듈이 없다. 또다른 문제점이다..

Water Proof 진행상황 (2016/07/14)

https://github.com/datakun/WaterProof

  1. 캐릭터 이동 기능(캐릭터와 배경이 무한 스크롤로 이동되는 것), 라이프포인트, 플레이타임, 잠수한 깊이를 표시하는 것을 구현했다. 남은 것은 게임 종료 기능, 무작위 맵 생성, 점수 계산, 소소한 게임 완성도인 것 같다. 아, 가장 중요한 게임 리소스(이미지, 사운드)가 남았다. 인터넷에서 구할 수 있는 자료는 단편적인 것밖에 구할 수 없어서 게임 디자인 컨셉과 맞지않아서 직접 그릴수밖에 없을 것 같다.

  2. 배경 무한 스크롤은 일주일 전에 마음먹었던 것을 발목 덕분에 집에서 쉬어서 생긴 잉여력으로 구현했다. 이래저래 시도하다가 적절하게 배경 ImageView를 배치하는 방법을 생각해냈고, 후다닥 만들고, 테스트하고, 수정하고, 완성했다. 배경을 무한 스크롤로 이동시키다보니 캐릭터와 배경이 움직이는 모습이 약간 부자연스러워서 핸들러를 좀 더 자주 호출했다.

  3. 바로 당장 구현해야하는 일은 맵 생성(장애물, 아이템, 기타 요소 생성)이다. 지금 생각나는 방법은 배경 무한 스크롤 기능과 연동하여 요소들을 만들면 될 것 같다. 문제는 적절한 위치에 배치하는 것, 장애물을 빠져나갈 구멍을 만드는 것, 시간이 혹은 깊이가 깊어질수록 난이도가 높아지는 것?이다. 점점 완성이 되어간다. 올해 안에는 출시할 수 있겠지.

alt 2016-07-15 01

Firebase Realtime Database를 이용한 리더보드 첫번째 버전

https://github.com/datakun/WaterProof

  1. Firebase를 이용하여 게임의 리더보드를 만들었다. ListView를 이용하여 자신보다 점수가 높은 10명과 낮은 10명의 프로필사진, 유저이름, 점수를 보여주는 것이 목표다. Database에 대해 여러가지 시도를 해봤다. 액티비티에 데이터베이스 관련 함수와 리스너를 다 넣을지, 따로 컨트롤러를 만들지 많은 고민을 했다. 결론은 Application 클래스에 각 액티비티에서 접근할 메서드와 리스너를 만들어 클래스 내부에서 데이터베이스 처리를 한 뒤에 리스너를 호출하도록 만들었다. 만들다보니 Application 클래스 소스코드를 읽기 힘들 것 같다는 생각이 들었다. 대신 각 액티비티의 코드는 짧아졌다.

  2. ListView를 쓰다보니 메모리관리가 제대로 되지않는것 같다. Resource Monitor를 확인해보니 액티비티에서 ListView를 만들때마다 allocated 메모리가 늘어났고, 한계까지 메모리가 찼을때는 이전의 메모리를 해제했다. 이것이 자바의 방법이라 생각하지만 좀 더 스마트한 방법이 없을까 찾아보았다. 구글링을 해보니 ListView보다 좀 더 유연하고 성능이 좋은 RecyclerView를 이용하는 법이 나왔다. 언젠간 ListView 대신 RecyclerView를 이용하는 방법을 적용해야겠다.

alt 2016-07-04 01

Firebase Realtime Database 사용하면서 드는 생각

https://firebase.google.com/docs/database/android/save-data

  1. ‘이게 정말 될까?’ 생각이 드는 짧은 코드인데 제대로 동작한다. 안드로이드 앱에 적용하는 과정도 간단하다. gradle 파일에 의존 패키지 추가하고 동기화하면 세팅이 끝난다.

  2. rule을 잘 정해야한다. 몇일 전에 rule을 제대로(정말 제대로. 다른 uid는 쓰기기능에 접근을 못하도록) 정의했는데, 그게 잘 동작해서

updateChildren at / failed: DatabaseError: Permission denied

에러를 뱉어냈다. 처음엔 왜 퍼미션 에러가 날까 고민했는데, 알고보니 며칠 전에 정의했던 규칙때문이었다. 아무나 쓰기 가능하도록 정의하니 잘 동작했다.

  1. 그러나, 읽고 쓰는 속도가 느리다. 아마도 서버가 바다 건너 있다보니 느릴 것이라 생각된다. Callback 함수도 추가할 수 있으니, ProgressDialog를 이용해서 그 시간을 처리하는 게 좋겠다.

  2. 데이터를 받아오는 방법이 이벤트 리스너를 등록하고 처리하는 방법인데, 뭔가 생그럽다. 정렬도 그러하다.

동서남북과 실리카겔

동서남북 - 나비

실리카겔 - 두개의 달