'분류 전체보기'에 해당되는 글 1012

  1. 2009.07.30 탐색기 설정
  2. 2009.07.28 개발자가 소프트웨어 사업하기
  3. 2009.07.27 중간보고
  4. 2009.07.27 비상주 개발====이번 서현건에 대한 문제점, ...
  5. 2009.07.26 Derby 쿼리 실행 - ij
  6. 2009.07.26 Derby 설정
  7. 2009.07.26 Eclipse Data Source Explorer에 Derby 설정
  8. 2009.07.26 Eclipse, WTP, Derby로 웹 애플리케이션 구현하기
  9. 2009.07.26 Derby 구동 Ant 스크립트
  10. 2009.07.26 Gmail 누락된 파일첨부 검사
  11. 2009.07.26 Java EE 5 스펙에서 JSTL 구현
  12. 2009.07.25 SQL Server 2005에서 SchemaSpy 실행하기
  13. 2009.07.25 [IBM dWs] SchemaSpy - 데이터베이스 문서화하기
  14. 2009.07.24 SchemaSpy 실행시 charset 지정하기 2
  15. 2009.07.24 Apache Derby
  16. 2009.07.23 Eclipse에서 OpenJPA 사용하기
  17. 2009.07.22 자율, 점검, 책임
  18. 2009.07.21 OpenVPN 접속 오류
  19. 2009.07.20 NetBeans - Using Hibernate with the Java Persistence API
  20. 2009.07.20 NetBeans - Using Java Persistence in a Web Application 2
  21. 2009.07.20 SSH 서버 접근이 안되는 경우가 있음.
  22. 2009.07.20 Hampton gives L.A. an extra run
  23. 2009.07.19 JSP 2.0 EXPRESSION LANGUAGE
  24. 2009.07.19 JSTL Quick Reference
  25. 2009.07.18 파일 이름 바꾸기
  26. 2009.07.15 위키에 글쓰기
  27. 2009.07.15 메신저의 광고 차단하기
  28. 2009.07.13 악성 봇 감염 확인
  29. 2009.07.13 [Trac] TOW 사용자 관리
  30. 2009.07.12 [Trac] TOW 권한 관리

탐색기 설정


표준 단추
주소 표시줄
상태 표시줄
자세히

제목 표시줄에 전체 경로 표시

- 탐색 창에서 폴더가 자동으로 확장되도록 설정


개발자가 소프트웨어 사업하기

개발자 출신이 특정 아이템을 가지고 창업을 하는 경우가 많다.
요즘은 줄었지만 그래도 개발자들이 창업을 하고 대부분 망한다.
왜 그럴까?

개발자 출신은 사업을 해서 성공할 수 없나?

얼마전 친구녀석이 회사를 그만 두었다는 이야기를 들었다.
이 녀석은 영업이지만 회사설립에 관여하고 투자도 했었다.
음... 그런데 언젠가부터 회사가 어렵다는 말이 들리더니 결국은 동업자와 안좋게 끝내고 말았다.

동업자는 기술력이 꽤 뛰어난 사람으로 친구와 함께 회사를 차렸다.
처음에는 그동안의 인맥과 가지고 있는 기술력으로 그러저럭 먹고 살았지만, 그 다음이 문제였던거 같다.
자기 혼자 일하지는 못하니깐 직원을 채용하고 제품을 개발했지만 잘 안된거 같고,
납품 대금은 밀리고, 경제상황이 안좋아지면서 일거리는 줄어들고.
그랬던거 같다.

시작은 된다.
그걸로 1, 2년은 먹고 산다.
그런데 그 다음이 문제다.
어떻게 매출을 올릴지, 자금회전이 안되면 어떻게 대처할지 인력은 어떻게 할지, 회사가 더 커지면 관리는 어떻게 할지.

친구놈한테 소주나 한잔 사줘야겠다.
서울에서 만난 예전 회사사람들한테 돈 빌린다고 하길래 내가 빌려준다고 했다.
사회에서 만난 사람들한테 이런 모습은 안보이는게 좋지 않을까해서다.

