레이블이 Programs...인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Programs...인 게시물을 표시합니다. 모든 게시물 표시

2009년 9월 11일 금요일

폼을 캡쳐하여 미리보기로..

PrintPreviewDialog와 관련해 정보를 찾던중 MSDN 쪽에서 찾아낸 코드 조각

폼을 이미지로 캡쳐해 미리보기 화면으로 보내는 방법이다..
잘만 활용하면 다른 부분에서도 사용이 가능할듯.

[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern long BitBlt (IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
private Bitmap memoryImage;
private void CaptureScreen()
{
   Graphics mygraphics = this.CreateGraphics();
   Size s = this.Size;
   memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
   Graphics memoryGraphics = Graphics.FromImage(memoryImage);
   IntPtr dc1 = mygraphics.GetHdc();
   IntPtr dc2 = memoryGraphics.GetHdc();
   BitBlt(dc2, 0, 0, this.ClientRectangle.Width, this.ClientRectangle.Height, dc1, 0, 0, 13369376);
   mygraphics.ReleaseHdc(dc1);
   memoryGraphics.ReleaseHdc(dc2);
}
private void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
   e.Graphics.DrawImage(memoryImage, 0, 0);
}
private void printButton_Click(System.Object sender, System.EventArgs e)
{
   CaptureScreen();
   printPreviewDialog1.Show();
}
출처: MSDN 페이지

2009년 5월 29일 금요일

SyntaxHilighter Test

using System;

namespace TestNamespace
{
    class TestClass
    {
        public static void main()
        {
             Console.WriteLine("Hello World");
        }
    }
}


음하하... 드디어 되는 군요... ^^

다시 한 번 Zephyr님께 감사를~~

2009년 4월 28일 화요일

[업데이트] kImage - 이미지 정리 프로그램

이전에 작성했던 버전에서 이미 정리된 폴더에 중복된 파일 이름이 있을 경우,
프로그램이 오류와 함께 처리가 되지 않는 문제가 있어 이를 처리 했습니다..
동일 파일명이 있을 경우 덮어 쓰도록 변경 했습니다.

다음 수정에는 덮어쓰기도 옵션으로.... ^^;

자세한 사용 방법은 아래 글을 통해 확인 하시면 됩니다.

자작 이미지 정리 프로그램 - kImage


2009년 4월 27일 월요일

자작 FastPing 프로그램





AutoIt으로 작성했습니다..
게임을 할때 공속 업 효과를 가지고 오는 모양이더군요..


뭐.. 이런 저런 게임들에서 속도에 효과가 있는 모양입니다..

회사에서 누가 패스트핑 아느냐고 물어 보기에 적용방법을 찾아 만들게 되었군요..
처음 실행하면 패스트핑이 적용되고, 다시 실행하면 해제하게 됩니다.

적용후에는 재부팅 할 것인지 물어보는데 패스트핑 자체가 적용후 재부팅해야 적용되므로
재부팅하면 설정 다 날라가는  PC방에서는 헛일이겠군요...

아래 파일은 AutoIt 소스 입니다..
관심 있으신 분들은 한 번 살펴보세요  ^^

2009년 4월 23일 목요일

김창준님 프로그래머를 위한 공부법 정리

1. 알고리즘·자료구조 학습에서의 문제

  • 왜 우리는 학교에서 `프로그래밍을 하는 과정'이나 `디자인 과정'(소프트웨어 공학에서 말하는 개발 프로세스가 아니라 몇 시간이나 몇 십 분 단위의, 개인적인 차원의 사고 과정 등을 일컫습니다)을 명시적으로 배운 적이 없을까요?
2. 자료구조와 알고리즘 공부
  • 알고리즘 공부에서 중요한 것
  1. 알고리즘을 스스로 생각해낼 수 있는 능력
  2. 다른 알고리즘과 효율을 비교할 수 있는 능력
  3. 알고리즘을 컴퓨터와 다른 사람이 이해할 수 있는 언어로 표현해낼 수 있는 능력
  4. 이것의 정상작동(correctness) 여부를 검증해 내는 능력

3. 실질적이고 구체적인 문제를 함께 다루라

  • 구상(concrete) 다음에 추상(abstract)
  • ACM ICPC(세계 대학생 프로그래밍 경진 대회)

4. 알고리즘 디자인 과정의 중요성
5. 알고리즘과 패러다임
  • 로버트 플로이드(Robert Floyd)의 튜링상 수상 강연(The Paradigms of Programming, 1978)
  • 죠지 폴리야(George Polya)의 『Howto Solve it』
  • 알고리즘 개론 교재 CLR (Introduction to Algorithms, Thomas H. Cormen, Charles E. Leiserson,and Ronald L. Rivest)
  • 존 벤틀리(Jon Bentley)의『Programming Pearls』

6. 리팩토링 학습에서의 문제
  • 무색 무미 무취의 무위(無爲)적 자연(自然) 코드가 되는 그 날을 위해 오늘도 우리는 리팩토링이라는 유위(有爲)를 익힌다.

7. 리팩토링 공부
  • TDD와 함께..
  • 리팩토링 수련법
  1. 일취집중후각법: 앞에 소개한 본지 2001년 11월호에서 인용된 글 참조
  2. 주석 최소화: 주석을 최소화하되 코드의 가독성이 떨어지지 않도록(혹은 오히려 올라가도록) 노력합니다. 이렇게 하면 자동으로 리팩토링이 이뤄지는 경우가 많습니다.
  3. AOO 따르기: OAOO 법칙을 가능하면 최대한, 엄격하게 따르려고 합니다. 역시 자동으로 좋은리팩토링이 이뤄집니다. 여기서 디자인패턴이 창발하기도 합니다. GoF 책을 한번도 보지 못한 사람이 디자인패턴을 자유자재로 부리는 경우를 보게 됩니다.
  4. 디미터 법칙(Law of Demeter) 따르기: 디미터 법칙을 가능하면 지키려고 합니다. 어떤 리팩토링이 저절로 이뤄지거나 혹은 필요 없어지는가요?
  5. 짝(Pair) 리팩토링: 함께 리팩토링합니다. 혼자 하는 것보다 더 빨리, 더 많은 걸 배우게 됩니다. 특히, 각자 작성했던 코드를 함께 리팩토링하고, 제3자의 코드를 함께 리팩토링해 봅니다. 사람이 많다면 다른 짝이 리팩토링한 것과 서로 비교하고 토론합니다.
  6. `무엇'과 `어떻게'를 분리: 어떻게에서 무엇을 분리해 내도록 합니다. 어떤 리팩토링이 창발합니까?
  • 레이브와 웽거(Jean Lave, Etienne Wenger)의『Situated Learning : Legitimate Peripheral Participation』
  • 마소 2001년 12월호 「허실문답 XP 강화」
  • 조선시대 사상가 혜강 최한기는『신기통』

8. 디자인패턴 학습에서의 문제
  • 우리가 궁극적으로 추구하는 것은 패턴이 아니라 현실이어야 한다
  • 미국 캘리포니아 주립대학의 교수 베티 에드워즈(Betty Edwards) 『Drawing on the
    Right Side of the Brain』

9. 디자인 패턴 공부
  • 삐아제와 비갓스키(Lev Vygotsky)의 구성주의
  • 어떤 패턴의 필요성을 자신의 경험 속에서 절감하지 못한다면 그 패턴을 제대로 아는 것이 아니다

10. 소프트웨어 개발에 푹 빠지기
  • 독일어를 마스터하기 위해서는 독일어 문화에 자기 자신을 푹 담궈야(immerse) 한다.
  • 커리프스키(Joshua Kerievsky)의 「A Learning Guide To Design Patterns」http://www.industriallogic.com/papers/learning.html
  • 스터디 그룹의 패턴 언어를 서술한 「Knowledge Hydrant」http://www.industriallogic.com/papers/khdraft.pdf
  • 『A Learning Guide To Design Patterns』
  • 랄프 존슨 "싱글톤 패턴을 가르치기 전에 콤포짓, 스트래터지, 템플릿 메쏘드, 팩
    토리 메쏘드 패턴을 가르친다. 이것이 훨씬 더 일반적인 것들이며,"

11. 마이크로패턴
12. 디자인패턴 추천서 디자인패턴
  • 『Design Patterns Explained』(Shalloway, Trott)
  • 『Design Patterns Java Workbook』(Steven John Metsker)
  • 『Refactoring』(Martin Fowler)
  • 『Design Patterns』
  • 『Design Patterns Smalltalk Companion』
  • 『Pattern Hatching』(John Vlissides)
  • 『Smalltalk Best Practice Patterns』(Kent Beck)
  • 『Pattern Languages of Program Design』1,2,3,4: 패턴 컨퍼런스 논문 모음집
  • 『Pattern-Oriented Software Architecture』1,2
  • 『Concurrent Programming in Java』(Doug Lea)
  • 『Patterns of Software』(Richard Gabriel)
  • 『Analysis Patterns』(Martin Fowler)
  • 『A Timeless Way of Building』(Christopher Alexander)
  • 『The Natureof Order』
  • 『A Pattern Language』(Christopher Alexander)
  • 『Problem Frames』(Michael Jackson)

13. 익스트림 프로그래밍 공부
  • 필독서
    1. 『XP Explained』(Kent Beck): XP 선언서
    2. 『XP Installed』(Ron Jeffries et al): C3 프로젝트에 적용한 예, 얻은 교훈 등
    3. 『Planning XP』(Kent Beck, Martin Fowler): 계획 부분 설명(관리자, 코치용)
    4. 『Refactoring』(Martin Fowler): 리팩토링에 대한 최고의 책
    5. 『XP Applied』: 유즈넷과 메일링 리스트의 논의 등 최근 자료를 반영
    6. 『XP Explored』: 가장 쉽고 구체적인 XP 안내서
  • 여유가 된다면,,
    1. 『The Timeless Way of Building』
    2. 『XP in Practice』(Robert C. Martin 외)
    3. 『XP Examined』: XP 컨퍼런스에 발표된 논문 모음
    4. 『Peopleware』(Tom DeMarco)
    5. 『Adaptive Software Development』(Jim Highsmith)
    6. 『Surviving Object-Oriented Projects』(Alistair Cockburn)
    7. 『Software Project Survival Guide』(Steve McConnell)
    8. 『The Psychology of Computer Programming』(Gerald M. Weinberg)
    9. 『Agile Software Development』(Alistair Cockburn)
    10. 『Software Craftsmanship』(Pete McBreen)
    11. 『Agile Software Development with SCRUM』(Schwaber Ken)
    12. 『A Practical Guide to eXtreme Programming』(David Astels 외)
    13. 『Agile Modeling』(Scott Ambler)
    14. 『Agile Software Development Ecosystems』(Jim Highsmith)
    15. 『Test Driven Development』(Kent Beck)
    16. IEEE Software/Computer, CACM, Software Development Magazine 등에 실린 기사
    17. 『XP Conference, XP Universe 등의 논문들(특히 최근 것들)
    18. 유즈넷, 메일링 리스트, 오리지널 위키 http://c2.com의 논의들

14. Refactor Me
  • 실 생활에서 직접 실험을 해보면서 - 이 때 욕심 부리지 않고 한 가지씩 지긋이 해보는 느긋함과 음미의 정신이 필요할지도 모르겠습니다 - 자신의 경험을 축적해 나가고, 동시에 이 글을 적절히 리팩토링해서 자신만의 패턴을 차근히 만들어 나가길 바랍니다.

 

[출처] Minjae's PX : 김창준님 프로그래머를 위한 공부법 정리

요즘 프로그래밍을 하다보면 꼭 접하게 되는 것들...
이전 따로 떼고 생각하기가 힘든 대세일까나...
아직 내게는 익숙하지 않은 옷 같은 처지... 무량수불....

2009년 4월 14일 화요일

자작 이미지 정리 프로그램 - kImage

아들 사진을 정리하려다 보니 두서 없이 폴더를 차지하고 있는 파일들에 한숨이 저절로 일어...
사진을 찍은 날짜 순으로 폴더를 생성해 이미지 파일을 정리하는 프로그램을 하나 만들었습니다.

이미지 파일은 bmp, jpg, jpeg, gif, png, raw, tif 파일을 인식합니다.


처음 실행하면 위와 같은 화면을 볼 수 있습니다.
붉은 네모 안의 "Click..." 글자를 클릭하여 이미지 파일이 있는 위치를 선택하면 선택한 폴더 하위에
날짜별로 폴더를 만들어 사진을 찍은 날짜에 맞추어 이동시켜 줍니다.

프로그램을 처음 실행하고 종료하면 Config.xml파일이 생성되는데, 마지막으로 실행했던 폴더를 저장
하고자 한다면 xml파일을 열고 <UseSetting></UseSetting> 사이의 값을 1로 변경 저장한 재실행 하면,
다음 실행부터 마지막으로 실행한 폴더가 바로 설정됩니다.




Convert.ToInt32()와 int.Parse()의 차이

String을 Int형태로 바꿀 수 있는 방법에는 크게 2가지 방법이 있습니다.

int의 정적 메서드를 사용하는 방법과 Convert 클래스의  To 메서드를 쓰는 방법..
(사실 Int 뿐만이 아니라 대부분의 형들이 2가지 방법을 지원하죠..)

막상 사용하다 보면 두가지 방식 모두 거의 동일하게 동작해서 실상 차이가 있는지 모르고 지나치는 경우가
많습니다.. 사실 저도 왜 두가지를 만들어 놨는지 의문을 가지고 있었죠..

Convert 클래스가 많은 형을 지원하기도 하지만...(맞나.... ㅡㅡ;;)
가장 큰 차이는 뭐라해도 "null을 지원하느냐"가 아닐까 싶습니다.

int.Parse()를 사용할 때 인자에 null값이 들어오면 바로 에러 이쁘게 날려줄겁니다..
하지만 Convert.ToInt32()를 사용할 경우 null 값이 들어오면 0으로 값을 반환해 줍니다.

회사에서 C# 개념 정리 하라며 학원을 보내어 다니는 중입니다만...
강사도 이 차이를 잘 모르고 있더군요..

생각난 김에 한자 적어 봅니다..


string을 int로 바꾼다면 int.TryParse() 메서드를 더 추천 합니다.
기본형은 bool int.TryParse(string s, out int result) 형태 입니다.
string s를 int값으로 바꿀 수 있으면 true를 리턴하고 out 으로 참조 전달된 result 변수에 값을 입력하고,
실패하면 false를 리턴하고 int 기본값(0)을 result에  돌려 보냅니다.

변환이 성공했는지 확인하기가 더 용이해서 즐겨 쓰는 방법이죠.. ^^

2009년 4월 10일 금요일

IE8 오류와 관련해 VC++ 팀 블로그에 글이 올라 왔네요..

이전에 포스트한 글 중에 IE8과 VC++을 함께 사용할 경우 VC++에서 문제가 생긴다는 이야기를 했지요..

(VC++ 사용자는 되도록이면 IE8을 사용하지 마세요... 글 참조)

 

이와 관련해서 해결법이 VC++ 팀 블로그에 올라와 있다는 소식이 있네요...

아래에 링크하겠습니다...

 

Some VS2005 and VS2008 Wizards Pop Up Script Error.

 

IE8을 쓰지 않아 정확한지 확인은 하지 못했습니다...

지금까지는 IE8을 쓸생각이 없고.. 앞으로도 관망하려고 합니다..

 

혹... 이미 사용하시는 분들은 시도해 보세요..

 

결과도 알려주시면 감사 x 1000배 입니다 ^^

 

 

크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 3월 25일 수요일

Dictionary<>를 foreach 루프 돌리기

바로 며칠 전까지 Dictionary<>를 사용하면서 Key를 이용해 일일히 Value를 초기화 하거나 귀찮으면

 

아예 Clear()를 돌렸다...

 

정말 간단하게 foreach로 돌릴 수 있는 걸 모르고 말이지....

 

항상 기본은 충실히 하자... T^T

 

아래는 foreach로 돌리는 예제.........

 

Dictionary<string,int> dic = new Dictionary<string, int>();
dic.Add("key1", 1);
dic.Add("key2", 2);
dic.Add("key3", 3);

foreach(KeyValuePair<string, int> kv in dic)
{
    Console.WriteLine("Key: {0}, Value: {1}", kv.Key, kv.Value);
}


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 3월 24일 화요일

VC++ 사용자는 되도록이면 IE8을 사용하지 마세요...

Monaca님의 RSS피드를 보는 중 알게된 사실 입니다..
이거... IE8 사용해 볼까 하던 맘이 싹 달아났네요...
당분간은 관망해야겠군요...

아래는 Monaca님의 블로그에서 가져온 원문입니다.


---------- 출처 : http://monac.egloos.com/2270467 ---------------------------------------------


컨트롤에 Add variable Wizard를 실행해서 컨트롤 멤버 변수를 추가하는데 스크립트 에러가 발생합니다.

스크립트 에러를 무시하고 진행하면 동작하는 것처럼 보이지만, 코드를 제대로 생성하지 못해서 VC++에서 컴파일도 안 됩니다.

undefiend m_EditResult1;

이런식으로 추가됩니다.

수작업으로 매번 이를 바로 잡으면서 IE8을 쓰거나 아니면 당분간 쓰지 마세요.

More IE8 Extensibility Improvements
http://blogs.msdn.com/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx

레지스트리에 FEATURE_BROWSER_EMULATION 키 값을 설정해서 IE7 모드로 동작하게 하는 방법도 동작하지 않습니다.

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=425510

마찬가지로 devenv.exe를 로컬 애플리케이션으로 등록하는 법도 동작하지 않습니다.
(그외 microsoft.com을 127.0.0.1로 hosts 파일 수정하기 방법 등도 안 됩니다)

아직까지는 해결법이 공개되지 않았고, 위 블로그 댓글에도 있지만, 에뮬레이션 모드 얘기하지 말고 당장 문제를 해결해줘야 합니다.

베타 때는 그렇다고 하지만, 정식 버전인데 문제가 있네요.

ps. 해결하신 분이 있다면 알려주세요.

ps2. 스마트폰 디바이스 프로젝트는 아예 생성도 못하고, 프로젝트 생성 결과 리포트가 항상 failed로 뜬다고 합니다.
(http://www.eggheadcafe.com/software/aspnet/32004994/ie8-installation-breaks-v.aspx)

ps3. Visual C++ 2005, 2008 모두 문제가 발생한다고 합니다.

2009년 3월 15일 일요일

Intel System Developer Manual 배송 시작

드디어 배송이 시작되었습니다..

정확히는 13일에 시작이 되었군요...

 

UPS를 통해 배송되는군요...

 

어디까지 왔을 까~~나~

 

흘흘..

 

아직 오려면 한참 기다려야 겠군요.. ^^;



크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 3월 11일 수요일

Farpoint Spread에서 ClipBoard Paste 직접 구현하기

Farpoint를 사용하면서 Excel이나 다른 스프레드에서 데이터를 복사하여 붙여넣기 하면서
이를 컨트롤하고자 할 때 paste 중에 컨트롤 할 수 있는 이벤트는 있으나 paste가 끝났는지 여부를
알기가 힘듭니다.
이때문에 paste 후 데이터 검사를 하려 해도 타이밍을 잡지 못하고 멍하니 바라만 보고 있다가..
System.Window.Forms.Clipboard 클래스를 이용해 paste 중에 데이터를 직접 컨트롤해 버렸습니다.

펼쳐두기..





크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 3월 9일 월요일

인텔 본사에 Sytem Developer's Manual을 신청했습니다 ^^

인텔에서 시스템 개발자들에게 System Developer's Manual의 하드 카피본을 무료로 보내어 주고 있습니다..

총 6권의 하드카피를 신청할 수 있고 인텔의 여건에 따라 가능한 수량을 보내 주는 군요..

여기에서 신청할 수 있습니다.


신청한 메일입니다. Hard Copy Literature 라는 말을 포함하지 않을 경우 pdf파일만 떨렁 올 수 있으니 주의 하세요..


인텔로부터 리턴 메일이 왔군요..

이제 오는걸 기다리면 되려나 봅니다..
대략 3~4주가량 걸릴듯 합니다.

도착하면 한 번 더 포스팅 하도록 하겠습니다 ^^


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 2월 19일 목요일

숫자 입력만 받아들이기


private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8)
{
e.Handled = true;
}
}

