'분류 전체보기'에 해당되는 글 417건

  1. 2014.09.16 내 명함
  2. 2014.07.09 myBatis에서의 동적쿼리 - 1. foreach 1
  3. 2014.05.09 Tomcat Context Reloader
  4. 2014.05.08 프로젝트 수행 계획서
  5. 2013.11.15 Background gradient
  6. 2013.07.19 [안드로이드] 디컴파일 되지 않는 시스템어플 디컴파일 하기
  7. 2013.05.25 Android Native Heap Size
  8. 2013.02.25 MySQL 백업 및 복구
  9. 2012.12.13 HTML 특수문자코드표
  10. 2012.11.08 특정프로세서 죽이는 스크립트 [출처] 특정프로세서 죽이는 스크립트|작성자 Nams
2014. 9. 16. 18:23

내 명함








2014. 7. 9. 23:14

myBatis에서의 동적쿼리 - 1. foreach




iBatis에서의 습관을 버리고 myBatis로 옮겨올  시기가 된듯합니다.

Spring3.2에서도 iBatis는 deprecated 되어 더이상 myBatis로 옮기는데 주저할수는 없는 현실이 되어버렸습니다.

 

오늘은 예전 iBatis에서 iterate 문으로 사용했던 부분을 forEach로 변경하는 테스트를 시험삼아 해보았습니다.

myBatis를 쓰면서 느끼는것은 이제 xml문법스타일은 버려도 되겠구나 하는 것입니다.

 

foreach

동적 SQL 에서 공통적으로 필요한 것은 collection 에 대해 반복처리를 하는 것이다. 종종 IN 조건을 사용하게 된다. 예를 들면,

<select id="selectPostIn" resultType="domain.blog.Post">
  SELECT *
  FROM POST P
  WHERE ID in
  <foreach item="item" index="index" collection="list"
      open="(" separator="," close=")">
        #{item}
  </foreach>
</select>

foreach 요소는 매우 강력하고 collection 을 명시하는 것을 허용한다. 요소 내부에서 사용할 수 있는 item, index 두가지 변수를 선언한다. 이 요소는 또한 열고 닫는 문자열로 명시할 수 있고 반복간에 둘 수 있는 구분자도 추가할 수 있다.

참고 파라미터 객체로 MyBatis 에 List 인스턴스나 배열을 전달 할 수 있다. 그렇게 하면 MyBatis 는 Map 으로 자동으로 감싸고 이름을 키로 사용한다. List 인스턴스는 “list” 를 키로 사용하고, 배열 인스턴스는 “array” 를 키로 사용한다. 

 

 

 

위의 내용은 myBatis 한국어 사이트 번역판에 설명되어진 것입니다만 사실 제대로된 설명이라고 하기엔, 특히나 개발감각 없는 저 같은 개발자에겐 한방에 와닿지 않습니다.

 

그저 따라하기 예제 샘플이 최고입니다.

 

User.java

public class User {

  private int userIdx;

  private String userName;

  private Integer [] userIdxArray;

  private List<Company> compList;

  public ... 이하는 getter, setter 메소드이므로 생략.

 

 

}

 

 

1. 배열을 파라메터로 전달하여 foreach문을 사용하는 예

UserMapper.xml

<select id="getUserListByUserIdxArray" resultMap="User-Result" parameterType="User">

  SELECT

           USER_IDX as "userIdx"

, USER_NAME as "userName"

  FROM USER

  <trim prefix="WHERE" prefixOverrides="AND|OR">
         <if test="userIdxArray  != null">
           AND USER_IDX IN (
              <foreach collection="userIdxArray" item="a" separator=",">#{a}</foreach>
          )
        </if>
 </trim>

 

</select>

 

 

WHERE 문이 오는 곳에 위치한 trim  도 iBatis에는 없던 myBatis에서 새로이 추가된 구문입니다. 보통 꼼수(?)로

WHERE  1=1

위와 같이 사용하던 부분인데, 이러한 꼼수를 쓰지말라고 제공하는 구문이라고 생각합니다.

보통 if 문을 사용하는 곳 앞부분에 추가하는데, 이전 iBatis에서는 <dynamic...> 이란 구문이 아마 이에 해당했던 걸로 기억합니다.

 

- collection : 말 그대로 collection 객체들이 오는 곳입니다.

- item : Collection 객체들의 instance? 라고 할수 있습니다.  jstl에서의 forEach를 예로 들면 "var"에 해당하는 놈이라고 할수 있겠네요. 처음엔 글자가 jstl의 items와 비슷해서 같은걸로 이해했었습니다.

