Total Pageviews

2012/08/23

Best Practices to Make Life Easier for the Programmer


Constants
Should you ever need a variable that is not changing over time (or in many cases just one time), you should use constants. Constants are quick-to-find variables and they help you minimize memory usage.

Configurations
The term ‘configuration’ means variables that are used a lot and rarely change but can be changed in the middle of execution, if needed. Constants can be made as configurations if it can be changed in the middle of execution. Otherwise, leave it as a constant.

Access Control
So many programmers don’t care about access-level modifiers. If you need broader access, use protected and, as a last resort, public access. This way you can protect your specific method or member from the ‘outside world’.

Comments
Comments let you remember code snippets, algorithms, sort methods, even randomized numbers you’ve created before. This is a big advantage if you’re working on a team. Because of comments, other people will understand your intentions.


http://architects.dzone.com/articles/do-not-delete-common

2012/08/13

2012/08 神戶京都之旅


風見雞館

北野異人館街一隅

北野異人館街的星巴克

Kobe Tower

神戶港夜景

Kyoto Tower

琵琶湖煙火

伏見稻荷神社

藝妓回憶錄拍攝場景

奈良公園

宇治川煙火



2012/07/27

Clear IE Cache Through Command Line

Scenario
Owing to Microsoft IE will cache JavaScript, CSS files, so it may not recognize when we update JavaScript or CSS files. 
We need to clear browser cache every time, when we update JavaScript or CSS files.

Solution
Windows provides command line to clear IE cache
  • All : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 
  • History : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1
  • Cookies : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2
  • Temp Internet Files : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
  • Form Data : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16
  • Passwords : RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32
We need to clear cookies and temp internet files, so we copy the two commands into text file, and save as a bat file. Then move to C:\

And create a shortcut on your desktop.

As you need to clear browser cache, just click the batch file. It will clear cookies and temp internet files automatically.



青年拒絕窮忙!主管最浪費員工的7大症狀


1. 在不同專案間調動人力,或不斷換人處理專案。
2. 缺乏適當規劃所造成的浪費。
3. 每次救火都會產生浪費。
4. 超時加班導致浪費。
5. 當專案變調或取消,就會產生浪費。
6. 士氣低落所導致的浪費。
7. 多工也會造成浪費。


http://topic.cw.com.tw/500/magic-1.aspx

2012/05/29

What's difference between an empty string and a null value

Question: What is the difference between an "empty" value and a "null" value? 
Answer: An empty string is treated as a null value in Oracle.

Demo
NIGT013.COLL_B_DATE is null, and apply NVL2 to  substitute a value (i.e. empty string) when a null value is encountered.

But it showed null value in report. It results from an empty string is treated as a null value in Oracle

Therefore, in order to show non-null value in my report. Substitute two spaces when a null value is encountered.

Then it won't show null value in report anymore.

2012/05/22

7 Application Deployment Best Practices


  1. Keep the installation structure SIMPLE. 
  2. Always get rid of old files. 
  3. Automate it 
  4. Don’t over do it with the symlinks
  5. Delete everything first. 
  6. Have a roll back strategy.
  7. Don’t make changes to your deploy mechanism or deploy scripts between deploying to different environments. 

2012/05/15

Top 7 programmers bad habits


1. The all code is crap, except mine, attitude.
2. The “I fix that in a second” catastrophe.
3. The “That will only take a second” misconception.
4. The ego spiral.
5. “It wasn’t me!”
6. The demotivated genius.
7. The premature programmer.

2012/04/16

10 project management lessons from the Titanic disaster


1: You need to know what you’re measuring
Frederick Brook says, milestones should be objectively measurable. If you do not have valid measurements for your project, you will run into problems.


2: Assumptions can kill you
Maybe we assumed that a particular system was using a newer software release than it actually was. 
Maybe we assumed that another department would take care of ordering cable.
Maybe we assumed that the vendor received our critical email message. 
Assumptions are important in your work, but if you proceed on the basis of them, make sure everyone is clear about what assumptions you are making.


3: Distractions are dangerous
If enough members of your team encounter enough distractions, your project will gradually fall behind.