이놈이 예전에 술마시고 헤어질때 지딴에는 회사다닌다고 차비해라고 만원을 주머니에 넣어줬다.
몇일 있다가 지리산에서 막걸리나 한잔해야지.


중간보고

일정 기간동안 프로젝트를 진행하다 보면 고객은 이 프로젝트가 잘 진행되고 있는지 궁금하게 생각한다.
요구사항을 분석하고 시스템을 설계하는 동안 무형의 시스템이 눈에 보이는 유형의 시스템으로 되는 과정을 보기를 원할텐데.

적당한 시점에 완성도가 높은 시스템으로 중간보고를 하는 것이 좋을 듯 하다.

예전에는 요구사항이 자꾸 변경되어서 개발중인 시스템을 보여주는 것을 꺼려했는데, 고객의 입장에서 보면 비싼 돈주고 일을 맡겼는데 이놈들이 무엇을 만들고 있는지, 제대로는 만드는지 궁금해 한다.

그리고 요구사항이 잘 반영되었는지 확인하는 차원에서 중간보고를 하면서 서로의 의견을 나누는 것이 좋겠다.
잘못된 결과물이라면 빨리 수정하는 것이 바람직하므로.

중간보고를 하는 시스템은 완성도가 높아야 한다.
개발자들은 일단 기능을 신경쓰지만 일반 사용자들은 이미지가 깨진다거나 사소한 오류에 민감하다.

뭐든지 적당하게 잘하는 것이 중요하지만 괜히 중간보고를 했다가 추가요청사항을 더 많이 만드는 경우도 있으므로 사전조율을 잘 할것.

비상주 개발====이번 서현건에 대한 문제점, ...

- 요즘 비상주로 프로젝트를 진행하다 보니 주 프로젝트의 진행상태를 알기 힘들다.
시스템이관을 위해서 어느날 방문을 해보면 변경사항이 많이 발생한것을 볼 수 있다.
같이 일하는 업체에게 변경사항이 발생하면 연락을 달라고 아무리 말을 해도 이 부분은 어쩔수 없는 듯하다.

다만 데이터베이스에 변경사항이 있는 경우에는 테이블 생성 스크립트를 이용해서 비교를 할수는 있겠다.

- 아무래도 비상주는 프로젝트 비용이 작은 만큼 규모가 크지 않아 주먹구구식으로 진행하기도 한다.
보고체계가 잡혀있지 않고 업무 전달이 비상주로 개발하는 나까지 전달 안될때도 많다.

정기적으로 보고를 해서 주 프로젝트에 관심을 지속적으로 가져야 한다.
주 프로젝트 PM과 통화도 하고, 필요하다면 주간보고 형식으로 서로 의견을 교환하자.

- 비록 비상주로 참여하지만 항상 프로젝트에 관심을 가지고 있다는 사실을 알려서 의견교환이 되도록 하자.

Derby 쿼리 실행 - ij

> ij
ij> connect 'jdbc:derby://localhost:1527/testDerbyDB;create=true';

ij> show connections;
CONNECTION0* -  jdbc:derby://localhost:1527/data/airlinesDB
* = 현재 연결

ij> show schemas;
TABLE_SCHEM
------------------------------
APP
NULLID
SQLJ
SYS
SYSCAT
SYSCS_DIAG
SYSCS_UTIL
SYSFUN
SYSIBM
SYSPROC
SYSSTAT

11행이 선택되었습니다.

ij> show tables in app;
TABLE_SCHEM         |TABLE_NAME                    |REMARKS
------------------------------------------------------------------------
APP                 |CITIES                        |
APP                 |FLIGHTAVAILABILITY            |
APP                 |FLIGHTHISTORY                 |
APP                 |FLIGHTS                       |
APP                 |USERS                         |

5행이 선택되었습니다.

