यदि आप इस ब्लॉग का अनुसरण कर रहे हैं, तो आप शायद देखा होगा कि मेरे मुख्य ब्लॉगिंग मंच है ... ... चलो इसे "पूर्ण इंजीनियर" कहते हैं.
कि पूरी तरह से जानबूझकर है. यह साइट मेरा जीवित प्रयोगशाला - एक नाटक है जहाँ मैं तकनीक के साथ प्रयोग करते हैं, metamationigion, माप प्रदर्शन विशेषताएँ, और पुनःप्रयोगीय पैकेज बनाते हैं। यह मेरी जीवनीय प्रयोगशाला है। समझा जाता है यह है कि मैं कैसे सीख रहा है क्योंकि के लिए तैयार किया जाना है. समस्या को सुलझाने के द्वारा कि अधिकांश ब्लॉग वास्तव में नहीं है, फिर उन समाधानों को खुला स्रोत पुस्तकालयों के रूप में पैक कर सकते हैं अन्य उपयोग कर सकते हैं.
लेकिन यहाँ बात है: आपको शायद कोई ब्लॉग चलाने की आवश्यकता नहीं है.
यही कारण है कि मैं बनाया है अधिकतर नही मिला BAR ब्लॉगिंग ब्लॉग - यह दिखाने के लिए कि जब आप सभी प्रयोगों को हटाते हैं और पूर्ण अनिवार्य आवश्यकओं पर ध्यान केंद्रित करते हैं। कोई डाटाबेस नहीं बनाता। कोई जटिल फ़ाइल नहीं है। बस एक फ़ोल्डर में, जो वेब पर दिखाई देती है। यह एक ब्लॉग है जब आप इसे एक प्रयोगशाला के रूप में इस्तेमाल नहीं कर रहे हैं।
ध्यान दीजिए: स्रोत से लिंक के लिए लेख का अंत देखिए, मैं इसे जारी रखने की योजना बना रही हूँ म्यूजेट पैकेज जैसे ही मैं सुनिश्चित करने के लिए समय मिलता है यह 100% भरोसेमंद है और यह प्रति एफएओ भयानक नहीं है (इसलिए के6 परीक्षा लेखों के लिए जल्द ही देखो!)
पूरी परियोजना एक सिद्धांत के चारों ओर बनाया गया है: इसे सरल रखें. कोई डाटाबेस नहीं, कोई जावास्क्रिप्ट फ्रेमवर्क बनाने के लिए. सिर्फ एन. एन. एन.
ध्यान दीजिए: आप इस ग्राहक को ऐसे ही तरीके से कर सकते हैं चिह्न चिह्न चिह्न तो बस सर्वर साइट मैप स्थिर है .md फ़ाइलें और यह भी SILLLPELLENENEENENSSE है, लेकिन ... ठीक है यह एक मतलब है.
चलो देखते हैं कि परियोजना किस तरह संगठित है:
Mostlylucid.MinimalBlog/
├── Pages/
│ ├── Index.cshtml # Homepage with post list
│ ├── Post.cshtml # Individual post page
│ ├── Categories.cshtml # List of all categories
│ ├── Category.cshtml # Posts in a category
│ ├── _Layout.cshtml # Shared layout
│ ├── _ViewImports.cshtml # Shared imports
│ └── _ViewStart.cshtml # Layout selection
├── wwwroot/
│ └── css/
│ └── site.css # All the CSS you need
├── MarkdownBlogService.cs # Core blog logic
├── MetaWeblogService.cs # XML-RPC for external editors
├── Program.cs # Application setup
├── appsettings.json # Configuration
└── Mostlylucid.MinimalBlog.csproj # Project file
ब्लॉग का कोर है MarkdownBlogService वर्ग. यह बहुत सरल है कोड का सिर्फ 120 लाइनों है जो संभालता है:
यहाँ यह कैसे काम करता है:
सेवा स्कैन करता है एक निर्देशिका के लिए .md फ़ाइलें तथा सभी को मेमोरी में भारित कर देती हैं:
private List<BlogPost> LoadAllPosts()
{
if (!Directory.Exists(_markdownPath)) return [];
return Directory.GetFiles(_markdownPath, "*.md", SearchOption.TopDirectoryOnly)
.Where(f => Path.GetFileName(f).Count(c => c == '.') == 1) // Only base .md files
.Select(ParseFile)
.Where(p => p is { IsHidden: false })
.OrderByDescending(p => p!.PublishedDate)
.ToList()!;
}
चतुर फिल्टरों पर ध्यान दीजिए: Count(c => c == '.') == 1 हम सिर्फ आधार मिलता है सुनिश्चित करें .md फ़ाइलों, अनुवादित संस्करण जैसे नहीं post.ar.md या post.de.md (जब आप अनुवाद बाद में जोड़ना चाहते हैं).
प्रत्येक चिह्न फ़ाइल को नीचे रखता है एक साधारण अधिवेशन के बाद:
# Post Title
Your content here...
पारलस से इस मेटाडाटा को रेगुलर एक्सप्रेशन तथा मार्कडिस्क एएसटी का उपयोग करके निकाल दिया जाता है:
private BlogPost? ParseFile(string filePath)
{
var markdown = File.ReadAllText(filePath);
var slug = Path.GetFileNameWithoutExtension(filePath);
var document = Markdown.Parse(markdown, _pipeline);
// Extract title from first H1
var title = document.Descendants<HeadingBlock>()
.FirstOrDefault(h => h.Level == 1)?
.Inline?.FirstChild?.ToString() ?? slug;
// Extract categories:
var categoryMatch = CategoryRegex().Match(markdown);
var categories = categoryMatch.Success
? categoryMatch.Groups[1].Value.Split(',', StringSplitOptions.TrimEntries)
: [];
// Extract date:
var dateMatch = DateTimeRegex().Match(markdown);
var publishedDate = dateMatch.Success && DateTime.TryParse(dateMatch.Groups[1].Value, out var dt)
? dt : File.GetCreationTimeUtc(filePath);
return new BlogPost
{
Slug = slug,
Title = title,
Categories = categories,
PublishedDate = publishedDate,
HtmlContent = Markdown.ToHtml(markdown, _pipeline),
IsHidden = markdown.Contains("<hidden")
};
}
सेवा में जो भी तरीका इस्तेमाल किया जाता है IMemoryCache प्रत्येक निवेदन पर फ़ाइलों को फिर से पढ़ने तथा फिर से व्यवस्थित करने से बचने के लिए:
public IReadOnlyList<BlogPost> GetAllPosts()
{
return cache.GetOrCreate("all_posts", entry =>
{
entry.SetOptions(CacheOptions);
return LoadAllPosts();
}) ?? [];
}
कैश प्रविष्टियों के पास 30 मिनट की दूरी होती है तथा 2 घंटे के बीतने पर कुल दूरी बीत जाती है. सरल, प्रभावी होता है.
पूरा अनुप्रयोग सेटअप सिर्फ 43 पंक्तियाँ है: Razors पृष्ठ, स्मृति कैश, दो एकलटन सेवा, स्थिर फ़ाइल सेवा, और एक मेटा वेब ब्राउज़र XML-RPC विस्तार. सभी कैश्स एकलटन के रूप में सक्षम नहीं हैं जब तक कि फ़ाइलें परिवर्धित नहीं की गई हैं.
यूआई शुद्ध सर्वर फ़ॉर्मेट है. कोई जावास्क्रिप्ट नहीं है, कोई HMMX, कोई एएसडी.j. s. sw, पोस्ट पोस्ट. @Html.Raw(post.HtmlContent) किसी के साथ [OutputCache] घंटे भर के HTML चांस के लिए गुण. चार पृष्ठ कुल, हर 30 पंक्ति के नीचे.
पूरा दृश्य डिजाइन सिर्फ 55 लाइनों के साथ एक एकल सीएसएस फ़ाइल द्वारा नियंत्रित किया जाता है. यह उनके लिए सीएसएस कस्टम गुण उपयोग करता है और एक साफ, काले GiB- font- stack रूप में बनाया जाता है:
:root {
--bg: #0d1117;
--bg-card: #161b22;
--text: #c9d1d9;
--text-muted: #8b949e;
--accent: #58a6ff;
--border: #30363d;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
max-width: 48rem;
margin: 0 auto;
padding: 2rem 1rem;
}
/* ... more styles ... */
कोई प्री- प्रोसेसर नहीं. कोई चरण नहीं बनाने का कोई हजारों यूटिलिटी क्लास नहीं. सिर्फ साफ, पढ़ने लायक सीएसएस जो काम करता है.
उन लेखकों के लिए जो समर्पित चिह्न संपादक पसंद करते हैं मार्क इथियूस्टरइस परियोजना में एक पूरा केनवावाटर है. यह XML-RPC API को बाहरी संपादक को अनुमति देता है:
कार्यान्वयन इसमें है MetaWeblogService.cs और पूर्ण XML-RPPC प्रोटोकॉल संभालता है, निवेदनों और हल बनाने के तरीकों. इसका अर्थ है कि आप अपने पसंदीदा संपादक में अपने ब्लॉग पोस्ट लिख सकते हैं और उन्हें सीधे अपने ब्लॉग में प्रकाशित कर सकते हैं.
सम्पूर्ण कॉन्फ़िगरेशन फ़ाइल सिर्फ 14 पंक्तियाँ है:
{
"MarkdownPath": "../Mostlylucid/Markdown",
"ImagesPath": "wwwroot/images",
"MetaWeblog": {
"Username": "admin",
"Password": "changeme",
"BlogUrl": "http://localhost:5000"
},
"Logging": {
"LogLevel": {
"Default": "Information"
}
}
}
MarkdownPath - जहां अपने निशान नीचे फ़ाइलें रहते हैंImagesPath - जहाँ चित्र जमा हैंMetaWeblog बाहरी संपादक का उपयोग करने के लिए -जैसा कि ऊपर बताया गया है वह तो उपलब्ध होगा लेकिन अभी तक नहीं:)
ब्लॉग अब Nuoc पैकेज के रूप में उपलब्ध है, जिससे किसी भी तरह से किसी भी भाषा में जोड़ने के लिए साधारण बनाया जा सकता है. NueT अनुप्रयोग:
dotnet add package mostlylucid.MinimalBlog
तब अपने में Program.cs:
builder.Services.AddRazorPages();
builder.Services.AddMinimalBlog(options =>
{
options.MarkdownPath = "Markdown";
options.ImagesPath = "wwwroot/images";
options.EnableMetaWeblog = false; // Optional, defaults to true
});
var app = builder.Build();
app.UseStaticFiles();
app.UseMinimalBlog();
app.MapRazorPages();
app.Run();
यही कारण है कि यह है - सिर्फ दो तरीके कॉल (e)AddMinimalBlog और UseMinimalBlog) और आपके पास एक काम करने का ब्लॉग है.
चुने गए नमूना परियोजना को चलाने के लिए:
cd Mostlylucid.MinimalBlog
dotnet run
भेंट http://localhost:5000 और आप कॉन्फ़िगर्ड पथ से चिह्न नीचे की फ़ाइलों के साथ ब्लॉग देखेंगे.
नए ब्लॉग पोस्ट बनाने के लिए:
.md आपके विन्यस्त में फ़ाइल MarkdownPath# Your Post Title
Your content here...
छवियों को जोड़ने के लिए, सिर्फ अपने विन्यस्त में इन्हें जगह दें ImagesPath निर्देशिका और उन्हें अपने निशान नीचे में संदर्भ:

