Total Pageviews

2017/10/05

How to check file's media type?

Problem
If I have a file upload function in my web application, this function need to check the file which upload by user is image file or not. How to do it?

How-To
You can make good use of Apache Tika to fulfill this requirement.

Add dependency in your pom.xml
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>1.14</version>
            <scope>compile</scope>
        </dependency>




Sample code is as follow:
package albert.practice.file;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.tika.Tika;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class FileContentTypeUtils {

    private static List<String> imageMediaTypes = new ArrayList<>();

    private static void setImageMediaTypes() {
        // http://www.fileformat.info/info/mimetype/image/index.htm
        imageMediaTypes = Arrays.asList("image/cgm", "image/fits",
                "image/g3fax", "image/gif", "image/ief", "image/jp2",
                "image/jpeg", "image/jpm", "image/jpx", "image/naplps",
                "image/png", "image/prs.btif", "image/prs.pti", "image/t38",
                "image/tiff", "image/tiff-fx", "image/vnd.adobe.photoshop",
                "image/vnd.cns.inf2", "image/vnd.djvu", "image/vnd.dwg",
                "image/vnd.dxf", "image/vnd.fastbidsheet", "image/vnd.fpx",
                "image/vnd.fst", "image/vnd.fujixerox.edmics-mmr",
                "image/vnd.fujixerox.edmics-rlc",
                "image/vnd.globalgraphics.pgb", "image/vnd.microsoft.icon",
                "image/vnd.mix", "image/vnd.ms-modi", "image/vnd.net-fpx",
                "image/vnd.sealed.png", "image/vnd.sealedmedia.softseal.gif",
                "image/vnd.sealedmedia.softseal.jpg", "image/vnd.svf",
                "image/vnd.wap.wbmp", "image/vnd.xiff");
    }

    public static Boolean isImage(String sourceFile) throws IOException {
        setImageMediaTypes();
        Boolean isImage = Boolean.FALSE;
        File file = FileUtils.getFile(sourceFile);
        Tika tika = new Tika();
        try {
            String mediaType = tika.detect(file);
            isImage = imageMediaTypes.contains(mediaType);
        } catch (IOException e) {
            throw e;
        }
        return isImage;
    }

}



Test code is the following:
package albert.practice.file;

import java.io.IOException;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public class FileContentTypeUtilsTest extends FileContentTypeUtils {

    private String imageFile;
    private String pdfFile;

    @Before
    public void setup() {
        imageFile = "/Users/albert/Dropbox/picture/panda.png";
        pdfFile = "/Users/albert/Dropbox/test_測試.pdf";
    }

    @Test
    public void testImageFile() throws IOException {
        Assert.assertTrue(isImage(imageFile));
    }

    @Test
    public void testPdfFile() throws IOException {
        Assert.assertFalse(isImage(pdfFile));
    }

}



Test results are shown bellow:






2017/10/04

How to Improve Code Coverage in Enumeration Type ?

Problem
Assume I have a enumeration as bellows:
package albert.practice.designPattern.factory;

public enum ShapeEnum {
    CIRCLE, RECTANGLE, SQUARE, TRIANGLE, OVAL;
}


After I run code coverage test, the coverage rate in enumeration is low:


How to improve its code coverage rate?




How-To
To get rid of this issue, you need to call the values() methods in this enumeration. You can check the testShapeEnum() in the test code:
package albert.practice.designPattern.factory;

import static org.junit.Assert.assertEquals;

import java.util.function.Supplier;

import org.junit.Test;

public class ShapeFactoryTest {

    @Test
    public void testDifferentShape() {
        Supplier<ShapeFactory> shapeFactory = ShapeFactory::new;
        shapeFactory.get().getShape(ShapeEnum.CIRCLE).draw();
        shapeFactory.get().getShape(ShapeEnum.RECTANGLE).draw();
        shapeFactory.get().getShape(ShapeEnum.OVAL).draw();
        shapeFactory.get().getShape(ShapeEnum.SQUARE).draw();
        shapeFactory.get().getShape(ShapeEnum.TRIANGLE).draw();
    }

    @Test
    // https://stackoverflow.com/questions/4512358/emma-coverage-on-enum-types/4548912#4548912
    public void testShapeEnum() {
        ShapeEnum[] shapeEnums = ShapeEnum.values();
        assertEquals(5, shapeEnums.length);
    }

}







