2014-03-26
[CaseStudy][WinDbg] Hang
User 發生了Hang Issue
[開始查案]
根據收到的Dump 通常會發生Hang 應該是resource被佔住 或是deadlock之類的
所以第一步
!locks
0: kd> !locks
**** DUMP OF ALL RESOURCE OBJECTS ****
KD: Scanning for held locks...
Resource @ Ntfs!NtfsData (0x88b01474) Exclusively owned
Threads: 84acd020-01<*>
KD: Scanning for held locks..
Resource @ 0x851d756c Exclusively owned
Contention Count = 41
NumberOfSharedWaiters = 29
Threads: 84e79d48-02<*> 85c98790-01 863ec940-01 86557030-01
84bc9d48-01 8603aa60-01 84e7b8f0-01 861073b8-01
8639f5b0-01 84e42648-01 84acd020-01 84c1da58-01
84cf3d48-01 84c48030-01 84c54a88-01 84e3f078-01
8602ec58-01 86203d48-01 85ecd660-01 86202640-01
8620f310-01 862bc030-01 862a9d48-01 84e79410-01
86434c78-01 86a5fa60-01 863f82b8-01 8645d998-01
8605f030-01 86a46a08-01
KD: Scanning for held locks..............................................................
Resource @ 0x85d8ae68 Exclusively owned
Contention Count = 2
Threads: 8605f030-01<*>
KD: Scanning for held locks.
Resource @ 0x85d88840 Exclusively owned
Contention Count = 1
NumberOfExclusiveWaiters = 1
Threads: 8605f030-01<*>
Threads Waiting On Exclusive Access:
860d88d8
KD: Scanning for held locks...................................................................................................................................................................................................................................
Resource @ 0x84d8ff34 Shared 1 owning threads
Contention Count = 2
NumberOfExclusiveWaiters = 1
Threads: 84acd420-01<*>
Threads Waiting On Exclusive Access:
84e79d48
KD: Scanning for held locks..............................
10293 total locks, 5 locks currently held
Threads: 84e79d48-02<*> 打*代表 這條Thread 佔了這個resource
從上面資訊來看
最下面的Resource
Resource @ 0x84d8ff34 Shared 1 owning threads
卡住了Thread 84e79d48
而Thread 84e79d48 的Resource
Resource @ 0x851d756c Exclusively owned
卡住了Thread 8605f030
Resource @ 0x85d88840 Exclusively owned
Resource @ 0x85d8ae68 Exclusively owned
所以才造成System Hang
讓我們來看看罪魁禍首 Thread 84e79d48到底在幹嘛
0: kd> !thread 84acd420
THREAD 84acd420 Cid 0004.001c Teb: 00000000 Win32Thread: 00000000 WAIT: (WrQueue) UserMode Non-Alertable
82948600 QueueObject
Not impersonating
DeviceMap 89a088d8
Owning Process 84a41a20 Image: System
Attached Process N/A Image: N/A
Wait Start TickCount 23593 Ticks: 1024 (0:00:00:15.974)
Context Switch Count 1966 IdealProcessor: 0
UserTime 00:00:00.000
KernelTime 00:00:00.483
Win32 Start Address nt!ExpWorkerThread (0x8288999e)
Stack Init 8ad0bfd0 Current 8ad0bc10 Base 8ad0c000 Limit 8ad09000 Call 0
Priority 14 BasePriority 13 UnusualBoost 1 ForegroundBoost 0 IoPriority 2 PagePriority 5
ChildEBP RetAddr Args to Child
8ad0bc28 8288a69d 84acd420 8293af08 82937d20 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])
8ad0bc60 828894f7 84acd4e0 84acd420 82948600 nt!KiSwapThread+0x266
8ad0bc88 8288a1ed 84acd420 84acd4e0 00000000 nt!KiCommitThreadWait+0x1df
8ad0bcec 82889a83 82948600 00000001 00000000 nt!KeRemoveQueueEx+0x4f8
8ad0bd50 82a15f5e 00000000 a9364519 00000000 nt!ExpWorkerThread+0xe5
8ad0bd90 828bd219 8288999e 00000000 00000000 nt!PspSystemThreadStartup+0x9e
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x19
結果看來很正常 看不出什麼東西這時候來看看Resource吧
對Resource @ 0x84d8ff34位置下dt
dt 0x84d8ff34 _eresource
Why _eresource 我想應該是ntdll的變數吧
總之 我們看第7個變數
+0x018 OwnerEntry : _OWNER_ENTRY
所以一樣對它下dt
dt 0x84d8ff34 _eresource OwnerEntry.
要記得打"." 才能看更多資訊
//
// Checking of resource of 0x84d8ff34.
//
0: kd> dt 0x84d8ff34 _eresource
ntdll!_ERESOURCE
+0x000 SystemResourcesList : _LIST_ENTRY [ 0x84d8f884 - 0x84d8fed4 ]
+0x008 OwnerTable : 0x84d8e158 _OWNER_ENTRY
+0x00c ActiveCount : 0n1
+0x00e Flag : 4
+0x010 SharedWaiters : (null)
+0x014 ExclusiveWaiters : 0x84d8f838 _KEVENT
+0x018 OwnerEntry : _OWNER_ENTRY
+0x020 ActiveEntries : 1
+0x024 ContentionCount : 2
+0x028 NumberOfSharedWaiters : 0
+0x02c NumberOfExclusiveWaiters : 1
+0x030 Address : (null)
+0x030 CreatorBackTraceIndex : 0
+0x034 SpinLock : 0
//
// no thread exclusively owns this resource.
//
0: kd> dt 0x84d8ff34 _eresource OwnerEntry.
ntdll!_ERESOURCE
+0x018 OwnerEntry :
+0x000 OwnerThread : 0
+0x004 IoPriorityBoosted : 0y0
+0x004 OwnerReferenced : 0y0
+0x004 OwnerCount : 0y000000000000000000000000000000 (0)
+0x004 TableSize : 0
沒東西
來看看OwnerTable吧
dt 0x84d8e158 _OWNER_ENTRY
看到TableSize = 7 所以後面可能有7個Entry
我們可以先用 ?? sizeof(_OWNER_ENTRY) 看OWNER_ENTRY的size
unsigned int 8
所以我們知道下一個Entry 就要再+8
dt 0x84d8e160 _OWNER_ENTRY
0: kd> dt 0x84d8e158 _OWNER_ENTRY ntdll!_OWNER_ENTRY +0x000 OwnerThread : 0 +0x004 IoPriorityBoosted : 0y1 +0x004 OwnerReferenced : 0y1 +0x004 OwnerCount : 0y000000000000000000000000000001 (0x1) +0x004 TableSize : 7 0: kd> dt 0x84d8e160 _OWNER_ENTRY ntdll!_OWNER_ENTRY +0x000 OwnerThread : 0x84acd420 ---> thread of 0x84acd420 shared owns this resource +0x004 IoPriorityBoosted : 0y0 +0x004 OwnerReferenced : 0y0 +0x004 OwnerCount : 0y000000000000000000000000000001 (0x1) +0x004 TableSize : 4從第二個Entry看到了 OwnerThread 0x84acd420
結果還是這條System Thread呀
所以案子到這邊查不下去了
我們僅知道System Thread這個Resource沒有釋放
所以Lock住 其他需要Exclusively owned的Resource 也造成了Hang
2014-03-22
[CaseStudy][WinDbg] Crash - Break instruction exception
User 從Agent打開log 立即發生了Crash
[開始查案]
根據收到的Dump
0:000> !analyze -v FAULTING_IP: +ff79600 00000000`00000000 ?? ??? EXCEPTION_RECORD: ffffffffffffffff -- (.exr 0xffffffffffffffff) ExceptionAddress: 0000000000000000 ExceptionCode: 80000003 (Break instruction exception) ExceptionFlags: 00000000 NumberParameters: 0 STACK_TEXT: 00000000`0011f9f8 000007fe`fd8b1430 : 00000000`01e975d0 00000000`7752300a 00000000`01e975d0 00000000`01e9d868 : ntdll!NtWaitForMultipleObjects+0xa 00000000`0011fa00 00000000`77511220 : 00000000`0011fb40 00000000`0011fb30 00000000`00000000 00000000`00000000 : KERNELBASE!WaitForMultipleObjectsEx+0xe8 00000000`0011fb00 00000001`40034e09 : 00000000`00000000 7fffffff`fffffffe 00000001`4012d390 00000000`00000000 : kernel32!WaitForMultipleObjects+0xb0 00000000`0011fb90 00000001`4002afc7 : 00000001`40137fc0 00000000`00000000 00000000`00000000 00000000`001c3a00 : XXX!CWindowManagerClient::Run+0xe9 ...(Ignore)只知道原因是Break instruction exception 但是從這個Stack看起來卻沒有幫助 因為這條Stack就是顯示主程式起來之後在等結束
正常我們會從FOLLOWUP_IP來看 預計下一步會執行的點
FOLLOWUP_IP: XXX!CWindowManagerClient::Run+e9 00000001`40034e09 3d81000000 cmp eax,81h 0:000> uf 00000001`40034e09 XXX!CWindowManagerClient::Run+0xd1 [XXX\windowmanagerclient.cpp @ 168]: 168 00000001`40034df1 41b901000000 mov r9d,1 168 00000001`40034df7 4533c0 xor r8d,r8d 168 00000001`40034dfa 488d542468 lea rdx,[rsp+68h] 168 00000001`40034dff 418d4901 lea ecx,[r9+1] 168 00000001`40034e03 ff1537080a00 call qword ptr [XXX!_imp_WaitForMultipleObjects (00000001`400d5640)] 169 00000001`40034e09 3d81000000 cmp eax,81h 169 00000001`40034e0e 7775 ja XXX!CWindowManagerClient::Run+0x165 (00000001`40034e85)
可以看出就是在00000001`40034e03 Call _imp_WaitForMultipleObjects時出了問題
但是這樣還是看不出什麼端倪
所以先列出所有的thread 看是否有異狀
0:000> ~*knb ...(Ignore) ... 22 Id: 6b98.1eb0 Suspend: 0 Teb: 000007ff`fff7c000 Unfrozen # Child-SP RetAddr Call Site 00 00000000`09cb89c8 000007fe`fd8b1430 ntdll!NtWaitForMultipleObjects+0xa 01 00000000`09cb89d0 00000000`77522ce3 KERNELBASE!WaitForMultipleObjectsEx+0xe8 02 00000000`09cb8ad0 00000000`77599105 kernel32!WaitForMultipleObjectsExImplementation+0xb3 03 00000000`09cb8b60 00000000`77599287 kernel32!WerpReportFaultInternal+0x215 04 00000000`09cb8c00 00000000`775992df kernel32!WerpReportFault+0x77 05 00000000`09cb8c30 00000000`775994fc kernel32!BasepReportFault+0x1f 06 00000000`09cb8c60 00000000`60201ad5 kernel32!UnhandledExceptionFilter+0x1fc 07 00000000`09cb8d40 00000000`60203547 XXX!_invalid_parameter+0xc5 [f:\sp\vctools\crt_bld\self_64_amd64\crt\src\invarg.c @ 88] 08 00000000`09cb9300 00000000`6006758b XXX!wcscpy_s+0x97 [f:\sp\vctools\crt_bld\self_64_amd64\crt\src\tcscpy_s.inl @ 30] 09 00000000`09cb9340 00000000`600502d7 XXX!CLogQueryEntry::FillDlpData+0x11bb [XXX\logcl_logquery.cpp @ 3211] 0a 00000000`09cb9510 00000000`60049349 XXX!CLogQueryEntry::OnLogviewVirus+0x17f7 [XXX\logcl_logquery.cpp @ 900]
結果在第22條thread 發現了UnhandledException
很明顯
在做wcscpy_s 時 參數錯誤
來看看定義
errno_t wcscpy_s( wchar_t *strDestination, size_t numberOfElements, const wchar_t *strSource );
這題的答案是
wcscpy_s 時的Src size 比Des大 所以造成Crash
2014-03-17
Compile Error when we build the GoogleTest in VS2012
Step 1 :
去googletest 網站download googletest project
https://code.google.com/p/googletest/
目前版號是gtest-1.7.0
Step 2:
解壓縮zip
Step 3 :
用VS2012 開啟專案
.\gtest-1.7.0\msvc\
Step 4 :
Rebuild projects
根據Primer上的說明 欲先玩googletest 必先compile之
To write a test program using Google Test, you need to compile Google Test into a library and link your test with it.
但是正常情況下會compile error
錯誤原因為 :
Error 5 error C2977: 'std::tuple' : too many template arguments d:\coding\gtest-1.7.0\include\gtest\gtest-printers.h
[Root Cause]
http://stackoverflow.com/questions/12558327/google-test-in-visual-studio-2012
std::tuple<> with as many as 10 template arguments._VARIADIC_MAX macro project-wide to support up through 10 parameters; you'll probably want to do this by way of your project's preprocessor definitions setting.打開4個Project的Property
properties -> C\C++ Preprocessor -> Processor Definitions -> <edit...>
Add "_VARIADIC_MAX=10"
Save and Rebuild all projects
2014-02-14
[讀書筆記] Clean Code Part 1 (Ch1 to Ch3)
Chapter 1 : Clean Code
(1) 童子軍規則 - 讓營地比你來時更乾淨!!儘管Legacy code很多 但每一次比每一次乾淨也是件好事
Chapter 2 : Meaningful Names
(1) 名副其實Bad : int d;
Good : int elapsedTimeInDays;
(2) 避免誤導
如果你的變數型態不是List
Bad : accountList
Good : accountGroup or accounts
(3) 做有意義的區分
不使用意義含混的廢話(Info, Data, a, an, the)
ex. ProfuctInfo, aProduct
(4) 避免把類型或者變數範圍編碼進名稱
如果未來類別改變 還要記得改變數會很麻煩
如果變數未改 又會造成誤導
ex. 原本宣告 PhoneString phoneString
後來改類別 PhoneNumber phoneString
phoneString這變數名稱會誤導下一個開發者
(5) Interface
不對介面類別名稱作編碼
IShapreFactory
寧可針對實作類別名稱作編碼
ShapreFactory
ShapreFactoryImp
(6) Class
類別名稱應該是名詞或名詞短語
(7) Function or Method
函式名稱應該是動詞或動詞短語
Chapter 3 : Functions
(1) Small & Do one thing函數應該做一件事情,做好這件事情,只做這一件事情。
所以Function應該要短
(2) Function Arguments
參數數量越少越好
如果參數數量無法降低 那代表你必須要開始封裝參數了
ex.
Circle makeCircle(double x, double y, double radius)
Circle makeCircle(Point center, double radius)
(3) Boolean Arguments
如果你想要用一個Boolean值去當開關
Ex. SetJugService(true) // Start Jug Service
SetJugService(false) // Stop Jug Service
上面作法的缺點在於:
1. 參數僵化成2選1
2. Function內必須有if邏輯
你倒不如設計成
StartJugService()
StopJugService()
(4) Command Query Separation
The real solution is to separate the command from the query so that the ambiguity cannot occur.
if( set("username","jug"))...
Function 應該一次做一件事 要嘛回答問題 要嘛執行動作
上述 function 會讓reader混淆
有些人會將 set 改成 setAndCheckIfExists
但是對於閱讀仍舊沒有幫助
比較適合的作法是 :
if(attributeExists(“username”))
setAttribute(“username”, “jug”);
(5) Don’t Repeat Yourself
Duplication may be the root of all evil in software.
如果code一再重複 表示你可以將code抽出來處理
2014-02-11
[收藏] 15 hot programming trends -- and 15 going cold
15个热门的编程趋势及15个逐步走向衰落的编程方向(上)
15个热门的编程趋势及15个逐步走向衰落的编程方向(下)
1. Hot: JavaScript MV* frameworks
Not: JavaScript files
請利用JavaScript Framework幫你做事
Ex. Kendo, Sencha, jQuery Mobile, AngularJS, Ember, Backbone, Meteor JS
2. Hot: SVG + JavaScript on Canvas
Not: Flash
Flash封閉且退燒了 請改用SVG + JavaScript on Canvas
3. Hot: Mobile Web apps
Not: Native mobile apps
優點 : 跨平台 (不需每個平台都得投入開發)
PS. HTML運行的速度不輸Native apps
我個人蠻質疑這一點的 記得當初Facebook就是想走Web apps模式行不通才轉為Native應用 不過Startup team的話 在資源不足的初期也許適用
4. Hot: GitHub
Not: Résumés
身為一個programmer 沒有比真的有作品更有代表性了
5. Hot: Renting
Not: Buying
這就是AWS紅的原因 Startup team可以考慮
6. Hot: Node.js
Not: JavaEE, Ruby on Rails, PHP
不了解Node.js 要研究看看
2014-02-10
[jQuery] 使用js-hotkeys讓網頁能偵測hotkey
https://code.google.com/p/js-hotkeys/
https://github.com/jeresig/jquery.hotkeys
使用上我的目的在於block ctrl+L 這個hotkey
$(document).bind('keydown', 'ctrl+l', function(e) {
e.stopPropagation();
e.preventDefault();
e.returnValue = false;
e.keyCode = 0;
});
2014-02-09
2013 NABU Business Trip in San Francisco (景點篇) Part 2
個人最愛的一張照片 富有生命力
2013 NABU Business Trip in San Francisco (景點篇) Part 1

[封面故事]
這組情侶來自澳洲 今天第一天到舊金山 他們像我一樣被破地圖所害 不過最後還是順利抵達Golden Gate Bridge 後來我們又一起去了Golden Gate Park 在那邊他們看到松鼠很興奮 直說它們這是第一次看到松鼠 問我有沒有看過 我說台灣公園裡很多松鼠 就像澳洲袋鼠一樣多 — feeling funny at Golden Gate Bridge.
日期: 2013.11.29 to 2013.12.04
[2013.11.29]
下午抵達SFO 一如往常我們叫了Taxi前往Hotel 我原本有先查好 從機場出發到飯店大概20分鐘左右
結果沒想到在沒塞車的情況之下司機還開了30幾分鐘 而且要價45鎂 不曉得他有沒有偷繞路
我們住的hotel就在市區 離Union Square很近 所以晚上就晃過去逛逛 廣場剛好有演唱活動 聚集大量人潮
廣場中間有棵大型聖誕樹大家爭相合照 旁邊有個溜冰場 看得我心癢癢也想去溜一下 不過太多人排隊了 當場是客滿
下個session要等到晚上10點 只好放棄了 廣場附近則是一堆知名品牌店面 這裡真的是個購物天堂阿
我真的覺得女生一定超愛這裡的
[2013.11.30]
今天跟在美國工作的人生勝利組 Tom Chih-Chung Liu來個SF一日遊 坐著他的新車 我們暢遊了 AT&T Park, 漁人碼頭, 藝術宮跟金門大橋
早上第一個點是AT&T Park 雖然現在休季 不過球場還是維護的很漂亮 而且可以免費進場 我們從外野進入 拍了球場著名的可樂跟大手套 意外發現外野居然還有一個縮小版兒童小球場 小朋友們是真的可以進去打球的 下一個點是漁人碼頭 在這裡我們犯了一個錯誤 明明PIER39停車場只有兩台車在排隊 我們卻繞過去停更遠一點的停車場 重點是在PIER39停車 如果有用餐的話可以抵兩個小時 而我們後來停的停車場每15分鐘3美元 只能說花錢買個經驗 我們在漁人碼頭想要找同事口中的便宜大螃蟹 結果都找不著(後來發現我們找錯區域) 所以就挑一個好像還蠻多人排隊的餐廳去吃飯 我點了SF經典的Cioppino 簡單來說就是海鮮大雜燴Pasta 新鮮又好吃 用餐完我們便前往金門大橋 沒想到今天下午的金門大橋大霧瀰漫 什麼都拍不到 晚點繞去附近的藝術宮 沒想到晚上的藝術宮挺有氣氛的
[2013.12.01]
昨天去Golden Gate Bridge時充滿神祕的大霧 所以固執的我 今天還是決定再去一次 從Union Square附近搭上MUNI公車38號 再轉28號 就到了Golden Gate Bridge 我在橋上充當好多遊客的攝影師 看來遊客們對這個景點是特別興奮阿 我徒步走上橋面 只完成了2/3就往回走了 因為實在太遠了 我還想撥點時間去其他地方 下一個景點是Golden Gate Park 這點是一組澳洲情侶推薦我一定要去看看的地方 這公園真的是超~ 級 ~ 大 ~ 我都覺得我快把台北市走完了一圈了
[2013.12.02]
工作日 今天的客戶藏身在郊外工廠中 我們一度還懷疑司機有沒有走錯路 工作結束之後 其中一位女客戶邀請我們跟她一起坐電車回家=.= 也不錯啦 一路上聊著聊著就搭著公車轉Bart 回到Hotel
2014-02-05
2013 NABU Business Trip in Salt Lake City (景點篇)

[封面故事]
11/28 Thanksgiving 下午騎著腳踏車在Salt Lake City Downtown亂騎亂晃亂拍照 在神聖的Temple Square的見證下 這位男子請我幫他跟女友拍照 私底下卻偷偷跟我講 他等下要跟他女友求婚 請我幫他錄影跟拍照 這是我第一次幫人家求婚 哈哈 感覺很特別 也恭喜他們了 — feeling special at Temple Square.
日期: 2013.11.26 to 2013.11.29
Salt Lake City in Utah
SLC 是個方便的城市 有摩門教莊嚴的大教堂 有免費的電車可以載你趴趴走 也有腳踏車可以讓你運動一下 雖然outlet在很遠的地方 不過這邊的Mall也不賴 我們剛好趕上Thanksgiving 在傳說中的Black Friday 確實也不少折扣
但這邊讓我最感到特別的 就是靜電 我們外地三人組在SLC最常講的話 就是Oh~ Shit了 因為又被電了
2013.11.26
今天的午餐在Market Grill Street 是個有肉有海鮮的地方 我們點了Chesapeake的oyster以及推薦的fresh fish 重點是便宜又好吃
Salt Lake City 這邊有免費的電車可以搭乘 相當方便 我晚上就搭著電車前往City Creek Mall 跟Gateway Mall 採買老婆需要的禮物 City Creek Mall 據說是摩門教建立的商場 比Gateway好逛多了 Gateway是在戶外 頂著寒風在外面逛是很冷的
2013.11.27
今天的客戶是End user 他們本身也是間Security的公司 這就是所謂的Security中的Security
總經理是Richard 南韓人 非常年輕 才32歲 非常精實且有企圖心的人 一般Thanksgiving 老美都不想工作 在家陪家人看足球 他卻是自己跑來上班 親自測試我們家產品 甚至還想變成我們的reseller 一個超級積極的人
中午我們跑去吃best pie in America 當天點餐都能免費得到一小塊Pie 晚餐Richard招待我們去吃日本料理 這家壽司都附上濃濃的美奶滋 甜甜的 跟台灣吃的日本料理有點差別 吃飯不開車就能啤酒喝到爽啦 司機們還真是滴酒不沾因為他們酒駕罰很重
2013.11.28
Thanksgiving的一天 大部分的店家都沒營業 我原本預計要搭著電車去The University of Utah 但是連電車都休息是要怎麼去 所以我只好在飯店附近繞繞拍拍 這邊街道都整理的很乾淨整齊 隨便拍都很有fu 中午返回飯店的餐廳吃thanksgiving特餐 要價$45 不便宜 不過難得碰上感恩節 就給他吃下去吧 下午騎著腳踏車 前往摩門教的大本營 Temple Square 碰巧見證了一對情侶求婚的經過 傍晚騎著騎著突然看到山丘上有個漂亮的建築 念頭一轉 立馬騎車上山 汗流浹背地騎到山頭上之後 終於見到了這漂亮的建築 - Utah State Capitol
2013.11.29
Black Friday , 到處都在打折 所以我就趁早上去City Creek Mall 採買一番 中午就要跟Utah說掰掰了
2014-02-03
2013 NABU Business Trip in Toronto (景點篇)
[封面故事]
晚上9:30走在下雪的街頭 就是為了拍攝他 CN Tower — at CN Tower / La Tour CN.
日期: 2013.11.24 to 2013.11.26
Toronto 是出差行程裡面最緊的一個城市 加上飛機誤點 抵達Toronto之後已經下午5點多 當天是星期天 所以晚上任何店家幾乎都不營業了 所以我選擇在隔天的晚上前往Downtown 這裡交通算便利 只是繁複了些 先要從Hotel搭shuttle至TTC Station, TTC是類似地鐵或是捷運的玩意 然後就搭著TTC到Union Station 沒想到走在Toronto的街頭 竟飄著小雪 我頂著寒風 就是為了今天的重點行程 ~ CN Tower ~
2014-02-01
2013 NABU Business Trip in Virginia (景點篇)
2014-01-28
寫批次檔利用7zip壓縮log及刪除檔案
以下是我寫的sample
2014-01-19
2013 NABU Business Trip in Kentucky (景點篇)
[2013.11.19]
下午從MSP機場出發至CHICAGO轉機再到LOUISVILLE 到了飯店已經接近晚上10點 Phil 帶我們衝到頂樓Lounge去吃免費的餐點 有他的點數真的還蠻省的 吃東西都不用錢
[2013.11.20]
今天前往客戶公司 今天的客戶Kevin 是個超級High且熱情的人 中午他帶我們去吃當地超級推薦的Mussel & Burger Bar 果然是超級好吃 這邊的Mussel 有機會來的話 一定要嘗嘗 下班時 Kevin帶我們去看看它們公司的環境 每個人都有一個小玩具 公司也大辣辣擺一個高爾夫球Game在工作環境 過了五點 他們Parter開了一瓶wine來喝 實在是太酷了
[2013.11.21]
今天中午就要飛Virginia 所以很可惜沒有時間可以逛一下Louisville 但是來到Kentucky就是要吃一下原版的肯德基阿 所以我們在機場嗑了肯德基 結果沒想到機場這家店居然沒有賣炸雞!!!
2014-01-06
Multiple Inclusions : Include Guard VS #pragma once
2013 NABU Business Trip in Minnesota (景點篇)
日期: 2013.11.17 to 2013.11.19
這次入住的旅館是The Saint Paul Hotel。位於 St. Paul,據說是Snoopy作者Charles M. Schulz的故鄉。所以旅館外頭的Rice Park立了許多Snoopy相關的雕像。
[2013.11.17]
今天從桃園國際機場搭Delta至日本成田機場與同事Kiko會合之後 再一起轉機去MN. 坐飛機的時間約14hr 很久!! 屁股很痛!! 到了Minneapolis 海關針對kiko問蠻久的 我在後面也有點擔心 不過輪到我的時候 居然問一下公司跟目的就放行了 究竟是男女生有差呢 還是國籍有差? 接下來我們就直接前往The Saint Paul Hotel. Kiko說她累了要去補眠 而我卻因為有安安這兩個月來的訓練 居然沒什麼時差 所以整個下午我就自己在Saint Paul這邊亂走亂晃亂拍囉
[2013.11.18]
今天去客戶那邊onsite 早上跟Beta Manager Phil會合之後就一起搭Taxi前往客戶公司 今天基本上都還蠻順利的 客戶也跟我們喇低賽了
一整天 其中最酷的就屬獵鹿了 中午我們點了號稱freaky fast的Jimmy John's
據說比subway好吃 客戶大力推薦. 大約4:30 MN這邊就天黑了 客戶就說要準時回家了=.= 晚上回到Hotel之後 因為還要寫報告 + 討論 + 開會 所以就不出去吃了 點了Room Dining的 Turkey Burger 想不到還蠻好吃的
[2013.11.19]
今天6:00就起床 為的就是去拍攝莊嚴的Cathedral of St. Paul 頂著-4度C的低溫 徒步20分鐘後抵達 之後回到Hotel跟Phil與Kiko會合 今天早上的行程是Minneapolis市區雙腳萬能 所以我們幾乎把市區所以景點都走光了 中午前往機場 離飛機起飛還有2個多小時 所以我又跑去號稱全美最大的Mall, Mall of America, 因為是臨時起意 機場也沒wifi能讓我再查一下地址 不過幸好路是長在嘴上 也感謝熱情的老美 讓我這個沒準備的傢伙能夠順利抵達
2013-12-04
2013-07-14
[Ref] Android Studio初體驗
開發Android 的Developer 可以考慮另一個IDE
資料來源:
http://www.dotblogs.com.tw/hungys/archive/2013/05/17/104450.aspx
2012-12-29
2012-10-22
2012-05-18
[筆記] 全腦開發 & 如何跟小孩說話
我覺得非常受用,希望以後能夠讓我的小孩能夠健全發展。
2012-03-21
在Eclipse上debug Red5
Step 2, 利用ant Build Project
Step 3, 設定debug 的working directory 位在Red5\dist\
Step 4, Classpath 將User Entries中的預設red5專案移除 改加入Red5\dist\boot.jar
Step 5, Source 加入 red5專案
2012-03-13
SecurityError: Error #2148: SWF 文件 不能訪問本地資源
在debug時 出現了 "SecurityError: Error #2148: SWF 文件 不能訪問本地資源" 錯誤訊息
解決方法
2012-03-09
ImageSwitcher 如何傳入網路位置的圖片
1.
2.
3.
2012-03-01
java.net.URISyntaxException: Illegal character
需要將字串轉成JSON
再轉成urlencode
再轉base64
再當成參數去call httpget method
轉好base64之後 我發現在new HttpGet時 就會出exception
ex. java.net.URISyntaxException: Illegal character
應該是字串裡有不合法的字元
後來我用URL跳過去
URL url = new URL(urlstr);
URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null);
HttpGet httpget = new HttpGet(uri);
2012-02-06
2011-12-20
2011-12-19
AVD Manager如何轉橫向
最近我開發了一個app 限定只能橫向使用 但是放到模擬器上 頭就要歪一邊觀賞
實在很困擾
還好查到了一個tip
只要按著Ctrl + F12 就能將模擬器轉成橫向啦
2011-11-08
[讀書筆記] Rework 工作大解放
內容簡介 : 請參考 http://www.books.com.tw/exep/prod/booksfile.php?item=0010482162
這本書很特別也很有趣,針對事業有一些特別的見解,我特地節錄其中20條對我而言比較感興趣的項目,跟大家分享一下。
2011-10-24
RED5相關資源
介紹 : http://tw.myblog.yahoo.com/cochiachang/article?mid=46&prev=66&next=45&l=f&fid=12
1. 詳細的安裝教學影片: http://www.flashextensions.com/tutorials.php
2. RED5中文討論區: http://www.openred5.com/bbs/index.php
3. 官方教學文件: http://www.red5tutorials.net/index.php/Tutorials
4. 邦邦的部落格: http://blog.ben.idv.tw/search/label/Red5
5. 色無邊界RED5學習筆記: http://blog.csdn.net/lql876381722/category/364060.aspx
6. 冰山上的播客: http://xinsync.xju.edu.cn/index.php/archives/category/prglang/flex/red5
7. 使用RED5做錄音錄像: http://bbs.actionscript3.cn/viewthread.php?tid=17182
8. RED5官方網站: http://osflash.org/red5
9. 建立RED5應用程式教學: http://www.joachim-bauch.de/tutorials/red5/
10. RED5的API說明文件: http://dl.fancycode.com/red5/api/index.html
11. 閃客居: http://www.flashas.net/html/flashas/RED5/index.html
12.第五動力技術交流: http://www.d5power.com/forum-16-1.html
13.Red5 Wiki : http://jira.red5.org/confluence/display/streaming/Home
14. 小佳的程式天地 http://tw.myblog.yahoo.com/cochiachang/
FMS 相關資源
Capturing live video
http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff0.html
Beginner's guide to streaming live video with Flash Media Server 3.5
http://www.adobe.com/devnet/flashmediaserver/articles/beginner_live_fms3.html
Learning Flash Media Server 3 excerpts: Nonpersistent shared objects and two-way A/V communications
http://www.adobe.com/devnet/flashmediaserver/articles/ora_learning_fms3.html
Working with metadata for live Flash video streaming
http://www.adobe.com/devnet/flashmediaserver/articles/metadata_video_streaming.html
Webcasting live video with Flash Media Live Encoder
http://www.adobe.com/devnet/flashmediaserver/articles/webcasting_fme.html
Flash 视讯学习指南
http://www.cnbook.me/archives/51.html
Flash 視訊學習指南
http://www.adobe.com/tw/devnet/flash/articles/video_guide.html
Flash Media Server有用學習資源
http://forum.j2eemx.com/forum39/thread1370.html
Flash Media Server Developer Documentation
http://www.adobe.com/livedocs/flashmediaserver/3.0/hpdocs/help.html?content=Book_Part_31_deving_1.html
Encoding Best Practices for Prerecorded Flash Video
http://www.adobe.com/devnet-archive/flash/articles/flv_encoding_02.html
Live dynamic streaming with Flash Media Server 3.5
http://www.adobe.com/devnet/flashmediaserver/articles/dynstream_live.html
Streaming media
http://help.adobe.com/en_US/flashmediaserver/techoverview/WS07865d390fac8e1f-4c43d6e71321ec235dd-7fff.html#WS5b3ccc516d4fbf351e63e3d119ed944a1a-7fe7
专注于Flash+FMS技术研究与应用(视频会议 视频直播 视频点播 在线访谈 在线招聘 在线客服 远程教育直播系统 )
http://www.fmser.cn/post/6.html
2011-10-13
Adobe視訊sample
http://help.adobe.com/en_US/flex/using/WSc78f87379113c38b-669905c51221a3b97af-8000.html
http://help.adobe.com/en_US/FlashMediaServer/3.5_Deving/WS5b3ccc516d4fbf351e63e3d11a0773d56e-7ff0.html
Step 1 安裝 Flash Media Server
安裝完會自動啟動Server
Step 2 在 Flash Media Server安裝目錄下applications 新增一個資料夾 "publishlive"
PS. applications下的資料夾可以視為channel 所以一定要先新增這個channel 才能建立連線
ex. 建立完 "publishlive" 資料夾之後 連線URL可以為 "rtmp://(x.x.x.x) IP/publishlive"
Step 3 向 Server 建立連線
2011-09-08
[Word] 長的很像的字
1.
compliment => n. 讚美的話; 恭維; 敬意[(+on)]
vt. 讚美; 恭維; 祝賀[(+on)]
compensate => vt. vi 補償, 賠償; 酬報[(+for)]
communicate
consummate => vt. 完成; 實現; 使完美 ; 圓房, 完婚
adj. 完美的; 圓滿的; 絕頂的
2011-09-06
[Phrase] 介系詞整理
be included in => 包含在...之中
be known as 被稱為...
be known to 為... 所知
be known for 以...著稱
call ... to order 召集...開會
on account of + N = because of + N
plenty of => 要加of
Grammar
Plenty of can be used before an uncountable noun or a plural noun. Do not say 'a plenty of' :
There is plenty of evidence of poverty (NOT a plenty of evidence).
You will have plenty of opportunities to improve your skills.
► Do not say 'there is plenty of things/places etc'. Say there are plenty of things/places etc :
There are plenty of restaurants nearby.
► Do not say that a place or thing 'is plenty of something'. Say that it is full of something :
The garden is full of interesting shrubs and trees.
[Phrase] go a long way toward ...
go a long way toward sth => 對 sth 有很大的幫助
[Phrase] in detail
in detail => 仔細地
on details => on = about => 關於詳細的情況
2011-08-20
[似] costly,pricey,expensive,invaluable
costly [adj] very expensive, especially wasting a lot of money
pricey [adj] (informal) expensive
expensive [adj] costing a lot of money
invaluable [adj] extremely useful ; 無價的