웹 개발2009.03.27 09:06
JavaFX 코딩 대회가 열리고 있습니다.

상금이 $25,000 입니다. 한 3천5백만원 정도군요.

학생뿐만아니라 프로페셔널 개발자들도 참여할 수 있다고하는 군요.

5월 29일이 데드라인이랍니다. 그 전에 JavaFX 어플리케이션을 만들어 등록하면 된다고 합니다.

상금 내용은 다음과 같습니다.
  • 1등에게 $25,000, 2등에게 $10,000, 3등에게 $5,000 을 준다고합니다.
  • 학생들에게는 top 3를 뽑아 공히 $1,500 을 준다고 합니다.
  • 100 개의 작품을 선정하여 $25 상당의 아마존 상품권을 지급한다고 합니다.
모든 상에 중복 당선되어도 상금도 중복으로 지급된다고 합니다.
그러면 학생이 더욱 유리하겠군요.

대회 룰은 다음과 같습니다.
  • JavaFX 1.1 어플리케이션으로 Netbeans 프로젝트 형태로 등록되어야 합니다.
  • 다음 환경을 지원해야 합니다.
    • Windows XP SP3, FireFox 3.0, JRE 1.6u12
    • Windows Vista, Firefox 3.0, JRE 1.6u12
    • MacOS 10.5.4, Safari 3, Java SE 1.6.0_07
    • JavaFX 1.1 Mobile Emulator

보다 자세한 사항은 http://javafx.com/challenge/?intcmp=2668 를 참조하세요.

경기도 안좋은데 이런 대회에 참가하여 돈을 벌어보시는 것도 좋을 듯 싶습니다.
저작자 표시 비영리 변경 금지
신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.12.09 11:42
공교롭게도 오픈소스 데이터베이스의 대명사 MySQL 5.1이 릴리즈된날 똑같이 PHP 5.2.8이 릴리즈되었습니다.

PHP 5,2,8의 릴리즈 소식은 http://www.php.net/index.php#id2008-12-08-1 에서 확인하실 수 있습니다.

다운로드는 http://www.php.net/downloads.php 에서 받으십시오.

이번 PHP 5.2.8은 PHP 5.2.7을 발표한지 나흘만에 발표한 것이어서 그 배경이 관심이 간다.

사실 지난 12월 4일 PHP 5.2.7을 발표했다. 이전 버전에 대해서 안정성에 주안점을 두고 보안에 관련된 몇 가지 버그를 포함하여  120 여 가지의 버그를 수정했다고 발표했다. 그러나 발표 직후 보안 관련 버그가 발견되어 배포를 중단하고 PHP 5.2.8을 발표하기 전까지는 PHP 5.2.6을 사용하라는 공지가 올라왔었다.
그리고, 바로 보안관련 버그를 수정한 PHP 5.2.8을 발표한 것이다.

저작자 표시 비영리 변경 금지
신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.12.09 09:31

Sun Microsystems사는 12월 8일 가장 대중적인 오픈소스 데이터베이스인 MySQL의 새로운 메이저 버전인  MySQL 5.1을 릴리즈했습니다.

이번 5.1 버전에서는 퍼포먼스가 더욱 향상 되었고, 대용량 데이터베이스에 대한 관리를 단순화했다고 합니다.

MySQL 5.1은 dev.mysql.com/download에서 다운로드받을 수 있습니다.

MySQL 5.1의 릴리즈 소식에 대한 자세한 사항은 MySQL news 사이트에서 확인할 수 있습니다.

저작자 표시 비영리 변경 금지
신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.06.04 13:23

초대의 글

월드 와이드 웹이 탄생한지 10년이 넘은 현재 인터넷은 우리의 삶에 깊숙히 자리를 잡고 있습니다. 빠른 초고속 인터넷 성장과 전 국민이 인터넷의 혜택을 누리며 살아 가고 있고 IT 강국으로 세계적으로 알려져 있습니다.

하지만 우리의 인터넷 발전 방향은 글로벌 관점에서 크게 벗어나고 있음을 깨닫게 됩니다. 웹 2.0 이라는 플랫폼 웹 기술과 리치 웹 인터넷 기술 등의 조류를 비추어 볼 때 국내의 현실은 비 표준 환경과 플랫폼 종속적인 플러그인 기술들이 대세를 이루고 있습니다. 이에 따라 인터넷 보안 약화와 차별적 서비스 제공 등이 보편적인 문제가 되었습니다.

