Quantcast
Channel: 簡睿隨筆
Viewing all 897 articles
Browse latest View live

最簡單的啟動/關閉Windows Updates的工具;Windows 10也適用

$
0
0

你是否覺得Windows系統頻繁的更新很惱人,也很浪費時間,或只想在某個時間才要一口氣更新,或者想找到更簡單的啟用/關閉更新的設定?請試試最簡單的Windows updates設定程式:
Win Updates Disabler

Win Updates Disabler除了能啟動/關閉Windows Updates外,也能控制Windows Defender, Security Center與 Windows Firewall。

操作方式看畫面就懂了,超級簡單。適用的Windows版本: Windows XP、Vista、Windows 7, 8, 8.1與 Windows 10 (32/64-位元)。

disabler

相關連結

##

您可能也會有興趣的類似文章


iReport最完整PDF中文字型解決步驟

$
0
0

使用iReport (JasperReports)產生PDF時,中文字型經常都有問題。幾經嘗試終於找到最完整的處理方法了,只要使用字型擴充(Font Extensions)所有中文問題皆迎刃而解!

1. 產生需要的TTF字型檔

iRreport只能使用TTF格式的字型檔,微軟正黑體是msjh.ttc,並非TTF格式,因此先用工具UniteTTC.exe由.ttc分離出.ttf。

unitettc.exe msjh.ttc

執行後會產生msjh001.TTF與msjh002.TTF。細明體則是mingliu.ttc,依上述步驟取出.ttf。

2. iReport安裝字型

功能表:【選項】→【Fonts】分頁→【Install Font】,選擇好檔案msjh001.TTF,PDF Encoding選Identity-H,Embed選項可選可不選。

install font

在指定TextField的Font name屬性時,在分隔線上方必須出現上一步驟加入的字型才表示字型安裝成功。報表設計時Font name要使用自行安裝的字型檔才對。

select font

TextField屬性最下方的Pdf相關設定保持預設值即可,不用額外設定。

font settings

為設定方便,文字的屬性盡量使用Style,而不用一個欄位一個欄位去指定字型。先建好一個Style,再把欄位的Style設成需要的樣式即可。

style

use style

接著匯出自行安裝的字型檔為字型擴充,例如下圖將微軟正黑體匯出為 <iReport安裝目錄>/ireport/modules/ext/font-msjh.jar。匯出的字型需要再拷貝到AP Server的lib資料夾,在網頁產生PDF時使用。

export

相關連結

##

您可能也會有興趣的類似文章

文革50周年的閱讀紀錄

$
0
0

【520就職演說全文】蔡英文:帶領台灣一起完成新時代

$
0
0

來源:【520就職演說全文】蔡英文:帶領台灣一起完成新時代 | 即時新聞 | 20160520 | 蘋果日報

各位友邦的元首與貴賓、各國駐台使節及代表、現場的好朋友,全體國人同胞,大家好

感謝與承擔

就在剛剛,我和陳建仁已經在總統府裡面,正式宣誓就任中華民國第十四任總統與副總統。我們要感謝這塊土地對我們的栽培,感謝人民對我們的信任,以及,最重要的,感謝這個國家的民主機制,讓我們透過和平的選舉過程,實現第三次政黨輪替,並且克服種種不確定因素,順利渡過長達四個月的交接期,完成政權和平移轉。

台灣,再一次用行動告訴世界,作為一群民主人與自由人,我們有堅定的信念,去捍衛民主自由的生活方式。這段旅程,我們每一個人都參與其中。親愛的台灣人民,我們做到了。

20160520

我要告訴大家,對於一月十六日的選舉結果,我從來沒有其他的解讀方式。人民選擇了新總統、新政府,所期待的就是四個字:解決問題。此時此刻,台灣的處境很困難,迫切需要執政者義無反顧的承擔。這一點,我不會忘記。

我也要告訴大家,眼前的種種難關,需要我們誠實面對,需要我們共同承擔。所以,這個演說是一個邀請,我要邀請全體國人同胞一起來,扛起這個國家的未來。

國家不會因為領導人而偉大;全體國民的共同奮鬥,才讓這個國家偉大。總統該團結的不只是支持者,總統該團結的是整個國家。團結是為了改變,這是我對這個國家最深切的期待。在這裡,我要誠懇地呼籲,請給這個國家一個機會,讓我們拋下成見,拋下過去的對立,我們一起來完成新時代交給我們的使命。

在我們共同奮鬥的過程中,身為總統,我要向全國人民宣示,未來我和新政府,將領導這個國家的改革,展現決心,絕不退縮。

為年輕人打造一個更好的國家

未來的路並不好走,台灣需要一個正面迎向一切挑戰的新政府,我的責任就是領導這個新政府。

我們的年金制度,如果不改,就會破產。 我們僵化的教育制度,已經逐漸與社會脈動脫節。 我們的能源與資源十分有限,我們的經濟缺乏動能,舊的代工模式已經面臨瓶頸,整個國家極需要新的經濟發展模式。 我們的人口結構急速老化,長照體系卻尚未健全。 我們的人口出生率持續低落,完善的托育制度卻始終遙遙無期。 我們環境汙染問題仍然嚴重。 我們國家的財政並不樂觀。 我們的司法已經失去人民的信任。 我們的食品安全問題,困擾著所有家庭。 我們的貧富差距越來越嚴重。 我們的社會安全網還是有很多破洞。 最重要的,我要特別強調,我們的年輕人處於低薪的處境,他們的人生,動彈不得,對於未來,充滿無奈與茫然。

年輕人的未來是政府的責任。如果不友善的結構沒有改變,再多個人菁英的出現,都不足以讓整體年輕人的處境變好。我期許自己,在未來的任期之內,要一步一步,從根本的結構來解決這個國家的問題。

這就是我想為台灣的年輕人做的事。雖然我沒有辦法立刻幫所有的年輕人加薪,但是我願意承諾,新政府會立刻展開行動。請給我們一點時間,也請跟我們一起走上改革的這一條路。

改變年輕人的處境,就是改變國家的處境。一個國家的年輕人沒有未來,這個國家必定沒有未來。幫助年輕人突破困境,實現世代正義,把一個更好的國家交到下一代手上,就是新政府重大的責任。

第一、 經濟結構的轉型

要打造一個更好的國家,未來,新政府要做到以下幾件事情。

首先,就是讓台灣的經濟結構轉型。這是新政府所必須承擔的最艱鉅使命。我們不要妄自菲薄,更不要失去信心。台灣有很多別的國家沒有的優勢,我們有海洋經濟的活力和靭性,高素質的人力資源、務實可靠的工程師文化、完整的產業鏈、敏捷靈活的中小企業,以及,永不屈服的創業精神。

我們要讓台灣經濟脫胎換骨,就必須從現在起就下定決心,勇敢地走出另外一條路。這一條路,就是打造台灣經濟發展的新模式。

新政府將打造一個以創新、就業、分配為核心價值,追求永續發展的新經濟模式。改革的第一步,就是強化經濟的活力與自主性,加強和全球及區域的連結,積極參與多邊及雙邊經濟合作及自由貿易談判,包括TPP、RCEP等,並且,推動新南向政策,提升對外經濟的格局及多元性,告別以往過於依賴單一市場的現象。

除此之外,新政府相信,唯有激發新的成長動能,我們才能突破當前經濟的停滯不前。我們會以出口和內需作為雙引擎,讓企業生產和人民生活互為表裡,讓對外貿易和在地經濟緊密連結。

我們會優先推動五大創新研發計畫,藉著這些產業來重新塑造台灣的全球競爭力。我們也要積極提升勞動生產力,保障勞工權益,讓薪資和經濟成長能同步提升。

這是台灣經濟發展的關鍵時刻。我們有決心,也有溝通能力。我們已經有系統性的規劃,未來,會以跨部會聯手的模式,把整個國家的力量集結起來,一起來催生這個新模式。

