前言:
四年前在delphi ktop有人提到看盤軟體配合DDE技術,在用delphi實作時發生了亂碼加在後面的情形。http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=97629
當時沒時間,只是大致上猜其原因。四年後的今天,又有一位朋友說他找到如何解的方式。於是讓我再度燃起追其真正的原因。
原因:
前言:
四年前在delphi ktop有人提到看盤軟體配合DDE技術,在用delphi實作時發生了亂碼加在後面的情形。http://delphi.ktop.com.tw/board.php?cid=30&fid=71&tid=97629
當時沒時間,只是大致上猜其原因。四年後的今天,又有一位朋友說他找到如何解的方式。於是讓我再度燃起追其真正的原因。
原因:
經常會需要debug進vcl的源碼上看它的問題,但突然在xe上不能中斷進去了… 搞了好幾個小時的比對與各種可能性。發現… 有4個重點:
1/ linker 的 dynamic runtime 要disalbe
2/ delphi compiler下的 use debug dcus 要 true
3/ package 要disalbe
以上三點是很多人知道,也可能查到的…但我就是搞不出來,原來有個重點:
最近朋友說一開ie不久就會藍屏/藍畫面,然後就重新開機。
我查看了一下錯誤訊息,是與顯卡有關,於是清了一下記憶體,但無效。後來無意間自己要update windows的一些「選用更新」,發現原來該問題是由於windows 更新造成的。更新的日期約在2013-03-01的日子以後,是directx的相關更新。由於ie 10為了加速有使用GPU加速,故很明顯的開ie看網頁不久就掛了。
該有問題的更新檔是:
kb2670838
不過不是所有的電腦都會有這樣的問題,而是在某些情形的電腦才會發生,主要是電腦除了內部intel顯卡外還加裝amd的某些型號顯卡才會。詳細參照下面的網址:
因我的專案裡有加入一些音效的中文檔名,發現git在commit時會卡住無法上傳。所有的中文名全變成\xxx\xxx\xxx之類的。
經常了相關的git指令發現,只要在terminal 下執行
git config --global core.quotepath off
⓪蕭沖 編著
話說自windows 8開始,在windows 8的應用程式大致上被分為二種: 一種就是「桌機」應用程式,這與過去的應用程式沒什麼大不同。另一種就是Metro-Style App。這種應用程式,目前正式的說法叫「Windows Store App」,因為metro style這個詞有一些法律上的問題。不過為了簡易一點的說明,以下我稱它叫 metro app。
先來說說 metro App 與傳統的desktop應用程式有什麼不同? 我個人覺得最主要的不同在於安全性。metro app與iphone上的app真的超像的,也就是app被局限在一個sandbox裡,不能隨意的存取他人的app或是重要的系統資源,比如說系統的根目錄等。metro app裡的目錄只有三個Local folder、Roaming folder 、Temp folder,因此想搞鬼太不容易,這點若有開發iphone app的人應該可以感受很深! 當然,metro app還有一個很大的不同,那就是外觀(UI),使用windows 8的介面後就會知道不同在哪裡…
ok,以上說了一堆,還是沒講到windows run time :p。總要有個前因嘛! 為了達到 metro app的風格、安全等等,當然相對的windows api就要有所改變,不然如何限制不能讀系統檔之類的,你說是吧?! metro app 被限制要使用WinRT這個framework(我不稱它是api)來開發。
那麼WinRT的本質是什麼呢? 說到這裡,又不得要說它又像mac裡的cocoa framework。windows 8 以前,開發人員(非.net)都是和win32 api在打交道。而win32 api其實就是c 函式庫一樣的東西,非物件化、非階層化,像是倒滿地的一堆函式。為了要方便使用這些api,才有了borland的VCL或microsoft的MFC,這二個framework就是把win32 api包起來變成類別,方便開發使用。win32 api超過10年以上的歷史,於是這回microsoft就把這系統層級的api重新包裝起來,「並且考慮可能不同語言都會呼叫它」,加入一些安全機制等,於是就有了WinRT這個東西。它是一種framework,不是散落一地的函式庫。它是一種類似COM技術的包裝方式,所以不同的語言都可呼叫,它是native的碼,所以很快…。這樣的特性才讓我不禁覺得像極了mac上的cocoa framework,雖然cocoa不像com一樣,但在mac/iphone上開發程式就是要和cocoa打交道。
Hi everyone,
Few days ago, i got an error message like [verify_signer_identity: Could not copy validate signature: -402620393] when i archived my iPhone app project to an adhoc distribution and deloyed to iphone. The installation is about to 90% then failed with that error message you can monitored in xcode organizer with console screen. It really drove me crazy. I spent almost 32 hours to solved this problem. Of course, i did google this issue, but no luck! Asking are more, but resolve are less. Moreover, just few people solved the problem with No idea why they solved...But seems everyone stuggle to refresh the code signing, including clearing certificates from KeyChan Access, regenerating certificates, and provisioning profiles.... so did I.
Finally, I thought we were cheated by the error message"validate signature". I tried to replace images in project cause I ever met that issues, but...with no luck neither. What the hell...... I told myself I will give up if I take my few days ago backup to make adhoc for last chance.
Wow~ old backup worked! Then i piece by piece to add new source files written recently into backup project. Everything done! :)
All in all, If you got an error message like that, I suggest you no need to refresh code sign first but restored your backup files (if you have one) to try. Good luck!
大家好,
昨日上架了一款自己很滿意的app,使用了很多高技巧才達成的。第一次送審還被reject,原因竟然是…要我提供操作的demo video,還問了我一個問題 : how does the app work?
感覺上這樣的reject有點怪,並非程式有問題,而是像審閱者好奇我是怎麼辦到的。我只好自己用英文做了一個demo video,並說明了一下程式的做法。最後終於上架囉 :)
這個app主要的功能就是可以提醒你在設定的時間到了發出警示音與震動,一方面提醒不要講太久,二方面是用來"對付",前幾分鐘免費的方案 (業者應該會氣我吧? :p)。另外依照費率的計算,我會以圖與數字展現出來,讓使用者即時了解還剩多少免費的分或錢可用。市面上僅有極少的類似查詢功能,而且都是靠電信業者官網的資料做推估,一方很面很不準,二方面可能delay一天以上的資訊,不能即時。而我的app則是真即時的!
花了好多時間研發出來的app,還希望能對自己與別人有一些幫助。還請大家不吝指教並幫忙宣傳一下喔,感謝!
Ⓞ著者: 蕭沖
症狀: 下中斷點後無論如何也進不了,且畫面出不來。但若改成非ide下,直接執行編好的exe檔就很正常!
解決方式: 僅需要把一些form改成sizeable,並縮至相較的小後,即可下中斷並切入debug。
⓪編著 : 蕭沖
這個標題最主要要講的就是GPL的部份。
難說的放後面,先快速的講一下。Apache 或 MIT 或 BSD 條款。這類條款,用最快速且實用的說法就是,你可以放心的去使用,去改,去賣,即使你結合、修改裡面的內容,但可以不用釋放你自己寫或改的源碼部份,唯就是有一些輕量要做的事,比如宣告過去的作者,或者是一些宣告等,若真要用到的時候再去查一下該怎麼去寫那些版權宣告就好。可進一步的參考這個網址:
http://inspire.twgg.org/c/internet/trends/comparison-of-five-kinds-of-standard-open-source-license-bsd-apache-gpl-lgpl-mit.html
⓪編著: 蕭沖
TServerSocket 與 TClientSocket 都算是一個包裝(Wrapper)物件的容器(container),也就是說它本身只是把Socket物件含入裡面,並透過介面來操作含在裡面的Socket物件。
真正有"作用"的Soket物件是TCustomWinSocket這個類別,注意裡面有「Win」這個字,若沒這個字,那就僅用Container,如上面講的TClientSocket。因此,在隨作各種事件與方法時,都是在處理TCustomWinSocket的子類別,如TServerWinSocket ,TServerClientWinSocket等。
當TServerSocket使用stNonBlocking模式時,其實就是選用了Windows Socket Mode 中的WSAAsyncSelect方式(可參考我之前的相關文章(http://aftcast.pixnet.net/blog/post/22191725)。簡單講就是用 Post Windows Message (FD_CONNECT、FD_CLOSE、FD_READ、FD_WRITE、FD_ACCEPT等事件)至Application的方式來處理,因此這時候負責收封包的OnClientRead的handler就算是Thread-safe的。相反的,若是stThreadBlocking模式,則於Accept時,會產生相對應的一個thread來處理與client端的連線,接著會去建立一個thread(你自己定的,參考下面),然後一切的存取都在thread裡,這時候就要注意Thread-safe的問題。必要時要用Critical Section、Synchronize等等。可參考我寫的關於Thread-safe的文章。
蕭沖的學習筆記:
過去就聽說過Fiber有分二種:
Single-mode optical fiber (單模)
Multi-mode optical fiber (多模)
但了解的很片面、很表面。最近稍再深入一點去了解。才知道 模 (mode) 到底是在講啥東西。
著作: 蕭沖
自從有dll這種動態連接庫後,lib檔就不再僅代表是過去dos時代的static lib 了。
給 dll 用的lib,特稱為 import lib,有別於 static lib。import lib 裡記錄的是關於會使用到哪些函式,但其實裡面沒有實作函式的機器碼。 相反的,static lib 是含有程式碼於其中,所以通常檔案也比較大。
但要如何的從一個副檔名lib,來判別他是哪一類呢? 有幾個方法:
1/ 目視法: 看檔案的大小,一般40k以上應該就是 static lib。但當然不夠精準