- separator : 구분자.

 

배열이기 때문에 이 alias를 그대로 넣어주면 쿼리에 적용됩니다. 

 

2. ArrayList를 파라메터로 전달하여 foreach문을 사용하는 예.

 

...

      <if test="compList  != null">
           AND COMP_NAME IN (
              <foreach collection="compList" item="a" separator=",">#{a.compName}</foreach>
          )
      </if>
... 

 

 

배열 사용법과 별 차이는 없습니다.

 

이전 iBatis를 사용할때는 array 객체가 필요할때는 이상하게 꼭 hashmap 객체에 넣어서 보냈던 기억이 있습니다. POJO 에 넣어서 보내면 뭔가 모르게 오류가 나서 잘 안되던 기억이 있었는데(어쩌면 사용법을 틀려서 그런걸수도 있겠지만), myBatis 에 와서는 그런부분이 없습니다. 좀더 명확해졌다고 해야할까요?

 

오늘은 myBatis의 foreach문을 통한 반복문 사용법을 테스트 해보았습니다.

 

끝.


출처 : http://gubok.tistory.com/386

2014. 5. 9. 11:34

Tomcat Context Reloader




Tomcat의 컨텍스트를 reloadable=“false”인 상태에서, Tomcat Manager를 설치하지 않은 상태에서 수동 Reload 할 수 있는 Valve를 만들어 보았다. Reload Tomcat Context manually(without manager or reloadable=“true” option).

설정

  • Tomcat Reload Valve 소스와 Jar 파일에서 tomcatreloadvalve.jar 파일을 $CATALINA_HOME/lib 로 복사한다.
  • server.xml 혹은 context.xml의 <Context> 항목에 Valve를 추가한다. 항상 <Context> 항목에만 추가해야 한다.
    <Context docBase="some" path="/some" reloadable="false" >
        <Valve className="kr.pe.kwonnam.tomcat.reloader.TomcatReloadValve"/>
    </Context>
  • reloadable=“false”로 둔다. 원래 이 Valve의 목적은 자동 Reloading을 끄고, 항상 수동으로 원하는 경우에만 Reloading하는 것이다.

실행

  • 웹브라우저 혹은 wget 등으로 http://localhost:8080/reloadContext 를 호출한다.
  • 실제 URL의 도메인네임 부분은 자신의 톰캣 설정을 따른다.
  • “Context Reloaded!!” 메시지가 나오면서 Reloading이 완료된다.

소스

package kr.pe.kwonnam.tomcat.reloader;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
 
import org.apache.catalina.Container;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.valves.ValveBase;
 
/**
 * Reload Tomcat Context by requesting URL
 *
 * Context의 reloadable="false"인 상태에서도 /reloadContext URL을 호출하면 해당 컨텍스트가 Reloading 된다.
 *
 * @author 손권남 kwon37xi@gmail.com
 *
 */
public class TomcatReloadValve extends ValveBase {
 
	private static final String RELOAD_CONTEXT_URI = "/reloadContext";
 
	@Override
	public void invoke(Request request, Response response) throws IOException,
			ServletException {
 
		Container container = getContainer();
 
		String requestUri = request.getRequestURI();
 
		String reloadUri = request.getContextPath() + RELOAD_CONTEXT_URI;
 
		if (requestUri.startsWith(reloadUri)
				&& container instanceof Context) {
			reloadContext(response, container);
			return;
		}
 
		getNext().invoke(request, response);
	}
 
	private void reloadContext(Response response, Container container)
			throws IOException {
		((Context) container).reload();
		HttpServletResponse httpResponse = response.getResponse();
 
		httpResponse.setContentType("text/plain;charset=utf-8");
		httpResponse.getWriter().write("Context Reloaded!!");
		httpResponse.getWriter().close();
 
		return;
	}
 
}

 

http://kwonnam.pe.kr/wiki/java/tomcat/contextreload


2014. 5. 8. 16:25

프로젝트 수행 계획서




프로젝트 수행 계획서라는 것이 있다...사용해본 사람도 있을 것이고 사용 안해본 사람도 있을 것이고...어떤이는 고객이 원하지 않으면 쓰지 않는다고 하고...(나도 사실은 그렇다...고객들이 대부분 삐까뻔쩍한 페이퍼웍을 요구하기 때문에 원하지 않는 경우는 나만 살짝 워드로 정리해 놓는다...)

