원본 : http://msdn.microsoft.com/ko-kr/library/ms180915(VS.80).aspx

(즐겨찾기에 있는 정보로 링크 변경이나, 사이트 변경에 따라 정보가 유실될 것 같아 홈페이지에 등록합니다. 아래의 문건의 권리는 모두 Microsoft 에 귀속됩니다.)


이 항목에는 사용자 암호 관리에 대한 정보 및 코드 예가 들어 있습니다.

다음 C# 코드 예에서는 IADsUser::SetPasswordadsi.iadsuser_setpassword 메서드를 호출하여 사용자 암호를 설정하는 방법을 보여 줍니다. IADsUser::SetPassword에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "IADsUser::SetPassword"를 참조하십시오.

 
usr.Invoke("SetPassword", SecurelyStoredPassword);

다음 C# 코드 예에서는 IADsUser::ChangePasswordadsi.iadsuser_changepassword 메서드를 호출하여 사용자 암호를 변경하는 방법을 보여 줍니다. IADsUser::ChangePassword에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "IADsUser::ChangePassword"를 참조하십시오.

 
usr.Invoke("ChangePassword", OldSecurelyStoredPassword, NewSecurelyStoredPassword);

다음 C# 코드 예에서는 다음 로그온 시 사용자 암호를 변경할 수 있도록 설정하는 방법을 보여 줍니다. 이 경우 pwdLastSetadschema.a_pwdlastset 속성을 off(-1)로 설정합니다. adschema pwdLastSet 특성에 대한 자세한 내용은 MSDN Library(http://msdn.microsoft.com/library)의 "pwdLastSet" 또는 "Pwd-Last-Set attribute"를 참조하십시오.

 
usr.Properties["pwdLastSet"].Value = -1; // To turn on, set this value to 0.
usr.CommitChanges();

 

다음 C# 코드 예에서는 암호를 변경하는 사용자 권한을 거부하도록 ACE를 설정하는 기능을 보여 줍니다. 이 경우 ntSecurityDescriptor 속성을 가져올 수 있도록 IADsSecurityDescriptor에 액세스하는 데 ADSI 액세스에 COM 상호 운용성 사용를 사용합니다. 그런 다음 IADsAccessControlList를 사용하여 보안 설명자의 DACL을 가져오고 IADsAccessControlEntry를 사용하여 AceType, AceFlags, Trustee, Flags, ObjectType 및 AccessMask 속성을 가져옵니다. AceType 플래그는 ADS_ACETYPE_ENUM에 정의되어 있습니다. AceFlags는 ADS_FLAGTYPE_ENUM에 정의되어 있습니다. AccessMask 플래그는 ADS_RIGHTS_ENUM에 정의되어 있습니다.

 
using System;
using System.DirectoryServices;
using ActiveDs;

static void DenyChangePassword(DirectoryEntry User)
{

	const string PASSWORD_GUID = "{ab721a53-1e2f-11d0-9819-00aa0040529b}";
	const int ADS_UF_PASSWORD_EXPIRED=0x800000;
	const int ADS_UF_TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION=0x1000000;

	string[] trustees = new string[]{@"NT AUTHORITY\SELF","EVERYONE"};
	

	ActiveDs.IADsSecurityDescriptor sd = (ActiveDs.IADsSecurityDescriptor)

	User.Properties["ntSecurityDescriptor"].Value;

	ActiveDs.IADsAccessControlList acl = (ActiveDs.IADsAccessControlList) sd.DiscretionaryAcl;

	ActiveDs.IADsAccessControlEntry ace = new ActiveDs.AccessControlEntry();

	foreach(string trustee in trustees)
	{
		ace.Trustee = trustee;
		ace.AceFlags = 0;
		ace.AceType = (int)ActiveDs.ADS_ACETYPE_ENUM.ADS_ACETYPE_ACCESS_DENIED_OBJECT;
		ace.Flags = (int)ActiveDs.ADS_FLAGTYPE_ENUM.ADS_FLAG_OBJECT_TYPE_PRESENT;
		ace.ObjectType = PASSWORD_GUID;
		ace.AccessMask = (int)ActiveDs.ADS_RIGHTS_ENUM.ADS_RIGHT_DS_CONTROL_ACCESS;
		acl.AddAce(ace);
	}

	sd.DiscretionaryAcl = acl;
	User.Properties["ntSecurityDescriptor"].Value = sd;
	User.CommitChanges();
}

