Windows10 에서 Linux 를 사용하는 글을 발견하여 링크를 남깁니다.


https://medium.com/@rkttu/start-java-dev-with-win-10-402cb91126fd


https://medium.com/@rkttu/windows-10%EC%97%90%EC%84%9C-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%9A%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-%EC%84%A4%EC%B9%98%ED%95%98%EA%B3%A0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0-2cb0d7892d12

오늘도 Visual Studio Extension 입니다. ㅎㅎ


오늘은 검색하다가 발견한 링크하나만 투척합니다.


https://hmemcpy.com/2015/10/7-open-source-visual-studio-extensions-to-make-your-life-easier/

정말 오래간만에 블로그에 왔네요..

방금 휴면상태를 풀었다는... ㅋ


오늘은 Visual Studio Extension 중에 제가 사용하는 extension 하나를 소개할까 합니다.


Debug Command Line 입니다.

Link : https://marketplace.visualstudio.com/items?itemName=SamHarwell.DebugCommandLine


기능은 Debug 시작시 넘기는 arguments 를 toolbar 에 추가하고

필요시에 toolbar 에서 선택해서 arguments 를 쉽게 변경하여 실행할 수 있게 해주는 기능입니다.


지원하는 버전은 Visual Studio 2012 ~ 2017 까지 지원하니 참고하세요~






개발자라면 언젠가는 사용하게되는 것이 버전관리툴(svn, git, ...)과 Issue Tracker 죠.


오늘은 TortoiseGit 과 issue tracker 를 연동하는 법을 소개하겠습니다.(단순히 issue 번호에 link 거는 정도 까지만 입니다.)


TortoiseGit 으로 Local 저장소를 준비해주세요.


그리고 연동할 Issue Tracker 도 있어야겠죠?


윈도우 탐색기에서 Local 저장소를 선택 후 우클릭 하고 


TortoiseGit -> Settings 클릭하면 아래와 같은 화면이 뜹니다.






- Hook Scripts/Issue Tracker Config 를 선택

- Config source 는 공통적으로 적용할 예정이므로 Global 을 선택했습니다.

- bugtraq.url : http://my_mantis/view.php?id=%BUGID% <- (요건 제가 사용중인 MantisBt 이니, 각자가 사용하고자 하는 IssueTracker 의 url 을 넣으셔야 합니다)

- bugtraq.message : %BUGID%

- bugtraq.logregex : Test 버튼 눌러서 입력합니다.


  


