興趣是最好的老師, HelloGitHub 讓你對編程感興趣!
HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。
github.com/521xueweihan/HelloGitHub
這里有實戰項目、入門教程、黑科技、開源書籍、大廠開源項目等,涵蓋多種編程語言 Python、Java、Go、C/C++、Swift 等,讓你在短時間內感受到開源的魅力,對編程產生興趣!
以下為本期內容|每個月 28 號更新
1、 HandBrake :免費的開源視頻轉碼工具。這是一款功能強大、社區驅動的開源視頻轉碼工具,它支持將各種不同格式的視頻文件,轉換為 MP4 和 MKV 等常見格式。
地址: github.com/HandBrake/HandBrake
2、 SwashbucklerDiary :記錄生活點滴的俠客日記。這個項目的作者因為喜歡寫日記,所以開發了這款離線優先的日記應用。它擁有簡潔清爽的界面,用戶可以選擇記錄日記時的天氣、心情和位置。除了支持 Web 在線使用外,還提供了 Android、Windows、iOS 和 macOS 客戶端。
地址: github.com/Yu-Core/SwashbucklerDiary
3、 SyncClipboard :跨平臺的剪貼板同步工具。該項目可以輕松實現不同設備間剪貼板內容同步,支持文本、圖片和文件。使用時可以選擇自己部署服務端,或者使用支持 WebDAV 協議的網盤。
地址: github.com/Jeric-X/SyncClipboard
4、 ladybird :真正獨立的開源瀏覽器。該項目作者想要從頭構建一個真正獨立的 Web 瀏覽器,所以他從自己寫的 SerenityOS 操作系統中分離出瀏覽器引擎部分,計劃基于此做一個全新、跨平臺的開源瀏覽器。目前項目處于早期階段,尚未發布可供下載的安裝包。
地址: github.com/LadybirdBrowser/ladybird
5、 mosh :適用于移動端的遠程終端工具。這是一款專為移動和不穩定的網絡環境設計的遠程終端工具,它能夠在網絡切換、高延遲和 IP 變化的情況下,保持遠程會話的穩定和更快的響應,適用于 Android、iOS、Linux 和 macOS 等系統。
地址: github.com/mobile-shell/mosh
6、 OpenArk :專業的 Windows 惡意程序分析與清理工具。這是一款 Windows 平臺上的對抗和清理 Rootkit(惡意程序)工具,它能夠幫助程序員發現系統中隱藏的惡意軟件,支持查看進程、進程注入、內核驅動模式和掃描等功能。來自 @SHOWTA 的分享
地址: github.com/BlackINT3/OpenArk
7、 dblab :交互式的數據庫命令行客戶端。這是一個用 Go 編寫的輕量級、交互式的 TUI 數據庫客戶端,它開箱即用、方便快捷,支持 PostgreSQL、MySQL、SQLite3 和 Oracle 數據庫,不是桌面工具用不起,而是命令行的更有性價比。
地址: github.com/danvergara/dblab
8、 go-size-analyzer :分析 Go 編譯后文件大小的工具。該項目通過逆向工程和反匯編,收集二進制文件中的地址,合并后計算出每個依賴在最終的二進制文件中所占大小,并通過可視化的方式展示出來。它可以用來分析 Go 程序編譯后的文件體積,支持命令行和 Web 兩種使用方式。來自 @Zxilly 的分享
地址: github.com/Zxilly/go-size-analyzer
9、 gws :簡單、快速的 Go WebSocket 庫。該項目是用 Go 編寫的 WebSocket 庫,它提供了簡潔明了的 API,具備高吞吐、低延遲、低內存占用、穩定可靠的特點,可用于高并發場景,支持上下文接管、自定義窗口大小和廣播等功能。來自 @道一 的分享
地址: github.com/lxzan/gws
10、 river :基于 Postgres 的后臺任務管理平臺。該項目是基于 Go+Postgres 數據庫開發的任務隊列,它內置 Web 管理后臺,支持自動重試、定時任務和優先級等功能。
地址: github.com/riverqueue/river
11、 watermill :快速開發事件驅動應用的 Go 庫。這是一個能夠高效處理消息流的 Go 庫,即發布/接收消息并做出反應。它上手容易,支持 Kafka、RabbitMQ、HTTP 和 MySQL binlog 等消息中間件,適用于處理實時數據流、分布式事務和微服務通信等場景。來自 @DeShuiYu 的分享
//?...
func?main()?{
?saramaSubscriberConfig?:=?kafka.DefaultSaramaSubscriberConfig()
?//?equivalent?of?auto.offset.reset:?earliest
?saramaSubscriberConfig.Consumer.Offsets.Initial?=?sarama.OffsetOldest
?subscriber,?err?:=?kafka.NewSubscriber(
??kafka.SubscriberConfig{
???Brokers:???????????????[]string{"kafka:9092"},
???Unmarshaler:???????????kafka.DefaultMarshaler{},
???OverwriteSaramaConfig:?saramaSubscriberConfig,
???ConsumerGroup:?????????"test_consumer_group",
??},
??watermill.NewStdLogger(false,?false),
?)
?if?err?!=?nil?{
??panic(err)
?}
?messages,?err?:=?subscriber.Subscribe(context.Background(),?"example.topic")
?if?err?!=?nil?{
??panic(err)
?}
?go?process(messages)
//?...
地址: github.com/ThreeDotsLabs/watermill
12、 spring-reading :Spring 源碼閱讀。這是一份講解 Spring 源碼的圖文教程,內容涵蓋了 Spring 框架的核心概念和關鍵功能,而且還貼心地標注了難度等級,更加便于學習。來自 @Lex 的分享
地址: github.com/xuchengsheng/spring-reading
13、 xpipe :一鍵遠程登錄 Docker 實例的工具。該項目是用于管理遠程服務器的桌面工具,它會在 SSH 連接到服務器后,自動檢測服務器環境和 shell 類型,實現一鍵登錄各種容器實例(Docker、LXC、WSL),并支持遠程文件管理和工具集成等功能。來自 @孤膽槍手 的分享
地址: github.com/xpipe-io/xpipe
14、 earthworm :讓你上癮的英語學習網站。這是一個開源的在線學習英語網站,支持自托管和本地運行。它采用連詞成句、循序漸進的方法幫你學習英語。通過不斷地重復形成肌肉記憶,并結合游戲獎勵和積分排名的方式,讓背單詞變得有趣且高效。來自 @Immerse 的分享
地址: github.com/cuixueshe/earthworm
15、 million :優化 React 組件性能的工具。該項目是專為 React 應用設計的優化編譯器,它通過優化虛擬 DOM 和直接更新 DOM 節點,來減少頁面更新的耗時,從而提升 React 組件性能,最高可達 70%,支持 VSCode 插件和命令行的使用方式。
地址: github.com/aidenybai/million
16、 pouchdb :開源的 JavaScript 數據庫。該項目是用 JavaScript 編寫、運行在瀏覽器里的 NoSQL 數據庫,它能夠在離線狀態下將數據存儲至本地,并在網絡恢復后自動同步數據,保持數據與服務器同步。
var?db?=?new?PouchDB('dbname');
db.put({
??_id:?'hellogithub-1',
??name:?'HelloGitHub',
??age:?69
});
db.changes().on('change',?function()?{
??console.log('Ch-Ch-Changes');
});
db.replicate.to('遠程數據庫地址');
地址: github.com/pouchdb/pouchdb
17、 stf :通過瀏覽器控制多臺 Android 設備。這是一個用 Node.js 開發的安卓智能設備群測工具,它提供了一個可遠程調試多臺 Android 設備的 Web 平臺,支持 Android 手機和手表等設備。來自 @wang-qa 的分享
地址: github.com/DeviceFarmer/stf
18、 ua-parser-js :解析 User-Agent 的 JS 庫。這是一個用于解析 User-Agent 的庫,它可將用戶代理字符串解析為 UAParser 對象,便于檢測和查看用戶的瀏覽器、操作系統、CPU 和設備型號等信息。
const?parser?=?new?UAParser(ua);
console.log(parser.getResult());
/*
{
????ua:?"Mozilla/5.0?(Linux;?Android?10;?STK-LX1?Build/HONORSTK-LX1;?wv)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Version/4.0?Chrome/110.0.5481.153?Mobile?Safari/537.36?musical_ly_2022803040?JsSdk/1.0?NetType/WIFI?Channel/huaweiadsglobal_int?AppName/musical_ly?app_version/28.3.4?ByteLocale/en?ByteFullLocale/en?Region/IQ?Spark/1.2.7-alpha.8?AppVersion/28.3.4?PIA/1.5.11?BytedanceWebview/d8a21c6",
????browser:?{
????????name:?"TikTok",
????????version:?"28.3.4",
????????major:?"28"
????},
????cpu:?{},
????device:?{
????????type:?"mobile",
????????model:?"STK-LX1",
????????vendor:?"Huawei"
????},
????engine:?{
????????name:?"Blink",
????????version:?"110.0.5481.153"
????},
????os:?{
????????name:?"Android",
????????version:?"10"
????}
}
*/
地址: github.com/faisalman/ua-parser-js
19、 openemr :免費的開源醫院管理系統。該項目是目前最流行的開源醫院管理系統,它集成了醫院日常運營所需的所有功能,如預約、患者檔案、電子計費和醫療記錄等,同時支持中文在內的 30 多種語言。
地址: github.com/openemr/openemr
20、 CleanMyWechat :自動刪除電腦端微信緩存數據的工具。該項目是用 PyQt5 寫的 Windows 工具,它可以清理微信電腦客戶端自動下載的無用數據,支持自動識別賬號、多賬號管理,以及選擇清理文件的類型和設置清理多久以前文件等功能。
地址: github.com/blackboxo/CleanMyWechat
21、 searxng :尊重個人隱私的 Python 元搜索引擎。該項目是基于 Flask 構建的聚合搜索引擎,能夠整合來自 70 多個搜索引擎的搜索結果。它安裝簡單、不追蹤用戶行為,支持選擇搜索引擎、安全搜索和多語言等功能。來自 @孤膽槍手 的分享
地址: github.com/searxng/searxng
22、 vulture :Python 的“死”代碼偵探。這是一個 Python 的靜態代碼分析工具,它可以找出 Python 項目中未使用的代碼,僅需一條命令,就能清理沒用和無效的 Python 函數、變量和代碼片段。
地址: github.com/jendrikseipp/vulture
23、 warp :編寫高性能仿真程序的 Python 框架。該項目是英偉達開源的 Python 框架,它通過即時編譯技術將 Python 代碼,轉換為可以在 CPU 或 GPU 上運行的高效內核代碼,可用于編寫模擬物理環境、碰撞檢測和圖形處理等程序。
import?warp?as?wp
import?numpy?as?np
num_points?=?1024
@wp.kernel
def?length(points:?wp.array(dtype=wp.vec3),
???????????lengths:?wp.array(dtype=float)):
????#?thread?index
????tid?=?wp.tid()
????
????#?compute?distance?of?each?point?from?origin
????lengths[tid]?=?wp.length(points[tid])
#?allocate?an?array?of?3d?points
points?=?wp.array(np.random.rand(num_points,?3),?dtype=wp.vec3)
lengths?=?wp.zeros(num_points,?dtype=float)
#?launch?kernel
wp.launch(kernel=length,
??????????dim=len(points),
??????????inputs=[points,?lengths])
print(lengths)
地址: github.com/NVIDIA/warp
24、 wsgidav :基于 WSGI 的 WebDAV 服務器。WebDAV 是一種允許在網絡上直接編輯和管理文件的通信協議,多用于文檔共享、云存儲和文件同步等場景。該項目是用 Python 寫的 WebDAV 服務器,可獨立運行、自帶簡單的 Web 界面,支持 MS Office 文檔在線編輯和身份驗證等功能。
地址: github.com/mar10/wsgidav
25、 lolcommits :基于 Git 的程序員自拍。該項目能在每次用 git 提交代碼時,自動使用攝像頭拍照,并在照片上標記 commit ID,這樣不僅可以記錄“生活”,還能一眼找到代碼的作者。
地址: github.com/lolcommits/lolcommits
26、 100-exercises-to-learn-rust :學習 Rust 的 100 個練習。該教程秉承著邊學邊做的原則,內含大約 100 道練習題和答案,帶你從零開始學習 Rust 編程語言。
地址: github.com/mainmatter/100-exercises-to-learn-rust
27、 crossbeam :Rust 并發編程工具庫。在 Rust 的并發編程世界中,它就像一把瑞士軍刀,提供了豐富且強大的無鎖并發數據結構和工具,極大地提升了 Rust 并發編程的效率。來自 @DeShuiYu 的分享
地址: github.com/crossbeam-rs/crossbeam
28、 zellij :更容易上手的終端復用器。該項目是一個 Rust 寫的終端多路復用器,支持單窗口多標簽、分割窗口和自動恢復連接等功能。它提供了開箱即用的默認配置,同時擁有強大的插件系統,從而深受初學者和高級用戶的喜愛。
地址: github.com/zellij-org/zellij
29、 Loop :一款優雅的 macOS 窗口管理工具。這是一款極簡的 macOS 窗口管理應用,它無需復雜的配置,即可通過簡單的組合鍵,輕松實現移動窗口位置、調整窗口大小以及排列窗口,交互十分優雅,使用體驗極佳。
地址: github.com/MrKai77/Loop
30、 noTunes :禁用 iTunes 的工具。這是一款 macOS 應用,它可以阻止 iTunes 或 Apple Music 自動啟動和彈出,還支持設置 iTunes 的替代品。
地址: github.com/tombonez/noTunes
31、 anx-reader :免費的 Android 電子書閱讀器。這是一款用 Flutter 編寫的電子書閱讀軟件,它免費且沒廣告,支持 WebDAV 同步電子書、筆記和閱讀進度,適用于 Android 手機和平板電腦。
地址: github.com/Anxcye/anx-reader
32、 etcher :簡單易用的 USB/SD 啟動盤制作工具。該項目可以將操作系統鏡像燒錄進 SD 卡或 USB 設備,可用于制作可啟動、便攜式的操作系統。它擁有友好的操作界面,僅需 3 步就能完成 USB 啟動盤制作,適用于 Linux、macOS 和 Windows 10 及更高版本。
地址: github.com/balena-io/etcher
33、 GmsCore :谷歌服務框架的開源替代品。該項目是一個開源的替代 Google Play 服務的解決方案,它可以讓無法安裝或不想用 Google 服務的用戶,運行依賴谷歌服務的 Android 應用。
地址: github.com/microg/GmsCore
34、 OpenGlass :低成本的 AI 智能眼鏡。該項目僅需 25 美元,就可以將普通的眼鏡升級成 AI 智能眼鏡。它支持錄制視頻、識別物體和翻譯文本等功能,但需要與電腦配合使用,不支持在鏡片上顯示內容。
地址: github.com/BasedHardware/OpenGlass
35、 scribe :用 HTML 的方式展示樂譜。該項目通過 CSS+SVG+HTML 代碼,實現了在網頁上顯示音樂符號和樂譜。
地址: github.com/stephband/scribe
36、 WTF-zk :零知識證明入門教程。這是一份入門級的零知識證明教程,零知識證明是一種技術,允許一方在不泄露任何具體信息的情況下向另一方證明某件事為真,多用于密碼學、隱私計算和 Web3 等領域。
地址: github.com/WTFAcademy/WTF-zk
37、 introduction-to-bash-scripting :《Bash 腳本入門指南》。這是一本教你如何編寫出色的 Bash 腳本的開源書籍。
地址: github.com/bobbyiliev/introduction-to-bash-scripting
38、 PyTorch-Tutorial-2nd :《Pytorch 實用教程》。這本書不僅全面介紹了 PyTorch 的基礎知識,還包含豐富的 PyTorch 實戰案例和大型語言模型部署實例,能幫你快速上手 PyTorch,并具備出色的開發能力。來自 @TingsongYu 的分享
地址: github.com/TingsongYu/PyTorch-Tutorial-2nd
39、 gateway :大型語言模型 API 聚合網關。該項通過提供統一且快速的 API,讓開發者能夠輕松訪問超過 200 個 LLMs,還支持多模態、自動重試和負載均衡等功能。
地址: github.com/Portkey-AI/gateway
40、 MoneyPrinterTurbo :一鍵生成短視頻的 AI 工具。該項目是基于大模型服務的 AI 視頻生成工具,只需要提供一個主題或關鍵字,就可以自動生成高清的短視頻。它擁有簡單易用的 Web 界面,支持批量生成、設置視頻時長和橫/豎屏尺寸等功能。來自 @jolahua 的分享
地址: github.com/harry0703/MoneyPrinterTurbo
41、 Omost :極簡提示詞的文生圖工具。該項目基于 LLM 的編程能力幫用戶自動完善文生圖的提示詞,可以根據用戶輸入的簡短提示詞生成高質量的圖片,還支持圖片局部修改等功能,比如將圖片中的龍變成恐龍,極大地降低了編寫文生圖的門檻,無需復雜的提示詞即可生成滿意的圖片。
地址: github.com/lllyasviel/Omost
42、 Scrapegraph-ai :基于 AI 的 Python 爬蟲。這是一個由 AI 驅動的 Python 爬蟲庫,它借助 LLM 的能力,可以根據提示詞自動抓取目標網站的數據。
smart_scraper_graph?=?SmartScraperGraph(
????prompt="List?me?all?the?projects?with?their?descriptions",
????source="目標網站",
????config=graph_config
)
result?=?smart_scraper_graph.run()
print(result)
地址: github.com/VinciGit00/Scrapegraph-ai
感 謝參與 分享 開源項目的小伙 伴 ,歡迎更多的開 源愛 好者 來 HelloGitHub 自薦/推薦開源項目 。
希望本期內容有你感興趣的開源項目,興趣是最好的老師,它能點燃你對開源的熱情、勇敢地邁出第一步,隨時歡迎你加入開源的大家庭!如果還沒看過癮, 點擊閱讀 往期內容。
輯導讀:網易云音樂一直以高質量的評論出圈,它的內容社區在眾多在線音樂平臺中是屬于佼佼者。它是如何打造有共鳴的內容社區的呢?本文將從三個方面進行分析,希望對你有幫助。
摘要:
在早期市場上的音樂市場份額已被“酷狗音樂”和“QQ音樂”一分為二,大眾都認為這已成為定局時,網易云音樂平臺伴隨著一句宣言“邊聽音樂邊看評論”,推出了推薦和評論這個功能,以個性化的樂評和精準化的歌曲推薦另辟蹊徑,一躍成為音樂領域的一匹黑馬。
本文將嘗試基于“互動儀式鏈”分析網易云音樂APP互動儀式的構成要素及其結果,并為其發展道路提供思路。
什么是互動儀式鏈?
美國社會學家蘭德爾柯林斯在其所著的《互動儀式鏈》一書中正式提出“互動儀式鏈理論”。那什么是互動儀式鏈呢?書中提出的解釋的核心機制是高度相互關注的情感連帶。互動儀式也就是際遇者由資本和情感的交換而進行的日常程序化活動。簡單來說就是人與人在同一(物理/虛擬)空間場景下所產生的高度情感鏈接。在當今社會,互動儀式鏈被大家廣泛探討。
柯林斯指出,達成互動儀式通過四個方面發生作用:
1)統一的場所
儀式始于個體共同采取某一行動或者參與某一事件,現如今“網易云音樂”平臺上的注冊用戶已經超過八億,可以說用戶都以匿名的形式共同聚集在線上音樂平臺中。平臺中的音樂、歌單、電臺、聽聽、K歌都有各自的評論區,讓互不相識的用戶都通過在相應的評論區和社區中發表自己的言論,展開交流而互相影響著。
2)對局外人設限
“網易云音樂”誕生之初,伴隨著一句宣言“邊聽音樂邊看評論”,樂評是“網易云音樂”和其他音樂類APP的重要區別。在最初網易云音樂的產品負責人(幕后產品一書作者)在2014年做過這樣的一次用戶調研。他采訪了各個年齡段的音樂愛好者,詢問他們是否有邊聽音樂邊看評論的需求,當時的主流論調是“聽音樂是一件私人的事情,并不想用“評論交流”但是評論功能還是上線了。剛開始的評論功能并不火爆,但隨著評論和回復數量的逐漸增多,用戶開始感受到群體參與對自身的影響,于是開始投入到互動中,并推進這種互動儀式。在這個過程中,用戶所參與的話題具有一定的排他性。
歌詞、演唱者、歌曲的用途等都可以成為用戶在評論區互動的話題,但只有對話題有所了解的用戶才會參與到討論中,評論的每一類話題都各自擁有一部分參與者,并將對相關話題沒有了解的用戶排除在外。
3)共同的關注點
柯林斯認為,共同的關注是成為發展共享符號的關鍵,目前音樂類APP普遍都包含“個性推薦”的功能,基于大數據算法收集分析用戶的聽歌偏好,分析用戶在聽歌場景下的行為,包括用戶聽一首歌的時長,常聽的歌,對那些歌或歌單進行了收藏、下載、評論、喜歡等。
通過這些指標,平臺為用戶推薦可能感興趣的內容,從而提升應用程序的點擊率,進一步增強用戶粘性。“每日推薦”和“私人FM”功能就是個性化推薦的典型體現,在不少音樂的評論區都能看到類似于“從日推來的舉手”“日推這首歌的女生我想和你結婚”這樣有趣的內容,平臺通過個性化推薦機制,將用戶集中在“日推”的關注點上,用戶基于該關注點展開社交。一起交流對于該歌單或歌曲的理解或經歷。
4)共同的情感體驗
音樂社交是基于興趣之上的陌生人社交,“網易云音樂”實際是通過情感的傳播來運作的,用戶對于每一首歌都有自己的簡介,而分享機制就給了情感流通的機會。對于任何一首歌都會有不同的用戶對于在曲目有所經歷.引起大多數用戶共鳴的評論大多數是難忘的青澀初戀、前女友/前男友、暗戀、逝去的青春、回不去的童年、一代人共同的記憶、喜歡的偶像、未來的暢想。
這類評論主要的特點是用戶將自己的經歷、心情于音樂聯系再來一起。他們不僅是在評論音樂,更是在表達、抒發自己的感情。用戶可以在“網易云音樂”中的“音樂圈”里瀏覽關注他人的動態,并進行點贊、評論、同時也可以分享音樂,并期待他人對自己的評論、點贊。用戶將自己的故事分享出去,引發其他用戶的共鳴,從而達到共同的情感體驗。
互動儀式在發生作用初期產生的是短暫的情感,當組成要素有效綜合時,短暫的情感會轉化為長期情感,并產生四種結果。
1)促成群體團結
“網易云音樂“被稱為“云村”,用戶稱自己為“云村村民”“云村”和“地球村”有異曲同工之意。平臺的愿景是通過平臺,使得人與人之間少一點隔閡,能夠自如地感受到音樂的美好,分享音樂帶來的快樂。音樂和技術縮短了人際間的距離,使得用戶放佛置身一個溝通無障礙的小村落,這表明“網易云音樂”不止作為一個聽歌APP,更是一個對廣大樂迷粉絲開放的音樂社區。
邊聽音樂對看評論所產生的或喜悅或感動或悲傷的情感要素是一方面,另一方面對這種在線參與的長期作用結果就是產生群體成員感,用戶通過加入討論引起共鳴,增加彼此間的交流,通過創建歌單獲得了收藏與關注,自我認同感得到相應提升。所有人都為自己是云村村民感到自豪。
2)釋放個體的情感能量
在互動儀式中,情感能量的不平等將導致儀式出現分層,頻繁輸出內容個人能量強的參與者往往成為互動中心的關注焦點,支配著互動過程的發展。他們也被稱為社群中的意見領袖。普通參與者能夠從群體的互動中得到充分的情感能量,這使其不僅成為群體的熱情支持者,更有機會成為其中的領導者。
在“網易云音樂”中,優質的歌單及其創建者容易稱為多數聽歌用戶關注的中心,作為聽眾,用戶通過搜索歌單,收聽其中歌曲、轉發、點贊、評論等一系列行為表達自己的偏好。同時,作為UGC創作者,用戶可以常見歌單并收錄曲目,從封面到標題再到歌單內容,每一張歌單都包含著創建者的情感偏好,“網易云音樂”通過這樣一種社交體檢,強化用戶UGC屬性,發展音樂社交文化,為用戶提供釋放情緒和情感平臺。
3)創建代表群體的符號
“網易云音樂”和網易云旗下的其他產品一樣,采用紅、黑、白配色為主,網易的圖標是一個紅白相間的音符,音樂播放器界面測模擬了黑膠唱片,通過復古的元素,激起用戶的懷舊情懷。在“網易商場”中大多也是以配色為基調的產品,為用戶提供了一種品牌標示。
2019年1月,“網易云音樂”的年度聽歌報告在朋友圈和微博等社交平臺上瘋狂轉發,報告內容主要是用戶上一年的聽歌偏好,喜歡聽的歌曲類型,聽得最多的歌以及對用戶來說一些特殊的音樂時刻“網易云音樂”以數據整理的方式發布用戶的聽歌數據,給每位用戶留下了值得幾年的音樂會議。
用戶將自己的聽歌報告發布在微博、朋友圈等主流社交平臺,以曬歌單的方式表明自己的群體身份,裂變式的傳播與分享體現了用戶對于網易云音樂的認同。
4)維護群體的道德感
用戶在注冊網易云賬號時,必須遵守《云音樂社區行為規范》條列才能注冊成功。該條列中的條款顯示用戶不得發布銘感話題,一旦違反,將面臨“禁言”或“賬號封禁”等相應處理。處于一種類似于維護領地的心里,為了對抗外來的不和諧力量,用戶通過在評論區舉報消極違規的評論。以維持平臺和諧氛圍,有次展現出群體的價值取向。
當前移動音樂市場已從增量市場轉變為存量是市場,用戶規模逐漸穩定,沒有大規模上漲控件。因此對音樂平臺來說,在當前如何從既有社群中獲取更高的價值,增強用戶粘性,成了亟待解決的問題。
“網易云音樂”雖然具有良好的社交機制,但由于其自身的版權缺失,以及其競爭對手紛紛引入音樂社群的功能,單純走聽歌互動這條路已經無法為他帶來額外的價值,“網易云音樂”想要在眾多平臺中穩住陣腳,還需要不斷做出改進,發覺用戶群體的價值。
版權的缺失對于音樂平臺的發展來說無疑是致命的,沒有了版權,就失去了互動儀式發生的首要條件,無法聚集在同一場所,即用戶無法直接通過制定歌曲聚合在一起參與討論,創建UGC內容?!熬W易云音樂”要想獲得更多的音樂版權,既要和行業內的競爭對手相互合作,也要積極培養用戶的付費儀式。
從行業角度來看,在數字音樂版權正規化的大環境下,個平臺間的互通和共享已稱為主流趨勢。2019年8月,第47次CNNIC中國互聯網報告發布。
截止2020年12月,我國網民規模達到9.89億。較2020年3月底增長8540萬,互聯網普及率達70.4%。其中網絡音樂的用戶規模到6.08億,使用率為71.1%,行業內高價競購獨家音樂版權的行為逐漸減少,合作共享版權的氛圍初步形成。
第47次《中國互聯網絡發展狀況統計報告》(全文)
“網易云”雖然版權不足,但可以加大對優質音樂發掘和扶持力度,為草根創作者提供表演平臺,并將優質音樂人的作品作為平臺優勢和其他平臺進行版權置換。這能在一定程度上緩解平臺承擔過多音樂版權的經濟壓力,也為用戶提供了使用的便利。同時,音樂人在上傳音樂作品是,也要保證歌曲和歌單的正版與質量,只有將平臺定位為正版渠道平臺,才能促成同行間的相互合作,促進正版與的資源共享。
從用戶的角度來看,由于互聯網發展的過程太快,不少用戶還保持著聽免費音樂的習慣,用戶的付費儀式不夠強烈。這非常需要社群中個體能量較高的用戶(意見領袖)在主流社交平臺為粉絲和普通用戶普及正版歌曲的重要性,向其灌輸付費儀式,提高用戶的媒介素養與自律性。
繼短視頻和直播的熱潮后,社交平臺中興起了Vlog(視頻博客,或影響日志)這種大眾化分享形式,其對音樂的選擇和配合有著更高的要求,這給了“網易云音樂”一個創新和升級的機會。適宜的、有趣的背景音樂會給視頻內容增色,具有一定節奏喝適合曲風的音樂才能匹配對應的主題,在媒介融合的背景下,“網易云音樂”可以大膽嘗試在平臺內專門設置一個“云音樂Vlog”專區,引導用戶為Vlog制作音樂素材并上傳自己的Vlog作品,優質內容可獲得大賞,原創保護和熱門推薦的機會,這不僅將視頻和音樂緊密聯系在一個平臺上,而且能激勵用戶不斷生產出優質的原創內容。
根據柯林斯的互動儀式理論,情感是互動儀式的組成要素與結果,互動儀式通過情感的轉化正常運轉。短期情感產生的群體興奮需要不斷積累才能形成長期情感,而長期聚集的情感能量是加深互動促進群體團結的關鍵要素。
從短期感情轉化到長期感情需要用戶的內容分享于傳播,同時也離不開品牌造勢。“網易云”可以建立積分獎勵機制,根據用戶對平臺所做的貢獻給予相應的積分,將評論獲得的點贊數、歌曲的播放量和收藏量、分享的次數等指標作為積分項,用戶獲得的積分可用于兌換平臺會員“黑膠VIP”或是“云音樂商場”的產品。通過這種方式,既促進了用戶互動社交,又能讓用戶體驗到云音樂的會員特權,并接觸網易云品牌旗艦下的其他產品。用戶在短期的接觸中感受到的也許是興起,但長期接觸后的情感積累下能感受到網易云品牌的情懷與不可替代性,提升產品的口碑與知名度。
筆者將柯林斯的互動儀式鏈置與互聯網環境下,互聯網時代的互動儀式鏈憑借虛擬在場互動,群體成員屬性較為同質且地位有所提升,儀式非規范并且可以反復進行特點,在網絡控件中不斷進行一個有一個的互動儀式。
用該理論對網易云音樂互動發生的前提條件和互動結果進行分析解讀后,認為“網易云音樂”產生良性互動的核心因素是群體間的情感能量共鳴,UGC模式是增強用戶粘性的催化劑.筆者將互動儀式鏈的理論結合實際案例分享給大家目的是為了給予大家在思考如何提升自己產品的用戶粘性以及打造內容社群時能夠產生新思路,將該理論的四個維度運用到各自產品的策略中,打造良性循環的內容社群。
在即將到來的5G時代,移動互聯網的便捷性將匯集到更多元屬性的群體,越來越多的產品思路也擺在了我們面前,期待在未來有更多有意義的產品誕生。
歡迎大家評論區討論相關內容,筆者經可能給予答復。
參考文獻:
[1] 齊菁 . 網易云音樂 CEO 朱一聞: 我們要做一款有靈魂的產品 [EB/OL] . http: / /www. sohu. com/a/289025321_ 168180. html, 2019-01-15.
[2] [美] 蘭德爾·柯林斯 . 互動儀式鏈 [M] . 北京: 商務印書館,2009: 4.
[3]中國互聯網絡信息中心. 第47次中國互聯網絡發展狀況統計報告[R/OL]
本文由 @Lueve 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
容
導讀:自動化定位解析
寫在前面的話
測試自動化是現在的一種趨勢,更是許多厭倦功能測試想轉型高端測試的測試從業者的迫切需求。關于測試自動化的資料比比皆是,但是雜亂無章,而且好多知識只是一帶而過,并且更多針對 Selenium 這塊的測試以 Python 語言居多,Java 語言很少。其實,Java 語言更加靈活,畢竟面向對象語言中 Java 才是當之無愧的王者。
怎樣良好的整合 Java 知識與 Selenium 完美結合,是本課要講解的內容,同時,會以實際案例來逐步引出 Selenium 的使用。課程主要有以下特色:
(1)內容由淺入深,零基礎自動化人員也能看得懂。
(2)始終以解決實際問題為出發點,通過實際案例引出 Selenium 的相關知識,最大限度的避免課程枯燥,用生動的語言來描述自動化。
(3)細化每個實施的細節,希望講解一個知識點就能徹底的講透,并且會以一種由淺入深的形式進行講解。
說了這么多,希望讀者閱讀完全部文章后會以最大限度的掌握自動化,并且愛上自動化!好了,下面開始步入正題。
準備工作
“工欲善其事必先利其器”,做自動化也是如此,所以先花一點時間來介紹要準備的工作。
(1)軟件工具準備:JDK 和 Eclipse,搭建 Java 的開發環境,需要注意的是二者的版本必須統一,即 32 位的 JDK 必須對應 32 位的 Eclipse。
(2)框架軟件準備:TestNG
安裝方式有兩種:
當然所有的插件安裝都是這兩種方式。
(3)Foxfire(火狐瀏覽器,建議使用 30~32 版本,目前最新的版本兼容性不好且對插件的支持不夠理想)。在火狐瀏覽器里要下載其插件,必須使用的有:
需要說明的是,Selenium IDE 本身就有用來做簡單 UI 界面錄制回放的功能。
(4)Google Chrome(谷歌瀏覽器),演示的時候可能只調用火狐瀏覽器,但是谷歌瀏覽器是當前 UI 自動化測試的首選,因為其穩定,插件更新快。
(5)必要的 jar 包
(6)瀏覽器必要的 driver
寫到這里有可能會問,為什么需要這么多的 driver,其實如果只針對一套流程進行自動化操作,只需要操作一個瀏覽器即可,但是如果想用同一個流程驗證不同瀏覽器的兼容性時,那么需要同時啟動多個瀏覽器,所以提前準備好主流瀏覽器的 driver,對我們的工作來說是非常有必要的。
上面的工作全都完成,在 Eclipse 里創建一個純凈的自動化工作目錄,將下載好的插件、驅動、jar 都配置好,此時 Eclipse 的工程目錄如下圖所示:
其中 files 是新建的目錄,用來存儲各種瀏覽器的驅動。lib 也是新建的目錄,用來存儲各種 jar 包。當然,這兩個文件的名稱都可以自行改變。好了準備工作到此結束,下面進行定位的講解。
定位實戰
UI 自動化的實質其實就是做下面兩件事情:
請看下面的例子。
(1)打開百度網站的首頁:
(2)在輸入框輸入 GitChat:
此場景運用自動化的思維解決就是:首先要打開一個瀏覽器 | 在導航欄處輸入百度的網址 | 定位到輸入框 | 鍵盤敲入 GitChat 的過程。操作火狐瀏覽器實現 Java 代碼如下:
package com.test.baidu;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.WebElement;import org.openqa.selenium.firefox.FirefoxDriver;public class Baidu { public static void main(String[] args) { //啟動火狐瀏覽器 WebDriver driver = new FirefoxDriver(); //將導航欄導航到百度首頁 driver.navigate().to("http://www.baidu.com"); //定位到輸入框 WebElement element = driver.findElement(By.id("kw")); //輸入 GitChat element.sendKeys("GitChat"); }}
這里重點先講解里面的定位問題:
WebElement element = driver.findElement(By.id("kw"));
定位方式
常用的定位方式如下:
這些都是常用的定位方式,有 by.id、by.name、by.cssSelector、by.xpath 等等。其中除了 by.cssSelector、by.xpath 外,其他的 by 后面的 id、name、link Text 等指的是 HTML 標記語言中頁簽內的屬性內容,如百度輸入框的 HTML 源代碼如下:
<span class="bg s_ipt_wr quickdelete-wrap ipthover"><span class="soutu-btn"/><input id="kw" class="s_ipt" autocomplete="off" maxlength="255" value="" name="wd"/><a id="quickdelete" class="quickdelete" href="javascript:;" title="清空" style="top: 0px; right: 0px; display: none;"/></span>
這段代碼里的 class、id 就是屬性。所以針對百度輸入框我們使用的是其 id 的屬性。
xpath 定位
首先要明白為什么使用 xpath 定位,它的好處有如下幾個方面:
其次需要了解 xpath 常用符號說明,常用的符號及含義如下所示:
最后運用上面的符號結合 xapth 的相關語法進行定位演示。
演示場景
任找一個 HTML 網頁進行定位實戰,按照頁面代碼結構逐級定位得出的結果解釋如下,希望通過下面的逐級定位內容能理解相對路徑、HTML 的層級結構。
(1)/html/div:沒有節點可以被選擇,因為 / 代表絕對路徑,本定位表示的是 HTML 下一級目錄的元素,很明顯 HTML 的下一級是 head 和 body,所以本寫法無法定位到任何元素。
(2)/html//div:選中 HTML 標簽中的所有 div 元素,// 相對路徑。就完全等價于 //div 的寫法。
(3)//div/div 表示所選擇的 div 元素下又包含 div 元素的所有元素。此時完全等價于 //div/div/. 的寫法。
(4)//div/div/..:表示 //div/div 定義到的上一層 div 上。
(5)//div/div/*:此時會將 div 下的子節點含有 div 的這層節點下的所有元素都匹配到。
(6)//div[@id="input"]:此時表示在 div 目錄下選擇一個 id=input 的子節點。
and 與 or 連接符在 xpath 中的使用
and 的使用:此種定位的應用場景為下圖所示:
此種場景的 HTML 編碼為:
<td class="widgetStyle"><div id="radio"><input class="Volvo" type="radio" name="identity"/><label>Volvo</label><br/><input class="Saab" type="radio" name="identity"/><label>Saab</label><br/><input class="Opel" type="radio" name="identity"/><label>Opel</label><br/><input class="Audi" type="radio" name="identity"/><label>Audi</label></div>
此時我們想定位到 Saab 怎么寫呢?(當然也可以不使用 and 連接符進行書寫)書寫為://input[@class="Saab" and @name="identity"],當然若寫成 //input[@class="Saab"] 肯定也不會有問題。
or 的使用:如果定位到 Saab 或者定位到 Opel,此時書寫方式為://input[@class="Saab" or @class="Opel"]。
定位順序(從1開始切記)
現在學習第二種方式,比如定位 Saab??梢赃@樣寫://input[@name='identity'][2],同理定位 Volvo,//input[@name='identity'][1](這就是一開始強調的,這種寫法必須從 1 開始編號)。
常用函數
Xpath 定位還可以使用一些函數,常用的函數如下:
(1)contains():包含。若要匹配出 Saab 還可以這樣寫://input[@name="identity" and contains(@class,'S')]
(2)text():一個節點的文本值。舉個例子,這里面籃字顯示的英文結果,HTML 代碼為:
<a target="_self" href="/s?rsv_idx=1&wd=111&usm=3&ie=utf-8&sl_lang=en&rsv_srlang=en&rsv_rq=en&rqlang=cn">英文結果</a>
可見這四個字沒有任何屬性值信息,所以定位此信息的時候需要使用 text() 函數。場景如下圖所示:
此時定位英文結果即可使用://a[text()="英文結果"]
(3)last()函數,定位 Audi 寫成 //input[@name='identity'][4],可以看到 Audi 這個元素本身就處于 input 最后一個了,此時可以使用 last() 函數進行匹配://input[@name="identity"][last()]。
(4)starts-with:以 starts-with 為開頭寫法實例://input[starts-with(@id,'user')]代表 input 下 id 以 user 為開頭的元素。
(5)not():表示否定,一般情況下會與返回值為 true 或者 false 的函數組合起來使用。比如上面提到的 contains() 與 starts-with。
用實例來說:現在想要定位到不是 Audi 車除外的三種車元素,此時寫法為://input[@name="identity" and not (contains(@class,'A'))]。
當然 not() 還有一種特殊用法就是直接 Not。//input[not(@class)] 表示匹配出 input 下所有不含 class 屬性的元素。
總結:唯一需要注意的是所有函數的寫法 function(@屬性,'內容')。
Xpath 軸定位說明
(1)基本軸
軸可以在位置路徑中快捷引用特定的節點(忽略屬性和名稱空間節點)。child 例子:
"child::*" 當前節點的子節點。 "child::childnodename" 當前節點名為childnodename的子節點。 "child::text()" 當前節點文本子節點。 "child::node()" 當前節點的子節點。 "child::*/child::nodename" 取當前節點的子節點的名為nodename的子節點。
(2)特殊軸
self當前節點descendant當前節點的后代(子節點或子節點的子節點…)parent當前節點的父節點ancestor當前節點的祖先節點(父節點和父節點的父節點…)preceding按文檔順序位于當前節點之前的非祖先節點attribute當前節點的屬性namespace當前節點的名稱空間preceding-sibling當前節點之前的所有兄弟節點following當前節點之后的所有節點following-sibling當前節點之后的所有兄弟節點descendant-or-self當前節點和后代節點ancestor-or-self當前節點和祖先節點
以上的兩種軸類型,沒什么好說的,先記住吧。具體怎么用請看下面實例。
第一個實例:繼續定位上述中的 Volvo,使用 xpath 軸書寫如下://div[@id="radio"]/descendant::input[1] 也可以定位到。
第二個實例:定義 Audi 上的所有節點,使用 xpath 軸寫法如下://input[@name="identity" and @class="Audi"]/preceding-sibling::*
(3)需要注意的幾個問題。
[] 后面需要跟 /,/ 后面在加上關鍵字。
軸關鍵字后面必須使用 ::,這個后面可以接節點名稱,如 input、div 等。如果后面跟的是 *,代表全部。
軸后面接節點名稱是節點前面的定位方式全部可以繼續適用。
對于軸的使用建議是能不用就不用,條條大路通羅馬,沒必要非使用軸進行定位。
cssSelector 定位
了解即可,能用 xpath 就不用 cssSelector。原因很簡單,HTML 的代碼我們更熟悉。
CSS 常用符號說明
值得注意的是:一個空格也表示子元素,但是所有的后代子元素,就相當于 xpath 中的相對路徑。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。