ASP.NET MVC WebApi 返回數據類型序列化控制(json,xml) 用javascript在客戶端刪除某一個cookie鍵值對 input點擊連接另外一個頁面,各類操做。 C# 往線程裏傳

ASP.NET MVC WebApi 返回數據類型序列化控制(json,xml)

 

咱們都知道在使用WebApi的時候Controller會自動將Action的返回值自動進行各類序列化處理(序列化爲json,xml等),可是若是Controller的自動序列化後的結果不是咱們想要的該怎麼辦呢?其實在MVC中有一個GlobalConfiguration(命名空間System.Web.Http)類能夠設置WebApi的Controller自動序列化機制,這裏咱們就經過WebApi的Controller自動序列化json來說解怎麼設置序列化json的機制。javascript

 

首先咱們來看一個例子,下面是一個普通的WebApi的Controller及其中一個Actioncss

複製代碼
public class DataController : ApiController
{
    [AcceptVerbs("get","post")]
    public People GetPeople()
    {
        People people = new People();
        people.Name = "Jim";
        people.Age = 28;
        people.Id = 12345;

        return people;
    }
}
複製代碼

在WebApi Controller的默認序列化機制下,這段代碼最後會獲得以下json文本:html

{"Name":"Jim","Age":28,"Id":12345}

 

如今假設咱們以爲上面獲得的json文本有點不盡人意,由於我並不知道這段json是由什麼C#類型序列化而來的,怎麼辦呢?下面就該GlobalConfiguration類出場了,咱們在MVC項目中的Global.asax文件的Application_Start方法中加入以下代碼:前端

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.All;


再次執行上面DataController的GetPeople方法,咱們此次獲得了以下json文本:html5

{"$type":"GlobalConfigurationDemoInMVC.Models.People, GlobalConfigurationDemoInMVC","Name":"Jim","Age":28,"Id":12345}

此次咱們就能夠從json文本的$type屬性知道這段json是從類GlobalConfigurationDemoInMVC.Models.People序列化而來的了。所以咱們能夠知道WebApi的Controller在作Action返回值的序列化時,使用的是GlobalConfiguration類中屬性的設置值。java

 

仔細看看GlobalConfiguration類咱們會發現,GlobalConfiguration.Configuration.Formatters就是序列化Action返回值的各類序列化模板,其中GlobalConfiguration.Configuration.Formatters.JsonFormatter就是序列化json的模板,GlobalConfiguration.Configuration.Formatters.XmlFormatter就是序列化xml的模板,固然你也能夠將自定義模板(模板類要繼承MediaTypeFormatter)加入到GlobalConfiguration.Configuration.Formatters中,實現將WebApi Controller的Action返回值序列化爲本身想要的任何格式。node

 

咱們還能夠發現GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings這個屬性是Newtonsoft的Json.Net框架中的類型,說明WebApi是使用Json.Net框架來作Action返回值的json序列化的。因此只要咱們將GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling設置爲TypeNameHandling.All,就可讓WebApi Controller在將Action的返回值序列化爲json時加上序列化類型了。咱們也能夠經過GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters屬性來增長自定義json轉換器,從而讓WebApi Controller將Action返回值序列化爲json時,使用咱們自定義的json轉換器。mysql

若是不明白TypeNameHandling.All是什麼請點擊本連接jquery

 

說了這麼多其實就想說明一點經過GlobalConfiguration類是能夠控制WebApi Controller中Action返回值的序列化機制的,可是請注意到目前爲止GlobalConfiguration類只能控制WebApi Controller中Action返回值的序列化機制,它不能控制WebApi Controller中Action參數的反序列化機制,更不能控制MVC Controller的Action序列化機制(經測試MVC Controller的Action參數和返回值的序列化機制都沒法由GlobalConfiguration類來控制,GlobalConfiguration類的設置對於MVC Controller是徹底不起做用的),因此它的使用範圍仍是頗有限的。ios

 

 

用javascript在客戶端刪除某一個cookie鍵值對

 

下面這個方法展現如何在客戶端瀏覽器上用javascript刪除某一個cookie鍵值對。

複製代碼
//用javascript刪除某一個cookie的方法,該方法傳入要刪除cookie的名稱
function RemoveCookie(cookieName) {
    var cookies = document.cookie.split(";");//將全部cookie鍵值對經過分號分割爲數組

    //循環遍歷全部cookie鍵值對
    for (var i = 0; i < cookies.length; i++) {
        //有些cookie鍵值對前面會莫名其妙產生一個空格,將空格去掉
        if (cookies[i].indexOf(" ") == 0) {
            cookies[i] = cookies[i].substring(1);
        }

        //比較每一個cookie的名稱,找到要刪除的那個cookie鍵值對
        if (cookies[i].indexOf(cookieName) == 0) {
            var exp = new Date();//獲取客戶端本地當前系統時間
            exp.setTime(exp.getTime() - 60 * 1000);//將exp設置爲客戶端本地時間1分鐘之前,將exp賦值給cookie做爲過時時間後,就表示該cookie已通過期了, 那麼瀏覽器就會將其馬上刪除掉

            document.cookie = cookies[i] + ";expires=" + exp.toUTCString();//設置要刪除的cookie的過時時間,即在該cookie的鍵值對後面再添加一個expires鍵值對,並將上面的exp賦給expires做爲值(注意expires的值必須爲UTC或者GMT時間,不能用本地時間),那麼瀏覽器就會將該cookie馬上刪除掉
            //注意document.cookie的用法很巧妙,在對其進行賦值的時候是設置單個cookie的信息,可是獲取document.cookie的值的時候是返回全部cookie的信息

            break;//要刪除的cookie已經在客戶端被刪除掉,跳出循環
        }
    }
}
複製代碼

 

 

input點擊連接另外一個頁面,各類操做。

 

1.連接到某頁
<input type="button" name="Submit" value="確 定" class="btn" onclick="location.href='filename.html'" />

2.返回(等同後退)
<input name="Submit2" type="button" class="btn" onclick="location.href='javascript:history.go(-1);'" value="返 回" />

3.打開新網頁
<input type="button" name="Submit2" value="確 定" class="btn" onclick="window.open('filename.html')" />

4.打開無邊框的新窗口
<input type="button" name="Submit2" value="確 定" class="btn" onclick="javascript:window.open('filename.html','','width=720,height=500,resizable=yes,scrollbars=yes,status=no')" />

5.打開新網頁同時指向另外一頁
<input type="button" name="Submit2" value="確 定" class="btn" onclick="window.open('filename.html');location.href='http://www.cxybl.com'" />

6.打開無邊框的新窗口同時指向另外一頁
<input type="button" name="Submit2" value="確 定" class="btn" onclick="javascript:window.open('http://www.cxybl.com','','width=720,height=500,resizable=yes,scrollbars=yes,status=no'); window.location='filename.html';" />

7.點擊按鈕彈出確認alert窗口
方式一:
<input type="button" name="Submit1" value="肯定" class="btn"
onClick="alert('是否確認提交?');location.href= 'filename.html';return false;" >
方式二:
<input type="button" name="Submit2" value="肯定" class="btn"
onClick="if (confirm('是否確認提交?'))location.href= 'filename.html';return false;" >

 
 
 

C# 往線程裏傳參數的方法總結

 

Thread (ParameterizedThreadStart) 初始化 Thread 類的新實例,指定容許對象在線程啓動時傳遞給線程的委託。   
Thread (ThreadStart) 初始化 Thread 類的新實例。  
由 .NET Compact Framework 支持。  
Thread (ParameterizedThreadStart, Int32) 初始化 Thread 類的新實例,指定容許對象在線程啓動時傳遞給線程的委託,並指定線程的最大堆棧大小。   
Thread (ThreadStart, Int32) 初始化 Thread 類的新實例,指定線程的最大堆棧大小。  
由 .NET Compact Framework 支持。  
  咱們若是定義不帶參數的線程,能夠用ThreadStart,帶一個參數的用ParameterizedThreadStart。帶多個參數的用另外的方法,下面逐一講述。 

 

1、不帶參數的 

複製代碼
using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  
 
namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  Thread t = new Thread(new ThreadStart(A));  
  t.Start();  
 
  Console.Read();  
  }  
 
  private static void A()  
  {  
  Console.WriteLine("Method A!");  
  }  
  }  
}
複製代碼

結果顯示Method A! 

 

2、帶一個參數的  

因爲ParameterizedThreadStart要求參數類型必須爲object,因此定義的方法B形參類型必須爲object。 

 

複製代碼
using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  
 
namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {   
  Thread t = new Thread(new ParameterizedThreadStart(B));  
  t.Start("B");  
 
  Console.Read();  
  }  
 
  private static void B(object obj)  
  {  
  Console.WriteLine("Method {0}!",obj.ToString ());  
 
  }  
  }  
}
複製代碼

 

結果顯示Method B! 

 

3、帶多個參數的  

  因爲Thread默認只提供了這兩種構造函數,若是須要傳遞多個參數,咱們能夠本身將參數做爲類的屬性。定義類的對象時候實例化這個屬性,而後進行操做。 

 

複製代碼
using System;  
using System.Collections.Generic;  
using System.Text;  
using System.Threading;  
 
namespace AAAAAA  
{  
  class AAA  
  {  
  public static void Main()  
  {  
  My m = new My();  
  m.x = 2;  
  m.y = 3;  
 
  Thread t = new Thread(new ThreadStart(m.C));  
  t.Start();  
 
  Console.Read();  
  }  
  }  
 
  class My  
  {  
  public int x, y;  
 
  public void C()  
  {  
  Console.WriteLine("x={0},y={1}", this.x, this.y);  
  }  
  }  
}
複製代碼

 

結果顯示x=2,y=3 

 

4、利用結構體給參數傳值。  

定義公用的public struct,裏面能夠定義本身須要的參數,而後在須要添加線程的時候,能夠定義結構體的實例。

 

複製代碼
//結構體  
  struct RowCol  
  {  
  public int row;  
  public int col;  
  };  
 
//定義方法  
public void Output(Object rc)  
  {  
  RowCol rowCol = (RowCol)rc;  
  for (int i = 0; i < rowCol.row; i++)  
  {  
  for (int j = 0; j < rowCol.col; j++)  
  Console.Write("{0} ", _char);  
  Console.Write("\n");  
  }  
  }
複製代碼

 

TCP/IP 協議

 

 在平常生活中,咱們要傳遞信息,之前最經常使用的手段是郵寄信件,想象一下你寫信寄信的過程,寫信產生數據,寄信傳遞數據,標準的信件格式是要在信封上寫「 收信人地址」和「 寄信人地址」(由此引入IP地址),「 收信人地址」對應數據包裏IP頭部中的「 目的ip地址」,「 寄信人地址」對應數據包裏IP頭部中的「 源ip地址」,寫上寄信、收信兩個地址就能夠保證信件能夠郵寄到目的地了。

但信件郵寄到目的地址後由誰來收?從上面這封信的收件人地址檢索到這個地址是「瀋陽大學」的,瀋陽大學裏可能住着幾萬人,那你這封信是郵寄給居住瀋陽大學裏的那我的的?收件人不明確,郵局就算幫你把信件送到這個地址,也沒辦法幫你投遞到具體的收信人。

所以,咱們郵件信件須要填寫「收件人姓名」、「收件人地址」和「寄件人姓名」、「寄件人地址」的組合,這樣才能保證信件能準確投遞到具體的收件人手中。

因此咱們要在信件上添加收信人姓名寄信人姓名(由此引入端口號),這個時候收件人姓名就對應數據包裏TCP協議頭部中的目的端口號,寄信人姓名對應數據包裏TCP協議頭部中的源端口號。

咱們再來對比傳遞信件與傳遞數據包的過程:

1.首先是位於南寧的李小明給瀋陽的王小花經過QQ發送了一條消息,李小明的電腦將此消息打包成TCP數據包發送到計算機網絡中,計算機網絡經過數據包中的目的IP地址把該數據包準確傳遞到王小花的電腦。

2.王小花的電腦收到了李小明的電腦發送過來的數據包,可是王小花的電腦上同時運行有多個程序(例如圖中的QQ和微信),雖然王小花的電腦知道這個數據包是傳輸給它的,可是它不知道該把這個數據包中的數據交給那個程序(就像上面講的,信件雖然郵寄到了瀋陽大學,但瀋陽大學裏住着那麼多人,這封信上沒有標示說是郵寄給誰的)。
3.針對以上的問題。若是咱們使用數據包結構中的源端口號和目的端口號,根據不一樣的程序使用不一樣的端口號來發送和接受數據,這樣數據包就能像郵寄信件同樣準確投遞到具體的電腦上指定的程序了。例如咱們指定QQ和微信使用的端口號分別是8000和8080,那麼只要你的電腦接收的數據包裏目的端口號是8000,那這個數據包就是傳輸給QQ的。


由上面的例子咱們還能夠引伸出數據包結構中的其餘字段的做用,例如咱們收到信後能夠簡單地經過信封是否完整來檢查該信件是否被別人在傳輸途中拆開並篡改過信件內容,那麼咱們怎麼保證咱們收到的數據包裏的數據有沒有在中途被別人拆開修改過呢?數據包結構中有一個字段叫TCP校驗和就是專門作這個工做的。由數據包的字段能夠看出,不少字段都有其用處,只是咱們一開始學的時候不必學的那麼仔細而已。

必定要形象地理解數據包,簡單的想一下,計算機網絡不就是幫助咱們傳遞信息的嗎?對於郵寄信件來講,信息的載體是信紙和信封,那計算機網絡中信息的載體是什麼?就是各類類型的數據包啊! 數據包裏有咱們關心的信息,也有咱們不關心的花銷,咱們要學的就是如何使網絡按照咱們的要求傳遞信息。例如,咱們郵寄信件,有平信,有掛號信,根據不一樣的應用場景選擇不一樣的郵寄方式。計算機網絡裏信息傳輸也是同樣,針對不一樣的場景使用不一樣的協議, 有些場景須要多種協議同時配合使用。

上面那個QQ的例子不太嚴謹,由於QQ和微信的信息都是經過騰訊服務器中轉的,但你是初學者不必一開始就深究這些細節,總之要學會把一切抽象的東西都對照生活中的一些場景使之形象化。這樣你的學習過程就不會那麼枯燥乏味了。

再來看一下爲何須要網絡協議,咱們看下圖的簡單類比:


從上圖能夠看出,咱們郵寄信件只是想要把咱們寫在信紙信息傳遞出去,對於咱們來講,郵寄信件須要購買信封和郵票,這對於咱們來講是沒有意義的,甚至咱們會以爲連信紙都是多餘的,由於還要購買信紙,咱們只是想傳遞信息而已,信封、郵票和信紙對於咱們來講是傳遞信息的額外花銷,可是沒有這些花銷,你的信息就沒法經過郵局傳遞。同理,在計算機網絡裏也是同樣的,咱們的經過計算機網絡傳遞信息也須要額外的花銷,這些花銷體如今計算機網絡裏就是TCP/IP的各類協議數據包的頭部(除去應用層數據以外的其餘信息)。

你要知道計算機網絡裏的數據交換都是像咱們平常郵寄信件同樣經過各類的數據包來傳遞的,理解了數據包的做用以後你就應該開始學習計算機網絡是如何把數據包傳輸到目的地的?例如咱們的電腦在生成數據包時是怎麼知道對方電腦的ip地址的,(由此引入DNS)?咱們的信件是最開始是經過郵局幫咱們郵寄的,那麼咱們的電腦的數據包應該由誰來幫咱們傳輸呢?(由此引入網關),網關又是如何幫咱們把數據包傳輸到目的地的?(由此引入各類路由協議)。

