- emerge [패키지명] : 설치

- emerge –u [패키지명] : 업데이트

- emerge –uD [패키지명] : 해당 패키지와 연관성있는 모든 패키지도 업데이트

- emerge –C [패키지명] : 해당 패키지 언인스톨

- emerge –s [키워드] : 해당 키워드가 포함되어있는 설치된 패키지 찾기

- emerge sync : 최신 portage tree 로 업데이트 (기존 로컬의것은 지워짐)

- emerge –p [패키지] : 실제 인스톨을 대신해 가상으로 해본다.

- emerge –v [패키지] : 좀더 자세한 설명을 본다.

- USE flag 변경

USE=”xxx xxx2 xxx3” emerge xxx

- mask 된 패키지 설치

ACCEPT_KEYWORDS=”~x86” emerge xxx

'알짜정보 > Linux server' 카테고리의 다른 글

apache 에 svnserver 연동하기  (26) 2009.08.07
gentoo apache2.2 + proxy_ajp + tomcat6 설정하기  (35) 2009.08.07
fedora 10 설정하기  (794) 2009.03.25
gentoo 에다가 qmail+vpopmail+courier-imap 설치하기  (50) 2008.03.12
스티키비트  (34) 2007.04.30
by cranix 2009. 8. 6. 20:49
- fedora 10 받기
페도라 공식 홈페이지 (무료)
CD-R 한장짜리 (700 MB) Fedora10 Live 받아서 설치하면 기본적으로 영어로 깔림.


- yum 으로 gcc, java, mysql, tomcat, php, php-mysql 설치
   - gcc
gcc-4.3.2-7.i386

   - java
java-1.6.0-openjdk
java-1.6.0-openjdk-devel
   - mysql
mysql-5.0.67-2.fc10.i386
mysql-gui-tools-5.0r12-9.fc10.i386
mysql-libs-5.0.67-2.fc10.i386
mysql-gui-common-5.0r12-9.fc10.i386
mysql-administrator-5.0r12-9.fc10.i386
mysql-query-browser-5.0r12-9.fc10.i386
mysql-server-5.0.67-2.fc10.i386
    - tomcat (yum install tomcat6\*)
tomcat6-jsp-2.1-api-6.0.18-6.2.fc10.noarch
tomcat6-6.0.18-6.2.fc10.noarch
tomcat6-webapps-6.0.18-6.2.fc10.noarch
tomcat6-admin-webapps-6.0.18-6.2.fc10.noarch
tomcat5-jsp-2.0-api-5.5.27-6.1.fc10.noarch
tomcat6-servlet-2.5-api-6.0.18-6.2.fc10.noarch
tomcat5-servlet-2.4-api-5.5.27-6.1.fc10.noarch
tomcat6-javadoc-6.0.18-6.2.fc10.noarch
jakarta-commons-collections-tomcat5-3.2-2.3.fc10.i386
jakarta-commons-dbcp-tomcat5-1.2.1-11jpp.4.fc10.i386
tomcat6-docs-webapp-6.0.18-6.2.fc10.noarch
jakarta-commons-pool-tomcat5-1.3-10.5.fc10.i386
tomcat6-lib-6.0.18-6.2.fc10.noarch
    - php (yum install php)
php-5.2.6-5.i386
php-cli-5.2.6-5.i386
php-common-5.2.6-5.i386
php-pdo-5.2.6-5.i386


    - php-mysql (yum install php-mysql)
php-mysql-5.2.6-5.i386

- vsftpd 설정
    1. touch /etc/vsftpd/chroot_list
    2. vsftpd.conf 수정
anonymous_enable=NO
chroot_local_user=YES
passwd_chroot_enable=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

- apache+tomcat 연동하기
http://wiki.kldp.org/wiki.php/Apache2Tomcat5Howto2

- tomcat server.xml 설정에서 8080 기본 리슨을 삭제
- 각 유저 디렉토리 권한은 711, public_html 디렉토리 권한은 755 로 셋팅해야함


- setup 설정
setup 명령실행후 iptables 모두 죽이고 지금까지 설치한 데몬 모두 살리기


- SELinux 해제 (보안관리도구)
시스템 -> 관리 -> SELinux Management 가서 Disabled 로 바꿈


by cranix 2009. 3. 25. 13:51

윈도우에서 JAVA 로 IP 주소 가지고 오는소스는 아래와 같다.

[code]try {
    ip = InetAddress.getLocalHost().getHostAddress();
   } catch (UnknownHostException e) {
    e.printStackTrace();
}[/code]