ij> run ....

Derby 설정

derby.properties
derby.connection.requireAuthentication=true
derby.authentication.provider=BUILTIN
derby.user.USER=PASSWORD

DERBY_HOME/ 에 두라고도 하고
DERBY_HOME/bin/ 에 두라고도 하는데...
Eclipse에서 Ant로 구동할 때는 프로젝트 루트에 두면 된다.

Eclipse Data Source Explorer에 Derby 설정

더비를 네트워크 서버로 실행시켰는데 Eclipse Data Source Explorer에서는 접속이 안됨.
데이터베이스 경로를 data/airlinesDB이 아닌 절대경로로 맞출 것.
가니메데에서는 10.2 만 지원해서 그런지.
(더비는 10.5 인데 클라이언트도 버전을 타는지 잘 모르겠음)


Eclipse, WTP, Derby로 웹 애플리케이션 구현하기

http://www.ibm.com/developerworks/kr/library/dm-0509cline/
  1. Import LowFareAir.war
  2. Import derbyclient.jar, jstl.jar, standard.jar
  3. Import /data/airlinesDB/
  4. Import /devlib/derby.jar, derbynet.jar, derbyrun.jar
  5. build.xml : Derby를 서버로 구동시키는 Ant 스크립트, derby.properties
  6. web.xml 수정 : 데이터베이스 경로, 사용자/암호
  7. com.ibm.sample.DerbyDatabase.java 수정 : 데이터베이스 경로, 사용자/암호
  8. Data Source Explorer에 Derby 설정
  9. Tomcat 시작
- web.xml

Derby 구동 Ant 스크립트

> java -jar derbyrun.jar server start | stop

Gmail 누락된 파일첨부 검사

간혹 파일을 첨부하지 않고 메일을 보내는 경우가 있다.
Gmail에 재미있는 기능이 있다.
첨부라는 글자를 찾는다.


- 실험실에 많은 기능을 개발중이다.
이것도 재미있군.

- 파일첨부를 잊지 않게 하는 화면을 구성하자.
Gmail의 디테일 - 첨부파일 안내

Java EE 5 스펙에서 JSTL 구현

- Geronimo의 배신: GlassFish JSTL 1.2와 Apache Geronimo 2.0 통합 패키지 사용하기 (한글)

- JSF와 JSP 1.2
JSF 1.0에서는 JSTL의 EL과 비슷하게 동작하는 고유의 EL을 갖고 있으며, 이 때까지는 JSF EL과 JSTL EL은 호환성이 없었다.

- 통합 표현식 언어(Unified expression language)
자바 EE 5에서는 JSTL과 JSF의 EL이 합쳐져 JSTL과 JSF를 혼합해 쓰는 것이 가능해졌다.

- 자바 EE 5의 일부로서 EL
J2EE 1.4 스펙까지는 JSTL 구현이 필수 사항이 아니었지만 자바 EE 5 스펙에서는 JSTL 구현이 필수 사항이다.

- 제로니모와 글래스피시 JSTL
아파치 제로니모 개발자들은 자바 EE 5 구현체인 제로니모 2.0을 만들 때, JSTL 구현체를 포함해야만 했다.
통합 표현식 언어는 JSTL 구현체의 주요 요구사항이었지만, 많은 JSTL 구현체는 JSF와 함께 동작할 수 없어서 기존 구현체 중에서 선택할 수 없었다.
다행히도 제로니모 팀은 직접 JSTL과 통합 표현식 언어 구현체를 만드는 대신 썬의 글래스피시를 활용할 수 있었다.
글래스피시는 자바 EE 5 스펙을 위한 썬의 참조 구현체다.

SQL Server 2005에서 SchemaSpy 실행하기

- 데이터베이스 타입을 mssql05로 두고, 드라이버를 sqljdbc.jar를 사용한 경우 아래와 같은 에러가 발생한다.

