Re-visit JavaOne 2011 online

December 13th, 2011

JavaOne is the *must* watch event if you are working in area related Java. JavaOne 2011 held in San Francisco from 2 Oct to 6 Oct. Yes, I know and understand that it is very hard to get the chance to attend the conference. Fortunately we can re-vist the JavaOne 2011 conference online.

First of all, you can visit JavaOne Official Site and get the plenty of information.

Screen Shot : JavaOne Official Site

From there you can find out more information, here are some useful links:

  1. JavaOne Keynotes and Interviews (on-demand video) - Do *not* miss the Keynotes!
  2. JavaOne Content Catalog - You can download the PDF presentation files.
  3. Select JavaOne technical and Birds-of-a-Feather sessions are available free on Parleys.com (look for the Java Channel) - Or you can go directly to Parleys.com JavaOne 2011 space.
  4. Java.net Blog posts - You can find out more insight blog posts from Java.net Blog.

If we have passion, there are lots of articles, audio files, video files, books, etc within our reach.

[Book] 17 Lies That Are Holding You Back… / 성공을 가로막는 13가지 거짓말

December 12th, 2011

Year end holiday season is just around the corner. Even though I haven't read this book, those chapter title would give some inspirations.

17 Lies That Are Holding You Back & The Truth That Will Set You Free

by Steve Chandler

L1. It's who you know

L2. There's something wrong with me

L3. I'm too old for that

L4. I cant because I'm afraid

L5. I'd love to do that, but I dont have the time

L6. There's nothing I can do

L7. I worry because I care

L8. I'm sadder now but wiser

L9. The longer I have a habit, the harder it is to break

L10. People really upset me

L11. Winning the lottery would solve everything

L12. They're too beautiful for this world

L13. You hurt my self esteem

L14. It's a shame we didnt capture that on video

L15. That's just the way I am

L16. What (alcohol and drugs) doesnt kill me make me stronger

L17. I am helpless

한국어로도 번역이 되어 있는데, 어떤 이유에서인지 17개에서 13개로 줄어들었다. 아마도 문화적 차이가 존재하는 부분들을 가다듬은 것 같다. 원서랑 한국어 모도 책을 보지 않아서 잘 모르겠지만, 원서에 L1. It's who you know의 같은 경우 한국어 번역판 "머리말 - 자기 최면에서 깨어나기"랑 매핑이 되는 것 같다. 개인적으로 직역보다는 원서를 쓴 저자의 문화속에서의 의미를 충분히 이해한 후 의역을 하는 것을 더 선호하기 때문에 17개가 13개로 되었다고 해도 그리 큰 문제가 될 것 같지는 않다.

성공을 가로막는 13가지 거짓말
스티브 챈들러 저/문채원 역 | 넥서스 | 원서 : 17 Lies that are Hlding You Back & The Truth that Will

머리말 - 자기 최면에서 깨어나기

거짓말 하나. 하고 싶지만 시간이 없어

거짓말 둘. 인맥이 있어야 뭘 하지

거짓말 셋. 이 나이에 뭘 할 수 있겠어

거짓말 넷. 왜 나에겐 걱정거리만 생기지

거짓말 다섯. 이런 것도 못하다니, 난 실패자야

거짓말 여섯. 사실 난 용기가 없어

거짓말 일곱. 사람들이 날 화나게 해

거짓말 여덟. 오랜 습관이라 버리기 어려워

거짓말 아홉. 그건 내가 할 수 있는 일이 아냐

거짓말 열. 맨 정신으로 살 수 없는 세상이야

거짓말 열하나. 가만히 있으면 중간이나 가지

거짓말 열둘. 난 원래 이렇게 생겨먹었어

거짓말 열셋. 상황이 협조를 안해줘

맺음말 - 당신이 진정으로 원하는 것을 것을 찾는 법

옮긴이의 말 - 거짓말이 날 유혹할 때마다