TextBox에 KeyPress이벤트로 키 입력을 숫자키와 백스페이스로 제한한 코드다..
KeyChar값이 ASCII니까 8이 백스페이스.....

응용편....

Char.IsLetter(e.KeyChar) : 알파벳이라면 여기에 걸릴테지...
Char.IsSymbol(e.KeyChar) : 기호는 이걸로 거를테고...
Char.IsControl(e.KeyChar) : 제어 문자 거르고...
Char.IsPunctuation(e.KeyChar) : 구분 문자인지 체크..

숫자와 영문을 동시에 처리한다면 Char.IsLetterOrDigit()을 쓰는 방법도 있다..^^


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 2월 9일 월요일

C#으로 본 자료운용 구조[DFS와 BFS 비교]

얼마전 파일 검색 함수를 작성해 보면서 탐색 방법에 대한 고찰을 하게 되었다.

폴더에 대한 검색..

서브 폴더를 포함한 검색을 하며 검색되는 속도에 의해 얼마나 느려 질 수 있는지...

처음 사용하던 탐색 방법은 DFS(Depth First Search - 깊이 우선 방식)으로 Stack 구조의 재귀함수를 사용하는 방법이다.

아래는 C#으로 만들어본 DFS 방식의 파일 검색 함수이다.

private List DirSearch(string sDir, string extName)
{
    List tmpList = new List();

    try
    {
        foreach (string f in Directory.GetFiles(sDir, extName))
            tmpList.Add(f);
        foreach (string d in Directory.GetDirectories(sDir))
        {
            tmpList.AddRange(DirSearch(d, extName).ToArray());
        }
    }
    catch (Exception excpt)
    {
        MessageBox.Show(excpt.Message);
        //return tmpList;
    }

    return tmpList;
}