그러나 이것을 리눅스에서 쓴다면 127.0.0.1 즉 루프백 아이피 주소가 나오게 된다.
어떻게 해야할까?
구글링결과 아래와같은 결론을 얻었다.

[code]try {
    boolean isLoopBack = true;
    Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
    while(en.hasMoreElements()) {
     NetworkInterface ni = en.nextElement();
     if (ni.isLoopback())
      continue;
     
     Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
     while(inetAddresses.hasMoreElements()) {
      InetAddress ia = inetAddresses.nextElement();
      if (ia.getHostAddress() != null && ia.getHostAddress().indexOf(".") != -1) {
       ip = ia.getHostAddress();
       isLoopBack = false;
       break;
      }
     }
     if (!isLoopBack)
      break;
    }
   } catch (SocketException e1) {
    e1.printStackTrace();
   }[/code]

NetworkInterface 라는 클래스를 이용하여 각 네트웍 인터페이스를 검색해서 알아내는 방법이다.
어찌되었건 이렇게 하면 윈도우건 리눅스건 돌아간다.
 
어째 자바스크립트가 된 기분이다.
이것은 자바의 철학인 WORA(Write Once Run Anyware) 를 위배한다.

앞으로 자바가 어떻게 발전할지는 모르겠지만 가장 기본적인 자바 철학은 지켜 주었으면 하는 바램이다.

'알짜정보 > Java' 카테고리의 다른 글

자바 힙덤프 뜨기  (69) 2012.12.18
JNLP 테스트  (36) 2010.02.14
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.  (42) 2008.08.15
java 에서 xmlrpc 사용하기  (38) 2008.07.13
annotation 주석?  (43) 2006.12.16
by cranix 2008. 12. 2. 00:15

connection pool 같이 성능에 지대한 영향을 미치는것들은 이런 유명라이브러리를 사용하여 만드는게 맞다고 본다. 일단 믿을수 있으니까.

그런데 문제는 apache 의 commons-dbcp 는 여러 컨테이너나 웹 프레임워크 상에서 지원하지만, 정작 그런 컨테이너나 프레임워크의 도움 없이는 사용하는방법을 몰랐었다.

나중에도 유용할꺼 같아서 네이버를 뒤져서 만들어봤다.

먼저 필요한 라이브러리를 받자.

1. commons-dbcp  --> http://commons.apache.org/dbcp/
2. commons-pool  -->  http://commons.apache.org/pool/

<ConnectionPool.java>

[code]package common.util;

import java.sql.Connection;
import java.sql.DriverManager;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.impl.GenericObjectPool;

public class ConnectionPool {
 private String driverName = null;

 private String poolingDriverClassName = "org.apache.commons.dbcp.PoolingDriver";
 private String poolUrl = "jdbc:apache:commons:dbcp:";

 public ConnectionPool(String driverName, String driverClassName,String dbUrl, String dbUserId, String dbUserPass) {
  this(driverName, driverClassName, dbUrl, dbUserId, dbUserPass, 30, 10,100, false, true);
 }

 public ConnectionPool(String driverName, String driverClassName,String dbUrl, String dbUserId, String dbUserPass, int maxActive,int maxIdle, int maxWait) {
  this(driverName, driverClassName, dbUrl, dbUserId, dbUserPass,maxActive, maxIdle, maxWait, false, true);
 }

 public ConnectionPool(String driverName, String driverClassName,String dbUrl, String dbUserId, String dbUserPass, int maxActive,int maxIdle, int maxWait, boolean isReadOnly, boolean isAutoCommit) {
  this.driverName = driverName;
  try {
   Class.forName(driverClassName);
   GenericObjectPool connectionPool = new GenericObjectPool(null);
   connectionPool.setMaxActive(maxActive);
   connectionPool.setMaxIdle(maxIdle);
   connectionPool.setMaxWait(maxWait);

   ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(dbUrl, dbUserId, dbUserPass);

   PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, isReadOnly,isAutoCommit);
   Class.forName(poolingDriverClassName);

   PoolingDriver driver = (PoolingDriver) DriverManager.getDriver(poolUrl);

   driver.registerPool(driverName, connectionPool);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
 }

 public Connection getConnection() {
  Connection conn = null;
  try {
   conn = DriverManager.getConnection(poolUrl + driverName);
  } catch (Exception e) {
   throw new RuntimeException(e);
  }
  return conn;
 }
}[/code]
이제 클래스 생성하고 getConnection() 을 호출하면 connection pool 에 의해 얻어진 connection 을 쓸 수 있다.

