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

電子貨架標籤即將走入你我的生活…

$
0
0

由於平板電腦的熱賣而間接受影響的廠商不少,其中電子書設備廠商當屬頗大的受害者之一,電子書閱讀器需求降低導致電子紙需求量也跟著減少,因此電子紙廠商尋找電子書以外應用的積極度與迫切性就更顯著了。我正好參與了一個使用電子紙為材料的電子貨架標籤(Electronic Shelf Label,簡稱ESL)的開發專案,最近在台北通化夜市裡的金興發生活百貨通化店進行第二代的電子標籤的上線測試,趁還在上線階段利用本網站做個廣告,如果你對電子標籤有興趣的話,不妨找個時間去看看新形態的零售業應用。

雖說電子標籤並不是新的概念或技術,國內外也都有實際應用的例子,但在台灣還不普及,全省有導入電子標籤的店家屈指可數,低普及的最主要障礙還是在導入的費用較高,而一顆標籤成本最高的就屬電子紙。但科技產品的價格總是降得很快,或許電子紙能很快的降價到每個店家都能負擔得起的售價,到時電子標籤可能會變得跟收銀機一樣是開店必備的設備也說不定哩。我參與的這個專案,由電子紙、IC與無線設備等軟硬體全部由國人研發製造,在價格上應該會很有競爭力才對。

設備簡述

在金興發生活百貨通化店測試的電子標籤數目將近500顆,顯示屏幕為2.0吋,透過一台PC連接的一部協調器,以WiFi無線的方式與另兩部無線Router通訊,再由Router將每個商品的價格圖片以無線的方式定時更新到電子標籤。除了現場人員省去印製紙標籤與替換紙標籤的人力時間外,商品的促銷價自動變價、促銷檔期結束自動回價等耗時耗力的操作,也一併由電腦和無線裝置代勞,資料的正確性也會比人工準確,可謂好處多多。

現場照片

image1

image2

image3

金興發通化店地圖

以下是金興發通化店的位置資訊:

  • 金興發生活百貨通化店:台北市大安區臨江街81號
  • 營業時間:營業時間09:30-01:00
  • 地圖:
    map for JSF

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 電子貨架標籤即將走入你我的生活… appeared first on 簡睿隨筆.


jTDS JDBC Driver在2012年10月釋出了能在JDK 1.7運行的1.3.0版

$
0
0

真是後知後覺,原來SQL Server jdbc driver jTDS在去年2012年10月釋出了能在JDK 1.7運行的1.3.0版,而且修正了不少Bug。有使用jTDS與Java 7的朋友們趕緊下載測試吧。

資料來源

The jTDS project has released version 1.2.7 and 1.3.0 of the open source JDBC driver for Microsoft SQL Server and Sybase. The new versions are a quite huge update, also fixing a number of critical bugs and improving the performance, s* we’d highly encourage you t* upgrade.

Version 1.3.0 is the first Java 7 compatible version of the driver and, beside the fix for bug #672, improves performance compared to version 1.2.7. The future development will be focused on the 1.3.x line of the driver, so further enhancements and bug fixes will not necessarily become available it the Java 1.3 compatible jTDS 1.2.x. You should only stick to jTDS 1.2 if you require to use a Java version prior to Java 7.