이런 종류의 자기관리/처세술 같은 책들을 아주 좋아하는 건 아니지만, 어떤 책들은 나의 현재 위치를 돌아보게 해 주는 것 같다. 비록 구체적인 해결책을 제시하지는 못하지만, 나를 먼저 아는 것이 큰 도움이 될때도 많다. 거의 대부분의 사람들이 책에서 언급하는 13가지 거짓말 중 절반 이상은 가지고 있지 않을까... 그리고 그것을 하나씩 하나씩 바꾸어 나가는게 우리의 삶이 아닐까...

[Article] Top 10 Strategic Technologies For 2012

December 7th, 2011

Top 10 Strategic Technologies For 2012 [Full Article]

What kind of technologies will be come into power in 2012? Here are top 10 technologies highlighted by Gartner Inc.

“These top 10 technologies will be strategic for most organisations, and IT leaders should use this list in their strategic planning process by reviewing the technologies and how they fit into their expected needs,”

- David Cearley, vice president and Gartner fellow.

“Organisations should start exploratory projects to look at promised candidate technology and kick off a search for combinations of information sources, including social sites and unstructured data that may be mined for insights,”

- Carl Claunch, vice president and distinguished analyst at Gartner.

I'm going to mention just a few sentence extracted from the article, so please go to [Full Article] and read it in detail.

1. Media Tablets and Beyond.

No single platform, form factor or technology will dominate and companies should expect to manage a diverse environment with two to four intelligent clients through 2015.

2. Mobile-Centric Applications and Interfaces.

Building application user interfaces that span a variety of device types, potentially from many vendors, requires an understanding of fragmented building blocks and an adaptable programming structure that assembles them into optimised content for each device.

3. Contextual and Social User Experience.

A contextually aware system anticipates the user’s needs and proactively serves up the most appropriate and customised content, product or service.

4. Internet of Things.

The Internet of Things (IoT) is a concept that describes how the Internet will expand as sensors and intelligence are added to physical items such as consumer devices or physical assets and these objects are connected to the Internet.

5. App Stores and Marketplaces.

Gartner forecasts that by 2014, there will be more than 70 billion mobile application downloads from app stores every year. This will grow from a consumer-only phenomena to an enterprise focus.

6. Next-Generation Analytics.

In 2011 and 2012, analytics will increasingly focus on decisions and collaboration. The new step is to provide simulation, prediction, optimisation and other analytics, not simply information, to empower even more decision flexibility at the time and place of every business process action.

7. Big Data.

The size, complexity of formats and speed of delivery exceeds the capabilities of traditional data management technologies; it requires the use of new or exotic technologies simply to manage the volume alone.

8. In-Memory Computing.

Running existing applications in-memory or refactoring these applications to exploit in-memory approaches can result in improved transactional application performance and scalability, lower latency (less than one microsecond) application messaging, dramatically faster batch execution and faster response time in analytical applications.

9. Extreme Low-Energy Servers.

The adoption of low-energy servers ? the radical new systems being proposed, announced and marketed by mostly new entrants to the server business ?will take the buyer on a trip backward in time.

10. Cloud Computing.

While the market remains in its early stages in 2011 and 2012, it will see the full range of large enterprise providers fully engaged in delivering a range of offerings to build cloud environments and deliver cloud services.

[Article] Writing Java code in the cloud

December 6th, 2011

One of the most popular buzzwords in IT nowadays, is the *cloud*. As a Java developer, I have been watching the *cloud* for several years. I would like to share the useful article "Writing Java code in the cloud" by Cameron McKenzie and James Denman.

You can click the link and then read full article. Yes, it is called as "Tutorial", but don't worry too much. It is a short article showing the concept of cloud in the perspective of Java. It has the following 3 parts, you can guess what kind of information is included in this article if you see:

  • What is the cloud, and is it the right time for adoption?
  • Extreme scaling in the cloud
  • Cloud computing as a Java development platform

I want to share just a few sentences I agree:

However, the cloud may not be suitable for everyone.

Interestingly, the Java programming language itself, due to the way it manages references and collections, will often generate problems when infinitely scaling, which is why so many other programming languages that run on the Java platform are becoming popular.

Another of the advantages to using a cloud platform for developing enterprise applications is the relative ease of trouble shooting the applications.

Java developers often have a broad range of in-depth skills, but dealing with a cloud infrastructure may be a new challenge for many of them.

