[윈도우] 자주 쓰는 에디터 컨텍스트 메뉴 추가하기

맥은 내가 맥이 따로 없어서 추후 주위 사람을 통해 포스트 하도록 하겠다.

Sublime Text나 Atom… 많이들 쓸 거다. 무거워 터진 UltraEdit보다 더 저렴하고 효율적이기 때문에 필자도 애용하기도 한다.
안타깝게도 이들 에디터는 설치 시 편리하게 편집을 위한 컨텍스트 메뉴를 같이 설치하지 않는다. 아쉽다.
하지만 커뮤니티의 노력으로 매우 쉬운 컨텍스트 메뉴 추가를 위한 배치 스크립트를 만들었다.
당신은 설치 폴더에 배치 스크립트를 다운받은 뒤 실행만 하면 된다.

Sublime Text

https://gist.github.com/jcppkkk/8330314

Atom 내가 위에 거 Fork 해서 수정했다.

https://gist.github.com/composite/32c4ec768268762e431e

참고: Powershell 1.0 이상이 있어야 하기 때문에 윈도우 XP의 경우 Powershell을 따로 설치해야 하지만 윈도우 7부턴 기본내장이라 실행만 하면 된다.
사용법은 간단하다. OpenWith(에디터명)AsAdmin.bat 파일 다운받고, 에디터가 설치된 폴더에 넣은 다음, 관리자 권한으로 실행만 하면 된다.
실행하면, _elevate.cmd_elevate.vbs 파일, 그리고 컨텍스트 메뉴 제거를 위한 uninstall_OpenWith(에디터명)AsAdmin.bat 파일을 다운받게 된다.
위 2개는 당연히 편집 시 관리자 권한 상승을 위한 필수 파일들이기 때문에 두는 것이 좋다. 그렇다. 이놈의 특장점이 바로 관리자 권한으로 편집 기능이 있기 때문이다.

만약 당신이 자주 쓰는 다른 에디터(예:AcroEdit 등)가 있다면, 간단하게 에디터가 설치된 폴더에 OpenWith(에디터명)AsAdmin.bat 파일을 복사 후 내용을 편집해
에디터의 파일명과 에디터 이름을 수정하여 실행만 하면 된다. 아, 대신 귀찮겠지만 uninstall_OpenWith(에디터명)AsAdmin.bat 파일도 수정해야 한다.

이제 더이상 설명은 필요없다. 잘 써라. 끗.

composite / 2015년 12월 30일 / Piss Development / 0 Comments

[JS] String.prototype.replace() 문자열 함수 대체를 허하노라!

제목은 좀 거창하겠지만 그냥 String.prototype.replace 메소드의 함수 사용법 정리다.

먼저 콜백 함수 구조는 아래와 같다.