'알짜정보 > Java' 카테고리의 다른 글

JNLP 테스트  (36) 2010.02.14
JAVA 리눅스 IP 주소 알아내기  (38) 2008.12.02
java 에서 xmlrpc 사용하기  (38) 2008.07.13
annotation 주석?  (43) 2006.12.16
JAVA5(1.5) 달라진점!  (19) 2006.12.16
by cranix 2008. 8. 15. 00:00

1. rpc 란?

xmlrpc 를 알아보기전에 먼저 rpc 를 알아보자.
rpc 란 Remote Procedure Call 의 약자로 말그대로 원격지에 있는 Procedure 를 호출하는 기능을 말한다.


2. xmlrpc 란?

xmlrpc란  xml과 http 프로토콜을 바탕으로 만들어진 원격 프로시저 콜 시스템 이다.
다른 컴퓨터와 주고받을수 있는 여러 프로토콜이 있지만 방화벽이나 기타 사정으로 제약을 받는 프로토콜들이 많다. 그중 가장 유연한 프로토콜이 http 프로토콜 이다. 바로 이 http 를 이용하여 xml 형태로 데이터를 간단하게 주고 받을수 있는것이 xmlrpc 이다.


3. 준비사항

오늘 만들어볼것은 xmlrpc 서버(단독서버,서블릿서버,서블릿단독서버), 클라이언트 이다.

먼저 apache 그룹에서 제공하는 xmlrpc 라이브러리를 다운받자.
http://ws.apache.org/xmlrpc/  - xmlrpc 3.1
3.1 버젼을 다운받도록 하자.
(이전 버젼을 사용해보지는 않았지만 만들면서 다른사람이 2.0 으로 만들어 놓은 예제에 3.1 라이브러리를 임포트 시켰더니 오류가 나는것을 봤을때 호환되지 않는거 같다.)

다음은 xmlrpc 라이브러리 실행에 필요한 라이브러리인데 xmlrpc 홈페이지 어디에도 이같은 라이브러리가 필요하다고 명시되어있지 않아서 삽질좀 했다.-_-;
아래 두 라이브러리를 다운받자
http://hc.apache.org  - commons-httpclient 3.1
http://commons.apache.org/codec/ - commons-codec 1.3

이제 이클립스를 켜고 다이나믹 웹 프로젝트를 생성한다음
WebContents/lib 디렉토리에 모든 라이브러리를 넣는다.



4. 서버만들기

서버는 3가지 형태로 만들수 있다.

1) 단독서버형 - 이것은 톰켓의 도움없이 단독으로 실행해서 xmlrpc 서비스를 해 줄수있는 서버이다.
 
2) 서블릿서버형 - 이것은 톰켓의 서블릿에 추가해서 서비스 해 줄수있는 서버이다. 내가 생각하기에 이것이 가장 많이 쓰이는방법 일 거같다.

3) 서블릿단독서버형 - 이것은 1번과 2번을 합쳐놓은것인데 2번을 만들어 놓고 톰켓을 실행하지 않은상태에서 xmlrpc 만을 실행해서 서비스 해 줄수있는 방법이다.


- 먼저 서비스해줄 프로시저를 만들자.
<Calculator.java>

[code]package test;
public class Calculator {
 public int add(int i1, int i2) {
  return i1 + i2;
 }
public int subtract(int i1, int i2) {
  return i1 - i2;
 }
}[/code]


- 그리고 서비스 해 줄 프로시저를 xmlrpc 라이브러리에 알려주기 위해 프로퍼티 파일을 만들자.
- 이 파일은 기본적으로 "org/apache/xmlrpc/webserver/XmlRpcServlet.properties" 디렉토리에 파일명 그대로 위치시켜야 한다.
- 이 파일의 디렉토리와 파일명은 XmlRpcServlet 클래스의 newXmlRpcHandlerMapping 메소드를 오버라이드 해서 변경할수 있지만 이렇게 구지 고정시켜 놓은 이유는 서블릿단독서버형 으로 실행할수 있도록 만들기 위해서이다.
<XmlRpcServlet.properties>

[code]Calculator=test.Calculator[/code]


4-1) 단독서버형
<StandaloneServer.java>

[code]package test;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcServer;
import org.apache.xmlrpc.server.XmlRpcServerConfigImpl;
import org.apache.xmlrpc.webserver.WebServer;
public class StandaloneServer {
 private static final int port = 8080;

