# ज़्यादातर लोगों ने इस ब्लॉग पर दस्तखत किए हैं, वे कितने सरल तरीके से अपनी मातृभाषा में बोल रहे हैं ?

<!--category-- ASP.NET, Markdown, Blogging -->
<datetime class="hidden">2025-12-01T12:00</datetime>

## परिचय

यदि आप इस ब्लॉग का अनुसरण कर रहे हैं, तो आप शायद देखा होगा कि मेरे मुख्य ब्लॉगिंग मंच है ... ... चलो इसे "पूर्ण इंजीनियर" कहते हैं.

**कि पूरी तरह से जानबूझकर है.** यह साइट मेरा जीवित प्रयोगशाला - एक नाटक है जहाँ मैं तकनीक के साथ प्रयोग करते हैं, metamationigion, माप प्रदर्शन विशेषताएँ, और पुनःप्रयोगीय पैकेज बनाते हैं। यह मेरी जीवनीय प्रयोगशाला है। *समझा जाता है* यह है कि मैं कैसे सीख रहा है क्योंकि के लिए तैयार किया जाना है. समस्या को सुलझाने के द्वारा कि अधिकांश ब्लॉग वास्तव में नहीं है, फिर उन समाधानों को खुला स्रोत पुस्तकालयों के रूप में पैक कर सकते हैं अन्य उपयोग कर सकते हैं.

लेकिन यहाँ बात है: **आपको शायद कोई ब्लॉग चलाने की आवश्यकता नहीं है.**

यही कारण है कि मैं बनाया है **अधिकतर नही मिला _BAR_ ब्लॉगिंग ब्लॉग** - यह दिखाने के लिए कि जब आप सभी प्रयोगों को हटाते हैं और पूर्ण अनिवार्य आवश्यकओं पर ध्यान केंद्रित करते हैं। कोई डाटाबेस नहीं बनाता। कोई जटिल फ़ाइल नहीं है। बस एक फ़ोल्डर में, जो वेब पर दिखाई देती है। यह एक ब्लॉग है जब आप इसे एक प्रयोगशाला के रूप में इस्तेमाल नहीं कर रहे हैं।

