多虧了這篇文章,我的開發效率遠遠領先于我的同事

歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~

本文由獨木橋先生發表于云+社區專欄

介紹

如果您有從Linux服務器上的源代碼安裝軟件的經驗,您可能會遇到make實用程序。該工具主要用于自動編譯和構建程序。它允許應用程序的作者輕松地布置構建該特定項目所需的步驟。

盡管make是為自動化軟件編譯而創建的,但該工具的設計靈活性足以使其可以自動執行幾乎任何可以從命令行完成的任務。在本教程中,我們將討論如何重新調整make以自動執行按順序發生的重復性任務。

我們將在Ubuntu上進行演示,但它應該在幾乎任何Linux服務器上以類似的方式運行。

安裝Make

在我們開始使用make之前,我們需要安裝它。

雖然我們可以按名稱安裝它,但它通常與其他幫助您編譯軟件的工具一起安裝。我們將安裝所有這些因為它們總體上非常有用。有一個名為“build-essential”的包,其中包含make和其他程序:

sudo apt-get update
sudo apt-get install build-essential

現在,您擁有的工具可以讓您以通常的容量利用make。

了解Makefile

make命令接收指令的主要方法是使用Makefile。

從手冊頁中,我們可以看到make將查找名為GNUmakefile的文件,然后查找makefile,然后查找Makefile。它建議您使用Makefile,因為GNUmakefile是針對GNU特定的命令,而makefile并不突出。

Makefile是特定于目錄的,這意味著make將在調用它的目錄中搜索以查找這些文件。因此,我們應該將Makefile放在我們將要執行的任務的根目錄中,或者調用我們將要編寫的腳本最有意義的地方。

在Makefile中,我們遵循特定的格式。以這種方式使用目標,源和命令的概念:

target: sourcecommand

這種對齊和格式非常重要,因為make很挑剔。我們將在這里討論每個組件的格式和含義:

target

target是用戶指定的名稱,用于引用一組命令。可以認為它類似于編程語言中的簡單函數。

target在左側列上對齊,是連續的單詞(無空格),以冒號(:)結尾。

調用make時,我們可以通過輸入以下內容來指定target:

make target_name

然后,Make將檢查Makefile并執行與該target關聯的命令。

source

source是對文件或其他target的引用。它們代表與之關聯的目標的準備或依賴關系。

例如,您可以將make文件的一部分看起來像這樣:

target1: target2target1_commandtarget2:target2_command

在這個例子中,我們可以像這樣調用target1:

make target1

然后Make將轉到Makefile并搜索“target1”目標。然后它會檢查是否有指定的來源。

它會找到“target2”源依賴項并暫時跳轉到該目標。

從那里,它將檢查target2是否列出了任何來源。它沒有,所以它將繼續執行“target2命令”。此時,make將到達“target2”命令列表的末尾,并將控制權傳遞回“target1”目標。然后它將執行“target1命令”并退出。

source可以是文件或目標本身。使用文件時間戳來查看自上次調用以來文件是否已更改。如果已對源文件進行了更改,則重新運行該目標。否則,它將依賴關系標記為已完成并繼續到下一個源,或者命令(如果這是唯一的源)。

一般的想法是,通過添加源,我們可以構建一組必須在當前目標之前執行的順序依賴項。您可以在任何目標之后指定多個以空格分隔的源。您可以開始了解如何指定精細的任務序列。

command

make命令具有這種靈活性的原因是語法的命令部分是非常開放的。您可以指定要在目標下運行的任何命令。您可以根據需要添加任意數量的命令。

命令在目標聲明后的行上指定。它們由一個制表符縮進。某些版本的make對于縮進命令部分的方式很靈活,但一般來說,您應該堅持使用單個選項卡以確保make能夠識別您的意圖。

Make將目標定義下的每個縮進行視為單獨的命令。您可以根據需要添加任意數量的縮進行和命令。Make會一次一個地瀏覽它們。

在命令告訴make以不同的方式處理它們之前,我們可以放置一些東西:

  • -:命令前的破折號告訴make如果遇到錯誤則不中止。例如,如果要對文件執行命令(如果存在),則此操作可能很有用,如果不存在則不執行任何操作。
  • @:如果使用“@”符號引導命令,則命令調用本身不會打印到標準輸出。這主要用于清理產生的輸出。