4: Little things add up
The small delays are just as critical as the large ones, meaning that adherence to milestones is critical to the success of a project.


5: Stakeholders should be kept informed
Our stakeholders need to know about the status and progress of your project. Keeping them informed will keep them happier.


6: Other people’s perspectives matter
If a client asks a question, try to see beyond the question itself to the motivation behind the question. 
If a technical person is explaining a function of a system or program, make sure the explanation avoids jargon. 
Clear communication will lead to happier clients.


7: Moving targets can hurt you
Any change is rarely “small.” Rather, it typically involves changes to other parts of a system, results in greater complexity, and requires more testing.


8: Traceability is essential
How familiar are you with the strategic objectives of your company? 
Can you find a logical connection between the requirements of your project and those strategic objectives? 


9: Methodology is more important than technology
You might want to use sophisticated planning and tracking software and tools. 
More important, though, is that your plan be solid. 
The best software in the world will not save a poorly designed plan.


10: Documentation may have lasting benefits
Documentation is often the most important part of the project because it may exist long after the project team has disbanded.


http://www.techrepublic.com/blog/10things/10-project-management-lessons-from-the-titanic-disaster/3174

2012/04/13

Becoming A Better Developer

  • Motivation
    • If you’re not growing, you’re dying…
  • Confidence
    • Good developers are usually quite confident in their abilities. Why? Because they know that they have put in the effort to truly understand what they are talking about. Be confident in what you know.
  • Choose Concepts Over Implementations
    • If you understand the concepts, that enables two things. 
      • First, you can use those concepts in other languages with ease. But far more importantly it lets you think abstractly about different ways to solve a problem. 
      • It also lets you learn from other communities. So rather than waiting for somebody else to solve a problem in your language, or looking for help in your language, you can look anywhere for help. 
  • Read At Least One Book per Week (well~it's very difficult for me >_<)
    • There are two main things that you’ll benefit from with this approach. 
      • First, by reading actual books, you’ll focus on exploring a concept in depth.
      • The second advantage to the one-book-per-week approach is that it will make you push your boundaries. 
  • Share Your Knowledge
    • The best way to learn is to teach.
  • Become a Mentor
    • The important thing is to look at the mistakes they are making and help them to understand why they are making the mistake. The obvious benefit here is that you are “paying back” the community and investing in the future of the industry.



For complete information : http://blog.ircmaxell.com/2011/11/becoming-better-developer.html

2012/04/12

Apache Commons應用 - CollectionUtils

Requirement
報表輸出結果,應該依序輸出「營業事業所得稅」、「綜合所得稅」、「遺產稅」、「贈與稅」、「貨物稅」、「菸酒稅」、「證券交易稅」、「期貨交易稅」、「營業稅」、「特銷稅」。如果沒有資料,該稅別要顯示出來,數字要顯示0。結果如下,


根據user requirement要求的輸出結果,並不是按照tax code或者tax name的筆劃順序進行排序,此部份必須要根據query回來的的結果來做加工。

Problem
原本的作法是用SQL將統計資訊算出來,但是其只會傳回有存在的資料,若沒有符合條件,就不會回傳資料,故只有回傳兩筆資料。

從SQL回傳回來的結果會是一個List of value object,以目前的條件,只會有兩個value object,分別是「營利事業所得稅」與「期貨交易稅」。


Solution
由於資料固定只有10筆,放在SQL裡頭做的話,SQL會很複雜,日後維護不易,故此部份的資料加工放在AP端進行處理。
  1. 建立一個新的List物件, List result = new ArrayList();
  2. 根據回傳回來的list of value object來進行判斷
    1. List中是否有「營業事業所得稅」的資料
      • 若「有」,從List中找出該object,並add到新的List物件
      • 若「無」,add一筆空的資料到新的List物件
    2. List中是否有「 綜合所得稅 」的資料
      • 若「有」,從List中找出該object,並add到新的List物件
      • 若「無」,add一筆空的資料到新的List物件
    3. List中是否有「 遺產稅 」的資料
      • 若「有」,從List中找出該object,並add到新的List物件
      • 若「無」,add一筆空的資料到新的List物件
    4. 「 贈與稅 」、「 貨物稅 」、「 菸酒稅 」、「 證券交易稅 」、「 期貨交易稅 」、「 營業稅 」、「 特銷稅 」依此類推

Apache Commons有提供CollectionsUtils此API,其提供不少utility method來針對Collection物件進行一些處理,根據以上需求有兩個:

  1. 從List中check是否有存在特定的object
  2. 從List中取得特定的object

//List中是否有「營業事業所得稅」的資料
1:  private static boolean is35Exist(List list) {  
2:      return CollectionUtils.exists(list, new Predicate() {  
3:        @Override  
4:        public boolean evaluate(Object obj) {  
5:          NIG630ReportBean bean = (NIG630ReportBean) obj;  
6:          return "營利事業所得稅".equals(bean.getTaxNm());  
7:        }  
8:      });  
9:    }  

//從List中找出該object
1:  private static NIG630ReportBean find35(List list){  
2:      return (NIG630ReportBean) CollectionUtils.find(list, new Predicate() {  
3:        @Override  
4:        public boolean evaluate(Object obj) {  
5:          NIG630ReportBean bean = (NIG630ReportBean) obj;  
6:          return "營利事業所得稅".equals(bean.getTaxNm());  
7:        }  
8:      });  
9:    }  





Stop Redeploying in iReport Development

Context
以下是本案的project structure:


所有的jrxml放在jasperreports folder中,當jrxml有異動,處理程序如下:
1. 執行maven build
2.  將jrxml compile成jasper file會搬到nig-web\src\main\webapp\WEB-INF\classes\META-INF\jasperreport
3. 包成ear file
4. deploy到application server

Problem
在用iReport開發的時候,最浪費時間的部份,就是在我們無論做任何的細微的修改,如果要看到修改後的結果,都要將jrxml compile成jasper,然後redeploy到application server,此過程曠日廢時,浪費許多寶貴的開發時間。

Solution
Step1. 打開iReport工具-->工具--選項

Step2. iReport--> Compilation and execution--> unchecked "Use Report Directory to compile"-->將「nig-web\src\main\webapp\WEB-INF\classes\META-INF\jasperreports」貼進 "Compilation directory"-->click 「確定」按鈕

設定完成後,當我們在iReport Designer做任何異動,click "Compile Report" button,iReport會自動將jasper file搬移到指定目錄,application server會自動抓到最新的jasper file,不用再rebuild and redeploy了。





iReport print when expression 應用

Requirement
在報表呈現的內容,每筆資料之間,需要有間隔的虛線如下

Problem
原本iReport designer中的作法,是將line放在detail band中的fields下方,screenshot如下:

但是此舉,在最後一筆資料,也會出現分隔線,此結果不合理。

Solution
step1. 將分隔線放到detail band的fields上方,如此一來,列印順序是line-->data-->line-->date-->line-->data,以此類推

 step2. 由於列印順序是line-->data-->line-->data-->line-->data,為了滿足需求,只要讓第一次出現line的時候,不要讓顯示出來就好。此時,click line,並在attribute視窗中的print when expression輸入條件,當是第一筆的時候,不要印出line,從第二筆資料開始即可。


2012/04/08

Project Manager and Subject Matter Expert


對於project manager這個角色,到底需不需要有技術能力,一直是常在爭論的議題。
這篇文章倒是給了一個不錯的答案:『有會更好』


他提到了,如果是technical project manager可以帶來幾個好處

  1. 遇到問題的時候,他更能掌握問題的難度,更能掌握要花多少時間來解決這個問題,對於時程的掌握會更踏實
  2. 你對於你的團隊更有同理心,因為你知道問題的難度。project manager總是想急著解決問題,常會脫口而出:『這個問題有這麼難嗎?有需要這麼久嗎?』
  3. 由於你有技術的底子,對於某些問題,若有過往的經驗,可以更快找出解決方案,並帶了團隊走向正確的方向,避免花額外的時間去做trial and error

以下是摘錄全文中的部分:

  • Scope and Schedule – If you have a background in the project you are managing it becomes much easier to understand what the project is trying to accomplish.  This helps you in defining the scope of the project and setting the schedule.  You will know roughly how long it takes to build a server, install a circuit, or design a network.
  • Empathy – If you understand the work, it makes it much easier to empathize with the team.  I have built some strong relationships with the network engineers I work with, because they think of me as one of them and not just another project manager.  A project manager should never under estimate the value of relationships.
  • Misinformation and Solutions – You will have a much better sense of when you are getting the wrong information and be able to contribute to solutions.
  • Ramp Up – Most projects start life underfunded and behind schedule.  It is an unfortunate fact of life for project managers.  If you know the subject matter, you will spend more time focused on the project than trying to understand it.  This will save you significant precise time.



全文請看:http://www.cerebellumstrategies.com/project-manager-expert/

2012/04/04

5 Reasons Why Software Quality Matters to your Business


Predictability
Do it once and do it right, and there will be less re-work, less variation in productivity and better performance overall.


Reputation
Some companies have a reputation for building quality software. 
A good, solid reputation is hard to establish and easy to lose, but when your company has it, it’s a powerful business driver. 


Employee Morale
The most productive and happy employees have pride in their work. Enabling employees to build quality software will drive a much higher level of morale and productivity.


Customer Satisfaction
A quality product satisfies the customer. A satisfied customer comes back for more and provides positive referrals. 


Bottom Line
Predictable and productive performance, a stellar reputation, happy employees, and satisfied customers are the formula for a successful software business.


http://blog.smartbear.com/post/12-04-03/5-reasons-why-software-quality-matters-to-your-business/

12 Ways to Become a Better Programmer


1. Read Other People’s Code
Reading other people’s code will allow you to understand different points of view in problem solving as well as introduce you to new techniques. It is important to have an objective to your reading, such as learning a new programming paradigm or how to work with a new API. 


2. Develop Personal Motivation
Being motivated to become better at your chosen profession is an excellent step in the right direction.


3. Get a Mentor
This should be a person that you aspire to be like professionally, that has a background that you can relate to and that you have a lot to learn from. 


4. Learn to Listen
Learn to listen to what the customer has to say, listen to your coworkers when they are discussing the project. Don’t assume that what you think is really what they want. 


5. Gain Confidence
Why are good programmers so confident? They know they have put in the time and effort necessary to truly understand what they are talking about. This knowledge enables them to make the best decisions and be able to discuss or defend them in a productive way when needed. 


6. Join a User Group
hese groups are usually structured around two concepts: teaching and networking. Not only will you be able to learn something new at each monthly presentation but you will gain valuable contacts in your industry that could later lead to internships, jobs or mentors.


7. Read at Least Two Books a Month
By reading books you will be focusing and exploring a concept in depth as opposed to “grazing” on information such as blogs, tweets and other online reading that rarely goes in-depth on a topic. This way, you will be better able to take these lessons and concepts and apply them to the real world.


8. Learn to Use Your Debugger
For some programmers, finding bugs means you did not spend enough time planning or that you have been sloppy during your code writing. Errors in your code should not be taken personally. Humans will continue to make mistakes and that is something we have to accept. Stop looking at your debugger as an evil you need to avoid and see it as a tool you can use to create better code.

9. Never Stop Learning
Over the years the continuous pattern of framework upgrades, version numbers and release dates start to run together but you must keep your skills up to date by evaluating new technology and trends as they are happening. 


10. Share Your Knowledge
The best way to learn something is to teach it to someone else.


11. Learn Keyboard Shortcuts
For programmer this means knowing how to type quickly and accurately as well as know your way around keyboard shortcuts that will make you a faster developer.


12. Learn When to Take a Break
When working on a task such as programming that requires concentration, you will often find that you are making more mistakes or creating more problems when you are tired. Stopping programming is often a better solution when tired than having to fix the mess you made.


http://www.learncomputer.com/12-ways-to-become-better-programmer/

2012/03/31

6 things they didn't teach me at the academy - Prepare yourself better for a developer's life

Looking for your first position in the software world? 
Want to know more about developer's life?
Here present you with 6 essential points that will help you in your upcoming venture:
  • Understanding the structure of a software company: in most cases there will be a distinction between Developers, QA's/Testers, Support, Product and IT. Understanding this structure beforehand will help a candidate understand the job description he is interviewing for.
  • Development Methodologies: Waterfall or Scrum, Agile or not,
  • Code Management tools and processes: code repository tools, Continuous Build , Integration Test, Issue tracking systems
  • Coding guidelines
  • IDE usage.
  • Utilizing the power of open source


2012/03/28

6 Tips to Stay Focused on Project Deadlines



1. Be a perfectionist
If you always look for that perfect design (nothing wrong with this, by the way) you will find yourself spending more time analyzing then actually finishing the project. This needs to be worked out, as the client expects you to finish your work on time. 


2. Pre-defined time for each task
A solid plan means working on a specific task one at a time. This will ensure you stay fully focused on the one task you have to do and therefore finish earlier or at least in time.


3. Have a daily plan
Having a daily plan is good for your confidence. Keeping a close eye on every phase of a project will likely make you feel better at the end of each day. If you manage to do something every day (and keep track of it) you will feel accomplished more often.


4. Work breakdown structure (WBS)
Having a to-do list might work well for small projects, but once you start working on a larger scale, small lists might not be so effective.
If you have lists with large, complicated activities, checking them off at the end of the day is not likely to happen, therefore you need to break the work down into smaller bits. Having sub-lists with smaller tasks will be more rewarding for you at the end of the day.


5. Larger scale management
Besides the small to-do lists and the WBS you do quite often, having a detailed monthly schedule is also recommended. Planning in advance can’t go wrong when you think of it very well.


6. Reward yourself
It makes you look forward to reaching your goals and to the next week.

" it is impossible to be good at maintaining your schedule if you are not organized."


Reference :  http://www.1stwebdesigner.com/design/tips-to-stay-focused-project-deadlines/

2012/03/21

WebSphere Application Server Performance Tuning Toolkit

IBM has released the WebSphere Application Server Performance Tuning Toolkit that gives the ability to monitor multiple WebSphere Application Servers from an eclipse workspace*.

This tools uses WAS Performance Monitoring statistics to get and chart statistics that indicate the health and well being of your server. 


* Please note that the tool has been released on an as-is basis with no support.

Read more: http://www.javacodegeeks.com/2012/03/websphere-application-server.html#ixzz1plNsrVKx

iReport : Reprint header


Problem


When I export my report to pdf format, the data split into multiple pages.

The report header should print for each page, but it only print once.

Root Cause


Here has one group options to do reprint

  • Reprint header : If you want to reprint the group header on each page, check this option.

Step by step


1. click group header




2. check Reprint header
 


















3. click save

2012/03/08

高績效主管的8堂必修課

  1. 發掘部屬強項 : 了解部屬的優點,才能適才適所、將對的人放在正確的位置上,以發揮更大的生產效能
  2. 與部屬分享資訊 : 了解公司的使命、清楚該為何而戰
  3. 傾聽部屬心聲 : 唯有放下成見,願意閉上嘴巴、聆聽部屬心聲,主管才能對員工產生影響力,創造更大的績效
  4. 保護部屬 : 執行任務的過程中,如果遇上任何阻礙,主管都必須在第一時間跳出來排解,或者適時爭取部屬應得的權益
  5. 清楚設定目標 : 設定目標也能預防雙方對「該做的事」認知不一致,創造有效率的生產行為
  6. 讚美部屬 : 在部屬照著原先設定的目標努力,並達到所謂的「好的結果」時,主管就要立刻給予回饋,使部屬了解自己做對了,往後也能擁有更好的動能,繼續努力做出對的事
  7. 斥責部屬 : 針對事件、不牽涉人格的指正,它必須在部屬犯錯的當下執行,讓他知道這是嚴重的錯誤,才能有效預防再犯
  8. 授權與賦權部屬 : 主管的任務在於提升團隊的總產出,因此,主管更需要授權,才能擁有充分的時間,拓展新業務、協助部屬成長,讓團隊產出繼續增值


http://www.managertoday.com.tw/?p=11328