국내 웹 기술 전문가 모임인 '미래 웹 포럼'에서는 글로벌 관점의 웹 기술 동향과 국내 현실을 진단해 보고 대안을 제시하는 워크샵을 개최 합니다. 여러분의 많은 참여와 고견을 부탁 드립니다.

등록신청

프로그램 안내

글로벌 웹 동향과 한국의 웹에 대해 고민하는 시간

본 행사의 프로그램은 주제 발표, 기술 발표, 패널로 구성되어 있습니다. 해외 연사의 경우, 영어로 진행되나 편의를 위해 동시 통역을 제공 합니다.

시 간 주 제 연 사
09:30 - 10:00 등 록
10:00 - 10:20 환영사 TBD
주제 발표
10:20 - 11:00 21세기 인터넷의 미래 Vint Cerf
(Google 수석부사장)
11:00 - 11:40 TBD Mitchell Baker
(Mozilla 재단 의장)
11:40 - 12:00 웹표준 경진대회 시상식
12:00 - 13:00 점심식사
웹 브라우저 기술 현황
13:00 - 13:40 차세대 웹 표준: HTML5, 위젯 등
애플리케이션 플랫폼으로 웹 기술의 진화 방향, HTML5, SVG, 위젯 및 Ajax 기술 표준화 등 W3C의 최근 기술 표준 현황 소개.
Charles McCathieNevile
(Opera Software)
13:40 - 14:20 Microsoft의 사용자 경험 전략: IE8 및 실버라이트2
사용자 경험을 확대하기 위해 다양한 디바이스를 지원하는 MS 기술을 소개하고 출시 예정인 IE8과 실버라이트2 소개.
Laurence Moroney
(Microsoft Corp.)
14:20 - 15:00 TBD TBD
(Mozilla Corp.)
15:00 - 15:20 휴식 시간
한국의 웹 환경
15:20 - 16:00 주제 발표
오픈 웹 이슈(김기창, 고려대학교)
공인 인증 이슈(옥상훈, 어도비 시스템즈)
전자 지불 이슈(이동산, 페이게이트)
웹 표준 이슈(신현석, 시도우)
16:00 - 17:00 패널 토의
좌장- 김기창
패널- 옥상훈, 이동산, 신현석
17:00 ~ 폐 회
신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.05.15 10:27

Configuration 클래스

CakePHP에서 몇 가지 설정이 필요함에도 불구하고, 설정은 가끔은 사용자 어플리케이션을 위해서는 사용자의 설정 룰을 따르는 것이 유용할 때가 있다. 사용자 설정은 변수 또는 상수를 정의해서 사용한다. 이들 변수나 상수를 사용할 때마다 설정 파일을 포함해야 한다.

CakePHP의 새로운 Configure 클래스는 어플리케이션이나 실행시에 특정값을 저장하고, 읽을 수 있다. 이 클래스에는 무엇이든지 저장할 수 있으므로 주의가 필요하다. 이 클래스의 사용은 일반 코드와 다른 곳에서 하는 것이 좋다. Configure 클래스의 주된 목적은 여러 object에서 공동으로 사용하는 변수를 한 곳에 집중하는 데 있다.

configure 클래스는 singleton으로 행동한다, 이 클래스의 method는 어플리케이션의 어디에서건 호출할 수 있다.

Configure Methods

write

write(string $key, mixed $value)

write() 함수는 어플리케이션의 설정에서 데이터를 저장하기 위해서 사용한다.

Configure::write(‘Company.name’, ‘Pizza, Inc.’);
Configure::write(‘Company.slogan’, ‘Pizza for your body and soul’);


 

$key 파라미터에서 dot을 사용하는 것에 유의하라. 이를 사용하면 설정을 논리 그룹으로 관리할 수 있다.
다음과 같이 한번에 호출할 수도 있다.

Configure::write(
 
Company’.array(‘name’ => ‘Pizza, Inc.’, ‘slogan’ => ‘Pizza for your body and soul’)
);

Configure::write(‘debug’, $int) 를 사용하여 debug 모드와 프로덕션 모드를 스위치할 수 있다.

read

read(string $key = ‘debug’)

어플리케이션에서 설정데이터를 읽을 때 사용한다. key를 지정하면, key에 대한 데이터를 반환한다. 위에서 write()로 함수로 설정한 key를 읽으려면 다음과 같이 한다.

Configure::read(‘Company.name’);
Configure::read(‘Company.slogan’);
Configure::read(‘Company’);
array(‘name’ => ‘Pizza, Inc.’, ‘slogan’ => ‘Pizza for your body and soul’)