附加功能

一些其他功能可以幫助您在Makefile中創建更復雜的規則鏈。

變量

Make識別變量(或宏),它在makefile中作為替換的簡單占位符。最好在文件頂部聲明這些內容。每個變量的名稱都完全大寫。在名稱后面,等號將名稱分配給右側的值。例如,如果我們想要將安裝目錄定義為/usr/bin,我們可以在文件頂部添加:

INSTALLDIR=/usr/bin

稍后在文件中,我們可以使用以下語法引用此位置:

$(INSTALLDIR)

跨越多行

我們可以做的另一個有用的事情是允許命令跨越多行。

“”來表示跨行:

target: sourcecommand1 arg1 arg2 arg3 arg4 \arg5 arg6

如果你利用shell的一些更多編程功能,比如if-then語句,這就變得更加重要:

target: sourceif [ "condition_1" == "condition_2" ];\then\command to execute;\another command;\else\alternative command;\fi

這將執行此塊,就好像它是一行命令一樣。事實上,我們可以把它寫成一行,但它提高了可讀性,大大地將其分解為這樣。

如果要轉義行尾字符,請確保在“”后面沒有任何多余的空格或制表符,否則您將收到錯誤。

文件后綴規則

如果進行文件處理,可以使用的另一個功能是文件后綴。這些是一般規則,提供了一種基于擴展名處理文件的方法。

例如,如果您想要處理目錄中的所有.jpg文件并使用ImageMagick套件將它們轉換為.png文件,我們可以在Makefile中使用以下內容:

.SUFFIXES: .jpg .png.jpg.png:@echo converting $< to $@convert $< $@

第一部分是.SUFFIXES:聲明。這告訴make我們將在文件后綴中使用的所有后綴。默認情況下包含一些常用于編譯源代碼的后綴,如“.c”和“.o”文件,不需要在此聲明中標記。

下一部分是實際后綴規則的聲明。這基本上采取以下形式:

original_extension.target_extension:

這不是一個實際的目標,但它將匹配任何具有第二個擴展名的文件的調用,并在第一個擴展名中將它們構建出文件。

在我們的例子中,如果在我們的目錄中有“file.jpg”,我們可以調用make這樣構建一個名為“file.png”的文件:

make file.png

Make將在.SUFFIXES聲明中看到png文件,并查看用于創建“.png”文件的規則。然后它將在目錄中查找“.png”替換為“.jpg”的目標文件。然后它將執行后面的命令。

后綴規則使用了一些我們尚未介紹的變量。這些幫助根據當前流程的哪個部分替換不同的信息:

  • $?:此變量包含當前目標的比目標更新的依賴項列表。這些將是在執行此目標下的命令之前必須重新完成的目標。
  • $@:此變量是當前目標的名稱。這允許我們引用您嘗試制作的文件,即使此規則通過模式匹配。
  • $<:這是當前依賴項的名稱。對于后綴規則,這是用于創建目標的文件的名稱。在我們的示例中,這將包含“file.jpg”
  • $*:此文件是剝離匹配擴展名的當前依賴項的名稱。將此視為目標文件和源文件之間的中間階段。

創建轉換Makefile

我們將創建一個Makefile,它將執行一些圖像處理,然后將文件上傳到我們的文件服務器,以便我們的網站可以顯示它們。

如果您想跟隨,請在開始之前下載ImageMagick轉換工具。這些是用于操作圖像的簡單命令行工具,我們將在腳本中使用它們:

sudo apt-get update
sudo apt-get install imagemagick

在當前目錄中,創建一個名為Makefile的文件:

nano Makefile

在此文件中,我們將開始實施轉化目標。

將所有JPG文件轉換為PNG

我們的服務器已設置為專門為.png圖像提供服務。因此,我們需要在上傳之前將任何.jpg文件轉換為.png。

如上所述,后綴規則是一種很好的方法。我們將從.SUFFIX聲明開始,列出我們之間轉換的格式:

.SUFFIXES: .jpg .png

