Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 成人福利在线视频,欧美日韩中文字幕在线,夜夜操天天插

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          打破N1 500M瓶頸,K2P多撥+N1 組合

          打破N1 500M瓶頸,K2P多撥+N1 組合

          內(nèi)容來源于@什么值得買APP,觀點(diǎn)僅代表作者本人 |作者:愛上網(wǎng)的魚

          購買理由

          原來組合過幾個(gè)方案 但是都不完美,知道 最新Padavan 4.4內(nèi)核 支持多撥就開始刷了起來。K2P 刷Padavan 滿跑帶寬,而且還有多撥。N1 做旁路由做它自己的事情。 其它設(shè)備通過設(shè)置選擇自己愛干的事。

          外觀展示

          K2P 直接刷Padavan 用的是 https://www.right.com.cn/forum/thread-8001722-1-1.html

          N1設(shè)置

          N1直接刷的是 F大佬的最新版本固件。https://www.right.com.cn/forum/thread-4076037-1-1.html

          登錄你的OenWrt系統(tǒng)管理后臺,找到菜單欄點(diǎn)擊 網(wǎng)絡(luò) > 接口

          .然后在 LAN 接口點(diǎn)擊修改,切記一定是要 LAN 這個(gè)接口!
          修改 接口LAN 基本設(shè)置

          傳輸協(xié)議:修改為 靜態(tài)地址


          IPv4地址:修改為 你的主路由同IP段內(nèi)任意一個(gè)未使用的地址 (如你的主路由地址為192.168.1.1,那這里的地址就可以修改為除了192.168.1.1以外的任意一個(gè)未在局域網(wǎng)內(nèi)被使用的192.168.1.X的地址,比如192.168.1.111)
          (重點(diǎn)提示:這里修改的地址必須要與你的主路由地址在同一網(wǎng)段!并且在局域網(wǎng)內(nèi)沒有其他設(shè)備正在使用的地址,這個(gè)地址將作為N1的地址,也是登錄N1后臺的唯一地址)


          IPv4子網(wǎng)掩碼:無特殊需求保持默認(rèn)的255.255.255.0即可 (小白不懂的話不要修改)


          IPv4網(wǎng)關(guān):修改為 你的主路由IP地址 (這個(gè)地址一定要設(shè)置,否則無法上網(wǎng)!)


          IPv4廣播:默認(rèn)留空即可 (小白不懂的話不要修改)


          使用自定義的DNS服務(wù)器:修改為你的主路由IP地址,然后點(diǎn)擊右邊的加號!一定要點(diǎn)后面的加號,否則無效,切記! 如下圖所示

          (重點(diǎn)提示:修改這里的DNS地址之后一定要點(diǎn)旁邊的加號,這里的地址建議修改為你的主路由IP即可,填其他公共DNS地址可能會導(dǎo)致異常,小白切記~)


          IPv6分配長度:如無特殊需求選擇默認(rèn)的64即可,如果你沒有IPv6地址請選擇禁用
          IPv6分配提示和IPv6后綴:默認(rèn)留空即可

          修改完上面的LAN接口基本設(shè)置之后,來到頁面最下方的DHCP基本設(shè)置:

          勾選 忽略此接口
          然后點(diǎn)擊最下方的 保存&應(yīng)用 (這是最重要的一步,不點(diǎn)保存及應(yīng)用的話前面的所有步驟都無效,相當(dāng)于做無用功!)

          在自定義規(guī)則里填加這一條規(guī)則

          Step 2:

          iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

          修改 接口LAN 基本設(shè)置

          傳輸協(xié)議:修改為 靜態(tài)地址


          IPv4地址:修改為 你的主路由同IP段內(nèi)任意一個(gè)未使用的地址 (如你的主路由地址為192.168.1.1,那這里的地址就可以修改為除了192.168.1.1以外的任意一個(gè)未在局域網(wǎng)內(nèi)被使用的192.168.1.X的地址,比如192.168.1.111)
          (重點(diǎn)提示:這里修改的地址必須要與你的主路由地址在同一網(wǎng)段!并且在局域網(wǎng)內(nèi)沒有其他設(shè)備正在使用的地址,這個(gè)地址將作為N1的地址,也是登錄N1后臺的唯一地址)


          IPv4子網(wǎng)掩碼:無特殊需求保持默認(rèn)的255.255.255.0即可 (小白不懂的話不要修改)


          IPv4網(wǎng)關(guān):修改為 你的主路由IP地址 (這個(gè)地址一定要設(shè)置,否則無法上網(wǎng)!)


          IPv4廣播:默認(rèn)留空即可 (小白不懂的話不要修改)


          使用自定義的DNS服務(wù)器:修改為你的主路由IP地址,然后點(diǎn)擊右邊的加號!一定要點(diǎn)后面的加號,否則無效,切記! 如下圖所示

          然后點(diǎn)擊最下方 重啟防火墻 即可

          (具體不明白參考 https://www.right.com.cn/forum/thread-4181997-1-1.html))

          本地電腦想通過N1 上網(wǎng)直接設(shè)置本地ip網(wǎng)關(guān)就可以

          其它設(shè)備同上

          總結(jié)

          k2p 多撥跑速度 cpu 無壓力

          目前沒發(fā)現(xiàn)問題。 分享給大家。

          具體有什么地方不對的 歡迎大家留言。

          作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~



          在前面

          今年國慶假期終于可以憋在家里了不用出門了,不用出去看后腦了,真的是一種享受。這么好的光陰怎么浪費(fèi),睡覺、吃飯、打豆豆這怎么可能(耍多了也煩),完全不符合我們程序員的作風(fēng),趕緊起來把文章寫完。

          這篇文章比較基礎(chǔ),在國慶期間的業(yè)余時(shí)間寫的,這幾天又完善了下,力求把更多的前端所涉及到的關(guān)于文件上傳的各種場景和應(yīng)用都涵蓋了,若有疏漏和問題還請留言斧正和補(bǔ)充。

          自測讀不讀

          以下是本文所涉及到的知識點(diǎn),break or continue ?

          • 文件上傳原理
          • 最原始的文件上傳
          • 使用 koa2 作為服務(wù)端寫一個(gè)文件上傳接口
          • 單文件上傳和上傳進(jìn)度
          • 多文件上傳和上傳進(jìn)度
          • 拖拽上傳
          • 剪貼板上傳
          • 大文件上傳之分片上傳
          • 大文件上傳之?dāng)帱c(diǎn)續(xù)傳
          • node 端文件上傳

          原理概述

          原理很簡單,就是根據(jù) http 協(xié)議的規(guī)范和定義,完成請求消息體的封裝和消息體的解析,然后將二進(jìn)制內(nèi)容保存到文件。

          我們都知道如果要上傳一個(gè)文件,需要把 form 標(biāo)簽的enctype設(shè)置為multipart/form-data,同時(shí)method必須為post方法。

          那么multipart/form-data表示什么呢?

          multipart互聯(lián)網(wǎng)上的混合資源,就是資源由多種元素組成,form-data表示可以使用HTML Forms 和 POST 方法上傳文件,具體的定義可以參考RFC 7578。

          multipart/form-data 結(jié)構(gòu)

          看下 http 請求的消息體



          • 請求頭:

          Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryDCntfiXcSkPhS4PN 表示本次請求要上傳文件,其中boundary表示分隔符,如果要上傳多個(gè)表單項(xiàng),就要使用boundary分割,每個(gè)表單項(xiàng)由———XXX開始,以———XXX結(jié)尾。

          • 消息體- Form Data 部分

          每一個(gè)表單項(xiàng)又由Content-Type和Content-Disposition組成。

          Content-Disposition: form-data 為固定值,表示一個(gè)表單元素,name 表示表單元素的 名稱,回車換行后面就是name的值,如果是上傳文件就是文件的二進(jìn)制內(nèi)容。

          Content-Type:表示當(dāng)前的內(nèi)容的 MIME 類型,是圖片還是文本還是二進(jìn)制數(shù)據(jù)。

          解析

          客戶端發(fā)送請求到服務(wù)器后,服務(wù)器會收到請求的消息體,然后對消息體進(jìn)行解析,解析出哪是普通表單哪些是附件。

          可能大家馬上能想到通過正則或者字符串處理分割出內(nèi)容,不過這樣是行不通的,二進(jìn)制buffer轉(zhuǎn)化為string,對字符串進(jìn)行截取后,其索引和字符串是不一致的,所以結(jié)果就不會正確,除非上傳的就是字符串。

          不過一般情況下不需要自行解析,目前已經(jīng)有很成熟的三方庫可以使用。

          至于如何解析,這個(gè)也會占用很大篇幅,后面的文章在詳細(xì)說。

          最原始的文件上傳

          使用 form 表單上傳文件

          在 ie時(shí)代,如果實(shí)現(xiàn)一個(gè)無刷新的文件上傳那可是費(fèi)老勁了,大部分都是用 iframe 來實(shí)現(xiàn)局部刷新或者使用 flash 插件來搞定,在那個(gè)時(shí)代 ie 就是最好用的瀏覽器(別無選擇)。

          DEMO



          這種方式上傳文件,不需要 js ,而且沒有兼容問題,所有瀏覽器都支持,就是體驗(yàn)很差,導(dǎo)致頁面刷新,頁面其他數(shù)據(jù)丟失。

          HTML

           <form method="post" action="http://localhost:8100" enctype="multipart/form-data">
          
                  選擇文件:
                      <input type="file" name="f1"/> input 必須設(shè)置 name 屬性,否則數(shù)據(jù)無法發(fā)送<br/>
          <br/>
                      標(biāo)題:<input type="text" name="title"/><br/><br/><br/>
          
                  <button type="submit" id="btn-0">上 傳</button>
          
          </form>
          
          復(fù)制代碼

          文件上傳接口

          服務(wù)端文件的保存基于現(xiàn)有的庫koa-body結(jié)合 koa2實(shí)現(xiàn)服務(wù)端文件的保存和數(shù)據(jù)的返回。

          在項(xiàng)目開發(fā)中,文件上傳本身和業(yè)務(wù)無關(guān),代碼基本上都可通用。

          在這里我們使用koa-body庫來實(shí)現(xiàn)解析和文件的保存。

          koa-body 會自動保存文件到系統(tǒng)臨時(shí)目錄下,也可以指定保存的文件路徑。



          然后在后續(xù)中間件內(nèi)得到已保存的文件的信息,再做二次處理。

          • ctx.request.files.f1 得到文件信息,f1為input file 標(biāo)簽的 name
          • 獲得文件的擴(kuò)展名,重命名文件

          NODE

          /**
           * 服務(wù)入口
           */
          var http=require('http');
          var koaStatic=require('koa-static');
          var path=require('path');
          var koaBody=require('koa-body');//文件保存庫
          var fs=require('fs');
          var Koa=require('koa2');
          
          var app=new Koa();
          var port=process.env.PORT || '8100';
          
          var uploadHost=`http://localhost:${port}/uploads/`;
          
          app.use(koaBody({
              formidable: {
                  //設(shè)置文件的默認(rèn)保存目錄,不設(shè)置則保存在系統(tǒng)臨時(shí)目錄下  os
                  uploadDir: path.resolve(__dirname, '../static/uploads')
              },
              multipart: true // 開啟文件上傳,默認(rèn)是關(guān)閉
          }));
          
          //開啟靜態(tài)文件訪問
          app.use(koaStatic(
              path.resolve(__dirname, '../static') 
          ));
          
          //文件二次處理,修改名稱
          app.use((ctx)=> {
              var file=ctx.request.files.f1;//得道文件對象
              var path=file.path;
              var fname=file.name;//原文件名稱
              var nextPath=path+fname;
              if(file.size>0 && path){
                  //得到擴(kuò)展名
                  var extArr=fname.split('.');
                  var ext=extArr[extArr.length-1];
                  var nextPath=path+'.'+ext;
                  //重命名文件
                  fs.renameSync(path, nextPath);
              }
              //以 json 形式輸出上傳文件地址
              ctx.body=`{
                  "fileUrl":"${uploadHost}${nextPath.slice(nextPath.lastIndexOf('/')+1)}"
              }`;
          });
          
          /**
           * http server
           */
          var server=http.createServer(app.callback());
          server.listen(port);
          console.log('demo1 server start ......   ');
          復(fù)制代碼

          CODE

          https://github.com/Bigerfe/fe-learn-code/

          者:Roman Orac
          魚羊 編譯整理
          量子位 報(bào)道 | 公眾號 QbitAI

          數(shù)據(jù)分析,如何能錯(cuò)過 Pandas

          現(xiàn)在,數(shù)據(jù)科學(xué)家 Roman Orac 分享了他在工作中相見恨晚的 Pandas 使用技巧。

          了解了這些技巧,能讓你在學(xué)習(xí)、使用 Pandas 的時(shí)候更加高效。

          話不多說,一起學(xué)習(xí)一下~

          Pandas實(shí)用技巧

          用 Pandas 做數(shù)據(jù)分析,最大的亮點(diǎn)當(dāng)屬 DataFrame。不過,在展示成果的時(shí)候,常常需要把 DataFrame 轉(zhuǎn)成另一種格式。

          Pandas 在這一點(diǎn)上其實(shí)十分友好,只需添加一行代碼。

          DataFrame 轉(zhuǎn) HTML

          如果你需要用 HTML 發(fā)送自動報(bào)告,那么 to_html 函數(shù)了解一下。

          比如,我們先設(shè)定這樣一個(gè) DataFrame:

          import numpy as np
          import pandas as pd
          import random
          
          n = 10
          df = pd.DataFrame(
              {
                  "col1": np.random.random_sample(n),
                  "col2": np.random.random_sample(n),
                  "col3": [[random.randint(0, 10) for _ in range(random.randint(3, 5))] for _ in range(n)],
              }
          )

          用上 to_html,就可以將表格轉(zhuǎn)入 html 文件:

          df_html = df.to_html()
          with open(‘a(chǎn)nalysis.html’, ‘w’) as f: f.write(df_html)

          與之配套的,是 read_html 函數(shù),可以將 HTML 轉(zhuǎn)回 DataFrame。

          DataFrame 轉(zhuǎn) LaTeX

          如果你還沒用過 LaTeX 寫論文,強(qiáng)烈建議嘗試一下。

          要把 DataFrame 值轉(zhuǎn)成 LaTeX 表格,也是一個(gè)函數(shù)就搞定了:

          df.to_latex()

          DataFrame 轉(zhuǎn) Markdown

          如果你想把代碼放到 GitHub 上,需要寫個(gè) README。

          這時(shí)候,你可能需要把 DataFrame 轉(zhuǎn)成 Markdown 格式。

          Pandas 同樣為你考慮到了這一點(diǎn):

          print(df.to_markdown())

          注:這里還需要 tabulate 庫

          DataFrame 轉(zhuǎn) Excel

          說到這里,給同學(xué)們提一個(gè)小問題:導(dǎo)師/老板/客戶要你提供 Excel 格式的數(shù)據(jù),你該怎么做?

          當(dāng)然是——

          df.to_excel(‘a(chǎn)nalysis.xlsx’)

          需要注意的是,如果你沒有安裝過 xlwtopenpyxl 這兩個(gè)工具包,需要先安裝一下。

          另外,跟 HTML 一樣,這里也有一個(gè)配套函數(shù):read_excel,用來將excel數(shù)據(jù)導(dǎo)入pandas DataFrame。

          DataFrame 轉(zhuǎn)字符串

          轉(zhuǎn)成字符串,當(dāng)然也沒問題:

          df.to_string()

          5個(gè)鮮為人知的Pandas技巧

          此前,Roman Orac 還曾分享過 5 個(gè)他覺得十分好用,但大家可能沒有那么熟悉的 Pandas 技巧。

          1、data_range

          從外部 API 或數(shù)據(jù)庫獲取數(shù)據(jù)時(shí),需要多次指定時(shí)間范圍。

          Pandas 的 data_range 覆蓋了這一需求。

          import pandas as pd
          date_from = “2019-01-01”
          date_to = “2019-01-12”
          date_range = pd.date_range(date_from, date_to, freq=”D”)
          print(date_range)

          freq=“D”/“M”/“Y”,該函數(shù)就會分別返回按天、月、年遞增的日期。

          2、合并數(shù)據(jù)

          當(dāng)你有一個(gè)名為left的DataFrame:

          和名為right的DataFrame:

          想通過關(guān)鍵字“key”把它們整合到一起:

          實(shí)現(xiàn)的代碼是:

          df_merge = left.merge(right, on = ‘key’, how = ‘left’, indicator = True)

          3、最近合并(Nearest merge)

          在處理股票或者加密貨幣這樣的財(cái)務(wù)數(shù)據(jù)時(shí),價(jià)格會隨著實(shí)際交易變化。

          針對這樣的數(shù)據(jù),Pandas提供了一個(gè)好用的功能,merge_asof

          該功能可以通過最近的key(比如時(shí)間戳)合并DataFrame。

          舉個(gè)例子,你有一個(gè)存儲報(bào)價(jià)信息的DataFrame。

          還有一個(gè)存儲交易信息的DataFrame。

          現(xiàn)在,你需要把兩個(gè)DataFrame中對應(yīng)的信息合并起來。

          最新報(bào)價(jià)和交易之間可能有10毫秒的延遲,或者沒有報(bào)價(jià),在進(jìn)行合并時(shí),就可以用上 merge_asof。

          pd.merge_asof(trades, quotes, on=”timestamp”, by=’ticker’, tolerance=pd.Timedelta(‘10ms’), direction=‘backward’)

          4、創(chuàng)建Excel報(bào)告

          在Pandas中,可以直接用DataFrame創(chuàng)建Excel報(bào)告。

          import numpy as np
          import pandas as pd
          
          df = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=["a", "b", "c"])
          
          report_name = 'example_report.xlsx'
          sheet_name = 'Sheet1'
          writer = pd.ExcelWriter(report_name, engine='xlsxwriter')
          df.to_excel(writer, sheet_name=sheet_name, index=False)

          不只是數(shù)據(jù),還可以添加圖表。

          # define the workbook
          workbook = writer.book
          worksheet = writer.sheets[sheet_name]
          # create a chart line object
          chart = workbook.add_chart({'type': 'line'})
          # configure the series of the chart from the spreadsheet
          # using a list of values instead of category/value formulas:
          #     [sheetname, first_row, first_col, last_row, last_col]
          chart.add_series({
              'categories': [sheet_name, 1, 0, 3, 0],
              'values':     [sheet_name, 1, 1, 3, 1],
          })
          # configure the chart axes
          chart.set_x_axis({'name': 'Index', 'position_axis': 'on_tick'})
          chart.set_y_axis({'name': 'Value', 'major_gridlines': {'visible': False}})
          # place the chart on the worksheet
          worksheet.insert_chart('E2', chart)
          # output the excel file
          writer.save()

          注:這里需要 XlsxWriter 庫

          5、節(jié)省磁盤空間

          Pandas在保存數(shù)據(jù)集時(shí),可以對其進(jìn)行壓縮,其后以壓縮格式進(jìn)行讀取。

          先搞一個(gè) 300MB 的 DataFrame,把它存成 csv。

          df = pd.DataFrame(pd.np.random.randn(50000,300))
          df.to_csv(‘random_data.csv’, index=False)

          壓縮一下試試:

          df.to_csv(‘random_data.gz’, compression=’gzip’, index=False)

          文件就變成了136MB。

          gzip壓縮文件可以直接讀取:

          df = pd.read_csv(‘random_data.gz’)

          這一份Pandas技巧筆記,暫且說到這里。各位同學(xué)都做好筆記了嗎?

          Talk is cheap, show me the code。學(xué)會了,就用起來吧

          — 完 —

          量子位 QbitAI · 頭條號簽約

          關(guān)注我們,第一時(shí)間獲知前沿科技動態(tài)


          主站蜘蛛池模板: 久久免费国产精品一区二区| 国产在线一区二区综合免费视频| 日韩精品一区二区三区影院| 99久久精品费精品国产一区二区| 无码一区二区三区爆白浆| 国产福利电影一区二区三区| 欧美人妻一区黄a片| 91久久精品国产免费一区| 日韩精品人妻一区二区中文八零| 国产小仙女视频一区二区三区| 日本午夜精品一区二区三区电影| 亚洲日本一区二区三区在线| 亚洲A∨精品一区二区三区| 日韩视频在线观看一区二区| 国产在线精品一区二区| 另类国产精品一区二区| 综合无码一区二区三区四区五区| 国产精品视频一区二区三区| 亚洲日韩精品一区二区三区| 国产AV午夜精品一区二区三| 国产在线精品一区二区夜色 | 亚洲色无码专区一区| 亚洲国产精品自在线一区二区| 国产精品一区二区av| 国产一区二区三区久久精品| 日本一区二区在线| 不卡一区二区在线| 无码毛片视频一区二区本码| 国产AV一区二区三区无码野战| 精品国产福利第一区二区三区| 国产精品日本一区二区不卡视频| 久久精品国产一区二区三区肥胖 | 国产精品自拍一区| 最新欧美精品一区二区三区 | 日韩精品无码免费一区二区三区| 亚洲一区免费观看| 乱码人妻一区二区三区| 一区二区三区国模大胆| 国产午夜精品一区二区三区漫画| 精品人伦一区二区三区潘金莲 | 亚洲蜜芽在线精品一区|