- यह open source project केवल C और Win32 API से बना एक हल्का native Windows Todo application है
- किसी framework पर निर्भर हुए बिना यह न्यूनतम आकार (अधिकतम 26.5KB) में चलता है, और advanced Windows GUI व system integration को सीधे implement करता है
- Todo items जोड़ना, संपादित करना, हटाना, complete mark करना जैसी बुनियादी सुविधाओं के साथ system tray integration और auto-start option जैसी वास्तविक productivity features भी देता है
- storage binary file के रूप में persistent है, और AppData folder में अधिकतम 100 todo items सहेजता है
- बड़े frameworks के बिना OS के बेहद करीब classic programming style और हल्का runtime environment इसकी खास ताकत हैं
🌟 Simple Todo (C / WinAPI)
प्रोजेक्ट अवलोकन
- यह project केवल C और Win32 API का उपयोग करके एक आधुनिक native Windows Todo app बनाता है
- यह advanced Windows GUI programming और system integration capabilities दिखाता है
- project का आकार बहुत छोटा है (अधिकतम 26.5KB), और यह Windows का native look and feel बनाए रखता है
✨ मुख्य फीचर्स
- Todo items बनाना, edit करना, delete करना संभव है
- tasks को complete mark किया जा सकता है
- AppData में persistent storage होने से data हमेशा सुरक्षित रहता है
- system tray के साथ integration है, इसलिए minimize करने पर app tray में चला जाता है
- इसका look native Windows style में है
- Windows startup पर auto-run option दिया गया है
🛠️ तकनीकी विवरण
- पूरा code शुद्ध C में लिखा गया है
- GUI implementation के लिए केवल Win32 API का उपयोग किया गया है
- tiny executable size (UPX compression के साथ 26.5KB)
- system tray integration feature
- manifest के जरिए modern visual style लागू किया गया है
💾 डेटा स्टोरेज
- सभी todo items एक ही binary file में store किए जाते हैं
- storage path:
%APPDATA%\\TodoApp\\todos.dat
- यह binary format है और इसमें अधिकतम 100 items store किए जा सकते हैं
📋 आवश्यकताएँ
- Windows operating system environment आवश्यक है
- MinGW-w64 (GCC compiler) और Windows SDK आवश्यक हैं
🎮 उपयोग का तरीका
bin/todo.exe चलाने के बाद interface के जरिए ये काम किए जा सकते हैं
- "Add" button से नया todo जोड़ें
- item चुनकर "Edit" क्लिक करके उसे बदलें
- "Delete" से item हटाएँ
- "Complete" से complete mark करें
- हर item की priority set की जा सकती है
🏗️ प्रोजेक्ट संरचना
src/ folder में main entry point (main.c), todo management logic (todo.c), struct declarations (todo.h), GUI implementation (gui.c) मौजूद हैं
bin/ में compiled executable रखा गया है
- build script (
build.bat) और project documentation शामिल हैं
🔧 विकास तत्व
- Win32 API: window management और पूरे GUI implementation के लिए
- Common Controls: modern UI elements के उपयोग के लिए
- UXTheme: Windows visual style लागू करने के समर्थन के लिए
- File I/O: persistent data storage के लिए
📝 लाइसेंस
- MIT License के तहत इसे स्वतंत्र रूप से उपयोग और modify किया जा सकता है
🤝 योगदान गाइड
- Pull Request का स्वागत है
- कोई भी project में योगदान कर सकता है
📫 संपर्क और लिंक
3 टिप्पणियां
इसमें एक अलग ही रोमांस है।
Hacker News टिप्पणियाँ
strcpy,sprintfका उपयोग है; अगर प्रोग्रामिंग को गंभीरता से कर रहे हो तो length-checked variants ज़रूर इस्तेमाल करने चाहिए। हैरानी है कि compiler ने तुरंत warning नहीं दी। win32 API में standard C library functions को replace करने वाले कई functions हैं। अगर executable size और कम करना हो, तो<Windows.h>तक सीमित रहकरcstdlibके बिना लिखने की सलाह दूँगा।memsetकी जगहZeroMemory,memcpyकी जगहCopyMemoryइस्तेमाल कर सकते हो। बेशक raw C coding एक बिंदु पर बहुत पीड़ादायक हो जाती है, लेकिन शुरुआत की कुछ बार pure C में खुद करना सीखने के लिए सबसे ज़्यादा मददगार होता है। इससे इन छोटी-छोटी चीज़ों को संभालने का sense बनता है। अगर win32 GUI programming और करना चाहते हो तो WTL (Windows Template Library) भी recommend करना चाहूँगा, क्योंकि यह win32 API को C++ में wrap करके उसके काम करने का तरीका काफ़ी आसान बना देती हैstrcpyकी जगहstrncpyतो इस्तेमाल करना ही चाहिए, नहीं तो हर कोई बार-बार टोकता रहेगा। Zig इस्तेमाल करने की एक बड़ी वजह यह भी है कि ऐसी आम गलतियाँ कम हो जाती हैं। वैसे C भी ठीक हैmemsetकी जगहZeroMemory,memcpyकी जगहCopyMemoryवाली बात पर, MSVC intrinsicsrep stos/movsinstructions इस्तेमाल करते हैं, इसलिए function call से भी छोटा code बनता है और import table size भी घटती हैmemsetऔरmemcpyकी जगहZeroMemory,CopyMemoryदेने की ज़रूरत क्यों पड़ी; आखिर मौजूदा C standard library के बजाय ऐसा अलग क्यों बनाया गयाCreateWindowकॉल करने के बजाय.rcfiles में dialog resources लिखकर (Visual Studio में dialog editor भी मिलता है)CreateDialogइस्तेमाल किया जाता था। तब सारे controls एक साथ बन जाते थे। application manifest जोड़ने पर modern UI style और high-DPI support भी मिल सकता हैuser32:SetProcessDpiAwarenessContext,shcore:SetProcessDpiAwareness,user32:SetProcessDPIAware) से DPI awareness सेट करने की कोशिश करता है। अगर version बहुत पुराना हो तो कुछ भी कॉल नहीं करताbuild.batcore.autocrlf=falsesetting पर ठीक से काम नहीं करता। इसेcore.autocrlf=trueकरने और दोबारा clone करने पर build सफल हुआ। mingw का एक खास toolchain 102KB का.exeनिकालता है, यानी 278KB से कहीं अधिक efficient। और कम करना हो तो GCC में extra flags दे सकते हैं।gcc -s -Oz -fltoसे 47KB तक भी संभव है। अगर सिर्फ binary size में रुचि है तो सुधार की बहुत गुंजाइश हैquickrun.exeभी बनाया था। सिर्फ C और pure Win32 API का उपयोग किया गया था। binary size घटाने के लिए कोई trick नहीं, Mingw32 compiler इस्तेमाल किया गया, और यह aliases से ऐप्स जल्दी लॉन्च करने वाला GUI ऐप थाstd::string,std::array,std::list, anonymous namespaces इस्तेमाल करें औरmallocहटा दें, तो शायद code आधा रह जाए और bugs भी कम होंstd::string,std::listमें बदल देने से assembly output वैसा ही नहीं रह जाएगा। इससे लगता है कि अंदरूनी कामकाज की समझ नहीं हैstd::stringकी जगहLPWSTR(wide string) API के साथ ज़्यादा naturally फिट बैठता है और वही recommend किया जाएगा।char[]जैसे पुराने तरीके से बेहतरLPWSTRहै।std::arrayयाlistसे code शायद बेहतर नहीं होगालगता है बड़े भैया की साँस की गर्मी यहाँ तक पहुँच रही है...