Failed to retrieve column comments: com.microsoft.sqlserver.jdbc.SQLServerException: variant 데이터 형식은 지원되지 않습니다.
SELECT OBJECT_NAME(c.object_id) AS TABLE_NAME, c.name AS COLUMN_NAME, ex.value AS comments FROM sys.columns c LEFT OUTER JOIN sys.extended_properties ex ON ex.major_id = c.object_id AND ex.minor_id = c.column_id AND ex.name = 'MS_Description' WHERE OBJECTPROPERTY(c.object_id, 'IsMsShipped')=0 ORDER BY OBJECT_NAME(c.object_id), c.column_id
com.microsoft.sqlserver.jdbc.SQLServerException: 연결이 닫혔습니다.
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source)
    at com.microsoft.sqlserver.jdbc.SQLServerDatabaseMetaData.checkClosed(Unknown Source)
    ...
    at net.sourceforge.schemaspy.SchemaAnalyzer.analyze(SchemaAnalyzer.java:164)
    at net.sourceforge.schemaspy.Main.main(Main.java:21)

- 데이터베이스 타입을 mssql05-jtds로 바꾼다.

[IBM dWs] SchemaSpy - 데이터베이스 문서화하기

- 사람을 위한 자동화: 전자동 문서화

- SchemaSpy - Graphical Database Schema Metadata Browser

- Graphviz 가 필요함.
이클립스를 사용하면 설치후 이클립스 재시작 필요
재시작하지 않으면 PATH에 추가된 Graphviz를 Ant로 실행시키지 못한다.

- Ant
- 실행 옵션
  • -s : SQL Server 2005에서는 테이블명이 dbo.TABLE로 되어 있음. dbo로 지정해야 함.
  • -i : TB.* 는 TB로 시작하는 테이블/뷰만을 대상으로 한다.
  • -cp : path 태그는 안되고 property로 해야 함. 드라이버 위치를 지정해 준다.
  • -charset : 지정하지 않으면 한글이 깨짐
- 뷰도 보임
그러나 다른 데이터베이스 개체는 안보임.

SchemaSpy 실행시 charset 지정하기

SchemaSpy로 생성되는 HTML파일은 charset이 ISO-8859-1이어서 한글이 깨진다.
실행인자를 설명한 표에는 인코딩에 관련된 내용은 없다.
Ant로 처리해야 하나?

오늘[각주:1] 다시 SchemaSpy(4.1.1)를 살펴보다가 소스를 살펴봤다.

- net.sourceforge.schemaspy.view.HtmlFormatter.java

- net.sourceforge.schemaspy.Config.java

이럴수가....문서화되지 않은 인자가 더 많은거 같다.


  1. 2009-07-24 [본문으로]

Apache Derby

- http://db.apache.org/derby/

- 더비는 임베디드되거나 서버 형태로 구동될 수 있다.

- Embedded Derby
  • jdbc:derby:testDerbyDB;create=true
  • create=true 옵션은 데이터베이스가 없는 경우 생성하도록 한다.
  • 데이터베이스명만 있는 경우 사용자 디렉토리에 데이터베이스가 생긴다.(이 경우 C:\Documents and Settings\USER\testDerbyDB)
  • /testDerbyDB 이면 C드라이브에 생성됨, 절대경로로 지정할 수도 있음.
  • org.apache.derby.jdbc.EmbeddedDriver
  • derby.jar: contains the Derby engine and the Derby Embedded JDBC driver

- Derby Network Server
  • jdbc:derby://localhost:1527/testDerbyDB;create=true
  • DERBY/bin/startNetworkServer 로 서버를 시작할 수 있다.
  • 데이터베이스는 서버를 실행시킨 디렉토리에 생성된다. Eclipse에서 Ant로 실행시키면 프로젝트 루트에 생긴다.
  • org.apache.derby.jdbc.ClientDriver
  • 클라이언트 : derbyclient.jar
  • 서버 : derbyrun.jar, derbynet.jar, derby.jar