New features:

  • Improved the database meta data support by adding (JDBC4) column IS_AUTOINCREMENT.
  • Implemented support for the COMPUTE (BY) operator (bug #678, patch #48).

Bug fixes:

  • #528, any ResultSet gets dropped when using RETURN_GENERATED_KEYS.
  • Fixed a bug that caused Statement.close() to throw an exception for errors caused by previously executed statements.
  • #609, slow SharedSocket finalization due to expensive locking.
  • Fixed format conversion errors for DATETIME, DATE and TIME values.
  • #615, SQL parser fails if function escapes contain nested functions.
  • #634, incorrect comment processing in callable statements.
  • Fixed parameter name format for procedure calls using named parameters.
  • #647, preparing statements including a WITH clause don’t retrieve meta data.
  • #677, possible deadlock in JtdsStatement.close().
  • #676, error in SQL parser concerning multi line comments.
  • #541, data type mismatch when using {ts}/{t}/{d} JDBC escapes.
  • A number of incorrect error messages have been fixed.
  • #637, an attempt to execute a standard SQL statement using a CallableStatement now throws an appropriate SQLException on preparation.
  • #633, possible NPEs in JtdsObjectFactory.
  • Added missing getter/setter methods for connection property “autoCommit" in class JtdsDataSource.
  • Corrected data types for connection properties “autoCommit" and “useNTLMv2″.
  • Added missing default for connection property “useNTLMv2″.
  • #661, memory pollution caused by ThreadLocal Calendar instances.
  • #673, buffer overflow in SQL parser.
  • #643, documentation error.
  • #659, missing service provider configuration file for JDBC driver class.
  • #656, unnecessary log pollution during emulated XA recovery.
  • #667, spurious login timeouts if establishing connections concurrently.
  • #642, a stream hasn’t been closed in CharsetInfo.
  • #608, various typos in Messages.properties.
  • #660, problems with WebRing code of the project website.
  • Fixed a race condition when closing a Statement in concurrent threads.

Posted by 2012-10-27

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post jTDS JDBC Driver在2012年10月釋出了能在JDK 1.7運行的1.3.0版 appeared first on 簡睿隨筆.

[轉貼] 7-11將停售本期《商業周刊》;肇因:《統一超再添高家人 高清愿孫女進駐》

$
0
0

總編輯給讀者的一封信

抱歉,1313期《商業周刊》在7-11缺席了!

每週三晚上,是人們可以在全省便利超商、書局,接觸到最新一期《商業周刊》的時刻。

然而,一個意外發生了。本週三下午,我們接到一個訊息:「7-11將停售本期《商業周刊》」。七點鐘,消息被證實,一本本商周被冰凍在通路商手中。

台灣最大通路商7-11,無預警的,將兩岸三地發行量最大的財經雜誌「停售」!

他們,拒絕將商業周刊鋪送至全省四千八百家門市。

一篇四百二十二字的報導,是「肇禍元兇」,內容與統一超的人事異動有關。

就在中國《南方周末》事件發生時,台灣竟然也出現通路試圖操縱新聞的案例,我們相信,這不是第一例,也不會是最後一例。此一事件,不只是單一通路與單一媒體的利益衝突,這攸關台灣在華人世界最珍貴的新聞自由地位。如果我們不發聲,如果我們在通路前表現怯懦,台灣的新聞自由,勢將在沉默中被謀殺

很遺憾的,過去戒嚴時代才會發生的事,竟然發生在此刻;過去新聞局對新聞安檢的角色,竟然由一家營收逾千億的民營通路業者接手。

存真求實,是《商業周刊》的信仰。即便創刊前七年,財務最困窘之際,創辦人天天在銀行軋三點半頭寸,我們仍不受利誘,不畏脅迫。一路走來,我們從未改其志。行過低谷,如今,靠著所有台灣讀者的支持,《商業周刊》貢獻了一個台灣奇蹟:我們是全球唯一,財經雜誌發行量可以超越八卦雜誌的國家。

我們深知,這一切,源自讀者的信任;時時刻刻,我們把讀者知的權利放在第一位。

《商業周刊》成立二十五年,7-11一直是我們重要的夥伴。藉由這個通路,我們跟讀者接觸,向社會發聲、實踐「先進觀念、輕鬆掌握」的使命。

公正、客觀,向來是我們無可救藥的堅持,若報導內容有誤、不夠嚴謹,歡迎各界指教,更歡迎來函更正、甚至提起訴訟,我們絕不推托閃躲。但是,若有人意圖影響新聞獨立,我們不能,也不應向強權低頭,必須守護台灣最珍貴的自由土壤。

也因此,即便我們擁有媒體,掌握龐大的影響力,每週閱讀商周的讀者高達百萬,但面對台灣最重要通路之一的壓力,我們也不會以新聞版面傳遞涉己事務的私人情緒。因為,這不是讀者對我們的期待。

在此,謹向讀者致歉,尤其是習慣在統一超商與我們會面的讀者。但是,為了台灣越來越稀薄的新聞自由空氣,請容許我們選擇這條路,我們,要守護最後一方新聞淨土!

商業周刊總編輯郭奕伶 2013.1.17.凌晨

這是商業周刊成立二十五週年,第一次在統一超商缺席。

原文:http://www.businessweekly.com.tw/webarticle2.php?id=18316&p=2


統一超再添高家人 高清愿孫女進駐

撰文者:尤子彥    商業周刊 第1313期

「今天,是我到商發院(商業發展研究院)剛通過三個月試用期的日子!」統一超商前總經理徐重仁,以幽默自嘲口吻,在擔任董事長的商業發展研究院尾牙上以此致詞開場。隨著徐重仁轉任新職,統一超正式進入「後徐時代」。最具指標性的人事布局,當屬去年十月悄悄上任,外界從未曝光的高清愿孫女——統一超商總經理室經營企畫部部長高茲伊。

目前單身的高茲伊,是高清愿獨生女高秀玲與前夫所生,從母姓的女兒。結束美國學業後,曾在上海統一的中國事業部門任職,去年底以空降之姿進入統一超,擔任總經理陳瑞堂的幕僚主管,負責超商新事業規畫。由於高秀玲與夫婿羅智先雙雙出任統一超董事,高家第三代高茲伊進入管理階層,並賦予事業發展的核心重任,高家第三代進駐統一超,發揮具體影響力的意味十分濃厚。

對此,統一企業方面不願正面證實,但相較於先前回應統一超人事調整,總以「照制度走」回應的統一企業總經理羅智先,替統一超減了一個不姓高的、加了一個姓高的,如此「減法哲學」,恐是他接下來得面對眾疑的新難題。

原文:http://www.businessweekly.com.tw/article.php?id=49109


7-ELEVEN粉絲團的聲明

中午時7-11在Facebook 7-ELEVEN粉絲團的聲明:「敬致各位喜愛7-11的粉絲們,特別跟各位粉絲說明一件事情,昨晚由於物流配送作業不及因此造成商業週刊雜誌來不及上架,經今天內部緊急協調作業,預計今天下午起就會陸續配送到各門市,所以下午粉絲就可到7-ELEVEN買商業週刊了,造成粉絲不便還請大家多見諒喔>////<」

真真假假…走過必留下痕跡

圖片來源" 圖片來源

缺席的力量—謝謝所有網友與台灣公民

總編輯的第二封信

我們沒想到,缺席的力量如此巨大!

1月17日12:00,統一超商臉書粉絲團發出訊息:
「昨晚由於物流配送作業不及
因此造成商業週(編按:應為「周」)刊雜誌來不及上架
經今天內部緊急協調作業
預計今天下午起就會陸續配送到各門市」

在這裡,我要九十度鞠躬,謝謝所有關心此事的熱情網友!

是你們的聲援,讓《商業周刊》得以「解凍」,重新在7-11上架。若超商的「物流作業」順利,預計各位週五一早就可以在這個通路,看到《商業周刊》了。(雖然約比平常晚了十五個小時)

雖然在超商聲明中,我們只看到「物流配送作業不及」的原因,也期待能夠有更好的說明。但經過此事,我們更深刻的體會到,即便通路可能形成強權,即便龐大的市佔率可能造成人們心中的恐懼,但是,台灣社會擁有更強大的公民力量。

這股公民力量,無法被壟斷、無法被箝制、更無法被消滅,因為,最大的通路,其實在所有人的身上,在你我的手中、嘴上、心中。

身為媒體工作者,這一刻,既激動也感動,謝謝大家!

也因為大家的支持,我們將更警醒,不但要守護台灣的新聞自由,為所當為,言所當言,更要隨時自我鞭策,確保每一則新聞的公正嚴謹,並絕對不會利用新聞版面進行挾私怨以報復的例子。

一切,都要回歸讀者的權益。唯有讀者,才是我們最應該在乎的對象。

二O一三年,這是珍貴的一堂課,由所有的網友們共同見證:「缺席」,並不需要恐慌,它,往往是另一股力量的凝聚。

這一頁歷史,由各位親筆寫下。如果大家同意,我們僅將這一頁的美麗,獻給此刻最需要鼓勵與擁抱的台灣,我們的母親!

商業周刊總編輯郭奕伶 2013.1.17.14:00

原文:http://www.businessweekly.com.tw/web/webarticle2_18317_p1.html

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post [轉貼] 7-11將停售本期《商業周刊》;肇因:《統一超再添高家人 高清愿孫女進駐》 appeared first on 簡睿隨筆.

IDEA12快速尋找編輯檔案的幾個方法

$
0
0

IDEA以多分頁介面來顯示編輯中的原始檔案,通常頁籤列都是設定在上方,且設成多列的樣式以方便快速找到要使用的檔案,但當開啟的檔案變多時,每次要在兩三列的頁籤裡找到檔案經常都會遲延個幾秒,IDEA 12以前還有個TabReorder外掛可以使用,能將頁籤依英文字母順序重新排列,讓尋找檔案更迅速些,可惜TabReorder與IDEA 12不相容而無法使用;我試了幾個方式後最後採用如本文所述的設置來解決。

多列頁籤+字母順序排列

頁籤設定成單列(Single row)時,可以勾選【Alphabetical Mode】,讓頁籤以字母順序自動排列。但因為檔名通常都很長,會造成上方頁籤列只能顯示5、6個分頁(分頁個數視螢幕寬度而定),當開啟檔案一多時,單列顯然無法符合需求。

在多列狀態下時,若將頁籤放置到左側或右側時,可以勾選【Alphabetical Mode】,放置到上方或下方時則無法勾選,因此變通方法就是將頁籤列放置到右側,並依字母順序排列。這樣找檔案就方便些了。
IDEA Tabs setting

找檔案的快速方法

以下是在編輯區快速找到檔案的幾個方法:

  1. 按〔Ctrl+E〕彈出最新開啟過的檔案清單
    Recent files
  2. 按〔Ctrl+Tab〕彈出檔案切換對話窗,對話窗出現後按住〔Ctrl〕不放再按〔Tab〕可以移動游標位置
    Switcher
  3. 安裝TabSwitcher Extream外掛;安裝後到設定裡設定,依下列設置將檔案分類。
    TabSwitcher Extream setting
    設定好後按〔Alt+A〕就能開啟分類好的檔案清單,分類過後應該能加速挑選的時間。
    TabSwitcher Extream select

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post IDEA12快速尋找編輯檔案的幾個方法 appeared first on 簡睿隨筆.

Blog文章發表日期的重要性

$
0
0

在資訊流動快速、科技進步飛快的今天,很多技術在短時間裡就會過時,因此「發表日期」對於資訊類或科技類的文章就很重要,當我們在某個網站看到一篇文章時,有時很難判斷文章內容是否過時,如果文章的發表日期又不是放在開頭的話,閱讀者就必須捲動到底部,邊看邊找日期。哎,這可是令人困擾的事。

當你的網站文章屬於變動快速的類型時,請將文章日期放在標題列下方吧,這會讓你的讀者更容易閱讀的。

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post Blog文章發表日期的重要性 appeared first on 簡睿隨筆.

解決Windows 8資料夾開啟遲延的步驟

$
0
0

如果在使用Windows 8時遇到下列狀況時,請繼續閱讀本篇分享的解決方法:

  • 瀏覽器另存連結(下載)時,檔案總管要遲延許久才會彈出
  • 應用程式另存新檔時,檔案總管要遲延許久才會彈出

在正常狀況下,按下另存檔案時對話窗應該立即就顯示出來,但Windows 8卻可能讓游標轉個15秒以上的時間才彈出對話窗。印象中我在使用Windows 7時並沒有類似狀況,但用Google搜尋後似乎也有人遇到類似情況。解決方法如下:


1. 開啟檔案總管並找到經常要用的存檔資料夾,按右鍵→【內容】→【自訂】頁籤→【將最佳化此資料夾】選為「一般項目」。
win8 slow folder
2. 執行記事本,按【檔案】→【另存新檔】,若第一次執行也能很快出現另存新檔對話窗,則表示設定正確,若仍不行,建議重新啟動電腦再試一次。
3. 若重啟後仍有遲延狀況,則在資料夾處按右鍵→【內容】→點擊一般頁籤下方屬性的進階,將製作索引的選項取消勾選,處理完畢後重新啟動電腦。
win8 slow dialog

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 解決Windows 8資料夾開啟遲延的步驟 appeared first on 簡睿隨筆.

[Windows 8] 多螢幕(Dual monitor)操作的基本設定

$
0
0

在辦公室裡我的使用的是ThinkPad X61外接鍵盤、藍牙滑鼠與19吋的ViewSonic顯示器,因為X61螢幕只有11吋,因此一直都只用19吋的螢幕,而去年12月資訊展期間添購了一部Asus 15吋螢幕的筆電(作業系統是Windows 8 Enterprise),這幾天就試用雙螢幕(Dual monitor或Multi-monitor)來工作,比較看看是否能提升工作效率。

顯示器Layout

使用【控制台\外觀及個人化\顯示\螢幕解析度】就能變更顯示器的配置,顯示器1是筆電螢幕,顯示器2是外接的19吋螢幕,在變更顯示器的外觀裡拖動顯示器1與顯示器2的位置就能變動螢幕的相對位置,例如外接螢幕放在筆電左側就將圓圈2拖到左邊。同時我們必須將【多部顯示器】欄位選為【延伸這些顯示器】。

monitor layout

若沒有特別設定則筆電的螢幕會是主要的顯示器,因此系統匣(System tray)會顯示在筆電螢幕上,開啟新的程式時其視窗也會顯示在筆電螢幕,如果要把尺寸更大的外接顯示器2當做主顯示器的話,只要先點選顯示器2並勾選【使其成為主顯示器】即可。

工作列設定

因為我們勾選了【延伸這些顯示器】,兩個顯示器就組成了一個跨越螢幕的桌面,當滑鼠游標移到左方螢幕最右側就會跑到右方螢幕的最左側,視窗也可以自由在兩個螢幕裡移動,為了操作不致混淆我們也必須再設定工作列,讓顯示在左方螢幕的視窗的圖示只顯示在左方的工作列上。在工作列空白處按右鍵→選【內容】就能設定工作列。

  1. 在【多部顯示器】框裡勾選【在所有顯示器上顯示工作列】
  2. 依需求選用【工作列按鈕顯示位置】,我使用的是【視窗開啟所在工作列】

taskbar settings

移動系統匣所在工具列

如果顯示器2不是主顯示器,但要將系統匣顯示在顯示器2上,依下列步驟操作即可:

  1. 在工作列空白處按右鍵→取消勾選【鎖定所有工具列內容】
  2. 將筆電的工作列拖到顯示器2下方,放好位置後可以發現系統匣已移到顯示器2了

第三方軟體

用Google搜尋的過程中發現有不少人推薦UltraMon,UltraMon提供了比windows 8內建更強的多螢幕管理功能,費用為美金39.95元。

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post [Windows 8] 多螢幕(Dual monitor)操作的基本設定 appeared first on 簡睿隨筆.

超方便的遠端連線管理員(Connection Manager):mRemoteNG與其變通的傳檔功能

$
0
0

當需要遠端連線的電腦越來越多,而且連線的方式又有不同時,mRemoteNG的方便性立刻就彰顯而出,它能將常用的連線資訊儲存到一個畫面裡,能讓我們快速的執行連線作業。

mRemoteNG sample

mRemoteNG guide

mRemoteNG的NG是「Next Generation」之意,表示是其前一代mRemote專案的延續,目前支援下列的連線通訊協定:

  • RDP (Windows遠端桌面)
  • VNC
  • SSH Version 1 / Version 2
  • Telnet
  • Rlogin
  • RAW
  • HTTP
  • HTTPS
  • ICA 等

簡易操作說明

用〔New Folder〕建立連線分類,用〔New Connection〕就能增加新的連線資訊,每個Connection可以有不同的通訊協定、帳號密碼與開啟的面板;在頁籤按右鍵顯示連線的功能表,用Screenshot就能做畫面擷取。

這個工具應該是IT人員必備。

其他資訊

  • 官方網站
  • 下載網頁
  • 需要.Net Framework 2.0以上環境
  • 能將連線資訊匯出成XML檔(密碼會加密),也能將連線寫入MS-SQL Server資料庫,方便企業裡共用之需(SQL功能怪怪的,都試不成功…)
  • 缺少傳檔功能
  • TeamViewer也是很常用的連線工具,可惜TeamViewer Manager(改名為TeamViewer Management Console了)所費不貲…

傳檔功能的變通方法

mRemoteNG的VNC沒有提供UltraVNC的傳檔功能,試了一下似乎只能用它的External Tools來解決,作法是在需要傳檔時就額外再啟動UltraVNC。步驟如下:

  1. 點擊功能表【Tools】→【External Tools】會開啟External Tools分頁
  2. 按右鍵選【New External Tool】
  3. 在分頁下方逐一輸入欄位資料:
    1. Display Name:UltraVNC VNCViewer
    2. Filename:找到你電腦裡的vncviewer.exe
    3. Arguments:-connect %Hostname% -password %Password% (vncviewer的命令列參數請參考此網頁
  4. 在Connections此連線按右鍵選External Tools,找到【UltraVNC VNCViewer】就能另開一個UltraVNC視窗了
  5. 勾選功能表【View】→【External Tools Toolbar】顯示外部工具的工具列,可以將它拖到上方以方便點擊
  • 好心人提供的External Tools的參考範例,透過範例可以針對連線電腦做更多的操作。

External Tools

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 超方便的遠端連線管理員(Connection Manager):mRemoteNG與其變通的傳檔功能 appeared first on 簡睿隨筆.


令人驚豔的PowerPoint 2013雙螢幕投影功能

$
0
0

上周五開會時第一次使用安裝了一陣子的PowerPoint 2013來投影,投影後被它增強的功能嚇一跳,沒想到微軟這個新版有了別出心裁的功能。

PowerPoint 2013

以往使用PowerPoint投影時,簡報人看的電腦螢幕和投影幕上都是相同的單張簡報投影片,PowerPoint 2013將電腦螢幕做了加強,左上方佔有三分之二大小的是投影片,右方三分之一則是下一張投影片與備忘稿,左方投影片上面還有計時器,這些都是很貼心的設計。

左方投影片下面則是功能按鈕:

  • 第一個是畫筆工具,畫筆塗過的內容還可以儲存起來
  • 第二個是查看所有投影片,顯示所有投影片在電腦螢幕上,找到要顯示的投影片後按一下,投影幕立即顯示點選的投影片;其他人不用再看到你的搜尋投影片操作了
  • 第三個是局部放大投影片,以前都是用ZoomIt,現在可以直接使用內建功能
  • 第四個是遮蔽投影幕,將投影幕變黑後別人就看不到你在電腦上的操作,找檔案的時候應該很有用
  • 最後一個是其他選項

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 令人驚豔的PowerPoint 2013雙螢幕投影功能 appeared first on 簡睿隨筆.

國人寫的Windows Markdown記事本軟體:PureMarkdown

$
0
0

Markdown的client軟體又多了一個:PureMarkdown,由國人ken1325撰寫,但今天其網站卻無法瀏覽。想要試看看的朋友請由我的備份下載試用,需要.Net Framework 4.0環境。Markdown文件必須是UTF-8編碼才能正確顯示。

PureMarkdown

另一個較多人知道的Windows Markdown client是MarkdownPad,和PureMarkdown一樣都能匯出HTML格式。可惜這二者都沒有支援Markdown Extra語法。

MarkdownPad

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 國人寫的Windows Markdown記事本軟體:PureMarkdown appeared first on 簡睿隨筆.

擴充彈性十足的滑鼠手勢軟體:StrokesPlus

$
0
0

和我先前介紹過的StrokeItgMote一樣,StrokesPlus也是一款滑鼠手勢的Windows軟體,免費、耗用資源小、有32位元與64位元程式,而且還是持續在更新的活躍軟體。因為過年期間在家裡用的是24吋的寬螢幕, 視窗放到最大時右上角的關閉會在很「遠」的位置,滑鼠的移動距離相對變得較大,有時又懶得按鍵盤,此時使是使用滑鼠手勢軟體的好場合,因此就把StrokesPlus安裝起來試試。

StrokesPlus是使用Lua腳本來當做動作的控制語法,因此能讓我們依需求撰寫要執行的動作,擴充彈性頗強,除了要去查查Lua語法之外,它的腳本還算非常好寫,我依自己的需要寫了下面幾個,除了最後一個之外,都加在【Global Actions】裡面:

StrokesPlus

S手勢:開啟StrokesPlus設定視窗

原來的S手勢是中止媒體播放器,我修改成將縮小到系統匣的StrokesPlus重新顯示到螢幕上。

 
  -- 你沒看錯,就一行而已
  acShowActions()

L手勢:關閉分頁或視窗

在Firefox或Google Chrome裡經常用L手勢來關閉分頁,此處的Lua是判斷當前的視窗再分別送出〔Ctrl+W〕、〔Alt+F4〕、〔Win+Alt+Delete〕(ConEmu使用)或〔Ctrl+F4〕(Java編輯器IntelliJ IDEA使用)。StrokesPlus用的按鍵寫法和Autohotkey差異很大,可參考Help最後面的說明。

 
-- this code sends the CTRL+W key combination, which 
-- will usually close a window or tab within an application
-- 取得有焦點的視窗
local handle = acGetForegroundWindow()
--acMessageBox(handle,"ActiveWindow",1)
local handleTaskman = acFindWindowByTitleRegex("工作管理員")
local handleEvernote = acFindWindow("ENMainFrame")
local handleConEmu = acFindWindow("VirtualConsoleClass")
local handleIDEA = acFindWindow("SunAwtFrame")  -- IntelliJ IDEA

--acMessageBox(handleEvernote,"handle",1)
if (handle == handleTaskman) or (handle == handleEvernote) then
  acSendKeys("%{F_4}")
elseif (handle == handleConEmu) then
  acSendKeys("@%{DELETE}")
elseif (handle == handleIDEA) then
  acSendKeys("^{F_4}")
else
  acSendKeys("^w")
end

→手勢:開啟瀏覽器連結

點擊設定視窗的【Configure Actions】→【Internet Browser】後我們可在右側的「File Name Pattern」欄位看到「firefox.exe|chrome.exe|iexplore.exe」表示此處設定是針對此三個瀏覽器而設定的。我將向右手勢修改成開啟連結處網址的功能。 原來的寫法將網址開啟在當頁,我加上按下〔Ctrl〕鍵再點擊,讓網頁開啟在新分頁。

 
-- this code does one of two things, if the mouse cursor
-- is a HAND, the  link below the cursor is opened in a new 
-- tab. If the mouse cursor is not a HAND, a new browser 
-- tab is opened this action is executed by holding the 
-- stroke button and clicking the left mouse button, either 
-- over a link or anywhere over the browser for a new tab
if acGetMouseCursorType() == "HAND" then
    acSendControlDown()
    acMouseClick(gsx, gsy, 2, 1, 1)     
    acSendControlUp()
else
    acSendKeys("^t")
end


##

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 擴充彈性十足的滑鼠手勢軟體:StrokesPlus appeared first on 簡睿隨筆.

以Scribe-java實作Google OAuth 2.0的認證機制

$
0
0

OAuth是一個讓我們的程式或網站直接使用認證提供者的帳號密碼來登入的服務(詳見維基百科),例如讓使用者用Google或Facebook的帳號登入自己開發的網站,這樣使用者能最快進入到你的系統裡做基本的操作,如果需要更進一步的權限時再申請正式的帳號。最近以Java實作了OAuth 2.0,留下文章以方便日後參考。以下以Google的處理步驟為例說明。

1. 申請Google Client ID

  1. 瀏覽Google API Console
    OAuth01
  2. 點擊左側的【API Access】
    OAuth02
  3. 〔按Create an OAuth 2.0 client ID…〕
    OAuth03
  4. 輸入產品資訊;Logo圖片以網址方式輸入後按〔Update〕。輸入完畢後按〔Next〕
    OAuth04
  5. 建議按〔more options〕以顯示出更多的欄位並繼續輸入資料。【Authorized Redirect URIs】指的是Google帳號輸入正確後要轉址到那個網頁,此網頁可以是Servlet或JSP,Google會傳入「code」參數。最後按〔Create client ID〕,建立client ID時會檢查提供的轉址網址是否能存取,要能存取才能完成建立動作
    OAuth05
  6. 建立Client ID完成後會顯示彙總網頁。認證處理時需要Client ID、Client secret與Redirect URIs三個欄位的資料
    OAuth06
  7. 我們可以在【Authorized Redirect URIs】填入簡單的oauth2callback.jsp,只顯示Google傳入的code參數,以方便測試:
 
<%
  String code = request.getParameter("code");
  out.println("code=" + code);
%>

2. 安裝scribe-java程式庫

提供OAuth功能的Java套件有很多,我使用的是scribe-java,主要是因為它的介面清楚簡單,也有許多測試程式可以直接測試,同時也直接提供常見的OAuth Providor的API,如Google、Twitter、Dropbox、Evernote 等皆有對應的API可以直接叫用,甚至連Plurk(噗浪)、人人網、新浪微博等都有。

  • scribe-java下載:由https://github.com/fernandezpablo85/scribe-java下載master.zip檔,並解壓縮到你的開發環境裡

但GoogleApi.java用的是OAuth 1.0a而不是2.0,我由另一個分支下載了支援OAuth 2.0的Google2Api.java:

  • scribe-java支援Google OAuth 2.0的API下載
 
package org.scribe.builder.api;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.scribe.exceptions.OAuthException;
import org.scribe.extractors.AccessTokenExtractor;
import org.scribe.model.OAuthConfig;
import org.scribe.model.OAuthConstants;
import org.scribe.model.OAuthRequest;
import org.scribe.model.Response;
import org.scribe.model.Token;
import org.scribe.model.Verb;
import org.scribe.model.Verifier;
import org.scribe.oauth.OAuthService;
import org.scribe.utils.Preconditions;

public class Google2Api extends DefaultApi20 {

  private static final String AUTHORIZE_URL = "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=%s&redirect_uri=%s&scope=%s";

  @Override
  public String getAccessTokenEndpoint() {
    return "https://accounts.google.com/o/oauth2/token?grant_type=authorization_code";
  }

  @Override
  public String getAuthorizationUrl(OAuthConfig config) {
    Preconditions
        .checkValidUrl(config.getCallback(),
            "Must provide a valid url as callback. Google does not support OOB");
    Preconditions
        .checkEmptyString(config.getScope(),
            "Must provide a valid value as scope. Google does not support no scope");

    String _sResult = "";
    try {
      _sResult = String.format(AUTHORIZE_URL, config.getApiKey(),
          URLEncoder.encode(config.getCallback(), "UTF-8"),
          URLEncoder.encode(config.getScope(), "UTF-8"));
    } catch (UnsupportedEncodingException uee) {
      throw new IllegalStateException("Cannot find specified encoding: UTF-8");
    }

  return _sResult;
}

  @Override
  public Verb getAccessTokenVerb() {
    return Verb.POST;
  }

  @Override
  public OAuthService createService(OAuthConfig config) {
    return new GoogleOAuthService(this, config);
  }

  @Override
  public AccessTokenExtractor getAccessTokenExtractor() {
    return new GoogleJsonTokenExtractor();
  }

private static final class GoogleOAuthService implements OAuthService {
  private static final String VERSION = "2.0";

  private static final String GRANT_TYPE = "grant_type";
  private static final String GRANT_TYPE_VALUE = "authorization_code";

  private final DefaultApi20 api;
  private final OAuthConfig config;

  /**
   * Default constructor
   *
   * @param api    OAuth2.0 api information
   * @param config OAuth 2.0 configuration param object
   */
  public GoogleOAuthService(DefaultApi20 api, OAuthConfig config) {
    this.api = api;
    this.config = config;
  }

  /**
   * {@inheritDoc}
   */
  public Token getAccessToken(Token requestToken, Verifier verifier) {
    OAuthRequest request = new OAuthRequest(api.getAccessTokenVerb(),
        api.getAccessTokenEndpoint());
    request.addBodyParameter(OAuthConstants.CLIENT_ID,
        config.getApiKey());
    request.addBodyParameter(OAuthConstants.CLIENT_SECRET,
        config.getApiSecret());
    request.addBodyParameter(OAuthConstants.CODE, verifier.getValue());
    request.addBodyParameter(OAuthConstants.REDIRECT_URI,
        config.getCallback());
    if (config.hasScope())
      request.addBodyParameter(OAuthConstants.SCOPE,
          config.getScope());
    request.addBodyParameter(GRANT_TYPE, GRANT_TYPE_VALUE);
    Response response = request.send();
    return api.getAccessTokenExtractor().extract(response.getBody());
  }

  /**
   * {@inheritDoc}
   */
  public Token getRequestToken() {
    throw new UnsupportedOperationException(
        "Unsupported operation, please use 'getAuthorizationUrl' and redirect your users there");
  }

  /**
   * {@inheritDoc}
   */
  public String getVersion() {
    return VERSION;
  }

  /**
   * {@inheritDoc}
   */
  public void signRequest(Token accessToken, OAuthRequest request) {
    request.addQuerystringParameter(OAuthConstants.ACCESS_TOKEN,
        accessToken.getToken());
  }

  /**
   * {@inheritDoc}
   */
  public String getAuthorizationUrl(Token requestToken) {
    return api.getAuthorizationUrl(config);
  }
}

private static final class GoogleJsonTokenExtractor implements
    AccessTokenExtractor {
  private Pattern accessTokenPattern = Pattern
      .compile("\"access_token\"\\s*:\\s*\"(\\S*?)\"");

  public Token extract(String response) {
    Preconditions.checkEmptyString(response,
        "Cannot extract a token from a null or empty String");
    Matcher matcher = accessTokenPattern.matcher(response);
    if (matcher.find()) {
      return new Token(matcher.group(1), "", response);
    } else {
      throw new OAuthException(
          "Cannot extract an acces token. Response was: "
              + response);
    }
  }
}
}

將Google2Api.java存入scribe/main/java/org/scribe/builder裡,並撰寫測試的google_login.html:

<a href="https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=你的Client ID&redirect_uri=接收code參數的轉址網址&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email">以Google帳戶登入</a>

在瀏覽器執行google_login.html若能看到下列內容表示已能存取Google帳戶且能傳出Access Token code:
OAuth08

3. 完成最後的認證

先前的oauth2callback.jsp只將接收到的code參數顯示在網頁裡,以下是oauth2callback.jsp後續的處理:

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page import="org.scribe.builder.ServiceBuilder" %>
<%@ page import="org.scribe.builder.api.Google2Api" %>
<%@ page import="org.scribe.model.*" %>
<%@ page import="org.scribe.oauth.OAuthService" %>
<%
  String _sCode = request.getParameter("code");
  out.println("code=" + _sCode + "<br>");

  Verifier verifier = new Verifier(_sCode);
  String apiKey = "你的Client ID";
  String apiSecret = "你的Client secret";
  String redirect_uri = "你的轉址網址";

  OAuthService service = new ServiceBuilder()
      .provider(Google2Api.class)
      .apiKey(apiKey)
      .apiSecret(apiSecret)
      .callback(redirect_uri)
      .scope("https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email")
      .build();

  Token accessToken = service.getAccessToken(null, verifier);

  // Now let's go and ask for a protected resource!
  OAuthRequest req = new OAuthRequest(Verb.GET, "https://www.googleapis.com/oauth2/v1/userinfo?alt=json");
  service.signRequest(accessToken, req);
  Response resp = req.send();
  // Got it! Lets see what we found...
  String _sBody = resp.getBody();

  out.println(resp.getCode() + "<br>");
  out.println("Body=" + _sBody);
%>

resp.getBody()收到的是一個類似下列的JSON物件:

 
{ "id": "帳戶ID", "email": "電子郵件@gmail.com", "verified_email": true,
  "name": "姓名", "given_name": "名", "family_name": "姓",
  "link": "https://plus.google.com/Google+的連結",
  "picture": "https://lh3.googleusercontent.com/帳戶圖片.jpg",
  "gender": "male", "locale": "zh-TW" }

Facebook取到的JSON如下:

 
{"id":"Facebook ID","name":"姓名","first_name":"名",
  "last_name":"姓","link":"Facebook頁的連結",
  "username":"使用者代碼","bio":"描述",
  "gender":"male","email":"電子郵件","timezone":8,"locale":"zh_TW",
  "verified":true,"updated_time":"2013-02-05T03:39:27+0000"}

相關參考


##

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 以Scribe-java實作Google OAuth 2.0的認證機制 appeared first on 簡睿隨筆.

讓WordPress SyntaxHighlighter Evolved外掛能顯示Lua語法

$
0
0

前幾天因為分享《擴充彈性十足的滑鼠手勢軟體:StrokesPlus》發現我的WordPress無法以SyntaxHighlighter顯示Lua程式語言,搜尋後修改檔案後,才能新增Lua Brush到SyntaxHighlighter Evolved外掛;操作步驟如下:

  1. http://ikpil.com/1191下載sbBrushLua.js並上傳到/wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/scripts資料夾。
  2. 編輯/wp-content/plugins/syntaxhighlighter/syntaxhighlighter.php:
    • 找下列敘述:
 
wp_register_script( 'syntaxhighlighter-brush-java',       plugins_url('syntaxhighlighter/' . $this->shfolder . '/scripts/shBrushJava.js'),       array('syntaxhighlighter-core'), $this->agshver );
  • 找到後在其上插入下列敘述:
 
wp_register_script( 'syntaxhighlighter-brush-lua',       plugins_url('syntaxhighlighter/' . $this->shfolder . '/scripts/shBrushLua.js'),       array('syntaxhighlighter-core'), $this->agshver );
  • 再搜尋下列敘述:
 
    'java'          => 'java',
  • 在其上插入下列敘述:
 
    'lua'          => 'lua',

這樣就能正確顯示Lua的高亮度外觀了:

-- this code sends the CTRL+W key combination, which 
-- will usually close a window or tab within an application
-- 取得有焦點的視窗
local handle = acGetForegroundWindow()
--acMessageBox(handle,"ActiveWindow",1)

local handleTaskman = acFindWindowByTitleRegex("工作管理員")
local handleEvernote = acFindWindow("ENMainFrame")
local handleConEmu = acFindWindow("VirtualConsoleClass")
local handleIDEA = acFindWindow("SunAwtFrame")
-- acMessageBox(handleEvernote,"handle Evernote",1)

if (handle == handleTaskman) or (handle == handleEvernote)
then
  acSendKeys("%{F_4}")
elseif (handle == handleConEmu) then
  acSendKeys("@%{DELETE}")
elseif (handle == handleIDEA) then
  acSendKeys("^{F_4}")
else
  acSendKeys("^w")
end


##

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 讓WordPress SyntaxHighlighter Evolved外掛能顯示Lua語法 appeared first on 簡睿隨筆.

Java程式庫Markdown4J簡介

$
0
0

大約兩年前我們的一個內部知識管理網頁系統(使用Java)決定採用Markdown語法,好讓輸入能更簡便些,當時使用的Markdown程式庫是JMD(Java for MarkDown),JMD是MarkdownSharp的移植(MarkdownSharp當然是C#的版本),使用以來有個困擾的問題:底線的處理有問題。

當文字內容有底線經常造成內容只顯示到底線為止,必須手動將底線改成「&#95;」才會正常。最近另外找了別的程式庫:Markdown4J替換掉JMD,果然正常多了。

Markdown4J很簡單,自己也擴充了部份Markdown語法,可惜和常用的PHP Markdown Extra不相容。想整合Markdown到自己系統裡的朋友不妨試試。

簡單範例

  String sNewText = new Markdown4jProcessor().process(sOriginalText);


##

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post Java程式庫Markdown4J簡介 appeared first on 簡睿隨筆.

Gmail好用擴充之一:Snooze Your Email-讓郵件打瞌睡

$
0
0

Gmail的Snooze Your Email for Gmail擴充功能能讓我們把某封特定的郵件加上鬧鐘裝置(讓郵件打個盹兒),設定在一段時間後重新出現在眼前,當我們正在忙或湧入大量郵件時,就能善用這個擴充。

打瞌睡的擴充有兩個:

  1. Boomerang:適用於Firefox、Google Chrome與Safari,每月4.99美元
  2. Snooze Your Email for Gmail :免費,但只支援Google Chrome

對於使用Chrome的人而言,當然是使用免費的Snooze了。安裝Snooze後,〔貪睡〕按鈕就會出現在上方的功能列,在郵件裡按〔貪睡〕就能指定讓郵件打多久的瞌睡。
Snooze for Gmail

時間一到就會有提示顯示在系統匣,並且讓我們選擇開啟該封郵件或繼續讓它打盹兒。
Snooze popup

增加繁體中文版本

但可惜Snooze只有簡體中文,且在處理中文顯示時發生錯誤,導致功能選項會是亂碼:
@@

以下是臨時的解決步驟,除了增加繁體中文外,也把原本要顯示星期的亂碼改成日期。

步驟1

切換資料夾到Snooze擴充的安裝目錄,並建立zh_TW資料夾,再複製訊息字串檔到zh_TW:

 
cd C:\Users\使用者代碼\AppData\Local\Google\Chrome\User Data\Default\Extensions\pbmfoncgccdhoknelpglaacbgkclcape\3.2_0\_locales\
md zh_TW
copy zh\messages.json zh_TW

步驟2

messages.json是已經轉換成Unicode表示式的內容,我們可以用Java SDK的native2ascii.exe將它轉回中文。

{
   "LAST_ITEM_DO_NOT_REMOVE": {
      "message": "DO NOT REMOVE"
   },
   "Xhours": {
      "message": "$1\u5C0F\u65F6"
   },
   "Xmin": {
      "message": "$1\u5206\u949F"
   },
 
rem 將messages.json轉回中文內容存入另一個檔案
c:\jdk1.6\bin\native2ascii -encoding UTF-8 -reverse messages.json newmessages.json
rem 覆蓋messages.json
copy newmessages.json messages.json /y

檢查一下新產生的messages.json可以看到簡體中文,再用ConvertZ或MS-Word的簡轉繁將簡體中文轉成繁體:

{
   "LAST_ITEM_DO_NOT_REMOVE": {
      "message": "DO NOT REMOVE"
   },
   "Xhours": {
      "message": "$1小時"
   },
   "Xmin": {
      "message": "$1分鐘"
   },

步驟3

  1. 最後一個步驟是修改星期的亂碼問題,編輯下列檔案:
C:\Users\使用者代碼\AppData\Local\Google\Chrome\User Data\Default\Extensions\
pbmfoncgccdhoknelpglaacbgkclcape\3.2_0\js\content_script.js 
  1. 搜尋下列敘述:
 
addItem(params, {label:snoozeToThisDay.format("dddd"), attr:"snoozeInDays='" + a + "'"});
  1. 把"dddd"改成"isoDate":
 
addItem(params, {label:snoozeToThisDay.format("isoDate"), attr:"snoozeInDays='" + a + "'"});

修改後的檔案

修改後的檔案可由下列網址直接下載:


##

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post Gmail好用擴充之一:Snooze Your Email-讓郵件打瞌睡 appeared first on 簡睿隨筆.


Gmail好用擴充之二:用Astrid Tasks將郵件變成待辦事項

$
0
0

Gmail內部的工作表(Tasks,即待辦事項)功能比較陽春,可以安裝Remind Me – by Astrid應用程式來使用Astrid todo Manager(請參考拙作Nexus 7最推薦10大工作用Apps 十之三:任務管理 Astrid To-do與DGT GTD & To-do List)。安裝後在左上角的功能選項裡就會多出【Astrid Tasks】選項。
Astrid item

點擊Astrid Tasks後會在右下角顯示待辦清單,如果點擊清單項目右方的↗則能開啟這個指定的清單群組,而且能同時顯示一個以上的清單。

▼我的清單可以開一啟新的視窗
Astrid my tasks

▼同時顯示兩個清單
Astrid multiple

某封郵件必須列入待辦事項時,只要點擊上方的Remind Me按鈕,並填入額外資訊即可。
Astrid button

安裝Remind Me後同時也會在網址列右側多出按鈕,能設定成顯示Astrid待辦清單或新增任務,方便我們操作待辦事項。
Add task

新增好的待辦事項當然都能到astrid.com維護。

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post Gmail好用擴充之二:用Astrid Tasks將郵件變成待辦事項 appeared first on 簡睿隨筆.

Gmail好用擴充之三:與Facebook無縫整合的PowerInbox

$
0
0

如果你是Facebook或Twitter等社交網站的重度使用者的話,Gmail的PowerInbox擴充程式能讓Gmail和常見的社交網站整合在一起,使電子郵件和社交服務溶為一體、渾然天成。下面是使用前與使用後的對照:當我們收到Facebook寄來的信件時只會顯示通知的訊息,而使用PowerInbox並登入Facebook後,直接在Gmail裡就能看到該封通知的內容:

使用前 使用後
PowerInbox before PowerInbox after

安裝後在Gmail最頂端的工具列會多出【PowerInbox】選項,點擊後就能做顯示設定,例如是否要在Gmail側邊顯示嵌入Facebook或Twitter的即時內容。

PowerInbox menu

如果你想直接在處理郵件時就能直接在Gmail右側看到Facebook內容而不用另開新分頁的話,這個Sidebar功能是很方便的設計。

▼顯示在Gmail頁面最右側的PowerInbox Sidebar
PowerInbox Sidebar

PowerInbox的優點是一體兩面,在享受它的整合便利性的同時,也要注意可能讓你的工作效率因分心而打了折扣喔。

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post Gmail好用擴充之三:與Facebook無縫整合的PowerInbox appeared first on 簡睿隨筆.

使用Password Savvy網站來建立高強度密碼

$
0
0

如果你看過《網路帳號不要用懶人密碼!》,也看過《如何組成強固又容易記憶的密碼?》的話,就會意識到網路密碼的重要性,不僅密碼長度不能過短,也要複雜一點,不同的網路也要用不同的密碼,但又要容易記憶。這篇《How to Create Strong Passwords that You Can Remember the Quick and Easy Way》介紹的「Password Savvy™網站」提供了方便易用的密碼產生器供我們使用(sav·vy /ˈsævi/
(vt.)(vi.)理解,領悟理解能力,機智,悟性)。

Password Savvy

Password Savvy將密碼分成兩部份,在步驟1裡輸入兩個詞彙,在步驟2指定變化的幅度,最後組成高強度但又好記憶的密碼;步驟2的右方可以看到變化的說明,基本上是做字母對照變動,第2個詞彙則盡量保留原樣以方便記憶。如果經常為換密碼所苦的網友,Password Savvy提供了很好的起點。

與密碼相關的本站文章

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 使用Password Savvy網站來建立高強度密碼 appeared first on 簡睿隨筆.

用檔案總管的網址列執行命令

$
0
0

Stupid Geek Tricks: Run Commands in the Windows Explorer Address Bar》介紹了一個看來奇怪的小技巧:在檔案總管理視窗的網址列輸入能由PATH環境變數搜尋到的命令(.exe、.cmd或.bat)的話,就會被執行, 同時會以檔案總管所在位置當做當前資料夾。

▼在網址列輸入「cmd」會開啟停在C:\Backup的命令提示視窗
address field command

address field command

範例

以下的命令都能在網址列執行:

命令 說明
cmd /k your_cmd.bat 開啟視窗並執行your_cmd批次檔,且不關閉視窗
notepad test.txt 在目前位置建立新檔test.txt
xcopy android*.* e:\ 把目前資料夾裡的android*.*拷貝到E:\

測試過的Windows版本

  • Windows 7、Windows 8與Windows Server 2008 R2都能執行
  • Windows 2000無法執行
  • Windows XP未測試

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

PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 用檔案總管的網址列執行命令 appeared first on 簡睿隨筆.

便利的鎖定螢幕(LockScreen)的儀表板小工具:DashClock Widget

$
0
0

由這篇文章《The 10 Android Tablet Apps You Shouldnt Live Without》發現了一個好用的小工具:DashClock Widget,它將幾個常用的功能放到鎖定螢幕上,能讓我們一打開手機或平板就能立即得到即時資訊。如果你的Android是4.2以上的版本,那麼DashClock Widget非常值得一試。

DashClock 1

  • 天氣

    • 資料是來自Yahoo! 天氣
    • 溫度能設定為攝氏或華氏
    • 能指定一個捷徑,在鎖定螢幕在天氣位置輕觸就能在解鎖後立即執行設定好的動作

    ▼我設定了DGT GTD的快速添加,能快速的增加待辦任務,Google語音輸入能直接使用,試了一下發現正確率還滿高的 DashClock 2

  • Gmail
    • 顯示收件匣或優先收件匣的未讀郵件數
    • 若平板上有設定多個Gmail帳號也能指定一個來使用
  • 日曆:顯示下一個活動資訊
  • 未接來電:我的Nexus 7用不到這個功能…
  • 未讀取簡訊:我的Nexus 7用不到這個功能…
  • 下一個鬧鐘:顯示下一個鬧鐘資訊

除了預設的這些功能(DashClock稱為擴展)外,按設定視窗右上角的選項,就能由Google Play找到更多的DashClock Extension。

DashClock 3

例如:

  • DashClock Battery Extension
  • DashClock Custom Extension:提供了6個自訂擴展,能自行定義操作,如啟動應用程式、開啟網站、打電話給某人、編輯備忘、啟動捷徑等
  • DashClock Extension Facebook:顯示有幾則未讀的Facebook通知
  • DashClock Facebook Extension:顯示有幾則未讀的Facebook通知與訊息
  • DashClock Music Extension:目前只能顯示音樂資訊而無法做播放控制
  • DashClock Tasker Extension:與Tasker整合
  • …. (還有很多,自行測試囉)

DashClock Widget除了能在鎖定螢幕使用,也能把它拖到主螢幕上使用,利用調整大小就能把彙總資訊放到很大,而能同時顯示許多有用的訊息。

DashClock on Home screen

##

您可能也會有興趣的類似文章 PDF Plurk Google Bookmarks del.icio.us Live Add to favorites email

The post 便利的鎖定螢幕(LockScreen)的儀表板小工具:DashClock Widget appeared first on 簡睿隨筆.

Viewing all 897 articles
Browse latest View live