分類
Windows

單一目錄內大量檔案排序

這個是一個很麻煩的狀況, 在 windows 下, 使用 NTFS 的 Filesystem, 單一目錄可以承載的檔案量其實很大(是 2^32 -1 也就是 4294967295, 其實是整個 volume 不是單一目錄, 但這個上限應該在檔案存滿前是不太會到達的), 但是若是要排序檔案大小, 雖然說可以使用 dir /os 的方式來進行, 不過因為數量過大, 所以往往會很久很久, 而且會鎖住 filesystem.

接下來是實務上要將單一目錄下數量很多的檔案進行依大小排序時的作法.

1. 先將檔案列出來, 但不用排序: dir > dir.txt

2. 利用 sort 指令來進行排序: sort dir.txt /+25 > dirsorted.txt

這個 /+25 可以利用 sort /? 來看參數的用法, 其實是 dir 出來的內容, 列舉如下:

其中的第 25欄起是檔案的大小, 依此來排序的指定方式. 而後面的輸出轉向 > 就是用來將排序好的內容再轉存到另外一個檔去.

利用這樣的方式, 可以避免 dir /os 的時間過久, 直接 dir 輸出結果, 再利用 sort 指令來進行排序, 除了可以分開作業外, 還能大幅提高排序的時間, 是比較理想的方式.

當然, 若是檔案數量不多的時候, 是沒什麼差異的, 當檔案數量多的時候, 可是很有用的!

PS: NTFS 單一 volume 下的檔案數量上限:
http://technet.microsoft.com/en-us/library/cc938432.aspx
http://kewang.pixnet.net/blog/post/24972241

分類
手機大未來

Android手機推薦安裝軟體

朋友最近買了華碩變形平板, 請我推薦一些 Android 程式, 這裡是 Android 的軟硬體介紹的網站, 可以自行查找看一些新的資訊及軟體:

1. iapp 的 Android 評測: http://iapp.com.tw/cat/android-review/

2. 香港的 Android-APK: http://www.android-apk.com/

軟體 APP 的部分如下:

1. AirDroid: 可以透過 desktop pc 來直接管理手機內的通訊錄, 簡訊, 檔案(上下傳), 而且只需要透過 wifi, 不需要透過 usb 連接線, 十分方便好用: http://iapp.com.tw/2012/05/airdroid-app-review-for-android/

2. Astro File Manager: 就是手機內的檔案總管, 可以直接管理手機內的檔案: http://iapp.com.tw/2012/05/airdroid-app-review-for-android/

3. QR-Code 工具, QuickMark: 是在 iphone 上要錢, 在 Android 免費的好用 QR-Code 工具: https://play.google.com/store/apps/details?id=tw.com.quickmark

4. MoboPlayer: 各式影音檔都可以播放的播放器, 也支援字幕等功能: https://play.google.com/store/apps/details?id=com.clov4r.android.nil

其他軟體就依個人喜好來安裝囉, 像是個人比較喜歡的:

可離線地圖, WorldExplorer: https://play.google.com/store/apps/details?id=com.iwexplorer.android

有在開車, 管理加油的工具: https://play.google.com/store/apps/details?id=com.aguirre.android.mycar.activity

學習英文, 英文單字王: https://play.google.com/store/apps/details?id=com.kut.engking

遊戲的話, 就不多做介紹了, 像 Angry Birds, Skater Boy, Fruit Slice, Doodle Jump 都不錯呢!

神奇的線上數學解題II-WolframAlpha

之前介紹過一款: https://diary.tw/archives/720

這次這個 wolframalpha 更好用, 更有趣, 網址如下:

http://www.wolframalpha.com/

基本上, 輸入後, 會有美美的求解結果, 很有意思, 而且很實用, 例如以下方程式:

3x+y=4
4x-y=3

輸入 wolframalpha 後得:

http://www.wolframalpha.com/input/?i=3x%2By%3D4%2C+4x-y%3D3

畫面如下:

不僅僅是把解求出來, 還有一步一步的算式, 以及對應的方程式圖, 再來試看看其他的:

3x^3+2x^2-7x+2=0

解答如下: http://www.wolframalpha.com/input/?i=3x^3%2B2x^2-7x%2B2%3D0

真的是太好用了呢!

另外像是語意分析的查詢也很有用:

3 months ago:

http://www.wolframalpha.com/input/?i=3+months+ago

真是一堆應用啊, 其實這就是大名鼎鼎的 siri 後面用的查詢引擎呢, 很強大!

突然想到, 在唸書時有用到一套軟體叫 Mathematica, 就是這家公司 Wolfram 出品的呢: http://www.wolfram.com/mathematica/