- 참고
Apache Derby로 개발하기 -- Trifecta: Apache Derby 소개 (한글)
Derby 소개
Cloudscape FAQ (한글)
derby의 유용한 기능

Eclipse에서 OpenJPA 사용하기

- 이클립스 유로파로 웹 개발하기, Part 1: 이클립스를 위한 Java EE (한글)

- Data Source Explorer 사용하기
  • Database 접속 설정하기
  • 테이블 생성
  • SQL 실행
  • 데이터 입력하고 저장하기
- OpenJPA 설정하기

- /baseball/src/org/developerworks/baseball/Player.java

- /baseball/src/META-INF/persistence.xml
- 테스트 코드
- 필요한 라이브러리
  • openjpa-1.2.1.jar : User Libraries로 추가
  • geronimo-jpa_3.0_spec-1.0.jar : JPA 구현체
  • geronimo-jta_1.1_spec-1.1.jar
  • serp-1.13.1.jar
  • commons-collections-3.2.jar
  • commons-lang-2.1.jar
- 참고
Java Persistence API
Implementation of Java Persistence API Downloads : 이 구현체는 toplink-essentials.jar, toplink-essentials-agent.jar 임

자율, 점검, 책임

로이스터감독은 선수들을 어떻게 관리할까?

코칭스태프가 유흥가를 쫓아다니면서 선수들을 잡아오고 외출을 금지하고 그런 이야기들은 야구팬들에게 있어서 생소한 이야기가 아닙니다.
불과 몇 년 전까지만 해도 흔히 있는 이야기였고 아마 지금도 그런 식으로 선수단을 단속하는 구단도 있겠지요.
분명히 몸이 재산인 선수들이 무분별한 사생활로 인해서 경기력의 저하가 오고 선수생명이 짧아진다면 선수들이 재산인 구단에서도 엄청난 손해이니 그럴 수밖에 없을 거라는 생각도 듭니다.

하지만, 로이스터 감독님이 부임한 이후 감독님의 성향상 일과 외의 개인시간은 철저하게 보장해주고 있습니다.
선수들에게 이렇게 해라 저렇게 해라 지시하는 것도 거의 없죠.
그렇다면, 선수들의 건강관리는 어떻게 할까요?

사직구장을 찾았을 때 선수들은 무언가 테스트를 받고 있었습니다.
'In Body'라고 불리는 기계에 올라서서 테스트를 받고 그 결과를 두고 장재영 트레이너코치와 함께 상의를 해서 자신이 해야 할 운동메뉴를 결정하더군요.

장재영 트레이닝 코치는 이 테스트에 대해서 일정기간에 한 번씩 선수들의 체지방, 근육량 등등의 모든 정보를 수집해서 이전의 결과들과 비교해 현재 선수의 컨디션이 어떠한지 피로가 얼마나 쌓여있는지를 검사하고 몸 상태가 정상이 아닌 선수는 최근에 어떠한 생활의 변화가 있었는지를 역추적해나간다는 설명을 했습니다.
이 선수가 스트레스로 인해서 잠을 제대로 못 자는지, 아니면 다른 요인으로 인해서 몸 상태가 좋지 않은 것인지를 따져 그에 맞는 처방을 내리고 운동메뉴와 치료를 통해서 최상의 컨디션을 유지할 수 있도록 한다는 것이었죠.

이런 테스트가 위에서 이야기한 것처럼 선수들을 단속하기 위한 수단은 아니겠지만 모든 것을 자율에 맡기는 대신 철저한 건강관리를 통해서 선수 스스로 자신의 몸을 관리해 나갈 수 있도록 한다는데 큰 의미가 있는 것이 아닐까 하는 생각이 들었습니다.
이런 기기와 테스트 등이 자이언츠에만 있는 것은 아니겠지만 자이언츠처럼 자율을 강조하고 유난히 원정거리가 길어 선수들의 체력관리가 중요한 팀에 있어서는 매우 중요한 역할을 하는 시스템이 아닐까 싶습니다.