2017/10/03

[閱讀筆記] 惡魔財經辭典 (The Devil’s Financial Dictionary) [6/6]


  1. 如果是做多,虧損不可能高過百分百(除非是用融資保證金);如果是做空(short sale),虧損可能無上限,因為資產價格可能不跌反漲,而且可以無限制上漲。做空的風險:賣掉不屬於自己的東西,要不就得買回來,要不就得進監獄
  2. 投資操作要以徹底分析為基礎,確保本金安全無虞,還要有令人滿意的報酬率。不符合這些要求的操作就是投機(speculation)
  3. 所謂投機(speculation),通常是什麼東西當紅就買什麼,然後希望找到願意接手的傻瓜
  4. 每一個買對股票的挑股者(stock picker),背後一定有一個賣錯股票的挑股者;一個經理人的收益,必定是另一個經理人的虧損
  5. Stop-loss order(停損單)是指當有價證券跌到某個價格以下時提交賣出指令,但在實務操作是,也可能反倒停掉收益
  6. Tactic (戰術)是短期的決策,目的是為了落實長期的 strategy (策略)。但是在華爾街,strategy 通常是委婉的說法,其實是指快速、頻繁交易的 tactic
  7. 根據技術分析,support (支撐)是指資產的價格接近過去低點。技術分析師認為,價格接近 support level (支撐水準)時,絕對不可能繼續下跌,至少短期不會。但是,有智慧的投資人都知道,不論是哪種金融資產,支撐價位只有一個:0
  8. 塑造未來期待的時候,投資人應該先確定自己對過去歷史的理解沒有失真或扭曲。雖說史書是由勝利者寫的,但歷史是由勝利者與失敗者共同製造的
  9. Tax shelter (避稅)是一種複雜的投資,這種投資可能保護投資者的收入不受高額稅負危害,但卻必然會暴露於高額佣金之下
  10. 股票和其他有價證券的未來價格,是由標的的資產產生的現金流決定,而不是由證券本身的過去價格決定的。這就好像,一個球隊未來的比賽紀錄是由隊員的表現決定的,而不是由他們過去的得分決定的
  11. 在華爾街,有這樣一條很實用的通則:行話越是難懂,他描述的東西就越不可能賺錢
  12. Trailer (佣金) 是付給經紀人的一筆年費,因為他賣了共同基金或其他投資商品給你。你買一次基金,你的經紀人就會拿到 trailer ,通常是 0.25% 到 1%,只要你持有這隻基金就要付這筆錢,就算你沒有獲得任何關於這隻基金的任何「建議」
  13. 市場價格持續不斷波動中,很多證券商會鼓勵客戶去找出趨勢,並根據趨勢來進行交易。但趨勢(trend)很難持久,試圖從中獲利的業餘投資人也很少能持久
  14. 承銷(underwrite)是指投資銀行承擔股票和債券的銷售工作,他們先向發行銀行買進股票或債券,然後再立即轉賣給投資大眾,該銀行通常會收取高達收益的 7%,以補償自己持有那幾個小時所承擔的風險
  15. 宇宙(universe)常用來比喻一大堆投資可能標的或組合,分析師或投資經理人可以經理人可以從中隨意挑選組合。這個宏偉的字眼掩蓋了一個事實:對於無數的專業投資人來說,universe 包含的是一個極為狹隘的參考框架,以及極為有限的購買選擇
  16. 價格(price)是你所支付的,價值(value)是你得到的
  17. 神智清楚的買家在取得所有必要資訊後進行評估(根據該資產未來可能賺多少錢來評估),得出該項資產到底值多少錢,這就是所謂的「價值」。一支股票的價值取決於該公司產生現金的潛力,不會每季、每月、每日產生改變。股票價格在短短一天內就會改變成千上萬次,這只會造成股票交易者產生某些反應,卻完全不會影響該公司的生意
  18. 對一家公司未來盈餘的洞察力或信心,通常只能透過後照鏡來看
  19. Visibility 是 predictability 的同義字,但其實也是 self-illusion (自我欺騙)的同義字。從來沒有人能看到一點未來;未來一直都是 invisible
  20. 一直在賺錢時,持有人會說他們對波動性(volatility)感到自在,但一旦開始虧錢,就會說他們討厭波動性。該筆投資並沒有改變,改變的只是他們的觀感。金融市場波動最大的元素,就是投資人對波動的看法
  21. 追求投資效益率的過程中,損失的金錢比被人拿槍指著搶劫失去的金錢還多

