微人事 star 數超 10k,如何打造一個 star 數超 10k 的開源專案
看了下,微人事(https://github.com/lenve/vhr)專案 star 數超 10k 啦,鬆哥第一個 star 數過萬的開源專案就這樣誕生了。
兩年前差不多就是現在這個時候,鬆哥所在的公司業績下滑嚴重,關門倒閉已成定局,很多同事在謀劃的新的出路,鬆哥則被公司留下來善後,在一段並不太忙碌的日子裡,做了兩個 Spring Boot + Vue 的前後端分離開源專案,以期能給自己來年找工作增加一點籌碼,沒想到這兩個專案後來受到很多關注,也幫助了很多人。有不少小夥伴在公司使用微人事專案做腳手架開發專案,也有國內 top20 的高校研究生借鑑微人事做畢設,我自己也因此收到一些大廠的橄欖枝,可以說還是收穫滿滿。
關於這個專案誕生的故事,鬆哥之前寫過一篇文章,感興趣的小夥伴可以看看:
- 公司倒閉 1 年了,而我當年的專案上了 GitHub 熱榜
今天,我想和小夥伴們聊聊如何從零開始打造一個 star 數過萬的開源專案。鬆哥把這些經驗總結為三點:
- 文件詳細
- 專案有料
- 適當宣傳
這些經驗不是什麼驚世駭俗的大道理,都很普通,關鍵在於執行。
1. 文件詳細
其實在做微人事和 V 部落之前,鬆哥在 GitHub 上已經做過多個開源專案了,比較有意思的一個是一個 Android 上的自定義控制元件,我做了一個歌詞展示的控制元件,這個控制元件引入到自己的專案中以後,可以根據當前歌曲的播放進度動態滾動歌詞,效果如如下:
還有一個比較好玩的就是 Android 上自動搶紅包的 App。不過這些開源工具和專案最終都石沉大海了。
究其原因,我覺得是自己對待這些專案不夠認真,專案開源之後基本上都沒有再繼續維護了,一個專案提交次數一般都是個位數,專案做完之後,寫一篇部落格介紹下就算完事了。一個自己都不怎麼重視的專案,其實很難引起別人的重視。
所以在 V 部落和微人事中,我就吸取教訓,儘量把專案的文件寫的詳細一些,讓不懂前後端分離開發的小夥伴看到我寫的開發文件後,就能夠快速理清專案的思路。就這樣,我每寫一個功能點,就寫一篇技術文件,微人事專案前前後後一共寫了 30 多篇文件:
同時我考慮到很多小夥伴第一次接觸到這個專案,一個龐然大物不好處理,因此我在每一次專案提交之前,都會對專案打一個 tag,這樣大家通過 git clone
小夥伴也可以點選 GitHub 上的 release 下載不同時期的專案。我一開始擔心有的小夥伴不熟悉 Git 上的 tag 操作,還針對此寫了個教程,就是上面文件的第 17 篇。
可以說,這個專案我從頭到尾考慮了很多小夥伴們可能遇到的問題,不是自嗨,確實是希望能夠帶著小夥伴們一起飛。
這麼詳細的文件當然也得到了小夥伴和一些平臺的認可,專案剛剛釋出的時候,也就是 2018 年年初的時候,慕課網在它的官方知乎賬號、微博賬號上都有推過我的介紹專案的文章,當時這個專案就受到了很多小夥伴的關注,收穫了不少 star,小夥伴們的關注也鼓勵我繼續把這個專案向前推進。
這是我介紹的第一點經驗,文件詳細。
2. 專案有料
專案有料,也就是這個專案對大家而言是有價值的,能夠真正幫到大家。
很多小夥伴看到微人事會覺得奇怪,這個專案還有一些功能沒有實現,怎麼就有這麼多人關注呢?其實原因很簡單,這個專案的價值不在於它的業務,而在於它解決了很多小夥伴在前後端分離開發中遇到的問題,這也是我做這個專案的初衷之一。
作為一個 Java 攻城獅,我非常明白很多小夥伴去接觸 Vue、接觸 Nodejs、接觸 SPA 以及接觸前端工程化這些概念時所面臨的困惑,因為這些困惑我也曾經遇到過。
例如前後端分離後,開發環境下前後端如何進行資料互動、許可權管理怎麼做、檔案上傳怎麼做、專案怎麼部署等等,事無鉅細,我覺得小夥伴們可能會困惑的地方,我在微人事中直接用程式碼做出樣例,然後再輔以詳細的文字解釋,這樣對於大部分小夥伴而言,都能夠快速理解這個專案了。
這個專案建立之初,一開始就定位是一個學習專案,目的就是幫助大家建立前後端分離開發知識體系,搞定前後端分離開發中常見的坑,因此,一旦將專案的框架搭建成功,大家理解了前後端分離架構中的各個細節,剩下的業務不過是堆程式碼,技術上已經沒有挑戰了,這也是這個專案最近一段時間更新慢的原因。
這是我和大家分享的第二點經驗,專案要有價值。
3. 適當宣傳
微人事和 V 部落剛剛上線的時候,我的相關文章被慕課網猛推過幾次,當時就讓微人事受到了比較多的關注,印象中,大概不到一個月的時間,star 數就超過 1k 了。
由於文件比較詳細,很多大佬在整理相關資料的時候都會加上微人事專案,很多小夥伴可能見過標題類似下面這樣的文章:
- 13個優秀的 Spring Boot 學習專案
- 開源的13個Spring Boot 優秀學習專案!
- 六月份 GitHub 上最受歡迎的開源專案
- 七月份 GitHub 上最受歡迎的開源專案
....
這一類的文章大部分都會收錄微人事專案,進而將微人事專案曝光給更多小夥伴去學習。
今年七月份,有感於 1 年前公司倒閉時的無助,鬆哥寫了一篇文章介紹了微人事專案的誕生過程:
- 公司倒閉 1 年了,而我當年的專案上了 GitHub 熱榜
沒想到這篇文章被很多大佬轉發,單單在知乎上這篇文章的閱讀量就超過 12w,那一段時間,微人事專案也被很多有需要的小夥伴關注到了。
宣傳這一塊,我的經驗是如果專案確實幫助到了很多小夥伴,對很多人而言有價值,你會發現平臺,一些有影響力的技術牛人會自然的幫你推。所以,我還是建議將重心放在專案上。所謂家有梧桐樹,引得鳳凰來。
這是我介紹的第三點經驗,適當宣傳。
好了,一點點不太成熟的經驗分享給小夥伴們,希望能幫到大家。
關注公眾號【江南一點雨】,專注於 Spring Boot+微服務以及前後端分離等全棧技術,定期視訊教程分享,關注後回覆 Java ,領取鬆哥為你精心準備的 Java 乾貨!
相關推薦
已知一個字符串S 以及長度為n的字符數組a,編寫一個函數,統計a中每個字符在字符串中的出現次數
lin sta imp scanner col div created rip void import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/6 21:
微人事 star 數超 10k,如何打造一個 star 數超 10k 的開源專案
看了下,微人事(https://github.com/lenve/vhr)專案 star 數超 10k 啦,鬆哥第一個 star 數過萬的開源專案就這樣誕生了。 兩年前差不多就是現在這個時候,鬆哥所在的公司業績下滑嚴重,關門倒閉已成定局,很多同事在謀劃的新的出路,鬆哥則被公司留下來善後,在一段並不太忙碌的
屬性只能在構造函數中定義,在其他函數中不能定義,只能引用,
int 構造 init ini elf div 局部變量 log 定義 1 class aa(): 2 3 def __init__(self): 4 self.cc = 6 5 def do(self): 6
給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。
刪除 oid ext void print eno 只有一個 尾結點 tdi 鏈表結構如下: typedef struct Node{ int num; struct Node *next; }NodeHead,*Nodes; 刪除函數如下: void
在linux程序裏面,知道一個函數地址,改函數是屬於某個動態庫的,怎麽樣得到這個動態庫的全【轉】
main 動態庫 360doc 復制 address 函數 地址 ati content 轉自:http://www.360doc.com/content/17/1012/11/48326749_694292472.shtml 另外dl_iterate_phdr可以查到當
寫數據模板,需要重新指定數據上下文
class temp method ring name trigger blog att cell <DataGridTemplateColumn Header="位置信息" Width="*"> <DataGridTemplateColumn.C
函數與字典,可選參數和while語句結合的簡單應用
函數python函數可以與各種語句相結合,以達到提高效率簡化流程的目的: 通過函數創建字典eg. 將歌手與專輯對應,並儲存在字典當中 def make_ablum(name, album): """返回整潔的字典格式""" album_details = {‘singer‘: name,
薪酬數據分析,第二式:數據透視表
.com src OS body png 來源 技術分享 圖片 技術 五個要素: 數據來源 行字段 列字段 值字段(統計和匯總功能) 篩選器 薪酬數據分析,第二式:數據透視表
述函數的作用,瀏覽器執行函數的過程
函數代碼 編程 tex defined ext 初始化 pos 才有 一個 作用:在對象裏是個方法,計算,把方法封裝起來,使編程更簡便。 一個函數的執行過程分為兩個階段:(1)建立執行環境;(2)執行函數代碼。 在建立執行環境(execution context)的階段,函
android 方法數超過65k,解決dex方法數超過65536
65k android應用程序方法超限 解決android dex文件方法數過 最近有朋友在問我,為什麽我就加了一個類/一個庫突然跑不起來了。 排查方式: 1、確認你的代碼/引用沒有問題 2、檢查是否是65k問題 今天主要是解決 排查方式2的步驟,這個原因主要是因為你的apk包方法數過大。 現在
數組filter()參數詳解,巧用filter()數組去重
查找 這樣的 一次循環 lte console 得出 func AS body 數組方法挺多,但是用來用去可能也就foreach,splice以及slice接觸較多,filter()說實話之前也沒過多了解。其實filter()為數組提供過濾功能,它會遍歷數組所
vue中循環一個數組,不顯示的問題,弄一個假數據,它反而會循環出來?why?
UC ans res ram 最好的 his get 一個 () 核心:就時this指向的問題,這種情況下最好打印出this看一下 可以在頁面渲染出那個數組 <div>{{listData}}</div>就會看見神奇的事情,竟然時空的解決方案: ge
java-利用多線程Runnable,公用一個參數問題
案例 runnable syn run 循環 ace 思路 println 窗口 案例: 售貨員賣票問題,一個旅遊景點有40張票,開啟了兩個買票的窗口,請用線程的方式,進行模擬售貨員賣票過程,並進行分析。 思路:景點的40張票是一個共享票池,當進行售票時,進行票數確認售票和
[轉載]Tensorflow 的reduce_sum()函數的axis,keep_dim這些參數到底是什麽意思?
https 二維 應該 知乎 數量 轉載 sum 元素 歸約 轉載鏈接:https://www.zhihu.com/question/51325408/answer/125426642來源:知乎 這個問題無外乎有三個難點: 什麽是sum 什麽是reduce
為反反爬蟲,打造一個自己的IP池?Python獲取西刺代理IP並驗證!
胡蘿蔔醬最近在爬取知乎使用者資料,然而爬取不了一會,IP就被封了,所以去爬取了西刺代理IP來使用。 這裡爬取的是西刺國內高匿IP。我們需要的就是這一串數字。 分
SpringBoot整合WebSocket,打造一個聊天室
本文,我們來講下SpringBoot整合WebSocket,打造一個聊天室。 WebSocket 是什麼? WebSocket 是一種網路通訊協議,RFC6455 定義了它的通訊標準。 瞭解計算機網路協議的人應該都知道,HTTP 協議是一種無狀態
在node中介軟體(微服務)架構中,用一個node去部署多個專案比較好,還是一個專案對應一個node比較好?
第一種: 一個專案對應一個node服務; 優點:前端跟node也是可以獨立開發,降低耦合,也可單獨部署; 缺點:一個專案對應一個node,專案多的話,維護不方便; 第二種:一個node下,部署多個專案,可以以這個node作為底盤,在點選進入專案時,讓其載入該專案
某公司的僱員分為以下若干類。寫一個程式,把若干各種型別的員工放在一個Employee 數組裡,寫一個函式,打印出某月每個員工的工資數額
某公司的僱員分為以下若干類:Employee:這是所有員工總的父類,屬性:員工的生日月份。方法:getSalary(int month) 根據引數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100 元。SalariedEmployee:Employee 的子類,拿固定工資的員工。屬性:月薪Hourly
python遞歸練習:生成一個n級深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},寫一個函數定義n級
生成 結果 dict 深度 遞歸 ict nco strong ron 結果#encoding = utf-8#題目:#生成一個n級深度的字典,例如:[1,2,3,4,5,6] 可以生成{1: {2: {3: {4: {6: 5}}}}},寫一個函數定義n級a=[1,2,3
輸入一個十進位制整數,設計遞迴函式,將該整數轉化為一個二進位制數。 思考: 如何將一個十進位制數轉化成一個8進位制和16進位制數。
1,輸入一個十進位制整數,設計遞迴函式,將該整數轉化為一個二進位制數。思考: 如何將一個十進位制數轉化成一個8進位制和16進位制數。 #include<stdio.h> #define N 20 int main() { int a,n,c,k,i; cha