과거(불과 몇년전)에는 생략된 경우가 많았다. 대부분 제안서에 들어있는 '수행방안' 부분을 참고해서 진행했으나 최근에 제안의 진실에 대해서 고객과 수행조직 모두 반신반의...분명한 구분이 필요하다고 합의되면서 수행계획서는 더욱 빛을 발하게 된다... 사실 수행계획서...How to에 대한 Plan...이 없다는 것 자체가 이상한 것 아닌가??


프로젝트 수행 계획서 왜 써야하나?
1. 프로젝트를 수행하기전 PM에게는 개념 정리의 기회를 제공...
2. 프로젝트 팀원들에겐 한눈에 프로젝트 전체를 볼 수 있게 함...
3. 진행 도중 새롭게 투입된 팀원에게 빠른 시간안에 프로젝트 정체성을 전파...(개발단계에 진입되면 별 의미가 없어진다...)
4. 프로젝트 수행 도중 모든 산출물들이 이 페이퍼에 귀속되어 진행되므로 수시로 꺼내보게 됨.
5. 비체계화, 비구체화된 제안상의 내용을 체계화, 구체화 함으로서 고객과의 실랑이때 증거물로 용이...
이처럼 다양한 이익이 있으므로 귀찮더라도 반드시 작성하도록 하자...

프로젝트 수행 계획서 누가 써야하나?
Project Manager 가 당연히 작성해야 한다.

프로젝트 수행 계획서에 무엇이 들어가야 하나?
일부 영업적인 마인드를 너무 많이 가진 PM이나 실제 수행 베이스가 약한 PM들은 페이퍼의 양에 승부를 걸고자 한다...실무에 도움이 되지 못하는 수행 계획서는 차라리 없는 것이 낫다...왜냐면 전달하고자 하는 의미가 너무나 모호하여 고객에게는 환상적인 기대치를 팀원들에게는 쓸데없는 질문들을 자아내어 PM 자신만 더욱 고달파 지기 때문이다...

수행계획서의 목차는 프로젝트의 성격에 따라 논리적으로 구성해주면 된다...
가장 일반적인 목차의 흐름은 1. 이번 프로젝트는 무엇인가? 2. 구체적으로 무엇을 만들려고 하는가? 3. 누가 만드는가? 4. 어떤 방법으로 만드는가? 5. 어떤 일정을 계획하고 있는가? 6. 마무리의 의미는 무엇이고 어떻게 할 것인가?

다음은 프로젝트 수행 계획서에 들어가는 일반적인 목차이다.
1. 프로젝트 개요 : 프로젝트 공식명칭, 목적, 목표, 수행내용(brief), 수행기간
2. 수행내역 : 내역별 작업설명(작업범위를 쓰면된다...작업범위에 대한 논란이 많으므로 단어 선택에 유의해야한다.), 개발항목 및 설명(가능하면 자세히 쓰야한다. 메인메뉴가 몇개이고 서브메뉴가 몇개인데..메인메뉴에는 가칭 이런이런 조런조런 것들이 있다...솔루션 패키지는 이런 이런것이 들어가고 대강의 메인펑션은 이런이런 것들이 있다...), 단계별 산출물
3. 수행조직 및 업무분장 : 수행조직도(가능하면 갑과을과병의 모든 관련 담당자를 집어넣도록 하자...가장 중요한것은 메인-커뮤니케이션 주체를 명확히 표시해 주는 것이다.), 직책별 업무정의(PM,PL,PA가 해야할일...그 범위와 권한,책임에 대해 명확하게 정의해준다.), 업무분장내역(공정-activity에 따라 갑과을과병의 주요 실무자를 리스트하고 공정별 그들의 참여도를 수치로 보여준다.)
4. 프로젝트 일정 계획 : 전체 일정표(공정별 예상 소모 시간을 주단위로 계획한다.), 인력 투입 계획(공정별 투입 예상 인력을 업무분야별로 참여도와 날짜...결국 M/M을 수치로 나타내준다...훨씬전에 합의된 견적과 밀접한 관계가 있으므로 PM 머리가 좀 아플 것이다...)
5. 품질 보증 및 관리 계획 : 제안서에 있거나 늘 써먹는 컨텐츠 갖다 붙여라...별로 의미가 없다...가능하면 화려하면서도 철학적이고 학술적이면 유용하다...이 부분에 대해서는 별도로 '프로젝트 표준 정의서'를 통해 고객에게 실제적이고 구체적인 내용을 전달하도록 하자...계획서에 실제적이고 구체적인 내용이 들어가면...백발백중 설전으로 아까운 시간 낭비를 하게 된다...이 부분에 잔뜩 신경써는 고객이 있다면 수행하면서 맘대로 가지고 놀아도 되는 고객이 분명하므로 잘된것이다.
6. 보고 및 검토계획 : 보고종류에 따른 보고 내용과 일정에 대해 써준다.
7. 프로젝트 슬로건 : 알아서 적어라...

