블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2795)
Unity3D (852)
Programming (478)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (185)
협업 (61)
3DS Max (3)
Game (12)
Utility (68)
Etc (98)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (55)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[링크] http://masterfarseer.blogspot.com/2020/08/10-10.html?m=1

 

10년간 슈퍼셀을 경영하며 배운 10가지 교훈

게임 기획과 관련된 영문 자료를 번역합니다. 게임 개발과 관련된 영문 자료를 번역합니다.

masterfarseer.blogspot.com

 

반응형
Posted by blueasa
, |

유니티 데이터 통신 압축용으로 사용 중.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.BZip2;

public class ZipHelper
{
    public static byte[] Zip(byte[] data)
    {
        return Zip(data, 0, data.Length);
    }

    public static byte[] Unzip(byte[] data)
    {
        return Unzip(data, 0, data.Length);
    }

    public static byte[] Zip(byte[] data, int offset, int size)
    {
        MemoryStream inStream = new MemoryStream(data, offset, size);
        MemoryStream outStream = new MemoryStream();
        BZip2.Compress(inStream, outStream, false, 3);

        byte[] result = outStream.ToArray();
        inStream.Close();
        outStream.Close();

        return result;
    }

    public static byte[] Unzip(byte[] data, int offset, int size)
    {
        MemoryStream inStream = new MemoryStream(data, offset, size);
        MemoryStream outStream = new MemoryStream();
        BZip2.Decompress(inStream, outStream, false);

        byte[] result = outStream.ToArray();
        inStream.Close();
        outStream.Close();

        return result;
    }
}

// 예제
//class Program
//{
//    static void Main(string[] args)
//    {

//        byte[] array = new byte[1000];
//        for (int i = 0; i < array.Length; i++)
//        {
//            array[i] = (byte)(i % 255);
//        }
//        byte[] compress = ZipHelper.Zip(array);
//        byte[] decompress = ZipHelper.Unzip(array);


//    }

//}

 

 

[SharpZip dll 다운로드] https://www.nuget.org/packages/SharpZipLib/

 

[참조] https://nahyungmin.tistory.com/38

반응형
Posted by blueasa
, |
using System;
using Mono.Data.Sqlite;

public class Example
{

    static void Main() 
    {
        string cs = "URI=file:test.db";        
        
        using (SqliteConnection con = new SqliteConnection(cs)) 
        {
            con.Open();

            using(SqliteTransaction tr = con.BeginTransaction())
            {
                using (SqliteCommand cmd = con.CreateCommand())
                {

                    cmd.Transaction = tr;
                    cmd.CommandText = "DROP TABLE IF EXISTS Friends";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = @"CREATE TABLE Friends(Id INTEGER PRIMARY KEY, 
                                        Name TEXT)";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Tom')";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Rebecca')";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Jim')";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Robert')";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Julian')";
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = "INSERT INTO Friends(Name) VALUES ('Jane')";
                    cmd.ExecuteNonQuery();
                }

                tr.Commit();
            }

            con.Close();
        }
    }
}

 


출처: https://unsigned.tistory.com/entry/Sqlite-Insert-속도-문제시 [공부하자 공부공부]

 

Sqlite Insert 속도 문제시

