코도바에서 웹 링크하는 방법



1. 일반 웹 하이퍼링크 사용


<a href="http://daum.net">링크</a>


이 방식으로 하면 그냥 완전히 링크 페이지로 넘어가버린다.


<a href="http://daum.net" target="_blank">링크</a>


target 속성을 붙여서 외부 브라우저 (PC에서는 새탭/새창)에서 켜지도록 하자.


참고

https://www.w3schools.com/tags/att_link_target.asp (HTML)

https://www.w3schools.com/jsref/prop_html_innerhtml.asp (자바스크립트)




2. InAppBrowser 사용


https://www.tutorialspoint.com/cordova/cordova_inappbrowser.htm


이 링크가 초보자용으로는 제일 설명이 잘 된 걸로 보인다.


적용하는 방법을 잘 모르겠다면 첨부 파일을 참고하자.


source.zip



'Programming > Cordova' 카테고리의 다른 글

코도바 설치하기  (0) 2018.12.28
Posted by Vermond
:

코도바 정보가 너무 없고 공홈 번역이 엉망이라 한번 건드려보면서 기록을 남길 생각이다.


빠른 시작은 홈페이지에 있는 것처럼 따라하면 된다.

https://cordova.apache.org/


영알못을 위해 자세히 설명하자면 다음과 같다.


1. npm 설치

코도바 설치를 하려면 npm이라는걸 설치해야 한다. 


https://www.npmjs.com/


npm 홈페이지에서 중간에 잘 보면 Install npm이 있다. 링크는 여기다.


https://www.npmjs.com/get-npm


Download Node.js and npm 버튼을 눌러 다운받는다. 그러면 운영체제에 맞는 파일이 나올 것이다.

설치하면 된다.


설치 확인 방법은 cmd 프롬프트 같은걸 열어서 npm만 입력하면 된다.

설치되었을 경우 npm 관련 메시지가 뜬다.



2. 코도바 설치


cmd 프롬프트 띄우고 다음 문장 입력하자.


npm install -g cordova


리눅스나 맥은 권한이 필요할수도 있으니 그때는 sudo 사용하자.



3. 프로젝트 생성하기


cordova create <path>


로 설치하면 된다. 물론 이거 다 cmd 프롬프트에서 직접 타이핑해야 한다. 아직 GUI 환경은 못봤다.


나는 원하는 폴더로 이동해서 cordova create MyApp 입력해서 MyApp 이라는 프로젝트를 생성했다.



4. 플랫폼 추가


플랫폼 추가는 프로젝트 폴더 내에서 해야 한다. 나는 MyApp 폴더 안에서 입력했다.


cordova platform add <플랫폼명>


가령 플랫폼명으로 android를 적으면 안드로이드 프로젝트가 추가되는 식이다.


대소문자에 유의해야 하며 지원하는 플랫폼 목록은 아래 커맨드를 입력하여 확인할 수 있다.


cordova platform



5. 앱 실행


코도바는 웹언어 기반이라서 적당히 웹페이지만 열어도 미리보기가 된다. 물론 이러면 제대로 보는건 아니다.


단순 레이아웃 확인 정도는 다음 위치의 파일을 열어서 확인하자.


<프로젝트명>/www/index.html


이 www가 (아마도) 열심히 지지고 볶고 건드릴 폴더이니 기억해두자.



제대로 앱 실행을 해보려면 4번 단계에서 플랫폼 추가했던걸 기억할 것이다. 프로젝트 파일 만들어졌으니 그거 열어서 진행하면 된다.


XCode의 경우 열어서 뭐 하는데 크게 문제는 없었다.

안드로이드가 약간 문제였는데 mips64el-linux-android가 없어서 빌드가 안된다고 하는 경우가 발생했다.


https://github.com/google/filament/issues/15


아래쪽에 설명이 있는데 위치를 말하기 좀 애매하니 스샷으로 대체한다. 보고 따라하면 된다. 쉬운 영어니까 괜찮을거다. 힘들면 구글 번역기 도움을 받자.


