태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바


프로그래밍2012/04/27 17:38

현재 프로젝트가 Unity3D를 이용하여 개발을 진행하다 보니 일일 자동 빌드의 필요성이 있어 해당 기능을 적용하였다.

우선 자동 빌드를 하기 위한 시스템에는 유니티 에디터가(빌더,컴파일러) 설치되어 있어야 한다.

SCM은 SVN 대신 UnityAsset Server 를 쓰고 있으며 기본 플로우는 다음과 같다.


  1. AssetServer에서 최신 리소스 및 코드 다운로드.
  2. 빌드 진행.

    (너무심플하다)


물론 SVN이나 다른 것을 사용한다면 1번과정을 대체하면 된다.

유니티에서는 명령줄 입력을 지원하므로 AssetServer에서 최신데이터 다운로드 및2번 빌드 과정은 unity.exe 를 이용한다.

 

우선 배치파일을 아래와 같은 내용으로 작성한다. 명령줄에 대한 설명은 유니티 도움말 참조!!


Unity_build.bat

@echo off

net use x: \\fileserver\Project /user:user pass

Echo [Process batchjob]===================================================== >> unitybuild.log

Echo %date% %time% [START] Update >> unitybuild.log

@"D:\Program(x86)\Unity\Editor\Unity.exe" -batchmode -projectPath D:\Work\TalesStory -assetServerUpdate 175.211.69.106 TalesStory user pass -quit -nographics >> unitybuild.log

Echo %date% %time% [BUILD] Unity batch build >> unitybuild.log

@"D:\Program(x86)\Unity\Editor\Unity.exe" -quit -batchmode -projectPath D:\Work\TalesStory -nographics -executeMethod MyEditorScript.PerformBuild >> unitybuild.log

Echo %date% %time% [END] >> unitybuild.log

 

net use 를 하는 것은 상기 배치파일을 서비스스케줄러에서 돌리게 되어 결과물이 저장될 서버에 미리 로그인해두는 것이다.

다음은 명령줄에서 실행할 스크립트 메서드(Batchbuild.cs)를 작성하여 Asset/Editor 폴더에 복사한다.

UnityEditor.MenuItem 을 이용해서 유니티 메뉴에 등록하여 빌드 테스트도 가능하다.


 

Batchbuild.cs

 

using UnityEngine;

using UnityEditor;

using System;

 

class MyEditorScript: ScriptableObject

{

    public static string version = PlayerSettings.bundleVersion;

    private static string version_template = "public class Version {    public static string version = \"$$version$$\";}";

 

    //-----------------------------------------------------------------------------------------------------------------

    [UnityEditor.MenuItem("Tools/G Studio/About G Studio")]

    static void About(){

        //요기다 디버그 찍어보자.

        Debug.Log("Application.dataPath="+Application.dataPath);

        Debug.Log("version="+version);

        Debug.Log("Version.version="+Version.version);

 

        WriteVersionFile(Application.dataPath+@"\Source\GUIScripts\Version.cs",version_template.Replace("$$version$$","adfasdfasdf"));

 

        EditorUtility.DisplayDialog("G Studio v" + version, "G Studio Test Script Version " + version + "\n\nCopyright 2012 NEOCYON G Studio\nAll rights reserved.", "OK");

    }

    //-----------------------------------------------------------------------------------------------------------------

    [UnityEditor.MenuItem("Tools/G Studio/PerformBuild")]

static void PerformBuild()

{

         string dt = String.Format(@"{0:yyyyMMdd}", DateTime.Now);

         PlayerSettings.Android.bundleVersionCode +=1;

         PlayerSettings.bundleIdentifier = "com.neocyon.talesstory";

         PlayerSettings.bundleVersion = "1.0." +PlayerSettings.Android.bundleVersionCode+"."+ dt;

        WriteVersionFile(Application.dataPath+@"\Source\GUIScripts\Version.cs",

                        version_template.Replace("$$version$$",PlayerSettings.bundleVersion));

 

        Debug.Log("PerformBuild()-Debug.Log");

//Console.WriteLine("PerformBuild()-Console");        //요건 안찍힘.

string output = "X:/40.배포/배치빌드/tailstory_" + dt + "-" + PlayerSettings.Android.bundleVersionCode+".apk";

string[] scenes = {

             Application.dataPath+"/Scenes/LoadScene.unity",

             Application.dataPath+"/Scenes/GameScene.unity"

             };

BuildPipeline.BuildPlayer(scenes, output, BuildTarget.Android ,BuildOptions.None );

}

    

