2012년 3월 26일 월요일

PC수리 관련한 설문.

제 블로그에 얼마나 많은 분들이 오시는지는 모르겟지만...

제목처럼 PC수리 관련한 설문을 진행 중입니다.
아래 링크 클릭 하시면 9문항 짜리 간단한 설문이 나옵니다.
https://docs.google.com/spreadsheet/viewform?formkey=dHdKVzNMR3U5eW9LUFRrY3NpaEVNNVE6MQ

어려운것도 없고 대부분 그냥 찍으시면 되는 질문들입니다.
부디 잠시만 시간내셔서 참여 부탁 드립니다.

2012년 3월 25일 일요일

예천 회룡포

지난 17일날 다녀온 회룡포 회룡대에서 바라본 모습
비가 좀 내린 뒤에 갔으면 더 좋았으려나?
아니면 원래 강이 저정도 였을까?

2012년 3월 24일 토요일

Android NDK + ffmpeg

시간내서 정리하여 올려야할 자료중에 하나 NDK 그리고 ffmpeg...

Android NDK와 ffmpeg은 각각 사이트에서 받고...

아래 내용은 Windows + cygwin 에서 ndk 셋팅하고 ffmpeg빌드해서 테스트 하는데 까지 과정을 시간되는대로 조금씩 올릴 예정이다.
(정리를 좀 해놔야 나중에 써먹던 버리던 ㅠㅠ)

0. Cygwin 설치할때 development등 몇몇 옵션에 필요 한것들 추가해서 설치 되도록 한다.

1. ndk 압축 해제후에 다음 명령어 실행하여 toolchain 설치 할것
$ /cygdrive/c/android-ndk-r5b/build/tools/make-standalone-toolchain.sh --platform=android-8 --install-dir=/cygdrive/c/my-android-toolchain
경로는 약간씩 바뀔거고... 명령어 실행했는데 에러나면서 안되는 경우는 대부분 뒤쪽에 옵션 문제이다.
에러 메시지 잘 보고 옵션 변경 해 가면서 설치 할것.

Tomcat, Log4J 간단 사용법.


먼저 log4.properties 파일...
저장 위치는 WEB-INF/classes/log4j.properties
저~ 아래 jar 파일은  WEB-INF/lib/

# Log4j Setting file
log4j.rootLogger=INFO, console
# Daily file log
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.logfile.File=G:/Apache_Tomcat/webapps/MusicalServer/MusicalServer.log
#log4j.appender.logfile.File=${catalina.home}/logs/musical.log
log4j.appender.logfile.File=/home/scuser/public_html/MusicalServer/Musical.log
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L) - %m%n
# Console log
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%-5p %l - %m%n
# log level and appender
log4j.logger.ticketBuy=INFO, logfile
log4j.logger.errorPurchase=INFO, logfile
log4j.logger.cancelPurchase=INFO, logfile
log4j.logger.ticketBuyResult=INFO, logfile

jsp소스에선
Logger logger = Logger.getLogger("cancel_purchae.jsp");
logger.info("CancelPurchase : " + date.toString() + " mobile=" + mobile + " imgIdx=" + imgIdx + " CharacterCode=" + cCode);

간단히 저런 형식으로...
설정 파일을 많이 다뤄 본적이 없어서 로그를 파일로 남기는거 찾는데 고생한 기억이 ㅠㅠ
첨부된 파일은 log4j 라이브러리 파일

jsp 테이블 내용 엑셀로 저장하기


펌도 펌도 이런 불펌을 ㅋㅋㅋ

=========================================================================================
예를들어 제목(title)을 조건으로 검색하여 리스트를 조회하는 화면이 있을때에
<EXCEL 파일저장>이라는 글자를 클릭하면 조건으로 들어가는 제목(title)을 parameter로
갖고 엑셀파일을 보여줄수 있는 pop-up대용의 jsp화면으로 보내준다.
========================================
                          list.jsp
========================================
<%@ page contentType="text/html;charset=euc-kr" %>
<html>
 .....
 function toXLS() {
   var address = "/jsp/excel.jsp?title=타이틀&file_name=리스트.xls";
   location.href = address;
 }
 .....
<body>
 .....
<a href="javascript:toXLS()"><strong>EXCEL 파일저장</strong></a>
 .....
</body>
</html>
========================================
지금의 코드에 이어 나오는 excel.jsp가 실제적으로 더 중요한 코드라 할수 있는데
맨처음에 jsp화면에서 설정코드를 눈여겨보아야 한다.
========================================
                          excel.jsp
========================================
<%@ page contentType="application/vnd.ms-excel;charset=euc-kr" %>
 ===> contentType를 반드시 위와같이 정의해주어야 한다.
<%
   String file_name = request.getParameter("title");
   response.setHeader("Content-Disposition", "attachment; filename=""+file_name+"";");
 ===> 저장할시에 기본적으로 설정되는 파일명을 지정하고(여기서는 order_list.xls)
        반드시 attachment로 설정을 해야 파일열기,저장 중에 선택하는 메시지가 뜬다.
   response.setHeader("Content-Description", "JSP Generated Data");
 ===> 정확히 어떤 정의였는지는 자세히 기억이 나지 않지만 필수적으로 설정해야한다.
  String title = request.getParameter("title");
  ...( title파라미터를 이용하여 DB에서 해당 목록을 ResultSet으로 받아온다. )
