카테고리 없음 | Posted by ToString 2016. 2. 18. 17:00

헷갈리는 개행문자 쉽게 기억하기

텍스트 문서에서 개행문자문자는 윈도우와 유닉스 계열 OS에서 차이가 있는데, 

윈도우의 경우 /r/n(CR+LF)이고, 유닉스 계열은 /n(LF)을 사용 합니다.


헌데 저만 그런 것인지 윈도우 계열의 개행 문자를 쓸 때마다 /r/n 인지 /n/r인지 곧잘 헷갈려서 사용할 때마다 검색을 해보곤 하는데요.. 개행 할 때는 리턴키! 라고 외우면 이제 그럴 일은 없겠네요.


return의 첫 글자는 R이고 끝 글자는 N입니다. 이 순서로 외우면 앞으로 헷갈일 일은 없겠군요. ㅎ


댓글을 달아 주세요

보안을 위해서 인지 Windows 8에서는 Administrator계정이 여러모로 이용에 제한이 많습니다.

그 제한중에 한글의 Option 변경이 안되는것이 있는데 그냥 두벌식 사용자들은 별 상관없이 쓸 수 있으나 저처럼 세벌식을 사용하는 사람은 한글 벌식을 변경하려고 하면 아래와 같은 대화창을 보게 됩니다.

(제가 현재 쓰고 있는 버젼이 영문 버젼이라...)



이때는 레지스트리를 직접 수정하는 방식으로 한글 벌식을 변경할 수 있습니다.

HKEY_CURRENT_USER\Software\Microsoft\IME\15.0\IMEKR\ InputMethod 값을 DWORD로 만들어 1 혹은 2로 설정 하시면 됩니다.


1: 세벌식 390

2: 세벌식 최종



값을 입력하고 재주팅 하면 Administrator계정에서도 세벌식 한글사용이 가능 합니다.



댓글을 달아 주세요

카테고리 없음 | Posted by ToString 2012. 1. 11. 12:05

javascript template engine HOGAN

ajax로 데이타를 불러온 후 화면에 뿌려주는 방법은 여러가지가 있겠지만,
twitter에서 오픈소스로 공개한 Hogan이라는 믿을만하고, 빠른 template engine이 있어 소개한다.

https://github.com/twitter/hogan.js

소스를 다운 받아 풀어보면 여러 폴더들이 있는데,
나머지 파일들은 node.js를 위한 파일들이고,
웹용으로 사용한다면 lib 폴더 안에 template.js 와 compile.js 두개의 파일만 있으면 된다.

간단한 예를 들면

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Hogan.aspx.cs" Inherits="Application__sample_Hogan" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
	<title>Hogan Sample</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<script type="text/javascript" src="https://raw.github.com/twitter/hogan.js/master/lib/template.js"></script>
	<script type="text/javascript" src="https://raw.github.com/twitter/hogan.js/master/lib/compiler.js"></script>
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
	<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
	<link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/smoothness/jquery-ui.css" />
	<script type="text/javascript">
		$(function () {
			// template에 들어갈 데이타 
			var data = {
				TITLE: "내 파일 목록",
				items: [
					{ FILE_NAME: 'first.txt' },
					{ FILE_NAME: 'second.jpg' },
					{ FILE_NAME: 'third.avi' },
					{ FILE_NAME: 'forth.php' }
				]
			};
 
			// template 준비
			var template = Hogan.compile($('.template').html());
 
			// template에 data 적용
			var output = template.render(data);
 
			// 화면에 출력
			$(document.body).append(output);
		});
	</script>
	<style type="text/css">
		.template
		{
			displaynone;
		}
	</style>