다음 C# 예에서는 암호를 변경하는 사용자 권한을 거부하도록 ACE를 설정하는 기능을 보여 줍니다. 이 예에서는 .NET Framework 2.0에서 사용할 수 있는 관리되는 ACL 기능을 사용합니다.

using System;
using System.DirectoryServices;
using System.Security.Principal;
using System.Security.AccessControl;

static void DenyChangePassword(DirectoryEntry user)
{
    // Create a Guid that identifies the Change Password right.
    Guid changePasswordGuid = 
        new Guid("{AB721A53-1E2F-11D0-9819-00AA0040529B}");

    // Get the ActiveDirectorySecurity for the user.
    ActiveDirectorySecurity userSecurity = user.ObjectSecurity;

    // Create a SecurityIdentifier object for "everyone".
    SecurityIdentifier everyoneSid = 
        new SecurityIdentifier(WellKnownSidType.WorldSid, null);

    // Create a SecurityIdentifier object for "self".
    SecurityIdentifier selfSid = 
        new SecurityIdentifier(WellKnownSidType.SelfSid, null);

    // Create an access rule to allow everyone the change password 
    // right. 
    // This is used to remove any existing access rules.
    ActiveDirectoryAccessRule allowEveryone = 
        new ActiveDirectoryAccessRule(
            everyoneSid,
            ActiveDirectoryRights.ExtendedRight, 
            AccessControlType.Allow, 
            changePasswordGuid);

    // Create an access rule to deny everyone the change password right.
    ActiveDirectoryAccessRule denyEveryone =
        new ActiveDirectoryAccessRule(
            everyoneSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Deny,
            changePasswordGuid);

    // Create an access rule to allow self the change password right.
    // This is used to remove any existing access rules.
    ActiveDirectoryAccessRule allowSelf =
        new ActiveDirectoryAccessRule(
            selfSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Allow,
            changePasswordGuid);

    // Create an access rule to deny self the change password right.
    ActiveDirectoryAccessRule denySelf =
        new ActiveDirectoryAccessRule(
            selfSid,
            ActiveDirectoryRights.ExtendedRight,
            AccessControlType.Deny,
            changePasswordGuid);

    // Remove any existing rule that gives "everyone" the change 
    // password right.
    userSecurity.RemoveAccessRuleSpecific(allowEveryone);

    // Add a new access rule to deny "everyone" the change password 
    // right.
    userSecurity.AddAccessRule(denyEveryone);

    // Remove any existing rule that gives "self" the change password 
    // right.
    userSecurity.RemoveAccessRuleSpecific(allowSelf);

    // Add a new access rule to deny "self" the change password right.
    userSecurity.AddAccessRule(denySelf);

    // Commit the changes.
    user.CommitChanges();
}

다음 코드 예에서는 암호가 만료되지 않도록 설정하는 방법을 보여 줍니다. 이 경우 ADS_USER_FLAG_ENUM에 정의되어 있는 ADS_UF_DONT_EXPIRE_PASSWD 플래그를 설정할 수 있도록 userAccountControl 속성에 액세스하기 위해 Properties 메서드를 사용합니다.

using System;
using System.DirectoryServices;
using ActiveDs;

static void DontExpirePassword(DirectoryEntry User)
{
    int val;
    const int ADS_UF_DONT_EXPIRE_PASSWD =0x10000;
    val = (int) User.Properties["userAccountControl"].Value;
    User.Properties["userAccountControl"].Value = val | 
        ADS_UF_DONT_EXPIRE_PASSWD;
    User.CommitChanges();
}


728x90

장모님 핸드폰을 스마트 폰으로 변경해드리고 싶은 마음에 8월 말에 기계값 1000원 대란에 동참하려는 찰나, 여러가지 문제로 인해 결국 실패했고 9월이 넘어가자 모든 정책들은 종료하게 되고 결국 대란은 잠들어 지금은 잠잠한 시기.
( 뽐뿌 휴대폰 게시판 기준 : 2012/09/06 )

별 매리트 없어 보이는 기계 할부 원가가 10여만원이 넘거나 해서 그렇게 매력적이지 않은 물건만 가득차 결국 중고폰을 마련해서 하나 해드려야 겠다는 생각이 들었다.

 

뽐뿌와 함께 클리앙 중고사이트를 들락 거리던 중, 이런 저런 중고 핸드폰들을 보고 있는데, 요 근래 아이폰 물건이 많이들 쏟아지고 있었다. 원래는 갤럭시 노트 정도로 생각하고 뒤지고 있었는데, 대략 가격이 25~45만원 선에 걸쳐 있어 고민을 무척했다. 사실 그 정도 금액이면 옥션 중고로 해서 구매하면, 카드 결제와 같은 부분도 있어 차라리 옥션 중고로 넘어갈까도 생각했다.