因此,你想要學習網絡協議,就要先把一些基本的協議的做用和工做過程搞清楚,網絡設備還沒智能到人腦的程度,它是由人類創造出來的,它的工做過程確定是符合人類的交流習慣,按照人類的交流習慣來設計的。因此要以人類的思惟方式去理解這些協議。例如,你給別人打電話,不可能電話一接通你就啪啦啪啦地說一大通,萬一對方接通電話後由於有事還沒來得及傾聽呢?這不太符合正常人類的交流習慣。通常是電話接通後,雙方通常會有個交互的過程,通常是你說一聲「你好」,而後對方也回覆一聲「你好」,雙方經過各自一句「你好」明確對方的注意力都放在了電話溝通上,而後大家雙方就能夠開始交流了,這纔是正常的人類交流方式,這個過程體如今計算機網絡裏就是網絡協議!咱們經過TCP協議在兩臺電腦創建網絡鏈接以前要先發數據包進行溝通,溝通後再創建鏈接,而後纔是信息的傳輸。而UDP協議就相似於咱們的校園廣播,廣播內容已經經過廣播站播放出去了,你能不能聽到,那就與廣播站無關了,正常狀況下,不可能你說沒注意聽而後再讓廣播站再播放一次廣播內容。

同理,咱們來看一下網絡廣播,對於某一個網絡的網絡廣播,只要發送一個網絡廣播包,這個子網裏的全部電腦都能收到這些廣播包,這是一個很方便的通知機制,可是會增長對廣播數據不感興趣主機的處理負荷。相似咱們的校園廣播,校園廣播一開啓播放,校園裏的全部人都能聽到,可是不是全部人都對廣播內容感興趣,有些人選擇傾聽,有些人選擇忽略。但無論你是傾聽仍是忽略,廣播的聲音都會傳到你的耳邊。例如,校園廣播一條失物招領通知,你根本沒丟東西,因此這個廣播內容與你無關,可是廣播的聲音仍是會傳到你的耳邊。對比廣場舞音樂,對於跳廣場舞的大媽大嬸來講,這就是音樂,對於想睡覺的您來講,這就是噪音。

怎樣才能更好地理解常見的網絡協議?學習網絡協議就是要先學習它的工做過程,例如DHCP協議,協議大概是這樣講的:啓用了DHCP協議的電腦啓動後便會發送廣播數據包網絡中尋找DHCP服務器,若是網絡中有DHCP服務器,這臺DHCP服務器便會發送廣播數據包與你的電腦進行響應。

這個過程很簡單,就是我想要獲取ip地址,而後你給我提供一個。想象一下若是你是DHCP協議的設計者,你會考慮到在ip獲取和分配過程當中會有哪些特殊狀況呢?

第一種,若是在你啓動電腦的過程當中網絡中的dhcp服務器恰好宕機了,這時怎麼辦?讓你的電腦一直徒勞地發送尋找DHCP服務器的廣播包嗎?仍是在發現沒有DHCP服務器與你響應後就不再發了?仍是每隔一段時間就再發送一次尋找DHCP服務器的廣播包?

第二種,若是DHCP服務器的可用ip地址恰好已經分配完了,那又怎麼處理?

第三種,若是網絡中同時有兩臺以上的DHCP服務器,那又該怎麼處理?

第四種,對於已經分配出去的ip地址就這麼一直保持分配出去的狀態嗎?仍是要回收?若是要回收?是我去問你還要不要使用這個ip地址?仍是我設定一個回收的時間?只要你在這個時間段內你沒有再次聯繫我從新獲取這個ip地址我就把它回收?等等。。。

經過這樣的思考你能夠發現,網絡協議其實也是按照人的思惟方式在工做,可是網絡設備不會像人同樣思考,因此咱們當初給它設計各類協議的時候就要儘量地爲它想到這些協議所要應對的場景。例如,你能夠先學習ARP協議的工做過程,而後再百度搜索ARP攻擊是怎麼回事?就是利用ARP協議設計的不嚴謹,僞造ARP數據包篡改網絡裏其餘電腦的ARP緩存列表。ARP協議採用廣播發送協議數據包,這就致使裏網絡裏的每一臺電腦都會收到ARP的協議數據包,而ARP協議規定即便你的電腦沒有發出arp請求,只要有ARP迴應包到達你的主機,你就要對這些協議包進行處理,並將迴應包中的mac和ip對應關係放入本身的arp緩存。若是ARP迴應包裏面的網關IP與ARP對應關係是正確的,這個問題不大,但若是有人在網絡中僞造了錯誤的網關IP與ARP對應關係並廣播到網絡裏,那就出問題了,你可能也意識到你上不了網是由於網關IP對應的ARP對應關係出錯,可是沒有辦法,由於你的電腦上運行的ARP協議規定,你的電腦必需要接受這個錯誤的對應關係,這就是網絡協議設計的不嚴謹,設計和實現ARP協議的時候沒有想到竟然會有人在網絡中僞造ARP迴應包並廣播到網絡中。

若是你看《TCP/IP詳解》這套書以爲很吃力,那就建議暫時不要看了,強烈建議你先看《計算機網絡自頂向下方法與Internet特點》這本書,這本書對常見的網絡協議的工做過程進行了分析,可讀性很強,看起來比《TCP/IP詳解》輕鬆多了,瞭解了常見協議的工做過程你就能夠動手作實驗來驗證這個協議的工做過程了,建議先使用模擬器來作實驗,像cisco packet tracer 就很好用,它有個模擬功能能夠像看動畫同樣看到網絡數據包是如何在網絡拓撲結構中傳輸和交互的,對了解協議的工做過程很是有用,還有抓取數據包的功能,能夠抓去指定協議的數據包進行查看。

使用真實設備經過在電腦上安裝抓包工具進行抓包也能夠,只不過沒有模擬器上看得那麼直觀,對於初學者仍是建議先以模擬器作實驗爲主,由於你能夠很直觀地觀察你所設計的網絡的運行狀況,更容易把心放在學習網絡協議的工做過程上。

 



做者:知乎用戶
連接:https://www.zhihu.com/question/51074319/answer/124733136
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
若是這篇文章對你有幫助的話,評論或推薦下吧!(轉載請註明原做者!)
 

用C#+Selenium+ChromeDriver 生成個人咕咚跑步路線地圖

 

先上結果:

 

 

 

  以前 在公司業務中用過java+Selenium+ChromeDriver ,使用起來很是順手,能夠完美模擬真實的用戶瀏覽行爲。最近休息的時候想用C#也試一下,因而有了本文。

  實現原理同樣,只是由java換成了C#。(ps:我的感受就業務開發代碼來講,熟悉以後兩種語言能夠無縫切換。)

  事先聲明,代碼中會採集用戶登陸咕咚網站以後的我的數據接口,若是此行爲損害了咕咚網站的利益,請聯繫我刪除或修改本文(我對採集行爲一直本着每一次調用以後sleep的原則,畢竟不是爲了把人家的網站搞死)。文中使用的數據是我本身的跑步數據,不涉及到其餘用戶的數據。

  項目結構:爲了方便跑友使用,用的winform程序,附nuget包

 

 

 如下是form1.cs的代碼,刪除了部分提示的 MessageBox.Show(),從產品角度來說,應該添加loading提示和進度條,這裏就只放代碼了。須要安裝最新的chrome瀏覽器+代碼中使用的chromedriver是 v2.9.248315