在經濟發展的同時,我們不要忘記對環境的責任。經濟發展的新模式會和國土規劃、區域發展及環境永續,相互結合。產業的佈局和國土的利用,應該拋棄零碎的規畫,和短視近利的眼光。我們必須追求區域的均衡發展,這需要中央來規畫、整合,也需要地方政府充分發揮區域聯合治理的精神。

我們也不能再像過去,無止盡地揮霍自然資源及國民健康。所以,對各種汙染的控制,我們會嚴格把關,更要讓台灣走向循環經濟的時代,把廢棄物轉換為再生資源。對於能源的選擇,我們會以永續的觀念去逐步調整。新政府會嚴肅看待氣候變遷、國土保育、災害防治的相關議題,因為,我們只有一個地球,我們也只有一個台灣。

第二、 強化社會安全網

新政府必須要承擔的第二件事情,就是強化台灣的社會安全網。這些年,幾件關於兒少安全及隨機殺人的事件,都讓整個社會震驚。不過,一個政府不能永遠在震驚,它必須要有同理心。沒有人可以替受害者家屬承受傷痛,但是,一個政府,尤其是第一線處理問題的人,必須要讓受害者以及家屬覺得,不幸事件發生的時候,政府是站在他們這一邊。

除了同理心之外,政府更應該要提出解決的方法。全力防止悲劇一再發生,從治安、教育、心理健康、社會工作等各個面向,積極把破洞補起來。尤其是治安與反毒的工作,這些事情,新政府會用最嚴肅的態度和行動來面對。

在年金的改革方面,這是攸關台灣生存發展的關鍵改革,我們不應該遲疑,也不可以躁進。由陳建仁副總統擔任召集人的年金改革委員會,已經緊鑼密鼓在籌備之中。過去的政府在這個議題上,曾經有過一些努力。但是,缺乏社會的參與。新政府的做法,是發動一個集體協商,因為年金改革必須是一個透過協商來團結所有人的過程。

這就是為什麼,我們要召開年金改革國是會議,由不同階層、不同職業代表,在社會團結的基礎上,共同協商。一年之內,我們會提出可行的改革方案。無論是勞工還是公務員,每一個國民的退休生活都應該得到公平的保障。

另外,在長期照顧的議題上,我們將會把優質、平價、普及的長期照顧系統建立起來。和年金改革一樣,長照體系也是一個社會總動員的過程。新政府的做法是由政府主導和規劃,鼓勵民間發揮社區主義的精神,透過社會集體互助的力量,來建立一套妥善而完整的體系。每一個老年人都可以在自己熟悉的社區,安心享受老年生活,每一個家庭的照顧壓力將會減輕。照顧老人的工作不能完全讓它變成自由市場。我們會把責任扛起來,按部就班來規劃與執行,為超高齡社會的來臨,做好準備。

第三、 社會的公平與正義

新政府要承擔的第三件事情,就是社會的公平與正義。在這個議題上,新政府會持續和公民社會一起合作,讓台灣的政策更符合多元、平等、開放、透明、人權的價值,讓台灣的民主機制更加深化與進化。

新的民主制度要能夠上路,我們必須先找出面對過去的共同方法。未來,我會在總統府成立真相與和解委員會,用最誠懇與謹慎的態度,來處理過去的歷史。追求轉型正義的目標是在追求社會的真正和解,讓所有台灣人都記取那個時代的錯誤。

我們將從真相的調查與整理出發,預計在三年之內,完成台灣自己的轉型正義調查報告書。我們將會依據調查報告所揭示的真相,來進行後續的轉型正義工作。挖掘真相、彌平傷痕、釐清責任。從此以後,過去的歷史不再是台灣分裂的原因,而是台灣一起往前走的動力。

同樣在公平正義的議題上,我會秉持相同的原則,來面對原住民族的議題。今天的就職典禮,原住民族的小朋友在唱國歌之前,先唱了他們部落傳統的古調。這象徵了,我們不敢忘記,這個島上先來後到的順序。

新政府會用道歉的態度,來面對原住民族相關議題,重建原民史觀,逐步推動自治,復育語言文化,提升生活照顧,這就是我要領導新政府推動的改變。

接下來,新政府也會積極推動司法改革。這是現階段台灣人民最關心的議題。司法無法親近人民、不被人民信任、司法無法有效打擊犯罪,以及,司法失去作為正義最後一道防線的功能,是人民普遍的感受。

為了展現新政府的決心,我們會在今年十月召開司法國是會議,透過人民實際的參與,讓社會力進來,一起推動司法改革。司法必須回應人民的需求,不再只是法律人的司法,而是全民的司法。司法改革也不只是司法人的家務事,而是全民參與的改革。這就是我對司法改革的期待。

第四、區域的和平穩定發展及兩岸關係

新政府要承擔的第四件事情,是區域的和平穩定與發展,以及妥善處理兩岸關係。過去三十年,無論是對亞洲或是全球,都是變動最劇烈的時期;而全球及區域的經濟穩定和集體安全,也是各國政府越來越關切的課題。

台灣在區域發展當中,一直是不可或缺的關鍵角色。但是近年來,區域的情勢快速變動,如果台灣不善用自己的實力和籌碼,積極參與區域事務,不但將會變得無足輕重,甚至可能被邊緣化,喪失對於未來的自主權。

我們有危機,但也有轉機。台灣現階段的經濟發展,和區域中許多國家高度關聯和互補。如果將打造經濟發展新模式的努力,透過和亞洲、乃至亞太區域的國家合作,共同形塑未來的發展策略,不但可以為區域的經濟創新、結構調整和永續發展,做出積極的貢獻,更可以和區域內的成員,建立緊密的「經濟共同體」意識。

我們要和其他國家共享資源、人才與市場,擴大經濟規模,讓資源有效利用。「新南向政策」就是基於這樣的精神。我們會在科技、文化與經貿等各層面,和區域成員廣泛交流合作,尤其是增進與東協、印度的多元關係。為此,我們也願意和對岸,就共同參與區域發展的相關議題,坦誠交換意見,尋求各種合作與協力的可能性。

在積極發展經濟的同時,亞太地區的安全情勢也變得越來越複雜,而兩岸關係,也成為建構區域和平與集體安全的重要一環。這個建構的進程,台灣會做一個「和平的堅定維護者」,積極參與,絕不缺席;我們也將致力維持兩岸關係的和平穩定;我們更會努力促成內部和解,強化民主機制,凝聚共識,形成一致對外的立場。

對話和溝通,是我們達成目標最重要的關鍵。台灣也要成為一個「和平的積極溝通者」,我們將和相關的各方,建立常態、緊密的溝通機制,隨時交換意見,防止誤判,建立互信,有效解決爭議。我們將謹守和平原則、利益共享原則,來處理相關的爭議。

我依照中華民國憲法當選總統,我有責任捍衛中華民國的主權和領土;對於東海及南海問題,我們主張應擱置爭議,共同開發。

兩岸之間的對話與溝通,我們也將努力維持現有的機制。1992年兩岸兩會秉持相互諒解、求同存異的政治思維,進行溝通協商,達成若干的共同認知與諒解,我尊重這個歷史事實。92年之後,20多年來雙方交流、協商所累積形成的現狀與成果,兩岸都應該共同珍惜與維護,並在這個既有的事實與政治基礎上,持續推動兩岸關係和平穩定發展;新政府會依據中華民國憲法、兩岸人民關係條例及其他相關法律,處理兩岸事務。兩岸的兩個執政黨應該要放下歷史包袱,展開良性對話,造福兩岸人民。

我所講的既有政治基礎,包含幾個關鍵元素,第一,1992年兩岸兩會會談的歷史事實與求同存異的共同認知,這是歷史事實;第二,中華民國現行憲政體制;第三,兩岸過去20多年來協商和交流互動的成果;第四,台灣民主原則及普遍民意。