2017/10/02

[閱讀筆記] Common Stocks and Uncommon Profits (2/4)

  1. 如果遇到全球性的太衰退,即便是優質的股票,從高點下跌 40 ~ 50 % 也是一件非常正常的事情
  2. 影響 common stocks 股價的五大力量 (但是這五大力量並非把股價拉到同一個方向,而是互相拉扯):
    1. 產業的 business cycle
    2. 利率的趨勢
    3. 政府對於整體投資的態度
    4. 通膨的長期趨勢 (這個力量可能是五個力量中,影響最大的)
    5. 是否有影響現有產業的新發明或新技術
  3. 股票賣出的三個理由
    1. 股票買進後,發現自己當初判斷錯誤 :承認錯誤並不可恥,你該好好審視為什麼此次判斷失準,要從中獲得教訓,避免下次買進時又犯了同樣的錯誤。別只做停利,卻不做停損
    2. 當初買進時,有符合上述的 15 個條件,但是經過時間更迭,此間公司不再符合:投資人應該時時檢視手上的投資組合,是否仍舊符合當初設定的條件
    3. 當此公司已失去投資的吸引力時:如公司的平均年度成長率日益下滑
  4. 不要因為恐懼  bear market 的到來,就賣光手中績優的股票。如果手中的股票是正確的績優股,下個 bull market 的出現,會將其推向更高的高點
  5. 當股價已經到高點的時候,是否應該賣出呢?這個問題牽涉到,你根本無法預測未來兩年的 EPS 是多少?你如何判斷現在就是高點?想要做精準的預測是不可能的!
  6. 若選擇到正確的股票,就不要賣出,持續持有它,股價過高不是個好理由
  7. 當企業沒有把盈餘發給股東時 (即現金股利),投資人不需太負面看待,你該審視的是,這些沒有被當作現金股利發放的金額跑去哪裡了?有些公司會保留現金來興建新的廠房、開闢新的產品線、改裝舊廠房使其運作更有效率等等;或者現金都跑去公司高層的口袋裡 (若是後者,投資人應該賣出股票)
  8. 投資人買進股票,是因為此間公司表現傑出,而非單單只是因為便宜。若管理階層運作起來無效率,其不會滿足前述的 15 點條件。好個管理階層,一定會好好運用其過剩的資金,而非圖利自己
  9. 購買股票不應過度追求高股利,公司應該要妥善應用剩餘資金,而非一直發放股利,反而現在未來的成長空間
  10. 企業經營者與農場的管理者很類似,它可以將幼小的牲畜帶到市場直接賣掉換取現金,或者是將牲畜養大以後再賣掉,獲取最大的利益
  11. 好公司的股利分配政策,應該要是穩定且持續發放,而非時常大起大落
  12. 在選擇績優股時,股利分配的多寡此條件,權重可以放到最低,此非選股的優先條件。過了五到十年後,你會發現,那些讓你賺錢的股票,可能不是那些在當時高殖利率的股票,反而是低殖利率的股票,因為低殖利率的公司,其管理階層將其剩餘金額拿來投資未來,而非只是發給股東而已
  13. 投資人不該做的五件事情
    1. 無論有多麼具有吸引力,不要買進IPO 或剛起步公司的股票:即便是老練的投資人,也很難判斷這樣的公司,其未來是否真的能夠獲得巨額利潤。而且往往這樣的新創公司,初期都是由幾個人所掌舵,其擁有極佳的研發天分,但是企業要成功,除了研發、還有製造、行銷、財務等等
    2. 並非所有的 OTC (over the counter) stocks 都是高風險的股票,別忽略其中也是有好股票的
    3. 不要因為一家公司的精美的年報,就買它的股票:這如同光看廣告就決定買某個商品,卻忽略其有可能廣告不實
    4. 不要因為本益比 (PE Ratio) 過高就賣出股票:好的公司會持續成長且其價值會快速增加
    5. 若目前的市場價格是吸引人的,就不要再那邊計較是否要低一塊錢或五毛錢買進:基本的原則是,如果此檔股票是正確的標的,目前的價位適合且有吸引力的,用現價買
  14. 投資人也不該做的另外五件事情
    1. 投資組合不要過度多樣化:人們常說雞蛋不要放在同個籃子裡,但是也不能放得太分散
    2. 不要在戰爭恐懼中懼怕買進股票:根據歷史經驗,每當有戰爭恐懼時,股市會劇烈崩盤,然後在恐懼減緩後,急速上升。但是沒人知道股價會跌多久、跌多低、何時會漲回來,你該做的是克服恐懼心理,並在戰爭恐懼期間,定期定額的買進好股票
    3. 投資人不需要過度在意最近52周的股價高點與低點:不要被不重要的資訊所影響,過去52週的高低點,無法告訴你這家公司的現在的價值與未來的潛力。這些數據只能當作輔助,不能當作你決定買賣的主要因素。要謹記,你無法用過去的數字來推估未來
    4. 考量時機與價格來買進真的成長股:績優股常因其吸引力與潛力導致其股價過高,與其買這些價格過高的股票,你反而該去買那些還股價還沒開始飛漲的潛力股
    5. 不要跟著群眾的腳步:你要有自己的想法,不是跟著大家一窩蜂買賣
  15. 在股市中,擁有一個好的 nervous sytem (憂慮系統) 比擁有一個好的腦袋還重要
  16. 莎士比亞的這段話,可以解釋成功的普通股投資的過程是:人生潮起潮落,若能把握機會乘風破浪,必能馬到成功 (There is a tide in the affairs of men which , taken at the flood , leads on to fortune)
  17. 保守/謹慎投資的第一個象限的四個面向 (生產、行銷、研發、財務):
    1. 低生產成本 (Low-Cost Production):生產成本比對手低,代表更快達到損益兩平,當景氣不好或是要打價格戰時,就具備成本優勢;生產成本低,也代表的你的毛利率會比對手好。
    2. 具備強大行銷能力的組織 (String Marketing Organization):行銷團隊要時時保持警戒,探索顧客不斷變動的需求與喜好,了解潛在客戶真的要什麼(有時候客戶自己都沒意識到自己需要這樣的產品或服務),並且用他的語言話告訴他,為什麼他需要這樣的產品、功能或服務
    3. 傑出的研發與技術能力 (Outstanding Research and Technical Effort):企業要想辦法生產出新的與更好的產品、提供比過去更好或成本更低的服務。好的企業會做好研發、行銷與生產部門之間的溝通,沒有行銷部門決定正確的方向,研發與生產出來的產品,也賣不出去,故這幾個部門間的合作非常重要。
    4. 財務能力 (Financial Skill):好的企業會精準算出製造出每個產品所需花費的成本,並更進一步透過技術創新或是提升員工技能來降低成本,讓獲利最大化