Message part expression : [Ii]ssues?:?(\s*(,|and)?\s*#\d+)+

Bug-ID expression : (\d+)


- 이제 설정이 완료되었습니다.


- git commit log 작성시 Tester 의 Sample text 처럼 입력하면 log 확인창에 아래와 같이 issue 번호에 링크가 걸리게 됩니다.




이제 링크를 클릭하여 Issue Tracker 의 해당 이슈가 보이면 성공이죠~


이상으로 TortoiseGit 에 Issue Tracker 연동 방법에 대한 정리를 마치겠습니다~~ 






   

http://fmtlib.net/3.0.0/index.html

   

c, c++ 에서 프로그래밍을 할 때 printf, sprintf 등과 같은 함수들을 자주 사용하시죠?

로그를 남기거나 문자열을 조합하거나 할 때 전 보통 아래와 같이 쓰곤 했습니다.

   

std::string my_name = "simmanix";
int age = 26;  // 네.. 거짓말입니다... 20 대로 돌아가고 싶네요.. ㅜㅜ

char szMyInfo[256];
sprintf( szMyInfo, "name = %s, age = %d", my_name.c_str(), age );

   

그러다가 가끔 실수로

sprintf( szMyInfo, "name = %s, age = %d", my_name, age );

이렇게 해서 낭패를 보기도 하죠.(컴파일 에러가 안나죠 ;;;;)

조합할 내용이 많을 경우 %s,%d,%c,%u, 등등 타입에 맞게 순서를 지켜야 하는 번거로움도 있습니다.


그리고 저의 경우 format string 을 외부파일로 만들어서

c++ 프로그램과 c# 프로그램이 공용으로 사용해야하는 경우가 있었습니다.

이런 문제들을 해결해야 했고 그렇다고 직접 구현하기는 너무 귀찮았습니다.

(사실 능력이 부족합니다.. ㅜㅜ)

결국 구글링한 끝에 cppformat 이라는 라이브러리를 발견하고는 바로 적용했습니다.


cppformat 은 cross-platform 이며, c의 printf 방식으로도 사용할 수 있고 c# 방식으로도 사용할 수 있습니다.

간단하게 위에서 예를 들었던 코드를 cppformat 으로 써서 c# 방식으로 바꿔보겠습니다.


std::string my_name = "simmanix";
int age = 26;  // 네.. 거짓말입니다... 20 대로 돌아가고 싶네요.. ㅜㅜ
//char szMyInfo[256];

/*
sprintf( szMyInfo, "name = %s, age = %d", my_name, age );
std::string my_string = szMyInfo;
*/

std::string my_string = fmt::format( "name = {}, age = {}", my_name, age );


변화를 감지하셨나요?

%s,%d 가 없어지고 {},{} 로 대체되었습니다.

이제 자료형에 따른 %s,%d 사용 그리고 나열순서에서 해방될 수 있습니다.


이 외에 특별한 형태로 출력해야 하는 경우도 지원하고 있는데

자세한 설명은 link 로 대신하겠습니다.


http://fmtlib.net/latest/api.html

http://fmtlib.net/3.0.0/syntax.html


cppformat 은 window 및 linux 에서도 정상적으로 동작하는 것을 확인했습니다. 

로그파일을 분석할 때 여러 문자열을 동시에 검색하고 싶을 때가 있다.


Start, End, Req, Res 등을 같이 검색하는 경우 등이다.


Notepad++ 에서 아래와 같이 검색하면 된다.


(Start|End) | (Req|Res)


특정문자열로 끝나는 문자열을 검색해보자.


찾고 싶은 것이 예를들어 ".tga" 라면


다음과 같이 검색하면 된다.


^.*.tga$


해석:

 ^

 줄이나 문자열의 시작 

 일반적으로 새 줄을 제외한 모든 문자를 의미한다.

\.tga

 .tga

 $

 줄이나 문자열의 끝



윈도우 탐색기에서는 여러 폴더에 있는 특정 파일들을 복사하는 기능이 없죠.

저의 경우에는 업무상 여러 폴더에 있는 특정파일들을 다른 경로에 동일한 구조로 복사해야 하는 경우가 빈번합니다.


매번 탐색기로 작업을 하자니 너무 번거로와서 파워쉘로 만들어 봤습니다.

복사할 파일이 다를 경우 스크립트를 수정해야 하긴 하지만 하나하나 복사하는 것보다는 좀 더 수월합니다. 


자 스크립트 나갑니다.

# filename : copy_files.ps1
# author : simmanix
# date : 2016-05-18 16:40
 
$ROOT_DIR= $PSScriptRoot
echo $ROOT_DIR
$DEST_PATH="DestPath"
 
$Src_Nation="USA"
 
$Files = New-Object System.Collections.ArrayList
$Files += "TTF\TTFInfo.xml"
$Files += "Config\NationInfo.xml"
 
function fCopyFile ()
{
	$D_PATH=$args[0]
	$File=$args[1]
 
	If ( $args.Count -lt 2 )
	{
		return
	}
 
	echo "cur path = $D_PATH"
	echo "cur file = $File"
	echo "cp $ROOT_DIR\$DEST_PATH\$Src_Nation\$File $ROOT_DIR\$M_TYPE\$D_PATH\$File"
 
	& cp $ROOT_DIR\$DEST_PATH\$Src_Nation\$File $ROOT_DIR\$M_TYPE\$D_PATH\$File
}
 
cd .\$DEST_PATH
 
$ARR_NATION = Get-ChildItem -Directory -Name
 
for( $i = 0 ; $i -lt $ARR_NATION.Count ; $i++ )
{
	$NATION = $ARR_NATION[$i]
 
	If ( $Src_Nation -eq $NATION )
	{
		continue;
	}
 
	for( $j = 0 ; $j -lt $Files.Count ; $j++ )
	{
		fCopyFile $NATION $Files[$j]
	}
 
	cd $ROOT_DIR
}


설명


$Files += "여기에 복사하고자 하는 파일들을 추가합니다.txt"

$ARR_NATION -> 복사하고자 하는 대상 폴더입니다. 위에서는 특정 폴더내의 모든 폴더에 넣는 코드입니다. 여러분들은 $Files 처럼 만들고 사용하는 것이 좋겠죠?


나머지는 충분히 분석가능하리라 생각합니다.



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

VisualStudio 의 빌드이벤트에 Powershell 사용하기  (0) 2016.05.24
PowerShell 설정  (0) 2016.05.24
  • VisualStudio 의 빌드이벤트에 Powershell 사용하기
    • Powershell 관리자 모드로 실행 후 아래와 같이 입력 후 실행한다.
         
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    • 빌드 전 이벤트에 아래와 같이 입력한다. 파라미터를 넣는게 핵심이다.( *사이띄개 주의 할 것 )
      (환경변수 PATH 에 PowerShell 경로를 추가하자.)
         
powershell "$(SolutionDir)build_event_before.ps1" "$(ProjectName) " "$(NATION)"

  • buil_event_before.ps1 샘플
    • project 별 Predefine.h 에 CommonClient.vsprops 에 정의된 $(NATION) 에 맞는 국가를 #include 하도록 변경하는 Script 이다.
         
# filename : build_event_before.ps1
# author : simmanix
# date : 2016-04-07 21:42
# Visual Studio 에서 빌드시 프로젝트 별로 설정된 Predefine_$NATION.h 가 include 되도록 수정한다.
 
$invocation = (Get-Variable MyInvocation).Value 
$scriptPath = Split-Path $invocation.MyCommand.Path 
$scriptName = $invocation.MyCommand.Name
 
echo "--------------- start $scriptName ---------------"
 
if( $args.Count -lt 2 )
{
 
    echo "usage : $scripName param1 param2"
    echo "--------------- failed $scriptName ---------------"
    exit 1
}
 
$ProjName = $args[0]
$Nation = $args[1]
 
echo "ProjectName : $ProjName"
echo "Nation : $Nation"
 
$PredefineFileName = $PSScriptRoot + "\src\" + $ProjName + "\Predefine.h"
$OldNation = 0
 
$Lines = Get-Content $PredefineFileName | % {
    if( $_ -match "#include `"Predefine_" )
    {
        $sp = $_.split("_");
        $OldNation = $sp[1].replace( ".h`"", "" );
        $bSame = $OldNation -eq $Nation;
        $_ = $sp[0] + "_" + $Nation + ".h`"";
    }
    $_;
}
 
if( $bSame )
{
    echo "Not changed because same nation";
}
else
{
    Set-Content -path $PredefineFileName -Value $Lines
    echo "Changed $OldNation to $Nation"
}
 
echo "--------------- succeed $scriptName ---------------"


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

특정파일들을 여러 폴더에 복사하는 PowerShell Script  (0) 2016.05.24
PowerShell 설정  (0) 2016.05.24


+ Recent posts