第五、 外交與全球性議題

新政府要承擔的第五件事情,是善盡地球公民的責任,在外交與全球性的議題上做出貢獻。讓台灣走向世界,也要讓世界走進台灣。

現場有許多來自各國的元首與使節團,我要特別謝謝他們,長久以來一直幫助台灣,讓我們有機會參與國際社會。未來,我們會持續透過官方互動、企業投資與民間合作各種方式,分享台灣發展的經驗,與友邦建立永續的夥伴關係。

台灣是全球公民社會的模範生,民主化以來,我們始終堅持和平、自由、民主及人權的普世價值。我們會秉持這個精神,加入全球議題的價值同盟。我們會繼續深化與包括美國、日本、歐洲在內的友好民主國家的關係,在共同的價值基礎上,推動全方位的合作。

我們會積極參與國際經貿合作及規則制定,堅定維護全球的經濟秩序,並且融入重要的區域經貿體系。我們也不會在防制全球暖化、氣候變遷的議題上缺席。我們將會在行政院設立專責的能源和減碳辦公室,並且根據COP21巴黎協議的規定,定期檢討溫室氣體的減量目標,與友好國家攜手,共同維護永續的地球。

同時,新政府會支持並參與,全球性新興議題的國際合作,包括人道救援、醫療援助、疾病的防治與研究、反恐合作,以及共同打擊跨國犯罪,讓台灣成為國際社會不可或缺的夥伴。

結語

1996年台灣第一次總統直選,到今天剛好20年。過去20年,在幾任政府以及公民社會的努力之下,我們成功渡過了許多新興民主國家必須面對的難關。在這個過程中,我們曾經有過許多感動人心的時刻和故事,不過,正如同世界上其他國家一樣,我們也曾經有過焦慮、不安、矛盾、與對立。

我們看到了社會的對立,進步與保守的對立,環境與開發的對立,以及,政治意識之間的對立。這些對立,曾經激發出選舉時的動員能量,不過也因為這些對立,我們的民主逐漸失去了解決問題的能力。

民主是一個進程,每一個時代的政治工作者,都要清楚認識他身上所肩負的責任。民主會前進,民主也有可能倒退。今天,我站在這裡,就是要告訴大家,倒退不會是我們的選項。新政府的責任就是把台灣的民主推向下一個階段:以前的民主是選舉的輸贏,現在的民主則是關於人民的幸福;以前的民主是兩個價值觀的對決,現在的民主則是不同價值觀的對話。

打造一個沒有被意識形態綁架的「團結的民主」,打造一個可以回應社會與經濟問題的「有效率的民主」,打造一個能夠實質照料人民的「務實的民主」,這就是新時代的意義。

只要我們相信,新時代就會來臨。只要這個國家的主人,有堅定的信念,新時代一定會在我們這一代人的手上誕生。

各位親愛的台灣人民,演講要結束了,改革要開始了。從這一刻起,這個國家的擔子交在新政府身上。我會讓大家看見這個國家的改變。

歷史會記得我們這個勇敢的世代,這個國家的繁榮、尊嚴、團結、自信和公義,都有我們努力的痕跡。歷史會記得我們的勇敢,我們在2016年一起把國家帶向新的方向。這塊土地上的每一個人,都因為參與台灣的改變,而感到驕傲。

剛才表演節目中的一首歌曲當中,有一句讓我很感動的歌詞: (台語)現在是彼一天,勇敢ㄟ台灣人。

各位國人同胞,兩千三百萬的台灣人民,等待已經結束,現在就是那一天。今天,明天,未來的每一天,我們都要做一個守護民主、守護自由、守護這個國家的台灣人。

謝謝大家。

您可能也會有興趣的類似文章

[方便工具 WinClose] 一個指令關閉多個視窗

$
0
0

Windows 7的工作列可以按〔Shift+Click〕將要一起關掉的視窗Group起來,再用右鍵關閉,Windows 10卻沒有這個功能了,但有時又有一次關閉同個程式多個視窗的需求,只好用AutoHotkey自力救濟來解決了。

基本邏輯就是用WinExists(視窗標題)來找到要關閉的視窗,再用WinClose關閉之。
setTitleMatchMode,2是將標題比對模式設定為含有子字串即可(其他設定值可參考SetTitleMatchMode)。

#NoEnv
#NoTrayIcon
SetTitleMatchMode,2

sTitle = %1%

while WinExist(sTitle)
  WinClose

return

使用方法

wc.exe 要關閉的視窗標題部份字串
rem 如:
wc notepad
wc 檔案總管

wc.exe (WinClose) 相關連結


##

您可能也會有興趣的類似文章

建立iReport多頁式靜態內容報表的方法

$
0
0

如何使用iReport/JasperReports來產生多頁式的靜態內容報表呢?試了多種方法後發現用多個Detail band的方法比較簡單。

建立多頁式報表的步驟

  1. 在Detail band上按右鍵,選【Add another detail band】
  2. 把建立好的Detail band高度都設一樣,例如全部設720
  3. 把內容放入各個Detail band裡。

小問題,Detail bank底的跳頁不太正常,或許可以搭配Page break元件來使用。

##

您可能也會有興趣的類似文章

[Windows 10] 預約關機批次檔

$
0
0

最近因為下載的關係,經常有機會需要預約關機。以前很方便的 at 指令在Windows裡已經消失了,難道只能用「排程」程式以圖形介面來操作嗎?試了一下,用批次檔來解決這個狀況。

關機指令

shutdown.exe是關機指令,我們使用到下列兩個選項:

  • /s: 將電腦關機 (Shutdown)
  • /f: 強制 (Force)

排程指令

Windows裡沒有at.exe,必須使用schtasks.exe,使用的選項如下:

  • /Create: 建立排程
  • /F: 強制建立 (Force)
  • /TN: 任務名稱 (TaskName)
  • /ST: 指定開始執行工作的時間 (Start Time),格式是 HH:MM
  • /SC: 指定排程執行頻率。效的排程類型: MINUTE、HOURLY、DAILY、WEEKLY、MONTHLY、ONCE、ONSTART、ONLOGON、ONIDLE、ONEVENT
  • /TR: 指定於排程時間執行的程式的路徑及檔案名稱 (Task Run)

預約關機批次檔

使用批次檔合併使用 schtasks.exe與shutdown.exe。若使用兩個參數表示在特定日期的特定時間關機,通常用於凌晨 0 時前預約隔天關機時間,只有一個參數則表示當天特定時間關機。

▼ 使用範例

pwroff.bat   [關機日期] [關機時間]

rem 範例:
pwroff 2016-06-26 03:00
pwroff 05:30

▼ 批次檔內容

@echo off
if "%1"=="" goto DEFAULT
if "%2"=="" goto SET_TIME
goto RUN_DAILY
:SET_TIME
  set _TIME1=%1
  schtasks /Create /F /TN "shutdown-once" /ST %_TIME1% /SC ONCE /TR "c:\windows\system32\shutdown.exe /s /f"
  goto END
:DEFAULT
  set _TIME1=04:30
  set _TIME2=04:40
  schtasks /Create /F /TN "shutdown-once" /ST %_TIME1% /SC ONCE /TR "c:\windows\system32\shutdown.exe /s /f"
  goto END
:RUN_DAILY
  set _DATE=%1
  set _TIME1=%2
  set _TIME2=07:00
  schtasks /Create /F /TN "shutdown-once" /SD %_DATE% /ED %_DATE% /ST %_TIME1% /ET %_TIME2% /SC DAILY /TR "c:\windows\system32\shutdown.exe /s /f"
:END

##

您可能也會有興趣的類似文章

安裝Apache Web Server 2.0為https服務的指令