之后,我們可以制定一個將.jpg文件更改為.png文件的規則。我們可以使用ImageMagick套件中的convert命令來完成此操作。convert命令很簡單,其語法是:

convert from_file to_file

要實現此命令,我們需要后綴規則來指定我們開始使用的格式以及我們結束的格式:

.SUFFIXES: .jpg .png.jpg.png:           ## This is the suffix rule declaration

現在我們有了匹配的規則,我們需要實現實際的轉換步驟。

因為我們不確切知道這里將匹配什么文件名,所以我們需要使用我們學到的變量。具體來說,我們需要引用$<作為原始文件,以及$@作為我們要轉換的文件。如果我們將此與我們對convert命令的了解結合起來,我們就會得到以下規則:

.SUFFIXES: .jpg .png.jpg.png:convert $< $@

讓我們添加一些功能,以便明確告訴我們echo語句發生了什么。我們將在新命令和我們已經擁有的命令之前包含“@”符號,以便在執行時打印實際命令:

.SUFFIXES: .jpg .png.jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

此時,我們應該保存并關閉文件,以便我們可以測試它。

獲取jpg文件到當前目錄。如果您手邊沒有文件,可以輸入以下內容從騰訊云網站獲取:

wget https://ask.qcloudimg.com/raw/qctrain/yehe-b5f4bb2e421e9/1kp7y81up9.jpg
mv digitalocean-badge-blue.jpg badge.jpg

您可以通過要求它創建badge.png文件來測試您的make文件是否正常工作:

make badge.png
converting badge.jpg to badge.png using ImageMagick...
conversion to badge.png successful!

Make將轉到Makefile,請參閱.SUFFIXES聲明中的.png,然后轉到匹配的后綴規則。然后運行列出的命令。

創建文件列表

此時,如果我們明確告訴它我們想要該文件,make可以創建一個.png文件。

如果它只是在當前目錄中創建一個.jpg文件列表然后轉換它們會更好。我們可以通過創建一個包含要轉換的所有文件的變量來實現。

執行此操作的最佳方法是使用wildcard指令:

JPG_FILES=$(wildcard *.jpg)

我們可以用這樣的bash通配符指定一個目標:

JPG_FILES=*.jpg

但這有一個缺點。如果沒有.jpg文件,這實際上會嘗試在名為“*.jpg”的文件上運行轉換命令,這將失敗。

我們上面提到的通配符語法編譯當前目錄中的.jpg文件列表,如果不存在,則不會將變量設置為任何內容。

雖然我們這樣做,但我們應該嘗試處理常見的.jpg文件的輕微變化。這些圖像文件通常使用.jpeg擴展名而不是.jpg。為了以理智的方式處理這些問題,我們可以將程序中的名稱更改為.jpg文件,以便我們的處理行更簡單:

我們將使用以下兩個代替上述內容:

JPEG=$(wildcard *.jpg *.jpeg)     ## Has .jpeg and .jpg files
JPG=$(JPEG:.jpeg=.jpg)            ## Only has .jpg files

第一行編譯當前目錄中的.jpg和.jpeg文件列表,并將它們存儲在一個名為JPEG的變量中。

第二行引用此變量并執行簡單的名稱轉換,將JPEG變量中以.jpeg結尾的名稱轉換為以.jpg結尾的名稱。

這是通過以下語法完成的:

$(VARNAME:.convert_from=.convert_to)

在這兩行的末尾,我們將有一個名為JPG的新變量,它只包含.jpg文件名。其中一些文件可能實際上并不存在于系統上,因為它們實際上是.jpeg文件(沒有發生實際的重命名)。這沒關系,因為我們只使用此列表來創建我們要創建的.png文件的新列表:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)

現在,我們有一個我們想要在變量PNG中請求的文件列表。此列表僅包含.png文件名,因為我們進行了另一個名稱轉換。現在,此目錄中的每個.jpg或.jpeg文件都用于編譯我們要創建的.png文件列表。

我們還需要更新.SUFFIXES聲明和后綴規則,以反映我們現在正在處理.jpeg文件:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .png.jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

如您所見,我們已將.jpeg添加到后綴列表中,并為我們的規則添加了另一個后綴匹配項。

創建一些Targets

