가끔 디버그를 위해 문제가 발생하는 함수를 누가 호출했는지 알고 싶을 때가 있다.

그럴 땐 아래 함수를 호출하면 Log로 Stack을 알 수 있다. (Exception 이용)

 

  1: public static void occurException(String tag) {
  2:     new IllegalArgumentException(tag).printStackTrace();
  3: }
  4: 
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
Development & Tips/Tips2011/11/14 16:19

구글 뮤직은 미국 지역 사용자를 위한 서비스로

국내에서 초대에 응하기 위해서는 아래 사항을 거쳐야 가능하다.

 

 

먼저 제어판 – 인터넷 옵션 창에서 연결 탭의 LAN 설정을 클릭 해보자.

 

image 

 

 

아래와 같은 창이 뜨면, 프록시 서버 그룹 안의 체크박스에 체크를 하고 주소포트의 내용을 채워 넣는다.

 

image

 

 

주소 및 포트는 미국 지역(United State)의 프록시 서버의 내용으로 채워야 하는데, 해당 내용은 아래 링크를 통해 얻을 수 있다.

(왠만하면 응답 속도와 전송 속도가 빠른 서버를 선택하도록 한다.)

http://www.freeproxylists.net/

 

image

 

 

위 서버 리스트에서 알맞는 서버의 프록시 서버 주소와 포트를 찾아 기입하였다면, 구글 뮤직 초대장 (메일)의 초대 버튼을 눌러 서비스 가입을 진행하면 된다.

 

※ 서비스 가입 시만 위 Proxy 서버가 필요하며, 가입 이후에는 Proxy 체크박스를 해제하고 사용해도 무관하다.

   (사용 하지 않는 편이 인터넷 속도에 좋다)

크리에이티브 커먼즈 라이선스
Creative Commons License

'Development & Tips > Tips' 카테고리의 다른 글

구글 뮤직 사용하기  (0) 2011/11/14
G-Mail Notifier  (1) 2008/02/09
Cry Engine 2  (0) 2007/04/25
Visual Studio 단축키  (0) 2007/04/25
Posted by HLDEC

요구사항

 

1. COM Object 참조 추가

 

 

 

 

2. 네임스페이스 추가

 

using Excel = Microsoft.Office.Interop.Excel;

 

 

기본 동작 순서 및 구조

 

  1: Excel.Application xlApp = null;
  2: Excel.Workbook xlWorkBook = null;
  3: Excel.Worksheet xlWorkSheet = null;
  4: object misValue = System.Reflection.Missing.Value;
  5: 
  6: xlApp = new Excel.ApplicationClass();
  7: {
  8: 	xlWorkBook = xlApp.Workbooks.Add(misValue);
  9: 	{
 10: 		xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);
 11: 
 12: 		releaseObject(xlWorkSheet);
 13: 	}
 14: 	xlWorkBook.Close(true, misValue, misValue);
 15: 	releaseObject(xlWorkBook);
 16: }
 17: xlApp.Quit();
 18: releaseObject(xlApp);

 

 

1. 항목별 초기화 (애플리케이션 – 워크북 – 워크시트)

 

  1: Excel.Application xlApp = null;
  2: Excel.Workbook xlWorkBook = null;
  3: Excel.Worksheet xlWorkSheet = null;

 

 

2. Missing Value 정의

 

  1: object misValue = System.Reflection.Missing.Value;

 

 

3. 애플리케이션 인스턴스 생성

 

  1: xlApp = new Excel.ApplicationClass();

 

 

4. 애플리케이션 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlApp);

 

 

5. 애플리케이션 종료

 

  1: xlApp.Quit();

 

 

6. 워크북 인스턴스 생성

 

  1: xlWorkBook = xlApp.Workbooks.Add(misValue);

 

 

7. 워크북 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlWorkBook);

 

 

