2017-01-25

[C#] Microsoft.CodeAnalysis.CSharp.Scripting(Roslyn) 動態執行 C# Code 簡單入門

最近因為一些需求需要動態去執行一些C# code. 這邊筆記一下,首先你的專案要設定為.net framework 4.6 以上不然會出現
Image 656

第二步到nuget 上面下載 Microsoft.CodeAnalysis.CSharp.Scripting 套件,當然相依姓nuget 會幫你處理好,別擔心

Image 655

 

之後就是Code 得部分,首先我建立一個Agent  其中我寫一個Excute 的method 並開一個code 的參數,只要傳入C# code :

2017-01-20

[C#] 透過C# 執行javascript code 並且執行得到結果

之前有一個想法就是讓客戶去寫一點程式讓他去展現他要做的折價規則,像是滿千送百或是滿三千送五百之類的,如果要做畫面之後客戶想改規則都要花很多時間,不過這只是一個想法結果找一下網路上資料真的有做法而且程式不難。

Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));

dynamic obj = Activator.CreateInstance(scriptType, false);
obj.Language = "javascript";

var res = obj.Eval("x=2999;  x=x-((Math.floor(x/1000))*100);");

Response.Write(res);

上面案例 我設定公式是  x=x-((Math.floor(x/1000))*100); 然後假設使用者消費是2999 滿千送百這樣經過公式算出來的結果是 2799 ,很方便吧。

這裡面我比較好奇的是 Type.GetTypeFromCLSID 到底是什麼? 上網看一下文件 "GetTypeFromCLSID 方法支援晚期繫結存取 unmanaged COM 物件從.NET Framework 應用程式時您知道 COM 物件的類別識別項 (CLSID)。 COM 類別的類別識別項被定義在登錄的 HKEY_CLASSES_ROOT\CLSID 索引鍵。 您可以擷取的值 IsCOMObject 屬性來判斷這個方法所傳回的型別是否為 COM 物件"

2017-01-05

[C#] Serialize.Linq 簡單使用介紹

最近有一些特別的需求。我需要在A 端將一個LINQ 的表述式(Expression) 將他序列化之後變成文字或是byte[] 傳遞到B端,進行執行,這邊做一下簡單介紹也避免自己忘記。
A端(Namespace : TestEXPA ) :
1.透過Nuget 取得Serialize.Linq
Image 533

2016-11-25

[IoT] Linkit7688 DUO 透過 firmata 來控制GPIO,LED

這篇主要是基於  https://iamblue.gitbooks.io/linkit-smart-nodejs/content/zh-TW/basic/firmata.html 還有官網的資料 https://labs.mediatek.com/site/zntw/developer_tools/mediatek_linkit_smart_7688/training_docs/linkit_smart_7688_duo/firmata_nodejs/index.gsp

所組成的,但是因為中間碰到許多雷,所以筆記一下讓後面碰地的人可以快一點,這邊先感謝 iamblue 大大的無私分享

1. 首先準備  LED 燈泡 負極插入 GND  正極插入 D13

2. 安裝好Arduino 軟體 並且將 https://gist.github.com/edgarsilva/e73c15a019396d6aaef2 這邊的code 部屬進入 Linkit 7688 duo MCU  裡面
image

[Trick][Andrid] 在Facebook or LINE 下面脫離In-App Browser 開啟內建的browser

先說好這 只有對Android 有用 !!   只有對Android 有用 !!   只有對Android 有用 !!  
因為LINE 跟 Facebook 傳遞網站時候它們會用In-App Browser 去打開 除非你有調整這地方
15182424_1238599252882142_677651704_o

2016-11-17

[IoT] Linkit7688 DUO + Node.js + mraa 控制LED (GPIO)

用Linkit 7688 當然就是要舒爽的寫Javascript 來控制一些硬體,這篇主要是筆記一下透過mraa 來控制LED 開關,並且透過Node.js
15146641_1229743117101089_2000804149_o

2016-11-15

[IoT] Linkit7688 上面安裝簡單的編輯器nano

15044910_1225934390815295_2143515085_o

因為都在上面寫Node.js ,都透過PUTTY 直接連線上去寫,因為在電腦上面寫好再裝上去也是可以但是也很麻煩,而且內建的vim我用不習慣,網路上看一下原來可以安裝nano 所以簡單紀錄一下每一次都忘記都要重新查詢一次
簡單指令:

2016-09-05

[C#] Regex筆記 - 搜尋特定文字並使用搜尋到的字做格式取代

筆記一下,用某個Regex 條件過濾出來然後搜尋出的值再進行取代
案例文字: {IMG:a.jpg}<br />sometext{sometext2}{IMG:b.jpg}
這裡面我想要把{IMG:a.jpg} 跟 {IMG:b.jpg} 找出來,並且取代成<img src='a.jpg' /> 和 <img src='b.jpg' />
Code :

var sampleText = "{IMG:a.jpg}<br />sometext{sometext2}{IMG:b.jpg}";
 
var rgx = new Regex(@"{IMG:(?<FILENAME>.*?)}", RegexOptions.IgnoreCase);
 
var replacePattern = "<img src='$1' />";
 
var resultText = rgx.Replace(sampleText, replacePattern);
 
Response.Write(resultText);

結果:     <img src='a.jpg' /><br />sometext{sometext2}<img src='b.jpg' />

2016-08-31

[ASP.net] WebService 中使用AJAX 調用出現 "使用 JSON JavaScriptSerializer 序列化或還原序列化期間發生錯誤。字串的長度超過在 maxJsonLength 屬性上設定的值。"

因為一些需求,需要將圖片轉成Base64後透過ajax 往後送,我的ajax 是用web service 寫的,結果出現

{"Message":"使用 JSON JavaScriptSerializer 序列化或還原序列化期間發生錯誤。字串的長度超過在 maxJsonLength 屬性上設定的值。
參數名稱: input","StackTrace":"   於 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
 於 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   於 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)
 於 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)
於 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}