    //-----------------------------------------------------------------------------------------------------------------    

    [UnityEditor.MenuItem("Tools/G Studio/Update Asset Server Data")]

static void UpdateAssetfromServer()

{

        Debug.Log("UpdateAssetfromServer()-Debug.Log");

        AssetDatabase.Refresh(ImportAssetOptions.Default);

//Console.WriteLine("PerformBuild()-Console");        //요건 안찍힘.

        //업데이트 수행하는 메서드 못찾음.

}

    //-----------------------------------------------------------------------------------------------------------------

     private static void WriteVersionFile(string filePathname, string version)

     {

        using (System.IO.FileStream fs = System.IO.File.Create(filePathname))

        {

            byte[] info = new System.Text.UTF8Encoding(true).GetBytes(version);

            fs.Write(info, 0, info.Length);

            //fs.WriteText(version);

        }        

     }

}

 

코드에 필요한 게 있다면 편집하면 된다.

프로젝트명-빌드날짜.apk로 빌드 되도록 구성하였다.

 

여기에다가 빌드시 자동으로 빌드일자를 프로그램 내에 삽입하기 위하여 Version 클래스를 작성하고 참조하고 빌드전에 version.cs를 자동 생성시켜 내부에 버전정보를 표시토록 한다.

 

이후 윈도우 작업 스케줄러 에 해당 배치파일을 등록하면 끝.


매일 새벽 5시에 빌드가 된다. 자~알 된다. 아 물론 5시에 시스템 켜있어야한다. 그리고 유니티는 실행중이면 안된다. process 검사해서 kill 해주고 빌드 돌리는거 만들려다가 구차니즘으로 걍 pass!~


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
집에 컴퓨터가 많다보니 이런저런 수리할일이 생기는데 비프음가지고 장애유무를 판단해야한다.
그때마다 구글링하기도 불편하고..

바이오스 종류별로 잘 정리해논 사이트가 있다. 이거하나면 비프음이 뭔뜻인지 알수 있다.

http://www.5starsupport.com/info/beep_codes.htm 


