Interaction & Motion Design Implementation Using Spline Interpolation with DX10 Seattle (1)

Interaction & Motion Design Implementation Using Spline Interpolation

스플라인 보간법을 활용한 자연스런 Interaction & Motion Design 구현 방안


최근 UX/UI 에서 중요시되고 있는 Interaction & Motion Design의 핵심은 각각의 화면객체들이 물 흐르듯이 상호 작용하며 자연스럽게 표현 되는 것이다.
구글의 Material Design 철학 역시 단어 뜻대로 실제 사물의 움직임을 느끼도록 표현한것이기에 자연스러움이 가장 중요한 포인트라 할 수 있을것이다.

개발자와 디자이너가 이를 구현하기 위해서는 객체들의 애니메이션 작동시간을 유효 적절하게 설정해 주어야 하는데 이러한 작업은 간단한 작업이 아니며 반복적인 시행착오를 겪어야만 원하는 결과에 근접할 수 있어 많은 시간과 노력이 소모된다.

자연스러움이란것은 주관적인 관점이지만 실제생활에서 일어나는 물리 법칙을 적용한다면 인간이 느끼는 자연스러움에 근접하게 표현이 가능할 것이다.
가령 화면스크린이 바닥으로 이동하는것을 애니메이션으로 구현할 때 단순 위치이동이 아닌 자유낙하의 중력가속도를 적용하거나 또는 농구공 처럼 바닥에 몇번 튕겨지는 효과를 내기위해 탄성함수를 적용하면 자연스러운 효과를 낼 수있을 것이다.

델파이 FireMonkey의 FloatAnimation은 튕겨지는 효과를 내는 Bounce 옵션등 몇가지 Interpolation 속성을 제공하고 있다. 하지만 이러한 기본속성만으로 여러 객체들간의 상호 작용을 구현하는것은 어려움과 한계가 있을수 밖에 없다.

단일객체의 경우만 보더라도 화면스크린의 위치이동을 애니메이션으로 구현하였을때 시간과 거리가 일정한 선형함수로 위치이동을 하게 되면 부자연스러워 보이는 이유가 실제생활에서는 시간과 거리가 정확히 비례하는 등속운동은 거의 존재하지 않기 때문이다.
가령 창문을 여닫을때도 속도는 일정하지 않으며 이를 시간과 위치의 함수로 표현하면 직선이 아닌 어떠한 곡선으로 표현 될 것이다.
즉, 애니메이션이란것은 결국 시간과 위치(또는 어떠한 다른 속성)의 변화를 직선이 아닌 곡선으로 표현해주는것이 자연스러움에 근접한다고 할 수 있겠다.

곡선함수를 수식으로 표현하는 방식은 여러가지가 있지만 위의 예를든 자유낙하와 같이 단일 함수로 표현되는 경우와 임의의 곡선으로 표현되는 경우가 있을것이다.
디자이너가 애니메이션의 시간비율을 원하는 임의의 곡선으로 표현하고 이를 수치화 하여 그대로 애니메이션 타임에 적용할 수 있다면 작업의 생산성은 매우 높을것임은 자명한 일이다.
포토샵에서도 곡선의 표현을 이용하여 색상정보를 변형하는데 사용되고 있으며 작업자는 몇개의 포인트를 설정하고 이 포인트를 지나는 곡선을 원하는대로 그려 낼수 있다.



바로 이 몇개의 포인트를 지나는 곡선을 그리는 방법중의 하나가 수치해석에서 많이 활용 되는 스플라인 보간법(Spline Interpolation) 이다.
스플라인 보간법은 공학을 비롯한 여러가지 분야에서 다양한 해석을 하는데 많이 사용 되고 있다. (이동경로 예측, 빅데이터 분석, 통계 씨뮬레이션, 기상예보, 금융, 영상복원 등 )
작업자가 조건에 맞게 특정 포인트들을 지정하면 스플라인 보간법으로 그 포인트들을 지나는 곡선을 그려낼 수 있고 그 곡선을 따르는 나머지 결과값들을 모두 알아 낼 수 있다.

