2014년 8월 1일 금요일

Install IBM Worklight Studio

1. 요구사항
a. OS
Mac OS X: 10.8 or 10.9
Windows: 7 or 8
Linux: RHEL 6, SUSE 11, or Ubuntu 12.04

b. Eclipse
Eclipse IDE for Java EE Developers : Juno SR2 (4.2.2), Kepler SR1 (4.3.1), Kepler SR2 (4.3.2), or Luna R (4.4)

2. Eclipse 실행
Help > Eclipse Marketplace

3. Worklight로 검색

4. 설치
"IBM Worklight Studio"은 필수고 "IBM Dojo Mobile Tools", "IBM jQuery Mobile Tools"은 옵션


* 참고 : http://www.ibm.com/developerworks/mobile/worklight/index.html



2014년 7월 31일 목요일

mysql tips


* 사용자 추가
CREATE DATABASE databasename;
CREATE USER 'userid'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'userid'@'%';
CREATE USER 'userid'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON databasename.* TO 'userid'@'localhost';
flush privileges;


* table의 DB engine 변경
alter table s3board type=innodb;




2014년 7월 16일 수요일

Install Redmine on Ubuntu 12.04 LTS (with MyLyn and Eclipse plugins)

http://ioriy2k.pe.kr/archives/4762


$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server

$ sudo add-apt-repository ppa:ondrej/redmine
$ sudo apt-get update
$ sudo apt-get install redmine redmine-mysql

$ sudo ln -s /usr/share/redmine/public /var/www/redmine

$ sudo apt-get remove libapache2-mod-passenger

$ sudo gem install passenger

$ sudo apt-get install libcurl4-openssl-dev libssl-dev zlib1g-dev apache2-prefork-dev libapr1-dev libaprutil1-dev
$ sudo passenger-install-apache2-module

* 빌드후 다음과 같은 메세지가 출력되면 메모
   LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.46
     PassengerDefaultRuby /usr/bin/ruby1.8
   </IfModule>

$ sudo vi /etc/apache2/mods-available/passenger.load
LoadModule passenger_module /var/lib/gems/1.8/gems/passenger-4.0.46/buildout/apache2/mod_passenger.so

$ sudo vi /etc/apache2/mods-available/passenger.conf
<IfModule mod_passenger.c>
  PassengerRoot /var/lib/gems/1.8/gems/passenger-4.0.46
  PassengerDefaultRuby /usr/bin/ruby1.8
  PassengerDefaultUser www-data
</IfModule>

$ sudo vi /etc/apache2/sites-available/default
<Directory /var/www/redmine>
    RailsBaseURI /redmine
    PassengerResolveSymlinksInDocumentRoot on
</Directory>

$ sudo a2enmod passenger
$ sudo service apache2 restart

$ sudo ufw allow 80



http://ioriy2k.pe.kr/archives/4843

$ sudo apt-get install git-core ruby-git
$ cd /usr/share/redmine
$ sudo ruby script/plugin install --force git://redmin-mylyncon.git.sourceforge.net/gitroot/redmin-mylyncon/redmine-mylyn-connector
$ sudo service apache2 restart

2014년 7월 3일 목요일

Subversion 특정 날짜동안 변경된 목록 조회

svn diff --username <userid> --password <password> <svn_url> --summarize -r {2014-06-20}:{2014-07-02} > log.txt

2014년 7월 2일 수요일

[cloudv] Installing Jenkins on Ubuntu



sudo apt-get install openjdk-7-jdk

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

* start jenkins service
sudo service jenkins start

* Change Jenkins HTTP Port
sudo vi /etc/default/jenkins
HTTP_PORT=<port>

* Open firewall using ufw
sudo ufw allow <port>

---

* set post scripts for deploy

$ sudo passwd jenkins
$ sudo vi /etc/sudoers
Defaults:jenkins !requiretty
jenkins ALL = NOPASSWD: /var/lib/jenkins/post_scripts/deploy_myapp.sh