자율적으로 알아서 관리하도록 한다.
점검을 해서 관리한다.
그에 대한 결과가 자신의 체력이나 경기출전 여부로 나타난다.

전권을 위임하되 점검을 해서 그에 상응하는 보상을 하거나 책임을 묻는다.

OpenVPN 접속 오류

OpenVPN 설치후 서버로 접속은 되었는데 ping 이 되지 않는다.
로그에 이런 에러가 보인다.

Fri Jul 17 14:24:49 2009 Notified TAP-Win32 driver to set a DHCP IP/netmask of 10.8.0.6/255.255.255.252 on interface {4B2B8225-026B-407D-8142-19DB91EAAFD3} [DHCP-serv: 10.8.0.5, lease-time: 31536000]
Fri Jul 17 14:24:49 2009 Successful ARP Flush on interface [17] {4B2B8225-026B-407D-8142-19DB91EAAFD3}
Fri Jul 17 14:24:49 2009 TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up
Fri Jul 17 14:24:49 2009 route ADD 10.8.0.1 MASK 255.255.255.255 10.8.0.5
Fri Jul 17 14:24:49 2009 ROUTE: route addition failed using CreateIpForwardEntry: 하나 이상의 인수가 올바르지 않습니다.   [if_index=17]
Fri Jul 17 14:24:49 2009 Route addition via IPAPI failed
Fri Jul 17 14:24:49 2009 Initialization Sequence Completed

Windows 2008 에서 openvpn-2.0.9-install.exe 으로 설치한 경우임.
openvpn-2.1_rc19-install.exe 로 설치할 것.

NetBeans - Using Hibernate with the Java Persistence API

http://www.netbeans.org/kb/docs/web/hibernate-jpa.html

NetBeans 로 Java Persistence API(Hibernate), JSF 사용하기
"Entity Classes from Database" wizard 로
[todo] 다시 해보기


- 이미지출처는 http://www.netbeans.org

NetBeans - Using Java Persistence in a Web Application 2

http://www.netbeans.org/kb/61/javaee/persistence.html

NetBeans 로 Java Persistence API, JSF 사용하기
"JSF Pages from Entity Class" wizard 로 Grails 처럼 CRUD 에 대한 페이지를 만들어 준다.






- 이미지출처는 http://www.netbeans.org

SSH 서버 접근이 안되는 경우가 있음.

기업체마다 보안문제때문에 내부 네트워크에 접속하는데 문제가 많다.
외부에서 접속할 수 있는 공인아이피를 할당해 주지 않고, 포트를 열어주지도 않는다.
그래서 원격접속 프로그램을 사용하기도 하고, SSH 터널링을 이용하기도 한다.

Z건설사의 SSH 서버를 더이상 이용할 수가 없어서 OpenVPN을 이용하려는데 회사 SSH서버로 접근이 안된다.
22번 포트로 나가는 것은 되는데 10022번 포트로 나가는 것은 그룹방화벽에서 막아둔거 같다.
  1. 테스트서버에서 10022번 포트로 접속가능하게 해달라.
  2. 우리쪽 포트를 22번으로 변경한다.
  3. 프록시서버나 설정을 사용할 순 없을까?
시간이 없으므로 2번 방법을 사용하기로 한다.

- 고객사 내부에서 22번 포트로 접근은 가능하므로 회사방화벽에서 22번을 오픈하고 이 포트와 SSH서버 포트(10022)로 연결을 하면 어떨까?
물론 22번 포트는 고객사에서만 접근가능하도록 하고.

2014-05-12
담당자에게 문의한 결과 현재 회사 방화벽에서는 포트포워딩이 안됨.
Windows 포트 포워딩으로 처리하거나 별도의 프로그램을 사용한다.

Hampton gives L.A. an extra run

JSP 2.0 EXPRESSION LANGUAGE

http://blog.sdnkorea.com/blog/272