> ध्यान दीजिए: स्रोत से लिंक के लिए लेख का अंत देखिए, मैं इसे जारी रखने की योजना बना रही हूँ [म्यूजेट पैकेज](https://www.nuget.org/packages?q=mostlylucid&includeComputedFrameworks=true&prerel=true&sortby=relevance) जैसे ही मैं सुनिश्चित करने के लिए समय मिलता है यह 100% भरोसेमंद है और यह प्रति एफएओ भयानक नहीं है (इसलिए के6 परीक्षा लेखों के लिए जल्द ही देखो!)

[TOC]

## Philoto·o·oy: कम होता है

पूरी परियोजना एक सिद्धांत के चारों ओर बनाया गया है: **इसे सरल रखें**. कोई डाटाबेस नहीं, कोई जावास्क्रिप्ट फ्रेमवर्क बनाने के लिए. सिर्फ एन. एन. एन.
ध्यान दीजिए: आप इस ग्राहक को ऐसे ही तरीके से कर सकते हैं [चिह्न चिह्न चिह्न](https://github.com/markdown-it/markdown-it) तो बस सर्वर साइट मैप स्थिर है `.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 लाइनों है जो संभालता है:

1. डिरेक्ट्री से स्थिर फ़ाइलों को पढ़ा जा रहा है
2. मेटाडाटा (शीर्षक, वर्ग, प्रकाशित तिथि)
3. मार्किग के उपयोग से एचटीएमएल को नीचे घुमाया जा रहा है
4. स्मरण में सब कुछ कैश कर रहे

यहाँ यह कैसे काम करता है:

### पोस्ट्स लोड किया जा रहा है

सेवा स्कैन करता है एक निर्देशिका के लिए `.md` फ़ाइलें तथा सभी को मेमोरी में भारित कर देती हैं:

```csharp
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` (जब आप अनुवाद बाद में जोड़ना चाहते हैं).

### मेटाडाटा पारसिंग किया जा रहा है

प्रत्येक चिह्न फ़ाइल को नीचे रखता है एक साधारण अधिवेशन के बाद:

```markdown
# Post Title

<!-- category -- Category1, Category2 -->
<datetime class="hidden">2024-11-30T12:00</datetime>

Your content here...
```

पारलस से इस मेटाडाटा को रेगुलर एक्सप्रेशन तथा मार्कडिस्क एएसटी का उपयोग करके निकाल दिया जाता है:

```csharp
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: <!-- category -- Cat1, Cat2 -->
    var categoryMatch = CategoryRegex().Match(markdown);
    var categories = categoryMatch.Success
        ? categoryMatch.Groups[1].Value.Split(',', StringSplitOptions.TrimEntries)
        : [];

    // Extract date: <datetime class="hidden">2024-01-01T00:00</datetime>
    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` प्रत्येक निवेदन पर फ़ाइलों को फिर से पढ़ने तथा फिर से व्यवस्थित करने से बचने के लिए:

```csharp
public IReadOnlyList<BlogPost> GetAllPosts()
{
    return cache.GetOrCreate("all_posts", entry =>
    {
        entry.SetOptions(CacheOptions);
        return LoadAllPosts();
    }) ?? [];
}
```

कैश प्रविष्टियों के पास 30 मिनट की दूरी होती है तथा 2 घंटे के बीतने पर कुल दूरी बीत जाती है. सरल, प्रभावी होता है.

## अनुप्रयोग सेटअप: प्रोग्राम.cs

पूरा अनुप्रयोग सेटअप सिर्फ 43 पंक्तियाँ है: Razors पृष्ठ, स्मृति कैश, दो एकलटन सेवा, स्थिर फ़ाइल सेवा, और एक मेटा वेब ब्राउज़र XML-RPC विस्तार. सभी कैश्स एकलटन के रूप में सक्षम नहीं हैं जब तक कि फ़ाइलें परिवर्धित नहीं की गई हैं.

## यूआई: सादा राजेर पृष्ठ

यूआई शुद्ध सर्वर फ़ॉर्मेट है. कोई जावास्क्रिप्ट नहीं है, कोई HMMX, कोई एएसडी.j. s. sw, पोस्ट पोस्ट. `@Html.Raw(post.HtmlContent)` किसी के साथ `[OutputCache]` घंटे भर के HTML चांस के लिए गुण. चार पृष्ठ कुल, हर 30 पंक्ति के नीचे.

## स्टाइल: सीएसएस की 55 पंक्तियाँ

पूरा दृश्य डिजाइन सिर्फ 55 लाइनों के साथ एक एकल सीएसएस फ़ाइल द्वारा नियंत्रित किया जाता है. यह उनके लिए सीएसएस कस्टम गुण उपयोग करता है और एक साफ, काले GiB- font- stack रूप में बनाया जाता है:

```css
: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 ... */
```

कोई प्री- प्रोसेसर नहीं. कोई चरण नहीं बनाने का कोई हजारों यूटिलिटी क्लास नहीं. सिर्फ साफ, पढ़ने लायक सीएसएस जो काम करता है.

## पारितोषिक: मेटा हमब्लॉगर

उन लेखकों के लिए जो समर्पित चिह्न संपादक पसंद करते हैं [मार्क इथियूस्टर](https://markdownmonster.west-wind.com/)इस परियोजना में एक पूरा केनवावाटर है. यह XML-RPC API को बाहरी संपादक को अनुमति देता है:

- पोस्टों की सूची
- नए पोस्ट बनाएँ
- वर्तमान पोस्ट संपादित करें
- पोस्ट मिटाएँ
- छवि अपलोड करें
- श्रेणियाँ पुनःप्राप्त करें

कार्यान्वयन इसमें है `MetaWeblogService.cs` और पूर्ण XML-RPPC प्रोटोकॉल संभालता है, निवेदनों और हल बनाने के तरीकों. इसका अर्थ है कि आप अपने पसंदीदा संपादक में अपने ब्लॉग पोस्ट लिख सकते हैं और उन्हें सीधे अपने ब्लॉग में प्रकाशित कर सकते हैं.

## कॉन्फ़िगरेशन

सम्पूर्ण कॉन्फ़िगरेशन फ़ाइल सिर्फ 14 पंक्तियाँ है:

```json
{
  "MarkdownPath": "../Mostlylucid/Markdown",
  "ImagesPath": "wwwroot/images",
  "MetaWeblog": {
    "Username": "admin",
    "Password": "changeme",
    "BlogUrl": "http://localhost:5000"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}
```

- `MarkdownPath` - जहां अपने निशान नीचे फ़ाइलें रहते हैं
- `ImagesPath` - जहाँ चित्र जमा हैं
- `MetaWeblog` बाहरी संपादक का उपयोग करने के लिए -

## एनयूएबल पैकेज के रूप में इस्तेमाल किया जा रहा है

> जैसा कि ऊपर बताया गया है वह तो उपलब्ध होगा लेकिन अभी तक नहीं:)

ब्लॉग अब Nuoc पैकेज के रूप में उपलब्ध है, जिससे किसी भी तरह से किसी भी भाषा में जोड़ने के लिए साधारण बनाया जा सकता है. NueT अनुप्रयोग:

```bash
dotnet add package mostlylucid.MinimalBlog
```

तब अपने में `Program.cs`:

```csharp
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`) और आपके पास एक काम करने का ब्लॉग है.

## नमूना परियोजना चला रहा है

चुने गए नमूना परियोजना को चलाने के लिए:

```bash
cd Mostlylucid.MinimalBlog
dotnet run
```

भेंट `http://localhost:5000` और आप कॉन्फ़िगर्ड पथ से चिह्न नीचे की फ़ाइलों के साथ ब्लॉग देखेंगे.

## विषयवस्तु बना रहा है

नए ब्लॉग पोस्ट बनाने के लिए:

1. नया बनाएँ `.md` आपके विन्यस्त में फ़ाइल `MarkdownPath`
2. मानक मेटाडाटा जोड़ें:
   ```markdown
   # Your Post Title
   
   <!-- category -- YourCategory, AnotherCategory -->
   <datetime class="hidden">2024-11-30T12:00</datetime>
   
   Your content here...
   ```
3. फ़ाइल सहेजें
4. कैश 30 मिनट के भीतर खत्म हो जाएगा (या app फिर से प्रारंभ करें)

छवियों को जोड़ने के लिए, सिर्फ अपने विन्यस्त में इन्हें जगह दें `ImagesPath` निर्देशिका और उन्हें अपने निशान नीचे में संदर्भ:

```markdown
![Alt text](your-image.jpg)
```

## क्या गुम है ( उद्देश्य पर)

इस न्यूनतम ब्लॉग को जानबूझकर शामिल नहीं किया गया है:

- **टिप्पणियाँ** - अगर आवश्यक हो तो तीसरी-निरशन सेवा का उपयोग करें
- **ढूंढें** - श्रेणी के साथ संगठित अपनी सामग्री रखें
- **टैग्स** - छोटे ब्लॉग के लिए वर्ग पर्याप्त हैं
- **RSS/ तबम** - यदि आपको इसकी ज़रूरत है तो जोड़ने के लिए सरल
- **सत्यापन** - मेटा हमब्लॉग एपीआई सिर्फ मूल प्राधिकार का प्रयोग करते हैं
- **विश्लेषण** - जावास्क्रिप्ट जोड़ें यदि चाहता है
- **सीक्वेंस** - मूल मेटा टैग के साथ ठीक काम करता है
- **छवियाँ कम करें** - ब्राउज़र इसे संभालता है
- **गहरा/रिक प्रसंग टॉगल** - एक प्रसंग पर्याप्त है

ये गुण सभी के हैं *संभव* जोड़ने के लिए, लेकिन वे डिफ़ॉल्ट से शामिल नहीं हैं क्योंकि अधिकांश छोटे ब्लॉग उन्हें जरूरत नहीं है.

## परफ़ॉर्मेंस कैरेक्टर्स

इसके सरल होने के बावजूद, यह ब्लॉग है **तेज**:

- **मेमोरी कैशिंग** पहले लोड करने के बाद कोई फ़ाइल नहीं
- **आउटपुट कंचा कैशिंग** इसका अर्थ है कि पहले निवेदन के बाद कोई राजेर रेंडरिंग नहीं
- **कोई डाटाबेस नहीं** इसका अर्थ है कि ऊपर की ओर कोई क्वैरी नहीं
- **कोई जावास्क्रिप्ट नहीं** इसका अर्थ है कि पृष्ठ बोझ कम करें
- **सादा सीएसएस** इसका अर्थ है अधिकतम स्टाइलशीट पारसिंग

मीडिया ब्लॉग के लिए एक छोटे से ब्लॉग (१९००० पोस्ट) के लिए, यह डिजाइन सबसे डाटाबेस- अप ब्लॉग मंचों को पार कर जाएगा.

## इस वी. में उपयोग करने के लिए जब...

प्रयोक्ता **ज़्यादातर लोगों ने इस बारे में बात की ।** कब:

- आप एक व्यक्तिगत ब्लॉग प्रारंभ कर रहे हैं
- आपके पास 500 से कम पोस्टें हैं
- आप को अनेक भाषाओं की जरूरत नहीं है
- आप चीजों को सरल रखना चाहते हैं
- आप चिह्न नीचे फ़ाइलें के साथ सहज कर रहे हैं
- आप सिर्फ लिखना और प्रकाशित करना चाहते हैं

उपयोग **पूरा शिक्षण मंच** कब:

- आप एक के रूप में अपने ब्लॉग का उपयोग कर रहे हैं **प्रयोगशाला सीखना** नई तकनीक के लिए
- आप तैनात योजनाओं, निगरानी, और प्रदर्शन के साथ प्रयोग करना चाहते हैं
- आपको भाषाओं के समर्थन, पूर्ण पाठ खोज, या टिप्पणी जैसे विशिष्ट विशेषताएँ चाहिए
- आप निर्माण पैकेज कर रहे हैं और एक असली दुनिया का परीक्षण की जरूरत है
- आप जटिल तकनीकी कार्यान्वयन कर रहे हैं
- मंच बनाने की यात्रा उस सामग्री के रूप में मूल्यवान है

## अवसर: एक विशेषता के रूप में सुस्पष्टता

आधुनिक वेब विकास दुनिया में, हम अकसर डिफ़ॉल्ट से जटिल समाधान के लिए पहुँच जाते हैं. एक ब्लॉग की जरूरत है? बेहतर सेट एक डाटाबेस, एक आईआईएस सेट, अप उत्प्रवासन नियत करें, COMMols जोड़ने, लागू करें, पृष्ठभूमि कार्य कॉन्फ़िगर करें...

लेकिन कभी - कभी सरल समाधान है *दाहिना* समाधान. अधिकांश विजुअल ब्लॉग्स साबित करता है कि आप एक कार्यान्वित कर सकते हैं, तेज, और स्थिर ब्लॉग मंच के साथ:

- **342 पंक्तियाँ C#** ( नीचे ब्लॉग सर्विस + मेटाब्लॉगर + प्रोग्राम.c)
- **~120 पंक्ति का राजेर मार्कअप** (कोई पृष्ठ नहीं)
- **सीएसएस की 55 पंक्तियाँ**
- **1 एनयू होल** (Magig)

यही कारण है कि **कोड कुल मिलाकर 520 लाइनों से कम** पूरी ब्लॉगिंग मंच के लिए।

परियोजना दोनों कार्यान्वित ब्लॉग मंच तथा एक स्मरण दोनों के रूप में काम करती है: आप पहले जटिलता को जोड़ने से पहले अपने आप से पूछें कि क्या आपको सचमुच इसकी आवश्यकता है. कभी कभी-कभी एक फ़ोल्डर जो आपको आवश्यकता है.

आप इसमें पूरा स्रोत कोड पा सकते हैं [अधिकांश अनस्वरित. विकिंजबुक डिरेक्ट्री](https://github.com/scottgal/mostlylucidweb/tree/main/Mostlylucid.MinimalBlog) मुख्य भंडार के. मैं Nuget पैकेज को छोड़ देंगे जैसे ही मैं कोड के साथ खुश हूँ.

ब्लॉगिंग धन्य है!