$ sudo su - jenkins
jenkins$ mkdir /var/lib/jenkins/post_scripts
jenkins$ vi /var/lib/jenkins/post_scripts/deploy_myapp.sh
service tomcat6 stop
rm -rf /var/lib/tomcat6/webapps/huyang/
service tomcat6 start


http://localhost:8080/job/<myapp>/configure
Post Steps > Execute shell > Command
sudo /var/lib/jenkins/post_scripts/deploy_myapp.sh






2014년 6월 30일 월요일

[cloudv] Install subversion on ubuntu

$ sudo apt-get install subversion
$ sudo svnadmin create --fs-type fsfs /var/lib/subversion
$ sudo vi /var/lib/subversion/conf/svnserve.conf
anon-access = none
auth-access = write
password-db = passwd

$ sudo vi /var/lib/subversion/conf/passwd
[users]
<id> = <password>

$ sudo svnserve -d -r /var/lib/subversion --listen-port 443

$ sudo vi /etc/rc.local
# Subversion
svnserve -d -r /var/lib/subversion --listen-port 443

$ svn mkdir --parents svn://localhost/public/trunk --username <id>
$ svn mkdir --parents svn://localhost/public/branches --username <id>
$ svn mkdir --parents svn://localhost/public/tags --username <id>


* Subversion 종료
killall svnserve

* SVN 접속확인
svn://<ip>

* start svn subversion on OS starts
$ cd /etc/init.d
$ sudo vi svnserve
svnserve -d -r /var/lib/subversion
chmod a+x ./svnserve
$ sudo update-rc.d svnserve defaults

2014년 5월 21일 수요일

get last modified file by pattern(wildcard)




import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;

import org.apache.commons.io.filefilter.WildcardFileFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LastModifiedFileByPattern {
public static Logger logger = LoggerFactory.getLogger(FileFilterTest.class);
@SuppressWarnings({ "unchecked", "rawtypes" })
public static File getLastModifiedFile(File dir, String wildcard) {
File file = null;
if (dir == null || dir.isDirectory() == false) {
return null;
}
FileFilter fileFilter = new WildcardFileFilter(wildcard);
File[] files = dir.listFiles(fileFilter);
if (files == null || files.length == 0) {
return null;
}
Arrays.sort(files, new Comparator() {
    public int compare(Object o1, Object o2) {
        if (((File)o1).lastModified() > ((File)o2).lastModified()) {
            return -1;
        } else if (((File)o1).lastModified() < ((File)o2).lastModified()) {
            return +1;
        } else {
            return 0;
        }
    }
});
file = files[0];
return file;
}
public static void main(String[] args) {
File dir = new File("/somepath/");
String wildcard = "service_*.log";
File f = getLastModifiedFile(dir, wildcard);
logger.debug(f.toString());
}


}

Get All Classes Within A Package




http://dzone.com/snippets/get-all-classes-within-package


public static void main(String[] args) throws Exception{
String packageName = "a.b.c.d";

List<?> list = getClasses(packageName);
System.out.println(list);
}

/**
* Scans all classes accessible from the context class loader which belong to the given package and subpackages.
*
* @param packageName The base package
* @return The classes
* @throws ClassNotFoundException
* @throws IOException
*/
public static List<?> getClasses(String packageName) throws ClassNotFoundException, IOException {
   ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
   assert classLoader != null;
   String path = packageName.replace('.', '/');
   Enumeration<URL> resources = classLoader.getResources(path);
   List<File> dirs = new ArrayList<File>();
   while (resources.hasMoreElements()) {
       URL resource = resources.nextElement();
       dirs.add(new File(resource.getFile()));
   }
   ArrayList<Class<?>> classes = new ArrayList<Class<?>>();
   for (File directory : dirs) {
       classes.addAll(findClasses(directory, packageName));
   }
   return classes;
}

/**
* Recursive method used to find all classes in a given directory and subdirs.
*
* @param directory   The base directory
* @param packageName The package name for classes found inside the base directory
* @return The classes
* @throws ClassNotFoundException
*/
private static List<Class<?>> findClasses(File directory, String packageName) throws ClassNotFoundException {
   List<Class<?>> classes = new ArrayList<Class<?>>();
   if (!directory.exists()) {
       return classes;
   }
   File[] files = directory.listFiles();
   for (File file : files) {
       if (file.isDirectory()) {
           assert !file.getName().contains(".");
           classes.addAll(findClasses(file, packageName + "." + file.getName()));
       } else if (file.getName().endsWith(".class")) {
           classes.add(Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)));
       }
   }
   return classes;
}

JBoss EAP 6.0 (jBoss Application Server 7.0)에서 오라클 DataSource 설정하기


** 참고: https://community.jboss.org/thread/169104

1. 오라클 JDBC 드라이버(ojdbc6.jar) 다운로드
http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

2. jBoss Oracle JDBC 모듈 추가
ojdbc6.jar 파일을 ${JBOSS_HOME}/modules/com/oracle/ojdbc6/main 디렉토리에 복사
위 디렉토리에 module.xml 파일을 생성하고 아래 내용으로 저장

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle.ojdbc6">
    <resources>
        <resource-root path="ojdbc6.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api" />
        <module name="javax.transaction.api"/>
        <module name="javax.servlet.api" optional="true"/>
    </dependencies>
</module>



3. DataSource 설정
${JBOSS_HOME}/standalone/configuration/standalone.xml에 DataSource 정보 추가
            <datasources>
                ...
                <datasource jndi-name="java:/TestDS" pool-name="TestDS" enabled="true">
                    <connection-url>jdbc:oracle:thin:@192.168.0.1:ORCL</connection-url>
                    <driver>oracle</driver>
                    <security>
                        <user-name>scott</user-name>
                        <password>tiger</password>
                    </security>
                    <validation>
                        <valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleValidConnectionChecker"/>
                        <stale-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleStaleConnectionChecker"/>
                        <exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.oracle.OracleExceptionSorter"/>
                    </validation>
                </datasource>
                <drivers>
                    ...
                    <driver name="oracle" module="com.oracle.ojdbc6">
                        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>

Define multiple JBoss 7 instance using Eclipse Juno


참조 : https://community.jboss.org/thread/221012

* Instance 파일 복사
${JBOSS_HOME}/standalone 디렉토리를 ${JBOSS_HOME}/foo 로 복사

* ${JBOSS_HOME}/foo/configuration/standalone.xml 수정
before
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
after
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:10000}">

* Eclipse server runtime 추가
Window > Preferences > Server > Runtime Environments > Add
Create a runtime environment "JBoss 7.1 Runtime foo"
Configuration file: ..\..\foo\configuration\standalone.xml

* 새 서버 생성
Server view 에서 New / Server
JBoss Community / JBoss AS 7.1 추가

* Server 정보 수정
Server view 에서 위에서 생성된 서버 double click
Server Ports 에서 Detect from Local Runtime 체크 해제하고 Port offset을 10000으로 설정
Deployment 탭으로 이동해서 아래와 같이 수정
- "Use a custom deploy folder" check
- "standalone/deployments" -> "foo/deployments"
- "standalone/tmp" by "foo/tmp"

* Open launch configuration 수정
Overview 탭으로 이동
Always update arguments related to the runtime : uncheck
- Program arguments 수정
/*******************************************************************************
-mp "C:/tools/jboss/jboss-as-7.1.1.Final/modules" -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -b 0.0.0.0 --server-config=..\..\foo\configuration\standalone.xml
*******************************************************************************/
- VM arguments 수정
/*******************************************************************************
-server -Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true "-Dorg.jboss.boot.log.file=C:/tools/jboss/jboss-as-7.1.1.Final/foo/log/boot.log" "-Dlogging.configuration=file:/C:/tools/jboss/jboss-as-7.1.1.Final/foo/configuration/logging.properties" "-Djboss.home.dir=C:/tools/jboss/jboss-as-7.1.1.Final" "-Djboss.server.base.dir=C:\tools\jboss\jboss-as-7.1.1.Final\foo"
*******************************************************************************/
수정할 항목: org.jboss.boot.log.file / logging.configuration / jboss.server.base.dir


* 서버 구동 및 확인
Servers view에서 서버를 (재)시작하고 http://localhost:18080 접속 확인

이름 구분자로 String format하기

Apache commons lang의 StrSubstitutor 클래스를 이용한다.
(commons-lang 2.2 부터 지원)

Map valuesMap = new HashMap();
valuesMap.put("animal", "quick brown fox");
valuesMap.put("target", "lazy dog");
String templateString = "The ${animal} jumped over the ${target}.";
StrSubstitutor sub = new StrSubstitutor(valuesMap);
String resolvedString = sub.replace(templateString);

결과(resolvedString) : The quick brown fox jumped over the lazy dog.


http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/index.html?org/apache/commons/lang/StringUtils.html

2014년 5월 16일 금요일

MyBatis(iBatis)에서 파라미터에 Null 값이 있을 경우 에러 처리

MyBatis(iBatis)에서 파라미터에 Null 값이 있을 경우 에러가 발생한다.
아래 2가지 방식으로 설정 가능하다.

1. 전체 설정
jdbcTypeForNull의 기본값은 OTHER 이다.

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
<configuration>
<settings>
        ...
        <setting name="jdbcTypeForNull" value="VARCHAR" />
     </settings>
    
<environments>
...
</environments>
<mappers>
<mapper resource="com/..."/>
...
</mappers>
</configuration>

2. 파라미터별 처리(jdbcType를 지정)
Null 값이 입력될 수 있는 부분에 아래와 같이 옵션을 추가한다.

#{id, jdbcType=VARCHAR}


MyBatis(iBatis)에서 Underscore 형식의 필드명을 camel case로 변경하기

MyBatis(iBatis) 설정을 아래와 같이 변경

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"      
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
<configuration>
<settings>
        ...
        <setting name="mapUnderscoreToCamelCase" value="true" />
     </settings>
    
<environments>
...
</environments>
<mappers>
<mapper resource="com/..."/>
...
</mappers>
</configuration>


2014년 4월 22일 화요일

Java web service framework 비교



Support Contract 비고
Apache AXIS2
first, last 가장 많이 사용(기준?)
Spring framework 적용가능
Apache CXF JAX-WS
JAX-RS
SAAJ
Web Services Metadata for the Java Platform
first, last 가장 널리 사용되고 있는 추세
(AXIS2에서 CXF로 넘어오는 경우가 많음)
AXIS2 보다 사용하기 편리
웹서비스 관련 표준들을 준수
(WSDL 2.0은 아직 지원하지 않음)
최소한의 오버해드로 웹서비스 관련 프레임웍 중 성능이 가장 뛰어남(?)
Spring framework 적용가능
전자정부 표준 프레임워크에서 사용
Jersey JAX-RS ?
Spring-WS JAX-RS first JAX-WS 표준을 완벽히 지원하지 않음
JAX-WS 같은 Spring annotation 지원
개발자가 작성해야할 코드가 가장 작음
RESTEasy JAX-RS
JAXB
? JBoss 프로젝트
Rich set of providers for: XML, JSON, YAML, Fastinfoset, Multipart, XOP, Atom, etc.
JAXB marshalling into XML, JSON, Jackson, Fastinfoset, and Atom
as well as wrappers for maps, arrays, lists, and sets of JAXB Objects.
Gzip content-encoding 지원
Restlet JAX-RS ? 경량 REST 프레임워크
Xstream, Jackson을 이용한 XML, JSON marshalling, unmarshalling 지원
FreeMarker, Velocity 통합가능
대용량 멀티파트 데이터 처리를 위해 Apache FileUpload와 통합가능
Spring @MVC
N/A Spring MVC를 이용해서 RESTful 서비스를 구현
https://spring.io/guides/gs/rest-service/


* JAX-WS : Java API for XML-Based Web Services (JAX-WS) 2.0 – JSR-224
* JAX-RS : The Java API for RESTful Web Services – JSR-311
* SAAJ : SOAP with Attachments API for Java (SAAJ) – JSR-67
* JAXB : Java Architecture for XML Binding


2014년 4월 5일 토요일

Spring 3.1에서 RequestMapping 리스트 출력하기




/********************************************************************************
EndpointDocController.java


********************************************************************************/


package com.test.spring.controller;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;

@Controller
public class EndpointDocController{
@Autowired
private RequestMappingHandlerMapping requestMappingHandlerMapping;

@RequestMapping( value = "/endPoints", method = RequestMethod.GET )
public String getEndPointsInView( Model model )
{
Map<RequestMappingInfo, HandlerMethod> map = requestMappingHandlerMapping.getHandlerMethods();
model.addAttribute( "map", map );
   return "tools/endPoints";
}
}


/********************************************************************************
endPoints.jsp
********************************************************************************/

<%@ page session="false" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head><title>Endpoint list</title></head>
<body>
<table>
  <thead>
  <tr>
    <th>path</th>
    <th>methods</th>
    <th>consumes</th>
    <th>produces</th>
    <th>params</th>
    <th>headers</th>
    <th>custom</th>
  </tr>
  </thead>
  <tbody>

  <c:forEach items="${map}" var="obj">
    <tr>
      <td>${obj}</td>
      <td>${obj.key.patternsCondition}</td>
      <td>${obj.value}</td>
    </tr>
  </c:forEach>

  </tbody>
</table>
</body>
</html>


우분투 13.10 설정

* Sun JDK 설치

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

java -version


* Install Gnome 3.10 in Ubuntu 13.10
http://itsfoss.com/install-gnome-3-ubuntu-1310/



우분투에서 GIT 설정


$ apt-get install git-core git-doc

$ mkdir /var/lib/git/public
$ cd /var/lib/git/public
$ git init
$ cd /var/lib/git
$ git clone --bare public public.git
$ chmod -R 777 /var/lib/git/public.git

jBoss EAP 6.0에서 SLF4J LogBack 설정하기


jBoss EAP 6.0에서 SLF4J LogBack 설정하기

* jboss.server.base.dir/standalone/configuration/standalone.xml 수정
/********************************************************************************
        <subsystem xmlns="urn:jboss:domain:logging:1.1">
            <console-handler name="CONSOLE">
                <level name="DEBUG"/>
                <formatter>
                <!--
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
                    -->
                    <pattern-formatter pattern="%d{HH:mm:ss,SSS} %s%n"/>
                </formatter>
            </console-handler>
            ...

            <logger category="com.mydomain">
                <level name="DEBUG"/>
            </logger>

            <root-logger>
                <level name="DEBUG"/>
                <handlers>
                    <handler name="CONSOLE"/>
                    <handler name="FILE"/>
                </handlers>
            </root-logger>
        </subsystem>
********************************************************************************/

jBoss Log Formatter Syntax
https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/chap-The_Logging_Subsystem.html#Log_Formatter_Syntax1
%d The current date/time (yyyy-MM-dd HH:mm:ss,SSS form)
%p The level of the log entry (info/debug/etc)
%c The category of the logging event
%t The name of the current thread
%s The simple log message (no exception trace)
%E The exception stack trace (with extended module information)


* pom.xml 수정
/*********************************************************************************
<properties>
<ver.slf4j>1.7.5</ver.slf4j>
<version.logback>1.0.11</version.logback>
</properties>

<dependencies>
...
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${ver.slf4j}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${version.logback}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${version.logback}</version>
</dependency>
...
</dependencies>
********************************************************************************/

* /WEB-INF/jboss-deployment-structure.xml 추가
/********************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
********************************************************************************/

* src/main/resources/logback.xml
/********************************************************************************
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--
<pattern>%d %5p | %t | %-55logger{55} | %m %n</pattern>
-->
<pattern>%5p %logger{5} %m%n</pattern>
</encoder>
</appender>
<logger name="com.mydomain">
<level value="DEBUG" />
</logger>
<root>
<level value="DEBUG" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
********************************************************************************/

http://logback.qos.ch/manual/layouts.html



apache commons compress 이용한 TAR 생성

package test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;

public class CommonCompressTest{

/**
* @param args
*/
public static void main(String[] args) throws Exception {
String tarFilename = "c:\\tmp\\" + DateFormatUtils.format(System.currentTimeMillis(), "yyyyMMdd-HHmmss") + "-" + UUID.randomUUID().toString() + ".tar";
String baseDir = "C:\\tmp\\aa";
makeTar(tarFilename, baseDir, true);
}

public static void makeTar(String tarFilename, String baseDir, boolean removeIt) throws Exception {
final OutputStream os = new FileOutputStream(tarFilename);
TarArchiveOutputStream taos = new TarArchiveOutputStream(os);

List<File> fileList = getFileList(baseDir);
for (int ii = 0; ii < fileList.size(); ii++){
File entryFile = fileList.get(ii);

if (entryFile.isDirectory() == true)
continue;

String entryName = StringUtils.substring(entryFile.getAbsolutePath(), baseDir.length());

// System.out.println(entryName);
// System.out.println(entryFile);

TarArchiveEntry entry = new TarArchiveEntry(entryName);
byte[] buff = null;
if (entryFile.isFile()) {
buff = IOUtils.toByteArray(new FileInputStream(entryFile));
entry.setSize(buff.length);
}
taos.putArchiveEntry(entry);
if (entryFile.isFile()) {
taos.write(buff);
}
taos.closeArchiveEntry();

}
// System.out.println(fileList);
taos.close();
os.close();

System.out.println("baseDir=" + baseDir);
if (removeIt == true) {
org.apache.commons.io.FileUtils.deleteQuietly(new File(baseDir));
}
}

public static List<File> getFileList(String baseDir) {
List<File> fileList = new ArrayList<File>();

        File root = new File(baseDir);
        File[] list = root.listFiles();

        for ( File f : list ) {
            if ( f.isDirectory() ) {
            fileList.add(f);
            List<File> subFileList = getFileList(f.getAbsolutePath() );
            fileList.addAll(subFileList);
//                System.out.println( "Dir:" + f.getAbsoluteFile() );
            }
            else {
            fileList.add(f);
//                System.out.println( "File:" + f.getAbsoluteFile() );
            }
        }


return fileList;
}
}

2014년 4월 2일 수요일

Subversion 계정정보 삭제


* 환경
OS X 10.9.2
STS 3.4.0 (Based on Eclipse 4.3.1)
Subclipse 1.8.x

* Subclipse 설정에 따라 아래 두개 파일중 하나 삭제 (그냥 다 삭제해도 무방한듯..)
~/.eclipse_keyring
~/.subversion/auth

* 구글링 해보면 keyring 파일이 {EcliipseInstallDir}/configuration/org.eclipse.core.runtime/.keyring 라고 나오는데 환경에 따라 위의 사용자 홈 디렉토리에 있음

2014년 3월 29일 토요일

한성노트북 U54X GA630 elementary OS luna에서 무선랜 설정(우분투 12.04)

한성노트북 U54X GA630에 elementary OS luna(우분투 12.04 기반)를 설치하면 무선랜이 잡히지 않는다.
리얼텍 무선랜이 들어가 있는데 우분투 12.04에서 이를 잘 인식하지 못하는듯 하다.
구글링해보면 해당 내용이 많은 걸로 봐선 리눅스와 별로 안친한 놈인것으로 생각됨
(리얼텍의 경우 드라이버를 공개하긴 한데 타 오픈 소스 그룹들에 협력적이지 않은 것 같다)

*드라이버 잡는법
  참고 URL: http://tei827.tistory.com/41
$ sudo apt-get install build-essential linux-headers-generic linux-headers-`uname -r`
$ wget -O- http://dl.dropbox.com/u/57056576/DRIVERS/REALTEK/rtl_92ce_92se_92de_8723ae_linux_mac80211_0006.0514.2012.tar.gz | tar -xz
$ cd rtl_92ce_92se_92de_8723ae_linux_mac80211_0006.0514.2012
$ make
$ sudo make install
$ sudo modprobe rtl8723e