그러다 어느날 아이폰 3GS 중고가 9만원에 올라와 있었다. 설마 했다. 뭔가 큰 하자가... 심한 전투형이거나, 아니면 부품용 아닐까? 했는데, 사진을 보니 그리 나빠보이진 않았다. 그리고 저녁에 결심하고 문자를 보냈다.

다행이 답변은 도착했고, 긍정적인 흐름이였다. 그런데, 갑자기 판매자에게서 다양한 사진들이 올라오면서 "이래도 사실래요?" 라는 .... 문자가...

C139917e1e0fC139917e1e4aC139917e1e30C1399168db35C13991773665Untitled

"엥 뭐가?" 라는 느낌으로 바라보는데, 의외로 좀 문제가...

첫번째로는 전원 버튼이 없었다. 뭐 게시물에도 언급되어 있지만, 막상 없으니...

두번째로는 액정 한가운데에 짧게 긁힌 상처가... 저 여자 사진 부분인데, 크게 보면 무슨 흉터 처럼 위에서 아래로 길게 상처가 있는데, 그 부분이다. 대충 보면 모르는데, 동영상이나 사진등을 보면 해당 위치가 마치 액정 나간거 처럼 여러가지 빛깔로...

세번째는 여기저기 스크래치도 있고, 약간의 크랙과 특유의 기름과 먼지가 뭉쳐진 곳도 많았다.

사실 고민이 되었다. 어떻게 할까... 생각해보니, 저것들 외에도 배터리나 기타 미처 발견하지 못한 하자부분을 A/S 맡길 예정인데, 견적이 쎄게 나올까 걱정이 들었다. 그렇다면, 9 + 10여만원(미정) 해도 20만원 찍는거 아닌가?

갑작스레 후회가....

그리고 다음날... 일단 구매하는걸로 문자를 때리고, 대신 가격을 8만원으로 낮추었다. 개인적인 욕심으로는 5만원까지 떨굴까도 했지만, 뭐....능력 밖.

결국 저녁에 만나 물건을 받았다. 처음 내 USIM 칩을 박았는데 ,잘 안되는데, 알고 봤더니, 꼽고 한번 켠 뒤에 다시 재 부팅을 하면 인식을 했던 것이다. 간신히 재부팅해서 이것 저것을 해보았다.

집사람 폰이 아이폰4 라서 몇 번 만져본 경험에 따르면, 일단 해상도가 꽝. 진짜 보기가 영 아니올씨다 였다. 심지어 지금 내가 들고다니는 폰인 넥서스S에 비하면 한참이 떨어지는.. 그런 해상도

제일 중요한 부분. 어르신을 위한 편의 장치를 찾아보았다. 조금 기대를 했는데, 생각했던 것과는 전혀 달랐다. 일단 키보드 부분. 이건 애플에서 완전 Lock을 걸어 놓았는지, 조그만한 기본 쿼티 키보드만 나온다. 물론 나를 포함한 3~40대 전 세대에게는 익숙한 자판이고, 어렵지는 않지만, 나이드신 장모님에게는 GG.

게다가 화면의 전반적인 Text를 키우고 싶어도 방법이 전혀 없었다. 화면 자체를 Zoom In/Out 하는 기능은 있지만, 손가락 세개를 가지고 여기저기를 누비는 것도 한계가 있고 여러가지로 마음에 많이 걸렸다.

이런 저런 편의성 도구들을 찾아보다가, 결국 포기했다. 도무지 답이 없었다.

그러다 문득... 안드로이드 폰이면? 이라는 생각으로 내 폰을 이용해서 이런저런 작업을 해보았고, 결론을 내릴 수 밖에 없었다.

"내 폰은 장모님께, 나는 아이폰 3GS"

 

의도하지도 생각치도 않았는데, 아이폰을 쓸 수 밖에 없었다.

 

IMG_20120906_130218IMG_20120906_130227IMG_20120906_130303IMG_20120906_130323IMG_20120906_130339

하얀색... 마음에는 들지만, 제대로 쓸려면.. 일단 A/S 부터 해야 하겠다. ㄷㄷㄷ

728x90

UPDATE : http://www.hind.pe.kr/1166 에 보시면 자동(?) 업데이트 도구를 마련했습니다. 다른 기종은 모르겠지만, NEXUS S 라면 저 도구를 써보세요. ㅋ