分類
Javascript

Masonry自動排版介面與InfiniteScroll無限捲動介面

Masonry 和 InfiniteScroll 都是 jQuery 上的 plugin!

Masonry 是利用 css 方式, 將介面重新排版, 使得畫面不會因為不規則區塊排起來而不好看, 可以看一下 Masonry 官網上的說一看就知道這樣的排版方式的感覺:

http://masonry.desandro.com/

而 InfiniteScroll 則是利用 jQuery 背後 ajax 方式, 將一頁一頁的網頁, 透過不換頁, 直接 append 到目前的頁面上, 達成向下捲動而看更多內容的功能. 像是 facebook 動態牆, 就是這樣的應用情境. 官方網站:

http://www.infinite-scroll.com/

這兩個功能結合就變成了這樣: http://sample.diary.tw/flickrsearch/?q=rainbow (利用了 flickr api 與 Masonry 和 InfiniteScroll 做出的效果. (記得要向下捲動, 才會出現看完了繼續產出內容的效果), 其中後面的 q 可以自行替代其他的英文單字, 因為對該文字沒有特別處理, 所以只能使用一個英文單字.

來看看怎麼做這個效果吧.

InfiniteScroll 是利用了 jQuery 在背景取出下一頁的內容, 並將指定的 selector 資料 append 到目前的網頁上, 所以最小的程式碼是這樣:

// infinitescroll() is called on the element that surrounds 
// the items you will be loading more of
  $('#content').infinitescroll({
 
    navSelector  : "div.navigation",            
                   // selector for the paged navigation (it will be hidden)
    nextSelector : "div.navigation a:first",    
                   // selector for the NEXT link (to page 2)
    itemSelector : "#content div.post"          
                   // selector for all items you'll retrieve
  });

就是將本頁的容器, 利用 infinitescroll 函式呼叫, 並傳入 3個重要參數, 分別為 navSelector, 這個是指當 page 瀏覽到這個 selector 指定物件時, 進行 load 下一頁內容, 而要 load 的內容, 就是 nextSelector 的物件中的 url, 至於第三個參數 itemSelector 則是 load 到網頁後, 要帶出來放到目前頁面上的內容項目.

以上面的例子來看, 網頁的介面會是如下:

//....
<div id='content'>
  <div class='post'>
//.... post content
  </div>
</div>
//... other footer
<div class='navigation'><a href='page-2.htm'></a></div>
//...

這樣一來, 當本頁被瀏覽最下面的 <div class=’navigation’> 時, 就會被觸發去 load page-2.htm 中的內容,並找出 <div class=’post’>…</div> 將內容放到 <div id=’content’>..</div> 中最後一個 post, 如此重覆下去, 就會有往下捲而一直往後看的內容, 記得每頁下面都要放對應的下一頁, 就會被 infinitescroll 偵測到, 並往下疊代下去.

再來看看 Masonry 的效果, 用法也很單純, 最小程式碼如下:

$('#container').masonry({
  itemSelector: '.box'
});

只需要指定要排版的容器 container, 呼叫 masonry 傳入 itemSelector 就是內容元素, 就可以自動排版, 多種效果可以參考官方網站的 demo.

比較特別的是兩者結合的這個 demo: http://masonry.desandro.com/demos/infinite-scroll.html , 參考這個 demo 可以做出又達成自動排版, 又達成無限捲動的功能, 效果就參考上面的 sample: http://sample.diary.tw/flickrsearch/?q=rainbow

幾個點要注意:
1. navSelector 一定是要找最下面的物件, 效果才會好, 記得.
2. 若是排版內容有圖, 可以參考 Masonry 的 sample: http://masonry.desandro.com/demos/images.html 將排版呼叫寫在 container 的 imagesLoaded 事件後, 如下:

var $container = $('#container');

$container.imagesLoaded( function(){
  $container.masonry({
    itemSelector : '.box'
  });
});

才不會有位置算不準的狀況.
3. 若要有動畫排版效果, 可以在 Masonry 參數中多加上 isAnimated: true;
4. 排版若要美觀, 要盡量統一內容物寬度, 就不會排得2266 (可以利用 css 自行安排)
5. InfiniteScroll 的 loading 的 css 是 #infscr-loading 這個, 可自行設計.

忘了說, 這次 sample 使用的 flickr api 是 photo search: http://www.flickr.com/services/api/flickr.photos.search.html

這種 layout 流行和 fb 及最近火紅的 pinterest 網站可能有很大的關係呢.

Google Drive現身-與其他雲端空間介紹

之前新聞很多, 一直傳即將上線的消息, 於今天凌晨上線了:

https://drive.google.com/