我們現在在Makefile中有很多,但我們還沒有任何正常的目標。讓我們解決這個問題,以便我們可以將PNG列表傳遞給后綴規則:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .pngconvert: $(PNG).jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

所有這些新目標都列出了我們收集的.png文件名作為要求。然后看看是否有一種方法可以獲取.png文件并使用后綴規則來執行此操作。

現在,我們可以使用此命令將我們所有的.jpg和.jpeg文件轉換為.png文件:

make convert

讓我們添加另一個目標。將圖像上傳到服務器時通常要完成的另一項任務是調整它們的大小。使圖像具有正確的大小將使用戶無需在請求時動態調整圖像大小。

ImageMagick的mogrify命令可以按照我們需要的方式調整圖像大小。假設我們的圖片將在我們的網站上顯示的區域是500px寬。我們可以使用以下命令轉換此區域:

mogrify -resize 500\> file.png

這將調整大于500px寬的任何圖像以適應此區域,但不會觸摸較小的圖像。這就是我們想要的。作為目標,我們可以添加以下規則:

resize: $(PNG)@echo resizing file...@mogrify -resize 648\> $(PNG)@echo resizing is complete!

我們可以像這樣添加到我們的文件中:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .pngconvert: $(PNG)resize: $(PNG)@echo resizing file...@mogrify -resize 648\> $(PNG)@echo resizing is complete!.jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

現在,我們可以將這兩個目標串在一起作為另一個目標的依賴關系:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .pngwebify: convert resizeconvert: $(PNG)resize: $(PNG)@echo resizing file...@mogrify -resize 648\> $(PNG)@echo resizing is complete!.jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

您可能會注意到隱式調整大小將運行與convert相同的命令。我們將指定它們兩者,盡管并非總是如此。轉換可以在將來包含更精細的處理。

webify目標現在可以轉換圖像并調整其大小。

將文件上載到遠程服務器

現在我們已經為Web準備好了鏡像,我們可以創建一個目標,將它們上傳到我們服務器上的靜態圖像目錄。

我們可以通過將轉換后的文件列表傳遞給scp來實現:

我們的目標看起來像這樣:

upload: webifyscp $(PNG) root@ip_address:/path/to/static/images

這會將我們的所有文件上傳到遠程服務器。我們的文件現在看起來像這樣:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .pngupload: webifyscp $(PNG) root@ip_address:/path/to/static/imageswebify: convert resizeconvert: $(PNG)resize: $(PNG)@echo resizing file...@mogrify -resize 648\> $(PNG)@echo resizing is complete!.jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful!

清理

讓我們添加一個清理選項,以便在將所有本地.png文件上傳到遠程服務器后將其刪除:

clean:rm *.png

現在,我們可以在頂部添加另一個目標,在我們將文件上傳到遠程服務器之后調用此目標。這將是最完整的目標,也是我們想要默認的目標。

為了指定這一點,我們將把它作為第一個可用的目標。這將用作默認值。我們將按慣例稱之為“全部”:

JPEG=$(wildcard *.jpg *.jpeg)
JPG=$(JPEG:.jpeg=.jpg)
PNG=$(JPG:.jpg=.png)
.SUFFIXES: .jpg .jpeg .pngall: upload cleanupload: webifyscp $(PNG) root@ip_address:/path/to/static/imageswebify: convert resizeconvert: $(PNG)resize: $(PNG)@echo resizing file...@mogrify -resize 648\> $(PNG)@echo resizing is complete!clean:rm *.png.jpeg.png .jpg.png:@echo converting $< to $@ using ImageMagick...@convert $< $@@echo conversion to $@ successful

通過這些最后的操作,如果您使用Makefile和.jpg或.jpeg文件進入目錄,您可以調用make而不使用任何參數來處理文件,將它們發送到您的服務器,然后刪除您上傳的.png文件。

make

正如您所看到的,很容易將任務串聯在一起,并且可以選擇一個流程到某一點。例如,如果您只想轉換文件并需要在不同的服務器上托管它們,則可以使用webify目標。

結論


此時,您應該很好地了解如何使用Makefile。更具體地說,您應該知道如何使用make作為自動執行大多數過程的工具。