프로젝트 수행계획서는 뭘로 만드나? 
워드든 파워포인트든 상관없다...액셀도 상관없다...PM 자신이 가장 잘 쓰는 페이퍼웍 도구를 활용하자...

프로젝트 수행계획서는 버젼업 되어야 하나?
버젼업은 1.0이 되기 전까지 가능하다. 1.0은 고객과의 합의를 의미하고 이 후에 버젼업이 지속적으로 일어난다면 그 프로젝트는 난항의 연속...퇴사를 준비하자...

작성시 유의사항은?
프로젝트 수행 도중 언제든지 꺼내서 실무에 적용가능하도록 최대한 최선을 다해 실제에 가깝게 작성되어야한다...

예제는 없는가?
목차만으로 충분하지 않은가? 구체적인 예제를 바란다면 프로젝트 매니저를 포기하길 권장한다...


[출처] 그것을 알랴주맛! 프로젝트 수행 계획서|작성자 즐닭주의

2013. 11. 15. 10:50

Background gradient




Create a Layout with a Drawable Gradient background and inside that your real layout.

For example, create mygrandientbg_xml in drawables dir like:

<shape android:shape="rectangle" xmlns...">
 <gradient
     android:startColor="#255779"
     android:centerColor="#3e7492"
     android:endColor="#a6c0cd"
     android:angle="90" />
</shape>

Then create a FrameLayout like that

<FrameLayout
  ....
  android:background="@drawable/mygrandientbg"
  android:padding=20dip
 >
 put you layout here and set it to "centered"


2013. 7. 19. 14:53

[안드로이드] 디컴파일 되지 않는 시스템어플 디컴파일 하기




※ 이강좌는 혼자 연구하면서 알게 되는 과정을 차근차근 재구성한겁니다..



(아무도 안알려주고...우씽...)



이번 강좌는 순정 시스템 apk파일을 디컴파일 할때 에러가 나면서 디컴파일 되지 않는

파일을 디컴파일 하는 방법을 알려드리겠습니다.

먼저 준비물이 필요합니다.

* Java SE Development Kit 6u21

* apk manager

* framework-res.apk 파일

* twframework-res.apk 파일

* phone.apk 파일 (강좌를 보며 따라할수있는 디컴파일 되지 않는 apk파일)

- Java SE Development Kit와 apk manager가 없으신분은 http://toforyou.tistory.com/55 이곳에서 받으시기 바랍니다.

테마를 제작하시거나 개발자분이시라면 시스템어플들을 한번씩은 디컴파일 시도해보신 경험이 있으실겁니다.

하지만 일부 apk파일은 오류가 나면서 디컴파일이 되지 않습니다.

대표적인 예로 phone.apk파일이나 Contacts.apk, Settings.apk 등이 있는데요

이 강좌를 보시면 디컴파일이 되지 않아 압축풀고 이미지만 바꿔야 했던거와는 달리

세부적인 수정도 가능해질겁니다.

예제로 보기 위해서 일단 phone.apk파일을 디컴파일 시도해봅시다.

먼저 apk manager 파일을 압축푸시고 준비물인 phone.apk 파일을

apk manager 안에 place-apk-here-for-modding폴더에 넣고

Script.bat 실행합니다.



먼저 22번을 눌러서 phone.apk파일을 선택해야합니다.


phone.apk파일이 선택되셨으면

9번을 눌러서 디컴파일 해줍니다.





그럼 디컴파일이 되다가 다음과 같이 에러가 납니다.

Can't find framework resources for package of id: 2. You must install proper framework files, see project website for more info.
"An Error Occured, Please Check The Log (option 21)"

대충 해석해보면  프레임워크 리소스 파일에서 2번대의 id를 찾을수 없다는 말을 합니다.

아까 apk manager를 압축풀었던 폴더에 가보시면 log.txt 파일이 생성되어있습니다.

이유를 알기 위해 log.txt 파일을 분석해봐야합니다.

모든 안되는 이유는 이 log.txt파일에 나와있거든요




#############################################################################################################

