Total Pageviews
2019/10/31
2019/10/15
[Spring Framework] Extract static SQL statement to sql file
If we had some static SQL statement, it won't change based on specific condition, then we can consider to extract them into SQL file.
It will reduce line of code in your custom repository implementation class, it will be easier to maintain as well.
Assume SQL files is located in /resource/sql/common
Therefore, we can create a utility class to read the content of SQL file:
It will reduce line of code in your custom repository implementation class, it will be easier to maintain as well.
Assume SQL files is located in /resource/sql/common
Therefore, we can create a utility class to read the content of SQL file:
package tw.com.abc.analysis.util; import org.springframework.stereotype.Component; import org.springframework.util.ResourceUtils; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.util.stream.Stream; @Component public class SqlFileLoader { public String getSqlFile(String fileName) throws IOException { StringBuilder sql = new StringBuilder(); try { File file = ResourceUtils.getFile("classpath:sql/common/" + fileName); Stream<String> lines = Files.lines(file.toPath()); lines.forEach(l -> sql.append(l).append(" \n ")); } catch (IOException e) { throw new IOException("cannot find sql file", e); } return sql.toString(); } }
Labels:
Spring
2019/10/14
[Apache POI] How to set formula from another sheet?
Problem
I had two sheets in my excel file.
If some of cells in first sheet's formula is from second sheet, how to fulfill this requirement?
How-To
Remember to set formula after your code completed second sheet.
If you set formula before second sheet, it will not have any effect.
I had two sheets in my excel file.
If some of cells in first sheet's formula is from second sheet, how to fulfill this requirement?
How-To
Remember to set formula after your code completed second sheet.
If you set formula before second sheet, it will not have any effect.
Labels:
POI
2019/10/13
[Spring Boot] found character '%' that cannot start any token. (Do not use % for indentation)
Problem
My application.yaml looks like:
When I startup my spring boot project, it showed the following error message and fail to startup:
How-To
Add single quote to head and tail.
My application.yaml looks like:
excel: revenue: path: F:\\報表\\ fileName: %s年%s月報表.xls
When I startup my spring boot project, it showed the following error message and fail to startup:
Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character '%' that cannot start any token. (Do not use % for indentation) in 'reader', line 8, column 15: fileName: %s年%s月報表.xls ^
How-To
Add single quote to head and tail.
excel: revenue: path: F:\\報表\\ fileName: `%s年%s月報表.xls`
Labels:
Spring
2019/10/12
[Apache POI] 常用 CellStyle 設定
Sample code:
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 | // 為 cell 上色 CellStyle headerCellStyle = workbook.createCellStyle(); headerCellStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); headerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); headerCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0")); headerCellStyle.setFont(font); CellStyle highlightCellStyle = workbook.createCellStyle(); highlightCellStyle.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.getIndex()); highlightCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); highlightCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0")); CellStyle footerCellStyle = workbook.createCellStyle(); footerCellStyle.setFillForegroundColor(IndexedColors.LIME.getIndex()); footerCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); footerCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0")); footerCellStyle.setFont(font); // 為 cell value 加上 1000 seperator CellStyle nonHighlightCellStyle = workbook.createCellStyle(); nonHighlightCellStyle.setDataFormat(workbook.createDataFormat().getFormat("#,##0")); // 為 cell value 加上百分比 CellStyle percentageCellStyle = workbook.createCellStyle(); percentageCellStyle.setDataFormat(workbook.createDataFormat().getFormat("0.000%")); |
Labels:
POI
2019/10/11
[Apache POI] How to draw border in Apache POI?
Problem
I would like to draw border as bellows:
How-To
You can make good use of PropertyTemplate to draw border with ease.
If you would like to draw line for multiple tables, you can do this way:
I would like to draw border as bellows:
How-To
You can make good use of PropertyTemplate to draw border with ease.
If you would like to draw line for multiple tables, you can do this way:
Labels:
POI
2019/10/10
2019/10/09
[閱讀筆記] Measure What Matters (4/5)
- OKRs 與獎金不應緊密地綁在一起的原因是,有些人會訂定困難的目標來挑戰自己,有些人則會訂定簡單的目標,訂定困難目標的人可能只完成當初設定的 70%,訂定較簡單目標的人則可能完成 90%,你該給後者較高的獎金嗎?
- 主管與下屬的對話 (conversation) 通常會包含五個關鍵的部分
Critical areas in conversation
|
Description
|
目標設定與反思
(Goal setting and reflection)
|
員工的 OKR 計畫在於設定未來 OKR cycle 的目標。討論的重點在於個人的目標與關鍵成果,如何與組織的優先順序一致。
|
持續的工作進度報告
(Ongoing progress update)
|
快速瞭解員工即時的進度。progress update 會問兩個基本問題:有哪些事情有做好 (What’s working well)?哪些事情沒做好 (What’s not working well)?若有需要解決的問題,要儘速解決
|
雙向指導
(Two-way coaching)
|
主管協助激發下屬的潛力,下屬協助主管的工作做得更好
|
職涯發展
(Career growth)
|
主管協助下屬發展技能、找出成長的機會、擴展企業未來的視野
|
輕量級的績效評核
(Lightweight performance reviews)
|
回饋機制在於收集資訊,並且彙整員工從上次會議後迄今的完成狀況,是否符合組織的期望
|
- 回饋 (feedback) 是一種基於觀察與經驗所得到的意見,讓我們知道在別人眼中的看法。為了收成 OKRs 完整的果實,feedback 是整個過程中不可或缺的一個部分。如果你自己都不知道自己做的如何,你怎麼可能會知道如何做得更好呢?
- 現代的組織,feedback 應該是隨時的 (ad hoc)、即時的 (real time) 與多方向的 (multidirectional)。如果我們可以即時評價 Uber 司機 (司機也可以評價乘客)、即時在 Yelp 評價餐廳,為什麼在職場不能支援即時且雙向的主管與員工的回饋呢?讓員工可以有珍貴的機會告訴他們的主管:你需要我怎麼做讓你更成功?接下來換我告訴你,我需要你給我什麼協助?
- 有高度成就認可 (high-recognition) 的企業,較低認可的企業,離職率降低 31%。這裡有幾個可以執行的方法:
Recognition approaches
|
Description
|
建立同儕間的認可文化
(Institute peer-to-peer recognition)
|
當員工的成就時常被同儕所認可,感謝的文化就會孕育而生
|
訂定清楚的標準
(Establish clear criteria)
|
認可員工的行爲與結果:完成特殊專案、達成企業目標、展現企業價值等 (取代每月之星的活動)
|
分享認可的故事
(Share recognition stories)
|
透過 email 或公司的 blogs 來補充成就背後的意義
|
讓認可更加頻繁與可及
(Make recognition frequent and attainable)
|
對於較小的成就也要給予認可
|
將認可與企業目標、策略,緊緊綁在一起
(Tie recognition to company goals and strategies)
|
任何可以支援組織優先目標的事情 (ex. 客服、創新、團隊合作、成本縮減等),都要及時給予認可
|
- Adobe 在改變績效評核前後所做的調整
年度績效管理
|
持續績效管理
| |
設定優先順序
|
在年初的時候設定優先順序 (priorities),設定完後就不會再重新審視
|
優先順序 (priorities) 設定完成後,主管會定期審視與調整
|
回饋流程
|
會經歷繁複的程序,包含員工遞交完成的結果與請求給予回饋,主管再撰寫審核意見
|
持續進行回饋的流程,並採取開放的對話方式,不拘泥於正式的文件
|
分紅決定程序
|
繁重地為每個員工評分與排名,最後再決定分紅比例
|
沒有正式的評分或排名,主管根據員工所完成的事項是否與企業整體目標是否一致來決定
|
績效評核會議
|
年底的時候才會進行績效評核,在過程中,員工也不知道自己做的是否有符合企業的目標與價值
|
每季會與員工進行討論,持續地給予回饋是一種常態。整個年度都會進行持續地討論與回饋,確保員工努力的方向是否與企業的目標一致
|
HR 的角色
|
管理整個績效評核的流程與紙本作業
|
訓練員工與主管能進行建設性的對話
|
- 離職 (turnover) 對於企業來說,成本是很高的。最好的離職是內部調職 (internal turnover),讓你的人才能夠在企業裡繼續發展他們的職涯,而非到其他地方發展。
- 在追求卓越的過程,企業所有成員在每天都要進行自我改進。領導者要變成更好的溝通者 (communicators) 與激勵者 (motivators),貢獻者 (contributor) 需要成長,更加守紀律 (disciplined)、成為謹慎的思考者 (rigorous thinkers)。當灌輸有意義的對話與回饋後,再加上有結構化的目標設定,會讓人們在有限的資源下,努力突破極限。
- 如果目標不明確,猶如棒球場上的外野飛球,到底是中外野手、還是右外野手要去接,若溝通不良,就會變成兩個外野手都覺得對方要去接而導致掉球,或是兩個外野手都要去接導致碰撞受傷。以書中的 Zume Pizza 為例,該企業的兩名外野手分別為行銷部門與產品部門,兩個部門都負責 Zume 的營收目標,雙方對於目標都感到疑惑,不知道何時、誰該去接球。此時,CEO 看出問題後,就把目標往下細分,行銷部門負責尋找新的營收,產品部門負責持續的營收。
- Better conversation 應當:
- OKRs 可以讓領導者清楚地表達最重要的事情 (priorities) 與洞見 (insights);CFRs 則是確保最重要的事情 (priorities) 與洞見 (insights) 有傳達給員工。但是目標在真空的環境是無法達成的,猶如聲波需要媒介 (i.e. 固體、液體、空氣) 才能傳遞。對於OKRs 與 CFRs 來說,組織文化就是傳遞的媒介 (medium),組織文化會活生生的表現其最珍視的價值觀與信仰。OKR 給予我們清楚的目標、CFR 提供我們達成目標的旅途中所需的能量。
- 健康的組織文化與有結構的目標設定 (structural goal setting) 是互相依賴的,兩者是追求卓越的天生夥伴。
- 好的組織文化在於兩個元素
Elements
|
Description
|
Catalysts (催化劑)
|
包含支援工作的相關行為 (與 OKR 的精神相符):
|
Nourishers
(養分提供器)
|
包含人際間支援的行為 (與 CFR 相同):
|
- 當 OKR 建立起目標的肌肉,CFR 則是讓筋骨 (sinews) 更將有彈性且反應敏捷;脈搏偵測器 (i.e. feeback),則是用來衡量組織的即時健康狀況,包含身體與靈魂、工作與文化。
- 在過去,員工是根據命令來決定做事情 (do the next thing right),企業文化不是那麼重要;在現代,我們會要求員工做對的事情 (do the next right thing)。一本規章手冊 (rulebook) 可以告訴你哪些事情可以做、哪些事情不能做;但是,現在我需要文化來告訴我我該做什麼 (what I should do)。
- 若你要從 Good 變成 Great,首先,你必須先讓對的人上車,讓不適合的人下車,並且讓對的人在對的位置;接下來,你才開始轉動方向盤,並踩油門。
- OKRs 用於規劃人們該做什麼,追蹤實際執行進度與計畫間的差異,協調個人與團隊間的事情優先順序與里程碑。OKRs也常被使用於協助團隊成員專注於最重要的目標,避免被緊急但是較不重要的事情所分心。執行成效通常會用燈號來評分,0.0 ~ 0.3 是紅燈、0.4 ~ 0.6 是黃燈、0.7 ~ 1.0 是綠燈。
- 寫出好的 OKRs 不容易,以下列出幾個規則:
OKRs
|
Description
|
Objectives
|
|
Key Results
|
|
- Committed vs Aspirational OKRs
Two variants
|
Description
|
Committed OKRs
|
|
Aspirational OKRs
|
|
- 典型的 OKR 撰寫錯誤與陷阱
Traps
|
Description
|
Trap #1 : 把 committed OKRs 與 aspirational OKRs 搞混
|
|
Trap #2 : 一如往常的 OKRs (business-as-usual OKRs)
|
|
Trap #3: 膽小的 Aspirational OKRs
|
|
Trap #4:威嚇 (Sandbagging)
|
|
Trap #5:低價值的目標 (aka 沒人在意的 OKR)
|
|
Trap #6:缺乏足夠的
KRs 來完成 Os
|
|
Labels:
Reading
Subscribe to:
Posts (Atom)