UPDATE : 처음에는 Radio ROM을 이전 ICS 버전의 ROM을 사용하는 형태로 작성했습니다. 하지만, 주말 내내 실사를 해보니, 젤리빈에서 제공하는 순수한 Radio ROM 보다 그 기능이 떨어지는 것 같습니다. 첫번째로 발열이 심해지면서 밧데리 수명도 짧아지더군요. 그리고 3G 데이터 통신 속도도 의외로 떨어지고요. 그래서 이번 글에서 ICS의 Radio를 심는 부분은 모두 없앴습니다.

fastboot.zip

 

usb_driver.zip

 

젤리빈이 7월 15일경에 발표되었고, OTA로는 8월 초에 배포 된 것 같다. 예전 부터, World Wide 버전의 순정을 얹어놓고 살고 있다가 갑자기 OTA가 떨어져서 업데이트해서 잘 썼었다. 그러다가, 순정롬으로 한번 다시 밀어볼 결심이 생기고, 이번에 한번 다시 밀어보는 작업을 남겨 본다.

먼저 준비해야 할 것은 Fastboot가 실행가능하도록 구성해야 한다. 그럴려면, Andriod용 Driver가 정상적으로 설치되어 있어야 하며, fastboot 실행을 위한 파일들이 있어야 한다. Android용 Driver나 fastboot은 모두 Android SDK안에 있는데, 용량도 크고 원하는 것만 받기 어렵다고 생각이 들어, 이 페이지 안에 첨부로 올린다.

Andriod 드라이버 파일은 첨부한 파일을 다운받으시고, 설치는 http://mynexusone.tistory.com/1 사이트를 참고해 설치한다.

다음은  fastboot 도구. 이 도구도 여기 첨부 파일을 다운로드 받으면 된다.

일단 Android 용 Driver 설치가 끝나고 fastboot 준비도 다 되었으면 이제 공장초기화용 이미지를 받는다.

 

이미지 다운로드

공장 초기화용 이미지는 https://developers.google.com/android/nexus/images?hl=ko-KR 에서 다운을 받는다.

받아야 될 이미지는 Android 4.1.1(JRO03E) 라는 이미지 이다.
(그 사이 또 업데이트 되었군요. 4.1.1 이였다가, 확인해보니, 4.1.2 버전이 되었습니다. 기존에는 JRO03L 이미지기준으로 배치 파일을 만들어 업데이트 했지만, 4.1.1 이미지 자체가 아예 없더군요. 대신, 아예 구글에서 배치 파일로 만들어서 제공합니다. 즉 제가 만든 배치 파일은 더 이상 없어도 될 것 같습니다. 공장 초기화용 롬 파일의 압축을 풀어서 보이는 FLASH-ALL.BAT 파일을 직접 실행하시면 됩니다. )

순정롬들은 모두 tgz 이라는 확장자로 압축이 되어 있는데, linux/unix에서 일반적으로 사용되는 압축으로 tar + zip 이다. 그래서 압축을 두 번 풀어야 한다. 빵집이든, 알집이든, 7Zip이든, 압축을 풀면, 그 안에 다시 압축된 파일이 하나씩 생기는데, 다시 그 파일의 압축을 풀면 된다. 푸는 방법은 아래의 그림과 같이 풀면 된다. ( 아래의 예제는 7-Zip )

 

압축을 다 풀면 위와 같은 파일 목록을 볼 수 있다.

여기서 주목해야 할 파일은 3개의 파일이다.

  • bootloader-crespo-i9020xxlc2.img -> 젤리빈용 부트로더
  • image-soju-jro03e.zip -> 젤리빈 System 파일
  • radio-crespo-i9020xxki1.img -> 젤리빈 Radio ROM

즉 펌웨어에 사용될 파일은 위와 같이 총 세가지로 나머지 파일들은 삭제해도 무방하다.

 

펌웨어 업데이트 전에 백업하기

이게 제일 중요. 백업하는 방법은 수도 없이 많지만, 애석하게도 이 작업을 위한 백업 방법은 필자도 모른다.

다만, 이 순정롬 업데이트 방식은 진짜 완전 초기화를 하기 때문에, 기존에 설정되어 있거나 저장된 내용이 모두 지워진다. 그러므로, 중요한 데이터가 있거나, 급하게 전화를 쓸데가 있으면 이 작업을 더 이상 진행하지 마시고, 정식 젤리빈 ROM이 OTA를 기다리는게 낫다. ( 이전 문자메시지나, 카톡 메시지, 기타 설정데이터들 등등 Google에서 백업 서비스가 지원되지 않는 모든 항목은 다 지워진다 )