$
0
0

今天試著把舊專案使用的Apache Web Server 2.0在我的Notebook上安裝起來,一開始很順利,把SSL憑證也放入並用命令列啟動,也能以https://連線:

apache -D SSL

但在把它安裝到服務後卻一直無法正確啟用… 最後查了以前的文件才發現安裝時漏了參數。以下是正確的安裝服務(使用https通訊協定)的指令:

apache -D SSL -k install

刪除已安裝Apache服務的指令:

apache -k uninstall

##

您可能也會有興趣的類似文章


使用Multi-Commander來簡化免空檔案的繁瑣操作

$
0
0

最近由各大論壇透過免空分享下載了一些影片,最常使用到的下載軟體是JDwonloader 2MegaDownloaderSmartGetuTorent等軟體,有時自動解壓縮失敗,就必須手動解壓縮,接著要把影片檔複製到媒體播放機的硬碟裡(透過網路拷貝),為了減少操作程序而做了一些自動化(或半自動化)的控制,在此分享給需要的網友們。

雙面板檔案工具Multi-Commander

我主要的操作工具是雙面板操作介面的擴充彈性十足的檔案管理工具:Multi Commander,解壓縮用的是7-Zip的命令列指令7z.exe,檔案拷貝使用的是FastCopy(參考:Multi Commander整合外部執行檔Fastcopy的方法)。

7-Zip解壓縮批次檔

解壓縮以Multi-Commander的批次檔擴充來撰寫,操作步驟如下:

  1. 功能表 【組態】→【使用者定義的命令】
  2. 按最左側的新增按鈕增加一個使用者命令,名稱輸入7-zip,命令類型選用【Batch Script(.BAT)】,表示等會輸入的命令內容格式是Windows的批次檔格式,內碼頁記得改為950才能正確顯示中文,最後在輸入框裡輸入批次檔內容。
  3. 批次檔內容如下。7z.exe的參數是:
  • x: 解壓縮(eXtract)
  • -o.: 輸出資料夾是來源面板的路徑
  • -r: 連子目錄一起解開
  • -y: 預設回覆 Yes
  • ${sourthpath}: 這是Multi-Commander稱為MultiTags的系統變數,能取出來源面板的路徑
d:\util\7z.exe x -o. -r -y ${sourthpath}

7-zip batch

使用者命令視窗還能把新建立的命令設定熱鍵和加到功能表裡。加功能表的步驟很簡單,選好命令再按中間的【–>】就可以了。 add to menu

7-Zip使用者命令的使用方法:點擊要操作的面板使之成為來源面板,再按下設定好的熱鍵或由功能表執行,Multi-Commander會開啟命令提示字元(DOS視窗),需要輸入密碼時再貼上剪貼簿裡的密碼後按Enter,面板裡的所有壓縮檔就會全部解在該目錄裡。

用FastCopy逐一搬移每個影片檔

來源面板裡的檔案可能有很多個,若全部加到一個FastCopy的Job裡,有可能因為網路問題等因素而拷貝失敗,因此我採用的是每個檔建立一個Job,因為動作比較複雜一些而無法使用批次檔來做,而以Multi-Script來寫,此命令命名為FastMove all。只要在新增命令後把命令類型選用Multi-Script就能以之來撰寫功能。

fastcopy

FastMove all的內容如下。首先以 GetSourceSelectedPaths()取得被選取了的檔名陣列,最後再用for-loop逐一執行FastCopy.exe。

@var $aFiles = GetSourceSelectedPaths();
@var $iCount = arrayCount($aFiles);
if ($iCount == 0)
{
  MessageBox("ERROR", "No file selected.", 1);
}
@var $sTargetPath = GetTargetPath();
@var $i;
@var $sFileName;
@var $sCmd;
$sFileNames = "";
@var $sOption = "/cmd=move /estimate /bufsize=128 /auto_close /speed=full ";  
// + $sFileNames + " /to=\"" + $sTargetPath + "\"";
for ($i=0; $i < $iCount; $i++)
{
  $sFileName = "\"" + $aFiles[$i] + "\"";
  $sCmd = "d:\\util\\fastcopy\\FastCopy.exe " + $sOption + $sFileName + " /to=\"" + $sTargetPath + "\"";
  //MessageBox("INFO", "cmd=" + $sCmd, 1);
  MC.Run CMD={$sCmd};
}
MC.Explorer.Deselect

FastMove all是針對選取檔案來操作,因此當來源面板裡同時存在壓縮檔、影片檔時,先按+號輸入 *.mp4 (來源面板裡的影片格式副檔名)後再按指派的FastMove all熱鍵或由功能表執行就能建立多個FastCopy move Job。

##

您可能也會有興趣的類似文章

跨平台的Markdown記事本:QOwnNotes,能與OwnCloud整合

$
0
0

QOwnNotes自稱是「支援Markdown格式的記事本」,開源且能在Windows、Linux、Max OS等作業環境裡運行,並且能和OwnCloud整合(QOwnNotes is the open source (GPL) plain-text file notepad with markdown support and todo list manager for GNU/Linux, Mac OS X and Windows, that (optionally) works together with the notes application of ownCloud.),它是用Qt環境開發的,執行速度快。

QOwnNotes

初步測試的印象是有些操作習慣「異於常人」。例如,它沒有開啟檔案的功能,而是要指定好文件資料夾,我們在資料夾裡的檔案清單裡操作(紅色1號位置),如此QOwnNotes就能幫這些檔案做索引,讓我們可以很快的搜尋到需要的檔案。

紅色3號是HTML預視區,能很平順的跟著Markdown文字捲動,但可惜無法顯示外部圖檔,作者似乎還在爭扎是否需要提供圖片預視功能。少了這個功能對寫Blog而言確實是不甚方便。

相關連結

##

您可能也會有興趣的類似文章

[Android] 手機的Markdown編輯器:MarkdownX

$
0
0

MarkdownX的作者Ryeeeeee因為在Android手機裡找不到合用的Markdown編輯器,因而自己寫了一個並提供給有需要的網友使用。

MarkdownX

MarkdownX的編輯器提供了常用的Markdown語法按鈕,讓使用者能迅速的撰寫,往左滑動就能看到HTML的預視結果,操作介面相當簡潔便利。

我們除了能把檔案存放在手機裡之外,MarkdownX也提供了Dropbox整合,能直接存取Dropbox上的檔案, 透過Dropbox就能隨時筆記存入Dropbox了。

相關連結

##

您可能也會有興趣的類似文章

點對點傳輸的同步軟體Syncthing:無限擴大個人的線上儲存空間

$
0
0

最近Dropbox的空間快要滿了,又不想把檔案放在Google Drive(覺得同步的速度很慢),最後試著使用開源的Syncthing,把家裡的QNAP NAS TS-219P和家裡、公司的個人電腦都裝上Syncthing,以達到檔案同步的目的。家裡的NAS空間大得很,終於能擺脫可用空間的限制了。

Syncthing的定位和Dropbox、Google Drive等的雲端儲存空間不同,是屬於同步軟體的一種,最相近的是BitTorrent Sync,Syncthing不透過雲端主機來交換檔案,而是以點對點的方法來同步。相對於雲端硬碟以「使用者」為中心來管理檔案,Syncthing是以「設備」為中心來同步檔案,在每個要執行同步的設備增加要同步的其他設備,就能達到同步的結果。

以下圖表來自Syncthing compared to Dropbox – Usefulvid,簡單地比較了Syncthing與Dropbox的差異:

compare

在QNAP NAS安裝Syncthing

首先我在預想為檔案交換中心的NAS上安裝Syncthing。Syncthing的App Center尚未收錄Syncthing,要安裝Syncthing可以由QNAP的論壇下載:[Syncthing] QPKG 1-0.12.22 … Sync and Cloud private – QNAP NAS Community Forum,目前直接下載的是0.12.22版,但安裝後可以自動升級為最新的0.13.10版。

