分類
Javascript

半浮動DIV區域

一般網頁利用CSS排版, 通常分為上中下三段, 分別為 top, main, footer.

其中在 main 做一些特效, 讓一個區域能在捲動時, 會固定在畫面上. 這樣的特效, 需要配合 javascript (或 jQuery ) 來進行才能達成, 先來看一下效果: link.

除了上(top), 中(main), 下(footer)外, 另外在 main 中還有一個 content 及 flow_div 兩個區域. 在向下捲動時, 若 flow_div 捲動超過畫面上方時, 則會變成固定在畫面上.

程式的實作方式利用 jQuery 來進行, 先看程式碼:

$(document).ready(function(){
    // calculate the original top
    var top = $('#flow_div').offset().top - parseFloat($('#flow_div').css('marginTop').replace(/auto/, 0));    
    $(window).scroll(function (event){
        var y = $(this).scrollTop();
        if(y>=top){
            $('#flow_div').addClass('fixed');
        }else{
            $('#flow_div').removeClass('fixed');
        }
    });
});

在 document ready 時, 先把 #flow_div 的 top 距離算出來, 接下來在 window 的 scroll event 裡, 把 window 的捲動距離算出來後, 和上述的 top 變數比較, 若是超過了, 就把 #flow_div 多加上一個 class 名為 fixed, 讓它固定, 反之則將 fixed class 移除, 也就是跟著畫面捲動.

其中 fixed class 內容重點在於: position: fixed; top: 0px; , 也就是固定在距離畫面上方為 0, 看起來就是浮在原來的內容之上, 若還沒有捲動, 就移除這個 class, 會跟著捲動.

很有意思的一個排版特效.

範例頁: http://sample.diary.tw/29/1.htm

分類
懶得分類

Google天氣API失效?!

之前一直用的好好的 Google 天氣 API, 今天同事回報異常, 經檢查後, 發現看起來是 Google 的問題, 不過回覆的訊息讓人摸不著頭緒, 如下:

(訪問 http://www.google.com/ig/api?hl=zh-tw&weather=taipei 的結果)

起先以為是用量過多爆了, 不過查了一下, 發現應該不是, 而且也找到相關的新聞訊息: http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/ 看起來應該是 Google 打算關掉的服務引起的, 而且上面的 copyright 還是 2009, 真是怪怪的.

接下來只好轉換用其他家的 weather api, 原本要用 http://www.wunderground.com/ 這家的, 但是是要收費的, 只好再找, 改用 yahoo 的, 參考 API 介紹: http://developer.yahoo.com/weather/ , 應用起來, 原本 Google Weather API 有的資訊他也都有, 只是都是英文的, 不過倒也不影響使用.

不過若是不知道地點的 w 代碼(WOEID), 可以先到 yahoo weather 上查: http://weather.yahoo.com/ 輸入 taipei, 將會重導到網址: http://weather.yahoo.com/taiwan/null/taipei-2306179/ 就知道 w 代碼是 2306179, 而 API URL 就會是: http://weather.yahooapis.com/forecastrss?w=2306179 預設氣溫單位是華氏, 若是要氣溫單位, 再多加參數 u=c 如: http://weather.yahooapis.com/forecastrss?w=2306179&u=c

回應的內容也都是 xml 格式, 可以容易利用程式實作取出, 花了幾十分鐘的時間, 把原來的 api 由 Google 改到 Yahoo 完成.

附上部分台灣的 WOEID:

2306155 Yungkang City, TW (永康市)
2306179 Taipei City, TW (台北市)
2306180 Kaohsiung City, TW (高雄市)
2306181 Taichung City, TW (台中市)

分類
Javascript

多個檔案上傳-multiple upload with HTML5

在以往 form 中使用上傳元件, 只能做單檔上傳, 一個 input type=file 只能做一個檔案, 若是需要做多個檔案同時上傳, 得需要使用多組 input type=file 或是利用 flash 來達成.

不過在 HTML5 中, 定義了 multiple 屬性, 讓 input type=file 可以同時傳上來多個檔案. 來看看用法吧.

<form method=post enctype='multipart/form-data'>
file(s):<input type="file" name=ufile id=ufile multiple />
<input type="submit" value="upload" / >
</form>

就這麼簡單, 在原來的 input type=file 多加個 multiple 即可, 這樣功能就可以達成多個檔案上傳了, 不過若是要限制檔案數, 就得要用 client javascript 來進行檢查, 在 onsubmit 時, 做個數檢查即可.

接下來就看範例囉, 放在這裡: http://sample.diary.tw/28/lm.php

這個範例利用了 file 及 size 屬性將上傳檔案的檔名及大小列出來, 不過不會上傳, 不用擔心, 純在客戶端執行的!

Facebook在Alexa上超越Google

最近的 Alexa 流量有排行變動了, 久居第一的 Google 於 8/2, 8/3間的到訪量被 Facebook 超越了, 真的有意思呢, 來看看圖表:

(圖表資料引用自 http://www.alexa.com/)

其他的前幾名不動, 不過拉開時間看一下,

(圖表資料引用自 http://www.alexa.com/)

似乎前面的到訪規則有些調整, 無論如何, 這個網路排行榜, 對應的網路世界競爭, 真的很激烈呢!

Google Fiber-光纖上網及Google TV服務

是的, 這個光纖上網是 Google Fiber 提供的, 目前在 Kansas City 開始實驗了.

http://fiber.google.com/about/

價格還真是便宜啊, 神奇的便宜:

1. Gigabit + TV: US $120/月 (2年約, 免US$300設定費), 有電視, 有寬頻上網
2. Gigabit Internet: US $70/月 (1年約, 免US$300設定費), 寬頻上網
3. Free Internet: US $300設定費(可分12個月 US$25), 上行1Mbps, 下行 5Mbps, 保證7年可用

這樣看起來, 只要 1Gbps 寬頻上網的話, 每個月只要 2100台幣, 真的很便宜. 不過目前是試辦階段, 未來不知狀況是如何, 但挺令人期待的.

看看影片介紹吧: 引用自: http://www.youtube.com/watch?v=A9v11qJTG8o

相關新聞資料:
http://www.bnext.com.tw/focus/view/cid/103/id/24055
http://www.ithome.com.tw/itadm/article.php?c=75215
http://www.techbang.com/posts/10244-google-launches-google-fiber-fibre-network-services-up-down-has-1000m

分類
懶得分類

iTunes台灣版本音樂可以買了

iTunes台灣版本音樂可以買了呢. 快來找找看有沒有你喜歡的歌呢?

可以線上先看看有沒有喜歡的歌手: http://itunes.apple.com/tw/genre/yin-le-liu-xing-le/id14?l=zh

重灌狂人這裡整理了低價促銷的一些專輯, 也還蠻值得參考的: http://briian.com/?p=8429

有 iDevice 的朋友們可以參考看看!

分類
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 網站可能有很大的關係呢.