在 NightTeam 讀者羣裏的朋友應該都知道,上週末的時候(9月21-22日),PyCon China 2019 的第一站在上海開始了,而我很榮幸地被組委會邀請到上海蹭吃蹭喝,白嫖了一個晚宴+兩天的大會門票...在這裏先感謝一下組委會。python
既然今年的主力站是上海,那麼天然而然地,更多的大佬、乾貨都會彙集於此。git
那麼今年的 PyCon 上海站,都有哪些有意思的東西呢?跟我來看看吧~github
首先,就是這個晚宴了,也就是票務信息裏寫的所謂的「Python 之夜」。編程
這個晚宴的話,無論你是單買一張晚宴票,仍是直接買的 VIP 票,其實都是很值得的,但彷佛不少人並無意識到。畢竟這個票價實際上是很是便宜的,單買一張晚宴票的價格也不過就是與在商場裏吃一頓稍微好點的飯的價格至關而已(200 至 300 人民幣)。服務器
在晚宴的幾個小時裏,你能與在臺上分享知識的講師面對面地聊天、交流技術,而聊嗨了的話,加個微信回去繼續聊也不是什麼稀奇的事情。微信
因爲今年是 Python 誕生 30 週年的關係,因此今年的晚宴還有個額外的環節 —— 吃蛋糕。網絡
PS:蛋糕挺好吃的,奶油不膩。多線程
接着就是充滿了乾貨和廣告的大會第一天了,上海站一共有 6 個分會場,內容涵蓋了幾個 Python 圈子裏比較常見、熱門的方向。架構
中規中矩吧,內容大概就是開場白+說了說 Python 裏一些比較優雅的寫法。app
PS:期間翻譯炸了好幾回...事故現場圖在本文的最後。
這個分享是 Azure(微軟旗下的雲計算平臺)的廣告,但項目自己仍是挺有意思的。
項目使用了 Azure 的一些服務,通過了簡單地組合、操做後就變成了一個能夠識別攝像頭下的水果是什麼水果的小工具,全程基本不用寫代碼,大部分的操做只須要點點點就能完成,很輕鬆地就能完成整個項目。(固然,有實際意義的項目沒這麼簡單)
項目地址:
PPT 後面推薦的一個網站(https://www.hackster.io)也挺有意思的,網站內全是創意硬件項目,其中有不少頗有趣的項目,能夠了解一下。
PS:這一場演講中就已經能夠看到那個 VS Code 的新功能了。
PS:中間又出事故了,事故現場視頻在本文的最後。
這個分享是 AWS(亞馬遜旗下的雲計算平臺)的廣告,主要是宣傳 Serverless(無服務器運算/功能即服務)相關的產品和服務。
他們在這方面的核心就是 Lambda 了,同類產品國內的阿里雲也是有的,名爲函數計算。
我前面寫的《當你寫爬蟲遇到 APP 的請求有加密參數時該怎麼辦?》的初級篇以及《當你寫爬蟲抓不到 APP 請求包的時候該怎麼辦?》的高級篇中,用到的那兩個 DEMO APP 的服務端就是使用的阿里雲的函數計算+API 網關+日誌服務組合搭建的。
得益於 Serverless 這種架構的特性,我只須要實現一個核心的「檢測加密參數」的函數就可使用了,全程都不須要理會Web服務器、日誌聚合統計、部署、調試防火牆、限流等亂七八糟的事情,只須要點幾下,就能實現其他那些業務無關的功能,那些功能全都被雲計算平臺給包辦了。
但 Serverless 也不是沒有缺點的,它在使用量少、服務功能簡單的狀況下很是省錢(甚至不要錢),但若是你的服務使用量很是大,各類雲計算服務燒的錢就是你直接買臺服務器本身部署的幾倍、甚至更高了。
另外,若是你的服務功能較爲複雜,在這一套部署方式下若是碰到什麼「並不是是你代碼產生的問題」,你將很難本身解決,畢竟大部分功能都是雲計算廠商幫你實現的,你只能聯繫雲計算廠商幫忙。
沒翻譯,聽不太懂,打擾了。
PS:Armin 的高橋流風格 PPT 是真的騷。
這一個分享很是有意思,laike9m 老哥寫了一個幫助 DEBUG 的工具 —— Cyberbrain,使用起來的效果差很少是這樣:
在你注入一行代碼到你須要 DEBUG 的位置後,執行一下整段代碼,這個工具就能自動輸出一個像上面這樣子的參數變化圖。
經過這個參數變化圖,你能夠很輕鬆地瞭解到這個參數的整個生命週期,例如:它是如何初始化的、它是如何被某一個函數調用賦值的。
更厲害的是,它能夠幫你忽略掉一些無關的代碼,好比用於生成上面這張樣例圖的代碼其實是這樣的:
def func_f(bar): x = len(bar) return x def func_c(baa): baa.append(None) baa.append('?') def func_a(foo): for i in range(2): pass ba = [foo] func_c(ba) foo = func_f(ba) # foo is our target cyberbrain.register(foo) import cyberbrain cyberbrain.init() fo = 1 func_a(fo)
能夠看到上面那個 func_a
的位置,是有一個無用的 for 循環的,它在 ba = [foo]
的前面,但咱們在前面的圖片中並無看到這個 for 循環,緣由很簡單,由於它是一個無關的代碼。(這個忽略無關代碼的功能據 laike9m 說是使用分治的思路實現的)
固然,若是隻是這樣的話,好像也只能用於 Python 程序的 DEBUG,有沒有更騷的操做呢?
有,我看到這個東西的第一眼,就想到了一個很騷的操做:能夠把它改造一下用在逆向上。實際上相似的工具在 PC、Android 逆向領域中是有的,只不過他們都是經過靜態分析實現的(並且貌似沒有忽略無關代碼的這種功能)。
那麼,若是把它用在一樣是動態語言的 JavaScript 上呢?
一樣的效果、一樣的操做,配合上簡單的混淆還原,就能讓簡單的逆向更加簡單、難的逆向掉頭髮更少。
你能夠經過這個工具,輕鬆地知道某個加密參數的生成全過程,並且它還會幫你忽略掉其餘的無關代碼,能夠直接無視那些加了花指令的噁心人的代碼。
好了,點到爲止,你們有興趣的話能夠嘗試實現一下同類工具。
項目地址:
https://github.com/laike9m/Cyberbrain
PPT:
https://yanshuo.io/assets/player/?deck=5d6c9136d37616007449891e
PS:分享時的「會議時間」部分放的兩張水豚圖也是很...現場節目效果爆炸。
PS:這個項目還處於初期階段,雖然能用但還須要優化,據 laike9m 說,目前反推作的還不許,在 x, _ = a, b
的狀況下,這個工具會認爲 x
和 a
、b
都有關。不過他在大會次日與 thautwarm(紅姐)交流後,彷佛已經有了一些新的思路,期待 Cyberbrain 項目的後續發展。
這個分享講了一下爲何會有 GIL、爲何會用 GIL、怎麼避開 GIL 等,其實網上講 GIL 的文章不少,但那些文章都沒有他講得這麼細,等後面官方放出回放後,想了解這方面的朋友能夠看一看、瞭解一下。
不過,對於爬蟲這種網絡請求部分佔耗時大頭的應用場景來講,直接上協程便可(由於協程切換的消耗比多線程更低)。
若是你發現,你的爬蟲程序出現了性能問題,能夠加上多進程,或是隻把網絡請求的部分使用協程實現,解析部分獨立出來使用多進程或其餘更高性能的語言實現(如Go、C),只須要用一些簡單的中繼操做就能夠了。
PS:對不起,翻到眼睛都快瞎了都沒找到照片。
嗯,沒翻譯聽不太懂。大概內容就是講了一下文件傳輸的時候會影響性能的部分,以及規避的方式:Zero-copy(零拷貝),而且後續貌似會有語言級的支持(聽別人說的)。
這個項目很騷,弄出了一個能夠根據狀況選擇性編譯(翻譯)部份內容運行的 Python JIT 實現,並且還能兼容本來的 C 擴展。不過這個項目還處於 DEMO 階段,雖然能演示,但也就僅此而已了,並不能用於生產環境,期待後續發展。
項目地址:
https://github.com/thautwarm/moshmosh
https://github.com/thautwarm/restrain-jit
這個分享的話就比較中規中矩了,只是介紹了一下 Thrift 的用法,算是科普、入門型的分享。
若是你想要知道 Thrift 和 gRPC 哪一個更好、更適合你的業務場景的話,能夠看看這篇文章:https://blog.csdn.net/dazheng/article/details/48830511,講得已經很細了。
引用一下這篇文章中最後的選擇部分:
何時應該選擇gRPC而不是Thrift
- 須要良好的文檔、示例
- 喜歡、習慣HTTP/二、ProtoBuf
- 對網絡傳輸帶寬敏感
何時應該選擇Thrift而不是gRPC
- 須要在很是多的語言間進行數據交換
- 對CPU敏感
- 協議層、傳輸層有多種控制要求
- 須要穩定的版本
- 不須要良好的文檔和示例
雖然講師自稱不打廣告,但這個分享其實全程都有阿里雲日誌服務的廣告,不過內容仍是挺詳盡的,廣告部分只是簡單一提就過了。
內容主要是各類數據收集、存儲方式的優劣勢,以及各個工具之間的組合、配套方式,對這方面想了解的朋友一樣能夠等官方回放出來以後看一看、瞭解一下。
Elastic 的廣告,仍是那一套內容,看一半就溜了...他們家工具是挺好用,惋惜資源佔用仍是挺大的,無論是 ES 仍是Filebeat(對,就是 Filebeat),資源佔用都比較大,在預算少、機器配置低的狀況下很可貴到一個很好的體驗。
固然,今年的 Elastic 與去年相比也不是沒有變化的,今年的 Kibana 終於有了中文界面!(7.0就有了)
不再用看着全英文的頁面腦袋疼了!雖說英文界面用多了也就那樣,可是終歸仍是沒中文看着舒服的。
不過翻譯效果的話,據劉徵說,目前是請人幫他們翻譯的,效果僅僅就是能看而已,還存在一些詞不達意的問題,須要等後續優化,不過這已是一個很大的進步了,畢竟前面那麼久都沒好好搞多語言。
嗯,Airtest 的廣告,上一次見到 Airtest 是在 OSCHINA 的源創會上,那時候是熊博老哥在講這東西。通過了大半年的發展,Airtest 相較於以前而言已經完善了很是多,以前存在的一些 BUG 也都修復了,整個使用體驗舒服了不少。
不過...分享內容仍是差很少的,依然是演示一下使用、吹一吹他們的手機機櫃和機房、曬一下他們那一堆各類品牌、各類型號的手機...以及秀一下各類優化。
Airtest 的話,用在 APP 爬蟲上的相關操做已經有不少文章說過了,甚至 Airtest 官方微信公衆號都有轉發過,因此這裏就再也不深刻地說了,具體操做有興趣的朋友能夠本身搜索一下。
項目地址:
https://github.com/AirtestProject/Airtest
雲測試服務:
Python 基金會廣告,因爲各類因素最終沒能像彩排時那樣在5分鐘內講完,挺惋惜的。
嗯,娛樂項目,並且講師節奏控制得很差,講到一半就被拉下去了。可是講師的學習思路挺不錯的,建議還在入門階段的朋友們學習一下。
項目地址:
https://github.com/tvytlx/render-py
全程懵逼,打擾了。
在這個分享中,講師用 5 分鐘不到的時間科普了一遍 Python 的字節碼相關知識,不過因爲時間緊迫,講得比較淺,現場不少人聽的時候應該都是一臉懵逼的,因此仍是看看網上的文章吧...
不過有意思的地方在於,講師創辦了一個公司,他們作了個 Python 腳本加密產品 —— PyArmor,功能看起來挺強大的,有須要的朋友能夠了解一下。
項目地址:
https://github.com/dashingsoft/pyarmor
http://pyarmor.dashingsoft.com
PS:果真,脫髮會讓人變強。
有點水啊兄dei。PS:竟然在陳祥安的水羣裏看到了他...
emmm...這個分享的話簡單地說就是鄙視了一下 ctypes、boost.python、pybind11 這些在 Python 中調用 C/C++ 代碼的工具,而後放出來一個名爲 c2py 的工具,效果吊打上面的這些工具,並且比它們使用起來更方便。
我原本一開始是想着能不能用這玩意調用 Android NDK 的 so 庫的,不過看了一下項目說明,它是將 C/C++ 源碼進行了轉換,只能用於 C/C++ 的頭文件(.h
後綴),因此就無法搞了,很惋惜。
項目地址:
https://github.com/nanoric/c2py
「PPT」 實際上是 Web,還很精美,作 Web 開發的就是不同。
PS:現場講述如何同時找兩個女友(誤),輝哥不怕回家跪搓衣板嗎?
說好的翻譯沒了,以我淺薄的英語水平只能聽懂一部分。
嗯,大概就是從淺到深地講解了面向對象的各類操做,並介紹了一些魔法方法(雙下劃線系列)的效果,補全了一些以前沒有注意到的知識點。
嗯,依然沒有翻譯。
大概就是講了一下線程、進程、協程的特性、問題、優劣勢、實現原理、版本差別等,並介紹了一下 Asyncio 事件循環的替代品、協程環境下用的庫等。
但上面其實不少內容我踩坑的時候已經瞭解到了...因此...就全程寫這篇文章了。
其實 T一、T2 的課程內容本體並非重點,重點在於人少,上午的 T1 和下午的 T2 都是隻有十幾我的買了票(或者像我這樣白嫖),因此課程中有什麼疑惑都能直接當場向 Luciano 提問。
T2 的內容結束後,在場的幾位大佬還由於 「aiofiles這種庫是否有意義」 的問題,產生了一次額外的討論環節(全程不敢 BB,靠着騰訊翻譯君勉強聽懂),這在大會場上是不可能發生的事情,因此就像晚宴同樣,都屬於很是值得花錢買的(雖然這個有點貴,999 一張)。
課程中的照片以及最後的大合照因爲版權、肖像權問題,這裏就不放了。
至此,PyCon 上海站兩天的內容就結束了,雖然表面的 PyCon 很是光鮮亮麗,但咱們也不能只看表面的東西,畢竟不光是講師須要「臺上一分鐘臺下十年功」,組委會的準備工做也須要花費很是多的精力、人力以及金錢!
據辛姐(辛慶)所說,前幾年的 PyCon China 沒有這麼多像 Python 基金會、微軟這樣的贊助商,每次籌辦都須要燒組委會本身的錢,而大會自己又收支不平衡,徹底就是在用愛發電。
去年(2018年)的 PyCon China,組委會在辦完後一算,血虧十來萬(人民幣),門票錢根本就入不豁出。若是他們一開始不是抱着爲社區作貢獻的心態來搞的話,可能早就堅持不下去了。
因此若是你喜歡 Python 這門語言、願意讓這個社區變得更好的話,能夠去 PyCon China 作作志願者、幫幫忙,或者報個名當一回講師,這樣能夠支持一下組委會的工做。
9月20日晚上,晚宴結束後,組委會的工做人員們就開始了忙碌的準備工做。由於場地不少,每個場地的設備都須要調試的關係,他們一直弄到凌晨才結束。
閃電演講因爲演講時間緊迫,須要講師們提早屢次練習、彩排,才能確保正式開始的時候能把控好時間,在5分鐘內將內容全都講完。
因而,在佈置場地的同時,閃電演講的幾位講師也在排練着,還讓咱們幾個在邊上只圍觀不幹活的吃瓜羣衆扮演現場觀衆,因此咱們也是提早聽了一遍完整版的閃電演講😀(部分講師的)。
惋惜的是,現場狀況複雜,出現了一些意料以外的情況,致使內容較多的講師們最終仍是沒能在5分鐘內將全部內容都講出來,十分惋惜。
吐槽方面的話,基本就你們都在說的那幾個問題了,畢竟其餘方面作得確實沒什麼毛病。
有道同傳在剛開始的時候仍是挺穩定的,雖然有些斷斷續續,但內容至少還正常,但過了一段時間後就開始逐漸崩壞,最終仍是被工做人員關閉了,後來再也沒啓用過。
不過這個問題的話,我問了一下工做人員,實際上是由於網絡問題致使的。
他們用來放有道同傳的那臺機是連的 WIFI,而會場的人又實在是太多太多了,酒店的 AP 設備根本扛不住,因此沒辦法及時地將音頻流傳輸至服務器,因而就炸了。
而他們在此以前想到的其餘方案,又會須要高額的金錢支撐,因此最終仍是選用了合做方 —— 網易有道的商業級同傳翻譯產品(無償使用)。因爲問題是網絡致使的,因此有道其實並不背鍋。
不過這個問題其實很好解決,只須要從酒店的交換機那邊拉一條網線直接連到場控區就行了,輕鬆解決網絡問題,有道不再用背鍋了。這個建議我已經告知他們了,但願後續有外國人的場次在這方面會有改善。
這個問題出現於9月21日早上 Dave Glove 的「構建 Python 物聯網(IoT)圖像分類解決方案並與 Azure 無服務器功能集成」這個分享中,直接讓原本好好的一我的工智能識別水果的演示變成了人工智障哈哈哈哈哈哈。
不過這個問題的緣由不太清楚,由於佈置的時候測試播放是正常的,多是玄學吧,「測試時好好的,一到現場就炸了」什麼的。
<video id="video">
<source id="mp4" src="https://oss.crawler-lab.com/PyCon上海站到底講了啥?/asserts/23.mp4" type="video/mp4">
</video>
據晁倩小姐姐解釋,這個是由於...今年的贊助商都很給力,沒有青銅級別的贊助商,因此最低的就是白銀了。
斷斷續續地寫完了,Typora 裏顯示本文字數已破萬...內容仍是挺多的,沒想到會寫這麼多出來,若是有些錯別字或者都不通順的地方還請見諒,實在太長了。
PS:如今的時間是2019年9月24日凌晨3點,我準備把圖片傳到 OSS,而後放到微信上定時發送了。
文章做者:「夜幕團隊 NightTeam」 - Loco
夜幕團隊成立於 2019 年,團隊包括崔慶才、周子淇、陳祥安、唐軼飛、馮威、蔡晉、戴煌金、張冶青和韋世東。
涉獵的編程語言包括但不限於 Python、Rust、C++、Go,領域涵蓋爬蟲、深度學習、服務研發、對象存儲等。團隊非正亦非邪,只作認爲對的事情,請你們當心。
本篇文章由一文多發平臺ArtiPub自動發佈