자주 다니는 사이트에서 BFS(Breadth First Search - 너비 우선 방식)을 알게되어 이를 운용해 봤는데 확실히 이 방법이

빠른 속도를 보인다. 다만.. 저장공간 사용량이 DFS에 비해 많다는 것...

하지만 요즘 PC들이 메모리가 좀 많은가... 많이 쓴다고 해봤자 메모리양에 비하면 새발의 피지... ㅎㅎ

아래는 BFS 방식의 파일 검색 함수 예제이다.

private List DirSearch(string sDir, string extName)
{
	List tmpDir = new List();
	List fileList = new List();

	int head = 0, tail = 0;
	tmpDir.Add(sDir);
	tail++;

	while (head != tail)
	{
		try
		{
			foreach (string d in Directory.GetDirectories(tmpDir[head]))
			{
				tmpDir.Add(d);
				tail++;
			}
			
			foreach (string f in Directory.GetFiles(tmpDir[head++], extName))
				fileList.Add(f);
		}
		catch (Exception excpt)
		{
			MessageBox.Show(excpt.Message);
			//return tmpList;
		}
	}
	return fileList;
}


좀.. 당황스러운건... C#으로 두 함수를 만들어 비교해 봤지만...

시간 차이가 거의 없다는 것... ㅡ_ㅢ;;;

