Monday, September 23, 2013

최근 관심을 끌고 있는 Bluetooth 4.0 SMART (또는 Bluetooth Low Energy)에 관해서


 iPhone 5s 출시와 iOS 7 OS 업데이트와 관련해서 iBeacon이라는 기술에 대해서 사람들이 새삼스레 주목하고 있음.


 위 링크에 따르면, iBeacon은 Bluetooth 4.0 LE (Low Energy)기반이며, estimote 등의 회사에서 개발한 beacon을 활용하여 실내 측위나 결제에 활용 가능한 것으로 알려져 있음.
 참고로 Bluetooth Low Energy는 과거 Wibree라는 기술이 Bluetooth 표준에 들어가서, 2010년도에 4.0 버전에 포함되었음. 이와 유사한 기술이었던 Zigbee (IEEE 802.15.4)등은 여전히 비싼 칩 가격과 별도 칩으로 내장되어야 되는 불편함때문에 사실상 시장에서 사장되는 추세임.

 좀 더 정확하게 살펴보면, Bluetooth 4.0은
 iPhone 4s와 뉴아이패드 이후 기기에 탑재되어 있고, iOS 6부터 OS 레벨에서 지원가능한 것으로 알려져 있으며,
 안드로이드에선 Galaxy S3, Galaxy Nexus 이후에 나온 기기들은 대부분 지원하는 것으로 알려져 있음.  하지만 안드로이드의 경우 최근에 발표된 Android 4.3 Jelly Bean 이상의 버전에서 OS 적으로 제대로 지원하는 것으로 알려져 있음.



 현재 주된 응용처는 아래와 같음

Tuesday, August 13, 2013

Setup Play Framework in Ubuntu

Get Scala and JVM

  • Scala is a JVM language and Java is not usually installed by default. We will of course have to set up Scala as well. So let's have them installed. 
$ sudo apt-get install default-jre
$ sudo apt-get install scala
Get Play Framework

  • http://www.playframework.com/download
  • Extract the contents of the zip file. The default installation of Ubuntu does not include zip/unzip utilities, so you might want to install the unzip utility first. Also bear in mind that de-compressing the zip file will automatically create a lot of files in the directory where you have downloaded Play. Consider moving the zip file to its own directory before you extract its contents.
$ sudo apt-get install unzip
$ wget http://download.playframework.org/releases/play-2.0.4.zip
$ unzip play-2.0.4.zip

Setup Play Framework

  • If you wish to follow Linux's File Hierarchy Standard, then extract Play to /opt. Create a shortcut for theplay command from /usr/local/bin/play so that it is in user's PATH. Using a regular user account, type theplay command.
  • $ sudo mv play-2.0.4 /opt   $ sudo ln -s /opt/play-2.0.4 /opt/play   $ sudo ln -s /opt/play/play /usr/local/bin/play   $ play


Setup and connect AWS - Part I : Tips

Tip 1: If you use Bitnami images, root account is bitmani not ec2-user or ubuntu.

Tip 2: http://wiki.bitnami.com/Applications/BitNami_Drupal#How_to_start.2fstop_the_servers.3f

Sunday, May 19, 2013

Install Apache, PHP, APC, & MySQL on Amazon EC2 with Amazon Linux AMI (Draft)


Ref.





How to connect AWS vis SSH in Mac


  • Create a linux instance by AWS console
    • https://console.aws.amazon.com/ec2/v2/home?region=us-west-2
  • Check the instance and press the Actions button, then try to connect
    • It provides two options,
      • Connect with a standalone SSH Client
        • That's what I want to..
        • First, move yourname.pem file to /Users/yourUserName/.ssh
        • Second, change mod not to allow public access
          • such as, chmod 600 yourname.pem
        • Last, try to access via SSH
          • such as, ssh -i yourname.pem ec2-user@yourawspublicaddress.com
        • Remember that you should keep the first .pem file 
      • Connect from your browser using the Java SSH Client (Java Required)
        • Java required. If you don't, download it and restart your browser

