Hello mindenkinek! Szeretném megosztani a nyílt forráskódú könyvtár fejlesztésével kapcsolatos tapasztalataimat, beszélni a folyamatról, és inspirálni önt saját projektek létrehozására.
Tavasszal, miközben Jegor Bugaenko egyik streamjét néztem, megihletett a nyílt forráskódú fejlesztés ötlete. Jegor kijelentette, hogy ha túl akar lépni a hétköznapi fejlesztőn, és keresettebb és egyedibb szakemberré szeretne válni, létre kell hoznia valamit. Legyen szó könyvről, blogról, könyvtárról vagy akár keretrendszerről, az ilyen projektek lehetővé teszik, hogy kitűnjön sok más fejlesztő közül, különösen a mai IT piacon. Ez nemcsak az Ön professzionalizmusát bizonyítja, hanem a terület fejlesztése iránti őszinte elkötelezettséget is.
Mindez elgondolkodtatott: hogyan tűnjek ki igazán a többi fejlesztő közül? Annak ellenére, hogy évekig dolgoztam az informatikában és részt vettem különböző projektekben, még mindig nem volt semmi sajátom – valami, ami megmutathatta volna egyediségemet és professzionalizmusomat.
Újra átnéztem régi kisállat-projektjeimet a GitHubon, de hamar rájöttem, hogy egyik sem volt igazán jelentős. Ezért úgy döntöttem, hogy a nulláról kezdem, és létrehozok valami újat. Tele motivációval és lelkesedéssel azon kezdtem gondolkodni, hogy mit is írhatnék, amire legalább egy kis közönség körében lenne kereslet, és ami megfelelne a képességeimnek.
Két-három napon keresztül elemeztem a nyílt forráskódú projektem ötleteit. Minél többet töprengtem, annál inkább úgy tűnt, hogy már mindent megírtak, és amit még meg kell valósítani, azt egyedül lehetetlen elérni. Hadd mondjam el rögtön: ez félrevezető perspektíva. Ne hagyd, hogy elpusztítsa a lehetőségeidet. Igen, sok minden készült már, de ez nem ok arra, hogy feladja és feladja a saját ötletét.
Most megmagyarázom, miért:
Valami új létrehozásának legfontosabb szempontja egy valós probléma azonosítása és megoldás kínálása. Ez lehet globális kihívás vagy kicsi, de jelentős probléma, amely javításra szorul. Nagyon fontos megérteni, hogy a többi fejlesztő vagy rendszeres felhasználó milyen nehézségekkel néz szembe, és hogyan segíthet nekik leküzdeni ezeket a kihívásokat.
További gondolkodás után vágyat éreztem arra, hogy valami hasznosat hozzak létre a .NET közösség számára – egy kis könyvtárat, amely megkönnyítheti a projektfejlesztést. Mivel elsősorban a .NET-re koncentrálok, úgy döntöttem, hogy arra koncentrálok, amit már tudok és jól csinálok. Az egyik ötlet, ami eszembe jutott, egy könyvtár létrehozása volt a billentyűzetről és az egérről érkező beviteli események nyomon követésére.
Egy hónappal ezt megelőzően, miközben egy asztali Windows-alkalmazáson dolgoztam, azzal a feladattal szembesültem, hogy nyomon kövessem a billentyűzet billentyűlenyomásait bizonyos műveletek végrehajtásához. A fő árnyalat az volt, hogy működnie kellett, függetlenül attól, hogy az alkalmazásunk aktív-e. Mivel akkor még nem voltak kész megoldások, natív P/Invoke hívásokat használtam, és sikeresen elértem a kívánt eredményt. Abban a pillanatban nem gondoltam, hogy más fejlesztők is szembesülhetnek ezzel a problémával, és hogy egy kis könyvtár, amely ezt a problémát kezeli, nagyon hasznos lehet.
Igen, ez nem egy könyvtár, amely megváltoztatja bárki életét, de ez az első lépés afelé, hogy létrehozzak valamit. Ez egy lehetőség arra, hogy értékes tapasztalatokat szerezzek, és időt töltsek azzal, hogy valami olyasmivel foglalkozzak, amiért igazán szenvedélyes vagyok, ezért döntöttem úgy, hogy cselekedni fogok.
Az első lépés az ötletek kidolgozása volt a könyvtáram funkcióival kapcsolatban. Azt akartam, hogy a képességei a lehető legszélesebb körben elérhetők és felhasználóbarátak maradjanak. A célom az volt, hogy a legtöbb esetben a felhasználónak ne kelljen 3-5 sornyi kódnál többet írnia.
Az ötletelés során felmerült bennem az az ötlet, hogy a bemenetek nyomon követésére is lehetőség nyílik, hanem annak vezérlésére is. Például kóddal lehet szimulálni a gombnyomásokat vagy billentyűkombinációkat, mozgatni az egérkurzort, letiltani bizonyos billentyűket, hogy a rendszer ne reagáljon a lenyomásukra, vagy akár módosítani is lehet a billentyűkombinációkat. Mindezeket a funkciókat fokozatosan, frissítésekkel vezették be.
Amint véglegesítettem a funkciókészletet, lelkesen elkezdtem a fejlesztést. A kód megírása nem jelentett különösebb kihívást, de a felépítésére és a tisztaságára összpontosítottam, hogy a többi fejlesztő könnyen megérthesse, mit és miért csináltunk. A fejlesztés során többször végeztem globális átalakítást, megváltoztatva a szervezetet és a neveket, valamint a kód egyes részeit külön osztályokba bontva. Különös figyelmet fordítottam arra, hogy a platformfüggő kódot (mivel a jövőben egy cross-platform megoldást terveztem) elválasztani magától a könyvtári kódtól. Ez megakadályozza, hogy a P/Invoke-tól való távolodáskor a teljes kódbázist újra kelljen írni. Arra is szántam időt, hogy XML megjegyzéseket fűzzek hozzá, hogy a könyvtár felhasználói megértsék, mit csinálnak az egyes metódusok vagy osztályok.
A könyvtár első verziójának elkészülte után feltöltöttem a NuGet- be (a .NET platform csomagkezelő rendszere, hasonlóan az npm-hez vagy a pip-hez). Szerettem volna visszajelzést kapni, hogy megértsem, érdekel-e valakit ez a projekt, és melyik irányt kell továbbmennem. A könyvtáram népszerűsítése előtt úgy döntöttem, hogy létrehozok egy README fájlt a GitHub tárolóban, amely tartalmazza a könyvtár céljaira vonatkozó információkat és egy rövid útmutatót a használatához.
Úgy döntöttem, hogy megkeresem első felhasználóimat a Redditen . Miután számos megfelelő közösséget találtam, írtam egy rövid bejegyzést " Nyílt forráskódú C# Library for Handling Keyboard/Mouse Events in Windows UI Apps " címmel. Kicsit megterhelő volt, és őszintén szólva, nem számítottam jelentős eredményre. Meglepő módon azonban kifizetődött. Az egyik bejegyzés körülbelül 14 000 megtekintést és körülbelül 30 pozitív visszajelzést kapott. Hihetetlen érzés volt, bárcsak mindenki átélhetné: a felismerés, hogy a projektre fordított idő nem volt hiábavaló. Bár nem alkottam valami úttörőt, megértettem, hogy vannak, akik valóban hasznosnak találják, és hajlandóak támogatni az erőfeszítéseimet.
Miután összegyűjtöttem az összes visszajelzést, úgy döntöttem, hogy folytatom a fejlesztést, és továbbra is tartom a kapcsolatot a leginkább érdeklődő felhasználókkal, akik megjegyzéseket tettek. Aktívan kommunikáltam velük, és meghallgattam a funkciókra vonatkozó kéréseiket, amelyeket látni szeretnének. A következő hónapban több apró frissítést is kiadtam, majd a felhasználók vonzására összpontosítottam.
A GitHubon létezik egy speciális típusú tárhely, az úgynevezett "wesome" – ezek bizonyos témákban összeállított linkek és források gyűjteményei, például az awesome-dotnet . Célom az volt, hogy népszerűsítsem a könyvtáramat ezekben a repozitóriumokban. Bár ez nem volt könnyű feladat – egy 10-15 csillaggal rendelkező könyvtár a GitHubon nem kelt nagy érdeklődést –, mégis sikerült bekerülnem többbe. Ez jelentősen megnövelte a felhasználói forgalmat, és felhívta a figyelmet a projektemre.
A továbbfejlődés során sok apró feladattal találkoztam, melyek elvégzéséhez olykor hiányzott a kedvem és az energia. Ezért úgy döntöttem, hogy kihasználom a nyílt forráskódú fejlesztés egyik előnyét – olyan rajongókat vonzok be, akik hajlandóak voltak segíteni ezekben a feladatokban. Ehhez az Up-for-Grabs szolgáltatáshoz fordultam, amely az aktív problémákkal rendelkező nyílt forráskódú tárolók listáját nyújtja azoknak, akik szeretnének hozzájárulni. A tárhelyem hozzáadása és több probléma létrehozása után azonnal segítségkérést kaptam.
Miután a könyvtáram több mint ezerszer letöltődött, úgy döntöttem, hogy aktívan dolgozom a dokumentáción. Az első frissítés óta a könyvtár funkcionalitása jelentősen megnőtt, és a README fájlban található példák már nem voltak elegendőek. Az összes lehetséges lehetőség közül a legegyszerűbbet és leginkább elérhetőt választottam: létrehoztam egy külön Markdown fájlt, és részleteztem a könyvtár által kínált összes osztályt. Úgy döntöttem, hogy írok egy kis útmutatót a haladó felhasználók számára, akik teljes mértékben ki szeretnék használni a könyvtár lehetőségeit. Meglepetésemre egy műszaki dokumentáció írására szakosodott srác megkeresett és felajánlotta a segítségét. Segített az anyag megfelelő felépítésében és minden részlet pontos leírásában. Segítségével gyorsan elvégeztük ezt a feladatot.
A nyílt forráskódú fejlesztés nagyszerű lehetőség arra, hogy találkozzon és bővítse hálózatát más programozókkal. Eddig kilenc ember működött közre különböző országokból, köztük az Egyesült Államokból, Ausztráliából, Argentínából, Kanadából, Németországból, Lengyelországból és más országokból. Segítettek a funkcionalitás, az egységtesztek és a dokumentáció írásában. Ráadásul ez egy csodálatos tapasztalatcsere és élvezetes kommunikáció volt. Talán néhány közreműködővel együtt elindíthatunk egy új projektet.
Annak ellenére, hogy munkám és egyéb kötelezettségeim vannak, szeretném folytatni a fejlesztést, és kiadni egy teljes verziót azokkal a funkciókkal, amelyeket úgy gondolom, hogy a könyvtárnak tartalmaznia kell. Jövőbeni terveim között szerepel, hogy platformokon átíveljem, és leválasztom a konkrét felhasználói felületi keretrendszerekről.
Végezetül szeretném összefoglalni mindazt, amit mondtam. Soha ne félj valami újat kipróbálni, és ne állj meg egy helyben. Ha igazán szereted a programozást, és fejlesztőként szeretnél fejlődni, törekedj valami saját létrehozására – legyen az egy kis könyvtár vagy egy szolgáltatás. Soha nem tudhatod, hová vezethet. A könyvtár fejlesztése során nemcsak a programozásban, hanem az emberekkel való találkozásban és az új kapcsolatok kialakításában is örömömet leltem. Azt tervezem, hogy továbbra is részt veszek a nyílt forráskódú fejlesztésben, nem csak a saját projektjeim előmozdításával, hanem a közösségi könyvtárakhoz való hozzájárulással is – ez is nagy élmény.
Azok számára, akik nyílt forráskódú fejlesztéssel szeretnének foglalkozni, ajánlom ezt az útmutatót !
Ha tetszett ez a bejegyzés, hálás lennék, ha egy csillaggal támogatnád a könyvtárat a GitHubon!