- "." 와 [] 연산자 비교
${header["host"]} localhost:8080
${header.host} localhost:8080

${header["user-agent"]} Mozilla/5.0 (Macintosh;...)
${header.user-agent} 0 //마이너스 연산을 한다.

- []에 EL변수 사용가능
<c:set var="headerName" value="host"/>
${header[headerName]}

- 디폴트 값 정의하기
<c:out value="${colors[1024]}" default="transparent"/>

${colors[1024] == null ? "transparent" : colors[1024]}

- forEach구문에서 Map 사용하기
JSTL태그 forEach를 이용할 때, 반복 변수(iteration)는 java.util.Map.Entry 타입이다.
Map에 들어있는 데이터에 접근하려면 Entry#key 와 Entry#value를 사용하면 된다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
    java.util.Map map = new java.util.HashMap();
    map.put("a", "1");
    map.put("b", "2");
    map.put("c", "3");
    map.put("4", "d");
    pageContext.setAttribute("map", map);
%>
<c:forEach var="data" items="${map}">
${data.key}=${data.value}<br>
</c:forEach>
<hr>
${map["4"]}<br>
${map.4}<br> //EXCEPTION
<hr>
<c:forEach var="hdr" items="${header}">
${hdr.key}=${hdr.value}<br>
</c:forEach>
<hr>
<c:forEach var="cookieVal" items="${cookie}">
${cookieVal}<br>
</c:forEach>

JSTL Quick Reference


JSTL 기능이 간략하게 잘 정리되어 있다.

XML Tag Library, JSTL Configuration 를 다시 한번 살펴볼 것.
[todo]
<%@ taglib prefix="x" uri="http://java.sun.com/jstl/xml" %>

<%-- Create the XML --%>
<x:parse var="doc">
<users>
    <user id="997">
        <first-name>George</first-name>
        <last-name>Burdell</last-name>
    </user>
    <user id="998">
        <first-name>Joseph</first-name>
        <last-name>Blough</last-name>
    </user>
</users>
</x:parse>
<%-- Define a variable holding user ID --%>
<c:set var="userId" value="${user.id}" scope="page"/>
<%-- Find the user with matching ID --%>
<x:set var="user" select="$doc//users/user[@id=$pageScope:userId]"/>
<%-- Say Hi to the user --%>
Hi <x:out select="$user/first-name"/> !
java.lang.NoClassDefFoundError: org/apache/xpath/XPathException
    java.lang.ClassLoader.defineClass1(Native Method)
    java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)

[todo] 예전에 datasource 를 jndi 로 되어 있는 것만 되는줄 알았는데...음 confguration 으로 두면 좋은 점이 뭘까?

파일 이름 바꾸기

CD를 MP3로 변환하고 파일 이름을 바꿔야 한다.
가끔씩 간단한 배치파일을 만들어서 작업을 한다.

> dir /b > list.bat

Track01.mp3
Track02.mp3
...

파일을 수정한다.
에디터 플러그 매크로 등을 이용한다.
rename Track01.mp3 "Suite No.1 in C major BWV1066_1.mp3"
rename Track02.mp3 "Suite No.1 in C major BWV1066_2.mp3"
...

위키에 글쓰기

위키에 글을 쓰면서 가장 좋았던 점이 이력관리다.
협업으로 여러 사람이 글쓰기를 할 수 있는 것도 좋지만 가장 좋은 점이 과거에 썼던 기록을 찾아 볼 수 있는게 매력이다.

자주 쓸일은 없지만 오래전에 중요한 아이디를 위키에다 적었는데 필요없어서 지웠다.
다른 사람이 관리하니깐 내가 알 필요는 없어서 지운건데 얼마전에 그 사람이 나한테 물어본다.
그때 그 아이디 아냐고.
나도 한참을 헤매다가.
위키에서 과거 글을 찾아보았다.
혹시나 했는데 선명하게 아이디가 보였다.