나는 7번까지만 하고나서 빌드 시도를 하니까 몇가지를 깔아야 한다고 이야기가 나왔고, 메세지 따라서 수행하니까 나중에는 연결한 안드로이드 기기에서 데모 화면을 출력할 수 있었다.



이정도까지만 하면 아주 기초는 준비된거다.

'Programming > Cordova' 카테고리의 다른 글

코도바에서 웹 링크하는 방법  (0) 2018.12.29
Posted by Vermond
:

공식 페이지 : https://github.com/core-plot/

사용 방법 : https://code.google.com/p/core-plot/wiki/UsingCorePlotInApplications


Xocde5, CorePlot1.6 기준


준비 단계


1. 코어 플롯 데이터를 다운로드 받는다


2. 코어 플롯을 삽입할 프로젝트에 CorePlot-CocoaTouch.xcodeproj를 추가한다

만약 추가할 프로젝트가 다른데서 열려있으면 제대로 추가되지 않는다


3. 본래의 프로젝트 설정을 바꿔야 한다

Linking - Other Linker Flags 에서 옵션 두개를 추가한다

-ObjC

-all_load


Search Paths - User Header Search Paths 항목에 코어플롯 헤더 위치를 추가해야 된다

다운로드 폴더에 받았다고 가정할때 다음의 주소를 등록하면 문제없다

옵션 중에서 non-recursive를 꼭 recursive로 바꾸도록 한다

/Users/(계정명)/Downloads/core-plot-master/framework 

당연한 이야기이지만 경로를 변경할때는 이 항목 역시 변경해야 한다


Build Phases - Target Dependencies에 CorePlot-CocoaTouch 항목 추가한다

제대로 프로젝트가 추가되었다면 아래와 비슷한 화면이 뜬다




Build Phases - Link Binary With Libraries에 항목 2개를 추가한다

QuartzCore.framework

libCorePlot-CocoaTouch.a

두번째 항목은 이전 항목처럼 프로젝트가 제대로 추가되었다면 쉽게 확인할 수 있다


4. 헤더에 다음 문구를 추가하면 사용할 준비는 완료된 것이다

#import "CorePlot-CocoaTouch.h"



코딩


헤더 선언

@interface CMViewController : UIViewController <CPTPlotDataSource>


@property (strong, nonatomic) CPTXYGraph *graph;

@property (strong, nonatomic) NSMutableArray *dataForPlot;


@property (strong, nonatomic) IBOutlet CPTGraphHostingView *graphView;


@end


CPTPlotDataSource 추가 

그래프, 그래프를 보여줄 뷰, 데이터 배열을 준비한다

GraphHostingView는 UIView를 만들어서 사용하면 된다 (종류는 바꿔줘야 한다)


본문 작성

몇가지 작성해야 하는건 분명한데 아직 파악을 제대로 못했다

웹에 떠도는 예제를 참조하거나 프로젝트 내부의 예제를 보고 파악하도록 한다

내가 작성한 예제는 아래에 첨부한다

CorePlotExample.zip



Posted by Vermond
:

참고 링크 : http://www.codeproject.com/Articles/22717/Using-PropertyGrid

(프로젝트 실행에 유의할 것 - 경로 재설정 필요)


VS의 폼 편집창에서 볼 수 있는 속성 윈도우

VS에서는 Property Grid라는 이름으로 지원한다.


실제 지원하는 부분은 아이콘부터 설명부분까지이고 아이템 선택하는 컨트롤은 다른 영역이다



이 PropertyGrid는 폼 편집창보다 코드상에서 처리를 좀 해주어야 한다.



- 기본 연결

PropertyGrid는 하나의 클래스와 연결할 수 있다

연결하는 클래스는 뭐든지 상관없지만 get/set으로 입출력을 선언해주어야 이 propertyGrid에 출력된다


연결 자체는 간단하다

propertyGrid1.SelectedObject = (created class);



- 구성 및 설정