Monday, July 23, 2012

Bitmap.compress() function has bugs about PNG file

 

Normally in Android, a developer uses Bitmap.compress() function for saving an image file as JPEG and PNG.

However, if some pixels of ARGB_8888 typed bitmap are not 0 or 255, for example 137 or 230, etc., unwanted value is saved when compress by Bitmap.compress() function.

Currently I don’t know how to solve the problem. Moreover I have found another problem (or maybe bug?).

It’s that when a bitmap image constructed by OpenCV, especially bitmapToMat(), Android didn’t assume that bitmap created by PNG format.

Wednesday, February 29, 2012

OpenCV in Android

 

일단 OpenCV의 헤더파일을 JNI에서 불러오기 위해선,  Android.mk에 아래와 같이 include 경로를 지정해줘야 함.

LOCAL_C_INCLUDES := <OpenCV Install Directory>/include

Friday, February 24, 2012

Android Bitmap Class and OpenCV Mat Class


(1) Bitmap in Android
안드로이드에서 Bitmap 클래스는 android.graphics.Bitmap에 있음.
Bitmap은 Bitmap.compressFormat에 JPEG, PNG, WEBP를 지원하며,  Bitmap.Config에서 ALPHA_8, ARGB_4444, ARGB_8888, 그리고 RGB_565 타입을 지원함.
ALPHA_8은 alpha 채널 하나에 데이터를 저장하고,
자주 쓰이는 ARGB_8888은 각각의 픽셀은 4byte=32bit에 저장됨.  따라서 RGB 각각 8 bit, 그리고 Alpha값 8bit로 저장됨
그리고 RGB_565는 RGB값만을 2byte=16bit로 저장함. 이때, R은 5bit, G는 6bit, B는 5bit임. 그래서 565임
Bitmap에서 Raw Data는 getPixels함수를 통해 int[] 형태로 얻어낼 수 있음. 그리고 얻어낸 pixel에 대해, RGB 및 Alpha 값은 다음과 같은 간단한 코드로 가져올 수 있음.  즉, ARGB_8888은 총 32비트 중 앞에서 순서대로 각 8비트 씩, Alpha (default는 ff), R, G, B로 저장되어 있음.
 // Get R, G, B from pixels
 int R= (pixels[i] >> 16) & 0xff;
 int G= (pixels[i] >> 8) & 0xff;
 int B= pixels[i] & 0xff;

 // Get pixel value from R, G, B (assumes Alpha is ff)
 int newPixels[]=ff*0x1000000 + R*0x10000 + G*0xff + B;


참고로 Android에서 int형 및 float형은 32비트이며, char은 16비트 unicode, byte는 8비트임

그리고 위와 같이 복잡하게 할 것 없이, Android는 android.graphics.Color 클래스에서 color 값에서 R, G, B를 구하거나, R, G, B에서 color 값을 구하는 함수를 제공하고 있으며, HSV와 RGB간의 변환을 제공함

RGBm YUV, HSV에 대해선 카페 링크블로그 참조



(2) Mat in OpenCV for Android

Computer Vision에서 널리 쓰이는 OpenCV도 Android로 포팅되어 있기에, Computer Vision 관련 알고리즘이 필요할 때 유용하게 사용할 수 있음.

OpenCV에선 IPL Image 클래스 뿐만 아니라 Mat 클래스도 이미지 정보를 담기 위해 많이 사용됨.  참고로, IplImage는 OpenCV 초창기부터 사용되었던 구조체로, alloc, dealloc을 수동으로 해줘야 되는 불편함이 있기에, C++ 버젼부터 Mat 클래스를 제공함.  


 OpenCV for Android의 Mat 클래스는 Android의 ARGB_8888에 대응하여 CV_8UC4를 많이 사용함.

 이때 8bit로 4개의 channel을 표현하므로, 이를 Java Array로 담을때는 byte[] 형을 사용해야 함.
 그리고 각 채널은 순서대로 R, G, B, Alpha 정보를 담고 있음.
 즉, Alpha 정보가 저장된 순서가 맨앞 (Android Bitmap)이냐? 뒤 (OpenCV for Android의 Mat) 냐? 라는 차이가 있음.

 