function(match, p1, [p2... p9, offset, string){
    // insert your code here.
}

인자는 이렇게 알면 된다.

  • match: RegExp.prototype.match() 메소드 실행 후 나오는 배열의 첫자리[0]에서 정규식에 매치된 문자열 전체를 불러온다. 그걸 가져다 쓴다. ($0)
  • p1, p2... p9: 정규식의 그룹 매치 ($1 ~ $9) 인자이다. 그룹 매치는 최대 9개 불러올 수 있으며, 늘어날수록 두번째 기준 인자에서 늘어난다.
  • offset: 정규식이 매치된 원래 문자열 대비 위치이다. 예를 들어 abcd 에서 bcd 매치가 될 경우 offset 값은 1이 된다. 당연히 0부터 시작이다.
  • string: 정규식을 검색하기 위해 사용된 문자열 전체를 불러온다.

여기서 주의해야 할 점은 p1, p2... 인자인데, 이들 때문에 offset이 몇번째 인자인지를 가늠할 수 없다. 당신이 그룹 매치를 몇번 하냐에 따라 인자 위치가 달라지기 때문이다.

이제 거청하지도 않은 설명 끝났으니 예제를 통해 사용해보도록 하겠다.
간단한 템플릿 치환 예제이다.

var tmpl = '내 이름은 [[name]] 이며 나이는 [[age]] 이다.',
    binding = {name: '홍길동', age: 20},
    regex = /\[\[(\w+)\]\]/g,
    callback = function(match, name, offset, string){
        return binding[name] || '그딴거없다';
    };

console.log(tmpl.replace(regex, callback));
//결과: "내 이름은 홍길동 이며 나이는 20 이다."

간단하지 아니한가?

여담:

String.prototype.replace 메소드는 원체 느리다. 가장 빠른 방법이 일반 문자열 replace이다. 어자피 한번만 갈아 끼우기 때문에 빠를 수밖에 없다.
이는 문자열 대체냐 함수 대체나 상관없이 비슷한 성능을 내준다.
그러니 업무상 템플릿 엔진에 성능 신경쓸 시간에 걍 체념하고 이거 쓰거나 어떤 이가 만들어준 템플릿 엔진을 쓰자.

ECMAScript 6 의 새로운 문법인 템플릿 문자열이 있다. 사용법은 아래와 같다.

var binding = {name: '홍길동', age: 20},
    tmpl = `내 이름은 ${binding.name} 이며 나이는 ${binding.age} 이다.`;

console.log(tmpl);

PHP 쓰거나 .NET 4.6 쓴 사람에겐 익숙한 문법이긴 하지만 역따옴표(`)를 쓴다는 게 특이점이라 하겠다.
ES6 트랜스파일러인 Babel.js 는 위 문법을 쓰면 아래와 같이 변환한다.

'use strict';

var binding = { name: '홍길동', age: 20 },
    tmpl = '내 이름은 ' + binding.name + ' 이며 나이는 ' + binding.age + ' 이다.';

console.log(tmpl);

그렇다. 문자열 합치기(string concatenation)를 사용하여 간단하고 성능 좋게 해석했다.
아직은 이 기능이 네이티브로 들어간 모습은 못봤다. 그래서
트랜스파일링 시간과 표현 시간이 합쳐져서 아직까지 성능은 느리게 나온다.
직접 테스트하고 싶으면 http://jsperf.com/es6-string-literals-vs-string-concatenation 가면 된다.

그럼 이만.

composite / 2015년 12월 23일 / Piss Development / 0 Comments

[C#] Assembly Attribute

자바 어노테이션에 없는 아주 강력한 기능이 있는데, 닷넷에 있는 어셈블리 단위 특성 기능이다.
닷넷 개발자가 어셈블리 특성을 자주 만지는 경우가 바로 프로그램 정보에 쓰이는 아래 코드다.

[assembly: AssemblyTitle("HelloWorldProgram")]
[assembly: AssemblyDescription("The Hello World Program")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("My company")]
//...

사실 이들 특성은 프로젝트/Properties/AssemplyInfo.cs 에 있는데, 프로젝트 속성으로 손쉽게 수정할 수 있다.
나도 사실 아무렇지도 않게 봤지만, 이제서야 이녀석의 진면모를 알게 되었다.
어셈블리 단위의 특성이 왜 위력적인지 예제를 통해 알아본다.

어셈블리 단위 특성은 아래와 같은 용도로 사용할 수 있다.

  • 프로그램의 플러그인
  • 프레임워크 확장

그렇다. 주로 확장 편의성에 유용한 기능이다.

그렇다면 나만의 커스텀 어셈블리 특성을 만들고 적용할 수 있을까?
당연하다.

2개의 프로젝트를 만들어보자. 하나는 콘솔 응용 프로그램, 하나는 클래스 라이브러리.

먼저 응용 프로그램에 특성을 정의해 보자.

[AttributeUsage(AttributeTargets.Assembly)]
public class MyCustomAttribute : Attribute {
    public MyCustomAttribute() : this(string.Empty) {}
    public MyCustomAttribute(string txt) { Mytext = txt; }
    public string Mytext { get; private set; }
}

그다음 클래스 라이브러리에 아무 CS 파일에 넣어 클래스 및 네임스페이스 바깥 아무 곳에나 아래 특성을 추가한다.
물론 그 클래스 라이브러리는 응용 프로그램 프로젝트를 참조해야 겠지.

[assembly: MyCustom("Hello World!")]

어셈블리 단위 특성이기 때문에 아무 곳에나 특성을 추가할 수 있으나, 반드시 앞에 assembly: 넣어야 에셈블리 특성이 적용된다.

다시 응용 프로그램으로 돌아가서, 타 라이브러리에 접근하여 특성에 접근해 보자.

public static void Main(string[] args)
{
    Assembly asembly = Assembly.LoadFrom("어셈블리경로");
    var attributes = assembly
    .GetCustomAttributes(typeof(MyCustomAttribute), false)
    .Cast<MyCustomAttribute>().select(my => {
        Console.WriteLine("타 어셈블리 특성 : {0}", my.Mytext);
        return my;
    });
}

끗. 별거없다. 테스트는 안해봤다. 조만간 테스트 후 업데이트 하겠다.
예제만 별거 아닌것처럼 보이지만, 플러그인 베이스 개발에는 이만한 메타데이터 저장소가 없다.
많이 쓸 일은 없다. 그건 현실이다. 하지만 아는만큼 힘이 될 것이다. 특히 확장성에.

진짜 끗.

composite / 2015년 11월 24일 / Piss Development / 0 Comments

Symbol 프로그래밍?

https://en.wikipedia.org/wiki/Symbol_(programming)

심볼. 굳이 우리말을 쓰자면 기호. 기호 개발. (뭔가 어색하다?)

오늘 페북에서 ECMAScript 6 표준에 Symbol이 정의되어 누군가가 MDN에 번역해 주었다.
Symbol – Javascript | MDN
심볼. 아마 자바, 닷넷, 자스 개발자 등에게 어찌보면 생소한 개념일 수 있다.
하지만 루비 개발자나 Object-C 개발자는 이미 있기 때문에 알고 있을 것이다.
이 심볼 개발방법은 여러 스크립트 언어 등에서 채택한 개발론이다.

간단하게 설명하자면, “가장 유일한 식별자”다.
뭐?
루비(Ruby)의 심볼이란?

정의는 한 번. 더 이상 변경할 수 없는 값이다.
여기까진 상수와 비슷한 개념이다.
그렇다면 값 비교 시 “A” 와 “A”가 같다? 심볼은 그딴거 없다.
그렇다. 심볼의 값은 일종의 사람만이 식별하기 위해 존재하는 값일 뿐.
문자열 값은 리터럴을 정의할 때마다 메모리가 늘어난다. 설령 변수를 지정하던 상수를 쓰던.
간단하게 생각해보자.
“A” “BC” “DEF”… 이들은 언제 바뀌지 못하기 때문에 불명확한 메모리를 할당받으며 서 있다.
당연히 그런 만큼 메모리를 잡아먹는다.
하지만 심볼은 딱 정해진 메모리만큼만 먹는다. 바뀔 일도 없기 때문에. 확장할 일도 없고.
그러니 메모리 애끼는 효과가 있다.

그렇다면 어따가 쓰냐고?
가장 쓰임새가 많이 쓰이는 곳이 바로 “해시 값”을 다루는 데에 쓰인다.

JS에 새로 정의된 Symbol을 통해 예제 하나 뿌리겠다.
ES6 Symbol Test 예제

var obj = {};
var a = Symbol("a")

obj[a] = "a";
obj[Symbol.for("b")] = "b";
obj["c"] = "c";
obj.d = "d";

for (var i in obj) {
   console.log(i); // logs "c" and "d"
}

console.log(obj[a]); //logs "a"

심볼 “a” 란 해시 키에 “a” 값을 넣었다.
근데… 반복문에는 나타나지 않는다.
그렇다. 주소 값이니 나오지 않을 수밖에.
대신에 명시적으로 해시 키를 정의하면 가져올 수 있다.
이런 이득이 있다는 것이다.
그렇다면 이런 특징으로 얻을 수 있는 이득이 뭐가 있을까?

간단하다. hidden 키와 값을 넣을 수 있는 그런 개발이라면 모두 가능하다.
일종의 private identifier 인 셈이다.

자. 이제. 자바와 닷넷도 이런 개념이 존재하냐고 물어보는 사람이 있을 것이다.
당연히 없다. 근데 자바와 닷넷은 문자열에 한해 인터닝(Intern) 이라는 개념이 있다.

자바의 String.intern() String.intern()은 메모리를 아낄 수 있다?

  • String pool에 있는 각종 문자열에 equals해서 같은게 있다면 그 놈을 반환하고,
  • 같은게 없다면 String pool에 String object를 추가하고, 추가한 놈을 반환한다.

즉, String 객체를 리터럴로 관리하여 메모리 절약을 꽤하는 개념이다.
그렇다 보니 아래와 같은 단점이 존재한다.

  • 우선 String 객체를 하나 만들어야 한다.
  • String의 equals 메소드를 이용해서 String pool에 있는 놈을 찾아서 비교해야 한다. ( 시간이 걸림 )
  • String pool에 들어 갔으므로, 더 이상 GC(가비지컬렉션)의 대상이 될 수 없다. ( 메모리 관리 불가 )

그렇기 때문에 적재적소에 잘 관리해야 한다는 점이 있다. 그래도 같은 문자열을 객체로 정의하여 메모리 쳐묵보단 낫다.

참고로 닷넷도 아주 동일한 개념이다. String.Intern() 메소드 쓰는 건 매한가지이며 동일하기 때문에 별도의 설명은 생략하겠다.

자. 자바와 닷넷이 문자열을 관리하는 방법이 여기서 나온다. 리터럴은 자바나 닷넷이나 내부 풀을 따로 운영하여 저장한다. GC에 걸리는 걱정 없이.
(물론 new String 처럼 객체로 만들었다면 걸릴 각오는 해야 하지만.)

뭔가 삼천포로 빠진 것 같다.
하지만 메모리를 아껴서 빠르고 유연한 개발을 꾀하는 개발자는 있다.
이럴 때 필요한 것이 뭐고, 뭘 알아야 하는지는 개발자의 사명인 것이다.
그러기 위해 이 포스트를 올렸다.
그럼 이제…

끗.

composite / 2015년 11월 17일 / Piss Development / 0 Comments

CloudFlare에 연동중인 자기 도메인에 DNSSEC 적용하기

보안에 민감한 웹 사이트 관리자에게 희소식.
클라우드플레어가 드디어 DNSSEC를 지원한다.
사실 내가 좀 뒤늦게 소식을 접하긴 했다. 지인이 알려줬더라.

DNSSEC가 왜 필요하냐고?

  • 자신이 설정한 서브도메인과 바인딩된 IP 및 데이터 등을 인증되지 않은 사용자로부터 숨겨준다.
  • 위 기능으로 인해 피싱 및 파밍 공격으로부터 도메인을 보호할 수 있다.
  • 위 효과로 인해 고객들에게 도메인에 대한 신뢰도를 높일 수 있다.

자세한 내용은 KRNIC – DNSSEC이란? 에서 확인하라.

뭐… 한국인에게 어찌보면 DNSSEC은 생소할 지도 모르겠다.
심지어 국내 대규모 네이버와 다음조차도 자기 도메인에 DNSSEC을 적용 안한거 보면 답이 나오니까.
이놈의 한국 종특 안전불감증이란 ㅉㅉ.

글을 보고 있는 여러분이라도 이런 허술한 짓 하지 않기 위해 클라우드플레어를 통한 DNSSEC 세팅법을 알려주겠다.
아, 기존 DNS 세팅은 유지되니까 걱정하지 말고. 물론 만약에 사태에 대비해 백업한다면 당신은 역시 완벽해.

자, 이제 본론으로 들어가자. 방법은 어렵지 않다.

DNSSEC Enable
(제공 : Cloudflare)

CloudFlare에 로그인 후, Dashboard 에서 DNS 탭을 누른 뒤 맨 아래에 DNSSEC 영역에서 Enable DNSSEC 버튼을 누른다.
그러면 Pending이 뜰 텐데, 이때부터 당신은 도메인 등록업체에 등록하기 위해 몇가지 정보를 챙겨가야 한다.
새로고침하면 DNSSEC 영역 아래에 DS Record 버튼이 생긴다. 그걸 누르면 아래와 같은 화면이 뜰 것이다.

DNSSEC 2

참고로 도메인 등록업체에 따라 요구되는 양식이 다르니 유의하기 바란다.
CloudFlare는 미국 등 유명 도메인 등록업체에서 등록하는 방법을 친절하게 설명해준다.
이 때, 중요한 사실은 DNSSEC 기능을 지원하지 않는 업체가 있다는 것이다. 만약 없다면 여기서 포기하라.
국내 업체는 국내에서 해결해야 하니.. 일단 해결해보자.

내가 닷네임 쓰고 있는데 DNSSEC은 지원 안하는 모양이다. 기능이 안보인다.
후이즈는 지원되는 듯 하다. ㅅㅂ…

하아… 내 일부 도메인을 넘겼기 때문에 일단 적용은 보류.
DNSSEC 지원하는 도메인 등록업체 발생하면 내용 추가 하겠다.

공통적 사항은 위 내가 마지막에 그린 그림과 같이 요구하는 양식만 채워주면 된다. 이름과 값 매칭하면 된다.
국내 업체라도 영어로 써주기 때문에 어렵지 않게 양식을 작성할 수 있다.
대부분 업체들은 그닥 많은 양식을 요구하지 않기 때문에 어렵지 않을 것이다.

미안. 끝이다.

composite / 2015년 11월 17일 / Piss Development / 0 Comments

ASP.NET 5 베타 요약

최신 순으로 요약하겠다. 새로운 베타 내역이 생길 경우 이 글이 업데이트 된다.
http://blogs.msdn.com/b/webdev/default.aspx?CR_CC=200674120

ASP.NET Beta 8

(2015-10-15)

  • IIS 호스팅 기능개선

이제 더이상 기존 AppPool이 없어도 윈도우 서버에서 구동 가능.
자체 호스팅을 원할 경우 app.config 지원
IIS는 여전히 web.config가 필요함. 아래와 같이 구성하면 됨.

<configuration>
  <system.webServer>
    <handlers>
      <add
        name="httpPlatformHandler"
        path="*"
        verb="*"
        modules="httpPlatformHandler"
        resourceType="Unspecified"/>
    </handlers>
    <httpPlatform
      processPath="%DNX_PATH%"
      arguments="%DNX_ARGS%"
      stdoutLogEnabled="false"
      startupTimeLimit="3600"/>
  </system.webServer>
</configuration>
  • 다국어 기능

이제 다국어 기능은 자체 지원으로 변경.
Startup.cs 에 midleware 추가
app.UseRequestLocalization(options)
서비스 추가
services.AddLocalization(options => options.ResourcesPath = "resources");
MVC와 함께 사용

services
    .AddMvc()
    .AddViewLocalization(options => options.ResourcesPath = "Resources");

컨트롤러별 다국어를 정의할 클래스 예제

private IHtmlLocalizer<HomeController> SR;

public HomeController(IHtmlLocalizer<HomeController> localizer)
{
    _localizer = localizer;
}

public ActionResult Index()
{
    ViewData.Message = SR["Localize me!"];
    return View();
}

뷰에서 다국어 정의 사용

@inject IViewLocalizer SR

<h1> @SR["Localized header"]</h1>

유효성 검사 오류 메시지를 위한 middleware 사용

services
    .AddMvc()
    .AddViewLocalization(options => options.ResourcesPath = "Resources")
    .AddDataAnnotationsLocalization();

이후 유효성 오류 메시지에 대한 다국어 기능 지원

  • DNX 감시 명령

DNX Watch 명령어는 프로젝트 파일의 변경 사항을 모니터링하여 변경 사항 발생 시 상황에 따라 서버를 재시작 하여 별도의 사용자의 터치 없이 바로 반영된 결과물을 볼 수 있는 편리한 개발 기능
설치법
dnu commands install Microsoft.Dnx.Watcher

이후 project.json이 있는 경로로 들어가서 dns-watch 실행하면 됨.

C:\Users\danroth27\Documents\WatchTest\src\WatchTest>dnx-watch web
[DnxWatcher] info: Running dnx with the following arguments: --project "C:\Users\daroth\Documents\WatchTest\src\WatchTest\project.json" web
[DnxWatcher] info: dnx process id: 8348
Hosting environment: Production
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

기본 About 페이지
before

코드 변경만 한 후,

public IActionResult About()
{
    ViewData["Message"] = "Watch this!";

    return View();
}

브라우저 새로고침만 하면 반영 결과를 볼 수 있음.
After

  • 프레임워크 버전 지정

게시할 때 프레임워크 버전을 명시적으로 지정 가능
dnu publish –framework dnx451
이를 통해 해당 버전에 맞는 필요한 프레임워크와 같이 패키징 후 게시됨.

  • 패키지 복구 시 HTTP 캐시 초기화

실행핼 때마다 캐시가 쌓이는 게 일상이기 때문에 패키지 복구 시 아래 명령어로 캐시 초기화가 가능
dnu clear-http-cache

  • **닷넷 버전을 2.0이나 3.5로 변경 가능

미친 기능… project.json 에서 targetFrameworknet20net35 으로 지정하면 됨.

  • 빌드 상황에 따른 전처리/후처리 지원

DEBUGRELEASE 등에서 각 상황에 맞는 전처리/후처리를 project.json 에서 정의 가능.
전/후처리 스크립트에 %build.Configuration%%build.TargetFramework% 변수 가용.

  • 추가 포함 파일 정의

project.json 에서 사용자가 지정 가능한 추가 파일을 지정할 수 있음 주로 프로젝트 외 경로 참조에 쓸 수 있음.

"packInclude": {
    "destination1/": "source1/**",
    "destination2/": "source2/**",
    "destination2/some_additional_file.txt": "source2a/somefile.txt",
    "destination3/": ["source3/a.txt", "source3/b.txt", "source4/c/**/*.ps1"]
}
  • 패키지나 프로젝트 버전 지정 가능

project.json에 클래스 라이브러리 버전 지정 예제

"dependencies": {
    "ClassLibrary1": { "version": "1.0.0-*", "target": "project" },
    "ClassLibrary2": { "version": "1.0.0-*", "target": "package" }
}
  • DNVM Uninstall

이제 DNX 확장 삭제 가능. 경로는 ~/.dnx/runtimes (사용자 폴더/.dnx/…)

  • Visual Studio 2015 도구 개선사항
    • 프로젝트/솔루션 내 파일 제외 기능을 이제 사용 가능.
    • Nuget package 복구 시 info 바 생성
      info bar
    • 상속 패키지 오류를 이제 package.json이나 솔루션 탐색기에서 볼 수 있음
      1
      2
      3
    • 패키지 상속 구조 개선
      4
      아이콘부터 각 패키지 및 클래스 라이브러리에 필요한 패키지나 라이브러리 구조를 볼 수 있음.

ASP.NET Beta 7

()

  • a

ASP.NET Beta 6

()

  • a

ASP.NET Beta 5

(2015-06-30)

  • DNX
    • Nuget 3.x 패키지 목록 나열 지원
    • DNX에서 포터블 닷넷 실행환경을 제시하고 빌드하는 새로운 닷넷 Target Framework Moniker (TFM) 지원
    • project.json에 Nuget 패키지 정보를 포함할 수 있음
    • JSON.NET 버전 고정 제거
    • 새로운 IRuntimeEnvironment
      즉, 신규 OS에 대한 실행 환경을 정의하는 인터페이스.
  • ASP.NET 5
    • HttpContextConnection 속성을 추가하여 추가적인 접속 정보 수집 가능
    • 다국어 추상 정의 예제
    • ASP.NET 호스팅 시 아무 키를 누르거나 통상적인 Ctrl+C 키로 서버를 종료할 수 있음
  • MVC 6
    • Razor 템플릿 엔진에 C# 6.0 표준 사용 가능
    • MVC 전역 설정 구성 및 단순화 (특히 전역 HTML Helpers)
    • JSON Helper 추가. 사용법 : @Json.Serialize(Model)
    • 라우팅 토큰 기본값을 간편하게 지원
  [Route("Products/[action]", Name = "[actions]Products")]
  public class ProductsController
  {
      public void Add() { }
      public void Buy() { }
  }
  • 이미지 태그 헬퍼에서 캐싱 기능 추가
<img asp-file-version="true" src="~/images/my_cool_image.png" />
  • 태그 헬퍼에서 Dictionary 속성 바인딩 지원
<a asp-action="Edit" asp-route-id="@index">Edit</a>
  • 서버 개발 상황에 맞는 태그 헬퍼 바인딩 지원

여기까지.
베타 5부터 기재하는 이유는 ASP.NET 개발 블로그에서 개별로 집필하는 부분이 Beta 5부터이기 때문이며,
이때부터 크로스 플랫폼에 초점을 맞추기 시작했기 때문이다.

composite / 2015년 10월 16일 / Piss Development / 0 Comments

DB 엔진 순위

왜 쓰냐고? 즐찾을 가장한 순위 소개다!

  1. 오라클 – 입아프고 손아픈 독보적 1위 관계형 DB 솔루션.
  2. MySQL – 오픈소스였는데 오라클이 먹고나서 오픈소스가 맞는지 모르겠지만 어쨌든 오픈소스 1인자인 관계형 DB 솔루션
  3. MS SQL Server – 여러분, 왜 게임회사에서는 동시성 분산 트랜잭션에 오라클을 안쓰고 이 MSSQL 쓰는지 아시는분?
  4. MongoDB – 문서기반 NoSQL 1위. 모든 NoSQL 1위를 달리신다. 그만큼 문서기반의 비즈니스 앱이 많아 정체성을 찾았다는 증거이기도.
  5. PostgreSQL – 오픈소스 SQL 중에 이녀석은 써본 사람이 안다. 오라클 저리가라 할 정도의 분산능력과 트랜잭션 능력은 이놈의 코끼리 로고가 증명한다.
  6. DB2 – 깊은 역사를 자랑하는 비즈니스 시장의 독보적이었던 IBM의 관계형 DB.
  7. Microsoft Access – 시발 오피스 쓰는새끼들 왜케많아…
  8. Cassandra – Wide-column store. 대략적으로 테이블 같은 개념이다. 근데 관계형은 아님. 어쨌든 오픈소스 NoSQL의 2인자이다.
  9. SQLite – 이거 안쓴 응용 프로그램이 있을까? 심지어 모바일에서도. 가볍지. 빠르지…? 일단 임베디드 관계형 DB의 여전한 1인자
  10. Redis – 이걸로 캐시 구성해본 비즈니스 앱이라면 안다. 뒤질듯한 속도감과 씨잘대기 없는 데이터 관리에 효율적이라는 사실을. 키값 NoSQL 시장 1위.

http://db-engines.com/en/ranking

composite / 2015년 9월 22일 / Piss Development / 0 Comments

내가 한번 추천해보는 웹 개발자를 위한 Visual Studio 확장 모음

페북 그룹에 Visual Studio 웹 개발자 추천 확장 모음 링크를 올렸길래 나도 올려본다. 여기에 기재된 확장 도구를 포함하여 내가 쓰고 왜 쓰는지 알리고자 글을 쓴다.
내가 설치한 확장 목록을 이름순으로 볼 수 있다보니 알파벳별로 정렬하는 점 양해 바란다.
아, MS에서 만든 확장은 제외다.

Code Alignment

이름만 봐도 눈치챈 사람도 있을 것이다. 말로 하긴 힘드니 아래 코드로 뭔 프로그램인지 알려주겠다.

    person.HomeTown = "Brisbane"; 
    person.FirstName = "Chris";                
    person.Surname = "McGrath";                
    person.Age = 24;                           
    person.Occupation = "Software Developer";  

=>  person.HomeTown   = "Brisbane";
=>  person.FirstName  = "Chris"; 
=>  person.Surname    = "McGrath"; 
=>  person.Age        = 24; 
=>  person.Occupation = "Software Developer"; 

올드비 개발자들(특히 C/C++ 개발자)에게 단비같은 확장도구인 데다가 무료이다. 도네이션웨어라는 점.
더이상 설명이 필요있나?

ColorSchemeSelector

ColorSchemeSelector

그저 단순한 색상 추출 도구라면 내가 블로그 보다 말았고 그냥 넘어갔겠지만, 이녀석은 그저 단순한 색상 추출기를 뛰어넘어 색상 혼합별로 색상을 추천받아 추출할 수 있다는 점에서 특히 웹 개발자와 디자이너에게 좋은 도구가 될 것이다.
아, 물론 무료다.

Git Diff Margin

Git Diff Margin

Git로 버전관리를 한다면 해당 줄에 바뀐 점을 이렇게 실시간으로 표현해준다는 점이 되겠다. 자주 바뀌는 일이 많은 버전관리 개발자라면 유용할 것이다.
이 확장 또한 링크된 블로그에 소개되어 있으며, 무료이다.

Grunt Launcher

프론트엔드 개발자라면 반드시 한번씩은 들었을 Grunt. 패키징 자동화로 유명한 Grunt와 스케줄별 자동화를 지원하는 Gulp, 프론트엔드의 패키지 매니저인 Bower 명령어까지 지원해준다.
나처럼 node.js를 수동으로 포터블로 설치한 환경이라면 사용 시 세팅에 유의하라.
무료라고. 소개됐다고.

Image Optimizer

프론트 엔드를 위한 확장이 여기 하나 또있다. Visual Studio 자체 지원 이미지 최적화 도구가 있다면 믿겠는가?
같은 이미지에서 이미지 사이즈를 줄여주는데, 자세한 내용은 이미지 최적화 기법 구글 검색 ㄱㄱ.
이미 node.js 등으로 이미지 최적화 확장이 있다면 비교해달라. 난 아직 비교 안해봤다.
무료다.

Mexedge Stylesheet Extension

간단하게 말하면, 스타일시트 소스를 트리구조로 시각화하는 도구다. 프론트엔드 개발자에게는 상당히 편리한 도구다.
확장 링크로 들어가서 스샷을 보면, 그저 단순한 그런 도구가 아니다. 심지어는 파일 내 클래스 목록처럼 표시까지 해준다.
블로그에서도 소개되어 있다. 3명이 기업 운영하고 있는 것으로 보이긴 한데 일단 무료니 그냥 써 주자.

MixEdit

지금 소개하는 확장은 내가 블로그에서도 소개한 바 있으며, 유일하게 무료가 아닌 평가판 확장이다.
Sublime Text를 접하다가 Visual Studio로 개발하다보면 답답하지 않는가? 멀티커서와 멀티셀렉트가 지원되는 확장, 변수를 한꺼번에 바꿀 수 있다면 얼마나 좋을까?
그런 목마름을 Visual Studio에서도 적셔주는 그런 확장 되시겠다.
평가판이긴 하지만 사용기능과 기간에 제한은 없다. 단지, Visual Studio 실행 후 처음 MixEdit 기능을 수행 시 구매 권유 창이 뜰 뿐이다.

Suggested Extensions

얜 좀 재밌는 확장이다. 블로그에 소개되긴 했는데 댓글에 소개된 확장인데, 파일 확장자별로 사용할 수 있는 Visual Studio 확장을 소개시켜주는 확장 되시겠다.
예를 들면 yaml 같은 파일들. IntelliJ IDEA 같은 개발 툴 쓴 사람은 알겠지만 JetBrains 에서는 확장자별로 지가 확장 추천을 해준다. 그런 비슷한 거다.
무료다.

Web Essentials 2015

만약 웹 개발자인 당신이 Visual Studio를 쓰고 있을 때, 이 확장을 쓰고 있다면 이 확장 제작자에게 큰 절을 해야 한다. 블로그에서도 소개도니 웹 개발자 필수 확장!
웹 개발에 모든 것을 제공해주는 확장이다. CSS, HTML, JS 편집에 날개를 달아주며, CoffeeScript, LESS, Sass 같은 확장 언어 편집과 Grunt, npm, bower 등의 설정 편집에 유용한 도구를 제공하는 웹 개발 만능 확장이다.

Visual Studio 2015 사용자에게 주의점은 소스 파일을 Minify하거나 Bundling으로 합치거나, Sass 및 LESS 컴파일 기능을 따로 확장으로 뺐다는 점에 유의해야 한다. 없다고 해매지 말고 내가 링크 소개할 테니 다운 받아라. 이 확장도 무료고 아래 확장도 무료다. 저거 제작자 만나면 반드시 큰 절 해라.

Bundler & Minifier
Web Compiler

나는 여기까지 추천 확장 목록으로 썼다.
여러분의 추천 확장이 있다면, 서슴없이 공유하여 서로 즐거운 개발 세상을 만들어가는 주역이 되길 바란다.
싫어? 싫음 시집가.
끗.

composite / 2015년 9월 9일 / Piss Development / 0 Comments

오픈소스 코딩용 글꼴 Hack 2.0 웹폰트 CDN

자세한 한글 정보는 블로터 – 코딩용 글꼴 ‘핵’, 오픈소스로 공개 기사를 참조하라.

가독성 끝내주는 코딩용 폰트 Hack 이다. 오픈소스로 공개된 만큼 많은 웹 사이트에서 표준 코딩 웹폰트로 이용할 수 있을 것으로 기대된다.
이제 당신 사이트에 적용할 차례다.

Basic Latin + Latin-1 Supplement Character Set

<link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.010/css/hack.min.css">

Full Character Set

<link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.010/css/hack-extended.min.css">

한국 사용자는 첫번째만으로 충분하고, 한글 대체폰트(예:나눔고딕코딩 등)를 통해 차등 적용하면 되겠다.
마지막으로 폰트 적용법을 소개하고 턴을 마치겠다.

code {
    font-family: Hack, NanumGothicCoding, '나눔고딕코딩', monospace;
}

composite / 2015년 9월 1일 / Piss Development / 0 Comments

.NET 개발자의 바이블은 Stack Exchange?

글을 읽기 전에 한가지 짚고 넘어가자.

Stack Exchange는 무슨 언어로 만들었을까?
닷넷 개발자는 눈치 챘겠지만 닷넷으로 만든 사이트다.

엔터프라이즈급의 사이트들을 보면 웹 사이트 언어 3대장은 아래와 같다.
Java, Python, PHP
루비가 빠졌다고? 루비 의외로 적다. 그 중 최고봉은 아직까진 PHP다.

이건 해외 얘기고, 국내에서는 Java가 우위를 점하고 있다.
먼저, 네이버와 다음, 네이트 등이 Java를 사용하고 있다.
근데 호스팅 사이트나 서버 관리를 중점적으로 하는 사이트는 어째서 PHP다.
왜? 왜 Java가 좋은데 라고 자바부심 부리지 말고 이유를 알고 넘어가자.
호스팅 사이트는 서버 관리와 처리가 중점적이기 때문에 서버 처리에 적합한 Perl이나 Python을 돌리기 때문이다.
그러나 아직 당시에는 Perl이나 Python으로 웹 앱을 돌리기엔 환경이 복잡했기 때문에 PHP를 쓴 것이다.
물론 자바로 전향한 업체도 있긴 하지만, 기존 관리 프로세스 때문에 PHP를 계속 쓰고 있는 업체가 대규모 업체에 존속 중이다.

이런 트랜드에 Stack Exchange는 .NET을 선호했다.
왜일까?

직접 물어봐라. 나도 모른다. 공개된 정보가 없어서.
현재 Stack Exchange가 어떤 기술을 쓰고 있는지는 이 링크를 통해 보면 된다.

그렇다면 버전 관리는? 옛날에는 SVN을 썼지만 지금은 Mercurial을 쓰고 있다.
수은 버전관리 시스템은 서버가 반드시 있어야 내역이 저장되고 불러와지는 방법과 달리
Git처럼 로컬에서 변경사항을 적용하거나 되돌리고 최종 변경사항을 서버에 올렸다가 동기화하는 방식이다.

자. 어쨌든, Stack Exchange는 .NET 개발자의 대표 사이트가 됐다. MS? 원래 닷넷 쓰긴 하지만 원제작자는 넘어가자.

그리고 Stack Exchange는 Github에 오픈 소스 도구를 몇가지 배포하고 있는 중이다.
https://github.com/StackExchange

https://github.com/opserver/Opserver
https://github.com/StackExchange/dapper-dot-net

이렇게 닷넷에 열정적이니 바이블이 아닐 수가 없을 것이다.
끝이야. 허무하지?

그럼 이딴 글 왜올렸냐고?
닷넷 무시하지 말라고. ㅋㅋ

composite / 2015년 8월 31일 / Piss Development / 0 Comments