複製代碼
  1 using Newtonsoft.Json;
  2 using OpenQA.Selenium;
  3 using OpenQA.Selenium.Chrome;
  4 using System;
  5 using System.Collections.Generic;
  6 using System.ComponentModel;
  7 using System.Data;
  8 using System.Drawing;
  9 using System.IO;
 10 using System.Linq;
 11 using System.Net;
 12 using System.Text;
 13 using System.Threading;
 14 using System.Threading.Tasks;
 15 using System.Windows.Forms;
 16 
 17 namespace GuDongLine
 18 {
 19 public partial class Form1 : Form
 20 {
 21 public Form1()
 22 {
 23 
 24 InitializeComponent();
 25 label2.Text = "請根據提示進行操做,本產品須要最新版本Chrome瀏覽器支持,網絡良好的狀況下運行,內部交流,不做爲商業軟件,若有侵權請掃中間微信二維碼聯繫我。祝各位跑友生活愉快,身體健康,happy PB";
 26 }
 27 delegate void ChangeInvoke(int num);
 28 public int Fun1;
 29 private void button1_Click(object sender, EventArgs e)
 30 {
 31 try
 32 {
 33 Thread thread = new Thread(go);
 34 thread.Start();
 35 
 36 }
 37 catch (Exception)
 38 {
 39 MessageBox.Show("操做異常,請從新打開,或聯繫我");
 40 }
 41 
 42 }
 43 private void ChangeNum()
 44 {
 45 MessageBox.Show("正在運行請等待!運行完畢後會有提示!");
 46 }
 47 public void go()
 48 {
 49 if (MessageBox.Show("下面請登陸咕咚,本軟件只會向咕咚官網發送和接受數據,若是發現軟件向其餘網址發送數據,說明本軟件被修改,可能有病毒", "登陸咕咚帳號", MessageBoxButtons.OKCancel).Equals(DialogResult.OK))
 50 {
 51 ChromeOptions options = new ChromeOptions();
 52 options.AddArguments("--test-type", "--ignore-certificate-errors");
 53 IWebDriver driver = new ChromeDriver(System.Environment.CurrentDirectory, options);
 54 driver.Url = "http://www.codoon.com/home";
 55 Thread.Sleep(10000);
 56 
 57 driver.Navigate().GoToUrl("http://www.codoon.com/gps_sports/my_routes");
 58 
 59 
 60 Thread.Sleep(5000);
 61 int runCount = int.Parse(driver.FindElement(By.Id("current_index")).Text) / 3;
 62 for (int i = 0; i < runCount + 5000; i++)
 63 {
 64 try
 65 {
 66 driver.FindElement(By.ClassName("more_data")).Click();
 67 Thread.Sleep(800);
 68 }
 69 catch (Exception)
 70 {
 71 if (i > runCount + 100)
 72 {
 73 break;
 74 }
 75 
 76 }
 77 }
 78 Thread thread2 = new Thread(ChangeNum);
 79 thread2.Start();
 80 string userId = driver.FindElement(By.ClassName("home_user_header")).GetAttribute("src").Substring(33, 36);
 81 string data = "";
 82 dynamic va = driver.FindElements(By.ClassName("detail_sports_content"));
 83 foreach (IWebElement iwe in va)
 84 {
 85 using (var client = new WebClient())
 86 {
 87 Thread.Sleep(200);
 88 var responseString = client.DownloadString("http://www.codoon.com/gps_sports/route?user_id=" + userId + "&route_id=" + iwe.FindElement(By.TagName("table")).GetAttribute("id") + "&need_next=1&_=1520349266435");
 89 
 90 
 91 var DynamicObject = JsonConvert.DeserializeObject<dynamic>(responseString);
 92 string ss = "";
 93 foreach (var s in DynamicObject.line)
 94 {
 95 ss += ((double)s[1] + 0.0062).ToString() + "," + ((double)s[0] + 0.00135).ToString() + ";";
 96 }
 97 ss = ss.Remove(ss.Length - 1);
 98 data += ss + "&";
 99 }
100 }
101 data = data.Remove(data.Length - 1);
102 driver.Close();
103 string html = @"<!DOCTYPE html><html lang='zh - CN\'>
104 <head>
105 
106 <meta charset = 'utf-8'>
107 
108 <meta http - equiv = 'X-UA-Compatible' content = 'IE=edge'>
109 
110 <meta name = 'viewport' content = 'width=device-width, initial-scale=1'>
111 
112 <title> my_all_run_lines </title>
113 
114 <link rel = 'stylesheet' href = 'http://cache.amap.com/lbs/static/main1119.css' />
115 </head>
116 <body>
117 <div id = 'container' class='container'></div>
118 <script src = 'http://webapi.amap.com/loca?key=6ac3f558819c2c4711ea0c0a37192137'></script>
119 <script src='http://a.amap.com/Loca/static/dist/jquery.min.js'></script>
120 <script>
121 
122 var map = Loca.create('container', {
123 key: '1e387d3db027b46a23600cf7f2ed7344',
124 mapStyle: 'amap://styles/grey',
125 features: ['bg', 'road'],
126 zoom: 10
127 });
128 
129 var layer = Loca.visualLayer({
130 container: map,
131 type: 'line',
132 shape: 'line',
133 });
134 
135 $.get('http://a.amap.com/Loca/static/mock/buslines.txt', function (data) {
136 data = '" + data + "';" + "" +
137 "" +
138 "" +
139 "" +
140 "" +
141 "" + @"var lines = data.split('&').map(function (item) {
142 return {
143 linePath: item.split(';').map(function(lnglat) {
144 return lnglat.split(',');
145 })
146 };
147 });
148 
149 layer.setData(lines, {
150 lnglat: 'linePath'
151 });
152 layer.setOptions({
153 style: {
154 opacity: 0.2,
155 lineWidth: 2,
156 stroke: '#b7eff7',
157 }
158 });
159 
160 layer.render();
161 })
162 
163 </script>
164 </body>
165 </html>";
166 
167 string path = System.Environment.CurrentDirectory + "\\map.html";
168 File.WriteAllText(path, html);
169 }
170 else
171 {
172 System.Environment.Exit(0);
173 }
174 }
175 
176 }
177 }
178 
179  
複製代碼

 

   說一下思路:

    1.肯定使用的語言和採集框架。

    2.肯定數據來源,從咕咚app仍是咕咚網站,若是咕咚網站沒有提供接口,估計就得去研究app了。本文中耗費時間的一個點就在研究咕咚網站的請求數據的規則上了,原則來講,只要正經常使用戶能打開的網頁,沒法擋住採集工具。

    3.數據的展現:找了百度地圖和高德地圖的api接口,兩個也都分別試了一下,其實咕咚網自己是使用的谷歌的,可是谷歌的接口研究起來不太方便,最後從數據展現的效果上選擇了高德地圖,順便說一下,從咕咚採集的跑步數據實際上是一組一組的經緯度座標,並且是被閹割的經緯度,精確度不夠,因此地圖上顯示的時候會有誤差,隨着跑步距離的增加,數據量也比較大,以文中1700千米的跑量,生成的展現html是2.42M ,我家裏的古董筆記本加載的時間比較長。

 

 

  另:好久之前跟咕咚的客服打過電話,想要一個集成本身全部跑步路線的功能,貌似答應的很好,可是沒發現app中有此功能(本文的由來?),固然,若是提供這個功能,一下加載這麼多數據,對服務器來講不太好,可是能夠迂迴一下嘛,好比只生成一個月以前的?申請以後生成?我的感受有許多解決辦法,並且也能作成一種營銷活動。

 

  歡迎探討,歡迎指教,謝謝你們,但願每個程序員身體健康。

                                                                    by:跑過16+17北馬的coder

 

 

 

(轉)值得學習百度開源70+項目

 

百度,一家讓人既愛又恨的企業,血友吧貼吧被賣,魏則西事件的持續發酵,一時間將百度推到了輿論的風口浪尖上。是非對錯,咱們在這裏也很少作評判,本文呢爲你們整理了百度開源的70+項目,看看有沒有感興趣的。本文內容綜合整理自oschina、github。

1. JavaScript圖表庫 ECharts

ECharts開源來自百度商業前端數據可視化團隊,基於html5 Canvas,是一個純Javascript圖表庫,提供直觀,生動,可交互,可個性化定製的數據可視化圖表。創新的拖拽重計算、數據視圖、值域漫遊等特性大大加強了用戶體驗,賦予了用戶對數據進行挖掘、整合的能力。

2. 分佈式配置管理平臺 Disconf

Distributed Configuration Management Platform(分佈式配置管理平臺)專一於各類 分佈式系統配置管理 的通用組件/通用平臺, 提供統一的配置管理服務。

3. 移動WebApp開發框架 Clouda

Clouda是基於node.js的Webapp開發框架,在使用Clouda時須要安裝node.js和MongoDB。

4. 全新 3D 可視化庫 ECharts-X

ECharts-X是 ECharts 團隊推出的全新 3D 可視化庫,它是基於 ECharts 的擴展,底層深度整合了 WebGL 庫QTEK和 Canvas2D 庫ZRender。

5. 百度的Javascript庫 Tangram

Tangram是Baidu開發的一套簡單可依賴的Javascript庫。

6. 在線富文本編輯器 UMeditor

UMeditor,簡稱UM,是爲知足廣大門戶網站對於簡單發帖框,或者回復框需求所定製的在線富文本編輯器。 UM的主要特色就是容量和加載速度上的改變,全版本的代碼量爲125k,並且放棄了使用傳統的iframe模式,採用了div的加載方式, 以達到更快的加載速度和零加載失敗率。