나 실패한건가 T^T

2009년 2월 7일 토요일

스마트 클라이언트 만들기 첫 경험........

항상 인스톨쉴드 형태로 배포하고 사용하다 처음으로 스마트 클라이언트로 프로그램을 배포하는 경험을 했다..
고객측에서 웹페이지에 링크를 해달라는 요청....

무슨소린가 하고 다른 프로젝트 쪽에 확인해보니...
ClickOnce로 만들어 달라는 것이군...;;

두 시간 동안 자료 뒤지고.. 간단하게 웹서버 만들어서 무작정 따라해봤으나 ㅡㅡ;
DLL들 설치나... 게시할때 SSL 사용여부 등에 따라 ㅡㅡ;
아우.. ㅡ_ㅢ;;;
하루 날렸다 ㅡㅡ;

그나마 다행히 ClickOnce가 어떻게 돌아가는지는 이해했으니...;;;
안그럼..
 캐안습이었겠지 ㅡㅡ;

MS 스마트 클라이언트 아파치에서 실행 문제 해결

Clickonce로 배포한 프로그램이 아파치에서 실행을하면 xml태그가 표시되는 경우가 있다.

이 때는 프로그램이 게시되어 있는 폴더에 ".htaccess"라는 파일을 생성하고,
(이미 있다면 파일 하단에 추가)