這個 Google Drive 提供了免費的 5GB 空間可供應用, 重點在於有多樣化的客戶端軟體, 可以同時支援 PC (Windows), MAC, Android, iPhone & iPad (稍後推出) 的多種客戶端, 並進行檔案同步.

登入後並啟用後, 發現原來在 Google Docs 中的資料都轉進來了, 所以也整合了原本 Google Docs 的功能, 試著上傳非 Google Docs 的檔案, 像是影音檔, 並不支援線上播放, 只能進行下載, 另外像是分享的功能, 是以協同作業為出發的設計, 像是之前的 Dropbox.com 的方式, 當然, 也是原本 Google Docs 的共用方式, 必須是有帳號設定的狀況下, 可以進行檔案共用.

反觀新版本的 Dropbox.com 最近也提供了直接分享的功能, 不需要也是 Dropbox.com 的用戶才能進行共用, 只需要有一個該檔案的共用連結就可以進行下載了(介紹 Link).

這個功能是 Box.net 原來就有的, 也就是 Box.net 除了共用機制外, 原本就提供了直接分享的功能, 看起來是更完整的功能, 再加上 Dropbox.com 及 Box.net 對於影音檔的提供了線上播放功能, 強化了影音檔的應用能力. 不過 Dropbox.com及 Box.net 沒有提供 Document 的編輯功能, Dropbox.com 是只下載, Box.net 則是會利用啟用 Google Docs 的功能來進行編輯(需要使用 Google Account 驗證).

看起來是各有其優缺點, 不過 Dropbox.com 及 Box.net 的客戶端一樣都有多樣的客戶端同步軟體, 加上空間又提供的相對於 Google Drive 大得多, (應該是說增加空間的活動多, 例如推薦用戶或完成任務), 這個雲端硬碟之戰, 煙硝味很重呢.