इस न्यूनतम ब्लॉग को जानबूझकर शामिल नहीं किया गया है:
ये गुण सभी के हैं संभव जोड़ने के लिए, लेकिन वे डिफ़ॉल्ट से शामिल नहीं हैं क्योंकि अधिकांश छोटे ब्लॉग उन्हें जरूरत नहीं है.
इसके सरल होने के बावजूद, यह ब्लॉग है तेज:
मीडिया ब्लॉग के लिए एक छोटे से ब्लॉग (१९००० पोस्ट) के लिए, यह डिजाइन सबसे डाटाबेस- अप ब्लॉग मंचों को पार कर जाएगा.
प्रयोक्ता ज़्यादातर लोगों ने इस बारे में बात की । कब:
उपयोग पूरा शिक्षण मंच कब:
आधुनिक वेब विकास दुनिया में, हम अकसर डिफ़ॉल्ट से जटिल समाधान के लिए पहुँच जाते हैं. एक ब्लॉग की जरूरत है? बेहतर सेट एक डाटाबेस, एक आईआईएस सेट, अप उत्प्रवासन नियत करें, COMMols जोड़ने, लागू करें, पृष्ठभूमि कार्य कॉन्फ़िगर करें...
लेकिन कभी - कभी सरल समाधान है दाहिना समाधान. अधिकांश विजुअल ब्लॉग्स साबित करता है कि आप एक कार्यान्वित कर सकते हैं, तेज, और स्थिर ब्लॉग मंच के साथ:
यही कारण है कि कोड कुल मिलाकर 520 लाइनों से कम पूरी ब्लॉगिंग मंच के लिए।
परियोजना दोनों कार्यान्वित ब्लॉग मंच तथा एक स्मरण दोनों के रूप में काम करती है: आप पहले जटिलता को जोड़ने से पहले अपने आप से पूछें कि क्या आपको सचमुच इसकी आवश्यकता है. कभी कभी-कभी एक फ़ोल्डर जो आपको आवश्यकता है.
आप इसमें पूरा स्रोत कोड पा सकते हैं अधिकांश अनस्वरित. विकिंजबुक डिरेक्ट्री मुख्य भंडार के. मैं Nuget पैकेज को छोड़ देंगे जैसे ही मैं कोड के साथ खुश हूँ.
ब्लॉगिंग धन्य है!
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.