-------------------------------------------------------------------------- 
|2011-02-17 --  0:24:42.38| 
-------------------------------------------------------------------------- 
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
'adb'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.
C:\apk\place-apk-here-for-modding\../place-apk-here-for-modding/signedPhone.apk을(를) 찾을 수 없습니다.
C:\apk\place-apk-here-for-modding\../place-apk-here-for-modding/unsignedPhone.apk을(를) 찾을 수 없습니다.
1. I: Loading resource table...
W: Skipping "android" package group
 I: Decoding resources...
2. I: Loading resource table from file: C:\Users\Blue\apktool\framework\1.apk
3. W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000e
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f


#############################################################################################################



다음과 같이 나와있습니다.

1. 번에서는 resource 테이블을 로딩한다고 나와있습니다.

resource 파일 뭔지 기억하시나요??

제가 http://toforyou.tistory.com/55 이강좌에서 설명드렸습니다. resources.arsc이파일은 모든 ID의 집합체라구요

2. 번을 보시면 C:\Users\Blue\apktool\framework\1.apk 파일에서 resources.arsc를 불러 온다고 합니다.
(이 폴더는 컴퓨터마다 다릅니다. 꼭 log.txt에서 자신의 폴더를 확인하세요)


3 번을 보시면 그 리소스에서 0x0207000d id를 찾을수 없다는 말을 합니다.

여기서

평소에 framework파일과 twframework파일에서 public.xml파일을 유심히 보셨다면 알수있는게 있습니다.

    <public type="attr" name="theme" id="0x01010000" />
    <public type="attr" name="label" id="0x01010001" />
    <public type="attr" name="icon" id="0x01010002" />
    <public type="attr" name="name" id="0x01010003" />
    <public type="attr" name="manageSpaceActivity" id="0x01010004" />
    <public type="attr" name="allowClearUserData" id="0x01010005" />
    <public type="attr" name="permission" id="0x01010006" />
    <public type="attr" name="readPermission" id="0x01010007" />
    <public type="attr" name="writePermission" id="0x01010008" />
    <public type="attr" name="protectionLevel" id="0x01010009" />
    <public type="attr" name="permissionGroup" id="0x0101000a" />
    <public type="attr" name="sharedUserId" id="0x0101000b" />

이 위에 나와있는것이 framework파일의 public.xml의 일부분 입니다.

여기서 공통점을 찾으셨나요?

모두 id가 0x01******로 시작한다는겁니다.

그럼 twframework 파일의 public.xml파일을 살펴보겠습니다.

    <public type="attr" name="twTabWidgetStyle" id="0x02010000" />
    <public type="attr" name="twRadioButtonStyle" id="0x02010001" />
    <public type="attr" name="twAlertDialogStyle" id="0x02010002" />
    <public type="attr" name="twSoftkeyItemStyle" id="0x02010003" />
    <public type="attr" name="twColorPickerStyle" id="0x02010004" />
    <public type="attr" name="twProgressBarStyle" id="0x02010005" />
    <public type="attr" name="twSeekBarStyle" id="0x02010006" />
    <public type="attr" name="fullDark" id="0x02010007" />
    <public type="attr" name="topDark" id="0x02010008" />
    <public type="attr" name="centerDark" id="0x02010009" />
    <public type="attr" name="bottomDark" id="0x0201000a" />
    <public type="attr" name="fullBright" id="0x0201000b" />

이런식으로 id가 모두 0x02******으로 시작합니다.

여기서 알수있듯이 

W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x0205009a
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000d
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000e
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x0207000f

이 에러들은 모두 twframwork-res에 사용되는 id값을 필요로 하고있었습니다.

왜 phone.apk파일을 디컴파일하는데 twframwork파일의 id값들을 요구를 할까요?

그건 phone.apk파일을 만들때 저 id들이 사용되었는데 디컴파일하면서 저 아이디 값이 무엇인지 알려고 하는거고 그 과정에서 

id값들을 찾기 못하기에 내는 에러입니다.

C:\Users\Blue\apktool\framework\1.apk

그럼 아까 2번 에러에서 나왔던 폴더를 들어가보면



1.apk 파일이 덩그러니 놓여있습니다.

열어보면 리소스 파일이 들어있습니다.

이 1.apk파일은 우리가 이런 어플들을 디컴파일 시도할때 생깁니다. 

지워도 자동으로 다시 생기구요

그리고 몇가지를 시도한끝에 몇가지를 알수있었습니다.

저 1.apk파일안에 들어있는 리소스 파일은