아래 내용을 추가하여 저장합니다.

AddType application/x-ms-application application
AddType application/x-ms-manifest manifest
AddType application/octet-stream deploy

아파치를 재시작하고 다시 접속해 보면....
성공!!!

프로그램 중복 실행 방지 v2

static void Main()
{
    System.Diagnostics.Process[] myProc 
        = System.Diagnostics.Process.GetProcessesByName(Application.ProductName);
    if(myProc.Length < 2)
        Application.Run(new Form1());
   else
   {
        MessageBox.Show("이미 실행중입니다");
        Application.Exit();
   }
}

프로세스상에 실행된 프로그램으로 확인하는 방법

컴퓨터 관련 eBook 구할때...

영문이라 머리아프긴 하지만..
쓸만한 책들이 꾀 있는듯 해서 종종 들르는 사이트..

http://www.ebooksdownloadfree.com/

2009년 2월 5일 목요일

하위 폴더를 포함한 폴더 및 파일 검색 스크립트

FileSearch.au3#include <Array.au3>

#cs ----------------------------------------------------------------------------

  프로그램 이름 : FileSearch
  파일          : FileSearch.au3
  Autoit버전    : 3.3.0.0
  함수          : _FileSearch($sPath[, $sExt[, $iFlag]])
  설명          : 하위 폴더를 포함하여 폴더 및 파일 검색
                 $sPath - 파일 찾기 경로(지정하지 않을 경우 작업 폴더를 기본으로 함)
                 $sExt - 찾고자 하는 필터(기본값 '*')
                 $iFlag - 찾기 옵션
                    $iFlag = 0 폴더와 파일 모두 검색(기본값)
                    $iFlag = 1 파일만 검색
                    $iFlag = 2 폴더만 검색
  저자         : Kuro™
  연락처        : kuro78@gmil.com, http://kuroz.tistory.com
  환경          : WInXP SP3(윈도우NT기반)
  수정          : 2009.02.04 - 최초 작성

