<dfn id="hx5t3"><strike id="hx5t3"><em id="hx5t3"></em></strike></dfn>

    <thead id="hx5t3"></thead><nobr id="hx5t3"><font id="hx5t3"><rp id="hx5t3"></rp></font></nobr>

    <listing id="hx5t3"></listing>

    <var id="hx5t3"></var>
    <big id="hx5t3"></big>

      
      

      <output id="hx5t3"><ruby id="hx5t3"></ruby></output>
      <menuitem id="hx5t3"><dfn id="hx5t3"></dfn></menuitem>

      <big id="hx5t3"></big>

        姜姜iia

        姜姜iia 查看完整檔案

        北京編輯  |  填寫畢業院校SegmentFault  |  打雜 編輯填寫個人主網站
        編輯

        SegmentFault 思否社區打雜小弟
        可可愛愛 沒有腦袋 swag

        聯系郵箱 jiangjiang@sifou.com

        歡迎??大噶關注我們的公眾號,里面也有思否小姐姐的微信號:http://www.tvxinternet.com/a/11...

        個人動態

        姜姜iia 贊了文章 · 3月26日

        專訪 Tetrate.io 創始工程師吳晟:開源領域需要 40+ 的開發者,也需要更張揚的年輕人

        不久前,「一源初始,開放共創」開放原子開源基金會 2020 年度峰會于北京圓滿落幕。峰會由開放原子開源基金會主辦,阿里巴巴、百度、華為、趣鏈科技、SegmentFault 思否、招商銀行等開源項目代表單位及開源社區協辦,亦得到了全體理事單位的大力支持。

        會議中,Tetrate.io 創始工程師、Apache Member、Apache SkyWalking 創始人吳晟進行了主題分享,并參與了開源運營治理分論壇的圓桌討論環節。在分享中,吳晟提出了對國內開源環境以及開源和商業間的思考。SegmentFault 思否的@阿遂對對吳晟進行了專訪。

        image.png

        Q1:如果需要給“開源”下一個定義,您認為是什么?

        開源在我的印象中,是一個技術工程師在跨商業實體間合作的平臺與機會。在傳統的開發模式中,工程師開發的軟件只能在公司內部共享,而借助開源,可以和其他公司的人一起來開發、分享。對于工程師來說,這樣的開發模式會更有成就感,項目的質量要求相比之前也會高很多。

        Q2:開源領域有很多角色分工,比如工程師、宣講者等等,您認為您在開源領域當中的角色是什么?

        主要還是一個工程師的角色。SkyWalking 最早就是我自己參與開發的項目,所以開發者的身份在我的日常當中占據很大的比例。布道、運營之類的工作也會有一些,但主要是在項目進入 Apache 基金會并順利畢業之后,會有一些外部活動邀請進行相關的經驗分享。

        Q3:現在比較普遍的一種認知是,開源的參與者不只局限于開發者。您覺得各種角色的加入對開源來說會造成哪些促進或影響?

        其實就像一個軟件公司,除了開發者之外也是包含很多其它角色的。比如宣傳市場、售前售后等等,但無論是哪一種身份,大家都是抱著同一個目的,在為同一個產品或開源項目在服務,在合作共建。

        開源只是將這件事情放大了,把公司里由幾個人干的事情進行更廣泛的分工,找到更多擅長的人來一起完成。因為不可能一個人什么都會,需要有不同身份的角色參與其中。

        Q4:能否分享一下您對國內開源領域的看法?

        國內開源領域有一個現象,是大家現在看到了開源背后的更明確的商業價值,所以有點“一窩蜂式”的涌入。

        這個現象的結果可能跟其它所有行業一樣,在“一窩蜂”的涌入后,會在一個時間內變的非常繁榮,但到了下一個階段,其中有一部分人可能會被淘汰掉。但泡沫總是會破滅的,能剩下的才是那些真正務實的項目和人。

        開源項目的核心是為了解決一個具備通用性的問題。如果項目真的能解決一批人的問題,那不管泡沫破不破滅,它都會一步一個腳印的活下來。但如果單純是靠造勢、造泡沫發展起來,就會長得快破的也快,項目很快也會被大家忘掉。

        Q5:您認為開源與商業間的關系是什么?開源項目應該如何協調與商業間的關系?

        我最近在和 PingCAP 的朋友聊天中,談到一個很有共性的思考。

        以前的開源項目有幾個發展階段,最開始會是賣所謂的商業版產品,但這種方式在今天的成功率已經很低了。做開源項目的商業版,意味著會“藏”一些東西。但“藏”這個事情對于開源領域來說是很反感的,用戶會認為你只是開源了一個玩具,開源出來的項目本身就沒有多少價值,也會和商業版產生競爭關系。

        比如你將一些功能“藏”了起來,外部的項目貢獻者為你提供了一個一模一樣的功能,你就需要考慮是否要將這項功能合并進來,如果不合并又需要用什么樣的理由去拒絕。

        所以現在最典型的開源模式就是像 RedHat 一樣的全開源,項目功能全部都是開放的,只售賣咨詢服務。全開源保留的只是“人”。寫項目的人是我的,所以我在這個項目中最專業、最擅長。

        第二種就是賣云服務。云服務應該是現在相對比較好掙錢的方式,但也有一定的門檻。比如說太小的開源項目或者太組件化的項目就很難售賣配套的云服務,而偏產品化的產品就相對比較好賣。

        第三類在國內還相對較少,就類似于我們在北美的那家公司一樣,做的是一個商業產品,但產品 95% 以上的功能都是來自幾個不同的頂級開源項目。我們把它們“捏”在一起為客戶解決一個實際的場景需求,提供了一個完整的商業產品。

        Q6:您覺得什么樣的企業適合參與開源?

        我之前接觸過各種各樣的企業,如果要細分的話,如果一家想要主導開源,或者想要新做一個開源項目的話,企業一定要具備“技術范兒”,是一個技術導向的企業。

        我們可以看到國內很多互聯網企業開源的很多東西,可能過了兩三年就沒人管了。本質上開源的目的是因為內部需要,但很長時間沒有進行改進,外部也只是拿走去用,然后開源項目的熱度就慢慢降下去,沒有人再使用了。這是一個最常見的情況。

        另外一種,如果只是參與開源,那門檻其實就沒有那么高。只要是自身也需要這個領域的東西,無論是使用還是貢獻其實都是參與的一種方式。

        Q7:企業開源項目兩三年后便不再維護的原因,一般都有哪些?

        沒有找到商業化路徑肯定是原因之一,沒有利益驅動會導致后續不再投入成本進行維護。

        第二種常見的現象是國內互聯網公司的一個特性。很多公司的員工從一個職級晉升到另一個職級時,開源項目會是一個評估指標,所以很多工程師會利用工作時間和業余時間來完成這個指標。但隨著兩三年后的晉升成功,到了下一個級別的情況就不一樣了。國內很少有高職級的純工程師,基本上華為 20?級以上、阿里 P8 以上的時候,很難會有沉下心來寫代碼的工程師。

        到了這種級別就需要分出一部分精力參與項目合作、市場宣傳、管理等等,而開源項目的發展必然就會受到影響,甚至死掉。

        但其實很多所謂的“KPI 開源項目”都是好項目,也有很多人用,也能解決很多實際的問題。但問題就是缺乏延續性,給大家一種感覺就是國內沒有“開源大項目”。沒有歷史悠久、在領域內耕耘多年、特別資深的項目,國內這樣的項目確實是比較少的。

        Q8:您認為基金會的出現和介入,對這種情況是否能有所改善?

        這個和基金會的運作模式有關系,也就是基金會模型的問題,比較典型的就是 CNCF 和 Apache 之間的區別。

        如果一個項目捐獻到 Apache,如果社區沒有建立好,初始的人離開項目還是很容易死掉的。CNCF 也類似,會要求 3-4 家公司成為項目的主要構建者,如果少了一家公司可能不會對項目造成太大的影響,如果再少一家公司,情況可能就不同了。

        基金會只是一種組織形式,可以讓大家放掉很多顧慮。不會出現一家公司影響項目生死的情況,但項目的具體發展,即使是在 Apache 或者 CNCF 這類基金會中也有很多不那么成功的項目,包括我自己在 CNCF 中有一個參與了的項目,就做的很不成功。雖然那個項目做了鋪天蓋地的廣告宣傳、有名廠站臺,但項目本身不是非常被市場需要,并沒有預期中那么有用。

        包括像我們這種最早的項目參與者,認為這個東西好像挺有用的,可以解決很多的問題,但隨著深入,大家都覺得這個產品似乎并沒有那么好,事實上的效果也沒有達到預期。

        所以項目會起到決定性的因素,如果項目不好,哪怕是最頂尖的工程師來操刀、加入最頂尖的基金會,該做不起來還是做不起來。

        Q9:您覺得對于開源項目有沒有一些評判標準?

        最關鍵的就是項目的主人或核心貢獻者,他們最清楚項目的價值與優劣。

        往往我們在評價別人的開源項目時,會有很多空子可以鉆。比如說 Star、Fork、Watch、Contributer、提交頻率、issue 解決時間等等,這些都是有空子可鉆的。尤其是對開發者來說,各種接口都擺在那兒,找到規律之后甚至都不要人來具體執行。

        所以評價項目是不是真的有價值的重點,是有沒有那么多人或者廠商,真的基于自己的需求在不停的和項目之間進行溝通、相互提高。如果能在項目中看到這種情況,那么這個社區可能就是成功的。哪怕有很強的商業背景、很強的 KPI 背景,只要用戶認可,認為這是一個好項目,貢獻者也認為這個項目符合我解決特定問題的思路,我們就會把這個事情干好。

        我們舉個最簡單的例子,比如一個知名廠商開源的系統可以在一夜之間吸引到 1000 個工程師,吸引到 1000 個 contributer ,但另一個項目可能只有兩三百位貢獻者,不過都是真正有需求的用戶,這兩個項目的社區活躍性、體系化和延續性,都有很大的差異。后者實際上要強大的多。

        不同的項目貢獻者的數量肯定也是不一樣的,如果是一個全套的 IT 系統,那么覆蓋的人群就會非常廣,而另一個項目可能只是其中某一個非常具體化、細節化的需求,覆蓋的人群就會相對少很多。所以不能單純從數量來作比較,還要考慮一個市場占比的問題。

        Q10:SkyWalking 作為一個頂級的開源項目,成功的關鍵因素是什么?有哪些環節您認為做的比較好?

        最重要的一點是大家真的需要這樣的一個產品。SkyWalking 沒有專職的 Marketing 同事,相對其他項目在宣傳、包裝之類的方面做得非常少。

        我們還是希望好好的做技術,和研發人員打成一片。只要真的愿意來貢獻,我們就可以深入探討如何將這個事情做好。

        下一步的計劃比較清晰,要涵蓋監控領域絕大多數的場景。

        最早的階段 SkyWalking 只做追蹤這一塊的業務,后來增加了拓撲圖分析、Metrics計算、API 監控、Service Mesh、日志監控等等。我們會推出更全面的解決方案,也是因為看到一些貢獻者有這樣明顯的傾向。

        當初最難的問題我們解決了,現在大家希望的是將工具都能往這個上面來靠,將一些相對陳舊的東西遷移到最新的產品當中,保證平臺的唯一性。

        從項目本身來看,我們在 Agent 和 Mesh 做的最好,最核心的重點肯定會在這個方向,但從社區來看,是有這樣的一個趨勢。

        Q11:國內外的開源社區,在運營模式和發展方向上是否存在一些區別?

        主要的區別有兩點。

        第一點是參與者的專業性。國外有很多專業的“開源玩家”,在他們的職業生涯中可能碰到過 2、3 個成功的頂級開源社區或者開源項目,在做一個新的開源社區時會更加得心應手,不會走彎路。

        第二點是團隊作戰,這在國內是最難的一件事情。我們的開源項目沒有跨實體的集團做的,都是一兩個人或者一家公司,在對抗國外可能是五家十家全球頂級企業開發的項目,在對抗一個行業。

        國外很多行業都有一種私下的“君子協定”,他們會在同一個航道中走,而如果想跳出這個航道或者做一個平行航道,那就會不在同一個水位線上,很容易被對方淹沒。

        Q12:有哪些技術領域,國內可以通過開源來占據一些地位?

        我們還是舉 SkyWalking 的例子。在最開始做這個項目的時候,絕大多數人對 API 都不太了解,但國外做的其實是非常強的。我們要考慮的幾個點是自己能不能走得出去。

        全球化社交對中國來說是一個硬傷,這并不單純是語言的問題,更多還是一個大的生活習慣和文化環境導致的。我們國家幅員遼闊,在大家的概念中出國永遠都是一件“大事”,包括我之前所在的公司,出國參加一個會議,審批都要比國外多好幾級。

        但有些時候,出國甚至比國內出差在地理距離上還要近,比如去日韓、東南亞之類的,并且出國也很方便,但我國企業在這些地方發展的還是很有限。除了一些出海產品走出去了,但縮小到技術領域來看就更少了。

        比如在東南亞和印尼,當地的技術活動是很多的,但中國沒有機會去互相溝通、交流、推廣開源解決方案等。我們可能需要先把這個壁壘打破,技術反而不是第一個致命的問題。

        現在的問題是我們有好技術,但推不出去,是被迫在國內搞。而大家又會因為你的項目只在國內活躍,大家就會擔憂你的盤面會不會太小、不被國外企業廠商接受。

        現在行業內有一個共識,就是不能只在國內市場發展。短期可以,但可能不會做的太長久。

        Q13:解決國內開源問題,最重要的一步是什么?

        我的想法是“一上一下”。

        大家都在討論開發者 35 歲或者 40 歲會是一道鴻溝,我覺得這在短期內確實很難避免,畢竟這和國內很多企業實際的運營情況相關?!吧稀本褪侵?35 歲以上、40 歲以下的工程師能不能有更多的人留下來,企業給他們更大的空間去寫代碼?

        我有一個感受,在國內大家可能覺得我是一個資深的工程師,但每次出國參加活動我都是最年輕的。國外有些工程師可能代碼已經寫了 40 年,頭發都白了。之所以堅持下來,也許他掙得足夠多,也許他只是單純的喜歡,但那個環境給了他這樣的一個機會。

        我們在日常的項目運營中,看到很多年輕工程師有精力、有一腔熱血,但做事情很容易走錯方向,因為行業經驗太少了,是按照以往的經驗來干活,不知道前面可能有一些什么樣的坑在等著。

        但假如有這種 40 歲以上的開發者能幫他們指出問題,就可以少走彎路。哪怕他們的代碼量不多,但代碼質量相對來說一定會是很好的,并且更能沉得住氣來解決問題,更能接受長線的運營項目,就像中國的第 N 個五年計劃一樣。我覺得這是對高年齡程序員的一個定位。

        我非常愿意看到有一天,當我們在 coding 的時候既有年輕人,也有資深年長的程序員,

        “一下”,指的是學生群體?,F在很多老師已經做了很多工作,所以這部分的發展比上面的發展要好很多。我經常能看到很多新鮮血液,比如 SkyWalking 的群里就有高中生。雖然我們的項目是個工業項目,不知道對他來說會怎樣使用,但能吸引年輕人的重視,是一件很好的事情。

        現在大家都很重視年輕人,無論是媒體、政府還是廠商,都非常重視對于學校的布道,只要我們把該講的講對了,別布錯了方向,那我覺得這部分之后的發展,問題不大。

        Q14:您覺得給年輕群體推廣開源文化,有哪些需要注意的點?

        我覺得要讓我們的學生更張揚一些。我喜歡現在的一些 90 后,能在文字的環境中表現出張揚的一面,但我希望他們能夠再張揚一些。

        你要相信你的觀點和觀念,真有經過討論和學習,確認別人的觀點更好或者更準確的情況下,再去放棄自己的觀點和觀念。但無論如何,都要能站出來,持續的表達自己的觀念?,F在能看到很多大學生觀念很強,但對于維護自身觀念的堅持不夠。

        第二點就是需要給學生更多上臺的機會。我國的教育常年造成的一個現象是沒有人愿意站在臺上講,一上臺就會跑掉一半的人。做卷子可以、寫文章寫郵件文字采訪可以,但如果要上臺講個 10 分鐘,那分享的東西可能就亂套了。

        國外的學生因為教育的原因,在個性方面相對會更加張揚,更能在公開場合堅持表達自己的觀點。SkyWalking 有一個 90 后的貢獻者,他就是那種知道自己經驗不足但會堅持表達的人,這樣才可能做出一些之前想不到的事情。比如他把 SkyWalking 集成到了 IDE 中,在源代碼中就可以看到指標,這個思路就很特別。

        這就是年輕人的獨特價值,是 40 歲的開發者提供不了的。但 40 歲的開發者可以保障你的奇思妙想得到很好的、快速的實現,避免走偏路。

        只有“上下”都發展起來,整個開源的隊伍才能建立起來?,F在開源領域大部分的開發者工作年限可能也就是 5、6 年,雖然也能在一些項目中看到一些 40+ 的開發者,但他們大部分都是沒有開源經驗的。國內這方面的發展可能確實還需要再熬一熬、等一等。

        開放原子開源基金會在開源領域開了一個先例,我們雖然不能指望有什么快速的產出,但他給了我們一種可能性、一個靶子。給了我們一個去做比較、去發現問題的方式。

        基金會中第一批開源的項目,我們不能下定義它們是否會成功,但無論結果如何,在發展的過程中會有很多教育和借鑒的意義,這可能是最有價值的地方。


        segmentfault 思否

        查看原文

        贊 8 收藏 0 評論 0

        姜姜iia 贊了文章 · 3月25日

        華為將發布六大重磅創新產品和技術,投入超 2 億美元建設開發者生態

        3月25日,華為開發者大會 2021(Cloud)(簡稱HDC.Cloud 2021)媒體預溝通會在京召開,SegmentFault 思否作為開發者領域的垂直媒體受邀參加了此次活動。

        會議中,華為技術有限公司高級副總裁、云與計算 BG 副總裁張順茂表示,華為將在 HDC.Cloud 2021 重磅發布六大創新技術和產品,所涉及的領域包括云原生、人工智能、數據庫、多方可信計算、操作系統和智能開發工具。此外,華為計劃在 2021 年投入超過 2 億美元,用于開發者的生態建設。

        重磅發布六大創新技術和產品

        華為技術有限公司高級副總裁、云與計算BG副總裁張順茂
        華為技術有限公司高級副總裁、云與計算BG副總裁張順茂

        HDC.Cloud 2021 將于 2021年4月24日-26日在深圳大學城舉行,本屆大會以“每一個開發者都了不起”為主題。作為華為ICT基礎設施業務面向全球開發者的年度盛會,HDC.Cloud 2021將匯聚業界大咖、華為科學家、頂級技術專家、天才少年和眾多開發者,共同探討和分享最新的ICT技術在行業的深度創新和應用。

        張順茂表示:“華為希望通過HDC.Cloud 2021,為全球開發者搭建一個學習、交流、展示、提升的平臺,匯聚全球頂尖的開發者和合作伙伴,共同探討最新科技和應用實踐,推動ICT產業的高速發展?!?/p>

        在本屆HDC.Cloud 2021大會,將有諸多亮點和創新:

        • 六大創新技術和產品重磅發布:在HDC.Cloud 2021的主題演講環節,華為將重磅發布六大創新技術和產品,包括:華為云CCE云容器引擎、人工智能系列大模型、華為云GaussDB云服務、華為云可信智能計算服務(TICS)、openEuler操作系統和華為云DevCloud軟件開發服務。
        • 頂級的嘉賓陣容:將有多位行業頂級大咖、業內知名專家、華為科學家出席HDC.Cloud 2021;數十位華為神秘“掃地僧”、天才少年也將集體亮相;來自開源社區的開源領袖將會聯袂為開發者奉上一場技術和思想的饕餮盛宴。此外,華為常務董事、云與計算BG總裁、消費者業務CEO余承東也將亮相本次大會并發表主題演講。
        • 最前沿的技術和最佳行業實踐:本次大會將設置200+場專題論壇,數百位來自華為公司以及合作伙伴的頂級專家將圍繞云計算、鯤鵬、昇騰、人工智能、大數據、數據庫、操作系統等各個領域的技術熱點、最佳實踐以及發展趨勢等進行深入解讀和分享。
        • 近距離的交流機會:大會期間將舉辦多場華為“掃地僧”見面會、技術圓桌等活動。數十位身懷絕技的華為神秘“掃地僧”、天才少年、行業大師將和開發者一起,在輕松的氛圍下進行面對面的思想交流和碰撞。
        • 豐富的動手實踐和競技比拼:大會現場還將設置100+ Codelabs,以及開發者大賽等現場競技活動,讓開發者可以動手實踐,充分參與,一展身手。

        在大會形式方面,本屆HDC.Cloud 2021有著三個特色:

        • 采用線下活動和線上直播相結合的方式,屆時將有18個線上直播頻道面向全球進行直播,為開發者打造線上線下全場景參會體驗。
        • 采用全球區域聯動的模式,全球70+分會場與主會場同時聯動。
        • 將主會場設置在深圳大學城內,并與全國各大高校聯辦,將有20+知名高校設立HDC.Cloud 2021分會場。

        張順茂表示,HDC.Cloud 2021的三個特色不僅使活動的內容、形式更加豐富,參與者更加廣泛,也旨在更好地傳遞“開放、共享、協作”的精神。

        2021年將投入超過2億美元用于生態建設

        數字技術的創新與重構正在加速,智能世界已觸手可及。

        張順茂表示:“在智能世界,開發者被賦予了更加重要的責任和意義,開發者不僅是ICT產業生態的靈魂,更是企業創新的引擎和改變世界的力量。華為云將華為30多年在ICT領域的技術積累和產品解決方案開放給客戶,提供穩定可靠、安全可信、可持續發展的云服務,致力于成為最佳應用構建平臺,賦能應用、使能數據、做智能世界的‘黑土地’。華為云全力支持開發者在‘黑土地’上構建面向千行百業的應用,助力各行各業數字化轉型?!?/p>

        華為十分重視開發者生態的建設,2019年,華為發布了沃土計劃2.0,宣布將在未來五年內投資15億美元用于生態建設,全球發展500萬開發者。2020年,華為在生態建設方面投入2億美元,覆蓋高校、開發人員、合作伙伴及初創企業。

        在高校人才培養方面,與教育部聯合啟動建設“智能基座” 產教融合協同育人基地。在開發人員方面,通過提供開發套件、開發者社區、培訓課程及技術沙龍賦能等,打造開放平臺使能開發者方便、快捷地開發應用和提升開發技能。在合作伙伴方面,華為云匯聚了19,000多家伙伴,基于鯤鵬和昇騰累計完成認證伙伴的數千個解決方案。在初創企業方面,已與幾百家初創企業建立聯系,并為企業提供免費云資源扶持或技術扶持等。

        2021年,華為將繼續加大投入,生態建設預算超過2億美元。

        segmentfault 思否

        查看原文

        贊 7 收藏 0 評論 0

        姜姜iia 贊了文章 · 3月25日

        專訪中科院副總工程師武延軍:“參與開源人數變多是好事,但要小心「開源踩踏事件」”

        不久前,「一源初始,開放共創」開放原子開源基金會 2020 年度峰會于北京圓滿落幕。峰會由開放原子開源基金會主辦,阿里巴巴、百度、華為、趣鏈科技、SegmentFault 思否、招商銀行等開源項目代表單位及開源社區協辦,亦得到了全體理事單位的大力支持。

        本次峰會圍繞開源運營治理、開源教育與公益等方向開展了主題論壇分享。會議中,來自中國科學院軟件研究所的副總工程師武延軍以《開源操作系統和開源軟件供應鏈的教學實踐》為主題進行了分享。在大會上,武延軍提到了開源軟件供應鏈面臨的三個主要問題:產業價值不高、社區貢獻不足、生態受制于人。

        為了進一步了解開源軟件供應鏈的定位與目標,以及有哪些舉措可以解決我國開源軟件領域的困境等問題,SegmentFault 思否的@阿遂對武延軍老師進行了專訪。

        專訪 - 武延軍
        武延軍老師(左)與思否@阿遂(右)

        Q1:開源領域有很多角色分工,比如宣講者、推動者等。您認為您在開源領域中的角色是什么?

        我覺得我更像是教育工作者??蒲性核旧砭哂信囵B學生的職能,目前全所有 500 多名學生,每年會新吸納 100 多人,我們有責任把這些人往開源軟件的大模式上去引領。

        之前大部分人對開源還沒有太多概念,包括像開源社區的運作模式、開源軟件的開發模式、開源規則背后的理念,可能都沒有太多理解。我們作為教育者把這些都教給學生后,對他們后續從事科研工作,是有很大幫助的。

        對此我們也進行過一些實踐,比如我們在實驗室內部長期維護一份新生新員工指導手冊,我們會推薦學生去看一些開源入門項目,比如 GitHub上 有個「first contribution」項目,可以教大家如何第一次為開源做貢獻。

        Q2:是否會涉及幫助學生分析、挑選開源項目的內容?有沒有一些基本標準?

        中科院的研究生基本第一年都在集中上課,第二年開始參與科研,第三年要開始找工作,算下來只有一年多的時間在專心做科研。從學生培養角度來說,我們有義務盡早告訴他們哪些開源項目是高質量的、有價值的、參與其中對他們的成長是有益的。

        還有一個重要維度,是哪些開源項目對產業有幫助,甚至更大意義上說是哪些項目對解決國家面臨的“卡脖子”問題是有幫助的。兩者如果能結合在一起是最好的一種方式。

        這也是軟件所發起開源軟件供應鏈點亮計劃的初衷。我們希望從供應鏈的角度去分析哪些項目有價值,或者處于有風險的狀態。

        一個開源項目可能被很多工業級產品使用,但是有可能我們國家現在還沒有人去參與,也沒有人能掌握。如果這個開源項目出現了缺陷漏洞,或者后續版本不開源了,在這種情況下我們應該有人去把它承擔起來,而不是一直“拿來主義”。

        所以我們要把學生盡可能的引導到有價值且對產業有貢獻的開源軟件上,讓他們既能完成自己的學業,學到有價值的東西,同時也能解決社會和國家的問題。

        Q3:您認為學生群體在開源生態中是一個什么角色?

        相對來講,學生沒有功利性和目的性,自我成長的意愿比較強,所以他們在社區里的活躍度會比較高。雖然不一定是貢獻最多的,但在一定程度上確實可以推動社區的活躍度。

        第二點來說,學生類似于接班人的角色。新生力量對開源的參與融入,意味著很有可能他將來走向工作崗位后會優先使用開源軟件,使用開源社區中的開發模式,將開源文化帶到他的工作當中,最后潛移默化的變成開源推廣者。

        培養學生參與開源的過程像是制作火種。學生開源群體就像火種一樣,先是慢慢的被點燃,接著到更廣闊的空間中去發光放熱。

        Q4:您認為開源的核心價值是什么?

        首先我認為開源是人類社會共享互助精神在數字時代的體現,并在互聯網的催化下將這種精神發揚光大。

        第二點我認為開源是一種非常棒的人類文明薪火相傳的模式。一個成果如果壟斷在一個人或者一個團隊手中,成果的傳承會有非常多的不確定性,但開源可以將成果一直延續下去,實現累進疊加式的發展。

        Q5:您認為國內的開源行業,現在發展到了哪個階段?

        近幾年,特別是從去年到今年這一時期,國內的開源發展非常迅速。以前可能是分散的“點”,現在則形成了“面”。

        具體而言,以前我們零零星星能聽到一些國內發起的開源項目,個別開源老前輩也有一定的國際影響力,但并沒有形成一種大的社區和生態。

        從今年開始,像 openEuler 這樣的開源社區在華為的大力推動下,變成了一個有目標、有組織、成體系的社區。它以操作系統為主線,把上下游生態全部連接起來,很短的時間就吸引到 2000 人以上的活躍開發者,這是以前從來沒有過的。

        還有像產學研協作,在以往的開源社區是很難出現的。但今年開源行業一個很重要的特征,便是產學研合作在開源社區里出現了,這將大大縮短學術界與產業的距離。

        如果說以前我們叫游擊隊式的「開源 1.0」,今年開始可能真的到了正規軍式的「開源 2.0」階段,這是一個非常明顯的質的變化。

        Q6:您覺得推動開源發展的力量是什么?

        我覺得跟國際形勢變化有很大的關系。以前大家覺得“拿來主義”沒問題,能滿足商業訴求就可以。但貿易摩擦后,大家發現不能只考慮短期的商業利益,還要考慮業務的可持續性。像華為就是一個最明顯的轉變樣板。

        第二點我覺得可能是疫情的原因。大家在線上的時間變長,數字世界的一些文化自然而然會得到比較廣泛的傳播。

        很多應用領域的 IT 工程師以前可能知道開源這個詞,也接觸過Linux等開源產品,但對開源的力量并沒有直觀感受。今年「武漢 2020」開源項目的出現,讓大家一下就明白了——原來開源是通過充分的、自發的協作,讓大家一起以共同的信念,去完成一個普通個人無法完成的宏大目標。

        線上會議的普及對開源來說也是很好的推進。以前開源社區里的成員想聚到一起開會很難,但現在大家可以通過線上視頻會議的形式來討論、學習,讓更多的人通過線上會議的形式參與到開源當中。

        Q7:您覺得現在這種發展趨勢,對開源來說是一件好事嗎?

        肯定是好事,這種狀態如果能夠一直延續下去,可能未來幾年內我們就會進入到開源3.0階段。

        開源 3.0 是什么狀態?我現在個人預期是,以后在中文世界里中國人主導的主流開源項目會越來越多,然后會以這些開源項目為起點,在世界開源產業里占有一席之地。國內也可能會出現類似于 Red Hat、Snowflake 這類重量級的開源公司,并能在商業上取得成功。

        Q8:供應鏈是 2020 年的熱詞之一。開源軟件供應鏈相比其它領域有什么獨特性嗎?

        我覺得獨特性體現在兩個方面:“軟件”和“開源”。

        供應鏈這個概念在各行各業都有,特別是傳統行業供應鏈已經非常成熟。但對于軟件行業,有它本身的特點:迭代周期短、供應全球化、開發線上化、復制成本低、倉儲集中化、用戶多樣化等等。

        其中倉儲集中化是一個比較有意思的特點。在沒有 GitHub 的時候,每個站點可能都會存儲自己的開源項目,但現在開源項目有 90% 以上應該都集中存儲在 GitHub 中。這跟傳統供應鏈完全不一樣,傳統供應鏈在每個國家、每個港口城市都有自己的倉儲系統,但開源軟件領域將這些都存放在同一個平臺上。這是一個特點,但也可能是一種風險。

        Q9:您進入操作系統領域已經有 20 年了,您認為開源對操作系統的發展有哪些促進或者影響?

        開源對操作系統的促進作用是非常大的?;仡?Linux 的發展之路,可以發現它也是在開源運動之后才得到迅速的發展。

        首先從開源操作系統的組成來看,一個主流開源操作系統包含的開源軟件包大概有3萬多個,是匯集很多人一起才能完成的一件事情。做一個商用操作系統是一件很嚴肅的事情,這3萬多個包都需要保證得到很好的維護,才能進行大規模商用。例如谷歌的安卓系統,軟件包和第三方庫都是經過長期篩選之后,才變成一個成熟的商用操作系統。

        第二點是從操作系統的推廣和使用上來講,開源操作系統在現階段用戶的接受度會更好一些。相對來說,開源會比較透明和開放,大家不需要過于擔心系統的可控性以及數據的安全問題。所以我覺得開源操作系統會是社會未來最認可的一種模式。

        第三點是操作系統的最終屬性。從產業角度來看,操作系統已經過了直接盈利的階段,它可能逐漸會演化為一種社會公共基礎品,會成為一種基礎設施。

        想基于基礎設施本身開展商業行為是很難的,肯定會依托于類似服務訂閱的方式。在這種方式下,大家為什么選擇你?可能就是要靠廣泛的社區認可,靠對開源的貢獻程度。

        你在開源操作系統上做的貢獻越多,大家可能就越傾向于找你來提供服務。未來操作系統一旦變成公共品,那可能圍繞操作系統的商業必須要完全的去擁抱開源,通過對開源的貢獻證明自己的實力。

        Q10:OpenHarmony 是為這種操作系統提供一個生態平臺嗎?您覺得它對于整個生態有哪些推進作用?或者說它的價值點是什么?

        我覺得 OpenHarmony 的核心定位也應該是根操作系統社區,跟 openEuler 一樣,這樣它才能價值高、意義大。

        根操作系統社區作為商業版操作系統社區的基礎,可以讓商業版節省大量的人力物力,將更多的精力放在滿足客戶需求上,盡可能的去滿足國內現階段的一些共性需求,然后逐漸走向國際。

        更高一層的意義在于,在當今世界格局下,中國對于操作系統的需求是非常強烈且場景是豐富的、市場是巨大的。我們有理由也應該有能力抓住這個機遇,發展一個屬于我們的根社區,吸納更多的軟件包、吸引更多的開源人士、覆蓋更多產業需求。

        所以說 OpenHarmony 的意義是巨大的,期待它以后也能起到類似于高速公路、水電站和特高壓電網這樣基礎設施的作用。


        開源正在改變世界,開源軟件、開源硬件、開源內容在各行各業有著越來越重要的地位,開源的模式在改變著各個行業的生產方式并大大提高了生產效率,但開源的發展仍需各界人士的積極參與。

        開放原子開源基金會的使命是“一切為了開發者,一切為了全世界”。隨著發展,開放原子開源基金會已經展現出了能力與價值。以「開源」為紐帶的開放原子開源基金會號召各界人士一起來推動中國的開源事業,基金會愿意持續構建一個開源的生態,幫助大家共建、共治、共享。

        segmentfault 思否

        查看原文

        贊 10 收藏 0 評論 0

        姜姜iia 贊了文章 · 3月23日

        SeaTable 開發者版可以運行 Python 了,開發自定義數據處理流程更方便

        又填新功能了!從 1.8.0 版開始,SeaTable 開發者版加入了運行 Python 的能力(具體配置請查看使用手冊),我們可以更方便地快速開發自定義數據處理流程了,讓開發小應用變得更簡單更有想象力。

        SeaTable 是一個支持圖片、文件、長文本等豐富數據類型的新型協同表格和低代碼平臺。它的 API 提供了對記錄的 CRUD 操作,也就是記錄的創建、讀取、更新、刪除操作等。這樣,我們就可以把它當做一個輕量級的數據庫來使用。

        舉例來說,平時我們用 Python 腳本來寫一些小應用的時候,如何保存、展現和共享數據是一個很麻煩的地方,而如果用 SeaTable 這個協同表格和低代碼平臺,我們就能有效地簡化小應用的開發。它提供了 Python 腳本的運行環境,我們可以把腳本和數據放在一個地方管理,而不用再單獨找一個服務器。

        它為我們提供的便利可以總結為以下幾點:

        • 可以在表格中存儲多個腳本文件, 一鍵點擊就可以執行運行。
        • 可以調度腳本每日運行,不需要自己再寫一個 cron 任務。
        • 可以在表格中增加按鈕來調用腳本,讓我們的表格更像一個應用。

        下面就來進一步了解。

        點擊腳本一鍵運行:

        1.png

        在表格中增加按鈕來調用腳本:

        2.png

        Python 腳本運行器的實現原理

        SeaTable 中的腳本是如何被執行的呢?下面我們來了解一下。

        架構

        SeaTable 的 Python 腳本運行包含三個部分:SeaTable、SeaTable FAAS Scheduler、Python Runner,它們的功能與關系如下:

        • SeaTable:新建、保存、修改腳本,發起運行請求等。
        • SeaTable FAAS Scheduler:調度器,主要負責調度 SeaTable 運行腳本請求、安排定時任務和保存、統計腳本運行結果等。相當于一個 master 節點。
        • Python Runner:真正運行腳本,相當于一個 worker 節點。Python Runner 在收到一個腳本運行請求后,會下載腳本內容并啟動一個 docker 容器來運行這個腳本。腳本運行結束后,容器自動銷毀,以此保證安全性。

        Python Runner 和 SeaTable FAAS Scheduler 可以部署到同一機器,結構圖如下:

        3.png

        如果你需要運行大量的 Python 腳本,那么可以多部署幾臺 Python Runner,在它們之前安排一個 load balance 組件即可,結構圖如下:

        4.png

        上下文環境

        SeaTable 腳本的其中一個特色之處便是提供了上下文環境,在腳本中可以知道用戶當前焦點在哪個表格的哪一行。這樣我們就能針對這一行來執行一些操作。下面看一個簡單的例子,就是用戶點擊按鈕的時候,把當前行的內容發送到企業微信的群組中。如下所示:

        import requests
        from seatable_api import context
        
        # 該腳本展示利用企業微信群組機器人,把表格中的一行數據發送到企業微信群組中
        
        # 建立群機器人之后自動生成的webhook地址,可以通過post請求該地址進行消息發送
        WEBHOOK_URL = "XXXXX";  
        
        # 通過 context 來獲取當前行的內容,格式化后發到企業微信
        current_row = context.current_row 
        msg = format_msg("收到一筆費用", current_row)
        requests.post(url=WEBHOOK_URL, msg, headers={ "Content-Type": "application/json" } )

        總結

        隨著運行 Python 能力的加入,SeaTable 開發者版的 Python API 變得更加完善,讓快速開發自定義數據處理流程變得更方便了,對于我們這些開發者來說,真的就是一款神器。而且它可以免費下載,私有部署,沒有行數、存儲量和 API 調用的限制。它還有美觀易用的表格界面,可以多人實時協同。還具有強大的表單和數據收集表功能。它非常適合于作為企業內部的數據協作中心,實現數據的集中管理、可視化和自動化。

        查看原文

        贊 10 收藏 0 評論 2

        姜姜iia 贊了文章 · 3月16日

        到 2028 年 DDoS 防護軟件市場需求將不斷增長

        到 2028 年 DDoS 防護軟件市場需求將不斷增長

        分布式拒絕服務(DDoS)攻擊是一種惡意攻擊,它通過使網站流量超出服務器的承受能力而擾亂正常的網絡流量。這種網絡攻擊的主要目的是使網站無法運行。

        近年來,這種類型的攻擊越來越多,刺激了對最佳 DDoS 保護軟件解決方案的需求。許多計劃外的數據中心中斷是由于 DDoS 攻擊造成的。分布式拒絕服務的威脅在于易于使用的工具以及通過勒索獲取利潤的可能性。

        這些攻擊直接針對企業,導致巨大的財務和個人損失,因此擁有強大的 DDoS 保護軟件解決方案至關重要。

        根據市場研究公司的報告,到2020-2028年,DDoS 防護軟件市場預計將達到超過 14% 的復合年增長率。

        重要統計數據說明對DDoS軟件解決方案的需求不斷增長

        由于多向量分布式拒絕服務攻擊呈指數級增長,以及現今分布式拒絕服務可以輕松獲得,分布式拒絕服務軟件市場的需求正在上升。

        這些統計數據顯示,致命的 DDoS 攻擊持續增長,并且迫切需要一個強大的 DDoS 保護池。

        • 在 2014 年至 2017 年之間,DDoS 攻擊明顯增加,增長了 2.5 倍。
        • 到 2020 年,DDoS 攻擊的總數達到 1700 萬次,一次此類攻擊的成本在每小時 2 萬至 4 萬美元之間。
        • 此類攻擊的平均規模在 2018 年第二季度達到了驚人的 26.37 GBps,增長了 967%,在 2019 年第一季度達到了100Gbps。
        • 迄今為止最大的攻擊是 2018 年 2 月的 GitHub,攻擊速度為 1.3TBps。
        • 到 2020 年第三季度,中國成為攻擊目標最多的國家,攻擊率為 72.83%。
        • 在 2019 年第四季度和 2020 年第一季度之間,DDoS 活動增加了 542%

        預計全球 DDoS 防護和緩解市場規模將將增長 14% ,從 2019 年的 24 億美元增加到 2028 年的 60 億美元。

        推動 DDoS 防護和緩解市場增長的因素

        近年來,網絡攻擊事件有所增加,主要原因是轉向數字化、連接設備的數量增加以及處理器的計算能力提高?,F在迫切需要開發軟件解決方案來減輕這些威脅。

        在 2020 年至 2028 年期間,推動 DDoS 保護和緩解市場增長的主要因素包括物聯網(IoT)和相關設備滲透率的上升,以及中小型企業的需求。

        組織意識到這些攻擊的影響,并希望提前制定災難恢復計劃。

        DDoS 保護的工作原理

        許多企業都面臨著這樣一個問題: 如何保護我的網站免受 DDoS 攻擊?今天,有許多供應商提供軟件解決方案來防范這些攻擊。

        它使用算法和先進的軟件來管理網站的流量。它拒絕訪問非法的流量,讓合法的流量通過。

        DDoS 防御解決方案

        DDoS 保護程序包括購買和管理可以篩選接收流量并抵御攻擊的設備。這些是基于云的安全服務和網絡設備,可以緩解傳入的威脅。

        在2020-2028年期間,硬件解決方案和服務預計將增長,以確定網絡連接,并在設備或電源故障時減少停機時間。

        DDoS 部署模式

        DDoS 保護和緩解市場在部署時分為云、在線和混合?;旌夏P皖A計在預測期內增長最大。它允許組織將他們的關鍵數據保存在自己的場所內,并將非關鍵數據轉移到云中。

        近年來,許多 DDoS 攻擊都沒有被現場和基于云的解決方案檢測到。組織無法檢測和阻止它們; 因此,他們正在轉向混合部署模型。

        提供DDoS檢測和緩解解決方案的主要參與者

        隨著 DDoS 攻擊的增加,越來越多的玩家提供軟件解決方案來檢測和減輕攻擊。

        市場上的頂級企業包括:

        • NETSCOUT
        • Indusface Managed DDoS Mitigation
        • Akamai Technologies
        • Cloudflare
        • Link11
        • 華為技術
        • Verisign
        • Nexusguard

        DDoS 防護和緩解市場中最大的市場份額

        根據市場研究公司的報告,在未來一段時間內,北美將在 DDoS 防護和緩解市場占有最大的市場份額。擁有巨大市場規模的主要驅動因素是,它是 DDoS 保護和緩解解決方案的早期采用者之一,而且在這一領域沒有解決方案提供商。北美的許多企業正在實施 DDoS 保護和緩解解決方案,以阻止這些威脅的萌芽。

        由于發展中國家的快速經濟增長和穩定以及更好的監管改革,亞太地區的市場也將有所增長。

        近年來,隨著網絡DDoS攻擊的威脅和影響不斷變化,DDoS 攻擊變得越來越復雜。盡管容量攻擊完全相同,但針對特定應用程序的攻擊和針對性的高強度攻擊的數量有所增加。

        DDoS 防護軟件解決方案旨在消除這些攻擊的停機時間并增強網站可用性,以保持企業的生產力和效率。面向小型、中型和大型企業的基于前提的、云和混合軟件解決方案是未來的發展方向。

        segmentfault 公眾號

        查看原文

        贊 2 收藏 1 評論 0

        姜姜iia 贊了文章 · 3月3日

        iPhone 13 將配 120Hz 高刷屏,折疊屏手機項目“尚未啟動”

        iPhone 13 將配 120Hz 高刷屏,折疊屏手機項目“尚未啟動”

        著名分析師郭明錤在今天發布的一份研究報告中對 iPhone 13 進行了預測。他表示,iPhone 13 型號屏幕將具有較小的缺口,兩款 Pro 型號將配備低功率 LTPO 顯示技術,以實現 120Hz 的刷新率。

        郭明錤表示,iPhone 13 陣容將包括與 iPhone 12 陣容相同的四種型號,全部配備 Lightning 連接器和高通的 Snapdragon X60 調制解調器。

        iPhone 13 將有更大電池,相機功能升級

        正如之前的傳言,郭明錤提到,iPhone 12 Pro Max 的傳感器移位圖像穩定功能將擴展到整個 iPhone 13 系列。他還表示,希望 iPhone 13 Pro 機型具有升級的 Ultra Wide 相機鏡頭,與 iPhone 12 機型的 ?/ 2.4 相比,它具有更寬的 ?/ 1.8 光圈和自動對焦功能。

        郭明錤此前曾預測,到 2021 年,至少會有一款高端 iPhone 機型具有無端口設計,但他今天的研究報告稱,隨著 Lightning 連接器的普及,今年 iPhone 不會推出無端口設計。

        郭明錤再報告中寫道:“如果 iPhone 將來放棄 Lightning,它可能會直接采用支持 MagSafe 的無端口設計,而不是使用 USB-C 端口?!彼€指出,USB-C 的防水性不如 Lightning。但 MagSafe 生態系統還不夠成熟,因此 iPhone 在可預見的將來將繼續使用 Lightning 端口。

        郭明錤認為,與 iPhone 12 機型相比,iPhone 13 的四種機型均具有更大的電池容量,這歸功于節省空間的設計選擇,例如將 SIM 卡插槽與邏輯板集成在一起以及減少某些 Face ID 組件的厚度。他說,更大的電池將使所有 iPhone 13 型號手機重量稍稍增加。

        此外,郭明錤還提到,LiDAR 掃描儀將仍然僅限于 iPhone 13 Pro 型號。

        iPhone SE 也要出 Plus 版了?

        image.png

        除了 iPhone 13,蘋果還將推出新款 iPhone SE。不過,郭明錤預測,下一代 iPhone SE 到 2022 年上半年才會出現。

        此前曾有傳言稱,第三代 iPhone SE 可能會在 2021 年上半年出現,但后來被證實為謠言。據悉,下一代 iPhone SE 將推出 Plus 版本,還會帶有 Touch ID。

        郭明錤表示,新的 iPhone SE 將與現有型號非常相似,最大的變化是對 5G 的支持和處理器的升級。他說:“蘋果將發布的 iPhone SE 在外觀設計和大多數規格上,與現有的 4.7 英寸 iPhone SE 相似,最大的變化是支持 5G 和處理器升級?!?/p>

        折疊屏項目還沒啟動

        至于蘋果的折疊屏手機,郭明錤預測將在 2023 年推出。他說,“折疊屏 iPhone 能否在 2023 年發布取決于蘋果今年能否解決‘關鍵技術’和批量生產問題?!?/p>

        據了解,折疊屏 iPhone 項目仍未正式啟動,還處于研究階段。有報道指出,蘋果一直在與三星和 LG 合作開發可折疊 OLED 顯示器技術,另一份最近的報告稱,該顯示器的大小在 7.3-7.6 英寸之間,還支持 Apple Pencil。

        segmentfault 公眾號

        查看原文

        贊 1 收藏 0 評論 0

        姜姜iia 贊了文章 · 2月25日

        奇怪的知識——位掩碼

        108588108-64e3c400-7392-11eb-8275-ed7a7d4a3ebd.png

        在春節假期無聊刷手機的時候,偶然間看到了一篇關于“位掩碼”的文章,本身就是奇怪知識的它可以用來解決一些奇怪的問題,實在是非常有趣。

        位運算符

        在了解“位掩碼”之前,首先要學會位運算符。

        我們知道,在計算機中數據其實都是以二進制的形式所儲存的,而位運算符則可以對二進制數據進行操作。舉個簡單的例子,給定兩個二進制數據(其中 0b 是二進制數據的前綴):

        const A = 0b1010
        const B = 0b1111

        image.png

        1、按位非運算符 ~

        對每一位執行非(NOT)操作,也可以理解為取反碼。
        image.png

        2、按位與運算符 &

        對每一位執行與(AND)操作,只要對應位置均為 1 時,結果才為 1,否則為 0。
        image.png

        3、按位或運算符 |

        對每一位執行或(OR)操作,只要對應位置有一個 1 時,結果就為 1。
        image.png

        4、按位異或運算符 ^

        對每一位執行異或(XOR)操作,當對應位置有且只有一個 1 時,結果就為 1,否則為 0。
        image.png

        5、左移運算符 <<

        將數據向左移動一定的位(<32),右邊用 0 填充。
        image.png

        6、右移運算符 >>

        將數據向右移動一定的位(<32),遺棄被丟出的位。
        image.png


        在學習完了位運算符以后,肯定有人會說,道理都明白了,那么這些位運算符有什么用呢?應該在什么場合使用呢?平時的業務開發中也沒見過,是不是其實學了也沒什么用?

        對于這個問題,答案確實是“是的,這個知識其實沒什么用“。但是呢,秉承著探索的精神,我們也許可以用這個”沒什么用的知識“去解決一些已知的問題。當然,在后續的例子中,你可能會覺得我在小題大做。不過沒關系,學習本來就是枯燥的事情,能夠找到些有趣的方式去學習枯燥的知識,也是很快樂的。

        權限系統

        假設我們有一個權限系統,它通過 JSON 的方式記錄了某個用戶的權限開通情況(姑且假設權限集是 CURD):

        const permission = {
          create: false,
          update: false,
          read: true,
          delete: false,
        }

        如果我們把 false 寫成 0,true 寫成 1,那么這個 permisson 對象可以簡寫為 0b0010。

        const permission = {
          create: false,
          update: false,
          read: true,
          delete: false,
        }
        
        // 從左往右,依次為 create, update, read, delete 所對應的值
        const permissionBinary = 0b0010

        對于 JSON 對象的權限集,如果我們要查看或者修改該用戶的某些權限,只需要通過形如 permission.craete 的普通對象操作即可。那么如果對于二進制形式的權限集,我們又應該如何進行查看或者修改的操作呢?接下來我們就開始使用奇怪的知識——位掩碼來進行了。

        位掩碼

        首先進行名詞解釋,什么是”位掩碼“。

        位掩碼(BitMask),是”位(Bit)“和”掩碼(Mask)“的組合詞?!蔽弧爸复M制數據當中的二進制位,而”掩碼“指的是一串用于與目標數據進行按位操作的二進制數字。組合起來,就是”用一串二進制數字(掩碼)去操作另一串二進制數字“的意思。

        明白了位掩碼的作用以后,我們就可以通過它來對權限集二進制數進行操作了。

        1、查詢用戶是否擁有某個權限

        已知用戶權限集二進制數為 permissionBinary = 0b0010。如果我想知道該用戶是否存在 update 這個權限,可以先給定一個位掩碼 mask = 0b1。

        image.png

        由于 update 位于右數第三項,所以只需要把位掩碼向左移動兩位,剩余位置補0。最后和權限集二進制數進行按位與運算即可得到結果。
        image.png

        最后算出來的 result 為 0b0000,使用 Boolean() 函數處理之即可得到 false 的結果,也就是說該用戶的 update 權限為 false。

        // 從左往右,依次為 create, update, read, delete 所對應的值
        const permissionBinary = 0b0010
        
        // 由于 update 位于右數第三位,因此只需要讓掩碼向左移動2位即可
        const mask = 0b1 << 2
        
        const result = permissionBinary & mask
        
        Boolean(result) // false

        2、修改用戶的某個權限

        當我們明白了如何用位掩碼來查詢權限后,要修改對應的權限也就手到擒來了,無非就是換一種位運算。假設還是 update 權限,如果我想把它修改成 true,我們可以這么干:

        image.png

        只需要把按位與改為按位異或即可,代碼如下:

        // 從左往右,依次為 create, update, read, delete 所對應的值
        const permissionBinary = 0b0010
        
        // 由于 update 位于右數第三位,因此只需要讓掩碼向左移動2位即可
        const mask = 0b1 << 2
        
        const result = permissionBinary ^ mask
        
        parseInt(result).toString(2) // 0b0110

        經過上面的內容,相信你已經基本掌握了位掩碼的知識,同時你肯定還有很多問號,比如說這么復雜又不好閱讀的代碼,真的有意義嗎?

        臟數據記錄

        前文例子中的權限系統僅有區區4個數據的處理,位掩碼技術顯得復雜又小題大做。那么有沒有什么場景是真的適合使用位掩碼的呢?臟數據記錄就是其中一個。

        假設我們存在著一份原始數據,其值如下:

        let A = 'a'
        let B = 'b'
        let C = 'c'
        let D = 'd'

        給定一個二進制數,從左往右分別對應著 A/B/C/D 的狀態:

        let O = 0b0000 // 十進制 0

        則數據一旦發生了修改,都可以用對應的比特位來表示

        // 當且僅當 A 發生了修改
        O = 0b1000 // 十進制 8
        
        // 當且僅當 B 發生了修改
        O = 0b0100 // 十進制 4
        
        // 當且僅當 C 發生了修改
        O = 0b0010 // 十進制 2
        
        // 當且僅當 D 發生了修改
        O = 0b0001 // 十進制 1

        同理,當多個數據發生了修改時,則可以同時表示

        // 當 A 和 B 發生了修改
        O = 0b1100 // 十進制 12
        
        // 當 A/B/C 都發生了修改
        O = 0b1110 // 十進制 14

        通過這個思路,應用排列組合的思想,可以很快知道只需要僅僅 4 個比特位,就可以表達 16 種數據變化的情況。由于二進制和十進制可以相互轉化,因此只需要區區 16 個十進制數,就可以完整地表達 A/B/C/D 這四個數據的變化情況,也就是臟數據追蹤。舉個例子,給定一個臟數據記錄 14,二進制轉換為 0b1110,因此表示 A/B/C 的數據被修改了。

        Svelte 這個框架,就是通過這個思路來實現響應式的:

        if ( A 數據變了 ) {
          更新A對應的DOM節點
        }
        if ( B 數據變了 ) {
          更新B對應的DOM節點
        }
        
        /** 轉化成偽代碼 **/
        
        if ( dirty & 8 ) { // 8 === 0b1000
          更新A對應的DOM節點
        }
        if ( dirty & 4 ) { // 4 === 0b0100
          更新B對應的DOM節點
        }
        更多具體的介紹可以查看《新興前端框架 Svelte 從入門到原理》。

        老鼠喝毒藥

        除了用來做臟數據記錄以外,位掩碼也能夠用來處理經典的”老鼠喝毒藥“的問題。

        有 1000 瓶水,其中有一瓶有毒,小白鼠只要嘗一點帶毒的水24小時后就會死亡,問至少要多少只小白鼠才能在24小時內鑒別出哪瓶水有毒?

        我們簡化一下問題,假設只有 8 瓶水,其編號用二進制表示:

        image.png

        接著按照圖示的方式對水瓶的水進行混合,得到樣品 A/B/C/D,取4只老鼠編號為 a/b/c/d 分別喝下對應的水,得到如下的表格:

        image.png

        在 24 小時候,統計老鼠的死亡情況,匯總后可以得到表格和結果:

        image.png

        答案呼之欲出,由于 8 瓶水可以兌出 4 份樣品,因此只需要 4 只老鼠即可在 24 小時后確定到底哪一瓶水是有毒的?;氐筋}目,如果是 1000 瓶水,只需要知道第 1000 號的二進制數 0b1111101000即可。該二進制數一共有 10 個比特位,意味著 1000 瓶水可以兌出 10 份樣品,也就是說只需要 10 只老鼠,就可以完成測試任務。

        尾聲

        關于位掩碼技術的探索就到這里。相信在認真讀完這篇文章以后,大家心里已經建立起對位掩碼技術的概念。這是一種非常特別的問題解決思路,也許在未來的某一天你真的會用上它。

        查看原文

        贊 27 收藏 18 評論 2

        姜姜iia 贊了文章 · 2月25日

        阿里面試這樣問:redis 為什么把簡單的字符串設計成 SDS?

        2021開工第一天,就有小伙伴私信我,還給我分享了一道他面阿里的redis題(這家伙絕比已經拿到年終獎了),我看了以后覺得挺有意思,題目很簡單,是那種典型的似懂非懂,常常容易被大家忽略的問題。這里整理出來分享一下,順便自己鞏固一下基礎,希望對正在面試和想要面試的兄弟有點幫助。

        題目大致是這樣的

        面試官:了解redisString數據結構底層實現嘛?

        鐵子:當然知道,是基于SDS實現的

        面試官:redis是用C語言開發的,那為啥不直接用C的字符串,還單獨設計SDS這樣的結構呢?

        鐵子:·····

        其實看得出面試官是想看看,鐵子是只停留在redis的使用層面,還是對底層數據結構有過更深入的研究,面試嘛都愛這樣問大家都懂得。

        我們知道redis是用C寫的,但它卻沒有完全直接使用C的字符串,而是自己又重新構建了一個叫簡單動態字符串SDS(simple dynamic string)的抽象類型。

        redis也支持使用C語言的傳統字符串,只不過會用在一些不需要對字符串修改的地方,比如靜態的字符輸出。

        而我們開發中使用redis,往往會經常性的修改字符串的值,這個時候就會用SDS來表示字符串的值了。有一點值得注意:在redis數據庫中,key-value鍵值對含有字符串值的,都是由SDS來實現的。

        比如:在redis執行一個最簡單的set命令,這時redis會新建一個鍵值對。

        127.0.0.1:6379> set xiaofu "程序員內點事"

        此時鍵值對的keyvalue都是一個字符串對象,而對象的底層實現分別是兩個保存著字符串xiaofu程序員內點事SDS結構。

        再比如:我向一個列表中壓入數據,redis 又會新建一個鍵值對。

        127.0.0.1:6379> lpush xiaofu "程序員內點事" "程序員小富"

        這時候鍵值對的鍵和上邊一樣,還是一個由SDS實現的字符串對象,鍵值對的值是一個包含兩個字符串對象的列表對象了,而這兩個對象的底層也是由SDS實現。

        SDS結構

        一個SDS值的數據結構,主要由len、free、buf[]這三個屬性組成。

        struct sdshdr{
        
          int free; // buf[]數組未使用字節的數量
        
          int len; // buf[]數組所保存的字符串的長度
        
          char buf[]; // 保存字符串的數組
        }

        其中buf[]為實際保存字符串的char類型數組;free表示buf[]數組未使用字節的數量;len表示buf[]數組所保存的字符串的長度。

        例如上圖表示的是buf[]保存長度為6個字節的字符串,未使用的字節數free為0,但是眼尖的同學會發現這明明是7個字符,還有一個"\0"???

        上邊提到過SDS沒有完全直接使用C的字符串,還是沿用了一些C特性的,比如遵循C的字符串以空格符結尾的規則,這樣還可以使用一部分C字符串的函數。而對于SDS來說,空字符串占用的一字節是不計算在len屬性里的,會為他分配額外的空間。

        簡單了解SDS結構后,下邊我們來看看SDS相比于C字符串有哪些優點。

        效率高

        舉個例子:工作中使用redis,經常會通過STRLEN命令得到一個字符串的長度,在SDS結構中len屬性記錄了字符串的長度,所以我們獲取一個字符串長度直接取len的值,復雜度是O(1)。

        而如果用C字符串,在獲取一個字符串長度時,需對整個字符串進行遍歷,直至遍歷到空格符結束(C中遇到空格符代表一個完整字符串),此時的復雜度是O(N)。

        在高并發場景下頻繁遍歷字符串,獲取字符串的長度很有可能成為redis的性能瓶頸,所以SDS性能更好一些。

        數據溢出

        上邊提到C字符串是不記錄自身長度的,相鄰的兩個字符串存儲的方式可能如下圖,為字符串分配了合適的內存空間。

        如果此時我想把“程序員內點事”改成“程序員內點事123”,可之前分配的內存只有6個字節,修改后的字符串需要9個字節才能放下啊,怎么搞?

        沒辦法只能侵占相鄰字符串的空間,自身數據溢出導致其他字符串的內容被修改。

        而SDS很好的規避了這點,當我們需要修改數據時,首先會檢查當前SDS空間len是否滿足,不滿足則自動擴容空間至修改所需的大小,然后再執行修改,如下圖所示。

        不過有個特殊的地方,在把“程序員內點事”的6個字節擴容到“程序員內點事123”9個字節后,發現free屬性的值變成了擴容后字符串的總長度,這就涉及到下邊要說的內存重分配策略了。

        內存重分配策略

        C字符串長度是一定的,所以每次在增長或者縮短字符串時,都要做內存的重分配,而內存重分配算法通常又是一個比較耗時的操作,如果程序不經常修改字符串還是可以接受的。

        但很不幸,redis作為一個數據庫,數據肯定會被頻繁修改,如果每次修改都要執行一次內存重分配,那么就會嚴重影響性能。

        SDS通過兩種內存重分配策略,很好的解決了字符串在增長和縮短時的內存分配問題。

        1.空間預分配

        空間預分配策略用于優化SDS字符串增長操作,當修改字符串并需對SDS的空間進行擴展時,不僅會為SDS分配修改所必要的空間,還會為SDS分配額外的未使用空間free,下次再修改就先檢查未使用空間free是否滿足,滿足則不用在擴展空間。

        通過空間預分配策略,redis可以有效的減少字符串連續增長操作,所產生的內存重分配次數。

        額外分配未使用空間free的規則:

        • 如果對 SDS 字符串修改后,len 值小于 1M,那么此時額外分配未使用空間 free 的大小與len相等。
        • 如果對 SDS 字符串修改后,len 值大于等于 1M,那么此時額外分配未使用空間 free 的大小為1M。

        2.惰性空間釋放

        惰性空間釋放策略則用于優化SDS字符串縮短操作,當縮短SDS字符串后,并不會立即執行內存重分配來回收多余的空間,而是用free屬性將這些空間記錄下來,如果后續有增長操作,則可直接使用。

        數據格式多樣性

        C字符串中的字符必須符合某些特定的編碼格式,而且上邊我們也提到,C字符串以\0空字符結尾標識一個字符串結束,所以字符串里邊是不能包含\0的,不然就會被誤認是多個。

        由于這種限制,使得C字符串只能保存文本數據,像音視頻、圖片等二進制格式的數據是無法存儲的。

        redis 會以處理二進制的方式操作Buf數組中的數據,所以對存入其中的數據做任何的限制、過濾,只要存進來什么樣,取出來還是什么樣。

        總結

        上邊只是 redis 數據結構的一點基礎知識,沒什么難度,但以我的面試經驗,如果被問這類問題,不要只含糊其辭的說出底層是SDS,有理有據的把為什么這樣實現也說出來。

        一來可以顯得自己基本功扎實,如果表達的在條理清晰,是個很不錯的加分項;在一個主動打消面試官問下去的念頭,當然就怕不按套路出牌的人!


        整理了幾百本各類技術電子書,有需要的同學公號[ 程序員內點事 ]內回復[ 666 ]自取。技術群快滿了,想進的同學可以加我好友,和大佬們一起吹吹技術。
        查看原文

        贊 15 收藏 12 評論 1

        認證與成就

        • 認證信息 SegmentFault 運營
        • SegmentFault 講師
        • 獲得 126 次點贊
        • 獲得 6 枚徽章 獲得 0 枚金徽章, 獲得 1 枚銀徽章, 獲得 5 枚銅徽章

        擅長技能
        編輯

        (??? )
        暫時沒有

        開源項目 & 著作
        編輯

        (??? )
        暫時沒有

        注冊于 2019-07-16
        個人主頁被 5.3k 人瀏覽

        一本到在线是免费观看_亚洲2020天天堂在线观看_国产欧美亚洲精品第一页_最好看的2018中文字幕