2019年3月28日 星期四

Cefsharp3 run at windows embedded standard

Cefsharp 是個可應用於Windows的chrome core的瀏覽器套件,近來搭配它做了一個WIN Form AP不過在發行時異常(尚未解),先用inno setup封裝頂著不過在更新上就沒有Visual Studio的方便。

佈署到客戶端在win 7 ~ X都順利運行,不過遺憾的是在客戶端有若干機器所使用的系統為 windows embedded standard,執行後直接跳出App Crash的訊息,自事件檢知器中看到的資訊貌似載入CefSharp.BrowserSubprocess.exe時出現的,研判應該跟multi thread設計有關吧,這部分只是猜測也無濟於事。

經GitHub更新到最近的73.X.X.X版本後直接編譯(use .NET Framework 4.6.2)的執行檔也是出現相同的狀況,後來在更新 Microsoft Visual C++ Redistributable至2015出現Setup Fails因此進行排除,順利安裝成功後再執行就順利啟動了(此期間安裝2012, 2013, 2017都順利,但無法啟動)。

處理這類線索有限的Debug過程是枯燥的,神隊友找到線索並順利排除真好。當下自己是直接在系統中安裝visual studio打算直接在windows embedded standard進行編譯,這好像也行但現在也只能先忙其他的,在緩緩囉。


2019年3月12日 星期二

CI cookies, session, cache memo

在CodeIgniter中頻繁使用Model在資料量大使用量高的EC網站是不好的選擇,可是EC網站的資料也不適合用靜態頁來處理,畢竟有許多互動的設計若是使用靜態頁那麼就失去意義了,某些(聯絡我們, 用戶條款)之類的到是很適合。
Ex. $this->output->cache($n);
放置在Controler的 $this->load->view($action, $data); 前。

首先在config/autoload.php裡面需要加入相關的help
$autoload['helper'] = array('cookie');

寫入
set_cookie('cookname', $cookdata, 3600);
取得
get_cookie('cookname')
刪除
delete_cookie('cookname');

於多網站共用Code的使用案例上,可是當使用prefix前綴來避免衝突/讀取錯誤的情事。
※全域設定可在 application/config/config.php 檔案中所設置的前綴  $config[‘cookie_prefix’]
※容量(size)大概4K使用,所以資料量大的話會無法儲存,存放於用戶端的瀏覽器內所以瀏覽器有限制存取時會無法使用。

首先在config/autoload.php裡面需要加入相關的help
$autoload['libraries'] = array('session');

寫入
$this->session->set_userdata('sessionname', $cookdata);
取得
$this->session->userdata('sessionname')
刪除
$this->session->unset_userdata('sessionname');
※ 容量(size)大概較Cookies大些但若是無法儲存則表示資料量超過容量限制,另外資料存放在記憶體內,伺服器記憶體管理務必注意。

cache:
$this->load->driver('cache'));


寫入$this->cache->save('cachename', $cookdata, 300); //300=5min
取得
$this->cache->get('cachename')
刪除
$this->cache->delete('cachename');
※ 使用檔案儲存所以資料量不用擔心,不過因為是FILE所以I/O讀取的效率就偏低。

2019年3月7日 星期四

HTML中的特殊符號對照表(備忘)

在寫入資料庫與檔案(靜態檔,資源檔)常因特殊字元造成載入/顯示上的異常,這個網頁列出相當多的對應可以提供需要時的查詢,PHP最常碰到的大概是單/雙引號造成的字串判斷異常,可以用以下sample code來排除。

$Value= str_replace("'", "'", $Value);

2019年2月21日 星期四

CefSharp3 Multi Thread Add listen AddressChanged Event

原來使用的套件 Awesomium.NET 因為太久沒更新對於BootStrap4的支援已經跟不上了,所以選擇的替代方案是CefSharp3這個Open Source Core。

不意外的CefSharp3也是Chrome Base的可是導入在WIN AP上有完整的範例,版控更新上於GitHub也能看出他的活躍,總之這是要補紀錄在multi Thread增加EVENT的備忘,免得過段時間又忘記怎麼做。

首先增加要listen的FUNC
/// <summary>
/// 設定新分頁的url address變更的監聽
/// </summary>
private void setNewTab_addressCheangeEvent() {
            var control = GetCurrentTabControl();
            if (control != null)
            {
                control.Browser.AddressChanged += new EventHandler<AddressChangedEventArgs>(web_Auto_AddressChanged);
            }
}
//這個是把網址寫到指定的區域內
 private void web_Auto_AddressChanged(object sender, AddressChangedEventArgs e){
            SetTxt_Url(e.Address);
}

private delegate void str_Delegate(string str);
private void SetTxt_Url(string str) {
            if (InvokeRequired) {
                Invoke(new str_Delegate(SetTxt_Url), str);
                return;
            }
            TSL_url.Text = str;
}
接著於browserTabControl.TabPages.Add(tabPage); 之後加上 setNewTab_addressCheangeEvent();就會在每次新增的Tab都會去加入這EVENT的Listen。

這是以AddressChanged 觸發時的範例,其他的以此類推即可。

補充: 有趣的文章
JS處理修改URL但不跳轉的方法,在WEB POS接地氣上面來說對我幫助很大,節錄ing
var stateObj = { foo"bar" };
history.pushState(stateObj, """controler/function/variable");

2019年2月12日 星期二

Redmine SETUP Memo

Redmine是一套Open Source的專案管理系統,之前安裝的是2.6近期再檢視已經發行到4.0.1版了,進行升級的參考此頁面的步驟,無痛(補充1?)的升級完成。

後來發現升級4.0.1其實也不是那麼需要,主因是同事發現此樣板覺得與GitHub敏捷管理類似,需要套用~套用完畢之後發現沒有出現就覺得是新版的有,其實都是誤會...因為即便是升級完畢依舊是沒有,它是以plugin方式加入的,說明如下:

Agile plugin 有 Lite版本是免費的,其餘進階版本都是要另外收年費,填寫完email之後會收到下載與安裝教學的連結,很直觀不過安裝時會檢查是否安裝crm套件,這部分就得先安裝CRM套件後才能順利安裝Agile plugin。

補充1: 2.6 to 4.0.1 唯一出的問題是ruby的版本需 > 2,原先安裝的版本是 1.9.1,變更ruby的步驟參考此頁面處理,用RVM管理Ruby版本真是方便!! 至於安裝ruby會依照不同的環境有不同的方式,就不留存了。

補充2: 啟用Redmine方式依舊沒變在VM環境下小小不方便(logout就關掉了),所以很開心script方式還是可以使用,這部分方式就持續使用start_redmine.sh來啟用/關閉/重啟。

補充3: Tags  plugin 也是不錯用的套件,建議加裝。