7. Android自動化測試框架 Cafe

Cafe 測試框架是一款來自百度QA部門的具備開創性意義的Android平臺的自動化測試框架,框架覆蓋了Android自動化測試的各類需求。框架致力於實現跨進程測試、快速測試、深度測試,解決了Android自動化測試中的諸多難題,好比業界一直沒有解決的跨進程測試問題。

8. Web 端的 UI 框架 BlendUI

BlendUI 是百度公司的一個 Web 前端 UI 框架。BlendUI 能讓Webapp的體驗和交互與Native媲美。

9. 百度音樂播放內核 MuPlayer

MuPlayer 是一款跨平臺、輕量級的音頻播放解決方案,是百度@音樂前端團隊開發維護的瀏覽端音頻播放內核,它基於HTML5 Audio及Flash音頻技術,已在百度音樂多個線上產品線中應用,具有很強的靈活性和穩定性。

10. 輕量級UI組件 Magic

Magic是用JavaScript腳本開發的輕量級UI組件,具備性能高效、代碼量小、支持多種初始化方式等方面的優點,Web前端開發者可使 用Magic快速搭建前端功能比較複雜的網站。Magic的每一個組件都有很是豐富的接口和事件處理,網站也提供了詳細的使用文檔和Demo演示。Web前 端開發者能夠經過定製組件、初始化方式和插件得到最輕量級版本。

11. 高性能RPC框架 BGCC

BGCC(音:[bigsisi:])是百度具備徹底知識產權的跨平臺、多語言、面向對象與服務的輕量級高性能RPC框架。 它支持事務級別的服務端消息主動推送,強大的接口級事務管理功能,包含自定義的通訊協議、接口描述語言(bidl)、 強大的代碼生成引擎(bidl2sl),Java、C++通訊無縫整合。

12. 分佈式表格系統 Tera

Tera 是一個高性能、可伸縮的數據庫系統,被設計用來管理搜索引擎萬億量級的超鏈與網頁信息。爲實現數據的實時分析與高效訪問,咱們使用按行鍵、列名和時間戳全局排序的三維數據模型組織數據,使用多級Cache系統,充分利用新一代服務器硬件大內存、SSD盤和萬兆網卡的性能優點,作到模型靈活的同時,實現了高吞吐與水平擴展。

13. 基於 Node 的 JavaScript 同構解決方案 rebas

基於 Node 的 JavaScript 同構解決方案。提供了 saber 的服務端運行環境,使其具有從 SPA 到 MPA,從前端渲染到後端渲染的深度響應式能力。

14. 面向c/c++語言的構建工具 Broc

broc是一款面向c/c++語言的構建工具,提供了編譯、分支依賴、依賴模塊下載等功能。不一樣於make, cmake等以庫文件連接的編譯方式,broc將依賴庫源代碼與程序源代碼一併同時進行編譯,這種方式能夠避免程序源代碼與依賴庫編譯選項或平臺不一致導 致的軟件兼容性問題;broc支持編譯結束後自動運行單元測試用例;藉助Jenkins broc還能完成軟件的持續集成。

15. 富文本編輯器 Ueditor

UEditor是由百度web前端研發部開發所見即所得富文本web編輯器,具備輕量,可定製,注重用戶體驗等特色。

16. 在線腦圖編輯器 Kity Minder

KityMinder 是百度FEX團隊的f-cube小組(原UEditor小組)的又一力做。做爲一款在線的腦圖編輯工具,它有着不少Native編輯工具的交互體驗。KM與UE有着同樣的宗旨,就是注重最終用戶的使用體驗。同時,它充分發揮了Web雲存儲的優點,能夠直接將編輯中的腦圖同步到雲端。此外,藉由首創的 「雲盤分享」功能,用戶能夠一鍵將當前編輯的腦圖直接生成在線連接共享給其餘用戶,實現無縫溝通。

17. 輕量級的Canvas類庫 ZRender

zrender(Zlevel Render) 是一個輕量級的Canvas類庫,MVC封裝,數據驅動,提供類Dom事件模型,讓canvas繪圖大不一樣!

18. 文件上傳組件 WebUploader

WebUploader 是由Baidu WebFE(FEX)團隊開發的一個簡單的以HTML5爲主,FLASH爲輔的現代文件上傳組件。在現代的瀏覽器裏面能充分發揮HTML5的優點,同時又不摒棄主流IE瀏覽器,延用原來的FLASH運行時,兼容IE6+,Andorid 4+,IOS 6+。兩套運行時,一樣的調用方式,可供用戶任意選用。

19. 手勢識別與事件庫 Touch.js

Touch.js是移動設備上的手勢識別與事件庫, 由百度雲Clouda團隊維護,也是在百度內部普遍使用的開發工具。

20. 地圖可視化工具庫 Mapv

Mapv 是一款基於百度地圖的大數據可視化開源庫,能夠用來展現大量的點、線、面的數據,每種數據也有不一樣的展現類型,如直接打點、熱力圖、網格、聚合等方式展現數據。

21. 專一於移動端的滑動解決方案 iSlider

iSlider 是個很是平滑的滑塊,支持移動端 WebApp,HTML5App 和混合型的 App。

22. 百度UI庫 ESUI

ESUI是一套簡單的UI Library,提供一系列的控件,能知足基本頁面交互功能。ESUI的API與默認視覺皮膚遵循BAIDU ECOMUI標準。

23. jQuery的彈窗插件 wBox

wBox輕量級的彈出窗口jQuery插件,基於jQuery1.4.2開發,主要實現彈出框的效果,而且加入了不少有趣的功能,好比callback函數,顯示隱藏層,Ajax頁面,iframe嵌入頁面等功能。

24. 百度BI平臺 BiPlatform

百度開源的新一代一站式敏捷bi平臺,提供報表和OLAP服務的敏捷BI平臺。

25. 前端集成解決方案 F.I.S

F.I.S(FIS)所提供的集成解決方案依託於一套靈活高效的 編譯工具,F.I.S藉助該編譯平臺對前端開發資源進行整合。接觸F.I.S,能夠從該平臺入手。

26. 移動端組件庫 Global Mobile UI

GMU(Global Mobile UI)是百度前端通用組開發的移動端組件庫,具備代碼體積小、簡單、易用等特色,組件內部處理了不少移動端的bug,覆蓋機型廣,能大大減小開發交互型組件的工做量,很是適合移動端網站項目。

27. RPC框架 sofa-pbrpc

sofa-pbrpc(sofa protobuf-based rpc)是使用Boost::Asio實現的基於Google Protocol Buffers RPC框架的網絡通訊庫,在百度公司各部門獲得普遍使用。

28. 百度文件系統 BFS-Baidu

百度的核心數據庫Tera將數據持久化在分佈式文件系統上,分佈式文件系統的性能、可用性和擴展性對整個上層搜索業務的穩定性與效果有着相當重要的影響。

29. 企業級標準加載器 ESL

ESL 是一個瀏覽器端、符合AMD的標準加載器,適合用於現代Web瀏覽器端應用的入口與模塊管理。

30. 前端移動框架 Saber

Saber 是 模塊化、組合式 的前端移動框架。

31. 百度mysql分庫分表中間件服務器 heisenberg

heisenberg 是百度的熊照同窗(id:brucexx)編寫的一款基於MySQL協議之上的分庫分表中間件服務器,支持各類靈活(velocity腳本自定義)的分庫分表規則,作到應用和分庫分表相隔離,而且爲mysql進行dbproxy,減小了db的鏈接IO壓力,而且可作到讀寫分離以及replication的手工切換。

32. doc 文檔在線編輯和預覽 wordonline

wordonline 是在線編輯和預覽 .doc 和 .docx 文檔的工具。

33. JS模板引擎 BaiduTemplate

baiduTemplate但願創造一個用戶以爲「簡單好用」的JS模板引擎。

34. 在線文件管理器 UFinder

UFinder 是百度前端團隊基於頁面級的文件管理應用。

35. webSlide

webSlide是用於在線PPT演示文檔的javascript框架。

36. 網絡幻燈片 nodePPT

nodePPT 是使用nodejs寫的網絡幻燈片。