delete

 delete(string $key)

설정에서 해당 key에 관한 정보를 삭제한다.

Configure::delete(‘Company.name’);


load

load(string $path)

load는 파일로부터 설정 데이터를 읽는다.

// /app/config/messages.php
<?php
$config[‘Company’][‘name’] = ‘Pizza, Inc.’;
$config[‘Company’][‘slogan’] = ‘Pizza for your body and soul’;
$config[‘Company’][‘phone’] = ‘555-5555-5555’;
?>

<?php
Configure::load(‘messages’);
Configure::read(‘company.name’);
?>

먼저 messages.php 파일에서 $config 배열에 key-value 쌍으로 설정 값을 미리 설정해놓았다. 이를 load() 함수를 사용하여 읽었다. load() 함수로 읽으면 이 전에 설정한 값은 load()로 읽은 것으로 대체된다.

CakePHPcore 설정 변수

Configure 클래스는 core CakePHP 설정 변수를 관리하기 위해서 사용한다. 이들 변수는 /app/config/core.php 에 있다.

설정 변수           | 설명
-------------------------------------------------------------------------
debug              | CakePHP의 디버깅 출력을 변경한다.
                  
| 0 : 프로덕션 모드다. 디버깅 출력을 하지않는다.
                  
| 1 : error, warning을 출력한다.
                  
| 2 : error, warning, SQL을 출력한다.
                  
| 3 : error, warning, SQL, 콘트롤러 덤프를 출력한다.
App.bakeUrl        | apache 웹 서버의 mod_rewrite를 사용하지 않는다면
                   | 이 설정을 활성화해야 한다
.
                   |
그리고 .htaccess 파일도 삭제해야 한다.
Routing.admin      | CakePHPadmin route의 장점을 사용하지 않을 거라면
                   | 이 설정을
Cache.disable      | true로 설정하면, 사이트 전체에 캐싱을 사용하지 않는다.
Cache.check        | true로 설정하면, view 캐싱을 가능하게 한다.
                   |
캐싱을 가능하게 하는 것은 콘트롤러를 필요로 한다,
                   | 하지만 이 변수는 콘트롤러의 설정을 검사한다.
Session.save       | CakePHPSession을 위한 저장장소로 어떤 것을 사용할
                   | 것인지를 결정한다
.
                  
| php : PHPsession 저장장소를 이용한다.
                  
| cake : /app/tmp 에 저장한다.
                  
| database:session 데이터를 데이터베이스 테이블에 저장한다.
                  
| /app/config/sql/sessions.sql SQL을 이용하여 테이블을
                   | 생성해야 한다
.
Session.table      | session 정보를 저장하는 테이블 이름을 지정한다.
Session.database   | session 정보를 저장하는 데이터베이스
Session.cookie     | session을 추적하는데 사용할 cookie 이름
Session.timeout    | 기본 session timeout. 초로 표현한다.
                   |
실제 값은 Security.level에 의존한다.
Session.start      | true로 설정하면 session은 자동으로 시작한다.
Session.checkAgent | false로 설정하면, CakePHP session은 브라우저가
                   |
requests 사이에 바뀌었는지를 검사하지 않는다.
Security.level     | CakePHP 보안 등급. Session.tiemout에서 정의한 Session
                   | timeout
은 이 값에 따라 다음과 같이 곱해서 사용한다.
                   
| high = x 10
                  
| medium = x 100
                  
| low = x 300
Security.salt      | security hashing에 사용하는 무작위 문자열
Acl.classname,     | CakePHPAccess Control List 기능을 위해서
Acl.database       | 사용되는 상수


Configure
클래스는 실행시에 core 설정의 세팅을 읽거나 쓸 수 있다. 어플리케이션의 제한적인 부분에서 디버그 옵션을 바꾸거나 할 때 사용할 수 있다.

신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.05.15 10:23

MySQL에서 중요한 테이블을 삭제하는 사고가 일어나면, 그에 해당하는 어플리케이션은 더이상 작동하지 않는다. 이러한 문제를 해결하가 위해서 Zmanda Recovery Manager를 사용한다.

MySQL 데이터베이스 관리자라면, 정기적으로 데이터베이스를 백업해야 한다. 누군가 MySQL에서 중요한 테이블을 삭제하면, MySQL을 이용하는 어플리케이션은 더 이상 작동하지 않는다. 이러한 상황에서 복구할 수 있는 방법은 무엇인가?