실제 구현해 본 결과 포토샵의 이미지 설정 곡선과 거의 일치하게 나타났으며 이를 통해 포토샵 역식 스플라인 보간법으로 곡선을 표현한것으로 유추된다.
참고로 보간법으로 계산된 결과값을 화면에 곡선으로 표현하기 위해 Delphi Firemonkey에서 제공하는 TPath를 사용하면 아주 빠른 속도로 부드러운 곡선을 그려 낼 수 있다.




이제 다음단계는 곡선으로 얻어진 순차적인 데이터를 애니메이션에 타임에 적용시키면 된다. 복수 객체의 Interaction을 위해서는 복수의 곡선으로 나타내면 되며 이럴때 곡선의 교차점이 정확하게 표현되므로 복수객체의 전환(화면전환등)점이 아주 쉽게 나타내 질 수 있다.







Android Service App with DX10 Seattle

Android Service 란 ?


• 윈도우 환경의 서비스 어플리케이션과 비슷한 개념으로 백그라운 작업이 가능한
[윈도우 서비스와의 차이점]
• 서비스의 주 역활 : 감시, 통보등에 한정 -> Main Activity(Process)의 역할 보조
• 서비스 독자적인 역활은 제한 됨
• 서비스  최초 시작은 Main Activity 가 담당
• 활동하지 않는 서비스는 안드로이드 O/S 자체적으로 종료 시킬수 있음.
        -> 따라서 서비스의 계속 유지를 위해서는 별도의 장치가 필요함
        Ex) Alarm Manager를 통해 주기적으로 활동, 두개의 서비스가 번갈아 가면서 재 시작 등.
[대표적인 서비스]
• 채팅  : 제작 배포자의 자체 Push Message를 받기 위해 리시버 대기
• 장치 연결 : 지정된 장비 연결시 접속 알림 -> 이어폰 연결시 MP3 Play, 비콘, 블루투스
• 클라우드 : 파일 업로드/다운로드 작업시 관련된 클라우드 실행
• 보안관련  바이러스 감시


Android Service 앱 구축 방법

1.위저드 실행
2.서비스 종류 선택
3.별도 프로젝트(별도폴더)에 서비스 앱 작성
4.빌드   
        주의1 : 서비스명(프로젝트명)“Service” 단어 사용 불가함
        주의2 : 메인앱 보다 반드시 먼저 빌드가 되어 있어야 함
5.메인 생성
6.Project Manager > Android Platform > 우클릭 : 서비스 폴더 지정
        주의: 절대경로로 지정이 되므로 서비스앱의 프로젝트 폴더 이동시 재 지정 필요함