#ce ----------------------------------------------------------------------------

Func _FileSearch($sPath = '', $sExt = '*', $iFlag = 0)
    Local $aResult[1], $aPath[1]
    Local $iHead = 1, $iTail = 1, $iCount = 0
    Local $hSearch
   
    If $sPath = '' Then $sPath = @WorkingDir
    If StringRight($sPath, 1) = '\' Then $sPath = StringTrimRight($sPath, 1)
   
    _ArrayAdd($aPath, $sPath)
    $iTail += 1
   
    while $iHead <> $iTail
        Local $sTmp, $sTmpPath
        $sTmpPath = $aPath[$iHead] & '\'
       
        $hSearch = FileFindFirstFile($sTmpPath&$sExt)
        If @error <> -1 Then
            
            $iHead += 1
           
            Do
                $sTmp = FileFindNextFile($hSearch)
                If @error Then
                    FileClose($hSearch)
                    ExitLoop
                EndIf
               
                If $sTmp = '.' Or $sTmp = '..' Then ContinueLoop
               
                If StringInStr(FileGetAttrib($sTmpPath & $sTmp), 'D') Then
                    _ArrayAdd($aPath, $sTmpPath & $sTmp)
                    
                    If $iFlag <> 1 Then $iCount = _ArrayAdd($aResult, $sTmpPath & $sTmp)
                   
                    $iTail += 1
                    ContinueLoop
                EndIf
               
                If $iFlag <> 2 Then $iCount = _ArrayAdd($aResult, $sTmpPath & $sTmp)
            Until 0
        EndIf
    WEnd
   
    $aResult[0] = $iCount

    Return $aResult