이에 대한 답변은 MySQL binary log. Binary log는 데이터베이스 퍼포먼스에 최소한의 영향을 끼치면서 데이터베이스의 모든 수정사항을 기록한다. MySQLbinay log는 서버에서 일어난다. MySQL 명령인 mysqlbinlog를 사용하여 binary log로부터 복구할 수 있다.

좀더 종합적인 해결책으로는 MySQL을 위한 Zmanda Recovery Manager를 사용하는 것이다. mysql-zrm 툴은 binary log를 검색할 수 있게 하고, 증분 백업(incremental backup)에서 선택하여 restore할 수 있게 한다.

# mysql-zrm --action parse-binlogs   --source-directory=/var/lib/mysql/sugarcrm/20060915101613
Log filename                 | Log Position | Timestamp         | Event Type |    Event
/var/lib/mysql/my-bin.000015 | 11013        | 06-09-12 06:20:03 | Xid = 4413 | COMMIT;
/var/lib/mysql/my-bin.000015 | 11159        | 06-09-12 06:20:03 | Query      | DROP TABLE IF EXISTS `accounts`;


여기서 SugarCRM 데이터베이스의 증분백업으로부터 사용자 테이블을 삭제하지 않고 선택적으로 복구하도록 하겠다. 2006915일에 일어난 증분백업으로부터 log 위치 11159DROP TABLE 이벤트를 제외하고 데이터베이스를 복구하기 위해 두 개의 복구 명령을 수행한다.

# mysql-zrm --action restore  --backup-set sugarcrm \
         --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
         --stop-position 11014
# mysql-zrm --action restore   --backup-set sugarcrm \
         --source-directory=/var/lib/mysql/ sugarcrm/20060915101613/ \
         --start-position 11160


보다 자세한 정보를 위해서는 다음 사이트를 참고한다.

Zmanda Recovery Manager

신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.05.15 10:19

CakePHP의 데이터베이스 설정은 app/config/database.php 파일을 이용한다. app/config/database.php.default 파일을 열어보면 예제를 볼 수 있다.