 public static void main(String[] args) throws Exception {
   WebServer webServer = new WebServer(port);

   XmlRpcServer xmlRpcServer = webServer.getXmlRpcServer();

   PropertyHandlerMapping phm = new PropertyHandlerMapping();
  /* Load handler definitions from a property file.
   * The property file might look like:
   *   Calculator=org.apache.xmlrpc.demo.Calculator
   *   org.apache.xmlrpc.demo.proxy.Adder=org.apache.xmlrpc.demo.proxy.AdderImpl
   */
  phm.load(Thread.currentThread().getContextClassLoader(),"org/apache/xmlrpc/webserver/XmlRpcServlet.properties");

  /* You may also provide the handler classes directly,
   * like this:
   * phm.addHandler("Calculator",
   *     org.apache.xmlrpc.demo.Calculator.class);
   * phm.addHandler(org.apache.xmlrpc.demo.proxy.Adder.class.getName(),
   *     org.apache.xmlrpc.demo.proxy.AdderImpl.class);
   */
  xmlRpcServer.setHandlerMapping(phm);

  XmlRpcServerConfigImpl serverConfig = (XmlRpcServerConfigImpl) xmlRpcServer.getConfig();
  serverConfig.setEnabledForExtensions(true);
  serverConfig.setContentLengthOptional(false);

   webServer.start();
 }
}[/code]

- 애플리케이션으로 실행하면 xmlrpc 서비스 주소는 http://127.0.0.1:8080 이 된다.


4-2) 서블릿서버형
- servlet 클래스를 따로 만드는게 아니라 제공되는 클래스를만 끌어다 쓰면 바로 설정된다. 단 properties 파일은 제위치에 있어야 한다.
- web.xml 파일에 아래 설정을 추가한다.
<web.xml>

[code]<servlet>
  <servlet-name>XmlRpcServlet</servlet-name>
  <servlet-class>org.apache.xmlrpc.webserver.XmlRpcServlet</servlet-class>
        <init-param>
          <param-name>enabledForExtensions</param-name>
          <param-value>true</param-value>
        </init-param>
</servlet>
<servlet-mapping>
        <servlet-name>XmlRpcServlet</servlet-name>
        <url-pattern>/xmlrpc</url-pattern>
</servlet-mapping>[/code]

- 톰켓을 실행하면 xmlrpc 서비스주소는 http://[톰켓서버]:[톰켓포트]/[톰켓어플리케이션]/xmlrpc 가 된다.



4-3) 서블릿단독서버형
  -> 이것은 4-2 가 셋팅되어있어야지 실행할 수 있다.
<ServletStandaloneServer.java>

[code]package test;

import org.apache.xmlrpc.webserver.ServletWebServer;
import org.apache.xmlrpc.webserver.XmlRpcServlet;

public class ServletStandaloneServer {
    private static final int port = 8080;

    public static void main(String[] args) throws Exception {
        XmlRpcServlet servlet = new XmlRpcServlet();
        ServletWebServer webServer = new ServletWebServer(servlet, port);
        webServer.start();
    }
}[/code]

- 애플리케이션으로 실행하면 xmlrpc 서비스 주소는 http://127.0.0.1:8080 이 된다.


5. 클라이언트만들기

위의 서버들이 제대로 작동한다면 xmlrpc 서비스 주소를 얻을수 있을것이다.
이제 이 주소만 있으면 인터넷이 되는 어디서든 내 서비스를 받을수 있게 되는것이다.


- 클라이언트파일만들기
<Client.java>

[code]package test;

import java.net.URL;

import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;

public class Client {
 public static void main(String[] args) throws Exception {
  // create configuration
  XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
  config.setServerURL(new URL("http://127.0.0.1:8080/XMLRPCTest/xmlrpc"));
  config.setEnabledForExtensions(true);
  config.setConnectionTimeout(60 * 1000);
  config.setReplyTimeout(60 * 1000);

  XmlRpcClient client = new XmlRpcClient();

  // set configuration
  client.setConfig(config);

  // make the a regular call
  Object[] params = new Object[] { new Integer(2), new Integer(3) };
  Integer result = (Integer) client.execute("Calculator.add", params);
  System.out.println("2 + 3 = " + result);

 }
}[/code]


6. 실행

이제 위 세가지 서버중에 하나를 띄우고 클라이언트를 실행하면 아래와같이 원하는 결과가 나오는것을 확인할수 있습니다.

사용자 삽입 이미지

'알짜정보 > Java' 카테고리의 다른 글

JNLP 테스트  (36) 2010.02.14
JAVA 리눅스 IP 주소 알아내기  (38) 2008.12.02
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.  (42) 2008.08.15
annotation 주석?  (43) 2006.12.16
JAVA5(1.5) 달라진점!  (19) 2006.12.16
by cranix 2008. 7. 13. 16:50

서버 셋팅하는 과정중 최고의 삽질과정이었다.

한 일주일은 걸린거같다.

먼저 설치하기전에 메일서버가 동작하는 과정을 알아보자.

동작하는 과정을 보려면 먼저 전문용어를 알아보자

MUA --> 사용자 메일클라이언트 (아웃룩,...)
MTA --> 메일 전송 프로그램(sendmail,qmail,...)
MDA --> 로컬메일 분류 프로그램(procmail,vpopmail,...)

메일의 흐름은 아래와 같다.

1. MUA(보내는사람) --> 2. MTA(보내는서버) --> 3 .MTA(받는서버) --> 4. MDA(받는서버) --> 5. MUA(받는사람)

이번에 설정한것은 뒷 세단계이다.

1. 기본 MTA 삭제하기
MTA 는 중복될수 없다.
나는 qmail 을 쓸꺼기때문에 기존에 설치되어있던 sendmail 을 삭제해 주었다.

# emerge -C sendmail

만약 자신의 서버에 설치되어있는 MTA 를 모르겠으면 /var/db/pkg/mail-mta 를 리스트로 보면 나온다.

2. qmail 설치하기&셋팅
- qmail 은 아래와같이 설치한다.

# emerge mail-mta/netqmail

- servercert.cnf 설정하기

# vi /var/qmail/control/servercert.cnf

C = KO
ST = SE
L = Seoul
O = Cranix System
CN = cranix.net
emailAddress = cranix@cranix.net

- qmail config 파일을 emerge 하기

# emerge --config netqmail

- qmail alias 설정

# cd /var/qmail/alias
# echo cranix > .qmail-root
# echo cranix > .qmail-postmaster
# echo cranix > .qmail-mailer-daemon



- 아래 명령어로 보내기(qmail-send), 받기(qmail-smtp) 서버를 등록하고 실행한다.

# ln -s /var/qmail/supervise/qmail-send /service/

# ln -s /var/qmail/supervise/qmail-smtp /service/

# /etc/init.d/svscan start

# rc-update add svscan default

- 떳는지 확인하려면 아래  명령어로 smtp 포트가 떠있는지 확인해보면 된다.
# nmap [domain]


3. vpopmail 설정하기
: vpopmail 은 데몬형태로 떠있는게 없다.
  그냥 qmail 이 실행될때마다 불러쓴다.

- 설치
# emerge vpopmail

- qmail-smtp 설정
# cd /var/qmail/control

# vi qmail-smtp

--> QMAIL_SMTP_CHECKPASSWORD="/var/vpopmail/bin/vchkpw" (주석해제)

- mysql 설정
# mysql -u root -p

> create database vpopmail;

> use mysql;

> grant select, insert, update, delete, create, drop on vpopmail.* to 'vpopmail'@localhost identified by 'vpoppass'
> flush privileges;

- vpopmail.conf 설정
# cd /etc

# vi vpopmail.conf

--> localhost|0|vpopmail|vpoppass|vpopmail 와 같이 read,write 비밀번호 설정


- 도메인추가 & 사용자추가
  사용자가 추가되면 ~vpopmail/domains/[domain]/[user] 디렉토리에 메일이 싸인다.
# vadddomain [domain]

# vadduser [user]@[domain]


- qmail 재시작
# /etc/init.d/svscan restart


4. courier-imap 설치
- 설치
# emerge courier-imap


- authdaemonrc 설정
# cd /etc/courier/authlib

# vi authdaemonrc

--> authmodulelist="authvchkpw" 설정

- cnf 파일 설정
# vi /etc/courier-imap/pop3d.cnf
C = KO
ST = SE
L = Seoul
O = Cranix System
CN = cranix.net
emailAddress = cranix@cranix.net

# vi /etc/courier-imap/imapd.cnf
C = KO
ST = SE
L = Seoul
O = Cranix System
CN = cranix.net
emailAddress = cranix@cranix.net

# mkpop3dcert
# mkimapdcert


