仔細看了一下 Excel 另存成 PDF 的選項中,發現只要把「選項」->「發布內容」中的「整本活頁簿」勾起來,就可以把所有工作表匯出為單一 PDF 了:
2012年5月14日
[小技巧] 一次將 MS Excel 中的所有工作表匯出為單一 PDF
仔細看了一下 Excel 另存成 PDF 的選項中,發現只要把「選項」->「發布內容」中的「整本活頁簿」勾起來,就可以把所有工作表匯出為單一 PDF 了:
2012年4月11日
在 RHEL 6 設定 NIC Bonding 的注意事項 (&如何正確關閉 NetworkManager)
- /etc/modprobe.conf 已經被 deprecated 了,新的 config 檔要自己去 /etc/modprobe.d/ 目錄下新增 bonding.conf 檔案,內容只要寫「alias bond0 bonding」即可,原本的「options bond0 miimon=100 mode=1 primary=eth0」設定改為寫到 ifcfg-bond0 檔案中。
- 承上,在 ifcfg-bond0 中要寫「BONDING_OPTS="miimon=100 mode=active-backup primary=eth0"」,比起 mode=1 來說可是一目了然。
- 若在安裝過程中僅針對 eth0 設定固定 IP,則 RHEL 6 自動產生的 ifcfg-eth0 和 ifcfg-eth1 檔案內容差會很多,eth0 多了很多設定,例如「NAME」、「UUID」等 eth1 沒有的內容,因此最好分別編輯兩個檔案,不要先改好 eth0 以後直接用新的 eth0 檔案把原本的 eth1 檔案覆蓋掉,否則可能會造成 MAC Address / UUID / NAME 重複,進而衍生其他問題(詳見下一段)。
2012年3月17日
[ASPNET] CS0433之問題
所以今天就花了一些時間來追一下問題的發生點
I. 問題說明
此問題發生的時候會出現類似下面的訊息 (可以參考這討論串CS0433 的官方文件裡寫的很清楚
"在您的應用程式內參考的兩個不同組件包含了相同的命名空間和型別,使其產生了模稜兩可 (Ambiguity) 的情況。"
(但其實 Exception 的內容也講的很清楚了)
只是坎尼檢查了一下專案,感覺不是型別重複的問題
比較像 compiler 快取住某些型別,但重新建置專案之後也只維持一下子
點了幾個頁面之後,有引用到該型別的頁面又會出現此項問題
(都是有引用 Web User Control 的頁面出問題)
(在找解決方法的過程中,發現好像 Web User Control 常會引發這個問題?)
所以坎尼又默默地打開
II. 解決方案
首先,在這篇裡提到了3個情況- 不同的 aspx/ascx 引用了相同的 class 當作 code behind 的問題
- 因為更名造成有新舊兩種 dll
- User Control 的名稱和引用 User Control 的頁面名字一樣
嗯...實際測試之後似乎都不是這些問題,或應該是說,這些都不是主因
坎尼不死心地減少關鍵字,找到了這篇討論串 (其實前面放的討論串也有解法)
解法:在 Web.config 中,把 Compilation 的 batch 屬性設定為 false
batch 屬性在官方文件的說明為
"If True, eliminates the delay caused by the compilation required when you access a file for the first time. When this attribute is set to True, ASP.NET precompiles all the uncompiled files in a batch mode, which causes an even longer delay the first time the files are compiled. However, after this initial delay, the compilation delay is eliminated on subsequent access of the file."
大意大概是說:當需要該檔案且為第一次進入時才會 compile,以免造成 compile 時間過長,開發人員及客戶都會不爽
所以坎尼猜測就是因為這原因造成下列狀況
- A.aspx 引用 UCA.ascx (型別 UCA)
- B.aspx 引用 UCA.ascx (型別 UCA)
- 進入 A.aspx,進行 compile,沒出現問題
- 進入 B.aspx,進行 compile,此時有兩個 .dll 檔都有 UCA 型別
然後系統就混亂了『為什麼有兩個同名的人住在不同的地址,那我到底該去哪個地址找這個人?』
『這個地址明明就住大中天,你還要說你是小中天』
III. 小結
不過可能很多人有疑問:為什麼我自己用就好好的,是你自己的問題吧?
其實問題的原因就可能是坎尼之前有做過某些檔案的更名
然後在新增頁面時,就直接把前一頁的程式碼貼過來 (壞習慣啊…)
但也不確定是不是這樣就有可能造成這個問題
畢竟是很久之前的專案,記憶有點久遠…
總之,提供另一個可能 cs0433 的解決方案
希望對同樣遇到這個問題的人有所幫助
2012年3月9日
[Freetalk] 漫談程式設計-II
I. 錯誤訊息處理
校方希望全體師生都可以吃青菜,故舉辦了拍附近餐廳的青菜內容上傳的活動坎尼也很開心的點開網頁,看看大家的分享內容
但身為一個系統開發人員,注意網址列也是很正常的一件事
嗯,如第一張圖所示,是用 Query String 的方式傳送頁面資訊
很常見的作法,可以節省運算成本,也能有效地達到目的
但好像沒有資料也會顯示該頁,所以坎尼就稍微改了一下參數
但壞掉不要緊,這頁的問題是在它把錯誤訊息給吐出來了
「知道錯誤訊息不好嗎?」
給開發人員知道當然很好,可以馬上了解問題並進行解決
但是!!!
給使用者看到訊息的用意是? 難不成要使用者幫你 Debug 嗎?
還是說這是挑戰,看能不能釣到惡意攻擊的人?
這邊應該要做的是判斷頁數的大小,不合理的數字就該擋掉
II. 同場加映
坎尼想說這個網站會不會還有其他問題,所以就開始隨意瀏覽除了點連結之外還有改網址…
!!! (出現 FF 中遇敵的音效)
很明顯的,此站看來是舉辦了大家幫忙一起除錯的全民除錯活動
所以坎尼很好心的連過去 online_resource.php 看有沒有什麼可以幫上忙的
「咦? 奇怪,為什麼顯示 404 page not found? 」
「原來是有做直接存取的限制啊,坎尼放心了不少」
「………」(眉頭一皺,發現事情並不單純)
「不對,是 resource 拼成 resouce 了!!!!」
唉…就算程式沒寫好,英文也要練好啊…
by the way, 如果是系統不能控制的情況,請用 try…catch… 處理
像是 DB Server 當掉,使用者罵的是你而不是管 DB 的人員
(當然如果兩個都是同一個人管的…那…只能說很心酸)
III. 小結
錯誤訊息 (Error Log) 記錄請用 Log 工具會在頁面上顯示是開發中為了方便做的事,不代表可以在上線之後做
另外最好設計錯誤訊息的顯示格式,到底是 Warning 還是 Fatal
至少要處理的時候可以排出優先順序
Will 保哥在 網站建置不是件簡單的事 @ 打造網站的步驟 的回應也談到
”錯誤訊息在網站企畫階段就要設計。”
至於把訊息曝露給使用者可能會有什麼狀況呢?
可以參考一下同樣是保哥寫的 機會教育:從中華民國總統府網站被發現 XSS 漏洞講起
[Freetalk] 漫談程式設計-I
但最近在用某些資訊系統時,總覺得怎麼這麼不友善
看來程式魂還是在燒 XD
今天就來舉幾個資訊系統的例子,順便聊一下例子中的問題
I. 資料分類
所有有學過關聯式資料庫設計的人一定都聽過正規化沒吃過牛肉也要知道瘦肉精,就算不會用也應該會記得1NF、2NF…BCNF …
(不知道正規化有幾階的人請回去找老師或是問維基 資料庫正規化 )
剛好最近用了下面這個XX請修系統
從外表看起來除了 UI 不美觀似乎沒啥大問題
但一打開請修項目:喔喔喔喔喔
幾百個選項一起跳出來,真是令人嘆為觀止 我眼睛也為了找修理項目眼花…
很明顯的,這個請修項目大概只做了第一正規化
坎尼直覺其實可以分為:大類、次類、問題說明 (上圖)
這樣 user 在找的時候可以先選水電類,接著可以找到日光燈,接著再填寫問題
像目前系統做法,日後要是又多了100項
那豈不是要讓下拉選單突破天際瀏覽器邊框了?
當然也有正規化太複雜,導致效能降低的情況,這時候就是要反正規化
但坎尼相信這些資料的量應該還不至於因為正規化而產生瓶頸
當然同頁面的請修地點也有同樣的問題存在
剛好最近又蓋了新宿舍,選單瞬間又加了幾十間房間 orz
(1421的同學抱歉啦,如果有看到這篇可以私信給坎尼,再請你們喝飲料)
另外還有個問題,最前面的 610421 很明顯是 primary key 之類的資訊
基本上對使用者是無用的,而且還曝露出自己系統設計原則
設計對白「我是610421的學生,想問幾個問題 (下略)」
除非客服有很好的資訊系統輔助
不然除了通靈之外,鬼才會知道 610421 代表什麼
II. 小結
本來還想多舉個例子的,但篇幅太長就先到這邊下集待續… (富樫最近都沒休刊,所以坎尼也不能富奸)
2012年3月3日
Windows 8 Consumer Preview (Build 8250) 試玩心得
(題外話:我覺得這場發表會上場的 MS 主管講話都太快了,聽眾很少有時間去消化他們講的內容,相較之下還是 Apple 發表會比較精采,聽眾比較能體會這次發表的新產品到底是怎樣的 insanely great)
這次的測試設備規格如下 (大概3~4歲的 NB):
- Model: ASUS A8E
- CPU: Intel Core2 Duo T8300 2.40GHz
- Memory: 2GB
- 沒有平板/觸控螢幕/藍牙鍵盤之類的配件 Q_Q
現在網路上已經有很多簡介/試玩心得可以參考:
- Windows 8 消費者預覽版安裝方法建議與試玩報告-Page 2 介面變很多,關機在哪裡?
- [重灌狂人] 非學不可的14個 Windows 8「全新」鍵盤快速鍵
- [Engadget] Windows 8 消費者預覽版深入分析
傳統桌面環境的改進:
- 三年前在使用 Windows 7 Beta 的時候都要另外安裝 Virtual CloneDrive,現在 Windows 8 Consumer Preview 原生支援可掛載 iso 檔,相當方便,也不需要做「直接把 iso 檔解壓縮出來使用」的蠢事了。
- 新的工作管理員更強大了,介面變得更有現代感:
- 設定系統啟動時要執行的 services / 軟體可直接在工作管理員中執行,不用再執行 msconfig (視窗無法放大,超爛) 或者到「服務」的管理介面去設定了。
- 複製多個檔案的介面也有大幅改進,可隨時暫停/繼續/取消,聽說連休眠後都可以繼續複製:
- 新版的 Windows 檔案總管引進 Ribbon 介面,更方便了:
目前安裝成功的軟體:
Also installed:
2012-03-09 : Line PC Version, K-Lite Mega Codec 8.5, Google Earth
2012-03-10 : Visual Studio 11 Ultimate (of course this should work)
目前仍然不 work 的軟體(全部都用最新版測試):
- World Community Grid
- Google Chrome 官方安裝檔 (但可透過 Avast 7.0/Google Earth 順便安裝)
- Dropbox
- ImgBurn
- FileZilla client
- PicPick
- 7-zip - 2012-03-09 Update - alternative: bandizip (ref: http://steachs.com/archives/2464)
- PPS/PPTV
- VLC (可以裝 K-Lite Mega Codec 順便裝 Windows Media Player Classic)
- 新酷音 (在傳統桌面可改裝 Yahoo!輸入法,但在 Metro 介面只能用系統內建的簡中輸入法。在傳統桌面切換輸入法的熱鍵沒辦法改成 ctrl + space)
- Pidgin (可改裝很多人不愛用的 Windows Live Messenger 2011)
- Java & Eclipse
- PDF -XChange viewer (Windows 8 內建的 Reader App 可直接開啟 PDF<無分頁瀏覽功能>,若需要分頁瀏覽可用 Google Chrome 來開啟多個 PDF 檔案)
- VirtualCloneDrive (Windows 8 內建支援直接掛載 iso 檔)
最近發現一件事,在傳統桌面安裝了軟體以後,就算在安裝過程中選擇「Don't create Desktop Shortcuts』,還是會在 Metro 桌面留下一大堆應用程式捷徑,讓 Metro 桌面變的很亂,夾雜了一大堆非 Metro style 的圖示。此時只要在所有想要移除的捷徑上按右鍵,就可以將要移除的圖示標記起來(右上角會顯示打勾):
然後再按一下左下角的「Unpin from Start」按鈕,就可以讓 Metro 桌面回復乾乾淨淨的狀態啦!
由於一些常用的軟體(Dropbox, FileZilla client, 7-zip)沒辦法安裝,因此我暫時不考慮用 Windows 8 Consumer Preview 當做工作機 ,相信正式版推出以後問題都可以解決。至於公司內的老舊系統 (XP/IE6 Only) 就只能期待 Windows 8 的傳統桌面模式也可以像 Windows 7 一樣裝個 XP Mode 了 (嘆)。
希望 Windows 8 趕快推出,新系統除了有很多改進的地方,用起來總是比較好玩阿!
2012年2月20日
[Solaris 10]在內建的ftp服務中把使用者限定在自己的家目錄中 (chroot)
參考:How to restrict user to a specific directory in Solaris 10 (詳細步驟列在 Bazookaaa 於2010-10-20 的回覆中)
其實 Bazookaaa 的說明已經很清楚了,以下補充幾點:
- Bazookaaa 的步驟從 create new user 開始,但是對現有的 user 也可以作到 chroot,只要略過 Step1,直接執行 Step2 中的 ftpconfig -d /path/to/user's/home/directory 就可以了。
- 在 Step3 中提到要在 /etc/ftpd/ftpaccess 檔案中以「guestuser username」的方式新增要 chroot 的 user,若要對一個以上的 user 實作 chroot,要每個帳號寫一行,範例如下:
guestuser user1
guestuser user2 - Step4 & Step5 只是要再仔細 check 一下,基本上不需要進行特別的調整。
實作過一次以後就不覺得很難了,只是第一次要實作的時候資料很難找就是了 XD
Google Spreadsheet 裡用規則運算式
最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D
-
好久沒開 Chart Control 議題了 剛好前陣子 Codeplex 出現可以輕鬆建立 Excel 檔案的 Library- NPOI 於是坎尼想說研究一下,看能不能把 Chart Control 匯出圖片到 Excel 中 沒想到只花了不到1小時就研究...
-
今天坎尼去上課老師講了一題很有趣的題目 所以回到家坎尼就順手試驗了一下 I. XOR (exclusive OR) XOR 是邏輯運算子之一,定義為: 當兩數的值不同才為 true,相同則為 false 其他相關說明可以參考 維基百科:XOR II. 程式 以往的做法會宣...
-
雖然在圖片上直接按右鍵就可以另存圖片 (沒設定權限的話 不過客戶還是想要有個按鈕能讓圖片下載 所以坎尼只好再想辦法滿足客戶的需求 UI設定 首先,在畫面上準備好下載按鈕和圖表 順便設定一下樣式和內容,這部分之前講過很多次就不多談了 撰寫按鈕事件 先宣告 System.IO.Mem...