7.TLocalServiceConnection.StartService(‘서비스 프로젝트 명');   //  System.Android.Service
  주의 : “lib” 글자 제외 및 대소문자 구분
8.빌드 및 실행

Android Service 앱 확인 사항


 서비스 프로젝트 빌드후  jar파일 라이브러리 추가 확인

Deployment 

AndroidManifest.template.xml



Sample Demo

1. 비콘 인식 서비스 앱 실행.
2. 앱이 종료된 상태에서도 서비스는 가동됨
3. 비콘 접근시 알람
4. 알람 터치시 앱 실행하여 쿠폰 수신










[IoT] Bluetooth AC Control Android app with Delphi XE8 and Arduino

Bluetooth 220v AC control Android app with Delphi XE8 and Arduino

> Function
  • Arduino Bluetooth(HC-06) and relay(KY-019) to control the appliances connected to 220V.
  • On/Off and Interval time can be assigned easily.
  • Before run the app, activate the Bluetooth pairing the smart-phone and  HC-06 bluetooth module.
  • Please note that a short circuit or electric shock when connecting the KY-019 relay.



Android app download at Google play


Arduino connected parts


For HC-06 Bluetooth setup, see the below.



LiquidCrystal circuit ref.


Delphi XE8 full source download



Demo MOV


[IoT] Arduino with Delphi XE8 ~ LiquidCrystal and Temperature

Connection to Arduino devices from Delphi through a simple COM port serial.

> Function

  • LED On/Off Switch control
  • Read Temperature from sensor
  • Send Message to LiquidCrystal 

Full Soucre Download : Delphi Project and Arduino Code.



Delphi Application 



LiquidCrystal Circuit 



 Arduino Code 





Clipboard Sync App on Multi-Platform




I  developed and distributed the app to sharing the clipboard text between Multi-Platform devices (Phone, Tab, PC, Mac, etc.) by Tethering technology in Delphi XE8.

Install each OS app for your device in the same network class and touch the connect button for tethering.
You can connect multiple devices at the same time with a group by same Access Key.

You do not need to enter the IP Address, it will be automatically connected.

And you can immediately transfer text to the clipboard of the connected device by touch.

For example, created text on PC or Mac can be pasted in the edit box of Android or iOS phone.
You can also transfer the URL from the phone to Mac or another smartphone.
In case of URL,  the browser will be run immediately by one touch.
Of course, You can paste to the input box of browser.

[Notes]
If there are simultaneous users of this app within the same network class,

all devices of same Access Key will be connected.
In this case, Please enter the Access Key of your only.
Only devices with the same Access key will be connected.

You can download this app directly from the links below for Windows and Mac.
iOS and Android apps are available for download from Apple and Google app store.




Delphi XE8의 테더링 기술로 스마트폰, 탭, PC, Mac등 여러 디바이스들간에 클립보드 텍스트를 주고 받을수 있는 앱을 개발하여 배포 합니다.

같은 네트워크 클래스안에서 단말기 OS에 맞는 각각의 앱을 설치하고 연결버튼을 터치하면 각 디바이스들끼리 테더링 됩니다.
단말기 여러대를 동시에 연결 할 수도 있습니다.
이럴때는 동일한 Access Key를 사용하면 됩니다.
연결대상 단말기 IP Address를 입력하지 않아도 자동으로 연결 됩니다.

그리고 전송하려는 텍스트를 클립보드에 복사한 후 앱에서 터치하면 연결된 단말기의 클립보드에 바로 복사가 됩니다.

예를들면 PC나 맥에서 문장을 작성한 후 안드로이드나 iOS 폰으로 전송하여 문자 입력창에 붙여넣기를 할 수 있고,
폰에서 검색한 URL을 PC나 맥으로 전송 할 수도 있습니다.
URL의 경우에는 수신된 내용을 클릭하면 브라우져가 바로 실행이 되며
브라우져 주소창에 직접 붙여넣기도 물론 가능 합니다.

[주의사항]
같은 네트워크 클래스안에서 여러명이 동시에 이 앱을 사용하면,
Access Key가 같은 단말기는 모두 연결이 되므로 이때는 본인만의 Access Key를 입력하여 사용하기 바랍니다.
그러면 같은 Access Key를 가진 단말기들끼리만 연결이 됩니다.

Windows와 Mac용 어플리케이션은 아래 링크에서 직접 다운로드 받으면 되며,
안드로이드와 iOS앱은 구글 및 애플 앱스토어에서 다운로드가 가능합니다.



 
Download App for Windows

Download App for Mac OSX
If you see the message that "Can't be opened because it is from..."
Open by right/ctrl clicking on this file and click 'Open' only the first time.

Download App for Android

Download App for iOS








Running another app in Firemonkey android

Running another apps in Firemonkey android

Uses
  Androidapi.Helpers, AndroidApi.JNI.GraphicsContentViewText;

procedure TForm1.Button1Click(Sender: TObject);
var
 intent: JIntent;
begin
  intent := TJIntent.Create;
  intent := SharedActivityContext.getPackageManager.getLaunchIntentForPackage
              (StringToJString('com.kakao.talk')) ;
  if Assigned (intent) then
     SharedActivity.startActivity(intent);
end;

'com.kakao.talk' is a package name of another app.