%>
<html>
<head>
<title>엑셀파일변환</title>
</head>
<body bgcolor=white>
<table border=1>
<tr bgcolor="#CACACA">
<th>지시일자</th>
<th>완료일</th>
<th>담당자</th>
<th>현 황</th>
<th>제      목</th>
</tr>
<%
   while(rs.next()) {   
%>       
<tr>
<td><%=rs.getString("ord_date")%></td>
<td><%=rs.getString("cmp_date")%></td>
<td><%=rs.getString("charge_name")%></td>
<td><%=rs.getString("state_name")%></td>
<td><%=rs.getString("subject")%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
========================================
이렇게 화면이 만들어지면 해당 <EXCEL 파일저장>을 클릭하게되면 order_list.xls(지정한파일명)
를 현재 위치에서 열것인지 저장할 것인지를 묻는 창이 뜬다.
여기에서 저장을 하게되면 이름을 바꿔서 저장이 가능하고, 열기를 선택하면 excel.jsp에
구성된 내용들이 현재화면에 엑셀형식으로 보여지게 되는것이다.
처음 참고자료를 뒤졌을때 excel.jsp의 attachment 부분이 다른방식으로 지정되면 곧바로 엑셀파일
열기가 실행되어 난감했던 기억이 난다.
반드시 attachment을 해야만 저장을 묻는다는 것을 기억하고.. 또 기억하자 ㅡ_ㅡ/

iOS 이미지 처리 함수


먼저 리사이징 함수..  

-(UIImage *)resizeImage:(UIImage *)image width:(float)resizeWidth height:(float)resizeHeight{
UIGraphicsBeginImageContext(CGSizeMake(resizeWidth, resizeHeight));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 0.0, resizeHeight);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0.00.0, resizeWidth, resizeHeight), [image CGImage]);
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage;
}


크롭용 함수입니다. 파라메터로 이미지와 크로핑하고 싶은 영역

- (UIImage*)imageByCropping:(UIImage *)imageToCrop toRect:(CGRect)rect
{
UIGraphicsBeginImageContext(rect.size);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(currentContext, 0.0, rect.size.height);
CGContextScaleCTM(currentContext, 1.0, -1.0);
CGRect clippedRect = CGRectMake(00, rect.size.width, rect.size.height);
CGContextClipToRect( currentContext, clippedRect);
CGRect drawRect = CGRectMake(rect.origin.x * -1,rect.origin.y * -1,imageToCrop.size.width,imageToCrop.size.height);
CGContextDrawImage(currentContext, drawRect, imageToCrop.CGImage);
CGContextScaleCTM(currentContext, 1.0, -1.0);
UIImage *cropped = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return cropped;
}


마스킹함수 첫번째 파라메터로 마스킹할 대상 이미지 파일 두번째 이미지 파일에는 마스킹용의 이미지

-(UIImage *)maskingImage:(UIImage *)image maskImage:(NSString)_maskImage{
CGImageRef imageRef = [image CGImage];
CGImageRef maskRef = [[UIImage imageNamed:_maskImage] CGImage];
    
CGImageRef mask = CGImageMaskCreate(CGImageGetWidth(maskRef),
CGImageGetHeight(maskRef),
CGImageGetBitsPerComponent(maskRef),
CGImageGetBitsPerPixel(maskRef),
CGImageGetBytesPerRow(maskRef),
CGImageGetDataProvider(maskRef),
NULLfalse);
    
CGImageRef masked = CGImageCreateWithMask(imageRef, mask);
CGImageRelease(mask);
    
UIImage *maskedImage = [UIImage imageWithCGImage:masked];
CGImageRelease(masked);
return maskedImage;
}

Android device CPU type 알아내는 소스.


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 >
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:gravity="center_horizontal"
 android:text="android-er.blogspot.com"
 android:autoLink="web"
 />
<TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="Android CPU Info.:"
 />
<TextView
 android:id="@+id/CPUinfo"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 />
</LinearLayout>

CPUTypeInfo.java
package com.systemworks.CPUType;
import! java.io.IOException;
import! java.io.InputStream;

import! android.app.Activity;
import! android.os.Bundle;
import! android.widget.TextView;

public class CPUTypeActivityextends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
  
     TextView strCpuInfo = (TextView)findViewById(R.id.CPUinfo);
     strCpuInfo.setText(ReadCPUInfo());
  
 }

 private String ReadCPUinfo()
 {
  ProcessBuilder cmd;
  String result="";
  
  try{
   String[] args = {"/system/bin/cat", "/proc/cpuinfo"};
   cmd = new ProcessBuilder(args);
   
   Process process = cmd.start();
   InputStream in = process.getInputStream();
   byte[] re = new byte[1024];
   while(in.read(re) != -1){
    System.out.println(new String(re));
    result = result + new String(re);
   }
   in.close();
  } catch(IOException ex){
   ex.printStackTrace();
  }
  return result;
 }
}

2012년 3월 23일 금요일

시작

여기저기 다 맘에 안들어서 결국 이리로 이사왔다.

많진 않지만...저 글들이랑 사진들 언제 다 옮기지 ㅠㅠ


2024년 첫번째 도서 리뷰 GPT-4를 활용한 인공지능 앱 개발

 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." 24년 첫 도서 리뷰이다. 작년까지? 한참 핫 했던 인공지능 서비스 Chat GPT에 관한 책이다. 핑계지만 어쩌다보니 GPT에 대한 접근이...