安裝步驟很簡單,把下載的.zip檔解壓縮為.qpkg,再由App Center選擇手動安裝,選好syncthing_1-0.12.22.qpkg後按〔安裝〕就可以了。

Syncthing系統使用的通訊埠是22000,Web介面則是8090,安裝並啟動後就能用瀏覽器瀏覽 http://NAS的IP:8090/ 看看是否成功啟動。最後記得開啟路由器的8090和22000通訊埠,以方便在家外面連線。瀏覽介面樣式如下:

syncthing client main

▼ Syncthing可看到同步的進行狀態 同步中

Windows 安裝SyncTrayzor

Syncthing也有提供系統,可惜是命令行模式,建議可以安裝SyncTrayzor,透過它來啟動或中止Syncthing服務,並整合了Web介面來監看設備與資料同步狀態。

Syncthing可以指定多個資料夾來同步,不必像Dropbox一樣只能同步某個資料夾,我也測試了符號連結目錄,可惜沒有成功,似乎只能同步實體目錄。

▼ 別部設備要分享的資料夾必須經過認可才會進入雙方同步狀態。

add new folder

▼ 每個要存放在本地的同步資料夾可以指定存放位置,也能勾選要同步的設備。 add folder settings

▼ 新的設備要連線同步也要經過確認。每個設備有自己的識別碼,可以由Web介面右上角的操作→顯示識別碼取得。 電腦複製顯示出的64字元長的識別碼,移動設備則可拍二維條碼即可。
add device

相關連結

##

您可能也會有興趣的類似文章

簡睿版小小輸入法:安裝與快速入門

$
0
0

小小輸入法是個小巧、方便、自訂選項多的輸入法,Windows 10(含Metro style)、Linux、Android等都有對應版本可以使用。

我以2016/06/25釋出的2.4.0為基,再加上 ★泰瑞版小小輸入法的擴充而形成自己的版本,在此分享給需要網友們。因為本人使用倉頡輸入法,安裝環境以倉頡+注音為主,但仍保留了泰瑞版中的其他輸入法,如無蝦米、大易等。

簡睿版特點

  1. 所有使用者可自訂調整的設定檔皆存於 d:\yong.yong資料夾,日後新版本到期直接覆蓋而不會影響自訂設定。
  2. 倉頡碼增加快速輸入的字詞:
    • 速成:只要用「首碼 z 尾碼」就能列出符合的所有字詞
    • 兩個字的詞以「第一字的首碼 z 尾碼」+「第二字的首碼 z 尾碼」組出需要的詞,如「電腦」以「mubw」組成
    • 三個字和三個字以上的詞以「第一字的首碼」+「第二字的首碼」+…+「最末字的首碼、尾碼」組成,如「中華民國」以「ltrwm」組成
    • 部份詞彙直接用英文,如「roc」組成「中華民國」、「mouse」組成「滑鼠」
  3. 介面預設採用 RIME_暗堂_多行,可自行選用別的主題(設定資料夾:d:\yong.yong\skin)

skin1

skin2

安裝與執行

  1. 將下載檔解壓縮到資料夾 d:\yong (資料夾名稱自訂)
  2. 編輯 d:\yong.yong\yong.ini 修改設定
  3. 執行 d:\yong\yong.exe

常用按鍵

功能 按鍵 功能說明
輸入法切換 Ctrl+\ 切換到其他輸入法
中英文輸入切換 CTRL+Space
中打或英打切換 Shift 左右Shift皆可,省去按Ctrl+Space的機會
輸出繁體或簡體 Ctrl+Shift+S 拆碼後輸出繁體或簡體
半形全形切換 Shift+Space 按鍵輸出為半形或全形
中文、英文標點切換 Ctrl+. 標點符號輸出為全形或半形
重複上次輸出 Ctrl+Alt+G 再次輸出最後拆碼的字
反查字根 Ctrl+/ 將要反查的字複製到系統剪貼簿後按Ctrl+/
符號小鍵盤切換 Ctrl+Alt+K 在小鍵盤上按右鍵可換不同的符號表
選擇小鍵盤符號表 Ctrl+Shift+K 先選擇符號表再彈出小鍵盤
調整候選字順序 Ctrl+↑、Ctrl+↓ 向上或向下移選順序
新增自訂編碼 Ctrl+Insert 在中文輸入狀態下選取文字後按Ctrl+Insert再給碼值按Enter。新加的詞會寫到user.txt

例外設定

有少數軟體無法使用小小輸入法,但我們可以透過將之加入 d:\yong.yong\class.txt而避免這個問題。例如只要加上下列內容在class.txt裡,原本無法使用的ConEmu與LibreOffice就能正常做中文輸入了:

# LibreOffice
SALFRAME KEY
# ConEmu
VirtualConsoleClass KEY

增加字詞

要自行增加字詞可以修改下列兩個檔案之一,修改後重啟yong.exe即可(或在其工具列上按滑鼠中鍵):

  1. 倉頡碼表:d:\yong.yong\mb\cj_jerry.txt
  2. 自訂碼表:d:\yong.yong\user.txt

### 簡睿版小小輸入法下載

##

您可能也會有興趣的類似文章

Google試算表快速跳轉到特定工作表(分頁標籤)的方法

$
0
0

要在Google試算表上插入跳到特定工作表(分頁頁籤)的作業真是比Excel麻煩許多,Google試算表的超連結函數(=HYPERLINK(連結, 顯示文字))只能在瀏覽器新分頁開啟指定的連結,即使連結的是文件裡的另一個分頁也會開啟新分頁。因此要在工作表2跳到工作表1就只好透過腳本(Google試算表裡稱為指令碼)來達成了。

1. 撰寫指令碼

點擊試算表功能表【工具】→【指令碼編輯器…】輸入下列指令碼,最後存檔:

function gotoSheet1() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("工作表1");
  ss.setActiveSheet(sheet).setActiveSelection("A1");
}

function gotoSheet2() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("工作表2");
  ss.setActiveSheet(sheet).setActiveSelection("A1");
}

function gotoSheet3() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("工作表3");
  ss.setActiveSheet(sheet).setActiveSelection("A1");
}

function gotoSheet4() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("工作表4");
  ss.setActiveSheet(sheet).setActiveSelection("A1");
}

function gotoSheet5() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("工作表5");
  ss.setActiveSheet(sheet).setActiveSelection("A1");
}

script editor

2. 在要插入跳轉位置上插入繪圖

點擊功能表上的【插入】→【插入繪圖】(Drawing)。
01

3. 製作文字按鈕

在繪圖編輯區拖放文字框、輸入按鈕文字並選擇底色,最後按【儲存並關閉】。
02

4. 移動文字按鈕到需要的位置

在文字按鈕上按右鍵就會出現藍色小方格,可以用來拖放大小,左鍵按住不放則可變更位置。
03

5. 指派指令碼

在文字按鈕右上角的三角形圖示按一下會出現功能選單,點擊【指派指令碼…】。
04

6. 輸入函數名稱

在指派指令碼對話窗裡輸入 gotoSheet1,即步驟1撰寫的 5 個函數之一。
05

7. 使用指令碼授權

第一次指派指令碼需要獲得授權,先按【繼續】。
06

再按【允許】以取得使用授權。
07

到此我們已經在工作表上建立一個跳轉到另一個工作表的快捷按鈕了,點擊後便會切換到指定的工作表了。

##


您可能也會有興趣的類似文章

用軟體辨識USB插槽是USB 2.0或USB 3.0的方法

$
0
0

初聽「如何辨別插槽是USB 2.0或USB 3.0」似乎是很簡單的問題,若USB接頭是藍色就是USB 3.0,是白色則是USB 2.0,但藏身在桌機後方的接頭有時不是那麼方便看到,此時我們可以用USB Device Tree Viewer工具來代勞。