get/set 선언에 일부 설정을 추가하면 위 스샷과 같이 나오게 된다


 [DisplayName("Choose your variant")]

        [Description("You can choose between Stone, scissors, paper")]

        [Category("Choosing")]

        [Editor(typeof(GameEditor), typeof(UITypeEditor))]

        public GameValues DisplayGameValues

        {

            get 

            {

                return m_GameValues;

            }

            set

            {

                m_GameValues = value;

            }

        }


DisplayName

메인으로 출력될 이름을 정한다. (스샷 기준으로 Text)

리스트란에 출력되고 설명 헤더로 추가된다

없을 경우에 선언한 함수명이 출력된다


Description

아래에 출력되는 설명을 정한다

없을 경우에는 공란이다


Category

목록에서 포함시킬 카테고리를 설정한다

미등록시 기타로 등록된다



기타 내용은 예제를 참고하면 좋다 (5번째 예제를 참고했다)

'Programming > C#' 카테고리의 다른 글

C DLL과 C# 연결 방법  (0) 2013.12.24
C# GC 빈도 낮추기  (0) 2013.12.20
c# - c dll 디버깅시 주의할 점  (0) 2013.12.20
c# 문자열에서 문자 개수 알아내기  (0) 2013.12.19
C# 타이머 사용 예제  (0) 2013.12.10
Posted by Vermond
:

 C#에서 c dll 함수를 호출하는 방법은 간단하다. 인자가 int, float 등의 형식이면 c#에서 그에 대응되는 값을 넣어주면 된다. 보통은 같은 명칭을 사용하며, unsigned int 같은 경우만 uint로 바꿔준다.

 문제는 포인터를 사용할 경우다. c#에서는 기본적으로 포인터를 사용할 수 없다. 그러나 c에서 배열을 사용하려면 포인터는 필수이다. 포인터를 사용할 수 있는 방법은 대략 3가지 정도가 있다.


1. 직접 포인터 선언해서 사용

c#에서도 제한적이지만 포인터를 직접 선언해서 사용할 수 있다. 포인터를 사용하려면 다음의 조건이 필요하다


- 포인터를 선언한 함수 혹은 클래스 상에 unsafe를 추가한다. 혹은 unsafe 블록을 생성한다. 포인터는 unsafe 내부에서만 사용 가능하다.

- 빌드 옵션에서 [안전하지 않은 코드 허용]을 체크한다. unsafe 사용시 이 옵션을 켜지 않으면 빌드되지 않는다





2. 그냥 사용 (마샬링)

대충 넘겨줘도 닷넷이 알아서 변환해주는 아주 간편한 기능이다

쓰기는 안되니 쓰기가 필요하다면 1번 방식을 사용하거나 텍스트로 데이터를 넘기도록 한다





3. IntPtr 사용

c#에서 포인터로 사용되는 놈이다. 2차원 이상의 배열을 넘겨줘야 한다면 이쪽이 가장 확실한 것으로 생각된다


예제는 아래의 링크로 대신한다 (베스트 답변 참고)

http://stackoverflow.com/questions/537573/how-to-get-intptr-from-byte-in-c-sharp




개인적으로 볼때 적합한 사용 방식은

1. 1차원 이하의 인자 전달만 필요하면 2번(마샬링)을 사용하여 편하게 작업한다

2. 2차원 이상의 인자 전달 혹은 한글 등을 제대로 전달해야 할때는 3번(IntPtr)을 사용한다

3. 포인터로 쓰기가 필요한 경우 직접 포인터를 작성하여 사용한다



아래 첨부된 파일은 간략한 예제 파일이다 (Visual Studio 2010에서 작성되었다)

버튼1 이벤트 : 직접 포인터 사용

버튼2 이벤트 : 마샬링 사용

버튼3 이벤트 : IntPtr 사용 (double 2중 배열)

버튼4 이벤트 : IntPtr 사용 (문자열 배열)


testDllCheck.7z


'Programming > C#' 카테고리의 다른 글

PropertyGrid 사용방법  (0) 2014.01.06
C# GC 빈도 낮추기  (0) 2013.12.20
c# - c dll 디버깅시 주의할 점  (0) 2013.12.20
c# 문자열에서 문자 개수 알아내기  (0) 2013.12.19
C# 타이머 사용 예제  (0) 2013.12.10
Posted by Vermond
:

C# GC 빈도 낮추기

Programming/C# 2013. 12. 20. 16:40 |

http://stackoverflow.com/questions/6005865/prevent-net-garbage-collection-for-short-period-of-time


채택된 답변 참고


실행될 코드는 finally 블록의 맨 첫번째에 넣어줘야 한다

try에 넣어놓으면 혹여나 예외로 catch로 빠졌을때 실행이 되지 않기 때문에

(물론 이경우는 GC 레벨이 낮아지지 않아서 중간에 GC가 실행될 것을 염두에 둬야 한다)


이 방법의 장점이라면 특정 코드 내에서 GC의 실행 빈도를 낮출 수 있다

그리고 보호할 모든 객체를 다 처리할 필요가 없다


단점은 이렇게 해도 메모리 부족해지면 GC가 수집을 수행하기 때문에 100% 막을 수는 없다는 것

프로그래머가 완벽하게 메모리 관리를 할려면 C#말고 다른걸 쓰는게 좋아 보인다

'Programming > C#' 카테고리의 다른 글

PropertyGrid 사용방법  (0) 2014.01.06
C DLL과 C# 연결 방법  (0) 2013.12.24
c# - c dll 디버깅시 주의할 점  (0) 2013.12.20
c# 문자열에서 문자 개수 알아내기  (0) 2013.12.19
C# 타이머 사용 예제  (0) 2013.12.10
Posted by Vermond
:

c# 프로젝트에서 디버깅 옵션의 비관리 코드 디버깅 사용

c 프로젝트에서 디버깅 - 디버거 형식을 혼압


으로 설정했을 때에 dll 디버깅이 된다.

(물론 당연하겠지만 두 프로젝트는 하나의 솔루션 내에서 열려 있어야 한다)


근데 이래도 안되는 경우가 있는데 방금 해결한 방법은 다음과 같다


- c 프로젝트 output을 dll로 설정한다

- 빌드한다

- 방금 빌드한 dll로 교체한다



'Programming > C#' 카테고리의 다른 글

C DLL과 C# 연결 방법  (0) 2013.12.24
C# GC 빈도 낮추기  (0) 2013.12.20
c# 문자열에서 문자 개수 알아내기  (0) 2013.12.19
C# 타이머 사용 예제  (0) 2013.12.10
C#에서 User Control 만들기  (0) 2013.11.12
Posted by Vermond
:

재밌는걸 봐서 올려본다


http://stackoverflow.com/questions/541954/how-would-you-count-occurrences-of-a-string-within-a-string?rq=1


문자열 내에서 특정 문자를 찾는 방식인데 질문자가 올린 방식이 참 독특하게 느껴졌다.

그리고 그 방식이 오히려 이전에 떠돌던 방식보다 더 빠르다니... (베스트 답변 참고)


그러나 가장 빠른 방식은 문자 하나하나를 일일히 비교하는 것이라는 결과를 보니

역시 단순한게 짱이구나 싶기도 하다

'Programming > C#' 카테고리의 다른 글

C# GC 빈도 낮추기  (0) 2013.12.20
c# - c dll 디버깅시 주의할 점  (0) 2013.12.20
C# 타이머 사용 예제  (0) 2013.12.10
C#에서 User Control 만들기  (0) 2013.11.12
c#에서 SQLite 한글 사용하기 -2-  (0) 2013.11.05
Posted by Vermond
:

Visual Studio 2010에서 작성되었다

TimerSample.7z


위 프로젝트가 열리지 않을 경우 이 파일만 참고해도 무방하다

Form1.cs



C#에서 Timer는 3가지 종류가 있다


System.Windows.Forms.Timer

System.Threading.Timer

System.Timers.Timer


이 예제에서는 각각의 타이머에 대한 간략한 예제가 작성되어 있다

예제는 아주 간단해서 코드보다 주석이 더 길다


첫번째와 세번째 타이머는 비슷하고 두번째는 동작방식이 약간 다르다