- pop3d 실행및 등록
# /etc/init.d/courier-pop3d start
# /etc/init.d/courier-pop3d-ssl start
# /etc/init.d/courier-imapd start
# /etc/init.d/courier-imapd-ssl start
# rc-update add courier-pop3d default
# rc-update add courier-imapd default
# rc-update add courier-pop3d-ssl default
# rc-update add courier-imapd-ssl default


5. 아웃룩 설정
아웃룩에서 ID 는 도메인까지 추가해서 입력해야 한다.
예를들어 id 가 cranix 이고 도메인이 cranix.net 이면
cranix@cranix.net 이 된다.
또한 고급설정에 smtp 로그인할때 비밀번호 체크하는 옵션을 설정하고 해야한다.

'알짜정보 > Linux server' 카테고리의 다른 글

gentoo emerge 사용법  (30) 2009.08.06
fedora 10 설정하기  (794) 2009.03.25
스티키비트  (34) 2007.04.30
ssh 특정 사용자 아니면 그룹을 접속 제한및 허용하기  (705) 2007.03.13
우분투 유저기본 디렉토리  (33) 2007.03.13
by cranix 2008. 3. 12. 01:28

로보코드 마스터들이 주는 힌트, 팁, 조언이 나왔습니다. 참고하세요.

Factored wall avoidance (한글)

코너에 갇히거나 원하는 이동 방향에서 너무 많이 벗어나지 않으면서, 로봇과 벽 사이의 간격을 유지하는 알고리즘을 만드는 것은 어려운 일입니다. 이에 대한 한 가지 간단한 솔루션으로, factored wall avoidance가 있습니다. 이 글에서, David McCoy가 이 기술을 구현하는 방법을 설명합니다.

반 중력 움직임 (한글)
반 중력 움직임(Anti-gravity movement)은, 여러 가지 변형된 형태들 중에, 대부분의 로보코더(Robocoder) 전문가들이 선택하는 움직임 유형입니다. 이것을 사용하면 지도상에서 피할 위치들을 정의하고, 움직임 패턴들을 쉽게 만들며, 적의 총알을 피할 수 있습니다. Alisdair Owens가 이 유용한 기술을 구현하는 방법을 설명합니다.

예상 타겟팅(targeting)
성공적으로 상대편 로봇의 위치를 찾아내고 슈팅 하기 위해서는 상대편이 있을 것이라고 예상되는 특정한 지점에 총알을 발사하는 알고리즘이 필요합니다. 이 글에서, Simon Parker는 직선형(linear), 원형(circular), 진동(oscillating) 예상 타겟팅에 사용될 수 있는 알고리즘을 설명합니다.

적의 움직임 추적하기
적의 움직임은 예상하기가 어려운 패턴을 가지고 있기 때문에 모든 타겟팅 알고리즘에는 한계가 있습니다. 각각의 상대편 로봇에 따라 최상의 움직임 알고리즘을 선택할 수 있는 방법을 배워봅시다.

원형(circular) 타겟팅
원형(circular) 타겟팅은 직선형 타겟팅을 터득한 후 취할 수 있는 다음 단계입니다. 고급 수학을 사용하면, 이 타겟팅은 정확히 원을 도는 로봇들을 공격하여 맞출 수 있습니다. 그러면서, 직선형으로 움직이는 로봇을 공격하는데도 효과를 발휘합니다. Alisdair Owens가 이 기술을 구현하는 방법을 설명하고 테스트 할 수 있는 예제 로봇도 제공합니다.

총알 피하기
승리하는 로보코드 로봇을 만들려면, 상대편이 여러분을 공격하는 것 보다 더 많이 여러분이 상대편을 공격해야 합니다. 자신의 로봇이 상대편 로봇을 타겟팅 하도록 하는 것은 더할 나위 없는 기술이지만, 상대편이 여러분 로봇을 타겟팅 할 수 없다면 어떻게 될까요? 간단한 트릭과 추측을 통해, DodgeBot은 총알을 피하는 방법을 보여줍니다.

레이더 스위프(Radar Sweep)
로봇의 레이더(radar)를 가장 효율적으로 사용하여 상대편의 위치에 대한 최신 정보를 얻는 방법을 설명합니다.

Roboleague
로보코드 플레이어들을 위한 리그를 만드는 것에 관심 있으십니까? 이 글에서, Christian Schnell이 그가 어떻게 그의 Roboleague을 만들었는지에 대한 방법을 설명합니다.