framework-res에 쓰이는 리소스 파일이라는겁니다. 즉 0x01******번대의 id정보가 담겨있다는겁니다.

그럼 삭제할때마다 나타나는 1.apk파일은 어디서 튀어나오는걸까요?

그건 apk manager폴더 안에 other폴더에 있는 apktool.jar에 답이 있습니다.



다시 android-framework.jar 을 열어보면


1.apk파일에 쓰였던 리소스 파일이 들어있습니다.

즉 여기에 framework-res파일의 리소스가 있었기에

phone.apk를 디컴파일할때 0x01*****번대의 id를 못찾는 다는 에러는 나오지 않는것입니다.

하지만 이 1.apk파일에 들어있는 리소스는 우리가(제가) 사용하는 삼성 프레임워크와는 좀 다릅니다.

저 리소스 파일이 어떤 핸드폰의 리소스 파일인지는 모르지만

id값이 약간 다르기때문에 0x01******번대의 에러도 가끔 나타납니다.

여기서 한가지 중요한사실은

framework와 twframework로 나누어져있는 삼성 갤럭시의 시스템입니다.

다른 제조회사의 경우 나눠져있는경우도 있고 다 framework에 들어있는 경우도 있거든요

그렇다면 phone.apk파일을 디컴파일 해주기 위해서는 2번대의 id를 인식해줄수 있게 twframework-res.apk의

리소스를 인식할수 있게 해줘야 합니다.

먼저 C:\Users\Blue\apktool\framework\ (사용자마다 이폴더는 다릅니다)

폴더에 있는 1.apk파일을 삭제해주시고

그 폴더에 framework-res.apk파일과 twframework-res.apk파일을 복사해주세요
(자신의 사용하는 기종의 펌웨어 버전 것을 복사하세요. 다른 기종걸 넣고 징징거리지 마세요)
(이걸 응용한다면 다른 회사핸드폰의 시스템어플도 디컴파일하는게 가능합니다. 요구하는게 몇번 id대의 파일인지만 조사하면요)



그리고 1번대의 id를 가지는 framework-res.apk파일은 1.apk파일로 변환해주시고

2번대의 id를 가지는 twframework-res.apk파일은 2.apk파일로 변환을 해줍니다.

그리고 다시 apk manager로 돌아와 phone.apk파일을 디컴파일 해봅니다.



에러없이 디컴파일이 완료되었습니다.

사실 1.apk파일과 2.apk파일 안에는 리소스 파일만 남기고 전부 싹다 지워도 상관없습니다.

디컴파일할때 필요한건 리소스 파일뿐이거든요

하지만 귀찮아서 그냥 원본 갔다가 붙여놓는겁니다.

평소에 디컴파일 안되던 파일들도 디컴파일이 다 잘되실겁니다.

이로써 강좌 끝.

출처 : http://toforyou.tistory.com/66

2013. 5. 25. 11:23

Android Native Heap Size




Androi


2013. 2. 25. 09:51

MySQL 백업 및 복구




MySQL 백업 및 복구

- MySQL 디렉토리 전체를 압축 백업하기
mysql dir : /var/lib (데이터베이스 디렉토리)
[root@byungun lib]# tar cvfpz mysql_dir_tar.gz /var/lib/mysql

- 특정 데이터베이스 백업과 복구
백업 형식 : mysqldump -u DB계정명 -p DB명 > 저장할파일명
복구 형식 : mysql -u DB계정명 -p DB명 < 저장할파일명

# mysql DB 백업
[root@byungun DB_backup]# mysqldump -u root -p mysql > mysqldb.sql
Enter password:

# mysql DB 생성
[root@byungun DB_backup]# mysqladmin -u root -p create mysql
Enter password:

# mysql DB 복구
[root@byungun DB_backup]# mysql -u root -p mysql < mysqldb.sql
Enter password:

- 특정 데이터베이스의 특정 테이블 백업과 복구
백업 형식 : mysqldump -u DB계정명 -p DB명 Table명 > 저장할파일명
복구 형식 : mysql -u DB계정명 -p DB명 < 저장할파일명

# mysql DB Table 백업
[root@byungun DB_backup]# mysqldump -u root -p testdb testtable > testtable_table.sql
Enter password:

# mysql DB Table 복구
[root@byungun DB_backup]# mysql -u root -p testdb < testtable_table.sql
Enter password:

- 여러 개의 데이터베이스 한 번에 백업과 복구
백업 형식 : mysqldump -u DB계정명 -p --databases [옵션] DB1 DB2 DB3  > 저장할파일명
복구 형식 : mysql -u DB계정명 -p < 저장할파일명