執行USB Device TreeViewer後,會列出所有的USB埠,其圖示上有 H 者是USB 1.1或USB 2.0(H是High Speed),而USB 3.0則是標識為 S (Super Speed)。

usbview

相關連結

##

您可能也會有興趣的類似文章


利用MultiCommander的自訂命令以簡化Mega Downloader與SmartGet的解壓縮處理

$
0
0

由免空下載檔案時最討厭的就是解壓縮密碼了,為了防止下載軟體解檔失敗,只好先把密碼記錄起來,但有時隔了幾天要解檔時,檔案和密碼又對不起來,只好回頭去找下載網頁… 這樣的狀況經常遇到,最後用了這個簡單的方法來解決:把密碼當做下載檔的存放資料夾的名稱就可以了!實際的步驟如下(適用Mega Downloader與SmartGet):

1. 把密碼當做資料夾名稱

在Mega Downloader加入連結對話窗裡,將密碼貼入【名稱:】欄位,下載時會自動在【路徑:】欄位指定時的路徑建立子目錄,我們用密碼當做子目錄名稱。
mega-downloader

SmartGet則是修改【儲存到:】欄位,把密碼當做子目錄加到後面。
SmartGet

2. 解壓縮時目錄名就是密碼

解檔需要密碼時直接複製子目錄名稱就可以了,不會再有找不到密碼的情形。

3. 用MultiCommander自動化解壓縮處理

雖然不會忘了密碼,但每次都要重覆執行複製目錄名、貼入密碼的流程還是很煩人的,因此我用MultiCommander寫了一個使用者自訂命令(multi-script)來自動化這些動作,只要由功能表點選或按鍵就能一次解開資料夾裡的所有壓縮檔:

@var $aFiles = GetSourceSelectedPaths();
@var $sTargetPath = GetTargetPath();
@var $iCount = arrayCount($aFiles);
//MessageBox("INFO", "count=" + $iCount, 0);
if ($iCount == 0)
{
  MessageBox("ERROR", "No file selected.", 1);
}

@var $i;
@var $sFileName;
@var $sCmd;
@var $sPasswd = "";
@var $sSourcePath = GetSourcePath();
@var $iPos = StrFind($sSourcePath, "\\mega\\", 3);
//MessageBox("INFO", "iPos=" + $iPos, 1);

// 如果是mega,則目錄名稱是密碼
if ($iPos > 0)
{
  $sPasswd = StrSub($sSourcePath, $iPos + 6, -1);
  // remove the last back-slash
  @var $iLen = StrLen($sPasswd)-1;
  //MessageBox("INFO", "len=" + $iLen, 1);
  $sPasswd = StrSub($sPasswd, 0, $iLen);
  SetClipboardText($sPasswd);
}

// Check SmartGet folder: SMG
$iPos = StrFind($sSourcePath, "\\SMG\\", 3);
if ($iPos > 0)
{
  $sPasswd = StrSub($sSourcePath, $iPos + 5, -1);
  // remove the last back-slash
  @var $iLen = StrLen($sPasswd)-1;
  //MessageBox("INFO", "len=" + $iLen, 1);
  $sPasswd = StrSub($sPasswd, 0, $iLen);
  SetClipboardText($sPasswd);
}

$sPasswd = AskText("Password is ", $sPasswd, 0);

for ($i=0; $i < $iCount; $i++)
{
  $sFileName = $aFiles[$i];
  $sCmd = "d:\\util\\7z.exe x -o" + $sSourcePath + " -r -y -p" + $sPasswd + " \"" + $sFileName + "\"";
  //MessageBox("INFO", "cmd=" + $sCmd, 0);
  MC.Run CMD={$sCmd} WAIT;
}
MC.Explorer.Deselect

建立自訂命令步驟:

  1. 由MultiCommander功能表 【組態】→【使用者定義的命令】裡新增,命名為「7-Zip-selected」。
  2. 勾選【存放 Script 在外部 Script 檔】,將腳本內容存在指定的檔名裡,以方便日後使用。
  3. 將上面的命令貼入後按儲存。
  4. 按右方的熱鍵指定一個快捷鍵或加入功能表選項。
  5. 在MultiCommander裡用右鍵點選要解壓縮的檔案後,執行7-zip-selected命令,此命令會自動取出資料夾當密碼,再彈出確認對話窗,此時可再修改密碼,按確定後就會叫用7-Zip解壓縮。
  6. 為了方便辨識下載資料夾裡是什麼檔案,我們可以在資料夾名前面或後面附加可辨識的名稱,解壓縮彈出【Password is 】時再把額外加入的名稱刪掉,以取得正確的密碼。

7-zip

##


您可能也會有興趣的類似文章

IntelliJ IDEA 2016.2.1 的JSP Code Complete有問題

$
0
0

最近把IntelliJ IDEA升級到2016.2.1後,在JSP裡的code complete就有問題,在物件變數後按 . 應該要出現能使用的多個methods,卻只出現一個,查了C:\Users\使用者.IntelliJIdea2016.2\system\log\idea.log後發現有Exception:

2016-08-15 22:04:56,351 [ 302048]  ERROR - on.CompletionProgressIndicator - com.intellij.psi.impl.source.jsp.JspJavaFileImpl cannot be cast to com.intellij.psi.jsp.JspFile 
java.lang.ClassCastException: com.intellij.psi.impl.source.jsp.JspJavaFileImpl cannot be cast to com.intellij.psi.jsp.JspFile
    at com.intellij.psi.impl.source.jsp.JspContextManagerImpl.processContextElements(JspContextManagerImpl.java:209)
    at com.intellij.psi.impl.source.jsp.JspJavaFileImpl.processDeclarations(JspJavaFileImpl.java:49)
    at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:68)
    at com.intellij.psi.scope.util.PsiScopesUtil.treeWalkUp(PsiScopesUtil.java:50)
    at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:226)
    at com.intellij.psi.scope.util.PsiScopesUtil.resolveAndWalk(PsiScopesUtil.java:157)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.a(PsiJavaCodeReferenceElementImpl.java:448)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.access$100(PsiJavaCodeReferenceElementImpl.java:55)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:350)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl$OurGenericsResolver.resolve(PsiJavaCodeReferenceElementImpl.java:342)
    at com.intellij.psi.impl.source.resolve.ResolveCache$4.compute(ResolveCache.java:191)
    at com.intellij.psi.impl.source.resolve.ResolveCache$4.compute(ResolveCache.java:188)
    at com.intellij.openapi.util.RecursionManager$2.doPreventingRecursion(RecursionManager.java:112)
    at com.intellij.psi.impl.source.resolve.ResolveCache.resolveWithCaching(ResolveCache.java:188)
    at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:752)
    at com.intellij.psi.impl.PsiImplUtil.multiResolveImpl(PsiImplUtil.java:741)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.multiResolve(PsiJavaCodeReferenceElementImpl.java:377)
    at com.intellij.psi.impl.source.PsiJavaCodeReferenceElementImpl.advancedResolve(PsiJavaCodeReferenceElementImpl.java:370)
    at com.intellij.psi.impl.source.PsiClassReferenceType.resolveGenerics(PsiClassReferenceType.java:145)
    at com.intellij.psi.util.PsiUtil.captureToplevelWildcards(PsiUtil.java:784)
    at com.intellij.psi.impl.PsiImplUtil.normalizeWildcardTypeByPosition(PsiImplUtil.java:384)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$TypeEvaluator.fun(PsiReferenceExpressionImpl.java:416)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl$TypeEvaluator.fun(PsiReferenceExpressionImpl.java:361)
    at com.intellij.psi.impl.source.resolve.JavaResolveCache.getType(JavaResolveCache.java:87)
    at com.intellij.psi.impl.source.tree.java.PsiReferenceExpressionImpl.getType(PsiReferenceExpressionImpl.java:428)
    at com.intellij.codeInsight.template.postfix.util.JavaPostfixTemplatesUtils.c(JavaPostfixTemplatesUtils.java:153)
    at com.intellij.openapi.util.Conditions$And.value(Conditions.java:179)
    at com.intellij.openapi.util.Conditions$And.value(Conditions.java:179)
    at com.intellij.util.containers.ContainerUtil.findAll(ContainerUtil.java:1029)
    at com.intellij.util.containers.ContainerUtil.filter(ContainerUtil.java:1008)
    at com.intellij.codeInsight.template.postfix.templates.PostfixTemplateExpressionSelectorBase.getExpressions(PostfixTemplateExpressionSelectorBase.java:60)
    at com.intellij.codeInsight.template.postfix.templates.PostfixTemplateExpressionSelectorBase.hasExpression(PostfixTemplateExpressionSelectorBase.java:50)
    at com.intellij.codeInsight.template.postfix.templates.PostfixTemplateWithExpressionSelector.isApplicable(PostfixTemplateWithExpressionSelector.java:54)
    at com.intellij.codeInsight.template.postfix.templates.PostfixLiveTemplate.a(PostfixLiveTemplate.java:266)
    at com.intellij.codeInsight.template.postfix.templates.PostfixLiveTemplate.getLookupElements(PostfixLiveTemplate.java:211)
    at com.intellij.codeInsight.template.CustomLiveTemplateBase.addCompletions(CustomLiveTemplateBase.java:53)
    at com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor.a(LiveTemplateCompletionContributor.java:153)
    at com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor.access$100(LiveTemplateCompletionContributor.java:50)
    at com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor$2.a(LiveTemplateCompletionContributor.java:93)
    at com.intellij.codeInsight.completion.CompletionResultSet.passResult(CompletionResultSet.java:69)
    at com.intellij.codeInsight.completion.JavaNoVariantsDelegator$ResultTracker.consume(JavaNoVariantsDelegator.java:206)
    at com.intellij.codeInsight.completion.JavaNoVariantsDelegator$1.consume(JavaNoVariantsDelegator.java:49)
    at com.intellij.codeInsight.completion.JavaNoVariantsDelegator$1.consume(JavaNoVariantsDelegator.java:46)
    at com.intellij.codeInsight.completion.CompletionResultSet.passResult(CompletionResultSet.java:69)
    at com.intellij.codeInsight.completion.impl.CompletionServiceImpl$CompletionResultSetImpl.addElement(CompletionServiceImpl.java:135)
    at com.intellij.codeInsight.completion.JavaCompletionContributor.a(JavaCompletionContributor.java:412)
    at com.intellij.codeInsight.completion.LegacyCompletionContributor.a(LegacyCompletionContributor.java:124)
    at com.intellij.codeInsight.completion.LegacyCompletionContributor.processReferences(LegacyCompletionContributor.java:107)
    at com.intellij.codeInsight.completion.JavaCompletionContributor.b(JavaCompletionContributor.java:366)
    at com.intellij.codeInsight.completion.JavaCompletionContributor.fillCompletionVariants(JavaCompletionContributor.java:234)
    at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:81)
    at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:132)
    at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:125)
    at com.intellij.codeInsight.completion.JavaNoVariantsDelegator.fillCompletionVariants(JavaNoVariantsDelegator.java:61)
    at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:81)
    at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:132)
    at com.intellij.codeInsight.completion.CompletionResultSet.runRemainingContributors(CompletionResultSet.java:125)
    at com.intellij.codeInsight.template.impl.LiveTemplateCompletionContributor$2.addCompletions(LiveTemplateCompletionContributor.java:90)
    at com.intellij.codeInsight.completion.CompletionProvider.addCompletionVariants(CompletionProvider.java:36)
    at com.intellij.codeInsight.completion.CompletionContributor.fillCompletionVariants(CompletionContributor.java:155)
    at com.intellij.codeInsight.completion.CompletionService.getVariantsFromContributors(CompletionService.java:81)
    at com.intellij.codeInsight.completion.CompletionService.performCompletion(CompletionService.java:110)
    at com.intellij.codeInsight.completion.CompletionProgressIndicator.a(CompletionProgressIndicator.java:776)
    at com.intellij.codeInsight.completion.CompletionProgressIndicator.access$500(CompletionProgressIndicator.java:90)
    at com.intellij.codeInsight.completion.CompletionProgressIndicator$1CalculateItems.run(CompletionProgressIndicator.java:758)
    at com.intellij.codeInsight.completion.AsyncCompletion.b(CompletionThreading.java:87)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:856)
    at com.intellij.codeInsight.completion.AsyncCompletion.a(CompletionThreading.java:84)
    at com.intellij.openapi.progress.impl.CoreProgressManager$3.run(CoreProgressManager.java:170)
    at com.intellij.openapi.progress.impl.CoreProgressManager.a(CoreProgressManager.java:494)
    at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:443)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:54)
    at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:155)
    at com.intellij.codeInsight.completion.AsyncCompletion.a(CompletionThreading.java:82)
    at com.intellij.openapi.application.impl.ApplicationImpl$2.run(ApplicationImpl.java:308)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
2016-08-15 22:04:56,351 [ 302048]  ERROR - on.CompletionProgressIndicator - IntelliJ IDEA 2016.2.1  Build #IU-162.1447.26 

最後重新安裝2016.2.2的EAP版就正常了。

##


您可能也會有興趣的類似文章

[IntelliJ IDEA] I18N多語系Resource Bundle的操作彙總

$
0
0

IntelliJ IDEA維護多語系properties檔案的操作很簡單,常用功能彙總如本文。

建立Resource bundle的步驟

  1. 【Project】→在business節點按右鍵 【New】→【Resource Bundle】
    new resource bundle

  2. 輸入Resource bundle的基本檔名,並選擇要產生的語系。
    add locale

    產生好的檔案會集合在Resource Bundle節點下。
    created properties

  3. 打開同一群Bundle的任何一個檔案,下方會出現 【Text / Resource Bundle】頁籤,點擊Resource Bundle就能在同一個畫面同時維護多個properties檔。
    edit property

  4. 按左上方的【+】或右鍵【New property】 就能加入新的property。
    new property

合併檔案而形成Bundle

如果I18N檔案的檔名格式不是標準的名稱,我們也到以用Combine to Resouce Bundle的方法將之組成Bundle。

先用多選操作把properties選好,再用【Combine to Resource Bundle】將選取的檔案視為同一群Bundle,並給名稱。
combine

將多選的檔案視為Resource bundle,其基本名為HEADER。
header

檔案編碼

在Settings→File Encoding裡可以指定properties的檔案編碼,雖然我指定了UTF-8,但自動建立出的卻是系統編碼(也就是Big5碼),此時輸入的中文會以 \u9999 的格式存放。若勾選Transparent native-to-ascii conversion,則編輯property時會直接看到中文。

在手動把properties檔另存成UTF-8編碼後,中文就能正確出現了。
file encoding

##

您可能也會有興趣的類似文章

開啟ASUS ZenPad 10 Z300M SD卡為內部儲存空間的步驟

$
0
0

上周六在網路上買了ASUS ZenPad 10 Z300M,掛載的是Android 6.0(Marshmallow,棉花糖),網路上賣的都是容量16G的版本,找不到更高容量,因為Android 6.0已經能把外掛的MicroSD卡格式化為內部儲存空間,讓系統容量得以擴充,因此我同時也加買了一片64G的Class 10的MicroSDXC卡。

人算不如天算的是ASUS竟然把這個擴充容量功能給關掉了!透過線上客服得到的理由是因為大部份應用程式尚未支援內部儲存空間,導致系統不穩定,因此暫不開啟此功能,至於何時能啟用則是不知-無預訂開放時間表。既然官方不開放,只好自力救濟了。