적당히 알아서 백업할 수 있거나, 중요한 내용이 없다면 이 부분을 건너 뛰겠다.

필자의 경우에는 공인인증서나 카메라로 찍은 사진, 가계부 정도 밖에 없어서, 적당히 USB로 복사해서 보관했다.

 

Fastboot 준비하기.

먼저 앞서 다운 받은 fastboot 파일들을 이미지가 있는 폴더와 함께 몰아 넣는다. 이제 작업은 도스창에서 하게 되므로, 도스창에서 접근하기 쉬운 폴더이어야 편하다.

자 이제 압축을 풀었으면, 펌웨어 업데이트를 본격적으로 시작한다.!

 

펌웨어 업데이트

먼저 nexus S를 종료한다. 완전히 전원을 끄고, USB로 컴퓨터와 Nexus S를 연결한다.

그리고 볼륨 업 버튼을 누른 상태로 전원 버튼을 눌러서 켜준다.

제대로 켜지면 아래와 같은 화면이 보인다.

자 이 상태에서 도스창을 연다.

그리고 압축 풀린 위치로 이동한다.

이미지와 fastboot 관련 파일 및 flash-all.cmd 파일이 있는 것이 모두 확인되었다면, 도스창에서 flash-all.cmd 를 실행한다.

그러면 Nexus S 폰의 화면이 나오는데, Unlock을 할 것인지 나온다. 볼륨 업 키를 눌르면 Yes로 바뀌는데, Yes 상태에서 전원 버튼을 누르면 된다.

전원을 눌러 Unlock을 했으면, 이제 도스창을 보면 pause 되어 사용자 입력을 기다리는데, 아무 키나 입력하면 펌웨어 업데이트를 시작하게 된다. 이 때, 중요한 것은 한 단계씩 실행되는데, 단계 단계 마다 도스 창에서 Pause가 되서, 사용자의 입력을 기다리게 된다. 이 때 막 누르지 말고! 반드시 부트로더 초기화면인지 확인하고 키를 입력해야 한다.(안드로이드 로봇이 표시되는 화면)

 

여튼, Pause 상태에서 아무키를 입력하면, 자동으로 Nexus S에 bootloader를 기록하는데, 기록이 완료되면 자동으로 리셋되면서 다시 처음 화면으로 돌아온다.

부트로더가 제대로 올라갔으면 다시 도스창에서 아무키나 입력한다.

그러면 Nexus S에 Radio Rom이 기록되고, 다시 리셋된다.

이제 아무키나 입력하면 System을 업로드 한다. 이 작업은 대략 1분 정도 걸린다. 컴퓨터에 부하 줄 수 있는 부분은 최대한 배제하고 그대로 두도록 한다. 도스 화면상에 업데이트 되는 항목들을 계속 표시해 주게 된다.

이제 이 작업이 완료되면, 도스창은 완전 종료되어 끝나고 Nexus는 자동 리셋되고, 젤리빈이 되었음을 확인할 수 있다. USB를 분리하신 후, 이제 부팅 완료되면, 초기 화면에서 초기 설정을 잡아주기만 하면 된다.

 

정리

공장 초기화롬을 적용하는 것은 생각보다 어렵지 않다. 다만, 왠지 그래픽 화면으로 동작하지 않아서, 원시적으로 느껴져서 그렇지 사실 펌업 조작 자체는 그렇게 어렵지는 않다. 개인적으로는 커펌 올리는 방법보다 간단하다는 생각이다.

초기화가 진짜 초기화라서 문제라면 문제랄까?

나중에, 저 배치파일을 .NET 윈도우 GUI 화면으로 만들어봐야 겠다.

 

PS.
일부 캡쳐 화면에서는 아직도 ICS의 Radio ROM 이름이 보이는데, 무시하시고, 그냥 진행하시기 바랍니다.

PS2.

업그레이드 되면 flash-all.cmd 파일을 열어 업그레이드 된 부분의 파일이름만 변경하고 사용하시면 됩니다. 일단 젤리빈 4.1.1. JRO03L 버전 배치파일은 별도로 올리긴 했습니다.


adb.zip


728x90