EndFunc


최종 버전... 처음엔 재귀함수 형태로 파일 검색 로직을 만들었다가 좌절했던...
bfs 방식으로 검색하도록 수정 후 확실히 속도는 많이 올라갔음...

약 4000개 파일 2000개 폴더 검색하는데 평균 45초 정도 걸린다...;;

아래는 처음에 작성했던 소스.....

재귀함수는 저하늘에 별에게나 줘버려 ㅡ_ㅢ;;


#include-once
#include <Array.au3>


Func _FileSearch($sParam, $iSub = 0, $iDirInc = 0)
    Local $hSearch, $aList[1], $aDirs[1], $sPath, $sExt
    
    $sPath = StringLeft($sParam, StringInStr($sParam, '\', 0, -1))
    If $sPath = '' Then $sPath = @WorkingDir & '\'
    $sExt = StringTrimLeft($sParam, StringInStr($sParam, '\', 0, -1))
    If $sExt = '' Then $sExt = '*.*'
    
    $hSearch = FileFindFirstFile($sPath & $sExt)
    If @error <> -1 Then
        Local $sFile, $iCount
        Do
            $sFile = FileFindNextFile($hSearch)
            If @error Then
                FileClose($hSearch)
                ExitLoop
            EndIf
            If $sFile = '.' Or $sFile = '..' Then ContinueLoop
            
            If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
                $iCnt = _ArrayAdd($aDirs, $sPath & $sFile)
                $aDirs[0] = $iCnt
                If Not $iDirInc Then ContinueLoop
            EndIf
            $iCount = _ArrayAdd($aList, $sPath & $sFile)
        until 0
        $aList[0] = $iCount
    EndIf
    
    If $iSub Then
        Local $aTmp
        For $i = 1 to $aDirs[0]
            $aTmp = _FileSearch($aDirs[$i] & '\' & $sExt, $iSub, $iDirInc)
            For $j = 1 to $aTmp[0]
                _ArrayAdd($aList, $aTmp[$j])
            Next
            $aList[0] += $aTmp[0]
        Next
    EndIf
    
    Return $aList
EndFunc