# mysql 여러 개의 DB 백업
[root@byungun DB_backup]# mysqldump -u root -p --databases tempdb testdb > various_db.sql
Enter password:

# mysql DB 복구
[root@byungun DB_backup]# mysql -u root -p < various_db.sql
Enter password:

- MySQL 전체 데이터베이스 백업과 복구
백업 형식 : mysqldump -u DB계정명 -p --all-databases > 저장할파일명
복구 형식 : mysql -u DB계정명 -p < 저장할파일명

[root@byungun DB_backup]# mysql -u root -p --all-databases > mysql_alldb.sql
Enter password:


2012. 12. 13. 17:06

HTML 특수문자코드표




HTML 특수문자코드표

 

표현문자

숫자표현

문자표현

설명

-

&#00;-&#08;

-

사용하지 않음

space

&#09;

-

수평탭

space

&#10;

-

줄 삽입

-

&#11;-&#31;

-

사용하지 않음

space

&#32;

-

여백

!

&#33;

-

느낌표

"

&#34;

&quot;

따옴표

#

&#35;

-

숫자기호

$

&#36;

-

달러

%

&#37;

-

백분율 기호

&

&#38;

&amp;

Ampersand

'

&#39;

-

작은 따옴표

(

&#40;

-

왼쪽 괄호

)

&#41;

-

오른쪽 괄호

*

&#42;

-

아스트릭

+

&#43;

-

더하기 기호

,

&#44;

-

쉼표

-

&#45;

-

Hyphen

.

&#46;

-

마침표

/

&#47;

-

Solidus (slash)

0 - 9

&#48;-&#57;

-

0부터 9까지

:

&#58;

-

콜론

;

&#59;

-

세미콜론

<

&#60;

&lt;

보다 작은

=

&#61;

-

등호

>

&#62;

&gt;

보다 큰

?

&#63;

-

물음표

@

&#64;

-

Commercial at

A - Z

&#65;-&#90;

-

A부터 Z까지

[

&#91;

-

왼쪽 대괄호

\

&#92;

-

역슬래쉬

]

&#93;

-

오른쪽 대괄호

^

&#94;

-

탈자부호

_

&#95;

-

수평선

