'분류 전체보기'에 해당되는 글 56건
- 2015.09.22 Nexus 7 느린 충전 해결하기.
- 2011.12.03 넥서스원 해외롬 올리기 2
- 2011.11.30 Fifa 10 Data
- 2011.11.14 안드로이드 어플 제거 안될 때의 제거 방법..
- 2010.10.13 넥서스원 KT 정발 롬으로 돌아오기
- 2010.10.10 KT 정발 넥서스원 FRG83(2.2.1) 업데이트 하기 ( 해외롬 올리기 )
- 2010.09.18 ShouldSerialize 및 Reset 메서드를 사용하여 기본값 정의
- 2010.06.08 클래스의 정보 표현2
- 2010.06.06 클래스의 정보 표현
- 2010.04.28 AppStylist Editors 탭 선택 에러 (혹은 UltraTimeZoneEditor 생성자 에러)
- 2010.02.27 Visual Studio 색상 설정 링크
- 2009.09.10 String to Byte[]
- 2009.08.26 SyntaxHighlighter 2.0 for Windows Live Writer & Tistory
- 2009.08.04 Form과 UserControl의 AutoScaleMode 속성
- 2009.06.28 공유 프린터 추가하기
나의 넥서스7이 갑자기 10%를 넘게 충전을 못하며
전원을 켰을때에는 충전 중임에도 불구하고 점점 배터리가 빠져나가는 현상이 발생하였습니다.
해결 방법을 검색하다 아래의 동영상을 발견하였습니다.
여러번에 걸쳐서 충전기와 USB 케이블을 접속과 해제를 반복하면 된다는 것.
그래서 시동해본 결과 35%까지 충전됨.
그 후 다시 시도하니 100% 충전 완료.
이곳에서 Stock GRI40 (2.3.3 Gingerbread) ROM을 다운로드 합니다.
그런 다음 이 파일을 SD카드의 최상위 폴더로 복사(이동)합니다.
이 색상의 글은 KT 순정으로 돌아오기 위한 작업입니다.
이 작업은 안하셔도 무방할 거 같습니다.
순정에서 부터 작업을 진행하려고 작성된 부분입니다.
다음 파일을 다운로드 합니다.
PASSIMG_KT_KR_2.3.3_GRI40.zip
그 뒤에 PASSIMG.zip파일을 SD카드에서 제거합니다.
http://forum.xda-developers.com/showthread.php?t=803682
이 곳 글을 참조하여 루팅을 합니다.
마켓에서 Rom Manager를 설치합니다.
실행 후 ClockworkMod 복구 모드의 설치를 통해 리커버리를 설치합니다.
그 후 SD Card에서 ROM 설치를 선택합니다.
위에서 받은 Nexus-One_GRI40_unrooted.zip을 선택합니다.
Data와 Cache 삭제와 wip DalvikCache를 선택된 채로 확인을 눌러 설치를 진행합니다.
그 후에 다음 파일은 다운로드합니다.
71d2f9ecd610.signed-passion-GRJ22-from-GRI40.71d2f9ec.zip
그런 다음 SD카드의 최상위 폴더로 복사(이동)합니다.
RECOVERY를 선택합니다.
choose zip from sdcard를 선택합니다.
71d2f9ecd610.signed-passion-GRJ22-from-GRI40.71d2f9ec.zip 파일을 선택합니다.
yes를 선택합니다.
이후엔 OTA를 이용해서 2.3.6으로 업데이트 가능합니다.
넥서스 원에서 다운받은 데이터 파일입니다.
Evo 4G+에 넣으니 정상동작 하기에
저처럼 마켓에서 구매 후에
정상적인 다운로드가 되지 않는 분들을 위하여 공유해 드립니다.
(저는 이렇게 제거했지만 상황에 따라 안될 수도 있습니다.)
어플이 SD카드 이동을 지원한다면 이동 후 제거..
그래도 안되면 다시 핸드폰으로 이동 후 제거하면 보통 제거 됩니다.
그런데 SD카드를 이동을 지원하지 않는다면..
우선 스마트 폰에 맞는 드라이버를 찾어서 PC에 설치를 하셔야 됩니다.
그 후 설정->응용 프로그램(혹은 어플리케이션)->개발->USB 디버깅을 체크를 합니다.
폰을 PC와 USB를 이용하여 연결합니다.
그 후 첨부파일을 다운로드 합니다.
압축을 풀고 압축 푼 경로로 명령 프롬프트를 관리자 권한으로 실행합니다.
그런 뒤 adb shell 명령을 실행합니다.
그 후 pm setInstallLocation 2 명령을 실행합니다.
이러면 SD카드 이동을 지원하지 않더라도 이동 가능한 상태가 됩니다.
이 때 위의 방법으로 제거를 시도합니다.
그런 뒤 다시 원래 상태로 되돌립니다.
adb shell
pm setInstallLocation 1
명령은 대소문자 구분합니다.
그럼 성공하시길..
다른 버전으로 올리면 하위 버전으로의 설치는 더이상 되지 않습니다.)
(2.2 : PASSIMG_Passion_KT_KR_2.15.1010.2_FRF91_release_signed.zip )
(2.2.1 : PASSIMG_KR_KT_2.2.1_FRG83.zip )
(2.3 : PASSIMG_KT_KR_2.3.3_GRI40.zip )
다음은 MyClassCollection 클래스의 디버깅 시의 표현되는 정보입니다.
List<T>와는 다르게 내부의 요소의 값을 확인하는데 어려움이 존재합니다.
이것을 List<T>처럼 구성해 보겠습니다.
[System.Diagnostics.DebuggerDisplay("{Value}", Name = "{Name}")] class MyClass { public String Name; public String Value; public MyClass(String name, String value) { this.Name = name; this.Value = value; } } [System.Diagnostics.DebuggerDisplay("Count = {Count}")] [System.Diagnostics.DebuggerTypeProxy(typeof(CollectionDebugView))] class MyClassCollection : CollectionBase, ICollection { public MyClass Add(String name, String value) { Int32 i = base.InnerList.Add(new MyClass(name, value)); return base.InnerList[i] as MyClass; } } class CollectionDebugView { private ICollection collection; public CollectionDebugView(ICollection collection) { this.collection = collection; } [System.Diagnostics.DebuggerBrowsable(System.Diagnostics.DebuggerBrowsableState.RootHidden)] public MyClass[] MyClasses { get { List<myclass> myClasses = new List<myclass>(collection.Count); foreach (object key in collection) { MyClass myClass = key as MyClass; if (myClass != null) { myClasses.Add(myClass); } } return myClasses.ToArray(); } } } class Program { static void Main(string[] args) { MyClassCollection col = new MyClassCollection(); col.Add("Name1", "Value1"); } }
위처럼 구성하면 아래와 같이 보이게 됩니다.
다음은 MyClass 클래스의 디버깅 시 표현되는 정보입니다.
확장을 해야 내부 정보의 확인이 가능합니다.
cls 오른쪽의 RiSvE.MyClass(클래스 명) 대신 value1(Value 필드)을 표현하고 싶을 경우에 두 가지 방법이 있습니다.
첫 번째 방법은 ToString 메서드를 오버라이드 하는 것입니다.
class MyClass { public String Name; public String Value; public MyClass(String name, String value) { this.Name = name; this.Value = value; } public override string ToString() { return Value; } }
두 번째 방법은 DebuggerDisplayAttribute 특성을 이용하는 것입니다.
[System.Diagnostics.DebuggerDisplay("{Value}", Name = "{Name}")] class MyClass { public String Name; public String Value; public MyClass(String name, String value) { this.Name = name; this.Value = value; } }
첫 번째와 두 번째의 경우 결과가 비슷해 보이지만 List<T> 개체에 추가된 후에 보면 차이점이 발생합니다.
첫 번째의 경우입니다.
0번째 요소가 value1임을 나타내고 있습니다.
두 번째의 경우입니다.
name1 요소가 value1임을 나타내고 있습니다.
두 번째의 경우 이름과 값이 같이 볼 수 있으므로 더 효율적인 디버깅이 가능할 것입니다.
AppStylist 프로그램을 이용하여 스킨을 설정하려고 할 때 Editors 탭을 선택하면
"동일한 키를 사용하는 항목이 이미 추가되었습니다."
라는 메시지로 에러 화면이 발생합니다.
이것이 UltraTimeZoneEditor에서 TimeZone 리스트를 가져오기 위한 작업을 할 때
다음 두 곳중 레지스트리가 존재하는 한곳의
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones
STD의 값을 키값으로 이용하고 있습니다.
이 때 이용하는 키 값이 중복이 되어서 그렇습니다.
Windows Server 2003 R2 한글 PC의 경우엔 다음 두 곳에서 중복 키가 존재했습니다.(PC마다 다를 수 있습니다.)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central European Standard Time
동일 키가 존재하면 STD값을 다르게 처리하면 됩니다.
(Windows 7의 경우에는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Central Europe Standard Time의 STD값 뒤에 스페이스 하나가 더 들어가 있습니다.)
다음 소스는 제가 검사할 때 이용한 소스입니다.
private static void CheckTimeZones() { string name = @"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones"; string name2 = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Time Zones"; RegistryKey key = null; key = Registry.LocalMachine.OpenSubKey(name, false); if (key == null) { key = Registry.LocalMachine.OpenSubKey(name2, false); } if (key == null) { return; } string[] subKeyNames = key.GetSubKeyNames(); if (subKeyNames == null) { return; } Dictionarydic = new Dictionary (subKeyNames.Length); RegistryKey key2 = null; for (int i = 0; i < subKeyNames.Length; i++) { name = subKeyNames[i]; if (name != null) { key2 = key.OpenSubKey(name, false); if (key2 != null) { string displayName = key2.GetValue("Display") as string; string standardName = key2.GetValue("Std") as string; try { dic.Add(standardName, displayName); } catch { throw new Exception(key2.Name + "의 Std값이 중복되었습니다."); } } } } }
보통 Byte 배열과 String 간의 변환을 할 경우 다음과 같이 이용할 것입니다.
public static String ToString(Byte[] bytes) { return Encoding.UTF8.GetString(bytes); } public static Byte[] ToBytes(String s) { return Encoding.UTF8.GetBytes(s); }
하지만 암호화한 Byte배열을 그대로 이용한다면 에러를 내뱉습니다.
그래서 다음과 같이 변환을 해야 합니다.
public static String ToString(Byte[] bytes) { return Encoding.UTF8.GetString(Encoding.Convert(Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, bytes)); } public static Byte[] ToBytes(String s) { return Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8.GetBytes(s)); }
이전의 글 에서 소개한 SyntaxHighlighter for Windows Live Writer가 SyntaxHighlighter 1.5에 맞춰져있었기 때문에 C#의 글을 작성할 때 <PRE class=c# name="code">로 작성되었습니다.
이젠 2.0이 나옴에 따라 2.0에서는 c#이라는 class가 없어지고 c-sharp이나 csharp으로 작성되어야 합니다.
따라서 기존의 작성한 글이 SyntaxHighlighter for Windows Live Writer를 이용하여 작성한 글이라면 먼저 PRE 태그를 수정하여야 합니다. 바로 <pre class="brush: csharp;">와 같은 형식으로 맞추어야 합니다.
그래서 Windows Live Writer에서 이용할 수 있는 것 중에서 Code Snipper With Syntaxhighlighter Support for Windows Live Writer입니다.
다만 이전의 SyntaxHighlighter for Windows Live Writer에서는 실제 적용된 화면 구성으로 보여졌었는데 Code Snipper With Syntaxhighlighter Support for Windows Live Writer에서는 적용 안된 화면으로 보여지는게 아쉽습니다.
그 외에도 Windows Live Writer Source Code plugin for SyntaxHighlighter도 존재합니다.
우선 AutoScaleMode 속성에 대한 MSDN입니다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.containercontrol.autoscalemode.aspx
다음은 AutoScaleMode 열거 형에 대한 MSDN입니다.
http://msdn.microsoft.com/ko-kr/library/system.windows.forms.autoscalemode.aspx
AutoSacleMode 열거 형은 None, Font, Dpi, Inherit 이렇게 4가지가 존재합니다.
None : 자동 스케일 변경 없음
Font : 폰트 사이즈에 따른 스케일 변경
Dpi : 화면 해상도 Dpi 변경에 따른 스케일 변경
Inherit : 부모의 상태를 따름
기본적으로 Form과 UserControl은 Font로 설정되어져 있습니다.
이 설정은 Font가 변경이 되면 Form과 UserControl의 크기가 재조정되고 내부의 컨트롤들의 위치도 재배치됩니다.
이렇게 되면 원하지 않는 UI가 나오게 되기 때문에 이 설정은 이용하지 않는 것이 좋겠습니다.
그냥 무조건 개발 당시의 화면으로 나오게 하고 싶으면 None을 이용하면 됩니다.
None은 윈도우의 Dpi 변경해도 동일한 화면크기로 프로그램이 실행됩니다.
현재 대부분의 모니터가 96dpi로 맞추어져서 나오기 때문에 None을 이용하여 고정하여도 되지만
나중에 나오는 모니터의 dpi가 96dpi로 나온다는 보장이 없기 때문에 Dpi를 이용하여 윈도우의 Dpi변경에 의한
자동 사이즈 변경이 가능하도록 개발하는 것이 좋겠습니다.
Dpi로 설정할 시에 주의할 점이 있습니다.
각 컨트롤의 사이즈가 자동으로 조정하지만 이미지의 사이즈는 설정한 대로 나온다는 것입니다.
이미지를 Tile옵션으로 하면 이미지컨트롤의 사이즈가 변경이 되어도 이미지 자체의 사이즈는 변경되지 않기 때문에
Stretch옵션을 이용하여 컨트롤 사이즈가 변하면 이미지도 따라 변하게 만들어 주어야 합니다.
또 한가지는 UserControl의 AutoScaleMode 속성은 Inherit으로 설정하여야 한다는 것입니다.
UserControl의 AutoScaleMode 속성도 Dpi로 할 경우에 UserControl내의 컨트롤의 사이트와 위치가
원하지 않게 나타납니다. ( 원인은 저도 모릅니다만 아마 UserControl의 AutoScaleMode가 먼저 적용된 뒤에 Form이 적용되면서 이상해 지지 않나 싶습니다. )
( 주의할점 추가 - SplitContainer를 이용할 경우에도 이상한 UI로 변경됩니다. )
앞으로 AutoScaleMode속성은 Form의 경우에는 Dpi로 UserControl의 경우에는 Inherit으로 설정하도록 합시다.
프린터 추가를 눌러 프린터 추가를 시작합니다.
로컬 프린터 추가를 선택하여 추가를 진행합니다.
일반적으로 공유 프린터 추가 시 네트워크, 무선 또는 Bluetooth 프린터 추가를 선택하여 추가합니다.
이것은 일반적인 상황에서는 잘 추가 되지만 그렇지 못한 상황 ( 32bit OS의 공유 프린터를 64bit OS에서 추가할 시 )
에서는 제대로 설치되지 못합니다.
새 포트 만들기를 이용하여 Local Port를 선택합니다.
포트 이름에 \\hostname\printname을 입력합니다.
예 ) \\RiSvE-PC\LaserJ
이제 추가할 프린터에 맞는 프린터 드라이버를 선택합니다.
항목에 존재하지 않다면 프린터 제조사에서 해당 드라이버를 받아 선택합니다.
드라이버를 선택하면 공유 여부를 물어봅니다.
이미 공유된 프린터이기 때문에 특별한 상황이 아닌 이상에는 공유를 하지 않도록 합니다.
공유 안 함을 선택합니다.
마침을 누르면 프린터가 추가 됩니다.
프린터가 정상적으로 추가 되었는지 확인을 위해 테스트 페이지 인쇄 보다는
메모장에서 간단한 글자를 넣어 인쇄를 진행하심이 토너 or 잉크의 낭비를 막을 수 있습니다.