37. 前端模塊化解決方案 fis-pure

fis-pure 是基於FIS的純前端模塊化解決方案pure。

pure是基於FIS二次封裝能力封裝而成的解決方案,能夠直接使用,也能夠參考fis-pure自行封裝或組合使用插件來構建屬於本身的一體化解決方案。

38. J2EE Velocity 前端集成方案 jello

jello 是針對服務端爲 JAVA + Velocity 的前端集成解決方案。jello 爲優化前端開發而生,提供先後端開發分離、自動性能優化、模塊化開發機制等功能。

39. protobuf的Java開發包 jprotobuf

jprotobuf是針對Java程序開發一套簡易類庫,目的是簡化java語言對protobuf類庫的使用,使用jprotobuf能夠無需再去了解.proto文件操做與語法,直接使用java註解定義字段類型便可。

40. 人工智能軟件 WARP-CTC

WARP-CTC 是百度硅谷 AI 研究所 (SVAIL) 開源的百度關鍵人工智能 (AI) 軟件。

41. 百度雲Go語言SDK bcsgo

百度雲存儲服務Go語言SDK。

42. 前端模塊加載解決方案 modJS

modJS 是一套的前端模塊加載解決方案。與傳統的模塊加載相比,modJS 會根據產品實際使用場景,自動選擇一種相應的方案,使最終的實現很是輕量簡潔。

43. 公式編輯器 KityFormula

Kity Formula 爲您提供公式表達式解析,可視化公式編輯,公式完美展現於一身的web端的總體解決方案。

44. 高品質的 WebGL 類庫 Qtek

Qtek (WebGL Graphic Library) 是一個高品質的 WebGL 類庫,目前仍處於實驗階段。

物理組件:

https://github.com/pissang/qtek-physics

2D 組件

https://github.com/pissang/qtek-2d

45. 集羣操做系統 Galaxy

Galaxy是一個數據中心操做系統,目標是最大化資源的利用率與下降應用部署運維代價,支持萬臺集羣資源調度與管理,目前主要服務於百度網頁搜索離線架構業務,解決分佈式文件系統,分佈式表格系統,以及上層計算模塊運維與部署問題。

46. 富瀏覽器端web應用框架 ER

ER 是百度公司的一個富瀏覽器端web應用的框架,適用於並能很方便地構建 一個整站式的AJAX web應用。

47. 深度學習平臺 PaddlePaddle

PaddlePaddle(並行分佈式深度學習)是一個易於使用的、高效的、靈活的和可擴展的深度學習平臺,它最初是百度的科學家和工程師爲了能讓百度產品能提供深度學習而開發的。

48. 前端統計框架 ALog

ALog 是前端統計框架。

49. Baidu Push SDK

Baidu Push SDK 是百度的雲推送 SDK 開發包。

50. 企業級前端應用開發平臺 EDP

EDP是基於 Node 的前端應用開發平臺,是一個企業級前端應用的開發平臺,提供了經常使用的項目管理工具、包管理工具、調試工具、構建工具、代碼生成工具、代碼檢測工具等一系列開發時的支持,並容許用戶自定義本身的擴展。

51. HTML5 音樂播放器 Player

Player 是 HTML5 版本音樂播放器,支持 iOS 設備。

演示地址:http://4.qdemo.sinaapp.com/html5/chrome/

52. jQuery 遮罩插件 SlipHover

SlipHover 是一個基於 jQuery 的插件,它可以感知鼠標移動方向,並在相應的方向(或反方向)以動畫的方式顯示出一個遮罩層,用來顯示標題或描述,應用到幻燈片或相冊中是個不錯的選擇。 SlipHover 還支持自定義遮罩高度、動畫時間、字體顏色、背景顏色、文字排版等等。

53. 模板引擎 ETPL

ETPL是一個靈活、具備強大複用能力的高性能的模板引擎,適用於WEB前端應用中視圖的生成,特別是SPA(Single Page APP)類型的應用。

54. 基於 LESS 的樣式工具庫 EST

EST(ECOM Styling Toolkit)是一個基於 LESS 的樣式工具庫,幫助您更輕鬆地書寫 LESS 代碼。EST提供了一系列方便 快捷的 mixin,只在調用時才輸出代碼。est 不但願提供直接給 HTML 調用的類名,用「樣式類」污染 HTML 代碼的語義。固然您也能夠根 據本身的項目需求基於 est 搭建樣式類庫,提供類名接口來進行快速開發。

演示地址:http://ecomfe.github.io/est/fiddle/

55. 基於 SVG 的矢量圖形庫 Kity

Kity 是一個基於 SVG 的矢量圖形庫,幫助你快速在頁面上建立和使用矢量元素。

56. 前端資源聚合平臺 Lights

Lights 是FIS包管理工具。提供便捷、易用的資源安裝、發佈、搜索,管理工具。用於團隊間快速共享資源,提高開發效率。 

57. EDP 擴展 edpx-zhixin

edpx-zhixin 是 edp 的一個擴展,提供給百度的FE開發搜索結果頁模板的工具。

58. 服務虛擬化 Terminator

服務虛擬化指的就是虛擬出不穩定、不可用、未開發徹底的服務。

59. 前端集成解決方案 baidu yogurt

yogurt 是基於 fis 擴展針對服務端爲 express.js 的前端集成解決方案。

60. 移動 Web 的 CSS 樣式工具庫 Rider

rider是一個基於 Stylus、專一於移動 Web 的 CSS 樣式工具庫。

61. kraken.js 擴展 Yog

Yog 是一個基於 Express.js 的 Node.js Web 應用引導模塊,擴展了 kraken.js。

62. 基於Nodejs 的前端工具集 FEinit

FEinit 是基於Nodejs 的前端工具集,由於是在windows系統開發,因此目前僅適合 windows 系統。

63. Node Log 統計方案 yog-log

yog-log 是 Node Log 統計方案,是yog框架的log統計模塊,支持中間件或者單獨使用等方式,兼容ODP日誌格式與配置。

64. 輕量級覆蓋率測試工具 logcover

logcover 是一款很是便捷的統計測試用例異常日誌覆蓋率的工具。可清晰地分析出程序源代碼中異常日誌的覆蓋狀況,檢驗測試充分度,指導測試用例完善。 

65. 知心組件庫 moye

Moye 是 ECOM UI 1.1 規範的一個輕量級實現。

66. fis-postprocessor-amd

fis-postprocessor-amd 能識別 js 中 amd 依賴,自動包轉 isMod  的 js 爲 amd。

67. EDP 的移動端擴展 EDPM

edpx-mobile(EDPM) 是 EDP 的移動端擴展。EDPM 是對 edp 功能的補充,爲移動項目提供項目初始化、腳手架、調試服務器等功能。

68. 前端代碼風格工具 FECS

FECS 是基於 Node.js 的前端代碼風格工具。

69. WEB 組件規範 xspec

xspec 是一系列基於WEB COMPONENTS的組件規範,致力於藉助規範的力量讓組件發揮更大的價值。

70. yog-pm

yog-pm是在pm2的基礎上提供了幾個加強命令,提升pm2的易用性和穩定性。

71. Express.js 中間件 yog-view

yog-view 是一個 Express.js 中間件,用來優化 js/css 輸出排序,容許在 bigpipe 模式中顯示。

百度,一家讓人既愛又恨的企業,血友吧貼吧被賣,魏則西事件的持續發酵,一時間將百度推到了輿論的風口浪尖上。是非對錯,咱們在這裏也很少作評判,本文呢爲你們整理了百度開源的70+項目,看看有沒有感興趣的。本文內容綜合整理自oschina、github。

1. JavaScript圖表庫 ECharts

ECharts開源來自百度商業前端數據可視化團隊,基於html5 Canvas,是一個純Javascript圖表庫,提供直觀,生動,可交互,可個性化定製的數據可視化圖表。創新的拖拽重計算、數據視圖、值域漫遊等特性大大加強了用戶體驗,賦予了用戶對數據進行挖掘、整合的能力。

2. 分佈式配置管理平臺 Disconf

Distributed Configuration Management Platform(分佈式配置管理平臺)專一於各類 分佈式系統配置管理 的通用組件/通用平臺, 提供統一的配置管理服務。