雖然在某些情況下編寫一個簡單的腳本可能更容易,但Makefile是在流程之間建立結構化的層次關系的簡單方法。學習如何利用這個工具可以幫助簡化重復性任務。更多Makefile的教程請前往騰訊云+社區學習更多知識。


參考文獻:《How To Use Makefiles to Automate Repetitive Tasks on an Ubuntu VPS》

問答
BeautifulSoup和Scrapy爬蟲之間的區別?
相關閱讀
騰訊云數據庫回檔解決方案
大數據在教育行業的研究與應用
看看上下文映射的清晰視圖
【每日課程推薦】新加坡南洋理工大學博士,帶你深度學習NLP技術

此文已由作者授權騰訊云+社區發布,更多原文請點擊

搜索關注公眾號「云加社區」,第一時間獲取技術干貨,關注后回復1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在云加社區!

轉載于:https://www.cnblogs.com/qcloud1001/p/9593663.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/388616.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/388616.shtml
英文地址,請注明出處:http://en.pswp.cn/news/388616.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Free SQLSever 2008的書

Introducing SQL Server 2008 http://csna01.libredigital.com/?urss1q2we6這是一本提供自由使用書&#xff01;我把它翻譯&#xff0c;或轉送有什么關系&#xff01;這樣的書還是有幾本吧&#xff0c;Introducing Linq,Introducting Silverlight,都是啊&#xff01;嘿嘿。。。…

流式數據分析_流式大數據分析

流式數據分析The recent years have seen a considerable rise in connected devices such as IoT [1] devices, and streaming sensor data. At present there are billions of IoT devices connected to the internet. While you read this article, terabytes and petabytes…

oracle failover 區別,Oracle DG failover 實戰

Oracle dataguardfailover實戰操作步驟備庫&#xff1a;SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;SQL> SHUTDOWN IMMEDIATE;SQL> STARTUP;添加臨時文件&#xff0c;刪除老的臨時文…

Jenkins自動化CI CD流水線之8--流水線自動化發布Java項目

一、前提 插件&#xff1a;Maven Integration plugin 環境&#xff1a; maven、tomcat 用的博客系統代碼&#xff1a; git clone https://github.com/b3log/solo.git 遠端git服務器&#xff1a; [gitgit repos]$ mkdir -p solo [gitgit repos]$ cd solo/ [gitgit solo]$ git --…

oracle數據泵導入很慢,impdp導入效率的問題

內網從一臺服務器A導入到另一臺服務器B&#xff0c;38G的數據半個多小時才導了一個表。原來B庫上是有數據的&#xff0c;是不是因為TABLE_EXISTS_ACTIONREPLACE 導致速度慢了&#xff1f;parallel8也不知道會不會設高了。SQL> show parameter cpuNAME …

BZOJ2597 WC2007剪刀石頭布(費用流)

考慮使非剪刀石頭布情況盡量少。設第i個人贏了xi場&#xff0c;那么以i作為贏家的非剪刀石頭布情況就為xi(xi-1)/2種。那么使Σxi(xi-1)/2盡量小即可。 考慮網絡流。將比賽建成一排點&#xff0c;人建成一排點&#xff0c;每場未確定比賽向比賽雙方連邊&#xff0c;確定比賽向贏…

數據科學還是計算機科學_數據科學101

數據科學還是計算機科學什么是數據科學&#xff1f; (What is data science?) Well, if you have just woken up from a 10-year coma and have no idea what is data science, don’t worry, there’s still time. Many years ago, statisticians had some pretty good ideas…

開機流程與主引導分區(MBR)

由于操作系統會提供所有的硬件并且提供內核功能&#xff0c;因此我們的計算機就能夠認識硬盤內的文件系統&#xff0c;并且進一步讀取硬盤內的軟件文件與執行該軟件來完成各項軟件的執行目的 問題是你有沒有發現&#xff0c;既然操作系統也是軟件&#xff0c;那么我的計算機優勢…

膚色檢測算法 - 基于二次多項式混合模型的膚色檢測。

