'Programming'에 해당되는 글 10건

  1. 2008/05/29 # NPTL
  2. 2008/05/06 # [JAVA] byte형 변수를 부호비트를 무시
  3. 2008/04/09 # Code Kata One
  4. 2008/04/09 # Code Kata Background
  5. 2008/01/16 # Code Kata (1)
  6. 2007/10/24 # CVS command list
  7. 2007/10/11 # Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드
  8. 2007/06/12 # 프로그래머와 유치원생
  9. 2007/05/25 # 프로그래밍의 20가지 법칙
  10. 2007/04/24 # 코딩 점검 목록
2008/05/29 10:18

# NPTL

http://en.wikipedia.org/wiki/Native_POSIX_Thread_Library

# The Native POSIX Thread Library (NPTL) is a software feature that enables the Linux kernel to run programs written to use POSIX Threads fairly efficiently.

# Thread Create/Exit 시 Linux Thread 에 비해서  엄청난 속도를 자랑한다고 함(Linux에서)

# Linux Thread 와 NPTL 비교 문서
  http://www-128.ibm.com/developerworks/linux/library/l-threading.html?ca=dgr-lnxw07LinuxThreadsAndNPTL



크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

# NPTL  (0) 2008/05/29
# [JAVA] byte형 변수를 부호비트를 무시  (0) 2008/05/06
# Code Kata  (1) 2008/01/16
# CVS command list  (0) 2007/10/24
# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드  (0) 2007/10/11
# 프로그래머와 유치원생  (0) 2007/06/12
Trackback 0 Comment 0
2008/05/06 09:24

# [JAVA] byte형 변수를 부호비트를 무시

자바에서는 unsigned 형이 없다.
0xF8 는 부호를 무시하면 248이지만, byte형에서는 부호비트가 고려되어 -8로 출력된다.
   byte b = (byte)0xF8;
   System.out.println(b);
   ----
   결과
   ----
   -8

원하는 결과를 얻기위해 이 byte형 변수 b를  int형 변수에 그냥 대입하게 되면,
역시 -248이 출력된다.

   byte b = (byte)0xF8;
   int i = b;
   System.out.println(i);
   ----
   결과
   ----
   -8

일반적인 대입의 경우 산술적인 형확장이 일어나기 때문에 부호비트가 고려되며
byte의 첫번째 비트인 부호비트는 int형으로 형확장되면서 부호가 그대로 적용된다.

원하는 결과인 248을 얻으려면 다음과 같이 하면된다.
   byte b = (byte)0xF8;
  int value = b & 0xFF;
   System.out.println(value);
   ----
   결과
   ----
   248

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

# NPTL  (0) 2008/05/29
# [JAVA] byte형 변수를 부호비트를 무시  (0) 2008/05/06
# Code Kata  (1) 2008/01/16
# CVS command list  (0) 2007/10/24
# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드  (0) 2007/10/11
# 프로그래머와 유치원생  (0) 2007/06/12
Trackback 0 Comment 0
2008/04/09 20:41

# Code Kata One

Code Kata One - Supermarket Pricing

This kata arose from some discussions we’ve been having at the DFW Practioners meetings. The problem domain is something seemingly simple: pricing goods at supermarkets.

Some things in supermarkets have simple prices: this can of beans costs $0.65. Other things have more complex prices. For example:

  • three for a dollar (so what’s the price if I buy 4, or 5?)
  • $1.99/pound (so what does 4 ounces cost?)
  • buy two, get one free (so does the third item have a price?)

This kata involves no coding. The exercise is to experiment with various models for representing money and prices that are flexible enough to deal with these (and other) pricing schemes, and at the same time are generally usable (at the checkout, for stock management, order entry, and so on). Spend time considering issues such as:

  • does fractional money exist?
  • when (if ever) does rounding take place?
  • how do you keep an audit trail of pricing decisions (and do you need to)?
  • are costs and prices the same class of thing?
  • if a shelf of 100 cans is priced using "buy two, get one free", how do you value the stock?

This is an ideal shower-time kata, but be careful. Some of the problems are more subtle than they first appear. I suggest that it might take a couple of weeks worth of showers to exhaust the main alternatives.

Goal

The goal of this kata is to practice a looser style of experimental modelling. Look for as many different ways of handling the issues as possible. Consider the various tradeoffs of each. What techniques use best for exploring these models? For recording them? How can you validate a model is reasonable?

What’s a Code Kata?

As a group, software developers don’t practice enough. Most of our learning takes place on the job, which means that most of our mistakes get made there as well. Other creative professions practice: artists carry a sketchpad, musicians play technical pieces, poets constantly rewrite works. In karate, where the aim is to learn to spar or fight, most of a student’s time is spent learning and refining basic moves. The more formal of these exercises are called kata.

To help developers get the same benefits from practicing, we’re putting together a series of code kata: simple, artificial exercises which let us experiment and learn without the pressure of a production environment. Our suggestions for doing the kata are:

  • find a place and time where you won’t be interrupted
  • focus on the essential elements of the kata
  • remember to look for feedback for every major decision
  • if it helps, keep a journal of your progress
  • have discussion groups with other developers, but try to have completed the kata first

There are no right or wrong answers in these kata: the benefit comes from the process, not from the result.

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > Code Kata' 카테고리의 다른 글

# Code Kata One  (0) 2008/04/09
# Code Kata Background  (0) 2008/04/09
Trackback 0 Comment 0
2008/04/09 20:37

# Code Kata Background

Code Kata

Background

How do you get to be a great musician? It helps to know the theory, and to understand the mechanics of your instrument. It helps to have talent. But ultimately, greatness comes practicing; applying the theory over and over again, using feedback to get better every time.

How do you get to be an All-Star sports person? Obviously fitness and talent help. But the great athletes spend hours and hours every day, practicing.

But in the software industry we take developers trained in the theory and throw them straight in to the deep-end, working on a project. It’s like taking a group of fit kids and telling them that they have four quarters to beat the Redskins (hey, we manage by objectives, right?). In software we do our practicing on the job, and that’s why we make mistakes on the job. We need to find ways of splitting the practice from the profession. We need practice sessions.

CodeKata:
A description of how this all started
MoreKata:

Sometimes ‘kata’ isn’t quite the right word; karate uses other techniques to teach too.

The Kata

What makes a good practice session? You need time without interruptions, and a simple thing you want to try. You need to try it as many times as it takes, and be comfortable making mistakes. You need to look for feedback each time so you can work to improve. There needs to be no pressure: this is why it is hard to practice in a project environment. it helps to keep it fun: make small steps forward when you can. Finally, you’ll recognize a good practice session because you’ll came out of it knowing more than when you went in.

Code Kata is an attempt to bring this element of practice to software development. A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long). Some involve programming, and can be coded in many different ways. Some are open ended, and involve thinking about the issues behind programming. These are unlikely to have a single correct answer. I add a new kata every week or so. Invest some time in your craft and try them.

If you want to discuss kata, there’s a mailing list here, and a wiki here. However, remember that the point of the kata is not arriving at a correct answer. The point is the stuff you learn along the way.

KataOne: Supermarket pricing. Pricing looks easy, but scratch the surface and there are some interesting issues to consider.
KataTwo: Karate Chop. A binary chop algorithm is fairly boring. Until you have to implement it using five totally different techniques.
KataThree: How Big, How Fast? Quick estimation is invaluable when it comes to making design and implementation decisions. Here are some questions to make you turn over the envelope.
KataFour: Data Munging. Implement two simple data extraction routines, and see how much they have in common.
KataFive: Bloom Filters. Implement a simple hash-based lookup mechanism and explore its characteristics.
KataSix: Anagrams. Find all the anagram combinations in a dictionary.
KataSeven: Reviewing. What does our code look like through critical eyes, and how can we make our eyes more critical?
KataEight: Objectives. What effects do our objectives have on the way we write code?
KataNine: Checkout. Back to the supermarket. This week, we’ll implement the code for a checkout system that handles pricing schemes such as "apples cost 50 cents, three apples cost $1.30."
KataTen: Hash vs. Class. Is it always correct to use (for example) classes and objects to structure complex business objects, or couple simpler structures (hash as Hashes) do the job?
KataEleven: Sorting it Out. Just because we need to sort something doesn’t necessarily mean we need to use a conventional sorting algorithm.
KataTwelve: Best Sellers. Consider the implementation of a top-ten best sellers list for a high volume web store.
KataThirteen: Counting Lines. Counting lines of code in Java source is not quite as simple as it seems.
KataFourteen: Trigrams. Generating text using trigram analysis lets us experiment with different heuristics.
KataFifteen: Playing with bits. A diversion to discover the pattern in some bit sequences.
KataSixteen: Business Rules. How can you tame a wild (and changing) set of business rules?
KataSeventeen: More Business Rules. The rules that specify the overall processing of an order can be complex too, particularly as they often involve waiting around for things to happen.
KataEighteen: Dependencies. Let’s write some code that calculates how dependencies propagate between things such as classes in a program.
KataNineteen: Word chains. Write a program that solves word chain puzzles (cat -> cot -> dot -> dog).
KataTwenty: Klondike. Experiment with various heuristics for playing the game Klondike.
KataTwentyOne: Simple Lists. Play with different implementations of a simple list.

There are places (apart from the comments in this blog) where you can discuss Code Kata.

The first is a YahooGroups mailing list, the second an index page on the PragProg wiki.

I have to admit that I’m nervous doing this. My hope is that folks will work on the kata for a while before discussing them; much of the benefit comes from the little "a-ha!" moments along the way. So, it’ll be interesting to see how (and if) the discussion develops.

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming > Code Kata' 카테고리의 다른 글

# Code Kata One  (0) 2008/04/09
# Code Kata Background  (0) 2008/04/09
Trackback 0 Comment 0
2008/01/16 15:58

# Code Kata

# " 사랑하지 않으면 떠나라! " 는 책을 읽으면서 개발자들이 이론, 코딩등 연습을  할 수 있는 것들이 필요하다는 얘기가 나온다.
  악기 연주자들은 전문가가 되기 위해서 끊임없이 연습하고 노력해서 실제 공연에 연습한 만큼의 결과가 나오는데 개발자들은 악기 연주자들의 실제 공연과 같은 프로젝트를 진행하고 있는 회사에서 연습을 하고 있으니 자기 발전이 없다는 얘기가 나온다.
  이에 개발자들도 공연에서 진정한 실력을 발휘하기 위해 연습이 필요한데 이런 연습을 할 수 있는 여러가지 자료 중에 Code Kata 를 추천하고 있다.

# 21개의 문제를 다 풀어봐야 되는데.. 얼마나 시간이 걸릴지 모르겠음.... ^^;

# http://codekata.pragprog.com/

Background

How do you get to be a great musician? It helps to know the theory, and to understand the mechanics of your instrument. It helps to have talent. But ultimately, greatness comes practicing; applying the theory over and over again, using feedback to get better every time.

How do you get to be an All-Star sports person? Obviously fitness and talent help. But the great athletes spend hours and hours every day, practicing.

But in the software industry we take developers trained in the theory and throw them straight in to the deep-end, working on a project. It’s like taking a group of fit kids and telling them that they have four quarters to beat the Redskins (hey, we manage by objectives, right?). In software we do our practicing on the job, and that’s why we make mistakes on the job. We need to find ways of splitting the practice from the profession. We need practice sessions.

크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

# NPTL  (0) 2008/05/29
# [JAVA] byte형 변수를 부호비트를 무시  (0) 2008/05/06
# Code Kata  (1) 2008/01/16
# CVS command list  (0) 2007/10/24
# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드  (0) 2007/10/11
# 프로그래머와 유치원생  (0) 2007/06/12
Trackback 0 Comment 1
2007/10/24 11:11

# CVS command list

CVSNT command reference

  1. Command List
  2. add
  3. admin
  4. annotate
  5. chacl
  6. checkout
  7. chown
  8. commit
  9. diff
  10. edit
  11. editors
  12. export
  13. history
  14. import
  15. init
  16. info
  17. log
  18. login
  19. logout
  20. ls
  21. lsacl
  22. passwd
  23. authserver
  24. rannotate
  25. rdiff
  26. release
  27. remove
  28. rlog
  29. rtag
  30. server
  31. status
  32. tag
  33. unedit
  34. update
  35. version
  36. watch
  37. watchers

1. Command List

Command Synonyms Summary
add ad,new Add a new file/directory to the repository.
admin adm,rcs Administration front end for rcs.
annotate ann Show last revision where each line was modified.
authserver Authentication server mode.
chacl setacl,setperm Change the Access Control List for a directory.
checkout co,get Checkout sources for editing.
chown setowner Change the owner of a directory.
commit ci,com Check files into the repository.
diff di,dif Show differences between revisions.
edit Get ready to edit a watched file.
editors See who is editing a watched file.
export exp,ex Export sources from CVS, similar to checkout.
history hi,his Show repository access history.
import im,imp Import sources into CVS, using vendor branches.
init Create a CVS repository if it doesn't exist.
info Display information about all supported protocols.
log lo Print out history information for files.
login logon,lgn Prompt for password for authenticating server.
logout Removes entry in password cache for remote repository.
ls dir,list List directories on the server.
lsacl lsattr,listperm List the directories' Access Control List.
passwd password,setpass Set password and administer users.
rannotate rann,ra Show last revision where each line of module was modified.
rdiff patch,pa Create 'patch' format diffs between releases.
release re,rel Indicate that a Module is no longer in use.
remove rm,delete Remove an entry from the repository.
rlog rl Print out history information for a module.
rtag rt,rfreeze Add a symbolic tag to a module.
server Server mode.
status st,stat Display status information on checked out files.
tag ta,freeze Add a symbolic tag to checked out version of files.
unedit Undo an edit command.
update up,upd Bring work tree in sync with repository.
version ve,ver Show current CVS version(s).
watch Set watches.
watchers See who is watching a file.

2. add

cvs add [-k rcs-kflag] [-m message] files...

    -k Use "rcs-kflag" to add the file with the specified kflag
    -m Use "message" for the creation log.

3. admin

cvs admin [options] files...
THIS COMMAND BYPASSESS NORMAL CVS OPERATIONS. DO NOT USE THIS COMMAND UNLESS YOU KNOW THE CONSEQUENCES OF USING IT.

    -k Set keyword expansion flags:
    Valid flags are one of:
    t Text file (default).
    b Binary file (merges not allowed).
    B Binary file using binary deltas (merges not allowed).
    u Unicode (UCS-2) file.
    {...} Extended encoding type.
    Followed by any of:
    k Substitute keyword.
    v Substitute value.
    l Generate lockers name.
    o Checkout literally - don't expand keywords.
    L Generate Unix line endings on checkout.
    z Compress deltas in RCS file.
    -l [rev] Lock revision (latest revision on branch, latest revision on trunk if omitted). DEPRECATED - USE 'edit -c'
    -m rev:msg Replace revision's log message.
    -o range Physically delete (outdate) specified range of revisions:
    rev1:rev2 Between rev1 and rev2, including rev1 and rev2.
    rev1::rev2 Between rev1 and rev2, excluding rev1 and rev2.
    rev: rev and following revisions on the same branch.
    rev:: After rev on the same branch.
    :rev rev and previous revisions on the same branch.
    ::rev Before rev on the same branch.
    rev Just rev.
    -q Run quietly.
    -t [file] Get descriptive text from file (stdin if omitted).
    -t-string Set descriptive text.
    -u [rev] Unlock the revision (latest revision on branch, latest revision on trunk if omitted).

4. annotate

cvs annotate [-lRf] [-r rev] [-D date] [files...]

    -l Local directory only, no recursion.
    -R Process directories recursively.
    -f Use head revision if tag/date not found.
    -r rev Annotate file as of specified revision/tag.
    -D date Annotate file as of specified date.

More info at CvsChapter87.

5. chacl

cvs chacl -R [-r tag] {user|default}:[{[r][w][c]|[n]}] [directory...]
    -R Recursively set permissions
    -r tag Set permissions on specific branch

6. checkout

cvs checkout [-ANPRcflnps] [-r rev] [-D date] [-d dir] [-j rev1] [-j rev2] [-k kopt] modules...

    -A Reset any sticky tags/date/kopts.
    -N Don't shorten module paths if -d specified.
    -P Prune empty directories.
    -R Process directories recursively.
    -c Show the contents of the CVSROOT/modules file.
    -f Force a head revision match if tag/date not found.
    -l Local directory only, not recursive.
    -n Do not run module program (if any).
    -p Check out files to standard output (avoids stickiness).
    -s Like -c, but include module status.
    -r rev Check out revision or tag. (implies -P) (is sticky)
    -D date Check out revisions as of date. (implies -P) (is sticky)
    -d dir Check out into dir instead of module name.
    -k kopt Use RCS kopt -k option on checkout. (is sticky)
    -j rev Merge in changes made between current revision and rev.

7. chown

cvs chown user directory...

8. commit

cvs commit [-nRlf] [-m msg | -F logfile] [-r rev] files...

    -D Assume all files are touched & send to the server for checking
    -n Do not run the module program (if any).
    -R Process directories recursively.
    -l Local directory only (not recursive).
    -f Force the file to be committed; disables recursion.
    -F logfile Read the log message from file.
    -r rev Commit to this branch or trunk revision.
    -c Check for valid edits before committing.

9. diff

cvs diff [-lNR] [rcsdiff-options] [[-r rev1 | -D date1] [-r rev2 | -D date2]] [files...]

    -l Local directory only, not recursive.
    -R Process directories recursively.
    -D d1 Diff revision for date against working file.
    -D d2 Diff rev1/date1 against date2.
    -N Include diffs for added and removed files.
    -r rev1 Diff revision for rev1 against working file.
    -r rev2 Diff rev1/date1 against rev2.
    --ifdef=arg Output diffs in ifdef format.
    -c Context diff
    -u Unified diff

10. edit

cvs edit [-cflR] [files...]

    -c Check that working files are unedited.
    -f Force edit if working files are edited (default).
    -l Local directory only, not recursive.
    -R Process directories recursively (default).
    -a Specify what actions for temporary watch, one of edit,unedit,commit,all,none
    -z Store base revisions in compressed (.gz) format.

11. editors

cvs editors [-lR] [files...]

    -l Process this directory only (not recursive).
    -R Process directories recursively.

12. export

cvs export [-NRfln] [-r rev] [-D date] [-d dir] [-k kopt] module...

    -N Don't shorten module paths if -d specified.
    -f Force a head revision match if tag/date not found.
    -l Local directory only, not recursive.
    -R Process directories recursively (default).
    -n Do not run module program (if any).
    -r rev Export revision or tag.
    -D date Export revisions as of date.
    -d dir Export into dir instead of module name.
    -k kopt Use RCS kopt -k option on checkout.

13. history

cvs history [-report] [-flags] [-options args] [files...]

    Reports:
    -T Produce report on all TAGs.
    -c Committed (Modified) files.
    -o Checked out modules.
    -m module Look for specified module (repeatable)
    -x [type] [TOEFWUCGMAR] Extract by record type .
    -e Everything (same as -x, but all record types).
    Flags:
    -a All users (Default is self).
    -l Last modified (committed or modified report).
    -w Working directory must match.
    Options:
    -D date Since date (Many formats).
    -b str Back to record with str in module/file/repos field.
    -f file Specified file (same as command line) (repeatable).
    -n module In module (repeatable).
    -p repo In repository (repeatable).
    -r rev Since rev or tag (looks inside RCS files!).
    -t tag Since tag record placed in history file (by anyone).
    -u user For user name (repeatable).
    -z timezone Output for time zone <> (e.g. -z -0700).

14. import

cvs import [C] [-d] [-f] [-k subst] [-I ign] [-m msg] [-b branch] [-W spec] [-n] repository [vendor-tag] [release-tags...]

    -C Create CVS directories while importing.
    -d Use the file's modification time as the time of import.
    -f Overwrite existing release tags.
    -k sub Set default RCS keyword substitution mode.
    -I ign More files to ignore (! to reset).
    -b bra Vendor branch id.
    -m msg Log message.
    -W spec Wrappers specification line.
    -n Don't create vendor tag.

15. init

cvs init

16. info

cvs info [protocol]

17. log

cvs log [-lRhtNb] [-r[revisions]] [-d dates] [-s states] [-w[logins]] [files...]

    -l Local directory only, no recursion.
    -R Only print name of RCS file.
    -h Only print header.
    -t Only print header and descriptive text.
    -N Do not list tags.
    -b Only list revisions on the default branch.
    -r [revisions] Specify revision(s)s to list:
    rev1:rev2 Between rev1 and rev2, including rev1 and rev2.
    rev1:rev2 Between rev1 and rev2, excluding rev1 and rev2.
    rev: rev and following revisions on the same branch.
    rev:: After rev on the same branch.
    :rev rev and previous revisions on the same branch.
    ::rev Before rev on the same branch.
    rev Just rev.
    branch All revisions on the branch.
    branch. The last revision on the branch.
    -d dates Specify dates (D1<D2 for range, D for latest before).
    -s states Only list revisions with specified states.
    -w [logins] Only list revisions checked in by specified logins.
    -x cvsnt 2.x compatible output (default).
    -X cvs 1.x/RCS 5.7 compatible output.

18. login

cvs login

19. logout

cvs logout

20. ls

cvs ls [-q] [-e] [-l] [-R] [-r rev] [-D date] [modules...]

    -q Quieter Output.
    -e Display in CVS/Entries format.
    -l Display all details.
    -R List recursively.
    -r rev Show files with revision or tag.
    -D date Show files from date.

21. lsacl

cvs lsacl [directory...]

22. passwd

cvs passwd [-a] [-x] [-X] [-r real_user] [-R] [-D domain] [username]

    -a Add user.
    -x Disable user.
    -X Delete user.
    -r Alias username to real system user.
    -R Remove alias to real system user.
    -D Use domain password (Win32 only).

23. authserver

cvs authserver

Normally invoked by a cvs client on a remote machine.

24. rannotate

cvs rannotate [-lRf] [-r rev] [-D date] [files...]

    -l Local directory only, no recursion.
    -R Process directories recursively.
    -f Use head revision if tag/date not found.
    -r rev Annotate file as of specified revision/tag.
    -D date Annotate file as of specified date.

25. rdiff

cvs rdiff [-flR] [-c|-u] [-s|-t] [-V %d] -r rev|-D date [-r rev2 | -D date2] modules...

    -f Force a head revision match if tag/date not found.
    -l Local directory only, not recursive.
    -R Process directories recursively.
    -c Context diffs (default).
    -u Unidiff format.
    -s Short patch - one line per file.
    -t Top two diffs - last change made to the file.
    -D date Date.
    -r rev Revision - symbolic or numeric.
    -V vers Use RCS Version "vers" for keyword expansion.

26. release

cvs release [-d [-f]] [-e] directories...

    -d Delete the given directory.
    -f Delete the directory even if non-cvs files still exist.
    -e Only delete the administrative (CVS) directories.

27. remove

cvs remove [-flR] [files...]

    -f Delete the file before removing it.
    -l Process this directory only (not recursive).
    -R Process directories recursively.

28. rlog

cvs rlog [-lRhtSNb] [-r[revisions]] [-d dates] [-s states] [-w[logins]] [files...]

    -l Local directory only, no recursion.
    -R Only print name of RCS file.
    -h Only print header.
    -t Only print header and descriptive text.
    -N Do not list tags.
    -b Only list revisions on the default branch.
    -r [revisions] Specify revision(s)s to list:
    rev1:rev2 Between rev1 and rev2, including rev1 and rev2.
    rev1:rev2 Between rev1 and rev2, excluding rev1 and rev2.
    rev: rev and following revisions on the same branch.
    rev:: After rev on the same branch.
    :rev rev and previous revisions on the same branch.
    ::rev Before rev on the same branch.
    rev Just rev.
    branch All revisions on the branch.
    branch. The last revision on the branch.
    -d dates Specify dates (D1<D2 for range, D for latest before).
    -s states Only list revisions with specified states.
    -w [logins] Only list revisions checked in by specified logins.

29. rtag

cvs rtag [-abdFflnR] [-r rev|-D date] tag modules...

    -a Clear tag from removed files that would not otherwise be tagged.
    -b Make the tag a "branch" tag, allowing concurrent development.
    -B Allow branch tag to be moved/deleted.
    -d Delete the given tag.
    -F Move tag if it already exists.
    -f Force a head revision match if tag/date not found.
    -l Local directory only, not recursive.
    -m desc Describe tag.
    -M Create 'magic' branch.
    -n No execution of 'tag program'.
    -R Process directories recursively.
    -r rev Existing revision/tag.
    -D date Existing date.

30. server

cvs server

31. status

cvs status [-vlR] [files...]

    -v Verbose format; includes tag information for the file.
    -l Process this directory only (not recursive).
    -R Process directories recursively.
    -q Display a quick summary of each file (send more for increased terseness).
    -x cvsnt 2.x compatible output (default).
    -X cvs 1.x compatible output.

32. tag

cvs tag [-bcdFflR] [-r rev|-D date] tag [files...]

    -b Make the tag a "branch" tag, allowing concurrent development.
    -B Allow branch tag to be moved/deleted.
    -c Check that working files are unmodified.
    -d Delete the given tag.
    -F Move tag if it already exists.
    -f Force a head revision match if tag/date not found.
    -l Local directory only, not recursive.
    -m Describe tag.
    -M desc Create 'magic' tag.
    -R Process directories recursively.
    -r rev Existing revision/tag.
    -D date Existing date.

33. unedit

cvs unedit [-lR] [files...]

    -l Local directory only, not recursive.
    -R Process directories recursively.
    -u user (administrators only) Unedit another user.

34. update

cvs update [-APCdflRp] [-k kopt] [-r rev] [-D date] [-j rev] [-I ign] [-W spec] [files...]

    -A Reset any sticky tags/date/kopts.
    -P Prune empty directories.
    -C Overwrite locally modified files with clean repository copies.
    -d Build directories, like checkout does.
    -f Force a head revision match if tag/date not found.
    -l Local directory only, no recursion.
    -R Process directories recursively.
    -p Send updates to standard output (avoids stickiness).
    -k kopt Use RCS kopt -k option on checkout. (is sticky)
    -r rev Update using specified revision/tag (is sticky).
    -D date Set date to update from (is sticky).
    -j rev Merge in changes made between current revision and rev.
    -b -j option merges from branch point (old CVS behaviour)
    -m -j option merges from merge point (cvsnt default behaviour)
    -I ign More files to ignore (! to reset).
    -W spec Wrappers specification line.
    -3 Produce 3-way conflict output.
    -S Force case-sensitive update on non case-sensitive systems.
    -t Update using last checkin time.

35. version

cvs version

36. watch

cvs watch [on|off|add|remove] [-lR] [-a action] [files...]

    on/off turn on/off read-only checkouts of files.
    add/remove add or remove notification on actions.
    -l (on/off/add/remove): Local directory only, not recursive.
    -R (on/off/add/remove): Process directories recursively.
    -a (add/remove): Specify what actions, one ofedit,unedit,commit,all,none

37. watchers

cvs watchers [-lR] [files...]

    -l Process this directory only (not recursive).
    -R Process directories recursively.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2007/10/11 09:32

# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드

# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드

사용자 삽입 이미지


 











 지금 읽어보고 있는 책.
 프로젝트를 진행하면서 필요한 관리도구 및 방법론 등에 대한 내용들..
 지금까지 가장 기억에 남는 말은..
 "여러 방법론들이 있지만 자기 자신에게 혹은 팀에게 적합한 것들을 취합해서
  새로운 방법론을 만들어서 사용하자.."

  http://kangcom.com/common/bookinfo/bookinfo.asp?sku=200707250014
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

# Code Kata  (1) 2008/01/16
# CVS command list  (0) 2007/10/24
# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드  (0) 2007/10/11
# 프로그래머와 유치원생  (0) 2007/06/12
# 프로그래밍의 20가지 법칙  (0) 2007/05/25
# 코딩 점검 목록  (0) 2007/04/24
Trackback 0 Comment 0
2007/06/12 10:26

# 프로그래머와 유치원생

훌륭한 개발자가 되기 위한 것은 그리 어렵지 않다고 한다...과연 그런지?
Programmerthink에 올라온 글에 의하면 사실 매우 간단하다고 한다.
5세의 동심으로 돌아가 유치원에서 배운 것만 잘 실현해도 좋은 개발자가 된다고 한다.
동심으로 돌아가서 유치원 시절에 가르쳐준 것들을 생각해보자, 아마 좋은 개발자로 거듭날 수 있을 것이다.
참고로 프로그래머뿐만 아니라 일반인들도 세상을 살아가면서 우리가 어렸을때 배운 것들이 어른이 되어서도 좋은 교훈이 된다는 것은 잊지 말기 바란다.

1. 모든 것을 나누어 가지자.
오픈소스를 활용하고 가능하다면 나도 함께 동참하자.
서로 모여서 나눈다면 분명 더 좋은 결과들이 나올 수 있다.

2. 공평해라.
다른 기술, 방법, 언어들에게 기회를 주자.
내 방법만이 정답이라는 생각을 버리자.
열린 마음으로 다른 방법들에게도 기회를 주자.
특히 일부 한국 개발자들의 액티브엑스 없이는 아무 것도 할 수 없다는 그런식의 생각은 버리자.

3. 다른 사람을 공격하지 말자.
.Net, Java또는 PHP를 사용한다고 공격하지 말자.
2번에 이어서 반대로 또 너무나 액티브엑스 개발자들을 공격하지 말자..그 들에게도 충분한 이유가 있기 때문이다

4. 내가 어지른 것은 내가 치우자.
프로그램을 만들었으면 계속적으로 테스트하고 더 좋은 코드를 만들도록 노력하자.
베타테스터에 붙여서 다른 사람들이 모든 오류를 찾아주기를 바라지 말고 내가 직접 더 열심히 완벽하게 만들도록 계속 노력하자.
뒷 처리 잘하라는 말..

5. 다른 사람의 것을 빼앗지 말자.
허락을 받던지 라이센스의 내용에 존중하자.
지금 사용하고 나중에 발뺌하기 없기다.
사용하고 싶다면 꼭 허락을 받도록 하자.

6. 누구를 다치게 했다면 꼭 미안하다는 말을 하자.
나보다 경험이나 실력이 없는 개발자들을 보고 욕을 하거나 무시하지 말자.
그들의 마음을 다치게 해서 좋을 일은 별로 없다.
언젠가는 그들의 도움을 받을 날이 있기 때문이다.
모두가 함께 노력해서 좋은 결과물을 얻을 수 있도록 협력하고 격려하자.

7. 먹기 전에 손을 꼭 씻자.
코드를 작성하기 전에 무엇을 어떻게 할 것인지 미리 이해를 하고 하자.
프로토타입도 만들고, 가지고 놀아보기도 하고 주변 개발자들과 이야기도 하면서 정보를 얻은 후 개발에 나서자.

8. 화장실 사용 후 물 내리자.
좋지 않은 코드를 버리거나 취소하는 일에 두려움이나 아까움을 가지면 안 된다.
절대로 자신이 만든 코드와 사랑에 빠지지 말자..형편없는 것이면 과감하게 버리자.

9. 따뜻한 과자와 차가운 우유는 몸에 좋다.
작업환경이 아주 잘 갖추어 있어야 한다.
편안한 의자, 조용한 환경, 좋은 컴퓨터, 그리고 코딩을 하기 위한 편리한 툴들이 필요하다.
오너들은 이들이 프로그램에만 신경 쓰도록 환경을 만들어 주어야 한다.
오너가 너무나 많은 희생과 요구를 한다면 더 좋은 오너를 찾아서 떠나야 좋은 프로그램이 나올 수 있다.

10. 균형 있는 삶을 가져라.
배우고, 생각하고, 운동하고, 놀고, 노래하고, 춤추고 일하는 것을 균형 있게 생활화하자.
구글의 방침처럼 자신의 시간 중 20%는 자신이 하고 싶은 아무 일이나 하게 놔두는 경영방침이 좋다.
오너들은 프로그래머들을 위하여 수면실, 게임방 같은 휴식 공간을 만들어 줘야 한다.
코딩을 하는 작업은 상당한 스트레스와 뇌에 무리를 주는 작업이다...반드시 휴식이 필요하다.
주당 80시간 이상 근무를 요구한다면 절대로 좋은 결과가 나올 수 없다.

11. 꼭 낮잠을 자자.
하루 24시간 일한다고 능률이 올라가는 것은 아니다.
휴식, 낮잠 등을 잘 활용하자.

12. 밖에 나갔을 때는 자동차를 조심하고 서로 손을 잡고 뭉쳐있어야 한다.
커뮤니티 활동은 중요하다.
블로그를 읽고, 새로운 언어나 개발 툴에 대한 정보를 얻고, 토론과 모임에 참가해서 활동하자. 혼자만의 세계에서 헤매지 말고 서로 교류하며 좋은 정보를 얻어 계속 발전해 나가자.

13. 놀라움을 잃지 말자.
매일 새롭고 놀라운 것들이 프로그래밍 세계에서 나온다.
이런 것들에 관심을 가지고 항상 새롭게 받아들이며 흥분할 줄 알아야 한다.
이런 새로운 기술들을 받아들일 준비가 돼 있어야 한다.
만약 프로그래밍이 지루하고 재미없다고 생각한다면 다른 직업을 찾아야 할 것이다.

14. 금붕어도 죽고, 햄스터도 죽고, 내가 심은 꽃도 언젠가는 죽는다...물론 나도 그런 날이 온다.
코드는 결국 시대에 뒤 떨어지고 죽기 마련이다.
결국은 이런 코드를 포기하고 새로운 코드로 작업을 해야 하는 것을 반드시 인식하자.
돈 몇 푼 아끼겠다고 쓸모없는 코드를 붙잡고 고집을 피우는 일은 없어야 한다.

15. 어릴적 동화들을 생각하고 내가 가장 먼저 배웠던 글들을 기억하자...
그 중에서도 "보라(look)"를 꼭 기억하자.

무작정 시도하지 않고는 아무것도 배우지 못한다.
계속 가지고 놀고, 보고, 배우는 것이다.
항상 프로그래밍 세계에서는 어떤 일들이 일어나고 있는지 계속 업데이트하자..정보에 뒤 처져서는 안 된다.
항상 어떤일들이 일어나고 있는지 보고 있는 자가 휼륭한 프로그래머다.

퍼온곳 : http://entclic.com/355
출처 : All I Need To Know To Be A Better Programmer I Learned In Kindergarten 
 
크리에이티브 커먼즈 라이선스
Creative Commons License

'Programming' 카테고리의 다른 글

# Code Kata  (1) 2008/01/16
# CVS command list  (0) 2007/10/24
# Ship it! 성공적인 소프트웨어 개발 프로젝트를 위한 실용 가이드  (0) 2007/10/11
# 프로그래머와 유치원생  (0) 2007/06/12
# 프로그래밍의 20가지 법칙  (0) 2007/05/25
# 코딩 점검 목록  (0) 2007/04/24
Trackback 0 Comment 0
2007/05/25 11:41

# 프로그래밍의 20가지 법칙

출처 블로그 > Tomorrow will be another day~
원본 http://blog.naver.com/ssunny788/20003226018

프로그래밍의 20가지 법칙