3. 移動WebApp開發框架 Clouda

Clouda是基於node.js的Webapp開發框架,在使用Clouda時須要安裝node.js和MongoDB。

4. 全新 3D 可視化庫 ECharts-X

ECharts-X是 ECharts 團隊推出的全新 3D 可視化庫,它是基於 ECharts 的擴展,底層深度整合了 WebGL 庫QTEK和 Canvas2D 庫ZRender。

5. 百度的Javascript庫 Tangram

Tangram是Baidu開發的一套簡單可依賴的Javascript庫。

6. 在線富文本編輯器 UMeditor

UMeditor,簡稱UM,是爲知足廣大門戶網站對於簡單發帖框,或者回復框需求所定製的在線富文本編輯器。 UM的主要特色就是容量和加載速度上的改變,全版本的代碼量爲125k,並且放棄了使用傳統的iframe模式,採用了div的加載方式, 以達到更快的加載速度和零加載失敗率。

7. Android自動化測試框架 Cafe

Cafe 測試框架是一款來自百度QA部門的具備開創性意義的Android平臺的自動化測試框架,框架覆蓋了Android自動化測試的各類需求。框架致力於實現跨進程測試、快速測試、深度測試,解決了Android自動化測試中的諸多難題,好比業界一直沒有解決的跨進程測試問題。

8. Web 端的 UI 框架 BlendUI

BlendUI 是百度公司的一個 Web 前端 UI 框架。BlendUI 能讓Webapp的體驗和交互與Native媲美。

9. 百度音樂播放內核 MuPlayer

MuPlayer 是一款跨平臺、輕量級的音頻播放解決方案,是百度@音樂前端團隊開發維護的瀏覽端音頻播放內核,它基於HTML5 Audio及Flash音頻技術,已在百度音樂多個線上產品線中應用,具有很強的靈活性和穩定性。

10. 輕量級UI組件 Magic

Magic是用JavaScript腳本開發的輕量級UI組件,具備性能高效、代碼量小、支持多種初始化方式等方面的優點,Web前端開發者可使 用Magic快速搭建前端功能比較複雜的網站。Magic的每一個組件都有很是豐富的接口和事件處理,網站也提供了詳細的使用文檔和Demo演示。Web前 端開發者能夠經過定製組件、初始化方式和插件得到最輕量級版本。

11. 高性能RPC框架 BGCC

BGCC(音:[bigsisi:])是百度具備徹底知識產權的跨平臺、多語言、面向對象與服務的輕量級高性能RPC框架。 它支持事務級別的服務端消息主動推送,強大的接口級事務管理功能,包含自定義的通訊協議、接口描述語言(bidl)、 強大的代碼生成引擎(bidl2sl),Java、C++通訊無縫整合。

12. 分佈式表格系統 Tera

Tera 是一個高性能、可伸縮的數據庫系統,被設計用來管理搜索引擎萬億量級的超鏈與網頁信息。爲實現數據的實時分析與高效訪問,咱們使用按行鍵、列名和時間戳全局排序的三維數據模型組織數據,使用多級Cache系統,充分利用新一代服務器硬件大內存、SSD盤和萬兆網卡的性能優點,作到模型靈活的同時,實現了高吞吐與水平擴展。

13. 基於 Node 的 JavaScript 同構解決方案 rebas

基於 Node 的 JavaScript 同構解決方案。提供了 saber 的服務端運行環境,使其具有從 SPA 到 MPA,從前端渲染到後端渲染的深度響應式能力。

14. 面向c/c++語言的構建工具 Broc

broc是一款面向c/c++語言的構建工具,提供了編譯、分支依賴、依賴模塊下載等功能。不一樣於make, cmake等以庫文件連接的編譯方式,broc將依賴庫源代碼與程序源代碼一併同時進行編譯,這種方式能夠避免程序源代碼與依賴庫編譯選項或平臺不一致導 致的軟件兼容性問題;broc支持編譯結束後自動運行單元測試用例;藉助Jenkins broc還能完成軟件的持續集成。

15. 富文本編輯器 Ueditor

UEditor是由百度web前端研發部開發所見即所得富文本web編輯器,具備輕量,可定製,注重用戶體驗等特色。

16. 在線腦圖編輯器 Kity Minder

KityMinder 是百度FEX團隊的f-cube小組(原UEditor小組)的又一力做。做爲一款在線的腦圖編輯工具,它有着不少Native編輯工具的交互體驗。KM與UE有着同樣的宗旨,就是注重最終用戶的使用體驗。同時,它充分發揮了Web雲存儲的優點,能夠直接將編輯中的腦圖同步到雲端。此外,藉由首創的 「雲盤分享」功能,用戶能夠一鍵將當前編輯的腦圖直接生成在線連接共享給其餘用戶,實現無縫溝通。

17. 輕量級的Canvas類庫 ZRender

zrender(Zlevel Render) 是一個輕量級的Canvas類庫,MVC封裝,數據驅動,提供類Dom事件模型,讓canvas繪圖大不一樣!

18. 文件上傳組件 WebUploader

WebUploader 是由Baidu WebFE(FEX)團隊開發的一個簡單的以HTML5爲主,FLASH爲輔的現代文件上傳組件。在現代的瀏覽器裏面能充分發揮HTML5的優點,同時又不摒棄主流IE瀏覽器,延用原來的FLASH運行時,兼容IE6+,Andorid 4+,IOS 6+。兩套運行時,一樣的調用方式,可供用戶任意選用。

19. 手勢識別與事件庫 Touch.js

Touch.js是移動設備上的手勢識別與事件庫, 由百度雲Clouda團隊維護,也是在百度內部普遍使用的開發工具。

20. 地圖可視化工具庫 Mapv

Mapv 是一款基於百度地圖的大數據可視化開源庫,能夠用來展現大量的點、線、面的數據,每種數據也有不一樣的展現類型,如直接打點、熱力圖、網格、聚合等方式展現數據。

21. 專一於移動端的滑動解決方案 iSlider

iSlider 是個很是平滑的滑塊,支持移動端 WebApp,HTML5App 和混合型的 App。

22. 百度UI庫 ESUI

ESUI是一套簡單的UI Library,提供一系列的控件,能知足基本頁面交互功能。ESUI的API與默認視覺皮膚遵循BAIDU ECOMUI標準。

23. jQuery的彈窗插件 wBox

wBox輕量級的彈出窗口jQuery插件,基於jQuery1.4.2開發,主要實現彈出框的效果,而且加入了不少有趣的功能,好比callback函數,顯示隱藏層,Ajax頁面,iframe嵌入頁面等功能。

24. 百度BI平臺 BiPlatform

百度開源的新一代一站式敏捷bi平臺,提供報表和OLAP服務的敏捷BI平臺。

25. 前端集成解決方案 F.I.S

F.I.S(FIS)所提供的集成解決方案依託於一套靈活高效的 編譯工具,F.I.S藉助該編譯平臺對前端開發資源進行整合。接觸F.I.S,能夠從該平臺入手。

26. 移動端組件庫 Global Mobile UI

GMU(Global Mobile UI)是百度前端通用組開發的移動端組件庫,具備代碼體積小、簡單、易用等特色,組件內部處理了不少移動端的bug,覆蓋機型廣,能大大減小開發交互型組件的工做量,很是適合移動端網站項目。

27. RPC框架 sofa-pbrpc

sofa-pbrpc(sofa protobuf-based rpc)是使用Boost::Asio實現的基於Google Protocol Buffers RPC框架的網絡通訊庫,在百度公司各部門獲得普遍使用。

28. 百度文件系統 BFS-Baidu

百度的核心數據庫Tera將數據持久化在分佈式文件系統上,分佈式文件系統的性能、可用性和擴展性對整個上層搜索業務的穩定性與效果有着相當重要的影響。

29. 企業級標準加載器 ESL

ESL 是一個瀏覽器端、符合AMD的標準加載器,適合用於現代Web瀏覽器端應用的入口與模塊管理。

30. 前端移動框架 Saber

Saber 是 模塊化、組合式 的前端移動框架。

31. 百度mysql分庫分表中間件服務器 heisenberg