2017/10/01

[閱讀筆記] The Long Tail (2/2)


  1. 如果人們有無窮的選擇,並可以輕易找他們想要的,你會發現,市場對電影的需求會繼續延伸、觸及之前想都沒想過的利基商品。網路租片商 Netflix 改變了供應利基商品的經濟效應,也因此讓我們重新理解人們真正想管賞什麼影片
  2. 別被 80 / 20 法則牽著鼻子走,即使 80% 的營收是由 20% 的商品所創造,我們也沒有道理不要其他那 80% 的產品。在長尾市場,存貨成本很低,因此不管商品的銷量如何,你的存貨都應該盡量多樣化。世事難料,有了功能強大的搜尋引擎和推薦系統,排名在後面的 80% 的冷門商品,很有可能哪天就會擠進前 20%
  3. 推薦系統與篩選器對長尾市場非常重要,藉由鼓勵人們從暢銷商品世界(高進貨成本)進入利基商品世界(低進貨成本),聰明的零售商便有可能大幅改善零售業的經濟效應
  4. 人類的注意力比金錢更有擴展性。長尾的主要效應是將我們的品味轉向利基商品,但消費是否增加,則視我們對搜尋到的東西滿意度而定
  5. 口耳相傳的回饋循環會擴大消費者喜好,為口碑好的產品錦上添花,引來佳評如潮,讓劣評者越來越難翻身。在網絡理論下,這種正向回饋循環會創造贏家通吃的局面,換言之,它是絕佳的暢銷品製造機
  6. 無論是暢銷商品也好,利基商品也罷,銷售量都會隨著時間趨緩;暢銷商品的起步點可能會高些,但他們終究會走入長尾的末端
  7. 在資訊科學的世界裡,事情如何歸類是個棘手的難題,也稱為「本體論的難題」(ontology problem)。本體論在各學門意義各異,對圖書館員和電腦科學家而言,本體論是指安排事物的方式。杜威的十進位分類法是歸類圖書的一種方式;大英百科全書是編列資訊的一種方式;元素週期表則是排列物質的一種方式
  8. 在 The Lure of Choice論文中提到,選項較多時,消費者比較願意做選擇。消費者偏好放映聽較多的戲院,桌子較多的賭場;選擇越多,他們被迫接受不理想產品的風險也會降低
  9. 零售商店為什麼要把一堆小東西擺在收銀機旁邊,因為可及性 (availability) 與便利性可以創造出更多的銷售量。牛奶、啤酒、飲料這些產品,便利商店販售的價格遠比超市高,但便利商店販售的與其說是商品,倒不如說是可及性,讓你當下即可取得
  10. 電視的粗俗、下流中、愚蠢,並非因為觀眾粗俗、愚蠢。電視之所以是現在這副德行,純粹是因為人們對粗俗、下流、愚蠢事務的關注極其相似,但對精緻、美感、高尚等各類事務的興趣卻大不相同
  11. 建立成功的長尾事業的秘訣,可以歸納為兩個要件:
    1. 讓所有東西都很容易取得
    2. 幫客戶找到它
  12. 長尾整合者的九大成功原則
    1. 把存貨搬進來,或搬出去:Sears、Wal-Mart利用其現有的倉儲網,提供比店面更多樣的商品,因為其存貨集中化,比把產品分別放到數百家店面的貨架上,還有效率。Amazon 已擴展到虛擬存貨,如實體貨品放在某個夥伴的倉庫內,但在Amazon 網站上展示與銷售。Amazon 的庫存成本為0
    2. 讓客戶自己動手:同好生產創造了eBay, Wikipedia, MySpace等。這不是outsourcing,而是crowdsourcing (運用群眾資源)。使用者的時間與精力幾乎無窮盡。因此,只有同好生產才能將長尾延伸到最遠處。在自助服務下,做事的人就是最關心這件事,也是最瞭解自己的人
    3. 單一配銷方式不適用於所有人:有的人喜歡到商店購物;有的人喜歡在網路買東西;有的人喜歡先在網路研究,在到商店購買;有的喜歡先到商店瀏覽,然後再網路購買
    4. 單一商品不適合所有人:我們面臨的顧客,是一群口味各異的顧客
    5. 單一價格不適合所有人:只要製造與配銷的邊際成本接近零,那麼可變動訂價是順理成章的模式
    6. 分享資訊:若把購買模式的資訊轉化為客戶推薦,就可成為強力的行銷工具。有了評鑑或產品規格之類的深度產品資訊,某些原本可能阻礙購買行動的問題往往可得到解答。資訊越多越好,但前提是呈現方式應該要幫助顧客做選擇中,而不是讓人摸不著頭緒
    7. 兼得(and),而非擇一(or):稀少性思考的症狀之一,就是假設市場為零和。換言之,就是誤認凡事只有非此即彼的選擇。但在容量無限的市場,提供所有選項才是正確的策略
    8. 放心讓市場替你做事:網路市場可貴之處,在於擁有高效率的群眾集體智慧測量工具。由於資訊充分,網路的消費者很容易比較各種商品,並傳播有關自己好惡的訊息。請謹記;別事先預測,而是要根據測量結果做出反應
    9. 了解免費的威力:網路最普遍的一種商業模式,就是以免費服務吸引大批使用者,在說服其中部分人升級到必須付費訂閱的加值版,以獲得較高品質或功能。由於數位服務成本如此低廉,因此免費服務顧客花部了公司什麼成本,只要其中一小部分能轉換為付費顧客就划得來