Additionally this article includes the links of good articles. If you read the more following articles, then it would be helpful to understand more about Java and cloud:

  1. Cloud Computing vs SOA - SOA Was Just a Fad says SpringSource's Rod Johnson
  2. Platform as a Service: gaining traction or slippery slope?
  3. Say No To The Cloud? There Are Reasons Why
  4. High Scalable & Distributed Architecture with EJB & Spring Framework
  5. Platform as a Service (PaaS)
  6. Snapshots in the cloud: The developers friend
  7. Don't PAAS Up This Opportunity
  8. Make yourself cloud-ready with Platform as a Service (PaaS) skills

[Christianity/기독교] Kairos/카이로스

December 5th, 2011
Kairos
What is the Kairos Course in Christian community? Here is the brief explanation from Wikipedia:
Kairos, adapted to mean "God's time"[1], is a Christian retreat program for high school and college students that takes place around the world. The retreat is a four day, three night (or three day, two night in some cases) residential retreat[2], that provide participants the chance to contemplate God's role in their lives.[3]
Another explanation based on the origin of word:
There are two Greek words for time: chronos and Kairos. Chronos emphasizes duration, succession of moments, chronological time. Kairos does not. Kairos is the Lord's Time, and is judged, not by its succession or duration but by its value, the intensity of the experience of God's presence in the midst of the Christian community.[4]
—Trinity College Campus Ministry