Polymorphic enemy cache
성공적인 로봇들은 전투 시 중요한 결정을 내릴 때 언제라도 액세스 할 수 있는 축적된 정보를 관리하고 있습니다. 적들의 움직임 패턴 분석부터, 적들이 얼마나 접근해 있느냐와 힘에 따라서 누구를 공격할지를 결정하는 방법까지 다양한 면에서 유용합니다. 이 글에서는 다형성을 이용하는 최신 객체의 편의성을 가지면서 효율적이고, 빠른 에너미 캐시(Enemy Cache)를 구현하는 방법을 설명합니다.

확장 가능하며, 재사용 가능한 로봇
Ray Vermette은 그의 로보코드 로봇을 모듈과, 재사용 가능한 조각으로 나누어서, 로봇들의 다양한 행동 패턴들을 관리하는 방법을 설명합니다.

로보코드 전략
로보코드 전략 가이드에서는 Gladiatorial League의 역사를 설명하고, 움직임, 슈팅, 정보 모으기 등의 다양한 전략 레벨을 설명합니다.

총알 추적하기
상대편을 조준하는 가장 적절한 기술을 사용하기 위해서는 어떤 기술이 작동하고, 어떤 기술이 작동하지 않는지에 대한 정확한 통계가 있어야 합니다. 이 글에서 Ray Vermette은 BulletTracker 클래스를 구현하여 이 기술을 사용하는 방법을 설명합니다.

원문: http://www.ibm.com/developerworks/kr/library/j-robotips/

by cranix 2007. 7. 11. 18:26

음 이거 게시판에 있나요? 저는 못찾아서 올려봅니다.

이거 전에 어떤분이 질문하신것 같은데요.

(방법은 공유기 필요없이 랜카드 두개로 인터넷 공유하기와 같습니다.)


요새 노트북에 유선랜 + 무선랜은 기본이니 이것을 이용했습니다.

우선 노트북 인터넷은 유선랜으로 연결합니다. 이것을 인터넷공유를 합니다.(설정에보면 있지요)

무선랜 TCP/IP 설정에 보시면 IP가 192.162.0.1 과 서브넷은 255.255.255.0으로 되어있을것입니다.

무선네트워크 에 들어가 기본설정네트워크에 들어가 추가하셔서 무선랜 이름을 지워주세요(이 이름은 PDA에서도 같아야합니다.)

개방모드, 암호화는 안해도 되고 하실분은 하셔도 되고( 다른 사람이 무단으로 못들어오게 할려면 해야겠죠)

그러면 무선랜으로 인터넷 공유할 수 있는 준비가 노트북에서 끝났습니다.



인제 PDA로 가서 무선랜 검색하셔서 노트북 무선랜이 나오면 그것을 잡고 설정하셔서 IP를 정해주면됩니다.

(새로추가하시고 이름 같은것으로 쓰셔도 됩니다.)

원래 IP는 자동으로 해줘야하는데 그렇게 안되던군요

그래서 저는 IP 192.162.0.2 서브넷은 255.255.255.0 DNS는 보통 쓰는것으로하고 기본게이트웨이는 192.168.0.1 로 하였습니다.

연결해서 쓰니 잘 되었습니다.

음 아무래도 설명이 많이 부족한것 같은데요 제가 Nespot CM을 이용해 무선랜 설정을해서 설명하기가 좀 모호하군요^^;


결론 : 공유기 없이 (무선랜되는)노트북만 이용해서 집에서 돌아다니면 PDA로 인터넷 가능~~

http://cafe.naver.com/hx4700.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=5062

by cranix 2007. 5. 16. 17:13

 "내 비스타가 빨라졌어요!!!   USB 하나 꼽았을 뿐인데..."

 

    - 레디부스트(Readyboost)

 


이번에는 비스타에 포함된 몇몇 새 기술 중 슬그머니 각광받고 있는 레디부스트(Readboost) 기능을 소개해 보겠습니다.


최근 삼성전자에서 개발한 하이브리드 HDD에 대한 기사를 보신 분 있으실 겁니다.


HDD + NAND Flash memory 형태의 제품으로 몇몇 부팅에 관계된 파일을 Flash에 탑재함으로써 부팅속도를 올려준다죠.


비스타에서도 이와 같은 개념으로 새로운 기능을 추가시켰는데요,


HDD보다 읽기 속도가 빠른 NAND flash의 장점을 이용해서, USB 메모리에 자주 사용하는 파일을 캐쉬 형태로 저장해 두는 기술입니다.


