Sunday, May 26, 2013

adb shell dumpsys activity


#include void *malloc(int size); 1. 입력 파라미터인 size 바이트만큼 메모리를 할당한다. 그리고 할당된 메모리 블록의 시작 주소(포인터)를 반한환다. 2. 메모리 할당이 불가능한 경우 NULL을 반환하며 이때 NULL로 반한된 주소로 다른 연산을 수행하면 프로그램이 죽어버리기 때문에 함수 malloc() 호출후에는 반드시 null 이 아닌지 검사해야한다. 3. 함수 malloc()를 호출하여 메모리를 할당받은 쪽(프로그램)에서 메모리 사용이 끝난 다음 함수 free()를 호출하여 반드시 메모리를 해제 시켜야한다. 사용이 끝난 메모리가 해제되지 않는 것을 메모리 누수(leak)가 발생하였다고 하며, 프로그램이 차지하는 메모리가 점점 커지게 되어 프로그램 성능에 좋지 않다.

Friday, May 3, 2013

Spring File Download View

File DownLoad View
I wanted to make dailog and download some file when i request special url.
I searched on internet and finally i get to solution that is very easy to use
This soultion is a kind of many way, Just keep in mind~
@RequestMapping(value = "/imageDown", method = RequestMethod.GET)
 public void handleFileDownload(HttpServletResponse res) throws FileNotFoundException, IOException {

  final String fn = "D://test.jpg";

  final File f = new File(fn);
  logger.debug("Loading file " + fn + "(" + f.getAbsolutePath() + ")");
  if (f.exists()) {
   res.setContentLength(new Long(f.length()).intValue());
   res.setHeader("Content-Disposition", "attachment; filename=Test.jpg");
   FileCopyUtils.copy(new FileInputStream(f), res.getOutputStream());
  } else {
   logger.debug("File" + fn + "(" + f.getAbsolutePath() + ") does not exist");

Awesome ?

Thursday, May 2, 2013

AOP Method Signiture Pattern

AOP Method Signiture Patterns
I studied a lot of time to study AOP.
as i studied i feel like master of AOP but as time gone by i forget how to use
and re searching online guide of AOP
so I want summarize about use of AOP
Hope that it would be helpful me and you guys

The first wild card means method type : public, private, protected, *(all)

If AopTest.class exist in different package
execution(* com.sang.hwa.AopTest.*(..)) if AopTest.class exist in same package
all method mapping in AopTest.class
execution(* AopTest.*(..)) //If class name has xxxxController.class it will be mapped execution(public * com.sns.controller..*Controller.*(..)) package com.sns.common.aspect; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * {@link SnsPointDay} 의 point-cut 지정 및 결과 코드 처리를 위한 어노테이션 * */ @Target({ ElementType.METHOD, ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SnsPointDay { public String div() default "00"; public String category(); public String item(); public int point() default 1; public String status() default ""; } @Before(@annotation(com.sns.common.aspect.SnsPointDay)) @AfterReturning("@annotation(point)") public void afterControllerWithPoint(JoinPoint jp, SnsPoint point) throws Throwable { } //Annotation Expression //$$(And), ||(or), !(not) @Pointcut("operation() || execution() || @annotation(pointDay)") @Before("execution(* *.*(..)) && target(target) && args(a,b)") public void logParameter(Object target, dobule a, double b){"class : " + taget.getClass().getName());" values : " + a + " , " + b); }