</head>
<body>
	<div class="template">
		<h1>
			{{TITLE}}</h1>
		<ul>
			{{#items}}
			<li>{{FILE_NAME}}</li>
			{{/items}}
		</ul>
	</div>
</body>
</html>


위 코드를 브라우져에서 보면 다음과 같은 화면을 볼 수 있다.




자바스크립트 부분에 주적을 읽어보면 쉽게 이해할수 있을 것이다.

jQuery template과 비슷한 부분이 많다.


템플릿에 대한 문서는 http://mustache.github.com/mustache.5.html 를 참조.



댓글을 달아 주세요

저는 길이가 짧은 문법이 읽기 좋은 프로그램을 만든다는데 동의 하는 사람입니다.
이 이야기가 조금 애매한 것은, 그 짧음이 사람이 이해 가능한 범위 내에서야 하기 때문에, 얼마나 짧아야 하는가는 사람의 인지도마다 차이가 있으므로 논란의 여지가 많다고는 생각합니다.
여하간 저는 비슷한 범위내에서라면 짧은게 더 좋다! 라는 쪽이랍니다.

if문을 줄이는 삼항식은 다음과 같습니다.(예는 javascript)

if (a)
    a = a;
else
    a = b;

a = a ? a : b;

여기서 a가 무려(!) 3번이나 나오는 군요.
Javascript 에서는 다음과 같이 좀 더 짧은 표현식이 가능 합니다.

a = a || b;

물론 이때는 a 값 하나로 참과 거짓을 판별 할 수 있는 경우여야 하는 한정이 붙습니다.
Javascript의 경우는 값이 null이거나 공백, 0 값은 false로 판별 하므로 위의 문법은 `a값이 없으면 그 값을 b`로 대체하라 라는 뜻이 되는 것이지요.

PHP에서도 비슷한게, 5.3 부터 다음과 같은 문법이 가능 합니다.
$num = $_GET['num'] ?: '1';

$num = $_GET['num'] ? $_GET['num'] : '1'; 의 단축 표현식이죠.
물론 이 문법은

if ($_GET['num'])
$a = $_GET['num'];
else
$a = '1';
로 길~ 게 표현도 가능 합니다.

C#에서도 3.5 부터 nullable 형식이 나온 후로는 다음과 같은 표현이 가능 합니다.
int num = getInstanceCount() ?? default(int);

?? 연산자(C# 참조)
nullable 형식(C# 프로그래밍 가이드)

C#의 경우는 변수형을 선언해야 하는 언어라 짧은 삼항식을 쓸 수 있는 케이스는 더 한정적입니다.
null이나 아니냐를 구분할 때만 쓰일 수 있는 것이죠.

뭐, 삼항식 자체도 쓰기 싫어 하는 분들도 계시겠지만,
알아두시면 좋을것 같아요.
혹시나 돌고 돌다 보면, 언젠가 제가 짜놓은 프로그램을 유지보수 하셔야 할지도 모르잖아요? :)

댓글을 달아 주세요

카테고리 없음 | Posted by ToString 2011. 2. 9. 20:53

원격 데스크톱 포트 번호 바꾸기

Change Remote Desktop port number

서버 측

레지스트리 편집기로 다음 값을 원하는 포트 번호로 설정 한다.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp\PortNumber (기본 값은 3389이다.)



클라이언트 측

접속 시에 주소 뒤에 포트 번호를 콜론 으로 연결 한다.



댓글을 달아 주세요

카테고리 없음 | Posted by ToString 2010. 10. 29. 10:13

언어별 10진수와 16진수간의 변환

C#

string hex = dec.ToString("X");
int dec = Convert.ToInt32(hexValue, 16);
Java

String hex = Integer.toHexString(dec);

int dec = Integer.parseInt(hex);

 

Javascript
var hex = dec.toString(16);
var dec = parseInt(hex, 16);
Ruby
hex = dec.to_s(16)
dec = eval(hex)

댓글을 달아 주세요

C#이라던지 Java같은 언어는 변수의 형이 지정 되어 있어 그 변수를 사용하기 전에 변수 선언을 해야 이용이 가능하다.(이를 Typed language라 한다.)

변수의 형에는 여러 종류가 있는데 숫자형 변수만 해도 여러 종류가 있다.

정수냐, 실수냐 (int, float). 단정도냐, 배정도냐 (float, double) 등..

그리고 그 각각에는 정해진 크기가 있다. int는 32bit, double은 64bit…

그래서 그 변수가 나타낼 수 있는 숫자의 범위는 명확하다.

int는 Signed 32bit interger로 그 범위는 2 ^ 31 부터 2 ^ 31 - 1 이다.

 

그러나 typed language가 아닌 Javascript는 bit로 정해진 명세가 없다.

그렇다면 Javascript가 나타낼 수 있는 숫자의 범위는 얼마일까?!

 

Javascript의 숫자를 나타내는 변수 형식은 딱 한 가지이다. Number 객체.

Number에는 MAX_VALUE라는 속성이 있다. 딱 보면 감이 오겠지만 이 수가 Javascript가 표현할 수 있는 최대 수치이다. 그 수치를 출력 해보면 값은 다음과 같다.

 

1.7976931348623157e+308 = (2 ^ 1024 - 1)

지수 승으로 나타내지 않고 모두 동그라미를 붙인다면..

179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

이라는 엄청난 수가 나온다.(도대체 이걸 뭐라고 읽는 거냐..)

 

Javascript에서 이 이상의 숫자를 변수에 넣으려 하면 Infinity라는 예약어가 들어간다.

헌데 이 수치는 단순히 표현을 위한 유효범위(Effective Range) 일뿐.. 실제로 이 수치를 가지고 계산을 해보면 계산이 적용되지 않는다. 예로 Number.MAX_VALUE – 1 은 수의 범위 내지만, 계산 결과가 나오지 않는다.(그냥 Number.MAX_VALUE값이 그대로 나온다.) 계산의 결과를 나타내기 위해 존재하는 유효범위일 뿐이라는 것이다. 그럼 실제로 계산이 적용되는 숫자의 범위는 얼마인가?

 

2 ^ 53 ~ 5 ^ 53 – 1 이다.

(IE, FireFox, Chrome등에서 다 잘 작동함을 확인했다.)

 

하지만 ECMA Script 명세에는 수의 범위를 32bit로 정의 하고 있다.

(이는 추후 변경 될 수 도 있는 내용이다.)

 실제로 –1 >>> 1 의 결과 값은 2 ^ 31 – 1 인 2147483647 이다.

(>>> 는 Unsigned right shift 연산자 이다. http://msdn.microsoft.com/library/342xfs5s%28VS.94%29.aspx)

 

왜 이런지는 아직 잘 모르겠다. 진실은 저 너머에...

댓글을 달아 주세요

카테고리 없음 | Posted by ToString 2010. 10. 21. 09:24

IE Tester

http://www.my-debugbar.com/wiki/IETester/HomePage

 

 

IE 하위버젼 에서 테스트를 해 보아야 할 때 유용한 툴입니다. 무료사용 툴이라 더욱 감사하구요. ^^*

 

 

 

댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 머하지? 2010.10.21 10:38

    IE Collection 이라는 프로그램도 있어요.
    다 필요한건 아니지만 IE 1.0 ~ 8.0 까지 선택 설치 가능합니다.
    http://utilu.com/IECollection/

 

개인적으로 TotalCommander는 Must have 프로그램 이다.

한가지 사용상의 불편은 윈도우 탐색기 처럼 F2로 파일명 변경이 안된다는 거였는데, 찾아보니 설정으로 가능하단다.(원래 단축키는 Shift + F6)

 

환경설정 - 옵션 - 기타 - 단축키 설정(재구성)

 

 

 

키 구성에 F2를 선택하고 명령에서 cm_RenameOnly를 선택

 




댓글을 달아 주세요

  1.  댓글주소  수정/삭제  댓글쓰기 티티 2013.03.20 22:33

    이런 방법이 있었군요. 이게 제일 불편했던건데.

  2.  댓글주소  수정/삭제  댓글쓰기 해수. 2016.03.14 23:36 신고

    덕분에 편해졌습니다~

카테고리 없음 | Posted by ToString 2010. 8. 28. 00:57

ASP.NET 2.0에서 고유 ID설정하기

ASP.NET 2.0 부터는 MasterPage라는 개념이 생겨서 제작의 편리함을 준다.

하지만 ASP.NET은 컨테이너가 있으면 혹시나 있을지도 모르는 ID의 중복을 피하기 위해 지정된 ID앞에 Prefix로 컨테이너의 ID가 붙도록 되어 있기 때문에 요즘같이 JavaScript로 DOM에 많이 접근 하는 방식의 코딩에는 불편함이 초래된다.

 

예를 들어 마스터 페이지에

<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder>
와 같이 ContentPlaceHolder를 설정하고 WebForm에서 
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
태그를 사용하면 최종 렌더링 되어 나오는 결과는 
<input name="ctl00$ContentPlaceHolder1$TextBox1" type="text" id="ctl00_ContentPlaceHolder1_TextBox1" />
 
이와 같아서 id로 element를 선택하기는 많이 번거롭다.
 
ASP.NET 4.0에서는 Control에 ClientIDMode라는 Property가 있어 그냥 지정한 ID가 그대로 출력 되게 할 수 있지만 2.0에서는 그런 옵션이 없다.
 
지금 진행하고 있는 프로젝트는 2.0으로 진행하고 있기 때문에 좀 더 편한 방법이 없을까 고민을 해 보았다.
 
Javascript selector를 만드는게 먼저 든 생각이다.
가장 많이 사용될 법한 방법이다. 
behind code에서 ContentPlaceHolder의 아이디를 html어딘가에 박아넣고
<script type="text/javascript">
function GetClientID(id) {
return prefix + '_' + id;
}
</script>
같은 방식으로 사용 할 수 있다.
하지만 id로 선택 할 때마다 저 함수를 쓸 생각을 하니.. 뭔가 깔끔하지가 못하다.
 
그래서 생각한 방법은 Rendering된 결과를 조작는 것.
.NET에서 처리된 결과를 HTML로 출력 할 때 id값을 조작해서 응답하면 되지 않을까.. 에서 시작된 고민으로 모듈부에서 처리를 하면 되지 않을까 하는 생각을 해보았다.
헌데 IHttpModule을 상속 받아서 처리하는건 역시 인증이라던지 행위 자체로 한정하는 것이 좋을 듯..
Page에 있는 control에 접근 하기도 힘들 뿐더러 이래저래 코드가 복잡해지고 지저분해 지는 것 같아 포기.
Filter를 사용하는 방법도 있겠으나 더 간단한 방법을 발견해서 소개한다.
Page의 Render method를 override해서 출력 직전의 HTML을 직접 편집 하는 것이다.
 
protected override void Render(HtmlTextWriter writer)
{
StringWriter output = new StringWriter();
base.Render(new HtmlTextWriter(output));

string html = output.ToString();

html = Regex.Replace(html, @"(<[^>]+?id="")ctl00_ContentPlaceHolder1_(.+?)(""[^>]+?>)""$1$2$3"RegexOptions.IgnoreCase | RegexOptions.Multiline);
html = Regex.Replace(html, @"(<[^>]+?name="")ctl00\$ContentPlaceHolder1\$(.+?)(""[^>]+?>)""$1$2$3"RegexOptions.IgnoreCase | RegexOptions.Multiline);

writer.Write(html);
}
 
역시 정규식은 위대하다 랄까... 결과는 
<input name="TextBox1" type="text" id="Text1" />
 
4.0의 ClientIDMode처럼 Control개개별로 옵션을 주지는 못하지만 일단 만족. :)
 
 
 

댓글을 달아 주세요