2017/09/11

[DB2] The transaction log for the database is full.

Problem
When I execute the following SQL statement:
DELETE FROM test_table where id between 1 and 500000;


I get the error log: 
The transaction log for the database is full.


How-To
This error resulted from "All space in the transaction log is being used."

I need to modify the delete statement into 5 SQL statement, delete 100000 records in each statement instead of delete 500000 at one time.

The updated delete SQL statement are the following:
 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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
-- delete rownumber from 1 to 100000
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 1 AND 100000 
     );

-- delete rownumber from 100001 to 200000     
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 100001 AND 200000 
     );     

-- delete rownumber from 200001 to 300000     
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 200001 AND 300000 
     );          

-- delete rownumber from 300001 to 400000          
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 300001 AND 400000 
     );               

-- delete rownumber from 400001 to 500000           
DELETE
FROM test_table
WHERE id IN
    (
    SELECT id
     FROM
       (SELECT id,
               row_num() over(ORDER BY id) AS rownumber
        FROM test_table)
     WHERE rownumber BETWEEN 400001 AND 500000 
     );                    





2017/09/10

[webMethods] How to invoke a Flow Service from a Java Service and get its output values

Problem
假設我要呼叫另外一個 flow service,此 flow service 沒有 input parameter,會回傳一個 output parameter,parameter name 為 isAlive