각 타이머에 대한 차이 혹은 설명은 아래를 참고하도록 한다

http://msdn.microsoft.com/en-us/magazine/cc164015.aspx (영어)

http://blog.daum.net/starkcb/117



간략하게 사용 용도를 설명한다면

첫번째 타이머는 간략하게 수행할 작업에 적합하며, 별다른 조취 없이 UI 쓰레드에 접근할 수 있기 때문에 편리하다.

그러나 많이 계산해야 되는 경우라면 사용하지 않는 편이 좋은데, 오랜 시간 동작한다면 그동안 UI가 먹통이 된다

(자세한 내용은 위 링크를 참고하도록 한다)


두번째 타이머는 UI 쓰레드와 다른 쓰레드에서 동작하기 때문에 UI가 먹통이 된다거나 하지는 않는다

그렇다면 단순히 쓰레드를 사용해도 되지 않느냐고 물을 수 있지만, 반복 작업에는 쓰레드 내부에 코드로 작성하는 것보다 이쪽이 훨씬 편리하다.

만약 반복 작업이 특정한 시간마다 이루어져야 된다면 이 타이머를 사용하는게 훨씬 간편하면서도 확실하다


세번째 타이머는 첫번째와 비슷하지만 시간 정확도가 훨씬 높다.

보다 정확하게 실행되어야 한다면 이 타이머를 사용하는 것이 좋다

이 타이머는 UI 쓰레드에서 실행될수도 있고 다른 쓰레드로 실행될 수도 있기 때문에 코드 안전성을 위한다면 UI 접근 코드는 invoke-delegate를 사용해주는 편이 좋다

Posted by Vermond
:

사용자가 직접 만들어서 사용할 수 있는 구성요소 중에서 UserControl은 Component에 비해서 작성하기가 쉽다.


 개인적으로 UserControl은 여러 메뉴가 복합적으로 사용되어야 할 때에 사용하면 편하다. 가령 이미지 밑에 텍스트가 따로 출력되는 버튼 아이템은 기본으로 제공되지 않기 때문에 UserControl로 만들어 사용하면 간편하다.


[추가]

프로젝트 오른쪽 클릭 - 추가 - 사용자 정의 컨트롤

(다른 방법도 있다)


이름을 입력하고 확인을 누른다


[배치]

일반적인 디자인 편집화면의 배치와 동일하다. 원하는 아이템을 추가하고 적절하게 배치하도록 한다.


크기 설정에는 조금 신경을 써줘야 한다. 기본적인 크기는 고정 크기이기 때문에 아이템을 추가해서 크기를 늘려도 내부 아이템 크기는 변하지 않는다. Dock 옵션 혹은 코드상에서 크기 수정을 하거나 해서 크기가 변하도록 하는 것이 한 방법이다.


[속성값 설정]

내부의 아이템에 직접 접근할 수 있도록 해야 한다. 그렇지 않으면 계속 고정된 값만 사용해야 한다. 버튼을 만들어놓고 텍스트 수정을 할 수 있는 방법을 마련하지 않으면 같은 텍스트만 사용해야 한다.


코드 내부에 다음의 코드를 추가한다

[Description("설명"), Category("분류")]

        public string myText

        {

            get { return label1.Text; }

            set { label1.Text = value; }

        }


설명과 분류는 GUI 편집 화면에서 보조로 사용하기 위한 것이다.

설정하지 않은 경우에 기타 분류로 취급된다. 그러나 편의를 위해서 간략한 설명을 추가하도록 하자.


데이터 입출력 부분은 get/set을 사용하면 간편하다. 필요에 따라서 추가 기능을 넣어야 될 경우도 있으나 여기서는 생략한다.


[사용]

프로젝트 내부에서 직접 사용하는 방법에 대해서만 설명한다.

사용하기 위해서는 먼저 빌드를 할 필요가 있다.

빌드가 끝나면 GUI 편집창의 도구 상자 최상단에 방금 작성한 아이템이 추가된다.

이후 일반 Components 같이 끌어다 사용하면 된다.

Posted by Vermond
: