{SVNHome}\{저장소}\hook\pre-revprop-change.bat ex)D:\svnhome\testproject\hook\pre-revprop-change.bat2. pre-revprop-change.bat 파일을 열어 아래 내용 복사 후 저장.
Posted by 좐군
{SVNHome}\{저장소}\hook\pre-revprop-change.bat ex)D:\svnhome\testproject\hook\pre-revprop-change.bat2. pre-revprop-change.bat 파일을 열어 아래 내용 복사 후 저장.
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/332
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/324
Say, you got a nice post.Really thank you! Much obliged.
Hey, thanks for the blog article.Much thanks again. Fantastic.
Fantastic article post.Really thank you!
Really enjoyed this blog. Awesome.
Really informative post.Really looking forward to read more. Great.





Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/310
공돌이 2010/04/01 20:02 # M/D Reply Permalink
좐군님 대단하세요 ㅎㅎ 안드로이드 책이랑 다른 사이트 참고해서 했어요 ㅎㅎ
http://androidhuman.tistory.com/
이곳에도 강좌가 많더군요^^ 아시고 계실지도 ㅎㅎ
스티븐잡스 2010/04/03 21:48 # M/D Reply Permalink
안녕하세요.
mabifest Fie에서l 라이브러리를 com.google.android.maps 가져다 쓰잖아요?
그리고 나서 *.java 파일에서 맵뷰컨트롤러를 호출하려고 하니까 에러가 나네요
MapView map_veiw = (MapView)findViewById(R.id.mapview);
id 다음에 mapview를 인식못하네요.. R.java 파일에 임의로 써줘야 되는건지..
좐군 2010/04/05 13:31 # M/D Permalink
안녕하세요. 주인장입니다.
위 글을 작성 할 때 같은 문제를 겪었습니다.
프로젝트를 다시 생성도 해보고, 이클립스에서 속성창릅 불러 수정도 했는데 결국 해결못하고, R.java 파일을 직접 해당 ID값을 입력해서 컴파일을 했습니다.
리소스 관련된 사항은 다음을 참고하세요.
http://developer.android.com/guide/topics/resources/available-resources.html#layoutresources
해보시고 잘 안되시면 다시 댓글 남겨주세요.
스티븐잡스 2010/04/06 20:05 # M/D Reply Permalink
되었습니다. R.id.mapview를 직접 만들어주니 해결되었습니다.
리소스 관련 사항도 잘 보았습니다(영어라서 대충ㅠ)
근데 왜 알아서 안생길까요......ㅠ
아무튼 감사합니다.
하로하로 2010/04/21 14:50 # M/D Reply Permalink
MD5나 API key는 각 개인별로 있는거라 모자이크 하시는게 좋을꺼 같은데요.....
이민효 2010/05/30 19:07 # M/D Reply Permalink
제가 쌩 초보자라서 그런데 R.java 파일을 직접 해당 ID값을 입력하라는게 어뭔지를 잘 몰라서요.. 소스좀 보여주시면 안될까요 ? ㅠ
예영파피 2010/06/04 16:27 # M/D Reply Permalink
좋은글 잘보고 갑니다. 퍼가요
출처는 http://john.tobe30.com/tc/entry/Android_GoogleMapsAPI_Using 로 표시합니다.
nuno1333 2010/08/05 12:45 # M/D Reply Permalink
잘보고 잘따라 했습니다 좀 퍼가요
^^ 2010/08/24 11:50 # M/D Reply Permalink
좋은 글 고맙습니다. 담아갈게요~^^
risepower 2010/08/27 03:10 # M/D Reply Permalink
오우 구글 API 때문에 머리가 아팠는데... 게보린 안먹어도 될듯 ㅜㅜ 약값 지켜준 님께 감사요 !! ^-^
들짐승소년캔듸 2010/10/11 14:24 # M/D Reply Permalink
좋은글 잘 보고 있습니다 ^-^;
게다가 설명도 너무 보기쉽게 잘해주셔서~
책보는것보다는 훨씬 수월하게 잘 해결하였습니다~
감사합니다~
소징 2010/11/25 13:20 # M/D Reply Permalink
잘 보고 잘 활용했습니다~~!! 정말 책보다 더 좋은듯해요 감사합니다!
woodz 2010/12/28 21:56 # M/D Reply Permalink
정리가 아주 잘되어 있네요~ 감사합니다. ^^
코프 2011/04/22 09:23 # M/D Reply Permalink
좋은 정보 감사해요.와우...덕분에 좋은거 하나 알았네요..
혹시 좀더 많은 질문과 궁금한점을 여쭤봐도 될까여?
wss02@naver.com 네이트온 친추좀.
앱개발에관심이 너무 많아서요.ㅜㅜ
코프 2011/04/22 10:43 # M/D Reply Permalink
이제 잘 됩니다.그런데 한가지 궁금점이 현재 내 위치를
뿌려지게 하고 싶은데..그건 어떤식으로 구현을 해야하나여?
http://blog.daum.net/linkinparklife 2011/10/14 10:33 # M/D Reply Permalink
20자리 키가 발급됐는데 앞의 16자리만 입력해야 제대로 먹네요.
감사합니다.

















Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/292
공돌이 2010/02/13 22:10 # M/D Reply Permalink
어우 난 왜 안뜨지 끝에서 안되네 -_- 계속 안드로이드 라고만 표시되네..휴.. ㅋㅋ
컴터학과 2010/03/05 11:23 # M/D Reply Permalink
질문 하나만 하려구요.
올려주신대로 했는데
run을 하니
Your project contains error(s), please fix them befor running your application
이라는 경고창이 뜹니다. 왜 이러는 건가요??
공돌이 2010/03/08 17:05 # M/D Reply Permalink
지금이서 답변을 보았습니다. 죄송합니다.
저의 블로그 주소는 01099496543.tistory.com 입니다.
이제는 잘 됩니다. 무엇이 잘못되었는지는 몰라도요 ㅎㅎ
아무 잘 보고있습니다. 그래서 저의 블로그에도 글을 복사하였습니다 .
퍼가기를 하고싶지만 티스토리로 퍼가는 방법을 몰라서요.
저작권이 있다고 확실히 명시해두었습니다.
글쓴이 님이 퍼가는걸 원하시지 않는다면 글 지우겠습니다 ^^
공돌이 2010/03/08 17:08 # M/D Reply Permalink
아 하나만 더 물어봐도 될까요? New Project 만들때요,
어플리케이션 네임과 패키지 네임, 그레이트 액티비티, 왜 넣어주는건지요?
jsd8839@gmail.com 메일입니다.
소울 2010/06/15 23:04 # M/D Reply Permalink
오타있네요 ㅋㅋ
max OS라니..
by-스카이 2010/07/05 19:42 # M/D Reply Permalink
좐군(주인장) 님
올린 글대로 했는데 Your project contains error(s), please fix them befor running your application 이 뜨고요 그래서 안드로이드 sdk 로 킬려 하니
emulator: ERROR: bad config: virtual device directory lacks config.ini
emulator: could not find virtual device named 'Android_HVGA'
가 떠요 ㅜㅜㅜㅜㅜ 빠른 답변 부탁합니다~
좐군 2010/07/21 07:45 # M/D Permalink
주인장입니다.
답변이 늦었네요
아무래도
Vitual Device를 설정이 문제인 것 같습니다.
위 내용에서
"A. 4. 이제 Virtual Device를 생성해야 한다.
Android SDK and AVD Manager 창에서 Virtual Devices를 선택하고,
[New...]버튼을 선택한다. "
Android SDK and AVD Manager는 Eclipse에서 Windows 메뉴에 있답니다.
이부분을 참고해서 차근차근 확인해보세요.
해보시고 문제 있으시면 다시 글 남겨주세요
귀족 2010/07/20 16:03 # M/D Reply Permalink
우와 감솨 ㅋ
궁금해요 2010/07/30 11:11 # M/D Reply Permalink
SDK 와 AVD 다 설치하고 테스트예제 실행하는데
아래 메세지가 나오고 에물레이더에 인스톨이 되지 않아요.
에물레이더는 정상적으로 실행이 됩니다. 물론 어플은 설치되어있지 않구요
머가 문제 일까요?
개발환경 : 2.2플랫폼 메모리 64M 입니다.
-- 아래 메세지 ---
[2010-07-30 10:52:27 - scanbill] ------------------------------
[2010-07-30 10:52:27 - scanbill] Android Launch!
[2010-07-30 10:52:27 - scanbill] adb is running normally.
[2010-07-30 10:52:27 - scanbill] Performing s.scan.view activity launch
[2010-07-30 10:52:27 - scanbill] Automatic Target Mode: launching new emulator with compatible AVD 'android'
[2010-07-30 10:52:27 - scanbill] Launching a new emulator with Virtual Device 'android'
[2010-07-30 10:52:35 - scanbill] New emulator found: emulator-5554
[2010-07-30 10:52:35 - scanbill] Waiting for HOME ('android.process.acore') to be launched...
[2010-07-30 10:52:54 - Emulator] accept: Invalid argument
병아리 2010/09/03 14:10 # M/D Reply Permalink
안녕하세요 쥔장님// 원하던 글을 찾아서 이리 저리 설치해보려고 하는데
저는 설치부터 막힘니다 -_ -;;
자바 설치하고(아무것도 않하고) Eclipsec압축풀고, 실행버튼 누르면,
"Failed to create the Java Virtual Machine"
이란 문구가 뜹니다.
자바에서 문제가 있는 것 같은데, 정말 초보거든요..
이제 독학으로 조금씩 시작해 보려고 하는데 첫 단계 부터 막히네여ㅠㅠ
설치 환경은 winXP입니다.
리플로 남겨주시면 확인 할께요.
좐군 2010/09/03 23:00 # M/D Permalink
안녕하세요. 주인장입니다.
아무래도 Java SE Development Kit (JDK6)를 설치 안하고
Eclips부터 설치하고 실행하신게 아니신지요?
다음 Java SE Development Kit (JDK6) 다운로드 경로입니다.
http://java.sun.com/javase/downloads/widget/jdk6.jsp
이상 있으시면 다시 질문해주세요
병아리 2010/09/06 14:19 # M/D Reply Permalink
자바는 설치 했는데여
실행하고 오류창 뜨기전에
도스창에서
Error occurred during initialization of VM
Could not reserve enough space for object heap
이라고 뜹니다.
혹시 PC사양에 관한 문제인가용 -0 -;;;;
밍밍이 2011/06/12 01:00 # M/D Reply Permalink
There is already a file or directory named "HelloWorld" in the selected location.
이렇게떠요..
파일이나 디렉토리를 선택한 위치에 "HelloWorld"라는 이미 사용 중입니다.
이럴때 어떻게하죠.. 맨날 여기서 막혀요...
ymk3831 2011/06/15 00:58 # M/D Reply Permalink
3시간 걸렸습니다.
Though many teams are using Subversion (SVN) to work together and share code, version control software provides a huge number of features that are not often used. Just about any developer these days knows how to checkout a project and commit or revert changes. But a lot of teams don’t really use more advanced features like branching and tagging to organize releases.
The great thing about version control systems like SVN is that you gain a bunch of really useful functionality – even if you have only been using it for sharing code. One of those features is the ability to create an export of all modified files since the previous release. A common scenario is when the team is working on a web application and it’s time to deploy all the recent changes to the production server. An app that is distributed would normally use tags or branches to keep the versions straight. But some teams prefer to just keep moving forward on the HEAD revision and never look back. If this sounds like you, luckily SVN provides an easy way to get all changed files since your last deployment and package them up with just a few clicks.
Lets say that you last deployed your application from repository version #500. After a few weeks of development, the repository is now up to revision #575. The team has decided that the code is stable and you are ready to package up all new/changed files to transfer to the host server, client, etc.
You’ll be prompted for a location to save your updated files and SVN will export them all with the directory structure preserved. You can then zip this up for your client, transfer it to your host or whatever you normally do to deploy the application.
Some teams prefer to actually do an update right on the production server and simply checkout the files that way. If your hosting setup permits and you don’t mind the “.svn” files in on your server, that is another easy option for deploying code.
For even more automation, this could all be done using batch, shell or ant build scripts. If you have such a script, please feel free to post it in the comments.
원문 : http://www.verysimple.com/blog/2007/09/06/using-tortoisesvn-to-export-only-newmodified-files/
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/192
간만에 기본에 충실해 보려고 한다. CBD개발론을 이야기하는 .NET 플랫폼 웹 어플케이션의 설계요소에 대해 알아볼려고 한다.
1. 프리젠테이션 로직(Presentation Logic) : 경계 클래스(Boundary Class)
2. 비지니스 로직 (Business Logic) : 제어 클래스(Control Class)
3. 데이터 접근 로직 (Data Access Logic) : 실체 클래스(Entity Class)
오늘 우리 현실에 대한 반성과 나태함에 대해 꾸짖고자 한다. 갑자기 이게 무슨 이야기인가하고 좀 쌩뚱맞아 할 수도 있다. 이런 기본적이 내용을 정리하고 있으니 약간 한심한 생각이 들기도 하고 분야에 대한 공부를 너무 안한 것을 반성하게 된다. 위 내용은 객체지향 설계에 대해 약간 공부를 했다면 너무나도 많이 들어보았던 내용일 것이다. 그 말은 즉 기본 중에 기본, S/W 개발업종에 있는 사람이라면 교양과도 같은 내용인 것이다. 허나 현실은 어떠한가? 주위를 둘러보면 이런 개념조차 존재하지 않는 사람이 프로그래밍을 하고 있다. 공장에서 물건을 찍어내듯이 소스코드를 작성하는 코드생산직들이 대부분인 것이다. 만일 이 단계를 뛰어넘지 못한다면 시간이 좀 지난 뒤에 중국/인도인력 또는 신입들과의 경쟁에서 밀려 호떡장사를 해야할 지도 모를 일이다. 그래서 우리는 이제 아키텍처를 설계하는 능력, 비지니스를 분석/설계 능력, 커뮤니케이션을 원활히 하는 능력을 겸비한 기술리더로 거듭나야 할 것이다. 다시 말해 비지니스를 만드는 사람, 새로운 모델을 만들어 문제를 해결하는 사람, 불편함을 해결하는 사람과 같은 기업에서 가치를 창출하는 사람이 되여야 하는 것이다.
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/159
.gif)
public class Policy {
public void Renew(IAuditNotifier notifier) {
// do a bunch of internal state-related things,
// some validation, etc.
...
// now notify the audit system that there's
// a new policy period that needs auditing
notifier.ScheduleAuditFor(this);
}
}
그림 2 readonly를 사용하여 불변성 적용public class Money {
public readonly Currency Currency;
public readonly decimal Amount;
public Money(decimal amount, Currency currency) {
Amount = amount;
Currency = currency;
}
public Money AddFunds(Money fundsToAdd) {
// because the money we're adding might
// be in a different currency, we'll service
// locate a money exchange Domain Service.
var exchange = ServiceLocator.Find<IMoneyExchange>();
var normalizedMoney = exchange.CurrentValueFor(fundsToAdd, this.Currency);
var newAmount = this.Amount + normalizedMoney.Amount;
return new Money(newAmount, this.Currency);
}
}
public enum Currency {
USD,
GBP,
EUR,
JPY
}
Policy.CurrentPeriod().Renew()
Policy.Renew()
그림 3 집계 루트 테스트public class
When_renewing_an_active_policy_that_needs_renewal {
Policy ThePolicy;
DateTime OriginalEndingOn;
[SetUp]
public void Context() {
ThePolicy = new Policy(new DateTime(1/1/2009));
var somePayroll = new CompanyPayroll();
ThePolicy.Covers(somePayroll);
ThePolicy.Write();
OriginalEndingOn = ThePolicy.EndingOn;
}
[Test]
public void Should_create_a_new_period() {
ThePolicy.EndingOn.ShouldEqual(OriginalEndingOn.AddYears(1));
}
}
public class PolicyRenewalProcesor {
private readonly IAuditNotifier _notifier;
public PolicyRenewalProcessor(IAuditNotifier notifier) {
_notifier = notifier;
}
public void Renew(Policy policy) {
policy.Renew();
_notifier.ScheduleAuditFor(policy);
}
}
그림 4 간단한 응용 프로그램 서비스public IPolicyService {
void Renew(PolicyRenewalDTO renewal);
void Terminate(PolicyTerminationDTO termination);
void Write(QuoteDTO quote);
}
public PolicyService : Service {
private readonly ILogger _logger;
public PolicyService(ILogger logger, IPolicyRepository policies) {
_logger = logger;
_policies = policies;
}
public void Renew(PolicyRenewalDTO renewal) {
var policy = _policies.Find(renewal.PolicyID);
policy.Renew();
var logMessage = string.Format(
"Policy {0} was successfully renewed by {1}.",
Policy.Number, renewal.RequestedBy);
_logger.Log(logMessage);
}
}
public interface IRepository<T>
where T : IEntity
{
Find<T>(int id);
Find<T>(Query<T> query);
Save(T entity);
Delete(T entity);
}
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/82
원문 : http://how-to-solutions.com/how-to-install-trac-on-windows.html
Trac is front end to subversion with integrated wiki for developers. Use this How To article to help you install Trac on a Windows computer that isn’t running Apache. The guide assumes you have a working Subversion repository and are using the TortoiseSVN shell on client PC’s.
Introduction
Firstly let me say Trac is a brilliant bit of software. It is basically a friendly front end to subversion which is a version control system. Trac allows you to use its in-built tracd software so you can view Subversion changes through a browser. Working with developers, this lets you track changes to code easily as well as support development goals through Trac’s project management tools.
This How To guide is by no means a replacement for the Trac documentation. The Trac site and the support provided by their developers is really very good. However I ran into a number of problems when installing the software on a standalone Windows server that wasn’t running Apache.
Installation Files
1. OK so let’s assume you have a working repository which we will say is located at E:\repos and a folder with all of your code located at E:\code.
2. Let’s install Python - Double click the python-2.5.2.msi file and select ‘Install for all users’. Click Next and then Next again (change the location of the Python install if you wish). Click Next once more and Python will start installing. Click Finish and that’s Python installed.
3. Now let’s install the Python SVN file (”svn-python” etc) - Double click the file and then click Next, Nextagain and Next once more. The installation will run and click the Finish button when prompted.
4. Then we install Python SQLite - Double click the file and then click Next, Next again and Next once more. The installation will run and click the Finish button when prompted.
5. Trac needs to be installed now - Double click the Trac exe and then click Next, Next again and Next once more. The installation will run and click the Finish button when prompted.
6. Lastly we need to install Genshi - Double click the Genshi file and then click Next, Next again and Nextonce more. The installation will run and click the Finish button when prompted.
1. Create a folder called tracproject or something similar - I’d recommend putting it in the same directory as your repository.
2. Get your ez_setup.py file and move it into C:\Python25\Scripts folder(or wherever your Python install is located). Bring up a command prompt (Click on Start > Run and type ‘cmd‘). Enter the following making sure you hit Enter after each of the four lines.
| cd c:\ cd pyth* cd scr* ez_setup.py |
3. This will bring up about 10 lines of code and then leave the command prompt in the same directory. Now type the following and hit Enter.
| trac-admin E:\project initenv |
This will install Trac to the E:\project directory. Now the CMD window will prompt you to input four pieces of information. Look at what I used below to indicate what you should use.
| Project Name [My Project] - I used “mycode” Database connection string [sqlite:db/trac.db]> Leave blank by hitting Enter Repository type [svn]> Leave blank by htting Enter Path to Repository [/path/to/repos]> E:\repos |
The CMD window will install Trac based on the existing repository. The more existing revisions you have in the repository the longer this process will take, it’s indexing each change you’ve ever made. Once the install is complete the last line should say “Congratulations!” but don’t close the cmd window!. So Trac is now installed but you’re not done yet. It must be configured correctly to get the most out of it’s use.
4. To easily handle accounts in Trac I would 100% recommend installing the Account Manager Pluginavailable from Trac Hacks (a handy site with lots of Trac plugins) - let’s do this now. In the same cmd window (which should still be in C:\Python25\Scripts) type the following and hit Enter.
| easy_install http://trac-hacks.org/svn/accountmanagerplugin/trunk |
This will bring up about 12 lines of code with the last line starting “Finished processing dependencies”.
5. In Windows open up the E:\project folder and go into the conf sub-directory. There’s a file called trac.ini- open it in an editor like Notepad. You need to copy the following lines below and paste them into Notepad above the [header_logo] section.
| [components] acct_mgr.admin.accountmanageradminpage = enabled acct_mgr.api.accountmanager = enabled acct_mgr.db.sessionstore = enabled acct_mgr.htfile.htdigeststore = enabled acct_mgr.pwhash.htdigesthashmethod = enabled acct_mgr.web_ui.accountmodule = enabled acct_mgr.web_ui.loginmodule = enabled acct_mgr.web_ui.registrationmodule = enabled trac.web.auth.loginmodule = disabled |
Once that’s been pasted in save the ini file and close Notepad. In explorer go up a level to E:\project and create a new text file called passwd.txt - leave the file blank.
6. Lastly let’s give all anonymous users (those who aren’t logged in) admin access. In the same CMD window type the following and hit Enter.
| trac-admin E:\project permission add anonymous TRAC_ADMIN |
Note this will not return any lines. We will remove the admin access later once you, the real admin, have created your account. And with that we can start Tracd. In CMD type the following and hit Enter.
| tracd –p 8000 E:\project |
7. Open up your favourite browser and paste this URL: http://localhost:8000/. You should see a link to the name you gave your project, such as mycode. Click on that and there you have Tracd - the front end of the Trac software.
8.In the top right there’s a tab called Admin - click on it. On the menu on the right click on Configuration and when the page loads select HtDigestStore where the filename is E:\project\passwd.txt and the realm is “trac“.
9. Below Configuration is Users - click on it. Create yourself an admin account. Now using the menu go to Permissions. On the right of that page you will see the Grant Permission section. Use the subject field for the username you gave yourself on the Users page and select the TRAC_ADMIN as Action. Click Add and you will see your username in the middle column of the page with TRAC_ADMIN next to it. For the subject anonymous click on the TRAC_ADMIN so it’s ticked and then click on the Remove selected items button.
10. From now on you will need to use that Admin account to Login and make changes to the Trac environment. By default anonymous users can still view all of the Tracd menu’s to see changes to the repository and view tickets.
I hope this How To guide has helped you get Trac running on your systems. Please feel free to make comments/suggestions/improvement.
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/64
[components]
acct_mgr.admin.accountmanageradminpage = enabled
acct_mgr.api.accountmanager = enabled
acct_mgr.db.sessionstore = disabled
acct_mgr.htfile.abstractpasswordfilestore = disabled
acct_mgr.htfile.htdigeststore = disabled
acct_mgr.htfile.htpasswdstore = enabled
acct_mgr.http.httpauthstore = enabled
acct_mgr.pwhash.htdigesthashmethod = disabled
acct_mgr.pwhash.htpasswdhashmethod = disabled
acct_mgr.web_ui.accountmodule = enabled
acct_mgr.web_ui.loginmodule = disabled
acct_mgr.web_ui.registrationmodule = enabled
iniadmin.iniadmin.iniadminplugin = enabled
navhider.* = enabled
trac.web.auth.loginmodule = enabled
tracgantt.* = enabled
tracnav.* = enabled
tracrpc.* = enabled
tracrpcext.* = enabled
tractoc.* = enabled
tracwysiwyg.* = enabled
webadmin.* = enabled
ticketdelete.web_ui.ticketdeleteplugin = enabled
[gantt-charts]
date_format = %d/%m/%Y
include_summary = true
show_opened = true
summary_length = 16
use_creation_date = true
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/51
소프트웨어 분야에서 소프트웨어 설계만큼 신기하면서도 어려운 공정이 없다는 생각이다. 로버트 L 글래스 큰 형님 말처럼 30여년이 넘게(지금은 45여년이 넘게) 소프트웨어를 설계해왔고, 상식적으로 필요하다 싶은 설계 방법론과 설계 언어를 모두 갖추고 있지만, '설계'에 대해 명쾌하고 가슴이 와 닿는 정의를 내리기는 무척 어렵다.
이런 상황에서도 대가들은 뭔가 달라도 다르다. 오늘은 존 크리스토퍼 존스 큰 형님이 설계에 대해 정의한 문구를 소개하고 싶다. 개인적으로 아주 좋아하는 설계 관련 이야기이기도 하다.
근본적인 문제는 예측이 올바르지 않을 경우 현실화되지 못하는 _미래_ 상태를 예측하기 위해 설계자가 _현재_ 주어진 정보를 사용해야 한다는 사실이다. 설계의 마지막 결과물은 결과물을 만드는 수단을 펼치기 앞서 미리 가정해놓아야 한다. 설계자는 영향을 미치는 사건 연쇄가 시작되는 초기에 세상에 영향을 미칠 시점을 기준으로 시간을 거슬러 올라가면서 작업해야 한다.
쉽게 설명해서, 설계자는 설계의 결과가 어떻게 동작할지 모두 알기에, 속된 말로 짜고치는 고스톱을 친다는 말이다. 심심풀이로 주변에 프로그램을 잘 짜는 친구들을 대상으로 인터뷰를 해보면 한결같은 대답이 나온다.
질문: 개발 과정 중에서 언제부터 프로그램 구현을 시작합니까? 대답: 내가 짠 프로그램이 제대로 돌거라는 확신이 설 때부터.
서투른 개발자는 프로그램 구현에 있어 부딪히는 모든 함정에 따 빠지면서 가까스로 목표를 향해 전진하지만, 뛰어난 개발자는 마치 매트릭스에서 네오가 총알을 부드럽게 피하듯 주변에 함정이 어디있었냐는 듯(실제로 함정에 빠지긴 하지만 워낙 회복 속도가 빨라서 주변 사람들에게는 함정을 피한 듯이 보일 뿐이다. :))이 목표를 향해 그대로 돌진하다.
크리스토퍼 존스 큰 형님에 이어 로버트 L. 글래스 큰 형님도 한마디 거든다.
연구 결과를 이해하려면 먼저 짧은 소프트웨어 역사 속에서 전통이 되어버린 사고에 대한 집착을 버려야 한다. 설계의 외적인 표현에 연연하지 말고 사고의 흐름에 초점을 맞춰야 한다. 설계의 비밀은 _마음_속에 있다.
이런 평범하다면 지극히 평범한 진리를 이해하지 못하기 때문에 제대로 된 프로그램을 만들기 위해서는 객체지향형 언어인 C++나 자바나 파이썬이나 루비타 기타 등등의 언어를 사용해야_만_한다고 교조주의적인 주장(예: "아직도 C를 쓰세요? 설계에 대해 X도 잘 모르시는군요.")이 나온다. 설계의 비밀은 프로그램 언어에 있지 않고 방법론에도 있지 않다. 여러분 _마음_속에 있다.
로버트 L. 글래스 큰형님은 설계의 본질을 딱 네 줄로 설명한다.
즉, 설계는 정신적이고, 아주 빠르고, 반복적이며, 사실상 시행착오를 거듭하는 과정이며, 마음이 문제 해결책을 구상한다. 즉 설계의 본질은 신속한 모델링, 시물레이션이며, 설계의 핵심 요소는 해결책을 제안하고 실패하는 능력과 실패를 극복하는 능력이다.
로버트 L. 글래스 큰형님의 마지막 아름다운 말씀을 전하면서 마무리 하겠다.
설계는 마음 속에서 번개처럼 떠오르는 무언가임을. 그리고 어떤 사람의 번개는 다른 사람의 번개보다 훨씬 빠르다는 사실을.
Posted by 좐군
Trackback URL : http://John.tobe30.com/tc/trackback/41
- 좐군
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 |