AMI (American Megatrends') BIOS

Beep Codes

Message

one short DRAM refresh failure (Problem with memory)
two short Parity circuit failure
three short Base 64K RAM failure
four short System Timer failure
five short Processor failure
six short Keyboard Controller / Gate A20 failure
seven short Virtual Mode Exception error
eight short Display Memory Read/Write failure (fault with video card)
nine short ROM BIOS Checksum error (fault with BIOS chip)
ten short CMOS Shutdown Read/Write error
eleven short Cache memory
one long Passed (no errors)
one long, two short Video failure
one long, three short Base / Extended Memory failure
one long, eight short Display / Retrace Test failure

AST Research BIOS

Beep Codes 

Message 

one short Low level processor verification test failed (POST 1)
two short Clearing keyboard controller buffers failed (POST 2)
three short Keyboard controller reset failed (POST 3)
four short Low level keyboard controller interface test (POST 4) 
five short Reading data from keyboard controller failed (POST 5) 
six short System board support chip initialization failed (POST 6)
seven short Processor register read/write verify test failed (POST 7) 
eight short CMOS timer initialization failed (POST 8) 
nine short ROM BIOS checksum test failed (POST 9) 
ten short Initialize primary video (POST 10) 
eleven short 8254 timer channel 0 test failed (POST 11) 
twelve short 8254 timer channel 1 test failed (POST 12) 
thirteen short 8254 timer channel 2 test failed (POST 13) 
fourteen short CMOS power-on and time test failed (POST 14) 
fifteen short CMOS shutdown byte test failed (POST 15) 
one long DMA channel 0 test failed (POST 16)
one long, one short DMA channel 1 test failed (POST 17) 
one long, two short DMA page register test failed (POST 18) 
one long, three short Keyboard controller interface test failed (POST 19) 
one long, four short Memory refresh toggle test failed (POST 20) 
one long, five short First 64 KB memory test failed (POST 21) 
one long, six short Setup interrupt vector table failed (POST 22) 
one long, seven short Video initialization failed (POST 23) 
one long, eight short Video memory test failed (POST 24) 

Award BIOS 

Beep Codes

Message 

one short Passed (no errors) 
two short Any non-fatal error 
one long, two short Video failure 
one long, three short Keyboard Controller failure (applies to 286, 386 and 486) 

Compaq BIOS

Beep Codes

Message 

one short Indicates that the system is booting properly
two short General BIOS error - remedy unknown
one short, two long Memory Module
one long, one short BIOS ROM checksum error
one long, two short Video error
7 Beeps: one long, one short, one long, one short, pause, one long, two short AGP Video
one long continuous tone Memory Module

IBM BIOS 

Beep Codes

Message 

none Power Supply or System Board failure (possible short) 
one short  Passed (no errors) 
one short (blank screen) Video error (check cable) 
one short (no boot) Floppy Drive error 
two short Configuration Error (displayed on screen) 
repeating short Power Supply or System Board failure 
continuous Power Supply or System Board / Keyboard stuck 
one long, one short System Board failure 
one long, two short Video (Mono/CGA) failure (check cable) 
one long, three short  Video (EGA) failure (check cable) 
three long Keyboard Card error 

Mylex BIOS

Beep Codes

Message 

one Normal boot
two Video adapter error
three Keyboard controller error
four Keyboard error
five PIC 0 error
six PIC 1 error
seven DMA page register error
eight RAM refresh error
nine RAM data error
ten RAM parity error
eleven DMA controller 0 error
twelve CMOS RAM error
thirteen DMA controller 1 error
fourteen CMOS RAM battery error
fifteen CMOS RAM checksum error
sixteen BIOS ROM checksum error

Mylex 386 BIOS

Beep Codes

Message 

one long Normal boot
two long Video adapter error
one long, one short, one long Keyboard controller error
one long, two short, one long Keyboard error
one long, three short, one long PIC 0 error
one long four short, one long PIC 1 error
one long, five short, one long DMA page register error
one long, six short, one long RAM refresh error
one long, seven short, one long RAM data error
one long, eight short, one long RAM parity error
one long, nine short, one long DMA controller 0 error
one long, ten short, one long CMOS RAM error
one long, eleven short, one long DMA controller 1 error
one long, twelve short, one long CMOS RAM battery error
one long, thirteen short, one long CMOS RAM checksum error
one long fourteen short, one long BIOS ROM checksum error

Phoenix BIOS 

Beep Codes 

Message 

one, one, three CMOS Read/Write 
one, one, four ROM BIOS Checksum failure 
one, two, one Programmable Interval Timer failure 
one, two, two DMA Initialisation failure 
one, two, three DMA Page Register Read/Write failure 
one, three, one RAM Refresh Verification error 
one, three, three First 64K RAM Chip/Data Line failure 
one, three, four First 64K RAM Odd/Even Logic 
one, four, one First 64K RAM: Address Line 
one, four, two First 64K RAM: Parity failure 
one, four, three Fail-Safe Timer Feature (EISA only) 
one, four, four Software NMI Port failure (EISA only) 
two (followed by various combinations) First 64K RAM Chip/Data Line failure (combinations indicate which bit) 
three, one, one Slave DMA Register failure 
three, one, two Master DMA Register failure 
three, one, three Master Interrupt Mask Register failure 
three, one, four Slave Interrupt Mask Register failure 
three, two, four Keyboard Controller failure 
three, three, four Display Memory failure 
three, four, one Display Retrace failure 
three, four, two Video ROM search proceeding 
four, two, one Timer Tick failure 
four, two, two Shutdown failure 
four, two, three Gate A20 failure 
four, two, four Unexpected Interrupt in Protected Mode 
four, three, one RAM test above 64K failure 
four, three, two/three Programmable Interval Timer, Channel 2 failure 
four, three, four Realtime Clock failure 
four, four, one Serial Port error 
four, four, two Parallel Port error 
four, four, three Math Co-processor failure 
(tone) one, one, two System Board Select 
(tone) one, one, three Extender CMOS RAM 

Quadtel BIOS

Beep Codes

Message 

one short Indicates that the system is booting properly
two short CMOS IC error
one long, two short Video error
one long, three short Peripheral controller error
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
VBA코드의 재사용및 관리를 위하여 해당 데이터가 들어있는 엑셀에서는 비지니스 로직이 들어있는 코드를 생성하지 않는다.
하나의 엑셀파일에 모든 VBA코드를 작성/관리하고 데이터가 있는 엑셀파일에서 해당 기능을 호출하는 것.

이전에는 데이터엑셀이 열릴때 스크립트들어있는 엑셀을 같이 열도록 매크로를 지정하였으나
스크립트가 필요한경우만 스크립트엑셀파일을 로딩. 작업후 닫도록 함.



1. 폼에 양식을 이용해서 버튼 생성
2. 버튼에 매크로를 생성하여 지정
3. 매크로에 아래 코드 수정하여 기입.

Sub Macro1()
    'Application.Run ThisWorkbook.Path & "\..\테이블관리\VBA_Script.xls!Menu"

    'Application.Run "'D:\Work\테이블관리\VBA_Script.xls'!Menu"
    
    Dim strPathName As String
    Dim strFIleName As String
    Dim strMethod As String
    Dim varParam1 As Variant
    
    strPathName = "D:\Work\테이블관리\" 'ActiveWorkbook.Path
    strFIleName = "VBA_Script.xls"
    strMethod = "buildscript"
    varParam1 = 1
    Application.Run "'" & strPathName & strFIleName & "'!" & strMethod, varParam1
    'ActiveWindow.ActivateNext
    Windows(strFIleName).Activate
    ActiveWindow.Close

End Sub




저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
Sub Main
Dim mdl As Model
Dim ent As Entity
Dim attr As AttributeObj
Dim strResult As String

Set mdl = DiagramManager.ActiveDiagram.ActiveModel
Set sm = mdl.ActiveSubModel
strResult =""

For Each ent In mdl.Entities

strResult = strResult &  ent.EntityName & vbCrLf
For Each attr In ent.Attributes
strResult = strResult & vbTab & attr.ColumnName & vbCrLf 'vbTab &" [" & attr.Datatype & "]" & vbCrLf
Next
strResult = strResult &  vbCrLf
    Next

Clipboard strResult
MsgBox "Set Clipboard"
End Sub

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
TAG code, ER, sample
원래 윈도에서는 루트드라이브가 $ 기호가 붙여 기본공유로 설정이 되어있는데 이것이 활성화가 되지 않아 관리가 불편할때가 있다.  활성화 위해서는 

레지스트리에 아래 키값 추가. 재부팅 안해도 됨.

 

더보기

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
파워컴퓨팅2011/08/01 11:36
매크로의 ADODB Stream 을 이용.

---------------------------------------------------------
Sub test1()

  Set fs = CreateObject("ADODB.Stream")
    fs.Type = 2
    fs.Charset = "utf-8"
    fs.Open
    
    For i = 1 To 10
        For j = 1 To 10
            fs.writetext Cells(i, j) & ","
        Next
        
        fs.writetext vbCrLf
    Next

    fs.SaveToFile "d:\temp\excel_utf8_1.csv", 2
 
End Sub
------------------------------------------------------

위의 예제중 행과 열의 맥스치는 적당히 조절..  마지막 태그를 두어도 상관없음.


 
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
TAG excel, UTF-8, VBA
끄적끄적.2011/07/28 19:36
예전 커뮤니티게임 개발할당시 많이 염두해 두었던 싸이월드 미니라이프가 종료한다고 한다..
몇달전 피망의 데뷰도 종료 했는데..

시장성 없다는 얘기....  좋은 보기가 된듯..



----------------------------------------------------------------------------------------------

 미니라이프 서비스 종료 안내

번호 0 작성일 2011.07.27 조회수 192

안녕하세요. 사이좋은 사람들, 싸이월드입니다.

그 동안 미니라이프 서비스를 이용해 주신 회원님께 진심으로 감사 드립니다.

아바타와 공간에서 즐기는 3D 커뮤니티 서비스인 미니라이프 서비스는

회원 감소로 운영/유지에 어려움이 있어 부득이 서비스를 종료하게 되는 점 양해 부탁 드립니다.

서비스 종료 및 환불에 대한 자세한 내용을 다음과 같이 안내해드립니다.

▶ 미니라이프 바로가기

1. 미니라이프 종료 일정

- 2011년 8월 24일(수) : 선물 받기 승인을 하지 않은 미니라이프 선물 일괄 회수(선물하신 회원님께 도토리로 환불),

선물가게 및 미니홈피 내 미니라이프 관련 메뉴 삭제

- 2011년 8월 31일(수) : 미니라이프 서비스 종료

2. 미니라이프 환불 안내

- 환불 대상 : 미니라이프 종료 시점을 기준으로 유효한 유료 아이템

- 환불 수단 : 도토리

- 환불 방법 : 회원님의 싸이월드 계정으로 환불 일 내에 도토리로 자동 지급

- 환불 액 = (서비스를 제공 받지 못 한 일 수 ÷ 총 서비스 제공 일 수) × 해당 유료 아이템 결제 금액

* 서비스를 제공받지 못 한 일 수 = 총 서비스 제공 일 수 - 서비스 제공 일 수

- 환불 일 : 2011년 9월 15(목)

3. 백업 시스템 운영 안내

- 백업 대상 : 미니라이프 뽐내기 게시판 (카툰 뽐내기, 사진 뽐내기, 아바타 콘테스트)

- 백업 방식 : 백업 시스템에서 원하는 게시판 백업 신청 후, 회원님의 PC에 백업 파일이 생성되는 방식

- 백업 기간 : 2011년 8월 31일 ~ 2011년 10월 31일

4. 기타 사항

- 아이템을 선물 받은 회원님들 중, 수락 및 거절을 하지 않은 회원님들의 선물은

선물을 하신 회원님께 일괄적으로 반환됩니다. (2011년 8월 24일 ~ 2011년 8월 30일)

- 회원 탈퇴 시 환불이 불가합니다.

- 선물 일괄 반환 기간에 선물가게 및 미니홈피 내 미니라이프 관련 메뉴가 삭제됩니다.

- 미니홈피 꾸미기룸 설정에서, 설정상태가 미니라이프로 선택되어 있는 경우, 미니룸으로 자동 변경됩니다.

기타 문의 사항은 네이트/싸이월드 고객센터로 문의해 주시면 친절하게 안내해 드리겠습니다.

그동안 미니라이프를 이용해 주신 회원님께 다시 한번 깊은 감사의 말씀을 올리며, 차후 보다 좋은 서비스로 찾아 뵙겠습니다.

고맙습니다.

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
안드로이드2011/06/28 12:07
그동안 CBT를 하던 Total commander for Android 가 OBT로 전환되었군요...

포럼 주소는 
http://www.ghisler.ch/board/viewforum.php?f=22

히스토리는  
http://ghisler.fileburst.com/android/history.txt

현재 등록된 다운로드 주소는 
http://ghisler.fileburst.com/android/tc_b9.apk  


플러그인 다운로드 주소는
http://www.ghisler.com/androidplugins/ 

 
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
안드로이드2011/06/28 11:54
java 환경변수 세팅  -- bybulker 오전 10:50 2011-06-28


JAVA_HOME=D;\SDK\jdk1.6.0_26

- CLASSPATH 아래와 같이 기본경로만 넣어도 되지만 뭔가 동작이 이상할때는 아래처럼 더 추가해본다.

CLASSPATH=.;
CLASSPATH=.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tool.jar;


PATH=%path%;JAVA_HOME%\bin;


*JRE 같은 경우는 원래 JAVA_HOME 아래 jre\bin 에 런타임이 있다.  
간혹 JRE_HOME 이라는 환경변수도 필요할수 있다.

-----------------------------------------------------------------------------------------
* 안드로이드SDK를 사용하기 위한 path
안드로이드 SDK 내의 tools 폴더와 platform-tools 를 같이 추가해주어야함
ANDROID_SDK_HOME=   요건 .android 라는 폴더가 생길 상위 폴더 지정 (SDK User data AVD 경로) d:\documnets
ANDRIOD_SDK_ROOT= SDK 설치경로 지정  

PATH=%path%;%ANDROID_SDK_ROOT%\tools;%ANDROID_SDK_ROOT%\flatform-tools

* 에뮬레이터 쪽에서는 ANDROID_SDK_HOME 내의 AVD를 이용하는 듯하다.
*  %temp% 아래에 d:\Temp\temp-android-tool\ 처럼 폴더가 생기고 프로그램도 구동 된다.

 
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
프로그래밍2011/06/23 10:31
UI 스레드에 갱신요청하기 위해 아래처럼 대리자, 콜러, 본체로 나눠서 코딩하다가 간단하게 할수 있는 방법을 발견 !!

public delegate void ShowButtonDelegate(bool IsShow);
public void ShowButtonCaller(bool IsShow)
{
    if (canvasButtonGroup.Dispatcher.CheckAccess())
        ShowButtonBody(IsShow);
    else
        Dispatcher.Invoke(new ShowButtonDelegate(ShowButtonBody), IsShow);
}
private void ShowButtonBody(bool IsShow)
{
    DebugWrite("ShowButtonBody =" + IsShow.ToString());
}
------------------------------------
윈폼 ----------------------------
this.Invoke(new MethodInvoker(delegate()
{
    mnuConnectServer.Enabled = true;
    mnuStartServer.Enabled = true;
}));
------------------------------------
WPF ----------------------------
MainUI.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, 
new DispatcherOperationCallback(delegate {     MainUI.ResetGame(user.m_nID);     return null
}), null);  