Friday, February 10, 2012

Learning Android Programming (1) – Dynamic Layout

 

안드로이드에서 프로그램을 통해 동적으로 Layout이 변경하기 위해서는, addView() 함수를 사용하게 됨.

이러한 경우 setContentView (R.layout.main) 함수는 addView() 함수 전에 실행되어야 하며, 이후에 실행되면 Error가 발생함.

Monday, January 02, 2012

Learning Souce Code Control System - Git

 

일단, SVN 대비 Git는 장점이 많음. 특히 Branch의 Merge에 있어서, SVN은 Git에 상대도 되지 않음. (예, KLDP에 올라온 경험담). 이건 SVN과 Git가 컨셉이 좀 다르기 때문인듯함.

따라서, Git에 대해서 좀 더 자세히 공부하기로 함.

(To be continued..)

Learning Issue Tracking System - Overview

 

 이슈란 무엇인가?

  이슈(Issue, 혹은 Problem)은 프로젝트 진행에 차질을 가져올 수 있는 “발생된(Realized)” 위험으로 정의된다.
물론 미리 예상해 두지 못했던 문제점(Issue)도 있을 수 있다.
이슈는 하고 싶은 것이 될 수도 있고, 요청하는 것일 수도 있고, 삭제해야 할 것, 기본에 잘못된 부분에 대한 알림 등 다양한 주제가 될 수 있다.

 이슈관리 시스템이란 무엇인가?

  이슈 관리 시스템은 버그, 요구사항, 작업내용 등이 있을 때 해당 시스템에 게시물 형태로 올리고 개발자, 테스터들이 작업 진행상황을 기록하는 시스템을 말합니다.

  일반적으로 인터넷상의 게시판과 비슷한 형태이며, 해당 이슈(버그,요구하상, 작업 내용 등)에 대한 제목에, 이슈형태, 담당자, 프로그램 버전, 우선순위 등의 속성을 지정하고 내용을 올립니다.
  이슈에 대한 작업이 진행되면 작업 결과를 답글 형식으로 올립니다. 하나의 이슈에 대한 작업이 끝나면 이슈를 닫습니다(Close). 이미 해결한 이슈지만 문제가 생겼을 경우 다시 열수 있습니다( Reopen). 또는 보류(Pending)할 수도 있습니다.

 대표적인 이슈 관리 시스템

  이슈관리시스템은 대부분 버그관리시스템(Bug Tracking System, BTS)에서 출발하였으나, 단순히 버그 뿐 아니라, 다양한 이슈를 관리할 수 있도록 의미가 확장되고 되었다.  이슈관리시스템 혹은 버그관리시스템으로는, Bugzilla, Trac, Mantis(이상, Open Source),  Jira (상용)등이 있다.

Learning Souce Code Control System (1) - Overview

 

현재 나와 있는 소프트웨어 버전 관리 시스템의 종류

  • CVS (Concurrent Version System) : 가장 널리 사용되며 역사가 깊은 버전 관리 시스템입니다. http://www.cvshome.org
  • Subversion : CVS의 단점을 개선하고 CVS를 대체할 목적으로 개발 되었습니다. 이 문서에서 설명할 버전 관리 시스템입니다. http://subversion.tigris.org
  • Visual Sourcesafe : Microsoft에서 만든 버전 관리 시스템입니다. CVS와는 버전 관리 관점에서 조금의 차이점이 있습니다. 윈도우 기반 소프트웨어의 버전 관리를 할 때 자주 사용됩니다.http://msdn.microsoft.com/ssafe/
  • Clear Case : Rational이라는 회사에서 만든 버전 관리 시스템입니다. 지금은 IBM에 합병되었습니다. 상용 소프트웨어입니다. http://www-306.ibm.com/software/rational
  • BitKeeper : 리눅스 커널이 BitKeeper를 이용해서 개발 하고 있습니다. 상용 소프트웨어입니다. http://www.bitkeeper.com