using System; using Mono.Data.Sqlite; public class Example { static void Main() { string cs = "URI=file:test.db"; using (SqliteConnection con = new SqliteConnection(cs)) { con.Open(); using(SqliteTr..

unsigned.tistory.com

 

 

반응형
Posted by blueasa
, |

[링크] https://explorermax.drivethelife.com/

ExplorerMax - Smart File Explorer and Manager for Windows Platforms

If you want to track the file you managed at a certain moment, go and check Timeline. Here, you can find your browsing history classified into four groups -- Today, Yesterday, Latest Week, Latest Month. Then, the parent path is soon accessible. Moreover, f

explorermax.drivethelife.com

Clover가 마음에 들었었는데,
중국산이고 최신 버전은 뭔가 뒤로 하고 있는 것 같아서 찝찝해서
대체 프로그램을 찾고 있었는데 ExplorerMax가 보여서 Trial 깔아봤습니다.
Clover에 있던 원했던 기능이 아래와 같이 3가지 였는데 ExplorerMax에 다 있네요.

1. 탭브라우저 방식 멀티탭
2. 즐겨찾기(Bookmark)
3. 프로그램을 껐다 켜도, 열었던 탭 저장 된 상태로 보존(없는 줄 알았는데 설정에 보니 있네요)

프로그램 껐다 켜도, 이전 열었던 탭 상태로 시작



유료라서 어떨지 몰라서 우선 Trial로 사용해 보는 중인데 문제 없으면 유료구매 할까 생각중입니다.





[추가]
Giveway로 1년 무료 Key가 있어서 넣어보니 되네요.(언제 막힐지는 모르겠습니다)
1년 사용하고 후에 구매 생각을..

[추가2]
언제 등록해도 만료일이 2021년 8월 4일 인 것 같습니다.
Giveway 이벤트 시작일 기준 1년 무료인 것 같네요.

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

Giveaway details

License Key 1

    • BBF92-30413-AD377-E709A-A15F1

       

License Key 2

    • 97383-5AF67-1255C-52748-66D85

       

License Key 3

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

[1년 무료 라이센스 키 URL] https://winningpc.com/product/explorermax-pro-license-key-free/#giveaway-details

반응형
Posted by blueasa
, |

[무료 다운로드] https://www.ganttproject.biz/download/free

 

[자바 런타임(AdoptOpenJDK)] https://adoptopenjdk.net/

※ Important: when installing AdoptOpenJDK Java Runtime, make sure to select option "JavaSoft (Oracle) registry keys".

 

프로젝트 일정 관리 프로그램 입니다.

요즘 구글 드라이버와 연동해서 실행되는 일정관리 앱들이 많이 있는데, 이 프로그램은 윈도우용 프로그램입니다.

물론 리눅스나, 맥용도 있습니다.

 

특징

이 프로그램 만의 특징이라면 우선 오프라인에서 실행되므로 빠릿빠릿합니다.

그리고 무료라는 점.

유명한 Smart Sheet나 Gantter의 경우 기능적으로 훌륭하지만, 유료이기 때문에 개인이 사용하기에는 부담스러운 부분이 있습니다.

무료로 간트차트로 프로젝트 일정 관리를 원하신다면, Gantt Project를 써보시기 바랍니다.

https://www.ganttproject.biz/

GanttProject

Free desktop project scheduling and management app with Gantt chart for Windows, Linux and macOS

www.ganttproject.biz

다운로드

https://www.ganttproject.biz/download

GanttProject

Free desktop project scheduling and management app with Gantt chart for Windows, Linux and macOS

www.ganttproject.biz

무료이긴 한데, 5$를 지불하고 사시면 좀 더 빨리 새로운 기능을 업데이트 할 수 있는 혜택이 있습니다.

다운로드시 옵션1은 유료, 옵션2는 무료 이니 참고하세요.

 

 

[출처] GanttProject - 무료 간트차트 프로그램|작성자 펭순이

 

펭순이 : 네이버 블로그

캐주얼 게임 '펭귄날다' 를 서비스 중입니다. 많은 이용 바랍니다. https://play.google.com/store/apps/details?id=com.Byung.PengSooFly.Google

blog.naver.com

 

반응형
Posted by blueasa
, |

[링크] https://www.comparitech.com/privacy-security-tools/blockedinchina/

 

Test if Any Site is Blocked in China and Learn How to Access it

Test any site to see if it has been blocked by the Great Firewall. See how to unblock and access sites in China by using a VPN.

www.comparitech.com

 

[출처] 게임코디-드럼군님

반응형
Posted by blueasa
, |

티스토리는 현재 마크다운을 공식지원 하고 있지만 코드 하이라이팅은 기본으로 적용되지 않습니다. 코드 하이라이트가 적용 된 스킨을 사용하고 계시는 분들도 있고 개인의 취향에 따라 자율적으로 스타일을 적용할 수 있게 하려는 의도라고 합니다. 따라서 하이라이트가 적용되지 않은 스킨을 사용하신다면 별도로 설정을 해주셔야 합니다.

코드블럭에 하이라이트 적용하는 2가지 방법을 알아보겠습니다.

1. 플러그인 적용

- 블로그 관리페이지 > 플러그인 메뉴로 이동합니다.

- Syntax Highlight 를 찾아서 선택합니다

 

 

- 하단 테마에서 원하시는 테마를 선택합니다. (저는 Github을 선택했습니다)

- 그 다음 적용을 누르시면 끝입니다.

 

2. highlight.js 적용

간단한 방법으로 cdn을 이용해서 html 태그에 삽입 하겠습니다.

 

highlight.js demo 에 접속해서 원하는 스타일을 찾습니다. 저는 Github 스타일을 선택했습니다.

 

highlight.js demo

 

highlightjs.org

  • 스타일명은 github.min.css 이 됩니다. (꼭 .min.css 의 형태가 되어야 합니다.)
  • 스타일 목록은 여기서도 확인하실 수 있습니다.

 

스타일명을 포함한 아래의 코드를 복사합니다.

<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.9/styles/github.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.9/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

 

블로그관리 > 스킨편집 > Html 에 진입합니다.

 

위에서 복사한 코드를 아래와 같이 붙여넣고 오른쪽 위의 적용을 누르면 끝입니다.

적용 후 결과

Github 테마가 적용된 코드블럭

class Person { private int age; private String name; public Person(int age, String name) { this.age = age; this.name = name; } public String getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }

참고

코드블럭으로 소스코드 작성하기

새 에디터 FAQ



출처: https://simsi6.tistory.com/43 [곰돌푸우❤️]

 

티스토리 마크다운 코드블럭에 하이라이트 적용하기

티스토리는 현재 마크다운을 공식지원 하고 있지만 코드 하이라이팅은 기본으로 적용되지 않습니다. 코드 하이라이트가 적용 된 스킨을 사용하고 계시는 분들도 있고 개인의 취향에 따라 자율�

simsi6.tistory.com

 

반응형
Posted by blueasa
, |

[참조] https://mentum.tistory.com/150

 

유니티 퍼미션 체크 적용기. (Unity Permission Check) 2019.11.14 재작성.

2019.11.14 재작성. 유니티 안드로이드에서 스크린샷을 저장하기 위해 권한 부분을 다시 작성해야해서 하는 김에 이 글도 재작성 하였다. 2019/11/14 - [Unity/프로그래밍] - 유니티 안드로이드 스크린샷

mentum.tistory.com

 

 

참조 사이트에 포스팅 된 내용을 참고해서 나한테 맞게 만듬.

(Unity2018 / 저장공간(선택) 권한만 필요)

 

using System;
using UnityEngine;
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine.Assertions;
using UnityEngine.Android;

public class UICheckPermissionManagerSGT : MonoBehaviour
{
    public GameObject m_panelCheckPermission = null;
    public GameObject m_panelDeniedConfirm = null;

    private bool m_bOnCheckPermission = false;


    void Start()
    {
        Debug.Log("[Scene] CheckPermission");

        InitCheckPermission();
        CheckCountryCode_KR();
    }

    void InitCheckPermission()
    {
        m_bOnCheckPermission = false;

        ActivateCheckPermission(false);
        ActivateDeniedConfirm(false);

    }

    void CheckCountryCode_KR()
    {
        // GetIP가 한국인지 체크하는 외부 함수
        SGT.Global.CheckCountryCode_KR(ConfirmCountryCode_KR);
    }

    void ConfirmCountryCode_KR(bool _bIsCountryCode_KR)
    {
        if (true == _bIsCountryCode_KR)
        {
            // 한국 : Permission 확인
            DoCheckPermission();

            //CallPermission();
        }
        else
        {
            // No 한국 : Next Scene으로 이동
            GoToNextScene();
        }
    }

    void DoCheckPermission()
    {
        // 저장공간(Write) 권한 체크(선택 권한)
        if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
        {
            // 지정된 권한이 없으면 CheckPermission UI 활성화
            ActivateCheckPermission(true);
        }
        else
        {
            GoToNextScene();
        }
    }

    IEnumerator CheckPermissionCoroutine()
    {
        m_bOnCheckPermission = true;

        yield return new WaitForEndOfFrame();

        // 저장공간(Write) 권한 체크(선택 권한)
        if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
        {
            // 권한 요청
            Permission.RequestUserPermission(Permission.ExternalStorageWrite);

            yield return new WaitForSeconds(0.2f); // 0.2초의 딜레이 후 focus를 체크하자.
            yield return new WaitUntil(() => Application.isFocused == true);

            if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite) == false)
            {
                // 권한 거절하면 안내 팝업
                OnEventDenied();
                yield break;
            }
        }

        // 권한이 있으면 다음 Scene으로 이동
        GoToNextScene();

        m_bOnCheckPermission = false;
    }


    // 해당 앱의 설정창을 호출한다.(권한 설정할 수 있도록 유도)
    // https://forum.unity.com/threads/redirect-to-app-settings.461140/
    private void OpenAppSetting()
    {
        try
        {
#if UNITY_ANDROID
            using (var unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            using (AndroidJavaObject currentActivityObject = unityClass.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                string packageName = currentActivityObject.Call<string>("getPackageName");

                using (var uriClass = new AndroidJavaClass("android.net.Uri"))
                using (AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("fromParts", "package", packageName, null))
                using (var intentObject = new AndroidJavaObject("android.content.Intent", "android.settings.APPLICATION_DETAILS_SETTINGS", uriObject))
                {
                    intentObject.Call<AndroidJavaObject>("addCategory", "android.intent.category.DEFAULT");
                    intentObject.Call<AndroidJavaObject>("setFlags", 0x10000000);
                    currentActivityObject.Call("startActivity", intentObject);
                }
            }
#endif
        }
        catch (Exception ex)
        {
            Debug.LogException(ex);
        }
    }

    void ActivateDeniedConfirm(bool _bActive)
    {
        GgUtil.Activate(m_panelDeniedConfirm, _bActive);
    }

    void ActivateCheckPermission(bool _bActive)
    {
        GgUtil.Activate(m_panelCheckPermission, _bActive);
    }

    void GoToNextScene()
    {
        // 패치씬으로 이동
        SGT.Scene.RunCheckPermissionToPatch();
    }

    //////////////////////////////////////////////////////////////////////////
    // Event
    //////////////////////////////////////////////////////////////////////////

    void OnEventCheckPermission()
    {
        if (true == m_bOnCheckPermission)
            return;

        StopCoroutine("CheckPermissionCoroutine");
        StartCoroutine("CheckPermissionCoroutine");
    }

    void OnEventDenied()
    {
        ActivateDeniedConfirm(true);
    }

    void OnEventDeniedConfirm()
    {
        // 저장공간은 선택권한이라 권한요청 거절해도 게임 진행
        GoToNextScene();
    }

    //////////////////////////////////////////////////////////////////////////
    // UI Event
    //////////////////////////////////////////////////////////////////////////

    // 권한 동의 버튼
    public void OnUIEventCheckPermission()
    {
        if (SGT.Global.bPreventDoubleClick)
            return;

        SGT.Global.PreventDoubleClick();

        OnEventCheckPermission();
    }

    // 거절 확인
    public void OnUIEventDeniedConfirm()
    {
        OnEventDeniedConfirm();
    }

    // 권한 설정 열기
    public void OnUIEventOpenAppSetting()
    {
        OpenAppSetting();
    }
}

 

반응형
Posted by blueasa
, |

일부 인터넷에서 "개나 소나"를 찾아보면 아래의 해설이 있습니다.
(대체로 비슷함)
소라는동물은 우릭민족에게 있어서는 귀한동물의 상징이었습니다 농사를 짓고 고기를 얻고 그래서 재산목록에도 들어가는 귀한 가축이었지요 그러나 개는 천하게 여기든동물로 흔히 천한것을 상징하지요 그래서 욕속에 개가 들어가는경우가 먾습니다 즉 소같이 귀중한짐승이가는곳에 개같이 하찮한짐승도 끼어든다는듯으로 주제도 모르고 함부로 끼어들어 어울리려할대 개나소나끼어든다 혹은 개나소나 다가는곳이라든지 개나소다하는것등으로 표현을 합니다

즉 귀한사람이나 천한사람누구나 라는뜻입니다

그런데 언젠가 국어 공부를 하면서 "개나 소나"라는 뜻은 동물의 개나 소와는 아무런 상관이 없는 말이었던 것으로
기억합니다. 그 뜻이 와전된 것이라고 알고 있습니다. 정확한 뜻을 풀이해 놓은 곳을 찾을 수가 없네요 !
원뜻과 현재 위와 같은 뜻으로 사용하는 것이 바른 것인 지, 아닌 지에 대하여 알고 싶습니다.

비밀번호   삭제

 

 

[출처] https://www.korean.go.kr/front/onlineQna/onlineQnaView.do?mn_id=&qna_seq=19619&pageIndex=12532

 

국립국어원

축소 확대 온라인가나다 상세보기 "개나 소나"에 대하여... 작성자 김종렬 등록일 2009. 11. 18. 조회수 336 일부 인터넷에서 "개나 소나"를 찾아보면 아래의 해설이 있습니다. (대체로 비슷함) 소라는

www.korean.go.kr

 

반응형
Posted by blueasa
, |

유료라서 우선 Keep

 

[Link] https://www.xlcompare.com/

 

xlCompare - Compare and Merge Microsoft Excel Workbooks and VBA Projects

This powerful feature allows to perform any action in the command line mode, that could be programmed. It is suitable for complex cases, for example: when you need to compare several files at one run. Only a small set of the possible actions is described b

www.xlcompare.com

 

반응형
Posted by blueasa
, |