------------------------------------
Invoke : 동기
BeginInvoke : 비동기  

------------------------------------
 
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 벌커덕스
TAG c#,
한도 0

도깨비뉴스. http://www.dkbnews.com/?mn=news&mode=read&nidx=8262&dom=8...

Unity3D 일일 자동 빌드 하기

현재 프로젝트가 Unity3D를 이용하여 개발을 진행하다 보니 일일 자동 빌드의 필요성이 있어 해당 기능을 적용하였다. 우선 자동 빌드를 하기 위한 시스템에는 유니티 에디터가(빌더,컴파일러) 설치되어 있어야 한다. SCM은 S..

어쩌다가 찾아볼일 생기는 메인보드 비프음 판독하기

집에 컴퓨터가 많다보니 이런저런 수리할일이 생기는데 비프음가지고 장애유무를 판단해야한다. 그때마다 구글링하기도 불편하고.. 바이오스 종류별로 잘 정리해논 사이트가 있다. 이거하나면 비프음이 뭔뜻인지 알수 있다. http://w..

EXCEL VBA - 다른파일 스크립트 호출 및 종료

VBA코드의 재사용및 관리를 위하여 해당 데이터가 들어있는 엑셀에서는 비지니스 로직이 들어있는 코드를 생성하지 않는다. 하나의 엑셀파일에 모든 VBA코드를 작성/관리하고 데이터가 있는 엑셀파일에서 해당 기능을 호출하는 것. 이..

ER Studio Entity Name to Clipboard Sample Code

Sub Main Dim mdl As Model Dim ent As Entity Dim attr As AttributeObj Dim strResult As String Set mdl = DiagramManager.ActiveDi..

Unity3D 일일 자동 빌드 하기
스마트폰에 교통신용카드 이식하면 지갑이 필요없다.
스마트폰에 교통신용카드 이식하면 지갑이 필요없다.
스마트폰에 교통신용카드 이식하면 지갑이 필요없다.
스마트폰에 교통신용카드 이식하면 지갑이 필요없다.