由設定進行格式化之操作

首先由Make sd card become internal storage Android 6.0.1 How To :-ZE551KL(Laser)查到啟用內部儲存空間(Internal Storage)的作法:

  1. 讓平板進入開發者模式:設定→【關於】→【軟體資訊】→在【版本號碼】上連按7下,就能在設定裡看到【開發人員選項】。開啟【開發人員選項】裡的【USB 偵錯】。
  2. 此處下載 adb。adb是Android Debug Bridge的縮寫。將下載的檔案解壓縮,接著以其內的adb.exe繼續處理。
  3. 將平板連上電腦,當平板上出現【允許 USB 偵錯嗎?】時按【確認】,出現【是否使用USB進行檔案傳輸?】時選取消。
    usb debug
  4. 執行cmd.exe進入命令提示字元(DOS視窗),執行下列sm指令(sm是Storage Manager的縮寫):
D:\adb-tools>d:
D:\adb-tools>cd \Adb-tools
D:\adb-tools>adb shell
shell@P00C:/ $ sm set-force-adoptable true
shell@P00C:/ $ exit

5.再進入設定→【儲存空間與USB】→【SD 卡】時,會多出【進行格式化,設為內部儲存空間】選項
format options

如果先前SD卡已經格式化為可攜式儲存空間,則可按其右上角的設定來選用上述選項。
portable setup

▼ 格式化時的畫面。在20%的地方停很久,然後直接報錯…
formatting

用adb.exe操作

可惜我用了上面步驟仍無法順利將SD卡變更為內部儲存空間,畫面停在正在格式化「SD卡」…20%的地方約3分鐘後就出現SD卡無法清除的錯誤訊息而結束。

再搜尋到Here’s how to configure adoptable storage on your S7 / S7 Edge – News – MoDaCo的作法後,又再開始嘗試:

在命令提示字元下進入adb shell。重點說明如下:

  1. 用sm列出sm的所有可以使用的選項
  2. 用sm list-disks 找出平板SD卡的磁碟ID,列出的ID是 disk:179,128
  3. 用sm list-volumes all列出此SD卡裡的所有Volume,其中public:179,129是格式為可攜式儲存空間的Volume ID
  4. 用sm partition disk:179,128 private將SD卡變更為內部儲存空間(其Volume ID會以private開頭)
  5. 不管有沒有出現錯誤訊息,在shell@P00C:/ $ 又出現後,以 reboot 重新開機
d:\adb-tools>adb shell
shell@P00C:/ $ sm
usage: sm list-disks [adoptable]
       sm list-volumes [public|private|emulated|all]
       sm has-adoptable
       sm get-primary-storage-uuid
       sm set-force-adoptable [true|false]

       sm partition DISK [public|private|mixed] [ratio]
       sm mount VOLUME
       sm unmount VOLUME
       sm format VOLUME
       sm benchmark VOLUME

       sm forget [UUID|all]

Error: java.lang.IllegalArgumentException
1|shell@P00C:/ $ sm list-disks
disk:179,128
shell@P00C:/ $ sm list-volumes
private mounted null
public:179,129 mounted 971A-B747
emulated mounted null
shell@P00C:/ $
shell@P00C:/ $ sm partition disk:179,128 private
shell@P00C:/ $ reboot

目前sm partition操作很不穩定,經常會出現** java.util.concurrent.TimeoutException: Thread Binder_B gave up waiting for partitionPrivate after 180000ms** 之類的錯誤訊息,重開機後若SD卡顯示的是SD卡已毀損或不支援,那麼再將SD卡格式化為可攜式儲存空間後再用adb.exe重新執行一次,有時突然就成功(重新試了幾次,仍無法抓到成功的原因….)。

測試過程中發現似乎用混合模式比較容易成功,如 sm partition disk:179,128 mixed 50 就是可攜式儲存空間佔50%,內部儲存空間佔50%。private volume後面要有加密字串才是成功的狀態:

shell@P00C:/ $ sm list-volumes all
emulated:179,131 unmounted null
private:179,131 mounted fd277727-60a3-4655-9795-f77f6d5e8a7b
private mounted null
public:179,129 mounted 6D63-1203
emulated mounted null

變更App的儲存空間

  1. 進入某個App的應用程式資訊畫面。
    app1

  2. 輕觸【儲存空間】,再輕觸【變更】。
    app2

  3. 再選擇要存放的位置。
    app3

##

您可能也會有興趣的類似文章

[Windows好用工具]:WorkSpace Switch:保存當前開啟中的件檔名以方便稍後重新開啟

$
0
0

WSS(WorkSpace Switch)是用來保存目前工作中的文件檔名的工具,因為找了一陣沒有符合需求的軟體,最後只好自己寫了這個簡單的工具。又因為是寫來自己用的,或許不能完成符合網友們的需要,如果讀友們有擴充需求就請留言在此文章內。

WSS的功能

WSS的功能很簡單:將開啟中的文件檔名儲存起來,並給一個識別名稱,日後就能用這個識別名稱再次重新開啟這些文件檔案。

保存檔名同時,也會將檔名以日期格式存起來,以方便用日期來重啟文件。

WSS使用場景

  • 下班前將目前工作中的文件檔名保存起來,隔天上班時再重新開啟。
  • 下班前將目前工作中的文件檔名保存起來並把 wss.ini複製到Dropbox之類的雲端硬碟,回到家後再用WSS重新開啟(辦公室與家裡的文件存放位置相同時適用)。
  • 假設目前針對【專案P1】的【功能F1】在工作,開啟了P1_1.doc、P1_2.doc、P1_3.xls,用WSS保存為 P1F1,幾天後可以快速重新開啟 P1F1 的3個文件,不必再到不同的資料夾裡去找檔案再逐一開啟。
  • 快速重啟昨天保存過的檔案。

安裝與設定

由下列網址下載檔案並解壓縮,再複製到自己的常用工具資料夾裡即可:

WSS不用安裝只要複製,移除也只要刪除檔案即可。 設定檔 wss.ini 必須和wss.exe放在一起,可自行用wss edit或文字編輯器修改。

WSS的使用

  • 以GUI對話窗操作:點擊wss.exe,或命令列執行時不傳任何參數
    wss-1
  • 保存目前開啟中的文件檔名為識別名稱。保存時同步產生 【識別名稱.bat】,日後也能用 【識別名稱.bat】 重啟文件檔
    wss save p1f1

▼ 範例

d:\DOC>wss save p1f1
d:\DOC>
WSS - WorkSpace switch v1.04, 2016 from http://jdev.tw/blog

Extensions: .doc .docx .xls .xlsx .pdf

File1=D:\Dropbox\DOC\日文字型問題.doc
File2=D:\Dropbox\DOC\Nessus弱點偵測掃描報告分析.doc
File3=D:\Dropbox\DOC\SOAP-WebService-ref.doc
  • 重啟指定的識別名稱的所有文件檔名
    wss load p1f1

    p1f1.bat
  • 列出目前所有的識別名稱
    wss list
  • 列出指定【識別名稱】的文件項目
    wss list p1f1

▼ 範例

d:\DOC>
WSS - WorkSpace switch v1.04, 2016 from http://jdev.tw/blog

Workspaces:

20160908
20160910
20160918
alert
scan
websvc-api1
websvc-api2
  • 編輯wss.ini,修改wss.ini裡的[Editor] File項目為慣用的編輯器
    wss edit
  • 關閉指定【識別名稱】的文件項目。此功能無法關閉特定的文件,例如開啟了 p1_1.doc和p2_1.doc,wss stop關閉時會把所有WINWORD.exe都關掉
    wss stop p1f1

##


您可能也會有興趣的類似文章

Viewing all 897 articles
Browse latest View live