`

&#96;

-

Acute accent

a - z

&#97;-&#122;

-

a부터 z까지

{

&#123;

-

왼쪽 중괄호

|

&#124;

-

수직선

}

&#125;

-

오른쪽 중괄호

~

&#126;

-

꼬리표

-

&#127;-&#159;

-

사용하지 않음

&#160;

&nbsp;

Non-breaking space

¡

&#161;

&iexcl;

거꾸로된 느낌표

&#162;

&cent;

센트 기호

&#163;

&pound;

파운드

¤

&#164;

&curren;

현재 환율

&#165;

&yen;

|

&#166;

&brvbar;

끊어진 수직선

§

&#167;

&sect;

섹션 기호

¨

&#168;

&uml;

움라우트

&#169;

&copy;

저작권

ª

&#170;

&ordf;

Feminine ordinal

&#171;

&laquo;

왼쪽 꺾인 괄호

&#172;

&not;

부정

&#173;

&shy;

Soft hyphen

?

&#174;

&reg;

등록상표

&hibar;

&#175;

&macr;

Macron accent

°

&#176;

&deg;

Degree sign

±

&#177;

&plusmn;

Plus or minus

²

&#178;

&sup2;

Superscript two

³

&#179;

&sup3;

Superscript three

´

&#180;

&acute;

Acute accent

μ

&#181;

&micro;

Micro sign (Mu)

&#182;

&para;

문단기호

·

&#183;

&middot;

Middle dot

¸

&#184;

&cedil;

Cedilla

¹

&#185;

&sup1;

Superscript one

º

&#186;

&ordm;

Masculine ordinal

&#187;

&raquo;

오른쪽 꺾인 괄호

¼

&#188;

&frac14;

4분의 1

½

&#189;

&frac12;

2분의 1

¾

&#190;

&frac34;

4분의 3

¿

&#191;

&iquest;

거꾸로된 물음표

A

&#192;

&Agrave;

Capital A, grave accent

A

&#193;

&Aacute;

Capital A, acute accent

A

&#194;

&Acirc;

Capital A, circumflex accent

A

&#195;

&Atilde;

Capital A, tilde

A

&#196;

&Auml;

Capital A, dieresis or umlaut mark

A

&#197;

&Aring;

Capital A, ring (Angstrom)

Æ

&#198;

&AElig;

Capital AE diphthong (ligature)

C

&#199;

&Ccedil;

Capital C, cedilla

E

&#200;

&Egrave;

Capital E, grave accent

E

&#201;

&Eacute;

Capital E, acute accent

E

&#202;

&Ecirc;

Capital E, circumflex accent

E

&#203;

&Euml;

Capital E, dieresis or umlaut mark

I

&#204;

&Igrave;

Capital I, grave accent

I

&#205;

&Iacute;

Capital I, acute accent

I

&#206;

&Icirc;

Capital I, circumflex accent

I

&#207;

&Iuml;

Capital I, dieresis or umlaut mark

Ð

&#208;

&ETH;

Capital Eth, Icelandic

N

&#209;

&Ntilde;

Capital N, tilde

O

&#210;

&Ograve;

Capital O, grave accent

O

&#211;

&Oacute;

Capital O, acute accent

O

&#212;

&Ocirc;

Capital O, circumflex accent

O

&#213;

&Otilde;

Capital O, tilde

O

&#214;

&Ouml;

Capital O, dieresis or umlaut mark

×

&#215;

&times;

Multiply sign

Ø

&#216;

&Oslash;

width="130"Capital O, slash

U

&#217;

&Ugrave;

Capital U, grave accent

U

&#218;

&Uacute;

Capital U, acute accent

U

&#219;

&Ucirc;

Capital U, circumflex accent

U

&#220;

&Uuml;

Capital U, dieresis or umlaut mark

Y

&#221;

&Yacute;

Capital Y, acute accent

Þ

&#222;

&THORN;

Capital Thorn, Icelandic

ß

&#223;

&szlig;

Small sharp s, German (sz ligature)

a

&#224;

&agrave;

Small a, grave accent

a

&#225;

&aacute;

Small a, acute accent

a

&#226;

&acirc;

Small a, circumflex accent

a

&#227;

&atilde;

Small a, tilde

a

&#228;

&auml;

Small a, dieresis or umlaut mark

a

&#229;

&aring;

Small a, ring

æ

&#230;

&aelig;

Small ae diphthong (ligature)

c

&#231;

&ccedil;

Small c, cedilla

e

&#232;

&egrave;

Small e, grave accent

e

&#233;

&eacute;

Small e, acute accent

e

&#234;

&ecirc;

Small e, circumflex accent

e

&#235;

&euml;

Small e, dieresis or umlaut mark

i

&#236;

&igrave;

Small i, grave accent

i

&#237;

&iacute;

Small i, acute accent

i

&#238;

&icirc;

Small i, circumflex accent

i

&#239;

&iuml;

Small i, dieresis or umlaut mark

ð

&#240;

&eth;

Small eth, Icelandic

n

&#241;

&ntilde;

Small n, tilde

o

&#242;

&ograve;

Small o, grave accent

o

&#243;

&oacute;

Small o, acute accent

o

&#244;

&ocirc;

Small o, circumflex accent

o

&#245;

&otilde;

Small o, tilde

o

&#246;

&ouml;

Small o, dieresis or umlaut mark

÷

&#247;

&divide;

Division sign

ø

&#248;

&oslash;

Small o, slash

u

&#249;

&ugrave;

Small u, grave accent

u

&#250;

&uacute;

Small u, acute accent

u

&#251;

&ucirc;

Small u, circumflex accent

u

&#252;

&uuml;

Small u, dieresis or umlaut mark

y

&#253;

&yacute;

Small y, acute accent

þ

&#254;

&thorn;

Small thorn, Icelandic

y

&#255;

&yuml;

Small y, dieresis or umlaut mark


2012. 11. 8. 10:53

특정프로세서 죽이는 스크립트 [출처] 특정프로세서 죽이는 스크립트|작성자 Nams




test 프로세스 모두 죽이기 제1안
  # kill -9 `ps -ef | grep test | awk '{print $2}'`

test 프로세스 모두 죽이기 제2안
  # ps -ef | grep test | grep -v grep | awk '{print "kill -9",$2}' | sh -v

test 프로세스 모두 죽이기 제3안
  # killall -KILL test

test 프로세스 모두 죽이기 쉘 스크립트 
  #!/bin/sh
  for PID `ps -ef | grep test | grep -v grep | awk '{print $2}'`
  do
  kill -9 $PID
  done

test User로 실행 되어지는 모든 프로세스 죽이기
  # kill -9 `ps -ef | awk '$1=="test" {print $2}'`