이론이야 어떻든 사용하는 방법은,



가) 비스타에서 요구하는 속도를 만족하는 USB 메모리를 PC에 꼽는다.


나) '속성'에서 레디부스트 기능을 켠다

 


사용자 삽입 이미지



이게 다 입니다.


별거 아닌 것 같지만 제약이 좀 따르는데요,
 
 
1) 빠른 메모리(보통 SLC 이상이면 대부분 가능)여야 한다.
 
2) 최소 512MB 이상, 4G 이하여야 한다.
 
3) 한 시스템에서 하나의 메모리만 레디부스트 기능을 사용할 수 있다.
 
 
(위의 규격을 만족하는 메모리 가격이 요즘 5만~11만원 정도 하는군요(2007년 2월 기준))
 
 
미국 MS포럼 FAQ에서는 해당 메모리가 FAT32로 포멧되어야 하고, 모든 CF 및 SD를 지원하지는 않는다고 밝히고 있습니다만,
 
제 경우는 Transcend X120 CF 4G를 모니터에 내장된 CF 리더기에 꼽고, NTFS로 포멧한 후, 3860MB의 레디부스트를 지정함으로써
 
레디부스트 기능을 사용할 수 있었습니다.
 
 
인터넷에서 찾아본 동영상에서는 DELL 코어2듀오 노트북에서 512MB USB 메모리에 레디부스트를 적용,
 
그냥은 45초 걸리던 부팅속도가 14초로 줄어든 모습을 보여주기도 하였는데, 제 경우는 그정도의 성능 향상은 아니군요.
 
하지만 원래 1분 넘게 걸리던 부팅이 50초 정도로 줄어든 것 같긴 합니다.
 
성능 향상이 별로 없었던 결과에 대해 제가 추측해 본 원인은,
 
 
가) 모니터 내장 CF 리더기 속도가 충분치 못하다
 
나) 부팅시 초기 로딩 프로그램이 너무 많고 비스타에 최적화 되지 않았다
 
다) Intel chipset과 AMD의 nForce 칩셋은 메모리 콘트롤 방식이 다르므로 레디부스트 적용 결과에 차이가 난다
 
 
뭐 이밖에도 여러 원인이 있을 수 있겠지요.
 
 
여러분도 여유가 되신다면 USB나 CF 메모리 등으로 한 번 시험해 보세요.
 
공짜로 얻은 메모리로 부팅 속도가 두배 빨라진다면 그게 어딥니까?
 
 
 
 
P.S. MS 측에서는 레디부스트를 적용하여도 해당 메모리 수명의 단축은 없다고 하지만 어디까지나 Ver. 1.0 쯤의 기술이므로
 
       장담할 수는 없습니다.
 
       매우 비싸고 소중한 메모리라면... 조금 기다려 보시는 것도 좋겠네요.
 
by cranix 2007. 5. 15. 12:10

 [허가권필드]

 

 

#스티키비트(Sticky bit) 란?

 

 모든 사용자가 사용할 수 있는 디텍토리에 지정하는 것으로 적용시 디텍토리 내에 있는

파일을 임의대로 삭제할 수 없고, 오직 소유자에게만 삭제, 변경 권한이 있다.

리눅스에서는 /tmp 디텍토리가 대표적으로 스티키비트(sticky bit)가 설정되어있다.  

 

 

다시 말하자면 다중사용자가 공동작업을 하는 디텍토리의 경우, 사용자들에게 파일을 작성하는 (디텍토리)권한을 주는 것은  동시에 다른 사용자의 파일을 지울 수 있는 권한도 갖게한다. 따라서 스티키비트(Sticky bit)를 설정하여 '파일을 작성할 수 있지만 남의 파일을 지울 수 없게'하는 것이다.

 

 

 

#스티키비트(Sticky bit)의 파일 퍼미션 변경

 

* 절대표기 값 : 1000

* 스티키비트의 적용과 해제 ( o : other 다른사용자, t : 스티키비트 약자)

    chmod o+t 파일이름 : 스티키비트의 적용

    chmod o-t 파일이름 : 스티키비트의 적용 해제



     출처 : http://blog.naver.com/savemyface/130006019051 엘렌님의 블로그

            한국기술교육대학 박진우 연구원님 강의자료 '디텍토리 구조와 파일특성'

by cranix 2007. 4. 30. 23:56
| 1 ··· 5 6 7 8 9 10 |