heisenberg 是百度的熊照同窗(id:brucexx)編寫的一款基於MySQL協議之上的分庫分表中間件服務器,支持各類靈活(velocity腳本自定義)的分庫分表規則,作到應用和分庫分表相隔離,而且爲mysql進行dbproxy,減小了db的鏈接IO壓力,而且可作到讀寫分離以及replication的手工切換。

32. doc 文檔在線編輯和預覽 wordonline

wordonline 是在線編輯和預覽 .doc 和 .docx 文檔的工具。

33. JS模板引擎 BaiduTemplate

baiduTemplate但願創造一個用戶以爲「簡單好用」的JS模板引擎。

34. 在線文件管理器 UFinder

UFinder 是百度前端團隊基於頁面級的文件管理應用。

35. webSlide

webSlide是用於在線PPT演示文檔的javascript框架。

36. 網絡幻燈片 nodePPT

nodePPT 是使用nodejs寫的網絡幻燈片。

37. 前端模塊化解決方案 fis-pure

fis-pure 是基於FIS的純前端模塊化解決方案pure。

pure是基於FIS二次封裝能力封裝而成的解決方案,能夠直接使用,也能夠參考fis-pure自行封裝或組合使用插件來構建屬於本身的一體化解決方案。

38. J2EE Velocity 前端集成方案 jello

jello 是針對服務端爲 JAVA + Velocity 的前端集成解決方案。jello 爲優化前端開發而生,提供先後端開發分離、自動性能優化、模塊化開發機制等功能。

39. protobuf的Java開發包 jprotobuf

jprotobuf是針對Java程序開發一套簡易類庫,目的是簡化java語言對protobuf類庫的使用,使用jprotobuf能夠無需再去了解.proto文件操做與語法,直接使用java註解定義字段類型便可。

40. 人工智能軟件 WARP-CTC

WARP-CTC 是百度硅谷 AI 研究所 (SVAIL) 開源的百度關鍵人工智能 (AI) 軟件。

41. 百度雲Go語言SDK bcsgo

百度雲存儲服務Go語言SDK。

42. 前端模塊加載解決方案 modJS

modJS 是一套的前端模塊加載解決方案。與傳統的模塊加載相比,modJS 會根據產品實際使用場景,自動選擇一種相應的方案,使最終的實現很是輕量簡潔。

43. 公式編輯器 KityFormula

Kity Formula 爲您提供公式表達式解析,可視化公式編輯,公式完美展現於一身的web端的總體解決方案。

44. 高品質的 WebGL 類庫 Qtek

Qtek (WebGL Graphic Library) 是一個高品質的 WebGL 類庫,目前仍處於實驗階段。

物理組件:

https://github.com/pissang/qtek-physics

2D 組件

https://github.com/pissang/qtek-2d

45. 集羣操做系統 Galaxy

Galaxy是一個數據中心操做系統,目標是最大化資源的利用率與下降應用部署運維代價,支持萬臺集羣資源調度與管理,目前主要服務於百度網頁搜索離線架構業務,解決分佈式文件系統,分佈式表格系統,以及上層計算模塊運維與部署問題。

46. 富瀏覽器端web應用框架 ER

ER 是百度公司的一個富瀏覽器端web應用的框架,適用於並能很方便地構建 一個整站式的AJAX web應用。

47. 深度學習平臺 PaddlePaddle

PaddlePaddle(並行分佈式深度學習)是一個易於使用的、高效的、靈活的和可擴展的深度學習平臺,它最初是百度的科學家和工程師爲了能讓百度產品能提供深度學習而開發的。

48. 前端統計框架 ALog

ALog 是前端統計框架。

49. Baidu Push SDK

Baidu Push SDK 是百度的雲推送 SDK 開發包。

50. 企業級前端應用開發平臺 EDP

EDP是基於 Node 的前端應用開發平臺,是一個企業級前端應用的開發平臺,提供了經常使用的項目管理工具、包管理工具、調試工具、構建工具、代碼生成工具、代碼檢測工具等一系列開發時的支持,並容許用戶自定義本身的擴展。

51. HTML5 音樂播放器 Player

Player 是 HTML5 版本音樂播放器,支持 iOS 設備。

演示地址:http://4.qdemo.sinaapp.com/html5/chrome/

52. jQuery 遮罩插件 SlipHover

SlipHover 是一個基於 jQuery 的插件,它可以感知鼠標移動方向,並在相應的方向(或反方向)以動畫的方式顯示出一個遮罩層,用來顯示標題或描述,應用到幻燈片或相冊中是個不錯的選擇。 SlipHover 還支持自定義遮罩高度、動畫時間、字體顏色、背景顏色、文字排版等等。

53. 模板引擎 ETPL

ETPL是一個靈活、具備強大複用能力的高性能的模板引擎,適用於WEB前端應用中視圖的生成,特別是SPA(Single Page APP)類型的應用。

54. 基於 LESS 的樣式工具庫 EST

EST(ECOM Styling Toolkit)是一個基於 LESS 的樣式工具庫,幫助您更輕鬆地書寫 LESS 代碼。EST提供了一系列方便 快捷的 mixin,只在調用時才輸出代碼。est 不但願提供直接給 HTML 調用的類名,用「樣式類」污染 HTML 代碼的語義。固然您也能夠根 據本身的項目需求基於 est 搭建樣式類庫,提供類名接口來進行快速開發。

演示地址:http://ecomfe.github.io/est/fiddle/

55. 基於 SVG 的矢量圖形庫 Kity

Kity 是一個基於 SVG 的矢量圖形庫,幫助你快速在頁面上建立和使用矢量元素。

56. 前端資源聚合平臺 Lights

Lights 是FIS包管理工具。提供便捷、易用的資源安裝、發佈、搜索,管理工具。用於團隊間快速共享資源,提高開發效率。 

57. EDP 擴展 edpx-zhixin

edpx-zhixin 是 edp 的一個擴展,提供給百度的FE開發搜索結果頁模板的工具。

58. 服務虛擬化 Terminator

服務虛擬化指的就是虛擬出不穩定、不可用、未開發徹底的服務。

59. 前端集成解決方案 baidu yogurt

yogurt 是基於 fis 擴展針對服務端爲 express.js 的前端集成解決方案。

60. 移動 Web 的 CSS 樣式工具庫 Rider

rider是一個基於 Stylus、專一於移動 Web 的 CSS 樣式工具庫。

61. kraken.js 擴展 Yog

Yog 是一個基於 Express.js 的 Node.js Web 應用引導模塊,擴展了 kraken.js。

62. 基於Nodejs 的前端工具集 FEinit

FEinit 是基於Nodejs 的前端工具集,由於是在windows系統開發,因此目前僅適合 windows 系統。

63. Node Log 統計方案 yog-log

yog-log 是 Node Log 統計方案,是yog框架的log統計模塊,支持中間件或者單獨使用等方式,兼容ODP日誌格式與配置。

64. 輕量級覆蓋率測試工具 logcover

logcover 是一款很是便捷的統計測試用例異常日誌覆蓋率的工具。可清晰地分析出程序源代碼中異常日誌的覆蓋狀況,檢驗測試充分度,指導測試用例完善。 

65. 知心組件庫 moye

Moye 是 ECOM UI 1.1 規範的一個輕量級實現。

66. fis-postprocessor-amd

fis-postprocessor-amd 能識別 js 中 amd 依賴,自動包轉 isMod  的 js 爲 amd。

67. EDP 的移動端擴展 EDPM

edpx-mobile(EDPM) 是 EDP 的移動端擴展。EDPM 是對 edp 功能的補充,爲移動項目提供項目初始化、腳手架、調試服務器等功能。

68. 前端代碼風格工具 FECS

FECS 是基於 Node.js 的前端代碼風格工具。

69. WEB 組件規範 xspec

xspec 是一系列基於WEB COMPONENTS的組件規範,致力於藉助規範的力量讓組件發揮更大的價值。

70. yog-pm

yog-pm是在pm2的基礎上提供了幾個加強命令,提升pm2的易用性和穩定性。

71. Express.js 中間件 yog-view

yog-view 是一個 Express.js 中間件,用來優化 js/css 輸出排序,容許在 bigpipe 模式中顯示。

轉:http://www.cnblogs.com/wyt007/p/6118176.html

相關文章
相關標籤/搜索