由于CSDN博客和博客園的編輯方面有不一致的地方&#xff0c;導致文中部分圖片錯位&#xff0c;為不影響瀏覽效果&#xff0c;建議點擊打開鏈接。 由于能力有限&#xff0c;算法層面的東西自己去創新的很少&#xff0c;很多都是從現有的論文中學習&#xff0c;然后實踐的。 本文…

oracle解析儒略日,利用to_char獲取當前日期準確的周數!

總的來說周數的算法有兩種&#xff1a;算法一&#xff1a;iw算法&#xff0c;每周為星期一到星期日算一周&#xff0c;且每年的第一個星期一為第一周&#xff0c;就拿2014年來說&#xff0c;2014-01-01是星期三&#xff0c;但還是算為今年的第一周&#xff0c;可以簡單的用sql函…

密碼機

樹狀數組1 #include<bits/stdc.h>2 using namespace std;3 int x,y,c[200005];4 char str[20];5 int inline read(){6 int x0,f1;7 char chgetchar();8 while(ch<0||ch>9)9 chgetchar(); 10 while(ch>0&&ch<9){ 11 …

js有默認參數的函數加參數_函數參數:默認,關鍵字和任意

js有默認參數的函數加參數PYTHON開發人員的提示 (TIPS FOR PYTHON DEVELOPERS) Think that you are writing a function that accepts multiple parameters, and there is often a common value for some of these parameters. For instance, you would like to be able to cal…

sql management studio 附加mdf文件出錯的解決辦法

將mdf文件所在文件夾的權限改為everyone.&#xff0c;完全控制即可。

oracle raise_application_error,RAISE_ APPLICATION_ ERROR--之異常處理

平時用來測試的異常處理我們都是通過dbms_output.put_line來輸出異常信息&#xff0c;但是在實際的應用中&#xff0c;需要把異常信息返回給調用的客戶端。其實 RAISE_APPLICATION_ERROR 是將應用程序專有的錯誤從服務器端轉達到客戶端應用程序(其他機器上的SQLPLUS或者其他前臺…

金融信息交換協議

隨著網絡的使用&#xff0c;目前所有大型的金融機構都已經實現了自動化和數字化。當中肯定少不了互聯網的加入&#xff0c;那么在這當中&#xff0c;我們主要介紹一下FIX協議。它是由國際FIX協會組織提供的一個開放式協議&#xff0c;目的是推動國際貿易電子化的進程&#xff0…

2018大數據學習路線從入門到精通

最近很多人問小編現在學習大數據這么多&#xff0c;他們都是如何學習的呢。很多初學者在萌生向大數據方向發展的想法之后&#xff0c;不免產生一些疑問&#xff0c;應該怎樣入門&#xff1f;應該學習哪些技術&#xff1f;學習路線又是什么&#xff1f;今天小編特意為大家整理了…

相似鄰里算法_紐約市-鄰里之戰

相似鄰里算法IBM Data Science Capstone ProjectIBM Data Science Capstone項目 分析和可視化與服裝店投資者的要求有關的紐約市結構 (Analyzing and visualizing the structure of New York City in relation to the requirements of a Clothing Store Investor) 介紹 (Introd…

一、面向對象

第一節&#xff1a;面向對象編程1.面向對象三大原則&#xff1a;封裝&#xff1a;就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff0c;對不可信的進行信息隱藏。繼承&#xff1a;繼承&#xff0c;指可以讓某個類型的對…

[poj 1364]King[差分約束詳解(續篇)][超級源點][SPFA][Bellman-Ford]

題意 有n個數的序列, 下標為[1.. N ], 限制條件為: 下標從 si 到 sini 的項求和 < 或 > ki. 一共有m個限制條件. 問是否存在滿足條件的序列. 思路 轉化為差分約束, 就是 即 Si 為第 i 項的前綴和, 特別的 So 為0. 轉化不等式(連續子段和變為前綴和之差 > < 變為 &g…

linux質控命令,Linux下microRNA質控-cutadapt安裝

如果Linux系統已安裝pip或conda&#xff0c;cutadapt的安裝相對簡便一些&#xff0c;示例如下&#xff1a;1.pip安裝pip install --user --upgrade cutadapt添加環境變量echo export PATH$PATH:/your path/cutadapt-1.10/bin >> ~/.bashrc2.conda安裝conda install -c b…