- From Subversion 사용 HOWTO(http://www.pyrasis.com/main/Subversion-HOWTO)

여기에 덧붙여서, 요즘의 대세는 Git라는 분산기반 버전관리 시스템이 인기를 끌고 있음.

Web based collaborative project management tools (2) - Trello

 

  예전에 LightHouse라는 Web 기반의 프로젝트 매니지먼트 사이트를 소개한 적이 있었는데 (링크 참조),  이번에는 다른 분의 소개로 Trello라는 비슷한 류의 프로그램을 소개하고자 합니다.

  Trello 사이트 바로 가기

  장점은, 복잡한 일정관리 기반이  아닌 사람과, Task 단위로 직관적으로 관리할 수 있다는 점, 그리고 요새 대세에 걸맞게 Mobile Web 버전을 지원하고, 댓글 등 협업 시스템으로 갖춰야 될 기능들을 쉽고, 직관적으로 지원해준다는 점임.

  단점은, 심플한 대신 복잡하고 거대한 프로젝트 관리에는 좀 맞지 않는다는 점? 카테고리 분류 등이 안 된다는 점등이 단점임.

Tuesday, October 04, 2011

Buliding Media Streaming Service (1)

 

1. To use regacy DLLs for new web services, you have to use Microsoft WebSerivces. Belows are sample links for using DLL for webservices.

   http://ndolson.com/243

   http://blog.naver.com/PostView.nhn?blogId=eve99eve&logNo=130076023441

2. To provide video streaming service via Web, normally a server is deployed by Windows Media Server because of simplicity of deployment and setting. A sample is as below.

  http://blueamor.tistory.com/712

3. Building web interface and web player

  - if users use a HTML5 supported browser, it’s simple. Just use <video> tag with mpeg4 or webM. However, most of web browsers what user used are IE6 and IE7. So a flash video solution is only option to provide direct web streaming services. Most of them are commercial solutions, but Jaris FLV Player is a opensource and its licence is GPL.

 http://sourceforge.net/projects/jaris/ or http://jarisflvplayer.org/

  - Simple way to implementation using PHP and Flex

 http://www.hanb.co.kr/network/view.html?bi_id=1401

 http://onlamp.com/pub/a/php/2007/05/24/creating-mytube-with-flex-and-php.html : It’s same, but original link (English)

OpenCV Development & Testing (1)

 

1.  Installing the Open CV

   - http://opencv.willowgarage.com/wiki/  : Open CV Homepage contained the S/W and documents.

     : I downloaded the Open CV 2.3.1 Windows Installation Version

2. Setting configurations on Visual Studio 2010

   - Put below include directories on Project –> <ProjectName>Properties->VC++ Directories->Include Directories

      : C:\Program Files\opencv\build\include\opencv, C:\Program Files\opencv\build\include\opencv2, C:\Program Files\opencv\build\include\

   - Put library directories on Project –> <ProjectName>Properties->VC++ Directories->Library Directories

     : C:\Program Files\opencv\build\x86\vc10\lib

  - Add Open CV libraries on Project –> <ProjectName>Properties->Linker->Input

     : opencv_core231d.lib; opencv_contrib231d.lib;  opencv_calib3d231d.lib; opencv_features2d231d.lib; opencv_flann231d.lib; opencv_gpu231d.lib; opencv_haartraining_engined.lib; opencv_highgui231d.lib; opencv_imgproc231d.lib; opencv_legacy231d.lib; opencv_ml231d.lib; opencv_objdetect231d.lib; opencv_ts231d.lib; opencv_video231d.lib;   

  - Add the directory of the included Open CV DLLs into %path% on Start->My Computer->Properties->System Environments

     : C:\Program Files\opencv\build\x86\vc10\bin

      --> it was important because if not, you have to copy & paste all DLLs into project directory

3. Download TBB dlls

   -   A pre-compiled Open CV 2.3 only includes tbb.dll not tbb_debug.dll. Therefore, download it from the below link and put all of dlls and libs to the open cv bin folder.

       : http://threadingbuildingblocks.org/file.php?fid=77 : Intel TBB download site.  

 

PS. ‘CvvImage’ class isn’t defined over Open CV 2.2 versions

  - Because its member functions, Load() and CopyOf() have some bugs.

    : If you want to use it, you have to use under 2.1 versions. Moreover, you have to fix bugs used the below link.

      http://goo.gl/YCM43

Monday, February 14, 2011

"Always On” Connection on WCDMA (From R9 to HSPA+)

 

Application단에서 Push Service를 구현해서 실행하게 되면, 단말의 PHY/MAC Layer단과 기지국과의 Comm.은 WCDMA Protocol을 통해 전송됨.

기본적으로 WCDMA는 최초 Spec. 작업 때부터 Alway-on 모드를 지원하도록 기획되었으나, 이건 어디까지나 권고사항일뿐 강제사항이 아니라서, WCDMA 기지국 제조업체 별로 실제 동작은 매우 다름

WCDMA에서 TCP를 포함한 Data Packet 전송을 위해서, 다음의 3개의 채널을 이용하게 됨.

1. PCH (Paging Ch.)

2. FACH (Forward Access Ch.)

3. DCH (Dedicated Ch.)

1번을 사용할수록 데이터 전송율을 낮지만, 단말의 베터리 소모가 줄어드는 장점이 있음. 그러나 일반적인 패킷들은 주로 DCH를 통해 전송되게 되므로 베터리 소모가 많음. 또한 Polling이나 KeepAlive 패킷으로 인해 Uplink Traffic이 증가되면, Noise에 민감한 CDMA 특성상 Cell내의 전체 트래픽 용량도 줄어드는 문제점이 생김.

이와 관련된 자세한 내용은 아래 논문을 참조.

 Energy Consumption of Always-On Applications in WCDMA Networks 

 

이를 해결하기 위해, HSPA+에서는 CPC (Contineous Packet Connectivity) 모드가 추가됨.

자세한 내용은 아래 PDF 문서를 참고함.

 http://www.3g4g.co.uk/Hspa/HSPAE_Pres_0811_Andreas.pdf

 

하지만, HSPA+망 구축은 이제 시작하는 단계이므로, 여전히 HSDPA/HSUPA 망에서는 Always-on Connection에 의해 망의 부하가 여전함.

(참고로 Gallaxy S도 HSUPA까지 지원 (MSM 6290), 단 Gallaxy S2는 HSPA+ 지원한다는 루머가 있음)

특히 Push Server에서 Fail이 발생할 경우, iOS의 APNS에서는 Noti를 주지 않으면 그뿐이지만, Android에서는 그런 게 없으므로, 단말에서 계속 Connection Try를 수행하므로 망에 심각한 부하를 줄 수 있음.

이에 대한 해결책은 아직 뾰족한 방안이 없는 것으로 앎.

Friday, February 11, 2011

Push Notification on iOS & Android

 

  Apple은 Push Notification을 Apple 내부에 별도의 APNS (Apple Push Notification Service) 서버를 이용하는 방식으로 Push App. 개발을 지원함.

  이를 이용한 개발방법은 아래 블로그를 참조

  애플 아이폰 푸시알림 서비스 (APNS, Apple Push Notification Service)

 

  Android는 2.2 (Proyo) 버전부터는 APNS와 유사한 C2DM (Android Cloud to Device Messaging Framework) 서버를 제공함.

이에 대한 자세한 내용은 아래 링크를 참조

  Google Projects for Android: C2DM

  하지만, Android 2.1 이하 버전에는 Push Server가 존재하지 않는데, 아래 통계에서 보듯이 2.2 이하 버전의 점유율이 여전히 42%에 육박함.

           [Current Distribution of Android Platform Versions]

        Data collected during two weeks ending on February 2, 2011

 

  따라서, 2.1이하의 하위 버전에서의 Push Service 구현에 대한 고려가 필요하며, 이를 위한 방안은 아래 링크를 참조함.

  How to Implement Push Notifications for Android

  이를 간략히 요약하면, Polling, SMS Notification, Persistent TCP/IP 방식이 있으며,

  1. Polling은 real-time도 아니고 resource가 많이 필요하다는 문제점이 있고,

  2. SMS Notification은 SMS 발송 비용 문제가 크며,

  3. Persistent TCP/IP는 그나마 나으나, 제대로 구현하기 어렵다는 문제가 있음

  그래서, 위 블로그에서 추천하는 방법은 3번을 제대로 구현한 MQTT를 이용하는 방식임.

  MQTT에 관련된 내용은 아래 링크 참조

  IA92: WBI Brokers - Java implementation of WebSphere MQ Telemetry transport

Monday, January 17, 2011

오래간만에 짜본 VBA 스크립트 (2) - 엑셀 셀 색깔 칠하기


셀 내의 숫자의 크기에 따라서 상대적인 색깔 찰하기

Sub cellPaint()
Dim max As Integer
Dim rows As Integer
Dim cols As Integer
Dim colors As Integer

rows = 31
cols = 12
max = 0

For i = 4 To rows
For j = 6 To cols
If max < Cells(i, j) Then
max = Cells(i, j)
End If
Next j
Next i

For i = 4 To rows
For j = 6 To cols
Select Case Int(Cells(i, j) / (max / 6))
Case 0
If Cells(i, j) > 0 Then
colors = 19
Else
colors = 2
End If
Case 1
colors = 15
Case 2
colors = 48
Case 3
colors = 16
Case 4
colors = 56
Case Is > 4
colors = 1
End Select

Cells(i, j).Interior.ColorIndex = colors
Next j
Next i
End Sub

오래간만에 짜본 엑셀 VBA 스크립트


오래간만에 필요에 의해서 작성한 VBA 스크립트..
간단하게..특정 문자열에서 특정 문자가 몇 개나 나오는지를 카운트하는 소스..

Function countchar(src As String, ch As String) As Integer
Dim count As Integer
Dim findIndex As Integer

findIndex = InStr(src, ch)
count = 0

If Len (src) > 0 Then
count = 1
If findIndex > 0 Then
Do While findIndex > 0
count = count + 1
findIndex = InStr(findIndex + 1, src, ch)
Loop
End If
End if

countchar = count
End Function

오래간만이라 그런지 do while 문법도 제대로 기억나지 않았다는거..-_-;;

TED 2010 : Gary Flake: is Pivot a turning point for web exploration?







TED.com 을 돌아다니다가 발견한 강의..

Pivot이라는 프로그램을 만든 MS의 직원이 기능을 소개하는 동영상인데, 웹에서 정보를 보여주기 방안으로 생각해볼만한 여지가 있는 아이디어인것 같아서 링크함.

사실 엄청난 양의 이미지 파일과 동영상과 로그와 데이터가 쌓이는데 반해, 이를 효율적으로 보여주기 위한 방안은 별로 없는 것 같다. 즉, 파일탐색기+미리보기 정도가 대부분이다보니, 애플의 멀티터치 UI에 많은 사람들이 새로움을 느꼈던 거고..

어째거나 Pivot은 Zoom-in, Zoom-out을 활용한 UI 인데..이를 잘 활용하면..특히나 쓰레기처럼 쌓이는 로그 정보나 History 정보를 볼 때 유용할 것 같다. 강의자도 그렇게 생각하는 것 같고..

그렇다면..이런 UI가 필요한 곳이 어디인가를 고민해봐야겠지??