8. 파일 열기

 

  1: xlWorkBook = xlApp.Workbooks.Open(/*파일 명*/, 0, /*읽기 전용 ex)true*/, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

 

 

9. 파일 저장하기

 

  1: xlWorkBook.SaveAs(/*파일 명*/, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);

 

 

10. 워크북 닫기

 

  1: xlWorkBook.Close(/*저장 여부 ex)true*/, misValue, misValue);

 

 

11.  워크시트 생성

 

  1: xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Add(misValue, misValue, misValue, misValue);

 

 

12. 워크시트 인스턴스 해제 (http://hldec.net/entry/COM-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-Release%ED%95%98%EA%B8%B0)

 

  1: releaseObject(xlWorkSheet);

 

13. 워크시트 가져오기

  1: xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(/*워크시트 인덱스*/);

 

 

14. 워크시트 이름 변경

 

  1: xlWorkSheet.Name = /*워크시트 이름*/;

 

 

15. 셀에 내용 설정

 

  1: xlWorkSheet.Cells[y, x] = /*셀 내용*/;

 

 

16. 셀의 값 가져오기

  1: string value = /*알맞는 캐스트로 변경*/(string)(range.Cells[/*Cell Y*/, /*Cell X*/] as Excel.Range).Value2

 

 

17. 셀 범위 설정 (1)

 

  1: Excel.Range range = worksheet.get_Range(/*시작 위치 ex)"A1"*/, /*마지막 위치 ex)"E1"*/);

 

 

18. 셀 범위 설정 (2)

 

  1: Excel.Range range = objSheet.get_Range(/*시작 위치 ex)"A1"*/, Missing.Value);
  2: range = range.get_Resize(/*Width 범위*/, /*Height 범위*/);

 

 

19. 선택된 셀의 행 전체 선택

 

  1: Excel.Range range = ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireRow;

 

 

20. 선택된 셀의 열 전체 선택

 

  1: Excel.Range range = ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn;

 

 

21.  셀 배경 색 설정

 

  1: System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml(/*색상 ex)#FFFFFF*/);
  2: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).Interior.Color = System.Drawing.ColorTranslator.ToOle(color);

 

 

22. 셀 내용 포맷 설정 (http://xlsgen.arstdesign.com/core/numberformat.html)

 

  1: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn.NumberFormat = /*포맷 ex)"@"*/;

 

 

23. 셀 크기 자동 맞춤

 

  1: ((Excel.Range)xlWorkSheet.Cells[/*Cell Y*/, /*Cell X*/]).EntireColumn.AutoFit();
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG C#, Excel, xls, 엑셀

1. Drop 처리 할 Form 생성
 




2. 생성된 컨트롤 속성 변경 (AllowDrop - True)




3. 아래 코드 삽입 (IDC_DROP_BOX은 컨트롤 이름임)

private void IDC_DROP_BOX_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy | DragDropEffects.Scroll;
}

}

private void IDC_DROP_BOX_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] file = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string str in file)
{
/*여기에 파일 처리*/
}
}
 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC

아래 함수 호출

private void releaseObject(object obj)
{
    try
    {
        System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
        obj = null;
    }
    catch (Exception ex)
    {
        obj = null;
        MessageBox.Show("Unable to release the Object " + ex.ToString());
    }
    finally
    {
        GC.Collect();
    }


저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
DirectoryInfo dirInfo = new DirectoryInfo(path);
if (dirInfo.Exists) dirInfo.Delete(true);

true를 false로 바꾸면 하위 폴더 및 파일은 삭제하지 않음. 
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC

1. XML 문서 생성하기
 XmlDocument xmlDoc = new XmlDocument();

2. XML 가져오기
 xmlDoc.Load(/*파일 이름*/);

3. 정의 설정하기
 XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
 xmlDoc.InsertBefore(xmlDeclaration, xmlDoc.DocumentElement);

4. 루트 요소 가져오기
 XmlElement rootElement = xmlDoc.DocumentElement;

5. 요소 생성하기
 XmlElement element = xmlDoc.CreateElement(/*요소 이름*/);

6. 요소 추가하기 (루트 요소로 설정 / XmlDocument 에 추가)
 xmlDoc.AppendChild(element);

7. 요소 추가하기 (자식 요소로 추가 / XmlNode에 추가)
 node.AppendChild(element);

8. 자식 노드 가져오기
 XmlNode node = xmlDoc.FirstChild;

9. 자식 노드 가져오기 (복수)
 XmlNodeList nodes = node.ChildNodes;

10. 자식 노드 탐색
 foreach (XmlNode node in nodes);

11. 형제 노드 가져오기
 XmlNode sibiling = node.NextSibling;

12. 애트리뷰트 값 가져오기
 string value = node.Attributes[/*애트리뷰트 이름*/].Value;

13. 애트리뷰트 설정하기 (XmlElement에 설정)
 element.SetAttribute(/*애트리뷰트 이름*/, /*애트리뷰트 값*/);

14. 애트리뷰트 설정하기 (XmlNode에 설정)
 XmlAttributeCollection acxNode = node.Attributes;
 XmlAttribute newAttr = xmlDoc.CreateAttribute(/*애트리뷰트 이름*/);
 newAttr.Value = /*애트리뷰트 값*/;
 acxNode.SetNamedItem(newAttr);

15. 고정된 깊이의 노드들을 리스트로 가져오기
 XmlNodeList nodeList = xmlDoc.SelectNodes("//parent/child");   

16. XML 저장하기
 xmlDoc.Save(/*파일 이름*/);







저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG C#, XML

CPU 및 Display의 Wake Lock을 쉽게 컨트롤 하는 방법은 아래와 같다.
사용하기 전에 initWakeLock으로 초기화를 해주고
acquireWakeLock/releaseWakeLock 으로 잠금/해제를 해주면 된다.
다 사용하고 나면 destroyWakeLock으로 최종 해제를 해주도록 한다.

WakeLock 으로 컨트롤 할 수 있는 옵션은 아래 표를 참조하자.

Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright

<!-- androidmanifest.xml -->
<user-permission android:name="android.permission.WAKE_LOCK"></user-permission>

// wake lock
private static WakeLock sWakeLock = null;
    
public static void initWakeLock(Context context) {
    // Lock CPU Sleep
    PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    sWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, context.getClass().getName());
    sWakeLock.setReferenceCounted(false);
}
    