요즘 백업이나 위키 덕분에 과거의 기억을 자주 되살린다.
안해도 되는 경우에는 크게 관계없지만, 정신 건강에는 이롭다.
ㅎㅎ

메신저의 광고 차단하기

- 주요 메신저의 광고 차단하기

- hosts 파일에 등록해둔다.
  • 127.0.0.1 cyad.nate.com
  • 127.0.0.1 rad.msn.com
  • 127.0.0.1 rad.live.com





악성 봇 감염 확인

[Trac] TOW 사용자 관리

- 사용자 관리
add-user.bat 는 htpasswd로 암호를 생성한다.
사용자계정은 %TOW%/SvnRepo/Projects/trac.htpasswd 에 저장된다.
이 계정은 전체 TOW 시스템에서 사용된다.
httpd.conf에서 Trac과 서브버전에 대한 AuthUserFile이 trac.htpasswd로 설정되어 있다.

사용자를 추가하면 anonymous의 권한을 상속받는다.
anonymous의 모든 권한을 제거하면 이후 추가한 사용자는 아무런 권한이 없다.
권한은 각 프로젝트의 데이터베이스에 저장된다.


각 프로젝트별로 사용자에 대한 권한 관리가 가능한다.

- SVN 은 별도로 권한 설정을 해야 한다.

[Trac] TOW 권한 관리

- http://trac.edgewall.org/wiki/TracPermissions#AvailablePrivileges

- Trac 0.10.4, TOW 0.2.2a-Standard-ko 에서 테스트되었음.

- 티켓 권한
구분   권한  
 관찰자  이슈 열람만 가능
 REPORT_VIEW
 TICKET_VIEW
 @observer
 보고자  이슈 생성
 TICKET_CREATE
 TICKET_APPEND
 TICKET_CHGPROP(마일스톤, 버전 수정이 필요하다면 할당)
 @reporter
 개발자  이슈 생성, 할당받고, 처리  TICKET_MODIFY TICKET_ADMIN[각주:1]  @developer
 관리자  모든 권한  TICKET_ADMIN  @manager
  • REPORT를 수정하면 모든 사용자에게 영향을 미친다.

- 사용자에 그룹 권한을 준다.
> add-perm PROJECT USER @developer

- 권한 그룹을 생성하는 스크립트
@echo off

if "%1"=="" goto usage

call add-perm %1 @observer REPORT_VIEW TICKET_VIEW

call add-perm %1 @reporter REPORT_VIEW TICKET_VIEW TICKET_CREATE TICKET_APPEND

call add-perm %1 @developer REPORT_VIEW TICKET_VIEW TICKET_CREATE TICKET_MODIFY //또는 TICKET_ADMIN =-=> ticket_admin 권한이 아니고 이 권한만 있으면 답글이 안나옴.=>??? ticket_admin권한을 주면될거 같다.
call add-perm %1 @developer WIKI_ADMIN TIMELINE_VIEW ROADMAP_VIEW
call add-perm %1 @developer BROWSER_VIEW LOG_VIEW FILE_VIEW SEARCH_VIEW CHANGESET_VIEW
//BROWSER_VIEW는 소스 브라우저, CHANGESET_VIEW은 변경사항, FILE_VIEW는 파일내용보기 권한임.
call add-perm %1 @developer XML_RPC

call add-perm %1 @manager REPORT_ADMIN TICKET_ADMIN
call add-perm %1 @manager WIKI_ADMIN TIMELINE_VIEW ROADMAP_VIEW ROADMAP_ADMIN MILESTONE_ADMIN
call add-perm %1 @manager BROWSER_VIEW LOG_VIEW FILE_VIEW SEARCH_VIEW CHANGESET_VIEW
call add-perm %1 @manager XML_RPC

goto end

:usage
echo Usage : _add-perm-group PROJECT
goto end

:end

  1. 개발자가 작업완료후 그룹아이디로 할당을 시킬수 있어야 함. [본문으로]