於是我查一下資料看到這一篇: http://forums.asp.net/t/1697754.aspx?what+is+maxJsonLength+in+jsonSerialization+
參考文件 : https://msdn.microsoft.com/zh-tw/library/system.web.script.serialization.javascriptserializer.maxjsonlength(v=vs.110).aspx

原來預設是有上限的,所以要超越那上限必須在web.config 加入 :

<configuration>
 
...
 
   <system.web.extensions>
    <scripting>
      <webServices >
        <jsonSerialization maxJsonLength="10240000"></jsonSerialization>
 
      </webServices>
    </scripting>
  </system.web.extensions>
 
...
 
</configuration>

這樣就可以超越限制,至於多少字符那就在換算調整

2016-08-26

[Javascript] Croppie 初始後再換圖片

之前文章提到了 如何使用 Croppie 做圖片裁切,今天要筆記一下如何,在 Init 後置換圖片,因為其實這蠻常用到的,這剛好也有朋友問我,我查了一下文件才知道,原本我以為要用destory 後來發現重新bind 就好
image3

[Javascript] 筆記一下用法,input file 選取檔案後預覽圖片

選取一個圖片檔案後,直接進行預覽,以前我都是傳到server 按下上傳後再做預覽,現在可以透過javascript 做到,這樣對使用者來說會更加的直覺看到選取圖片是否正確
14107795_10210384687240134_523340774573149763_o

function InputLoadImageToBindImageElement(inputEl, imgEl) {
 
    if (inputEl.files && inputEl.files[0]) {
        var reader = new FileReader();
 
        reader.onload = function (e) {
            $(imgEl).attr('src', e.target.result);
        }
 
        reader.readAsDataURL(inputEl.files[0]);
    }
}

使用方式:

HTML:

<img src="" id="image1"  />
<input type="file" name="name" id="iptImage1" value="" />
 

呼叫:

$("#iptImage1").change(function () {
          InputLoadImageToBindImageElement(this, $('#image1'));
});

sample:

2016-08-25

[CSS] Summernote 把取消上傳圖片的放大縮小(Image Resize)

最近在用summernote 然後因為客戶會上傳圖片,但是客戶又喜歡拉大拉小,結果導致code 變成 強制設定了width 和 height ,所以最好的方式就是讓客戶不要去拉動圖片,但是我找不到參數設定,在Ben幫忙下找到了一個解法就是從css 層級直接把邊框取消
sh014

2016-08-18

[C#] Regex筆記 - 小寫英文 數字 至少出現一次 不能有符號 限定字數

筆記一下 主要是專案需求 輸入6-15位小寫英文、數字
image

2016-08-17

[Javascript] 關於拖曳(jQuery UI sortable) 的一些操作(二)

上一篇文章我們談到一些關於jQuery UI 拖曳 的一些操作我們繼續把它說完
image