Showing posts with label 다운로드. Show all posts
Showing posts with label 다운로드. Show all posts
Monday, June 1, 2015
Wednesday, May 27, 2015
Thursday, April 23, 2015
Android Admob 예제 다운로드
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
package com.example.admobsample;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.LinearLayout;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
public class MainActivity extends Activity {
private AdView adView;
private final String MY_AD_UNIT_ID = "a151b9ce1aabeef";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// adView 만들기
adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
// 찾은 LinearLayout에 adView를 추가
layout.addView(adView);
// 기본 요청을 시작하여 광고와 함께 요청을 로드
adView.loadAd(new AdRequest());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
다운로드
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
package com.example.admobsample;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.LinearLayout;
import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;
public class MainActivity extends Activity {
private AdView adView;
private final String MY_AD_UNIT_ID = "a151b9ce1aabeef";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// adView 만들기
adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout);
// 찾은 LinearLayout에 adView를 추가
layout.addView(adView);
// 기본 요청을 시작하여 광고와 함께 요청을 로드
adView.loadAd(new AdRequest());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
다운로드
Android AudioTrack 사인파 사운드 예제 다운로드
이 예제는 시작하면 비프음(삐-) 소리가 나므로 주의하길 바란다.
public class MainActivity extends Activity {
PlayAudioTask task = new PlayAudioTask();
class PlayAudioTask extends AsyncTask<Void, Integer, Void> {
final static String TAG = "PlayAudioTask";
int streamType = AudioManager.STREAM_MUSIC;
int sampleRateInHz = 44100;
//int sampleRateInHz = 11025;
//int sampleRateInHz = 22050;
int channelConfig = CHANNEL_OUT_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int mode = AudioTrack.MODE_STATIC;
// 몇초간 플레이 할것인지 정의함
// 1초에는 short bytes * 44100이 필요함
// 1초를 그렇게 많이 쪼갠다는 뜻인가?
int seconds = 2;
short[] samples = new short[sampleRateInHz * seconds];
// 1초간 4000번 상한과 하한을 진동함
int freqOfTone = 4000;
int bufferSizeInBytes = sampleRateInHz * seconds * 2;
@Override
protected Void doInBackground(Void... params) {
// init audio
//int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode
final AudioTrack track = new AudioTrack(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, mode);
double angle = 0;
double increment = (2 * Math.PI * freqOfTone / sampleRateInHz); // angular increment
for (int i = 0; i < samples.length; i++) {
// 사인파(Sine wave)
samples[i] = (short) (Math.sin(angle) * Short.MAX_VALUE);
// Log.d(TAG, "sample i=" + i + " value=" + samples[i]);
// 파일 내용 저장하자.
angle += increment;
}
track.write(samples, 0, samples.length);
track.play();
// TODO Auto-generated method stub
return null;
}
}
다운로드
public class MainActivity extends Activity {
PlayAudioTask task = new PlayAudioTask();
class PlayAudioTask extends AsyncTask<Void, Integer, Void> {
final static String TAG = "PlayAudioTask";
int streamType = AudioManager.STREAM_MUSIC;
int sampleRateInHz = 44100;
//int sampleRateInHz = 11025;
//int sampleRateInHz = 22050;
int channelConfig = CHANNEL_OUT_MONO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int mode = AudioTrack.MODE_STATIC;
// 몇초간 플레이 할것인지 정의함
// 1초에는 short bytes * 44100이 필요함
// 1초를 그렇게 많이 쪼갠다는 뜻인가?
int seconds = 2;
short[] samples = new short[sampleRateInHz * seconds];
// 1초간 4000번 상한과 하한을 진동함
int freqOfTone = 4000;
int bufferSizeInBytes = sampleRateInHz * seconds * 2;
@Override
protected Void doInBackground(Void... params) {
// init audio
//int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode
final AudioTrack track = new AudioTrack(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, mode);
double angle = 0;
double increment = (2 * Math.PI * freqOfTone / sampleRateInHz); // angular increment
for (int i = 0; i < samples.length; i++) {
// 사인파(Sine wave)
samples[i] = (short) (Math.sin(angle) * Short.MAX_VALUE);
// Log.d(TAG, "sample i=" + i + " value=" + samples[i]);
// 파일 내용 저장하자.
angle += increment;
}
track.write(samples, 0, samples.length);
track.play();
// TODO Auto-generated method stub
return null;
}
}
다운로드
Friday, April 10, 2015
Monday, April 6, 2015
MSBuild 시작하기
MSBuild란 무엇인가? MSBuild란 오프라인, 그러니까 콘솔에서 Visual Studio IDE에서 수행했던 컴파일과 링크, 빌드를 수행해 주게 하는 프로그램이다. 유닉스에서 GNU Make, 자바의 Ant와 비슷하다. (금융권에 근무하던 시절 Makefile을 수천번 수정하고, 자바의 Ant로 자동빌드를 수행하던 기억이 난다.)
사실 처음에 MSBuild를 접하고 공부하였을 때는 Visual Studio는 JDK와 Eclipse처럼 IDE와 SDK가 분리되지 않는다고 생각했었다. 그러나 이것도 예전에 어렴풋이 알고 있던 cl.exe, al.exe, ln.exe와 같이 빌드시스템도 마찬가지로 분리되어 있었다.
Visual Studio에서 무언가를 컴파일 할려면 일반적으로 IDE(즉, Visual Studio GUI 프로그램)을 열어서 컴파일을 해야한다. 그런데 솔루션에 포함된 프로젝트가 정말 많고, 일부만 변해도 전체를 다 읽어서 컴파일을 할 것인가? 이것은 대규모 프로젝트에서는 IDE를 로딩하고 솔루션을 로딩하는데에 상당한 시간을 할애하게 되어, 누적되면 엄청난 시간의 손실을 가져온다.
또한, 그래피컬하게 프로젝트의 프로퍼티 페이지를 수정하는 것의 이점도 있지만, 직접 MSBuild 스크립트를 수정하여 사용하게 되면 조건에 따른 컴파일, 프로젝트 설정간의 상속도 가능하며, 중앙집중식 관리도 가능하다. MSBuild 스크립트는 csproj(C#), vbproj(VB.NET)와 같이 .NET 언어의 프로젝트 파일을 말하는데, 열어보면 알겠지만 XML이다.
암튼, 그래서 배우게 된 MSBuild. 이름도 많이 들어보고 인터넷 상에 자료도 많고 MSDN에 자료도 많지만 정작 가장 simple한 example이 없어서 직접 만들어 보았다. 언어는 C#이며, csproj에 .NET Framework 2.0의 MSBuild를사용한다.
MSBuild.exe는 C:\Windows\Microsoft.NET\Framework\v2.0.50727에 있다.
그리고 C#컴파일러인 csc.exe도 같은 폴더에 존재한다.
사실 처음에 MSBuild를 접하고 공부하였을 때는 Visual Studio는 JDK와 Eclipse처럼 IDE와 SDK가 분리되지 않는다고 생각했었다. 그러나 이것도 예전에 어렴풋이 알고 있던 cl.exe, al.exe, ln.exe와 같이 빌드시스템도 마찬가지로 분리되어 있었다.
Visual Studio에서 무언가를 컴파일 할려면 일반적으로 IDE(즉, Visual Studio GUI 프로그램)을 열어서 컴파일을 해야한다. 그런데 솔루션에 포함된 프로젝트가 정말 많고, 일부만 변해도 전체를 다 읽어서 컴파일을 할 것인가? 이것은 대규모 프로젝트에서는 IDE를 로딩하고 솔루션을 로딩하는데에 상당한 시간을 할애하게 되어, 누적되면 엄청난 시간의 손실을 가져온다.
또한, 그래피컬하게 프로젝트의 프로퍼티 페이지를 수정하는 것의 이점도 있지만, 직접 MSBuild 스크립트를 수정하여 사용하게 되면 조건에 따른 컴파일, 프로젝트 설정간의 상속도 가능하며, 중앙집중식 관리도 가능하다. MSBuild 스크립트는 csproj(C#), vbproj(VB.NET)와 같이 .NET 언어의 프로젝트 파일을 말하는데, 열어보면 알겠지만 XML이다.
암튼, 그래서 배우게 된 MSBuild. 이름도 많이 들어보고 인터넷 상에 자료도 많고 MSDN에 자료도 많지만 정작 가장 simple한 example이 없어서 직접 만들어 보았다. 언어는 C#이며, csproj에 .NET Framework 2.0의 MSBuild를사용한다.
MSBuild.exe는 C:\Windows\Microsoft.NET\Framework\v2.0.50727에 있다.
그리고 C#컴파일러인 csc.exe도 같은 폴더에 존재한다.
다음은 간단한 예제 C#소스이다. 사실 아무것도 없는 Hello World이다.
consolehwcs1.cs:
using System;
/// <summary>
/// Summary description for Class1
/// </summary>
public class ConsoleHWCS1
{
public static void Main()
{
//
// TODO: Add constructor logic here
//
Console.WriteLine("ConsoleHWCS1");
}
}
다음은 우리가 살펴볼 예제 msbuild스크립트이다.(확장자가 csproj이다.)
MSBuildTest.csproj:
// 디폴트 타겟은 "Compile"이다.
<Project DefaultTargets = "Compile"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
// 프로퍼티 그룹, 여기에 정의된 <tag>들은 $(tag)이렇게 사용할 수 있다. 상수와 같다.
<PropertyGroup>
// 어플리케이션 이름
<!-- Set the application name as a property -->
<appname>HelloWorldCS</appname><!-- exe output filename -->
// 출력 폴더 이름
<!-- Set the output folder as a property -->
<builtdir>BuiltApp</builtdir>
</PropertyGroup>
<ItemGroup>
// 여기는 컴파일될 소스들의 리스트를 적는다.
<!-- Specify the inputs by type and file name -->
<CSFile Include = "consolehwcs1.cs"/>
</ItemGroup>
// 여기는 컴파일 타겟을 정의 한다.
<Target Name = "Compile">
<!-- Check whether an output folder exists and create
one if necessary -->
// 빌드디렉토리가 없을 경우(컨디션 적용), 디렉토리를 만든다. 이런것도 가능하다. 원래 Visual Studio의 기능이니
<MakeDir Directories = "$(builtdir)"
Condition = "!Exists('$(builtdir)')" />
// 컴파일러를 호출해서 컴파일을 수행한다.
// 출력파일(어셈블리)이름도 정의해 준다.
// 그리고 소스들은 멀티로 적용한다. @(CSFIle)
<!-- Run the Visual C# compiler -->
<CSC Sources = "@(CSFile)"
OutputAssembly = "$(BuiltDir)\$(appname).exe">
<Output TaskParameter = "OutputAssembly"
ItemName = "EXEFile" />
</CSC>
// 빌드가 끝나고 화면에 메세지를 뿌려준다. 위에서 정의한 OutputAssembly를 EXEFile에 보존했다가 화면에 뿌려줌
<!-- Log the file name of the output file -->
<Message Text="The output file is @(EXEFile)"/>
</Target>
// 유닉스에서 Make clean과 동일하다. 전체 지우고 리빌드 할 경우에 사용
<Target Name = "Clean">
<RemoveDir Directories="$(builtdir)" />
</Target>
</Project>
다음과 같이 입력후에 수행을 하면 빌드가 된다.
C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild msbuildtest.csproj /t:Compile
/t:Compile은 컴파일 타겟이다. 유닉스에서 Make TargetName을 하는 것과 유사하다.
그러면 다음과 같이 메세지가 나오면서 빌드이 될 것이고, 결과 실행파일인 HelloWorldCS.exe는 .\BuildApp에 들어가게 된다.
이상으로 첫 MSBuild 프로그램이 완성 되었다. 끝으로, csproj파일을 Visual Studio에서 로딩을해 보면 로딩이 될 것이다.
C# PasrseHTML로 HTML 파싱하기
ParseHTML이라는 외부 라이브러리로 HTML을 파싱해보자.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HTML;
using System.IO;
namespace ParseHTMLTester
{
class Program
{
static void Main(string[] args)
{
StreamReader reader = new StreamReader("1.txt");// html을 1.txt로 저장해 놓음
HTML.ParseHTML parse = new HTML.ParseHTML();
// 스트림 리터에서 파일 전체를 string으로 변경
string data = reader.ReadToEnd();
parse.Source = data;
while (!parse.Eof())
{
char ch = parse.Parse();
if (ch == 0)
{
AttributeList tag = parse.GetTag();
if (tag.Name == "th")
{
// th일 경우 class의 값을 프린트
if (tag["class"] != null)
{
Console.WriteLine("th class=" + tag["class"].Value);
}
}
else
{
// 일반 태그는 그냥 프린트
Console.WriteLine(tag.Name);
}
}
}
}
}
}
다운로드
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HTML;
using System.IO;
namespace ParseHTMLTester
{
class Program
{
static void Main(string[] args)
{
StreamReader reader = new StreamReader("1.txt");// html을 1.txt로 저장해 놓음
HTML.ParseHTML parse = new HTML.ParseHTML();
// 스트림 리터에서 파일 전체를 string으로 변경
string data = reader.ReadToEnd();
parse.Source = data;
while (!parse.Eof())
{
char ch = parse.Parse();
if (ch == 0)
{
AttributeList tag = parse.GetTag();
if (tag.Name == "th")
{
// th일 경우 class의 값을 프린트
if (tag["class"] != null)
{
Console.WriteLine("th class=" + tag["class"].Value);
}
}
else
{
// 일반 태그는 그냥 프린트
Console.WriteLine(tag.Name);
}
}
}
}
}
}
다운로드
PHP 4.0 SOAP
PHP로 SOAP을 구현하려면 PHP5가 있어야 된다.
PHP5에만 SOAP이 내장되어 있다.
그러나 PHP4에서 구현을 하려면 NuSOAP을 사용하면 된다.
그리고 PHP5도 동일한 방법을 사용하면 되기 때문에 NuSOAP으로 하는것이 편하다.
nusoap-0.7.3.zip
nusoap-docs-0.7.3.zip
Mail_Mime-1.4.0.gz
세개의 파일이 필요한데
Mime은 NuSOAP 0.7.3에서 바이너리를 SOAP으로 보낼때 쓴다.
첨부된 nusoap.zip을 받고
htdocs폴더에다 lib에 풀고
// NuSOAP설정
include_once('lib/nusoap.php');
include_once('lib/nusoapmime.php');
// WSDL설정
$wsdl = 'http://url/WebService/Service?wsdl';
// NuSOAP설정
$client = new nusoap_client($wsdl, 'wsdl');
$client->setEndpoint("'http://url/WebService/Service");
위와 같이 하면 함수를 호출할 수 있다.
반드시 endPoint를 설정해야 한다.
다운로드
PHP5에만 SOAP이 내장되어 있다.
그러나 PHP4에서 구현을 하려면 NuSOAP을 사용하면 된다.
그리고 PHP5도 동일한 방법을 사용하면 되기 때문에 NuSOAP으로 하는것이 편하다.
nusoap-0.7.3.zip
nusoap-docs-0.7.3.zip
Mail_Mime-1.4.0.gz
세개의 파일이 필요한데
Mime은 NuSOAP 0.7.3에서 바이너리를 SOAP으로 보낼때 쓴다.
첨부된 nusoap.zip을 받고
htdocs폴더에다 lib에 풀고
// NuSOAP설정
include_once('lib/nusoap.php');
include_once('lib/nusoapmime.php');
// WSDL설정
$wsdl = 'http://url/WebService/Service?wsdl';
// NuSOAP설정
$client = new nusoap_client($wsdl, 'wsdl');
$client->setEndpoint("'http://url/WebService/Service");
위와 같이 하면 함수를 호출할 수 있다.
반드시 endPoint를 설정해야 한다.
다운로드
Friday, April 3, 2015
Android 티스토어 인앱결제 간단 예제 소스 다운로드
티스토어 인앱을 구현하려면 티스토어 샘플로부터 구현을 하면 되는데 기존 티스토어 샘플은 Fragment로 되어 있어서 그것을 최소화 해보았다.
1. 먼저 다음과 같은 packege를 복사한다.
com.skplanet.dev.guide.helper
com.skplanet.dev.guide.pdu
2. libs이하의 폴더에 속한 so와 jar들을 복사한다.
3. 다음과 같이 샘플 코드를 작성한다. 인앱 리퀘스트는 제외하고 실제 인앱 구매만을 구현한다.
아래는 request를 만드는 함수이다. (이것도 기존 소스에서 복사해 온다.)
aid=애플리케이션 아이디
pid=프로덕트 아이디
나머지는 ""으로 해도 된다.
private String makeRequest(String aid, String pid, String pname,
String tid, String bpinfo) {
ParamsBuilder pb = new ParamsBuilder();
pb.put(ParamsBuilder.KEY_APPID, aid.toString().trim().toUpperCase())
.put(ParamsBuilder.KEY_PID, pid.toString().trim());
String tmp = pname.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_PNAME, tmp);
} else {
pb.put(ParamsBuilder.KEY_PNAME, "");
}
tmp = tid.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_TID, tmp);
} else {
pb.put(ParamsBuilder.KEY_TID, "");
}
tmp = bpinfo.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_BPINFO, tmp);
} else {
pb.put(ParamsBuilder.KEY_BPINFO, tmp);
}
return pb.build();
}
실제 구매버튼의 onClick은 다음과 같이 구현한다.
그러면 티스토어 인앱 관련 웹액티비티가 뜬다음에 결제완료 코드를 callback으로 알려준다.
payment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// String test="test";
// Log.d("sktsample", test.toString());
String parameter = makeRequest("OA006536xx", "09100086xx", "",
"1234", "");
Bundle req = mPlugin.sendPaymentRequest(parameter,
new IapPlugin.RequestCallback() {
@Override
public void onResponse(IapResponse data) {
if (data == null
|| data.getContentLength() <= 0) {
Log.d(TAG,
"onResponse() response data is null");
return;
}
Response response = ConverterFactory
.getConverter().fromJson(
data.getContentToString());
if (response == null) {
// TODO invalid response data
Log.d(TAG,
"onResponse() invalid response data");
return;
}
// TODO for logging
StringBuffer sb = new StringBuffer(
"onResponse() \n");
sb.append("From:" + data.getContentToString())
.append("\n")
.append("To:" + response.toString());
Log.d(TAG, sb.toString());
// response.result.code
if (!response.result.code.equals("0000")) {
Log.d(TAG,
"Failed to request to purchase a item");
return;
}
// response.result.txid
// response.result.receipt
Log.d(TAG, response.toString());
}
@Override
public void onError(String reqid, String errcode,
String errmsg) {
Log.d(TAG, "onError: " + errcode + " " + errmsg);
}
});
}
});
다운로드
1. 먼저 다음과 같은 packege를 복사한다.
com.skplanet.dev.guide.helper
com.skplanet.dev.guide.pdu
2. libs이하의 폴더에 속한 so와 jar들을 복사한다.
3. 다음과 같이 샘플 코드를 작성한다. 인앱 리퀘스트는 제외하고 실제 인앱 구매만을 구현한다.
아래는 request를 만드는 함수이다. (이것도 기존 소스에서 복사해 온다.)
aid=애플리케이션 아이디
pid=프로덕트 아이디
나머지는 ""으로 해도 된다.
private String makeRequest(String aid, String pid, String pname,
String tid, String bpinfo) {
ParamsBuilder pb = new ParamsBuilder();
pb.put(ParamsBuilder.KEY_APPID, aid.toString().trim().toUpperCase())
.put(ParamsBuilder.KEY_PID, pid.toString().trim());
String tmp = pname.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_PNAME, tmp);
} else {
pb.put(ParamsBuilder.KEY_PNAME, "");
}
tmp = tid.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_TID, tmp);
} else {
pb.put(ParamsBuilder.KEY_TID, "");
}
tmp = bpinfo.toString();
if (!TextUtils.isEmpty(tmp)) {
pb.put(ParamsBuilder.KEY_BPINFO, tmp);
} else {
pb.put(ParamsBuilder.KEY_BPINFO, tmp);
}
return pb.build();
}
실제 구매버튼의 onClick은 다음과 같이 구현한다.
그러면 티스토어 인앱 관련 웹액티비티가 뜬다음에 결제완료 코드를 callback으로 알려준다.
payment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// String test="test";
// Log.d("sktsample", test.toString());
String parameter = makeRequest("OA006536xx", "09100086xx", "",
"1234", "");
Bundle req = mPlugin.sendPaymentRequest(parameter,
new IapPlugin.RequestCallback() {
@Override
public void onResponse(IapResponse data) {
if (data == null
|| data.getContentLength() <= 0) {
Log.d(TAG,
"onResponse() response data is null");
return;
}
Response response = ConverterFactory
.getConverter().fromJson(
data.getContentToString());
if (response == null) {
// TODO invalid response data
Log.d(TAG,
"onResponse() invalid response data");
return;
}
// TODO for logging
StringBuffer sb = new StringBuffer(
"onResponse() \n");
sb.append("From:" + data.getContentToString())
.append("\n")
.append("To:" + response.toString());
Log.d(TAG, sb.toString());
// response.result.code
if (!response.result.code.equals("0000")) {
Log.d(TAG,
"Failed to request to purchase a item");
return;
}
// response.result.txid
// response.result.receipt
Log.d(TAG, response.toString());
}
@Override
public void onError(String reqid, String errcode,
String errmsg) {
Log.d(TAG, "onError: " + errcode + " " + errmsg);
}
});
}
});
다운로드
Thursday, April 2, 2015
Android 초음파 오디오 통신(SAPI) 예제 다운로드
초음파 오디오로 통신하는 SAPI 예제이다.
동영상과 동일한 기능을 하는 예제를 작성해 보았다.
API사이트는 아래와 같다.
illiri API(SAPI) : http://illiri.com/index.html
사용방법은 아래의 순서대로 하면된다.
스마트폰이 2개 필요하다.
1. 클라이언트 attach
2. 서버 create
3. 클라이언트 onAttach
4. 서버 onAttached member
5. 클라이언트 onAttached leader
6. 양방향(서버 <-> 클라이언트) transfer -> onTransfer 가능
다운로드
동영상과 동일한 기능을 하는 예제를 작성해 보았다.
API사이트는 아래와 같다.
illiri API(SAPI) : http://illiri.com/index.html
사용방법은 아래의 순서대로 하면된다.
스마트폰이 2개 필요하다.
1. 클라이언트 attach
2. 서버 create
3. 클라이언트 onAttach
4. 서버 onAttached member
5. 클라이언트 onAttached leader
6. 양방향(서버 <-> 클라이언트) transfer -> onTransfer 가능
다운로드
Wednesday, February 4, 2015
Wednesday, September 17, 2014
Friday, September 12, 2014
SONY SonicStage 4.3 풀버전 다운로드
SONY MP3 플레이어를 위한 SonicStage의 최신버전인 4.3이다.
인터넷에서 추가 파일 다운로드 받지 않아도 되는 버전입니다. 소닉스테이지의 경우 영문버전 또는 한글버전을 영문윈도우에 사용하면 노래제목의 ㄱ,ㄴ,ㄷ한글 정렬이 소니MP3상에서 되지 않아서 이 버전을 사용하는게 좋습니다.
저는 그래서 항상 이 버전만의 소닉스테이지를 사용합니다. 호환성이 제일 좋은거 같아요. 다른것은 음악이 인코딩이 제대로 안되거나 깨집니다.
인터넷에서 추가 파일 다운로드 받지 않아도 되는 버전입니다. 소닉스테이지의 경우 영문버전 또는 한글버전을 영문윈도우에 사용하면 노래제목의 ㄱ,ㄴ,ㄷ한글 정렬이 소니MP3상에서 되지 않아서 이 버전을 사용하는게 좋습니다.
저는 그래서 항상 이 버전만의 소닉스테이지를 사용합니다. 호환성이 제일 좋은거 같아요. 다른것은 음악이 인코딩이 제대로 안되거나 깨집니다.
NVIDIA SDK 5.21 풀버전 다운로드
NVIDIA의 D3D 8.0, Vertex&Pixel Shader 1.1, 1.3버전의 최종 SDK이다.(GeForce3/4 대상) 이후 nVidia SDK 6버전 이상은 D3D 9.0이상 버전으로 구하기가 쉽지 않다.
또한, OpenGL의 고전 Shader를 해석하기 위해서는 반드시 필요하다. 여기서 OpenGL 고전 Shader란 Vertex Program, Texture Shader, Register Combiner를 말한다.
Pixel Shader라고 알려진 Fragment Shader는 VS2.0모델부터 존재하며(PS2.0), Register Combiner 1,2,3가 각각 Pixel Shader 1.1, 1.2, 1.3이다.
고전 게임 개발자료 또는 그래픽스 자료를 수집하는 분에게 권한다.
Thursday, September 11, 2014
Subscribe to:
Posts (Atom)