var $default = array('driver' => 'mysql',
                     '
persistent' => false,
                     'host' => 'localhost',
                     '
login' => 'cakephp',
                     '
password' => 'password',
                     '
database' => 'cakephp',
                     '
prefix' => 'cp_');

CakePHP의 데이터베이스 연결은 model에서 $useDbConfig 프로퍼티에 다른 연결을 설정하지 않으면, 데이터베이스 연결에 $default 연결을 사용한다.
만일 어플리케이션에 다른 데이터베이스 연결을 추가한다면, $default와 같은 배열을 다른 이름으로 하나 더 만들고, 예를 들면 $legacy, 이를 사용하는 model에서 $useDbConfig = ‘legacy’; 를 설정하여 사용한다.

Key            | Value
driver         | 데이터베이스 드라이버의 이름이다. 다음 이름을 사용할 수 있다.
               | mysql, postgress, sqlite, pear-drivername,
               | adodb-drivername, mssql, oracle, odbc
persistent     | 데이터베이스에 persistent 연결을 사용할 것인지를 true,
               | false로 표시한다.
host           | 데이터베이스 서버의 hostname 또는 ip 주소
login          | 데이터베이스 계정의 username
password       | 데이터베이스 계정의 암호
database       | 연결할 데이터베이스의 이름
prefix         | 데이터베이스의 테이블 이름에 사용하는 prefix 값
               | prefix를 사용하지 않으면 비워둔다.
port           | 데이터베이스 서버와 연결에 사용할 TCP 포트값
encoding       | 데이터베이스 서버에 보낼 SQL 문장의 character set
schema         | postgressSQL을 사용할 때 사용할 schema를 지정한다.

prefixmodel이 아닌 테이블을 위한 것이다. 예를 들어 Apple, Flavor 모델을 위해서 join 테이블을 만든다면, 이들의 이름은 prefix_apples_prefix_flavors 가 아닌 prefix_apples_flavors가 되어야 한다, 그리고 prefix 설정은 ‘prefix_’ 로 적는다.
신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요

웹 개발2008.05.15 09:21

CakePHP는 간단하게 웹 서버의 도큐먼트 루트에 압축을 푸는 것으로 설치할 수 있다. 또는 복잡하지만 원하는 대로 설치할 수도 있다. 여기서는 개발, 프로덕션 그리고 고급 설치방법 등 세 가지 설치 방법을 살펴볼 것이다.

  • 개발용 설치 : 가장 쉽다. CakePHP 설치 디렉토리 이름을 그대로 어플리케이션의 URL로 사용한다. 보안에는 취약하다.
  • 프로덕션용 설치 : 웹 서버의 도큐먼트 루트를 설정할 수 있어야 한다. URL이 깔끔하다. 보안이 잘된다.
  • 고급 설치 : 몇 가지 설정으로 CakePHP를 파일시스템의 다른 곳에 둘 수 있다. 이로써 하나의 CakePHP 코어 라이브러리를 다른 CakePHP 어플리케이션과 공유할 수 있다.


개발용 설치

단지 CakePHP를 웹 서버의 도큐먼트 루트에 설치한다. 웹 서버의 도큐먼트 루트가 /var/www/html 이라면, 개발용 설치된 파일시스템은 다음과 같을 것이다.

/var/www/html
   
/cake
   
/app
   
/cake
   
/docs
   
/index.php
   
/vendors

CakePHP의 어플리케이션을 보기위해서는 http://your.domain.com/cake/ 를 브라우저로 보면된다.

프로덕션용 설치

프로덕션에서 이용하기 위한 설정이라면, 웹 서버의 도큐먼트 루트를 바꿀 수 있다. 프로덕션 설치를 선택하는 것은 도메인 전체가 하나의 CakePHP 어플리케이션이라는 것을 의미한다. 프로덕션 설치는 다음과 같은 레이아웃을 갖는다.

/path_to_cake_install/
   
/app
   
/webroot
   
/cake
   
/docs
   
/index.php
   
/vendors

만약 웹 서버로 아파치를 이용한다면 DocumentRoot 다음과 같이 수정한다.

DocumentRoot /path_to_cake_install/app/webroot

CakePHP 어플리케이션을 보려면, http://your.domain.com 을 브라우저로 보면된다.

고급 설치

CakePHP를 다른 곳에 설치하려는 많은 이유가 있을 것이다. 여기서는 CakePHP 디렉토리를 파일시스템에 어떻게 나눌 수 있는 지를 소개한다.

Cake 어플리케이션에는 다음의 세 개의 메인 파트가 있다.

  1. 코어 CakePHP 라이브러리 /cake
  2. Cake로 제작한 어플리케이션 /app
  3. 어플리케이션의 루트 /app/webroot

이들 각 디렉토리는 웹 서버에서 접근해야 하는 webroot를 제외하고 파일 시스템의 어디든 위치할 수 있다. Cake에 따로 알려주기만 하면, webroot 폴더도 app 폴더 밖에 두어도 된다.

이렇게 하려면, /app/webroot/index.php 를 수정해야 한다. 여기에는 수정해야 할 세 개의 상수가 있다.

  • ROOT : app 폴더를 포함하는 디렉토리의 패쓰를 적는다.
  • APP_DIR : app 폴더의 패쓰를 적는다.
  • CAKE_CORE_INCLUDE_PATH : CakePHP 라이브러리 폴더의 패쓰를 적는다.

다음 예를 보면 고급 설치에 대해서 잘 이해가 될 것이다.

  • CakePHP의 기본 라이브러리는 /use/lib/cake 에 둘 것이다.

  • 어플리케이션의 webroot/var/www/mysite/ 에 둘 것이다.

  • 어플리케이션의 app 디렉토리는 /home/me/mysite 에 둘 것이다.

그러면 webroot/var/www/mysite/index.php 파일을 열어 ROOT, APP_DIR, CAKE_CORE_INCLUDE_PATH를 다음과 같이 수정한다.

if (!defined(‘ROOT’)) {
  define(‘ROOT’, DS.’home’.DS.’me’);
}
if (!defined(‘APP_DIR’)) {
 
define(‘APP_DIR’, ‘mysite’);
}
if (!defined(‘CAKE_CORE_INCLUDE_PATH’)) {
 
define(‘CAKE_CORE_INCLUDE_PATH’, DS.’usr’.DS.’lib’.DS.’cake’);
}

이 렇게 해서 mysite 를 위한 CakePHP 설정이 끝났다. 같은 호스트에서 다른 프로젝트를 역시 CakePHP를 사용하여 작업하려면 CakePHP의 코어 디렉토리는 그대로 두고, app 디렉토리와 webroot 디렉토리를 새로 만들고, webroot의 index.php를 수정하면 된다.

신고
Posted by 무한루프 달리만듦

댓글을 달아 주세요


티스토리 툴바