The Kairos course began in the Philippines in 1994. It was known then as the CWMC (Condensed World Mission Course). You can visit the International Kairos Course home page (http://www.kairoscourse.org) for more information in detail. If you are living in Singapore, then you can visit Kairos Course Singapore - http://www.kairoscoursesingapore.org.

한국어에는 "시간"이라는 단어 하나로 사용되고 있지만, 이 시간이라는 단어가 다른 의미를 가질 때가 있습니다. 첫째는 "시간 잘 간다~"라고 할 때, 사용되는 시간이라는 단어가 있습니다. 이 경우에는 그냥 똑딱똑딱 흘러가는 시간을 의미합니다. 천문학적으로 해가 뜨고 지면서 결정되는 시간이죠. 다른 의미의 시간으로는 "아~ 정말 그 시간들은 잊을 수 없어~"라고 말할 때 사용하는 시간이 있습니다. 여기서 말하는 시간은 앞에서 말한 시간과는 의미가 좀 다르게 사용되었습니다. 이 경우에는 어떤 특정한 시간을 의미하는 것입니다. 그냥 흘러가는 시간 속에서 나에게 특별한 의미를 부여하는 시간이라고 볼 수 있습니다.

고대 그리스 사람들도 똑같은 생각을 했었나 봅니다. 그래서 그들이 사용했던 헬라어(고대 그리스어)에는 이 "시간"이라는 단어를 두 가지로 사용했다고 합니다. 제가 예로 들었던 "시간 잘 간다~"라고 할 때는 "크로노스(Chronos)"라는 단어를 사용(우리가 흔히 말하는 연대기를 의미하는 영어 단어 Chronology의 어원이 Chronos입니다.)하였고, "아~ 정말 그 시간들은 잊을 수 없어~"라고 어떤 의미를 부여할 때는 "카이로스(Kairos)"라는 단어를 사용하였다고 합니다. 또한 이 카이로스라는 단어는 특별히 하나님과의 의미있는 시간들을 나타낼 때 사용했다고 합니다. 그래서 하나님의 시간을 의미하기도 합니다.

"때가 차매 하나님이 그 아들을 보내사 여자에게서 나게 하시고 율법 아래에 나게 하신 것은"

- 갈라디아서 4장 4절

여기서 나오는 "때가 차매"에 사용된 단어가 카이로스(Karios)라고 합니다. 예수님께서 이 땅에 오셨을 때, 그저 흘러가는 시간은 크로노스에 오신것이 아니라, 의미있는 시간, 정해진 시간 카이로스에 오신것입니다.

그렇다면, 어떻게 하면 그저 흘러가는 시간인 크로노스가 아닌 하나님과 나만의 특정하고 의미있는 시간, 카이로스를 만들 수 있을까요? 제가 정답을 드릴 수 있는 문제는 아닌 것 같습니다. 함께 고민하고 실천해 나가면서 찾아야 하는 질문인 것 같습니다.

하지만, 제가 추천해 드릴 수 있는 것은 "코람 데오(coram Deo)" 입니다. 들어보신 적이 있으실 수도 있을텐데, 한 때 한국에서 유행이 되어서 꽤 유명해 졌었던 단어로 종교개혁의 선두에 섰었던 루터가 사용했던 단어입니다. "코람(coram)"은 라틴어로 "~앞에"라는 뜻을 가지고 있고, "데오(Deo)"는 "하나님"을 뜻합니다. 즉, "코람 데오(coram Deo)"는 "하나님 앞에서"라는 뜻입니다.

우리가 매 순간 순간을 하나님 앞에서(코람 데오:coram Deo) 살아가듯이 한다면, 그저 흘러가는 크로노스의 시간들이 하나님 앞에서 의미있는 카이로스의 시간들로 변할줄을 믿습니다.

----------------------

[1] Bishop Ready High School: Kairos Retreat Information - http://www.brhs.org/CampusMinistry/KairosRetreat.aspx
[2] Marin Catholic High School: Kairos Retreat - http://www.marincatholic.org/index/kairos
[3] Boston College: Kairos Retreat - http://www.bc.edu/offices/ministry/retreats/kairos.html
[4] Trinity College: Kairos Retreat - http://www.trinity.wa.edu.au/faith_dev/campus_ministry/retreats/kairos/kairos_home.htm

[Video] The role of leadership in software development

December 2nd, 2011

The role of leadership in software development

[Youtube]

Google Tech Talks
Speaker: Mary Poppendieck
6 May, 2008
1 hour 32 minutes 04 seconds

ABSTRACT from Youtube Page

When you look around, there are a lot of leaders recommended for software development. We have the functional manager and the project manager, the scrum master and the black belt, the product owner and the customer-on-site, the technical leader and the architect, the product manager and the chief engineer.

Clearly that's too many leaders. So how many leaders should there be, what should they do, what shouldn't they do, and what skills do they need?

This will be a presentation and discussion of leadership roles in software development -- what works, what doesn't and why.

Summary by Kwangshin

1850's Train Wreck Management
> Six Principles of Administration

1880's Command Intent

1910's The One Best Way
> Frederick Winslow Taylor
-. The Principles of Scientific Management

1920's Industrial Training
> Charles R. Allen - New Bedford, Massachusetts
-. On-the job training
-. By a master at the job
-. Four Step Method
* Preparation, Presentation, Application, Testing

1930's Unit Command

1940's Wartime Production
> Training within Industry (TWI)
-. Train first line supervisors
* Job Instruction - how to train workers
* Job Methods - how to improve the way work is done
* Job Relations - how to treat workers with respoect
> Statistical Process Control (SPC)

1950's TWI & SPC move to Japan

Meanwhile in the USA - The Polaris Project
> Success was attributed to "PERT"

Why Polaris was Successful
> Quality of Leadership
> Focus on Deployment
> Decentralized, Competitive Organization
> Emphasis on Reliability
> Esprit de corps

1960's Toyota Production System
> Taiichi Ohno
-. Just-in-Time Flow
-. Stop-the-Line Culture
-. Relentless Improvement

Taiichi Ohno Standard Work

1970's Theory X - Theory Z
> Kaoru Ishikawa
-. "The fundamental principle of sucessful management is to allow subordinates to make full use of their ability."

1980's If Japan can, why can't we?

1990's The Decade of Process

Plank Road Fever

High Reliability Organizations
> Common Characteristic : Mindfulness

Mindfulness
> Preoccupation with Failure
> Reluctance to Simplify
> Sensitivity to Operations
> Commitment to Resilience
> Deference to Expertise

Mission Command vs. Detailed Command : A Comparison
> Where does Software fit?

The Product Leader
> Example: Chief Engineer at Toyota

Functional Leader

Leadership Roles
> Marketing Leader
-. Business Responsibility
-. Customer Understanding
-. Release Planning
-. Tradeoffs

> Technical Leader
-. System Architecture
-. Technical Guidance

> Functional Leader
-. Preserve Knowledge
-. Solve Problems
-. Grow People

> Project Leader
-. Funding
-. Scheduling
-. Tracking

What are You Building?
> "I'm cutting stones."
> "I'm earning a living."
> "I'm building a cathedral."

Cathedral Builders
> Move responsibility and decision-making to the lowest possible level.

-------------------------------------------------

If you have any interests in above keywords I extracted, then it is worth watching this 1 and half hours video.

If someone ask you "What are you doing as a software engineer?", then what will be your response?

"I'm typing keyboard to do a programming.", "I'm doing my programming job to earn money to live."

Or "I'm developing great software helping people do their work faster and more efficiently."

If-Else가 왜 code smell인가?

November 22nd, 2011

오늘 인도 개발자가 만든 소스를 수정할 일이 생겨서 보다가 기절하는 줄 알았다... ㅠ.ㅠ

If-Else의 사용에 대해서는 사실 이미 많은 토론이 오고 간 주제이고 이해하고 있었는데, 실제로 이렇게 만나게 될 줄이야...

다음의 영문 사이트를 참고하면 왜 If-Else가 code smell인지 이해할 수 있다.

Else Considered Smelly

요약하자면, 다음과 같은 If-Else문을 사용할 경우 3가지 code smell에 대해서 조심을 해야 한다.

if (condition()) {

ifBlock();

}

else {

elseBlock();

}

1. 첫번째 smell

condition()에 해당하는 조건문이 길어져서 복잡해지면, else인 경우를 찾는것이 두배로 복잡해 진다. 왜냐하면, 이미 너무 복잡해진 condition() 조건문을 반대로 생각해야 하기 때문이다.

2. 두번째 smell

ifBlock()에 해당되는 부분이 개발자가 보고 이해하기 힘들 정도로 길어지면, condition() 즉 조건이 무엇이었는지 기억하기가 어렵다. 오늘 내가 만난 경우 ifBlock()이 200 라인을 넘어갔다. ㅠ.ㅠ

3.  세번째 smell

중첩 If-Else를 사용하게 되면 문제는 더욱 더 복잡해 진다. 오늘 내가 만난 소스 코드는 If-Else를 무려 3번이나 중첩해서 사용했다. 데이터베이스 레코드가 많아질수록 처리 시간이 점점 더 늘어나는 원인이 무엇인지 대충은 예상했는데, 중첩으로 사용된 If-Else 안에서 심지어 for() 루프도  중첩해서 사용했다.

하지만 사실 이 smell들은 조금만 신경쓰면 충분히 방지할 수 있다. 여러가지 해결책들이 존재하지만 몇 가지만 알아보자면 다음과 같다.

1. Decompose Conditional

condition()에 해당하는 조건들은 최대한 간단하게 만들고, 직관적으로 만든다. 직관적이라는 부분에는 notSummer 라는 조건 대신 isSummer라는 조건을 사용하는 것이다. 얼핏 보면 비슷해 보이지만, else로 넘어갈 경우 차이를 느낄 수 있다. 전자의 경우 "여름이 아니면"의 else는 "여름이 아니면의 아니면"이 되고, 후자처럼 사용한다면 "여름이면"의 else는 "여름이 아니면"된다. 간단해 보이지만 복잡한 로직을 처리해야할 경우 큰 차이를 느낄 수 있을 것이다. Decompose Conditional 이라는 이름으로 알려져 있다.

2. Extract Method

두말할 필요도 없이 메소드를 꺼내서 코드를 읽기 쉽게 만들어야 한다. Extract Method로 이미 널리 알려져 있다. 이건 정말 꼭 해야 한다.

개인적으로는 제발 좀 자기 코드에 대해서 *고민*을 했으면 좋겠다. 당장 돌아가고 실행되는 코드가 아니라, "다음에 내가 다시 사용하게 된다면?"라는 고민을 조금만이라도 해도 이렇게 코드를 만들지는 않을텐데...