Windows Developer Preview 2011. 10. 10. 안혁 http://hyok.kr
Windows Developer Preview는 테스트 버전이기 때문에 실제로 사용하여 보면 여러가지 부족한 부분이 많이 있습니다. 이름 그대로 훗날 윈도우의 Preview에 집중한 버전인데요. 어려운 것 중 하나가 있다면 무선랜 프로필 삭제 하는 것입니다. 사실 생성하는 것도 방법을 모르면 어려운 일인데요. 네트워크 관리자(Network and Sharing Center)에서 Set up a new connection or network를 선택한 후 Manually connect to a wireless network를 선택하면 무선랜 프로필을 생성할 수 있습니다. 이는 모두 무선랜 관리 메뉴가 없어졌기 때문인데요. 흘러나온 정보에 의하면 차기 버전은 개선된 것 같다고 하는군요.
만약 무선랜 프로필 생성을 했는데, 특별한 이유가 있어 삭제해야 한다면 - 특히 잘못 생성하면 연결도 안되고 수정도 안되고 진퇴양난의 사태에 빠집니다. 새로 만들려고 하면 이미 있다고 만들어지지 않죠. 무선랜 연결 후에는 수정이 가능합니다. 연결 후 네트워크 어뎁터가 나오는 Network Connections에서 무선랜카드를 더블 클릭하면 Wi-Fi Status 창이 뜨는데, 여기에 Wireless Properties가 있습니다. 연결만 잘 되면 수정 또한 가능합니다.
문제는 삭제입니다. 삭제는 도저히 못 찾겠더군요. 그래서 커맨드의 힘을 빌려봤습니다.
netsh wlan show profile netsh wlan delete profile "[profile name]"
첫번째 명령은 현재 프로필의 목록을 보는 것입니다. 자동 연결 설정이 되는 무선랜 목록이 보여질 것입니다. 삭제하고 싶은 프로필 이름을 확인하고 두번째 명령을 사용합니다. 오타만 없다면 쉽게 삭제할 수 있습니다.
동영상 파일을 관리하다 보면 이름을 일괄적으로 변경해야 할 경우가 있습니다. 예를 들면, 자막을 받았는데, 동영상은 MOVE01.AVI, MOVIE02.AVI 이런 형태인데, 자막은 SUBTITLE01.SMI SUBTITLE02.SMI 형태로 되어 있어 SMI 파일의 이름을 AVI와 똑같이 변경해야 하는 경우가 그렇지요.
Get-ChildItem: 현재 폴더에 있는 SMI 확장자의 파일을 모두 가져와서 ForEach-Object: 하나씩 처리합니다. {}안에 $_라고 적으면 이 안에 순서대로 대입됩니다. $_.Directory.FullName: $_는 FileInfo 타입입니다. 이는 파일 경로를 의미합니다. $name: 원하는 파일 이름을 정하고([경로]\newname01.smi, [경로]\newname02.smi, ......) Move-Item: 이름 변경 - 이름을 바꿔서 같은 폴더에 옮겼다고 생각하면 됩니다.
$i.ToString("00")이라고 하면 $i에 들어 있는 1, 2, 3이라는 값이 01, 02, 03으로 바뀝니다. 두 자리로 표현되도록 방법이죠. 보통 동영상의 이름에 사용하는 순서는 두자리 숫자를 사용하죠? 그래야 탐색기에서 순서대로 정렬 되니까요.
위 코드는 변경할 이름을 $name에 직접 지정하는 방식입니다만, 좀 더 생각해보면 avi파일의 이름을 가져와서 $name에 담도록 하면 이 명령을 사용할 때마다 변경하지 않아도 되겠군요.
위에서 Rename-Item 대신 Move-Item을 사용한 이유는 원본 파일 이름에 '[' 또는 ']'문자가 있는 경우 파일을 찾을 수 없다는 오류가 발생하기 때문입니다. 보통 동영상 파일의 이름에는 대괄호가 많이 사용되잖아요? 그래서 다른 방법을 찾아본 것입니다. (제 의견입니다만, 이는 버그라고 생각합니다. Rename-Item만을 단독으로 사용할 때면 `[ 또는 `]과 같이 표기하여 사용하겠지만, 파이프(|)는 앞 명령의 결과가 객체로 넘어오므로 문제가 없어야 하지 않을까요? Move-Item이 정상적으로 작동하는 것처럼......)
단, 위 명령은 다음을 전제로 합니다.
1. Get-ChildItem은 파일 이름 순서대로 결과를 돌려줍니다. 2. 원본 smi 파일의 순서는 1부터 1씩 증가합니다. 3. 현재 폴더에는 변경하고자 하는 smi파일만 존재합니다.
Powershell에서 특정 문자열에 +1한 느낌으로 변경하는 것은 어떻게 할까요? 질문이 이해가 안되시죠? "abcdefg"라는 문장이 있는경우, 이를 "bcdefgh"라는 문장으로 바꾸고 싶은 경우를 말하는 겁니다. 이런건 C언어같은 프로그래밍 언어를 처음 배울 때, 문자가 사실은 아스키 값이라는 숫자라는 것을 이해하기 위한 실습 문제 정도되겠습니다. a라는 문자의 아스키 값이 97이라면 b의 아스키 값은 98이라는 거죠. 문제를 이해했다면 Powershell에서 하는 방법을 보겠습니다.
"abcde"라고 적으면 Powershell에서는 String 타입이 되죠? 이를 char 타입의 배열 그러니까 { a, b, c, d, e } 형태의 값으로 변경했습니다. 그리고 파이프(|)를 사용해서 뒤로 던졌죠? ForEach-Object가 받아서 사용합니다. ForEach-Object는 배열을 첫번째부터 끝까지 순서대로 가져오는 명령어 인데요. [char]($_-1)이라는 명령을 배열 개수(여기는 문자가 5개이니까 5번)만큼 실행됩니다. $_는 각 배열의 값으로 변경되어서요. 결국 위 명령은 다음 명령이랑 같은거죠.
Microsoft Exchange Server 2010 helps IT Professionals achieve new levels of reliability with greater flexibility, enhanced user experiences, and increased protection for business communications.
Flexible and reliable - Exchange Server 2010 gives you the flexibility to tailor your deployment based on your company's unique needs and a simplified way to keep e-mail continuously available for your users.
Anywhere access - Exchange Server 2010 helps your users get more done by giving them the freedom to securely access all their communications - e-mail, voice mail, instant messaging, and more - from virtually any platform, Web browser, or device.
Protection and compliance - Exchange Server 2010 delivers integrated information loss prevention, and compliance tools aimed at helping you simplify the process of protecting your company's communications and meeting regulatory requirements.
Exchange Server 2007에서 제공하는 OWA는 이미지 삽입이 불가합니다. 특정 웹 페이지에 있는 이미지를 복사해서 붙여넣는 편법이 있습니다만, 이는 이미지 삽입이 아니라 <img>테그가 삽입되는 엄연히 다른 작동입니다. 여기서 말하는 이미지 삽입은 메시지의 일부로 삽입 되는 것을 말하며, Outlook에서 메일 작성이 이미지 삽입은 모두 이런 방식입니다. 속성을 보면 첨부 파일로 처리됩니다만, Inline이라는 일반 첨부와는 약간 다른 형태로 취급됩니다.
Exchange Server 2010에서 제공하는 OWA 또한 이미지 삽입이 불가한 것은 마찬가지 입니다만, 가능한 방법이 있습니다. 이는 편법은 아니지만, 이 기능을 요구하는 사람의 입장에서 만족스러운 응답을 받지 못할 수도 있습니다.
OWA에서 제공하는 S/MIME를 사용하도록 옵션에서 설정할 수 있는데, 그렇게 하면 S/MIME 컨트롤이 설치됩니다. 이는 S/MIME이 공개 키 인프라(PKI)를 기반으로 운영되어 메시지를 암호화하고 디지털 서명을 해야하기 때문입니다. PKI는 공개 키 암호화를 사용하여 전자 거래에서 각 당사자의 유효성을 확인 및 인증하는 디지털 인증서, CA(인증 기관) 및 RA(등록 기관)로 구성되는 시스템입니다.
이 S/MIME을 사용하게 되면 얻게 되는 몇가지 기능 중 하나가 앞에서 설명한 이미지 삽입입니다. 그 몇가지라는 것은 아래와 같습니다.
* Attach messages to messages
* Paste images in messages
* Attach files by using a simpler UI and let users attach multiple files in a single operation.
그리고 아래는 제약 사항입니다.
* WebReady Document Viewing only works in clear-signed messages. It does not work in encrypted messages or in opaque-signed messages.
* When some content types are sent from Outlook as S/MIME messages, they cannot be displayed in Outlook Web App. Outlook Web App will display a banner in the message header when this happens.
* Most S/MIME features are not available when a user opens a folder in another mailbox or uses explicit sign-in to open another user's mailbox. The only S/MIME feature that is available in those cases is verification of digital signatures.
이를 위한 요구 사항이라면 브라우저는 IE7, 8이라는 것과 물론 OWA가 SSL을 사용해서 서비스가 되어야 한다는 것입니다. 이미지 삽입을 위해 S/MIME을 사용하는 것이 좋은 것인가에 대한 질문은 또 다른 의문입니다. 경험적으로 Workaround는 양날의 검입니다. 전체적으로 이해해볼 때, 이 기능은 Exchange를 사용하는 해당 조직의 수신자를 대상으로 하는 메일만 유효한 것으로 보입니다. 외부와 협력이 많은 사람에게는 의미가 없는 기능으로 보이고, 결국 이미지 삽입이란 것도 외부는 못한다는 말이 되겠군요. 많은 고객사들이 외부 업체들과 많은 메일을 주고 받던데... 요즘들어, 좋은 기능 뒤에 숨어 있는 한계를 빠른 시간 안에 발견하는 것이 지연, 야근, 주말 근무가 없는 긍정적인 업무 환경을 보장한다는 생각을 강하게 합니다. 항상 주의가 필요해요.
다행히도 외부 메일 서버(네이버, Gmail 등등...)로 발송하는 것도 문제가 없다고 합니다. (확인해주신 엘도라도님 감사합니다.) 그래서 다음과 같이 말할 수 있을 것 같습니다.
Exchange Server 2010의 OWA는 이미지를 본문에 삽입할 수 있습니다. (단, S/MIME을 사용하는 경우 - Internet Explorer 7, 8만 지원)
HTML 페이지에 <iframe>이 있을 때, 외부에서 프레임 내부의 페이지 변경(submit같은...) 이벤트를 잡고 싶은 경우 다음과 같이 진행하세요.
function buttonClicked() { //readystatechange 이벤트에 pageChanged() 함수 연결 document.getElementById("myiframe").onreadystatechange = pageChanged; }
function pageChanged() { //<iframe>의 document.readyState가 "complete"일 때...... if (document.getElementById("myiframe").document.readyState == "complete") { alert("Hello World!"); } }
buttonClicked()에서 [myiframe]이라는 iframe의 상태가 변경되는 경우 pageChanged()가 호출되도록 설정합니다. 그러면 pageChanged()는 [myiframe]의 상태를 확인해서 "complete"일 경우, 변경이 완료된 것으로 보고 원하는 작업을 하는 것입니다.
function createCookie(name,value,days,domain) { if (days) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/ ;domain="+domain; }
function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }
function eraseCookie(name) { createCookie(name,"",-1); }