台灣也有中華電信提供的個人雲服務(http://www.hamicloud.net/), 其中也有雲端硬碟的空間, 也整合了之前的 Xuite WebHD (原本的線上空間)進來, 也十分積極.

大家可以多應用比較看看, 不過一句老話, 重要資料還是要自行備份, 有時候線上的空間並不保證 100% 都可以用, 方便是一定的, 但備份還是自己要做好呢!

分類
好用軟體

Google的Page Speed網站效能調校建議

網站上線後, 需要做效能調校評估及建議, 可以使用這個 Google 的 Page Speed 效能調校建議工具:

https://developers.google.com/pagespeed/

將網址輸入後, 等待一會兒就會有資料出來, 以及許多建議讓您了解網頁效能的瓶頸所在及如何調整會更好.

測試結果如下:
分為紅色的 High priority, 黃色的 Medium priority, 藍色的 Low priority, 另外還會有灰色的 Experimental rules, 這些讓你來進行網頁的優化調整. 當然你已經做到的他是用綠色的 Already done! 來顯示.

這樣的工具其實還不少, 像是這個 Pingdom Tools 有相當視覺化的呈現方式, 把頁面上每個元素的下載狀況都秀出來, 方便找出頁面上的效能問題, 和 Google Page Speed 來比的話, 前者是細部下載狀況, 找出效能瓶頸, 而後者是全面性的, 給出調整建議, 交叉使用可以更容易地將網頁效能調整好.

繼續閱讀:
http://www.smashingapps.com/2012/02/14/15-excellent-tools-for-profiling-your-websites-speed.html

分類
Javascript

線上幸運抽獎(Lucky draw)

繼上次的線上賓果產生器( https://diary.tw/archives/1185 )後, 再來補個線上幸運抽獎, 這個適合尾牙活動或是隨機抽獎時使用.

網址: http://sample.diary.tw/lucky-draw/

一樣是使用 jQuery, 純 client 執行的程式, 不過這次多配合了 jQuery UI 中的 dialog, 以方便快速編輯 html 中的 select 物件.

工作方式很簡單, 第一動是先輸入流水號, 例如預設的 1~100, 按下產生後, 生成 1~100 號在抽獎名單中, 若有跳號或是不規則號, 都可以藉由雙擊抽獎名單的 select 元件進行編輯, 利用 textarea 進行編輯, 一行一項, 空行會自行避開, 自行貼入或編輯清單.

再來就是輸入獎項了, 一般應該是由小到大排(通常的抽獎順序啦), 當然也可以隨興輸入, 一樣雙擊獎項的 select 會跳出編輯的 dialog.

最後就是令人期待的抽獎了, 抽獎鈕按下時, 若在獎項有被選取的項目, 會先抽該項目的得獎者, 若沒有則從最上面的獎項開始抽起. 每次抽都會隨機排序抽獎名單中的號碼, 所以很隨機, 抽出來的獎項及得獎者會填入最下方的抽獎結果.

隨時都可以再加入獎項(直接再進行編輯即可), 例如加碼, 紅包等, 再繼續抽獎, 而最後的抽獎結果是可以雙擊跳出 dialog 中有 textarea 供複製出來應用, 不過是不能編輯的(才不會被修改), 這樣就完成了這個線上幸運抽獎.

其中編輯 select 及列出 select 內容的 function 是共用的, 都是將其 dblclick 呼叫 editSelect, 如下:

分類
Javascript

線上賓果產生器

今天花了一點時間寫個”線上賓果產生器”, 是個全 javascript 的程式, 主要是可以給想玩賓果, 但又不想畫格子及填數字的朋友們, 有個小工具可用.

這裡用了一個隨機排序的函數, 引用自: http://javascript.about.com/library/blsort4.htm, 程式如下:

Array.prototype.shuffle = function() {
  var s = [];
  while (this.length) s.push(this.splice(Math.random() * this.length, 1));
  while (s.length) this.push(s.pop());
  return this;
}

利用了 Math.random() 隨機將一個陣列中的各元素互相交換的方式, 把陣列內容打散, 達成隨機排序, 使用方式就直接呼叫 aryNum.shuffle() 即可, 其中 aryNum 是一個自訂的陣列變數, 一開始先將 n*n 的數字填入, 再利用 shuffle() 函數進行打散.

另外值得一提的是利用了 @media print 的方式, 將操作的表單在列印時隱藏起來, 方便列印出來的賓果表格更清楚, 是一個 css 的技巧, 如下:

@media print
{
  .noprint {
    display: none;
        
  }
}

請到這裡玩看看: 線上賓果產生器: http://sample.diary.tw/bingo/

只需要填入維度及組數, 馬上就生出來所需要的賓果表格, 除了原來的 5*5 外, 想玩 6*6, 7*7 也不是問題. 快來玩看看囉!

分類
好用軟體

TCPView工具新增功能查詢流量

新版 Windows SystInternal 工具 TCPView (3.05) , 除了原來的 process 對應的 connection status 外, 右側多增加了 4個欄位的資訊, Sent Packets, Sent Bytes, Rcvd Packets, Rcvd Bytes.

畫面如下:

如此一來, 對於在查詢 prcoess / connection / 流量上, 就有更完整的資訊可以取得了.

官方網址: http://technet.microsoft.com/en-us/sysinternals/bb897437
官方下載: http://download.sysinternals.com/Files/TCPView.zip

分類
Database

[MSSQL]文字民國日期轉西元日期

剛朋友問到有關存在 MSSQL 中的文字資料是民國日期, 例如 67/3/12 這樣的格式, 要轉出西元日期, 其實還蠻單純的, 只需要找出第一個 ‘/’ 在什麼位置, 就很容易了, 查找 ‘/’ 的函數使用 charindex, 如下:

declare @a varchar(20)
select @a = '67/6/7'
select charindex('/', @a)

這樣取出的值為 3, 也就是第 3個字元, 而下一步就是取出年的部份, 如下:

declare @a varchar(20)
select @a = '67/6/7'
select substring(@a, 1, charindex('/', @a)-1)

這樣取出的值為 67, 於是要轉出西元年其實就是先轉成 int 後, 加上 1911 再轉回字串後, 加回原來的月/日的部分, 如下:

declare @a varchar(20)
select @a = '67/6/7'
select convert(varchar, convert(int, substring(@a, 1, charindex('/', @a)-1))+1911)+ substring(@a, charindex('/', @a), 10)

其中最後一個 substring 中的取出長度 hardcode 寫 10 是一個小技巧, 不用真的算出取出長度, 而固定給一個大於此字串的長度, 就可以取出完整字串, 所以上面的結果就會是 1978/6/7, 而 substring 最後一個參數可以參考線上說明:

http://msdn.microsoft.com/en-us/library/ms187748.aspx

其中的 length_expression 參數的說明, 其中有提到

If the sum of start_expression and length_expression is greater than the number of characters in value_expression, the whole value expression beginning at start_expression is returned.

如此一來, 便可以一次在 sql command 中將原存在資料庫中的民國年日期轉出為西元年, 例如 table:

userid birthday
—————
1 67/3/12
2 79/2/11

語法如下:

select userid, birthday, convert(varchar, convert(int, substring(birthday, 1, charindex('/', birthday)-1))+1911)+ substring(birthday, charindex('/', birthday), 10) as birthday2 from table1

會取出:

userid birthday birthday2
————————
1 67/3/12 1978/3/12
2 79/2/11 1990/2/11

給大家參考!