아침에 접속을 해보니, 갑자기, 위자드 팩토리(http://wzdblog.tistory.com/445) 측에서 위젯 기능에 대한 사업을 접기로 결심을 한 메시지가, 내 위젯상에 표시되었다. 지금껏 사용한 위젯이 Twitter 연결해주는 위젯이였는데, 이젠 더 이상 사용할 수 없다는 회사측의 의견이였다.

결국 해당 위젯을 없애야 되는 지경에 이르렀고,
내 나름대로 생각해본 결과 딱히 대치할만한 무언가가 존재하지 않았다. 그러다, 문득… 예전에 신청만 해놓고, 연결해본 기억이 없던 Google AD Sense가 생각났고, 내친 발걸음, AdSense나 붙여버리자 라는 어이없는 결심으로 결국 붙였다. 물론 사이트에 영향이 없도록 맨 끝자락에 붙였다.

붙일 때, 소스 정리가 조금 필요했는데, 예전, 유니클로 시계 붙인다고 깝쭉 될 때 넣었던 코드가 있었다. 지금 보니까, 그 코드 때문에, 내 사이트에만 들어오면 플래시를 그렇게 갈구 했나보다. 그래서 낼름 지워줬다. 그리고 Tistory에서 제공하는 사이드바 모듈 중에서 "HTML 배너출력" 이라는 모듈을 이용해서 AdSense 소스를 가져다 붙였다.
( 이미 예전에 AdSense관련 신청을 마친 상태라, 이미 소스는 나와있었다. )

그러면서 혼자, 모듈을 위로 올렸다 내렸다 하면서 정리를 했다.

막상 여기까지 가니, 기왕 손댄거, 아이콘과 Favicon까지 손대보았다.

Profile에 있는 이미지를 꺼내 사이즈를 손보고 Icon으로 등록했고, 그 아이콘을 다시 Favicon으로 변경했다.
( http://www.favicon.co.uk/index.php )

그래서 정리한 버전이 지금 버전.

 

나중에, 한번 더 밥상 뒤집듯 뒤집어 까보겠지만, 그 전에 글이나 자주 올려야 겠다. ㅎㅎ

728x90

지금 사용하는 Phone은 Nexus S이다. Google Reference Phone 이다 보니, Google에서 발표한 신버전 안드로이드 ROM은 바로 바로 만들어져 올라간다. ( https://developers.google.com/android/nexus/images?hl=ko-KR )

7월 10일 경 즈음 OTA를 통해 젤리빈 업그레이드가 시작되었는데, 내 폰에도 떨어졌다.
오해의 소지가 있을지 모르겠는데, 현재 내 Phone의 ROM은 영문판으로 world wide 버전의 i9020t 와 i9023용이다.
한국에서 사용되는 ROM 은 m200 용이라고 하는데, 현재까지 m200용 젤리빈 롬은 올라오지 않은 상태로 봐서, 아직 한국어 ROM에 OTA는 적용되지 않을 것으로 안다.

여튼, 내 Phone의 이전 롬은 4.0.4 (IMM76D) for i9020t, i9023 으로 "soju" 라는 프로젝트 명을 달고 있는 Factory Image로 설치되어 있었다. 당연히 ICS(Ice Cream Sandwitch) 였다. 한 달 전 즈음 갑자기 새로운 업데이트가 생겼다는 화면이 뜨고, 확인을 하라고 해서 확인했더니 OTA를 통해 업그레이드를 시작했다.

업그레이드 후 최초로 뜨는 화면은 단순하게 뜨는 "X" 라는 글자에 각 끝자락이 색이 변하는 아주 단순한 애니메이션으로 바뀌었다. (ICS는 현란하긴 한데, 왠지 버벅이는 기분이 들어 별로 마음에는 안들었다. )

첫 부팅을 하면 맨 처음 나오는 화면에서 잠금 해제를 나타내는 애니메이션이 조금 달라졌다. 자물쇠 아이콘 주변으로 불꽃놀이처럼 팍 터지는 느낌. 화려하지는 않지만, 집중도는 있어 보였다.

잠금 해제를 하려고 할 때 보면 기존과는 다르게 위쪽에 "Google" 이라는 표시가 나타난다. 아마도 Google Current 같은데, Google과 바로 연결해서, Google에서 제공되는 각종 정보들을 쉽게 나타내려 하는 의도 같다. ( 하지만 개인적으로는 별 사용도가 없다는... )

        

 

그리고 로그인 해서 들어가보면, 기존 ICS에 비해 달라진 내용은 거의 없다. 전체적인 Blue 빛 Layout도 그대로 유지 되었고, 기타 각종 UI 배치나, 구성도 ICS와 동일하다. 그래서 버전도 (4.1.1) 인듯.

화면 상의 변화로 본다면, 응용 프로그램 전환 시 약간의 애니메이션이 추가되어 마치 기존에 띄워놨던 응용 프로그램이 떨어져 나가는 듯한 애니메이션 정도?

 

개인적인 관점에서 바라봤을 때 젤리빈으로 업그레이드 하고 난 뒤의 변화점은 아래와 같다.

  • 화면 전환이 ICS 때 보다 빠른 느낌이다.
    진짜 느낌이다. ICS 때 보다는 화면 전환이 빠르다고 느껴진다. 물론 극적으로 빨라졌다고 표현하기에는 무리지만, 그래도 확실히 예전 보다는 전환이 빠르다고 생각된다. 예전에는 한 타임을 쉬었다 가는 느낌이면, 지금은 바로 넘어가는 느낌이다. 아마도 화면 전환 애니메이션이 중간에 껴서 그럴 수 도 있겠다.
  • 다운 타임이 줄었다.
    ICS에서는 종종 사용하다가 가끔 앱이 알 수 없게 죽는 경우가 발생했다.
    정확히 어떤 앱이 그런 현상을 발생시키는지는 기억을 할 수 없지만, 최소한 ICS에서 젤리빈으로 업그레이드 할 때, 그대로 있는 앱들을 실행할 때, 예전보다는 그나마 나아진 것 같다.
    또, 잠긴 화면에서 전화가 왔을 때, 터치가 안되는 현상도 예전보다는 적어졌다. 하지만, 여전히 간혹가다 발생하는 것 같다.
  • USB 파일 송/수신 속도가 향상.
    확실히 느낄 수 있다. 예전에는 마치 USB 1.0으로 파일 복사하는 느낌이였다면, 지금은 2.0 으로 처리되는 것 같다. 음악 파일들을 자주 넣었다 뺐다 하는데, 예전에는 복사를 걸어놓고 화장실 갔다면 지금은 바로 처리되는 것 보고 난 뒤 갈 수 있다고나 할까? 극단적으로 빠르다고는 볼 수 없지만, 이 부분은 상당히 개선된 것 같다.
  • 그 외
    막상 쓰려고 보니 그다지 없다.
    기타 Google에서 전하는 변경된 사항은 http://www.android.com/whatsnew/ 에서 참고하면 된다.

 

뭐 강추 강추 하는 레벨은 아니지만, 잦은 다운타임과 불편함을 호소하고 있다면 한번 즈음 젤리빈으로 써보는 것이 좋을 것 같다. ( 젤리빈으로 해보았는데도 잦은 다운타임과 불편함이 쏟아진다면, 앱 문제거나, 사용 방법 혹은 사용 기대치가 너무 높아서 일 수 있다. - 이건 방법이 없고, 그냥 아이폰 같은 선진화된 폰으로 갈아타심이.... )

아직은 영문 ROM에서만 되기 때문에, 사용은 못해보겠지만, 조만간 한국어 ROM이 나온다면 굳이 거부까지는 할 필요가 없어보인다.

 

마지막으로 강조하는데, 지금 이 글은 Nexus S, Nexus Gallaxy 용으로써, 다른 메이커( 삼성, LG, 팬택 등등 )의 제품들에서는 각 메이커에서 업그레이드 할 때까지 기다려야 한다. ICS 때와 마찬가지로 Jelly bean 으로 업그레이드를 지원할지 여부도 각 메이커가 결정할 것이다.

 

덧. 넥서스7에서는 이 젤리빈이 탑재된다고 하는데, 아마도 이 젤리빈의 기능을 잘 활용한 장치가 되지 않을까 싶다.

728x90

집에는 팩스가 없고, 사무실에 있는 팩스 머신에는 전화선이 없어서 개인적으로 팩스를 보낼 때는 보통 인터넷 팩스를 자주 이용한다.

그런데, 이번에 아들녀석에 대한 보험금 처리 때문에, 많은 양의 팩스를 보내게 되었는데, 문제는 웹 기반의 인터넷 팩스에서는 여러장을 입력하기가 무척 불편한 구조로 되어 있다. 일단 한장씩 등록하게 되어 있는데, 그것도 장당 최대 용량은 5M 이하여야 되고, 한번에 모두 올릴 수 있는 양이 10M 안쪽이다.

문제는 스캔한 이미지를 가지고 올리게 되는데, 아무생각없이 스캔한 이미지는 저 사이즈는 훌쩍 뛰어 넘는다.

어쨌던 귀찮던 힘들던 간에, 하나씩 올리기는 했는데, 이번에는 팩스 전송이 실패하는 바람에 귀찮고 힘들게 올린 문서는 공중 분해. 다시 하나씩 올려야 되는 아픔이 있었다.

그래서 스캔한 이미지를 팩스로 올리기 편하도록 팩스용 Tiff 파일을 만드는 프로그램을 만들었다.

어떤 형태로 스캔을 한 이미지라도, 팩스로 보내기 위해서는 어느 정도 이미지 정리를 해야 한다.

  1. 첫번째로는 흑백 이여야 한다.
  2. 두번째는 해상도가 가로는 294 dpi, 세로는 190dpi 여야 한다. ( 최고급 팩스라도 저 이상의 크기는 지원하지도 않고, 잘 되지도 않는다. )
  3. 세번째는 압축 규칙을 CCITT 규약에 맞게 압축한 이미지 여야 한다.

이 세가지 조건만 만족하면 간단하게 팩스 보내는 이미지가 완성된다.

더욱이 TIFF 파일은 파일 내에 여러장의 페이지를 넣을 수 있는 구조이기 때문에, 여러 장으로 된 하나의 문서일 경우 여러장을 담은 하나의 파일로 만들 수 있다.

위의 조건을 충족하는 TIFF 파일을 만드는 도구를 급하게 만들어 봤다.

사용법은 간단.

Add 버튼을 눌러 이미지를 추가한다. (추가 가능한 이미지는 JPG, PNG, BMP 등이다. )

그리고 불필요한 이미지를 추가했으면 선택한 뒤에 Del 버튼을 누른다.

페이지의 순서를 변경하려면, UP/Down 버튼을 눌러 위치를 변경한다.

최종적으로 배치가 끝나면 Convert 버튼을 눌러 Tiff 파일로 저장한다.

등록한 이미지를 모두 없애고 처음부터 다시 하려면 Clear 버튼을 클릭하면 된다.

 

기타 사용상 편의 사항 따윈 일체 없다. ( 사용하다가 불편하면 첨부로 올린 소스를 직접 편집해서 필요한 대로 수정해서 쓰시면 된다. ) 단지, 필자가 편리하게 써보려고 만들어 보았다.

 

이 프로그램은 .NET FrameFramework 2.0 기반으로 구성되어 있으며, 개발은 Visual Studio 2010 에서 했다. (Visual Studio 2010 Express에서도 컴파일 가능 )

PS. 바로 전에 다니던 회사가 이미지 관련된 어플리케이션 개발하던 곳인데, 그 회사에서 개발했던 경험이 이렇게 유용하게 나올 줄은 몰랐다. – 물론 그 회사에서 사용한 기술은 사용하지 않고, 순수 .NET Framework 만들어 개발했다. – 다만, TIFF 개념이나, FAX 개념을 이해하는데 많은 도움이 된 것은 사실이다.

** UPDATE : 2012/08/08
프로그램 내 버그가 발생할 때마다 소스와 릴리즈를 압축하여 여기에 업로드하는 불편함 때문에,
네이버 개발자 센터를 이용하여 업로드를 할 예정이다. 접속하기 위한 네이버 개발자 센터 URL은 다음과 같다.

http://dev.naver.com/projects/imgconvertforfa/

빌드된 최신 버전 파일은 아래의 링크에서 다운 받을 수 있다.

http://dev.naver.com/projects/imgconvertforfa/download

코드는 SVN을 통해 다운로드가 가능하다. 필요하면 해당 프로젝트에 참여자로 등록도 가능하다.
(비밀댓글로 자신의 네이버 아이디를 알려주시면 됩니다. )

728x90

http://www.slideshare.net/soomong/a-pattern-language-for-study-groups

XPER 메일링 글을 읽다가, 스터디 그룹에 대한 글에 대한 링크가 있어서 보았다.

스터디 그룹에 대한 전반적인 분석과 어떻게 해야 스터디 그룹이 잘 활성화 되고, 발전이 될 수 있을까에 대한 분석과 정의들을 내린 슬라이드이다.

일단 크게 보면, 다음과 같은 조건들이 만족해야 할 것 같다.

  1. 스터디 주제.
  2. 스터디 구성원
  3. 스터디 장소.
  4. 스터디 그룹의 리더

장소나 주제는 문제가 없지만, 역시 구성원과 리더와 같은 사람문제는 쉽지 않은 것 같다.

같이 공부할 사람이나, 또 그 공부를 이끌 멘토 같은 사람이 필요한데, 그다지 쉬워보이지는 않는다.

나중에 스터디 그룹을 해보거나, 참여하게 된다면 이런 부분을 차근 차근 더 깊이 생각해보아야 겠다.

728x90

 Original Document from 심카드몰 ( http://www.simcardmall.com/ )

728x90

+ Recent posts

728x90