public static void destroyWakeLock() {
    if (sWakeLock != null) {
        sWakeLock.release();
        sWakeLock = null;
    }
}
    
public static void acquireWakeLock(long timeout) {
    if (sWakeLock != null) sWakeLock.acquire(timeout);
}

 public static void acquireWakeLock() {
    if (sWakeLock != null) sWakeLock.acquire();
}
    
public static void releaseWakeLock() {
    if (sWakeLock != null) sWakeLock.release();
}
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC

디바이스의 스크린이 켜졌는지 확인하는 방법은 아래와 같다.

// check screen status
public static boolean isScreenOn(Context context) {
     PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
     return pm.isScreenOn();
}
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG Android

아래 함수를 사용하면 자바 및 네이티브 힙의 크기 및 사용량을 체크할 수 있다.
DDMS에서 체크 가능한 Java Heap에는 문제가 없는데도 불구하고
OutOfMemoryError가 발생하면 이 함수를 이용해 Heap사용량을 먼저 체크하자.

// for check heap size
    public static void logHeap(Class clazz) {
     final int MEMORY_BUFFER_LIMIT_FOR_RESTART = 15;
        Double allocated = new Double(Debug.getNativeHeapAllocatedSize())/new Double((1048576));
        Double available = new Double(Debug.getNativeHeapSize())/new Double((1048576));
        Double free = new Double(Debug.getNativeHeapFreeSize())/new Double((1048576));
        DecimalFormat df = new DecimalFormat();
        df.setMaximumFractionDigits(2);
        df.setMinimumFractionDigits(2);
    
        Log.d("CWMusicPlayerUtil", "debug. =================================");
        Log.d("CWMusicPlayerUtil", "debug.heap native: allocated " + df.format(allocated) + "MB of " + df.format(available) + "MB (" + df.format(free) + "MB free) in [" + clazz.getName().replaceAll("com.asktingting.android.","") + "]");
        Log.d("CWMusicPlayerUtil", "debug.memory: allocated: " + df.format(new Double(Runtime.getRuntime().totalMemory()/1048576)) + "MB of " + df.format(new Double(Runtime.getRuntime().maxMemory()/1048576))+ "MB (" + df.format(new Double(Runtime.getRuntime().freeMemory()/1048576)) +"MB free)");
        System.gc();
    
        // don't need to add the following lines, it's just an app specific handling in my app
        /*
        if (allocated>=(new Double(Runtime.getRuntime().maxMemory())/new Double((1048576))-MEMORY_BUFFER_LIMIT_FOR_RESTART)) {
            android.os.Process.killProcess(android.os.Process.myPid());
        }
        */
    }
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by HLDEC
TAG Android