若我要透過 Java code 呼叫此 flow service,且取得其 output value 的話,該怎麼撰寫?


How-To

若呼叫 flow service 的方式是 synchronous,以下為 code snippet:
1
2
3
4
5
6
7
8
    try {
        // Invokes any service published on the server with the given input arguments.
        IData iData = Service.doInvoke("test.work", "Ping_Server", IDataFactory.create());
        // Returns a String representation of the value at the specified key.
        String isAlive = IDataUtil.getString(iData.getCursor(), "isAlive");
    } catch (Exception e1) {
     e1.printStackTrace();
    }



若呼叫 flow service 的方式是 asynchronous,以下為 code snippet:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    try {
        // Invokes any service published on the server as a thread
        ServiceThread serviceThread = Service.doThreadInvoke("test.work", "Ping_Server", session, IDataFactory.create());
        // Returns the pipeline from the service running in this service thread.
        IData iData = serviceThread.getIData();
        // Returns a String representation of the value at the specified key.
        String isAlive = IDataUtil.getString(iData.getCursor(), "isAlive");
        loggerAsync(session, " is Alive = " + isAlive);
    } catch (Exception e) {
     e.printStackTrace();
    }

2017/09/09

如何查詢董監事酬勞

在買賣股票前,要看一下董監事酬勞分配比例是否過高,買到的股價是否合理,避免過度稀釋股東權益的公司。

根據現行制度,公司賺錢後,盈餘會先分給公司的董監事們與員工,意味著假設你買的這檔股票的盈餘是五元,若分配其中的一元給董監事與員工,最後分配給你的只剩下四元。

所以,需查明類似產業的公司董監酬勞與員工分紅的比例過高,影響了股東們配股的權益,同時,投資前要計算所能得到的股利,看看是否划算,再決定是否投資

你可以到公開資訊觀測站來查詢董監事酬勞 http://mops.twse.com.tw/mops/web/t119sb04,選擇條件後,按下查詢按鈕


你就可以得到相關資訊















2017/09/08

[webMethods] How to invoke a Flow Service from a Java Service

Problem
如何在 Java Service 中,呼叫一個 Flow Service?

How-To
按照不同的情境 (synchronous 或 asynchronous),與有參數或無參數,需呼叫不同的 API,JavaDoc 如下:
JavaDoc for asynchronous


JavaDoc for synchronous


Examples:
1. Asynchronous and DO NOT have input parameter
    Session session = Service.getSession(); 
    Service.doThreadInvoke("test.work", "Test_Flow", session, IDataFactory.create());


2. Asynchronous and HAVE input parameter (s)
    Session session = Service.getSession(); 
    
    IData input = IDataFactory.create();
        
    IDataCursor inputCursor = input.getCursor();
    IDataUtil.put(inputCursor, "input", " test test ");
    inputCursor.destroy();
    
    Service.doThreadInvoke("test.work", "Test_Flow", session, input);


3. Synchronous and DO NOT have input parameter
    Service.doInvoke("test.work", "Test_Flow", IDataFactory.create());


4. Synchronous and HAVE input parameter (s)
    IData input = IDataFactory.create();
        
    IDataCursor inputCursor = input.getCursor();
    IDataUtil.put(inputCursor, "input", " test test ");
    inputCursor.destroy();
    
    Service.doInvoke("test.work", "Test_Flow", input);