<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
<title><![CDATA[ Wibi ]]></title>
<description><![CDATA[ Personal blog ]]></description>
<link>https://manasiwibi.com</link>
<image>
    <url>https://manasiwibi.com/favicon.png</url>
    <title>Wibi</title>
    <link>https://manasiwibi.com</link>
</image>
<lastBuildDate>Wed, 22 Apr 2026 09:59:05 +0700</lastBuildDate>
<atom:link href="https://manasiwibi.com" rel="self" type="application/rss+xml"/>
  
<ttl>60</ttl>

    <item>
        <title><![CDATA[ Mapping out the DRAPAC26 Submission proposal entries by numbers and topics ]]></title>
        <description><![CDATA[ The Digital Rights in Asia-Pacific Assembly (DRAPAC) 2026 is an important gathering of digital rights advocates, policymakers, activists, and technologists dedicated to discussing and addressing pressing digital rights issues in the Asia-Pacific region. I&#39;m very much excited for this year&#39;s DRAPAC, and I am interested in ]]></description>
        <link>https://manasiwibi.com/mapping-out-the-drapac26-submission-proposal-entries-by-numbers-and-topics/</link>
        <guid isPermaLink="false">69ccfc87a106e40001ff1f77</guid>
        <category><![CDATA[ Digital Rights ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 01 Apr 2026 20:45:17 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>The Digital Rights in Asia-Pacific Assembly (DRAPAC) 2026 is an important gathering of digital rights advocates, policymakers, activists, and technologists dedicated to discussing and addressing pressing digital rights issues in the Asia-Pacific region. I'm very much excited for this year's DRAPAC, and I am interested in what and how organizations and individuals are submitting for their sessions/ideas. I believe it is important to look over all the ideas and get the gist of them, to be able to understand how the narrative has evolved and what the interests/demands of the submitters are.</p><p>To achieve that, I gathered (scraped) all entries using my personal DRAPAC account and counted all the metadata manually myself (with the help of LLMs/AI). The organizing team did not give me the data, and I have informed them that I ran a scraper.</p><p>This year, DRAPAC26 focuses on 2 themes (Track 1: Co-creating shared resources and Track 2: Collaborative action across movements) and 8 session formats. The submission period is closed, and it gained 313 entries. So, let's unfold this further by the numbers.</p><h4 id="thematic-tracks"><strong>Thematic tracks</strong>:</h4>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Track</th>
<th align="right">Sessions</th>
<th align="right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Co-creating shared resources</strong></td>
<td align="right">227</td>
<td align="right">57.8%</td>
</tr>
<tr>
<td><strong>Collaborative action across movements</strong></td>
<td align="right">163</td>
<td align="right">41.5%</td>
</tr>
<tr>
<td>Untagged</td>
<td align="right">3</td>
<td align="right">0.8%</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<h4 id="session-formats">Session Formats</h4>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Format</th>
<th align="right">Total</th>
<th align="right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td>Co-learning workshop</td>
<td align="right">122</td>
<td align="right">31.0%</td>
</tr>
<tr>
<td>Panel discussion</td>
<td align="right">104</td>
<td align="right">26.5%</td>
</tr>
<tr>
<td>Roundtable discussion</td>
<td align="right">62</td>
<td align="right">15.8%</td>
</tr>
<tr>
<td>Ideation workshop</td>
<td align="right">56</td>
<td align="right">14.2%</td>
</tr>
<tr>
<td>Exhibit / display / performance</td>
<td align="right">20</td>
<td align="right">5.1%</td>
</tr>
<tr>
<td>Social gathering</td>
<td align="right">13</td>
<td align="right">3.3%</td>
</tr>
<tr>
<td>Booth, stand, or clinic</td>
<td align="right">9</td>
<td align="right">2.3%</td>
</tr>
<tr>
<td>Parallel event</td>
<td align="right">7</td>
<td align="right">1.8%</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<h4 id="track-%C3%97-format-matrix">Track × Format Matrix</h4>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Format</th>
<th align="right">Co-creating</th>
<th align="right">Collaborative</th>
</tr>
</thead>
<tbody>
<tr>
<td>Co-learning workshop</td>
<td align="right"><strong>91</strong></td>
<td align="right">30</td>
</tr>
<tr>
<td>Panel discussion</td>
<td align="right">43</td>
<td align="right"><strong>59</strong></td>
</tr>
<tr>
<td>Roundtable discussion</td>
<td align="right">27</td>
<td align="right"><strong>35</strong></td>
</tr>
<tr>
<td>Ideation workshop</td>
<td align="right"><strong>42</strong></td>
<td align="right">14</td>
</tr>
<tr>
<td>Exhibit / display / performance</td>
<td align="right">13</td>
<td align="right">7</td>
</tr>
<tr>
<td>Social gathering</td>
<td align="right">3</td>
<td align="right"><strong>10</strong></td>
</tr>
<tr>
<td>Booth, stand, or clinic</td>
<td align="right">5</td>
<td align="right">4</td>
</tr>
<tr>
<td>Parallel event</td>
<td align="right">3</td>
<td align="right">4</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<p>As the data above shows, we can see that the "Co-creating shared resources" track is leading by 16.3% differences compared to the "Collaborative action across movements" track. This highlights the high interest in this track, which focuses on building shared infrastructure—from platforms, systems, and databases, to skills, networks, and strategies—that can be scaled across the region.</p><p>While there is not a significant difference, Track 2 (Collaborative action across movements) focuses on bridging the gap between civil society, government, and the private sector to co-develop rights-based digital policies. It also stresses the importance of discussions pertaining to these issues.</p><p>Looking at the track-by-format matrix, we can see that each track has specific preferences toward the session formats it conducts to suit what's best for the discussions or activities. Track 1 garnered a preference for co-learning workshops and ideation workshops, while on the other hand, Track 2 focuses more on panel discussions, roundtable discussions, and social gatherings.</p><p>Furthermore, to get a better understanding of what people are proposing, I ran basic topic modeling on the submission content to get a look at the ideas people are interested in focusing on or discussing. I utilized a specific topic modeling technique called LDA (Latent Dirichlet Allocation) to uncover the central topics and their distributions across the set of content's sessions. The following table uncover which words are being frequently used.</p>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Topic</th>
<th>Sessions</th>
<th>Top Words (topn=12)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>T0: AI Systems &amp; Public Accountability</strong></td>
<td><strong>65 (16.5%)</strong></td>
<td>data, social, public, platforms, media, surveillance, systems, algorithmic, platform, youth, people, power</td>
</tr>
<tr>
<td><strong>T1: Civil Society Digital Security Capacity</strong></td>
<td><strong>9 (2.3%)</strong></td>
<td>human, security, strategies, civil, society, technical, law, training, myanmar, challenges, action, cybersecurity</td>
</tr>
<tr>
<td><strong>T2: Regional Governance &amp; Policy</strong></td>
<td><strong>110 (28.0%)</strong></td>
<td>regional, civil, governance, policy, society, shared, platform, data, systems, online, public, asia-pacific</td>
</tr>
<tr>
<td><strong>T3: Digital Rights Practice &amp; Experience</strong></td>
<td><strong>65 (16.5%)</strong></td>
<td>space, data, human, shared, climate, people, online, open, collective, building, work, challenges</td>
</tr>
<tr>
<td><strong>T4: Community Organizing &amp; Grassroots Capacity</strong></td>
<td><strong>53 (13.5%)</strong></td>
<td>communities, shared, systems, community, collective, movement, regional, movements, asia-pacific, end, to:, grassroots</td>
</tr>
<tr>
<td><strong>T5: Legal Frameworks, Evidence &amp; Platform Accountability</strong></td>
<td><strong>32 (8.1%)</strong></td>
<td>legal, human, evidence, platform, security, platforms, challenges, international, regional, resource, criminal, media</td>
</tr>
<tr>
<td><strong>T6: Digital Security Tools &amp; Practical Response</strong></td>
<td><strong>20 (5.1%)</strong></td>
<td>human, online, legal, security, collective, right, practical, tools, strategies, session, decision, response</td>
</tr>
<tr>
<td><strong>T7: Youth, Media &amp; Narrative Resistance</strong></td>
<td><strong>39 (9.9%)</strong></td>
<td>internet, civic, movements, people, young, media, communication, social, online, collective, narratives, storytelling</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<p>Moreover, let's see which countries or region being mentioned the most across proposal. The Country was calculated using a rule-based keyword match over session Title and Content fields. For each country, it counts session once per country if any variant was present.</p>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Country</th>
<th align="right">Co-creating</th>
<th align="right">Collaborative</th>
<th align="right">Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pacific (region)</td>
<td align="right">112</td>
<td align="right">83</td>
<td align="right">196</td>
</tr>
<tr>
<td><strong>Indonesia</strong></td>
<td align="right"><strong>67</strong></td>
<td align="right"><strong>45</strong></td>
<td align="right"><strong>114</strong></td>
</tr>
<tr>
<td>Philippines</td>
<td align="right">51</td>
<td align="right">44</td>
<td align="right">96</td>
</tr>
<tr>
<td>India</td>
<td align="right">56</td>
<td align="right">50</td>
<td align="right">106</td>
</tr>
<tr>
<td>Nepal</td>
<td align="right">41</td>
<td align="right">32</td>
<td align="right">73</td>
</tr>
<tr>
<td>Myanmar</td>
<td align="right">31</td>
<td align="right">19</td>
<td align="right">50</td>
</tr>
<tr>
<td>Bangladesh</td>
<td align="right">30</td>
<td align="right">18</td>
<td align="right">48</td>
</tr>
<tr>
<td>Pakistan</td>
<td align="right">11</td>
<td align="right">14</td>
<td align="right">26</td>
</tr>
<tr>
<td>Malaysia</td>
<td align="right">19</td>
<td align="right">7</td>
<td align="right">26</td>
</tr>
<tr>
<td>Sri Lanka</td>
<td align="right">13</td>
<td align="right">7</td>
<td align="right">20</td>
</tr>
<tr>
<td>Thailand</td>
<td align="right">9</td>
<td align="right">4</td>
<td align="right">14</td>
</tr>
<tr>
<td>Taiwan</td>
<td align="right">10</td>
<td align="right">3</td>
<td align="right">13</td>
</tr>
<tr>
<td>Singapore</td>
<td align="right">6</td>
<td align="right">6</td>
<td align="right">12</td>
</tr>
<tr>
<td>Vietnam</td>
<td align="right">5</td>
<td align="right">4</td>
<td align="right">9</td>
</tr>
<tr>
<td>China</td>
<td align="right">2</td>
<td align="right">5</td>
<td align="right">7</td>
</tr>
<tr>
<td>Cambodia</td>
<td align="right">4</td>
<td align="right">3</td>
<td align="right">7</td>
</tr>
<tr>
<td>Korea</td>
<td align="right">3</td>
<td align="right">3</td>
<td align="right">6</td>
</tr>
<tr>
<td>Japan</td>
<td align="right">2</td>
<td align="right">3</td>
<td align="right">5</td>
</tr>
<tr>
<td>Australia</td>
<td align="right">1</td>
<td align="right">2</td>
<td align="right">4</td>
</tr>
<tr>
<td>Papua</td>
<td align="right">2</td>
<td align="right">0</td>
<td align="right">2</td>
</tr>
<tr>
<td>Timor</td>
<td align="right">1</td>
<td align="right">0</td>
<td align="right">1</td>
</tr>
<tr>
<td>Laos</td>
<td align="right">1</td>
<td align="right">0</td>
<td align="right">1</td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<p>Lastly, I ran a word-matching script to see if AI-related keywords were mentioned in the content of the proposals. It turns out that almost 30% of the entries include AI-related terms, as follows:</p>
<!--kg-card-begin: html-->
<table>
<thead>
<tr>
<th>Term</th>
<th align="right">Sessions</th>
<th align="right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td>"ai" (word-boundary)</td>
<td align="right">94</td>
<td align="right">23.9%</td>
</tr>
<tr>
<td>"artificial intelligence" (substring)</td>
<td align="right">14</td>
<td align="right">3.6%</td>
</tr>
<tr>
<td>"algorithmic" (word-boundary)</td>
<td align="right">36</td>
<td align="right">9.2%</td>
</tr>
<tr>
<td>"algorithm" (word-boundary)</td>
<td align="right">7</td>
<td align="right">1.8%</td>
</tr>
<tr>
<td>"genai" (substring)</td>
<td align="right">1</td>
<td align="right">0.3%</td>
</tr>
<tr>
<td><strong>Union (ai | algorithmic | algorithm | genai)</strong></td>
<td align="right"><strong>117</strong></td>
<td align="right"><strong>29.8%</strong></td>
</tr>
</tbody>
</table>
<!--kg-card-end: html-->
<p>It is fascinating to see diverse ideas being submitted. We certainly won't see most of them being presented at DRAPAC, but I'm sure the ideas are worth spreading and must be taken into account, especially for individuals and organizations within the region and beyond.</p><p>To close, most of the scripts/code that helped me to generate the data above were generated by LLMs and agentic AI platforms. I have manually observed and adjusted some for cross-checking. I attached the full analysis below, generated 100% by AI. The wording above was mostly made by me. I am planning to update this post to include the information of all the scraped sessions and the generated code, in particular for reproducibility or experimenting further.</p><h1 id="drapac-26-%E2%80%94-session-analysis">DRAPAC 26 — Session Analysis</h1>
<p><strong>Source:</strong> <a href="https://drap.ac/26/activities/?ref=manasiwibi.com">drap.ac/26/activities/</a><br>
<strong>Scraped:</strong> Wave 1 = 2026-03-29 (311 files); Wave 2 = 2026-03-30 (+82 files, total 393)<br>
<strong>Total sessions:</strong> 393 markdown files<br>
<strong>Vault source:</strong> <code>D-ARCHIVES/DRAPAC 26 Sessions Submission/</code></p>
<hr>
<h2 id="executive-summary">Executive Summary</h2>
<p>DRAPAC 26 (Digital Rights Asia-Pacific 2026) is the Asia Pacific Regional Internet Governance Forum. Three methods were applied to the 393 session Content fields:</p>
<ol>
<li><strong>Unsupervised LDA topic modeling</strong> (k=8, k=12) — discovers latent themes statistically</li>
<li><strong>UMAP + HDBSCAN clustering</strong> — semantic clustering of sessions by document-topic similarity</li>
<li><strong>Content coverage clusters</strong> (keyword-based) — comparative reference</li>
</ol>
<p><strong>Key findings:</strong></p>
<ul>
<li><strong>LDA</strong> identifies <strong>Regional Governance &amp; Policy</strong> (T2, 110 sessions, 28%) as the single largest latent topic — more than governance frameworks, civil society engagement, and regulatory policy combined. This is the programme's backbone discourse.</li>
<li><strong>Semantic clustering</strong> discovers 7 distinct session communities, including: "Data &amp; Platform Accountability", "Legal &amp; Human Rights Evidence", "Community Infrastructure Design", "Civil Society Governance AI", "Open Space &amp; People", and "Collective Care Movements" — each with distinct track skew.</li>
<li><strong>Track differentiation</strong> is real but nuanced: Collaborative skews toward legal/evidence (T5) and surveillance discourse (T0); Co-creating skews toward collective care movements (C5) and community infrastructure (C4). The clearest differentiator is Governance &amp; Policy framing, which Co-creating leads on.</li>
<li><strong>AI</strong> (explicit "ai" + "algorithmic" + "genai") appears in 29.8% of sessions — making it the second-most-discussed substantive concern after governance.</li>
</ul>
<hr>
<h2 id="overview">Overview</h2>
<p>DRAPAC 26 (Digital Rights Asia-Pacific 2026) is the Asia Pacific Regional Internet Governance Forum. The vault contains 393 scraped session submissions across two waves: 311 files scraped 2026-03-29 and 82 additional files from 2026-03-30.</p>
<p><strong>Theme analysis design:</strong> Three complementary unsupervised methods were applied to the <strong>Content</strong> field (session description body only). The Content field was preprocessed: lowercased, stopwords removed, markdown stripped, and tokenised (min word length 3, no punctuation-only tokens). Gensim LDA was used for topic modeling; UMAP + HDBSCAN for semantic clustering; content coverage analysis (keyword clusters) as comparative reference.</p>
<p>All theme statistics are <strong>Content-only</strong> — Organiser and Title fields are excluded to avoid inflation from personal specialisations and session labels.</p>
<hr>
<h2 id="thematic-tracks">Thematic Tracks</h2>
<p>DRAPAC 26 has <strong>two thematic tracks</strong>:</p>
<table>
<thead>
<tr>
<th>Track</th>
<th style="text-align:right">Sessions</th>
<th style="text-align:right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Co-creating shared resources</strong></td>
<td style="text-align:right">227</td>
<td style="text-align:right">57.8%</td>
</tr>
<tr>
<td><strong>Collaborative action across movements</strong></td>
<td style="text-align:right">163</td>
<td style="text-align:right">41.5%</td>
</tr>
<tr>
<td>Untagged</td>
<td style="text-align:right">3</td>
<td style="text-align:right">0.8%</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="session-formats">Session Formats</h2>
<table>
<thead>
<tr>
<th>Format</th>
<th style="text-align:right">Total</th>
<th style="text-align:right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td>Co-learning workshop</td>
<td style="text-align:right">122</td>
<td style="text-align:right">31.0%</td>
</tr>
<tr>
<td>Panel discussion</td>
<td style="text-align:right">104</td>
<td style="text-align:right">26.5%</td>
</tr>
<tr>
<td>Roundtable discussion</td>
<td style="text-align:right">62</td>
<td style="text-align:right">15.8%</td>
</tr>
<tr>
<td>Ideation workshop</td>
<td style="text-align:right">56</td>
<td style="text-align:right">14.2%</td>
</tr>
<tr>
<td>Exhibit / display / performance</td>
<td style="text-align:right">20</td>
<td style="text-align:right">5.1%</td>
</tr>
<tr>
<td>Social gathering</td>
<td style="text-align:right">13</td>
<td style="text-align:right">3.3%</td>
</tr>
<tr>
<td>Booth, stand, or clinic</td>
<td style="text-align:right">9</td>
<td style="text-align:right">2.3%</td>
</tr>
<tr>
<td>Parallel event</td>
<td style="text-align:right">7</td>
<td style="text-align:right">1.8%</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="track-%C3%97-format-matrix">Track × Format Matrix</h2>
<table>
<thead>
<tr>
<th>Format</th>
<th style="text-align:right">Co-creating</th>
<th style="text-align:right">Collaborative</th>
</tr>
</thead>
<tbody>
<tr>
<td>Co-learning workshop</td>
<td style="text-align:right"><strong>91</strong></td>
<td style="text-align:right">30</td>
</tr>
<tr>
<td>Panel discussion</td>
<td style="text-align:right">43</td>
<td style="text-align:right"><strong>59</strong></td>
</tr>
<tr>
<td>Roundtable discussion</td>
<td style="text-align:right">27</td>
<td style="text-align:right"><strong>35</strong></td>
</tr>
<tr>
<td>Ideation workshop</td>
<td style="text-align:right"><strong>42</strong></td>
<td style="text-align:right">14</td>
</tr>
<tr>
<td>Exhibit / display / performance</td>
<td style="text-align:right">13</td>
<td style="text-align:right">7</td>
</tr>
<tr>
<td>Social gathering</td>
<td style="text-align:right">3</td>
<td style="text-align:right"><strong>10</strong></td>
</tr>
<tr>
<td>Booth, stand, or clinic</td>
<td style="text-align:right">5</td>
<td style="text-align:right">4</td>
</tr>
<tr>
<td>Parallel event</td>
<td style="text-align:right">3</td>
<td style="text-align:right">4</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="countries-regional-focus">Countries &amp; Regional Focus</h2>
<table>
<thead>
<tr>
<th>Country</th>
<th style="text-align:right">Co-creating</th>
<th style="text-align:right">Collaborative</th>
<th style="text-align:right">Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Pacific (region)</td>
<td style="text-align:right">112</td>
<td style="text-align:right">83</td>
<td style="text-align:right">196</td>
</tr>
<tr>
<td><strong>Indonesia</strong></td>
<td style="text-align:right"><strong>67</strong></td>
<td style="text-align:right"><strong>45</strong></td>
<td style="text-align:right"><strong>114</strong></td>
</tr>
<tr>
<td>Philippines</td>
<td style="text-align:right">51</td>
<td style="text-align:right">44</td>
<td style="text-align:right">96</td>
</tr>
<tr>
<td>India</td>
<td style="text-align:right">56</td>
<td style="text-align:right">50</td>
<td style="text-align:right">106</td>
</tr>
<tr>
<td>Nepal</td>
<td style="text-align:right">41</td>
<td style="text-align:right">32</td>
<td style="text-align:right">73</td>
</tr>
<tr>
<td>Myanmar</td>
<td style="text-align:right">31</td>
<td style="text-align:right">19</td>
<td style="text-align:right">50</td>
</tr>
<tr>
<td>Bangladesh</td>
<td style="text-align:right">30</td>
<td style="text-align:right">18</td>
<td style="text-align:right">48</td>
</tr>
<tr>
<td>Pakistan</td>
<td style="text-align:right">11</td>
<td style="text-align:right">14</td>
<td style="text-align:right">26</td>
</tr>
<tr>
<td>Malaysia</td>
<td style="text-align:right">19</td>
<td style="text-align:right">7</td>
<td style="text-align:right">26</td>
</tr>
<tr>
<td>Sri Lanka</td>
<td style="text-align:right">13</td>
<td style="text-align:right">7</td>
<td style="text-align:right">20</td>
</tr>
<tr>
<td>Thailand</td>
<td style="text-align:right">9</td>
<td style="text-align:right">4</td>
<td style="text-align:right">14</td>
</tr>
<tr>
<td>Taiwan</td>
<td style="text-align:right">10</td>
<td style="text-align:right">3</td>
<td style="text-align:right">13</td>
</tr>
<tr>
<td>Singapore</td>
<td style="text-align:right">6</td>
<td style="text-align:right">6</td>
<td style="text-align:right">12</td>
</tr>
<tr>
<td>Vietnam</td>
<td style="text-align:right">5</td>
<td style="text-align:right">4</td>
<td style="text-align:right">9</td>
</tr>
<tr>
<td>China</td>
<td style="text-align:right">2</td>
<td style="text-align:right">5</td>
<td style="text-align:right">7</td>
</tr>
<tr>
<td>Cambodia</td>
<td style="text-align:right">4</td>
<td style="text-align:right">3</td>
<td style="text-align:right">7</td>
</tr>
<tr>
<td>Korea</td>
<td style="text-align:right">3</td>
<td style="text-align:right">3</td>
<td style="text-align:right">6</td>
</tr>
<tr>
<td>Japan</td>
<td style="text-align:right">2</td>
<td style="text-align:right">3</td>
<td style="text-align:right">5</td>
</tr>
<tr>
<td>Australia</td>
<td style="text-align:right">1</td>
<td style="text-align:right">2</td>
<td style="text-align:right">4</td>
</tr>
<tr>
<td>Papua</td>
<td style="text-align:right">2</td>
<td style="text-align:right">0</td>
<td style="text-align:right">2</td>
</tr>
<tr>
<td>Timor</td>
<td style="text-align:right">1</td>
<td style="text-align:right">0</td>
<td style="text-align:right">1</td>
</tr>
<tr>
<td>Laos</td>
<td style="text-align:right">1</td>
<td style="text-align:right">0</td>
<td style="text-align:right">1</td>
</tr>
</tbody>
</table>
<hr>
<h2 id="method-1-lda-topic-modeling">Method 1: LDA Topic Modeling</h2>
<h3 id="design">Design</h3>
<p><strong>Latent Dirichlet Allocation (LDA)</strong> discovers latent topics as probability distributions over words — sessions are not hard-assigned to topics but have a probability distribution across all topics. <code>k</code> is the number of topics the model is constrained to find; you choose it before running the model. Gensim LDA was used with:</p>
<ul>
<li><strong>Dictionary:</strong> tokenised Content, stopwords removed (custom stoplist + Gensim STOPWORDS), min doc frequency 5, max doc frequency 65%</li>
<li><strong>Two runs:</strong> <code>k=8</code> (primary, 40 passes) and <code>k=12</code> (for HDBSCAN input, 30 passes)</li>
<li><strong>Alpha/eta:</strong> <code>auto</code> — the model learns document-topic and topic-word sparsity from the data</li>
</ul>
<h3 id="lda-topics-discovered-k8">LDA Topics Discovered (k=8)</h3>
<p>Each topic is a ranked list of words. The number in parentheses is the number of sessions where this topic is the dominant topic (highest probability in the <code>k=8</code> model).</p>
<table>
<thead>
<tr>
<th>Topic</th>
<th>Sessions</th>
<th>Top Words (topn=12)</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>T0: AI Systems &amp; Public Accountability</strong></td>
<td><strong>65 (16.5%)</strong></td>
<td>data, social, public, platforms, media, surveillance, systems, algorithmic, platform, youth, people, power</td>
</tr>
<tr>
<td><strong>T1: Civil Society Digital Security Capacity</strong></td>
<td><strong>9 (2.3%)</strong></td>
<td>human, security, strategies, civil, society, technical, law, training, myanmar, challenges, action, cybersecurity</td>
</tr>
<tr>
<td><strong>T2: Regional Governance &amp; Policy</strong></td>
<td><strong>110 (28.0%)</strong></td>
<td>regional, civil, governance, policy, society, shared, platform, data, systems, online, public, asia-pacific</td>
</tr>
<tr>
<td><strong>T3: Digital Rights Practice &amp; Experience</strong></td>
<td><strong>65 (16.5%)</strong></td>
<td>space, data, human, shared, climate, people, online, open, collective, building, work, challenges</td>
</tr>
<tr>
<td><strong>T4: Community Organizing &amp; Grassroots Capacity</strong></td>
<td><strong>53 (13.5%)</strong></td>
<td>communities, shared, systems, community, collective, movement, regional, movements, asia-pacific, end, to:, grassroots</td>
</tr>
<tr>
<td><strong>T5: Legal Frameworks, Evidence &amp; Platform Accountability</strong></td>
<td><strong>32 (8.1%)</strong></td>
<td>legal, human, evidence, platform, security, platforms, challenges, international, regional, resource, criminal, media</td>
</tr>
<tr>
<td><strong>T6: Digital Security Tools &amp; Practical Response</strong></td>
<td><strong>20 (5.1%)</strong></td>
<td>human, online, legal, security, collective, right, practical, tools, strategies, session, decision, response</td>
</tr>
<tr>
<td><strong>T7: Youth, Media &amp; Narrative Resistance</strong></td>
<td><strong>39 (9.9%)</strong></td>
<td>internet, civic, movements, people, young, media, communication, social, online, collective, narratives, storytelling</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>Interpretation:</strong> The largest latent topic is <strong>Regional Governance &amp; Policy</strong> (T2, 28%) — sessions on civil society's role in internet governance, regulatory frameworks, and regional policy coordination. T0 (AI Systems &amp; Public Accountability, 16.5%) is the second major focus: AI audits, platform surveillance, and public sector accountability. T3 (Digital Rights Practice &amp; Experience, 16.5%) is a broad catch-all for sessions focused on practice and experience across accessibility, OGBV, climate data, and community care. T4 (Community Organizing &amp; Grassroots Capacity, 13.5%) covers collective infrastructure: queer communities, trauma-informed care, peer exchange. T7 (Youth, Media &amp; Narrative Resistance, 9.9%) is a distinct internet-culture-and-activism cluster. T1 and T6 are smaller but substantive: CSO security infrastructure and practical digital security tools respectively.</p>
</blockquote>
<h3 id="lda-topic-%C3%97-track">LDA Topic × Track</h3>
<table>
<thead>
<tr>
<th>Topic</th>
<th style="text-align:right">Co-creating</th>
<th style="text-align:right">Collaborative</th>
</tr>
</thead>
<tbody>
<tr>
<td>T2: Regional Governance &amp; Policy</td>
<td style="text-align:right"><strong>69</strong> (30.4%)</td>
<td style="text-align:right">41 (25.2%)</td>
</tr>
<tr>
<td>T0: AI Systems &amp; Public Accountability</td>
<td style="text-align:right">30 (13.2%)</td>
<td style="text-align:right"><strong>35</strong> (21.5%)</td>
</tr>
<tr>
<td>T3: Digital Rights Practice &amp; Experience</td>
<td style="text-align:right">33 (14.5%)</td>
<td style="text-align:right">31 (19.0%)</td>
</tr>
<tr>
<td>T4: Collective Community Movements</td>
<td style="text-align:right">31 (13.7%)</td>
<td style="text-align:right">22 (13.5%)</td>
</tr>
<tr>
<td>T7: Youth, Media &amp; Narrative Resistance</td>
<td style="text-align:right"><strong>28</strong> (12.3%)</td>
<td style="text-align:right">10 (6.1%)</td>
</tr>
<tr>
<td>T5: Legal Frameworks &amp; Evidence</td>
<td style="text-align:right">18 (7.9%)</td>
<td style="text-align:right">13 (8.0%)</td>
</tr>
<tr>
<td>T6: Digital Security Tools &amp; Practical Response</td>
<td style="text-align:right"><strong>14</strong> (6.2%)</td>
<td style="text-align:right">6 (3.7%)</td>
</tr>
<tr>
<td>T1: Civil Society Digital Security Capacity</td>
<td style="text-align:right">4 (1.8%)</td>
<td style="text-align:right">5 (3.1%)</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>Key track differentiators:</strong></p>
<ul>
<li><strong>Co-creating</strong> leads on: T2 Regional Governance &amp; Policy (+5pp), T7 Youth, Media &amp; Narrative Resistance (+6pp), T6 Digital Security Tools &amp; Practical Response (+2.5pp)</li>
<li><strong>Collaborative</strong> leads on: T0 AI Systems &amp; Public Accountability (+8pp), T3 Digital Rights Practice &amp; Experience (+4.5pp)</li>
</ul>
</blockquote>
<hr>
<h2 id="method-2-umap-hdbscan-semantic-clustering">Method 2: UMAP + HDBSCAN Semantic Clustering</h2>
<h3 id="design">Design</h3>
<p><strong>UMAP</strong> (Uniform Manifold Approximation and Projection) reduces the doc-topic matrix (12 LDA topics) to 2 dimensions using cosine distance, preserving semantic neighbourhood structure. <strong>HDBSCAN</strong> (Hierarchical Density-Based Spatial Clustering of Applications with Noise) then clusters the 2D embedding, identifying dense regions as clusters and sparse regions as noise — without requiring a fixed number of clusters.</p>
<p>Parameters: UMAP (<code>n_neighbors=15</code>, <code>min_dist=0.1</code>, <code>metric=cosine</code>) → HDBSCAN (<code>min_cluster_size=25</code>, <code>metric=euclidean</code>, <code>eom</code> selection).</p>
<h3 id="clusters-discovered">Clusters Discovered</h3>
<p>7 clusters + noise (60 sessions, 15.3%). Each cluster is characterised by its dominant LDA topic, top TF-IDF terms, and track composition.</p>
<table>
<thead>
<tr>
<th>Cluster</th>
<th style="text-align:right">Sessions</th>
<th>Dominant LDA Topic</th>
<th>Co-creating</th>
<th>Collaborative</th>
<th>Label</th>
</tr>
</thead>
<tbody>
<tr>
<td>C4</td>
<td style="text-align:right">86 (21.9%)</td>
<td>T3: Digital Rights Practice &amp; Experience</td>
<td>44 (51%)</td>
<td>40 (47%)</td>
<td><strong>Open Space &amp; People</strong></td>
</tr>
<tr>
<td>C0</td>
<td style="text-align:right">59 (15.0%)</td>
<td>T0: AI Systems &amp; Public Accountability</td>
<td>29 (49%)</td>
<td>30 (51%)</td>
<td><strong>Data, AI &amp; Platform Accountability</strong></td>
</tr>
<tr>
<td>C3</td>
<td style="text-align:right">54 (13.7%)</td>
<td>T2: Regional Governance &amp; Policy</td>
<td>27 (50%)</td>
<td>27 (50%)</td>
<td><strong>Civil Society Governance AI</strong></td>
</tr>
<tr>
<td>C5</td>
<td style="text-align:right">46 (11.7%)</td>
<td>T4: Community Organizing &amp; Grassroots</td>
<td><strong>37 (80%)</strong></td>
<td>9 (20%)</td>
<td><strong>Collective Care &amp; Movement</strong></td>
</tr>
<tr>
<td>C6</td>
<td style="text-align:right">31 (7.9%)</td>
<td>T9: Systems &amp; Accountability</td>
<td>14 (45%)</td>
<td>17 (55%)</td>
<td><strong>Country-Specific Implementation</strong></td>
</tr>
<tr>
<td>C1</td>
<td style="text-align:right">29 (7.4%)</td>
<td>T5: Legal &amp; Evidence</td>
<td>17 (59%)</td>
<td>11 (38%)</td>
<td><strong>Legal Evidence &amp; Journalism</strong></td>
</tr>
<tr>
<td>C2</td>
<td style="text-align:right">28 (7.1%)</td>
<td>T8: Infrastructure Design</td>
<td>17 (61%)</td>
<td>11 (39%)</td>
<td><strong>Community Infrastructure Design</strong></td>
</tr>
<tr>
<td>Noise</td>
<td style="text-align:right">60 (15.3%)</td>
<td>—</td>
<td>42 (70%)</td>
<td>18 (30%)</td>
<td>—</td>
</tr>
</tbody>
</table>
<h3 id="cluster-profiles">Cluster Profiles</h3>
<p><strong>C4 — Open Space &amp; People (86 sessions, 21.9%)</strong></p>
<blockquote>
<p>The largest cluster. Sessions focus on <strong>people, internet, online space, media access, and open tools</strong> — session design, community digital access, and open digital commons. Nearly equal track split.<br>
Top TF-IDF: <em>session, people, internet, online, space, rights, media, access, social, open, tools</em><br>
LDA: T3 "space | human | data | people | open"</p>
</blockquote>
<p><strong>C0 — Data, AI &amp; Platform Accountability (59 sessions, 15.0%)</strong></p>
<blockquote>
<p>Sessions discuss <strong>data governance, AI, surveillance, platform accountability, and government oversight</strong> of digital platforms. Equal track split — this is a shared concern.<br>
Top TF-IDF: <em>data, ai, rights, surveillance, platforms, public, governments, governance, systems, accountability</em><br>
LDA: T0 "data | public | surveillance | platforms"</p>
</blockquote>
<p><strong>C3 — Civil Society Governance AI (54 sessions, 13.7%)</strong></p>
<blockquote>
<p>Sessions focus on <strong>AI governance, civil society engagement with AI systems, and governance policy frameworks</strong>. Equal track split — this is a programmatic centrepiece.<br>
Top TF-IDF: <em>ai, governance, rights, data, systems, civil, civil society, content, society, digital rights</em><br>
LDA: T2 "civil | data | governance | policy"</p>
</blockquote>
<p><strong>C5 — Collective Care &amp; Movement (46 sessions, 11.7%)</strong></p>
<blockquote>
<p>The clearest <strong>Co-creating-skewed cluster</strong> (80% Co-creating, only 20% Collaborative). Sessions focus on <strong>collective care, movement infrastructure, activists' wellbeing, and digital security support for movements</strong>. This is the social-justice-organising heart of the programme.<br>
Top TF-IDF: <em>care, collective, support, communities, digital security, movement, activists, space, movements, online</em><br>
LDA: T4 "shared | collective | movements | movement"</p>
</blockquote>
<p><strong>C6 — Country-Specific Implementation (31 sessions, 7.9%)</strong></p>
<blockquote>
<p>Sessions focused on <strong>country-level digital rights implementation, accountability mechanisms in India, Nepal, Philippines, and Indonesia</strong> — regulatory frameworks, remedies, and community digital systems at country level.<br>
Top TF-IDF: <em>systems, communities, indonesia nepal, digital systems, nepal, philippines indonesia, india philippines, remedy, centre</em><br>
LDA: T9 "systems | communities | accountability | community"</p>
</blockquote>
<p><strong>C1 — Legal Evidence &amp; Journalism (29 sessions, 7.4%)</strong></p>
<blockquote>
<p>Sessions on <strong>human rights evidence, criminal and international law, and journalist protection</strong> — a specialist legal cluster, slightly Co-creating skew.<br>
Top TF-IDF: <em>evidence, human, criminal, human rights, legal, rights, journalists, platforms, ai</em><br>
LDA: T5 "legal | human | evidence | platforms | criminal"</p>
</blockquote>
<p><strong>C2 — Community Infrastructure Design (28 sessions, 7.1%)</strong></p>
<blockquote>
<p>Sessions focused on <strong>designing resources, frameworks, and infrastructure for communities</strong> — practical Co-creating sessions about building shared tools and frameworks.<br>
Top TF-IDF: <em>resources, design, session, community, framework, data, infrastructure, regional, platform, user, shared</em><br>
LDA: T8 "shared | platform | regional | infrastructure | practical"</p>
</blockquote>
<hr>
<h2 id="ai-presence-content-only">AI Presence (Content-Only)</h2>
<p>AI detection uses case-insensitive matching against the <strong>Content field only</strong> (not Title or Organiser). Four forms are tracked separately, each using the appropriate match type:</p>
<pre><code class="language-python">ai_re    = re.compile(r'\bai\b',                  re.IGNORECASE)  # word-boundary
artif_re = re.compile(r'artificial intelligence',   re.IGNORECASE)  # phrase (no word boundary)
algo_re  = re.compile(r'\balgorithmic\b',          re.IGNORECASE)  # word-boundary
algow_re = re.compile(r'\balgorithm\b',            re.IGNORECASE)  # word-boundary
genai_re = re.compile(r'genai',                    re.IGNORECASE)  # substring: GenAI, genai-based
union    = \bai\b OR \balgorithmic\b OR \balgorithm\b OR genai
</code></pre>
<p><strong>Edge cases:</strong></p>
<ul>
<li>Hyphenated forms ("AI-powered", "AI-driven"): 37 of 38 already caught by <code>\bai\b</code> (standalone token present in same sentence); 1 additional session caught by <code>genai</code></li>
<li>"GenAI-based tools" (#37157): <code>genai</code> substring catches it; <code>\bai\b</code> does not (no word boundary in merged token "GenAI") — this is the sole <code>genai</code> count</li>
<li>"Geospatial Artificial Intelligence (GeoAI)" (#37432): caught by <code>artificial intelligence</code> row</li>
<li>"journalism <strong>aids</strong> remembering" (#38744): <strong>not</strong> AI — word "aids" has no word boundary between "ai" and "ds"; correctly excluded</li>
</ul>
<table>
<thead>
<tr>
<th>Term</th>
<th style="text-align:right">Sessions</th>
<th style="text-align:right">Share</th>
</tr>
</thead>
<tbody>
<tr>
<td>"ai" (word-boundary)</td>
<td style="text-align:right">94</td>
<td style="text-align:right">23.9%</td>
</tr>
<tr>
<td>"artificial intelligence" (substring)</td>
<td style="text-align:right">14</td>
<td style="text-align:right">3.6%</td>
</tr>
<tr>
<td>"algorithmic" (word-boundary)</td>
<td style="text-align:right">36</td>
<td style="text-align:right">9.2%</td>
</tr>
<tr>
<td>"algorithm" (word-boundary)</td>
<td style="text-align:right">7</td>
<td style="text-align:right">1.8%</td>
</tr>
<tr>
<td>"genai" (substring)</td>
<td style="text-align:right">1</td>
<td style="text-align:right">0.3%</td>
</tr>
<tr>
<td><strong>Union (ai | algorithmic | algorithm | genai)</strong></td>
<td style="text-align:right"><strong>117</strong></td>
<td style="text-align:right"><strong>29.8%</strong></td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>LDA context:</strong> T0 (AI Systems &amp; Public Accountability) is the primary AI cluster — sessions discussing data, platforms, surveillance, and algorithmic systems. C0 (Data, AI &amp; Platform Accountability) and C3 (Civil Society Governance AI) are where AI discourse concentrates — governance frameworks, surveillance systems, and platform accountability.</p>
</blockquote>
<hr>
<h2 id="cross-method-synthesis">Cross-Method Synthesis</h2>
<p>LDA and HDBSCAN both identify consistent thematic structure. The old hardcoded keyword-cluster analysis is superseded and not referenced here.</p>
<table>
<thead>
<tr>
<th>Finding</th>
<th>LDA (k=8)</th>
<th>HDBSCAN</th>
</tr>
</thead>
<tbody>
<tr>
<td>Largest substantive theme</td>
<td>T2 Regional Governance &amp; Policy (28.0%, 110 sessions)</td>
<td>C4 Open Space (21.9%, 86 sessions)</td>
</tr>
<tr>
<td>AI discourse</td>
<td>29.5% of sessions (word-boundary "ai" | "algorithmic" | "algorithm")</td>
<td>C0 Data &amp; AI Accountability (15.0%), C3 Civil Society Governance AI (13.7%)</td>
</tr>
<tr>
<td>Collective/movement focus</td>
<td>T4 Community Organizing &amp; Grassroots (13.5%, 53 sessions)</td>
<td>C5 Collective Care &amp; Movement (11.7%, 46 sessions, 80% Co-creating)</td>
</tr>
<tr>
<td>Legal/evidence cluster</td>
<td>T5 Legal Frameworks, Evidence &amp; Platform Accountability (8.1%, 32 sessions)</td>
<td>C1 Legal Evidence &amp; Journalism (7.4%, 29 sessions)</td>
</tr>
<tr>
<td>Youth &amp; civic media</td>
<td>T7 Youth, Media &amp; Narrative Resistance (9.9%, 39 sessions)</td>
<td>Concentrated in C4 Open Space (T7 k=12 rank-2 in C4)</td>
</tr>
<tr>
<td>Myanmar as outlier</td>
<td>T1 Civil Society Digital Security Capacity (2.3%, 9 sessions)</td>
<td>Mostly noise (HDBSCAN does not isolate it as a cluster)</td>
</tr>
</tbody>
</table>
<blockquote>
<p><strong>Disagreement note:</strong> The LDA proportion for AI discourse (29.5%) and HDBSCAN cluster proportions (C0 15% + C3 14%) are not additive — they measure different things. LDA measures topic probability weight; HDBSCAN measures cluster membership. The gap between 29.5% and ~29% combined reflects that not all sessions with "AI" in their content are sufficiently coherent to form a dense semantic cluster.</p>
</blockquote>
<hr>
<h2 id="top-sessions-by-upvotes">Top Sessions by Upvotes</h2>
<h3 id="co-creating-shared-resources">Co-creating shared resources</h3>
<table>
<thead>
<tr>
<th style="text-align:right">Votes</th>
<th>ID</th>
<th style="text-align:left">Format</th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right">14</td>
<td>#37330</td>
<td style="text-align:left">Panel</td>
<td>Confronting Online Hate and Digital Censorship in South and Southeast Asia</td>
</tr>
<tr>
<td style="text-align:right">12</td>
<td>#37163</td>
<td style="text-align:left">Roundtable</td>
<td>From Risk to Resilience: Bringing Communities and Trainers Together for Digital Safety</td>
</tr>
<tr>
<td style="text-align:right">12</td>
<td>#37058</td>
<td style="text-align:left">Panel</td>
<td>How AI is shaping political communications during elections</td>
</tr>
<tr>
<td style="text-align:right">11</td>
<td>#37609</td>
<td style="text-align:left">Co-learning workshop</td>
<td>Brain-rot Activism: Strategy or Setback?</td>
</tr>
<tr>
<td style="text-align:right">11</td>
<td>#37174</td>
<td style="text-align:left">Roundtable</td>
<td>Resourcing Digital Rights Advocacy in Southeast Asia</td>
</tr>
</tbody>
</table>
<h3 id="collaborative-action-across-movements">Collaborative action across movements</h3>
<table>
<thead>
<tr>
<th style="text-align:right">Votes</th>
<th>ID</th>
<th style="text-align:left">Format</th>
<th>Title</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:right">14</td>
<td>#37015</td>
<td style="text-align:left">Co-learning workshop</td>
<td>Garbage In, Garbage Out: Exposing Gender Bias and Stereotypes in Large Language Models (LLMs)</td>
</tr>
<tr>
<td style="text-align:right">12</td>
<td>#37129</td>
<td style="text-align:left">Panel</td>
<td>Engaging Big Tech in Southeast Asia: Strategies, Challenges, and Collective Leverage for Human Rights</td>
</tr>
<tr>
<td style="text-align:right">9</td>
<td>#35073</td>
<td style="text-align:left">Panel</td>
<td>Myanmar Voices, Regional Support: Digital Security Peer Lab</td>
</tr>
<tr>
<td style="text-align:right">9</td>
<td>#33009</td>
<td style="text-align:left">Panel</td>
<td>Open Tech Jam: Privacy-respecting, secure, and open digital tools for at-risk communities</td>
</tr>
<tr>
<td style="text-align:right">9</td>
<td>#38333</td>
<td style="text-align:left">Ideation workshop</td>
<td>(Re)Imagining a Multistakeholder Model for Digital Platforms in ASEAN</td>
</tr>
<tr>
<td style="text-align:right">9</td>
<td>#34922</td>
<td style="text-align:left">Panel</td>
<td>Your Boss is an Algorithm: Are You Playing or Being Played?</td>
</tr>
</tbody>
</table>
<blockquote>
<p>Vote counts are a snapshot as of the scrape date (2026-03-29/30). DRAPAC voting is live; counts may have shifted since.</p>
</blockquote>
<hr>
<h2 id="methodology">Methodology</h2>
<h3 id="reproducibility">Reproducibility</h3>
<p>The complete pipeline is published as a standalone script:</p>
<pre><code>A-PROJECTS/DRAPAC 26 Analysis/drapac_analysis.py
</code></pre>
<p>Run it with:</p>
<pre><code class="language-bash">python3 drapac_analysis.py "~/Vault/D-ARCHIVES/DRAPAC 26 Sessions Submission/"
</code></pre>
<p>Dependencies:</p>
<pre><code class="language-bash">pip install gensim scikit-learn umap-learn hdbscan scipy
</code></pre>
<p>The script produces: LDA topics (k=8 + k=12), HDBSCAN cluster labels, UMAP 2D embedding, per-cluster topic/TF-IDF profiles, and a Track × Cluster cross-tabulation.</p>
<h3 id="data-source">Data Source</h3>
<pre><code>Vault path:  ~/Vault/D-ARCHIVES/DRAPAC 26 Sessions Submission/*.md
Source URL:  https://drap.ac/26/activities/?view=&lt;ID&gt;
Total files: 393 (as of 2026-03-30)
</code></pre>
<h3 id="content-preprocessing">Content Preprocessing</h3>
<p>Sessions are loaded from <code>.md</code> files. The <strong>Content</strong> field (session description body) is extracted via regex and tokenised:</p>
<ol>
<li>Lowercase — normalises all text</li>
<li>Strip markdown — <code>#</code> headings, <code>*</code> bold, URLs, numbers, table pipes</li>
<li>Stopword removal — Gensim <code>STOPWORDS</code> + 50+ custom terms (conference procedures: "session", "workshop", "panel"; region names: "asia", "pacific"; generic modifiers: "also", "however", "new", "used")</li>
<li>Filter tokens &lt; 3 chars and pure-punctuation tokens</li>
<li>Drop sessions with &lt; 5 tokens (empty or near-empty descriptions)</li>
</ol>
<p>Dictionary filtering: <code>no_below=5</code> (must appear in ≥5 sessions), <code>no_above=0.65</code> (removed if in &gt;65% of sessions). This gives a vocabulary of ~1,894 terms for 393 sessions — sufficient for LDA without sparsity.</p>
<h3 id="lda-topic-modeling">LDA Topic Modeling</h3>
<p><strong>Two runs:</strong></p>
<table>
<thead>
<tr>
<th>Model</th>
<th><code>num_topics</code></th>
<th>Passes</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>lda8</code></td>
<td><code>k=8</code></td>
<td>40</td>
<td>Primary — cleaner topics, main report table</td>
</tr>
<tr>
<td><code>lda12</code></td>
<td><code>k=12</code></td>
<td>30</td>
<td>HDBSCAN input — higher dim = better clustering</td>
</tr>
</tbody>
</table>
<p>Shared parameters:</p>
<pre><code class="language-python">alpha='auto'    # learn per-document topic sparsity from data
eta='auto'      # learn per-topic word sparsity from data
random_state=42 # reproducibility
</code></pre>
<p><strong>Output:</strong> each session gets a probability distribution over all <code>k</code> topics. The "dominant topic" is the one with highest probability. Topic-word distributions are ranked lists used for human interpretation.</p>
<p><strong>Doc-topic matrix shape:</strong> <code>(393, k)</code> — used as the embedding for HDBSCAN.</p>
<h3 id="umap-hdbscan-clustering">UMAP + HDBSCAN Clustering</h3>
<p><strong>UMAP</strong> reduces the <code>lda12</code> doc-topic matrix <code>(393 × 12)</code> → <code>(393 × 2)</code> using cosine distance:</p>
<pre><code class="language-python">umap.UMAP(n_components=2, n_neighbors=15, min_dist=0.1,
          metric='cosine', random_state=42)
</code></pre>
<p>Cosine distance is the right metric for probability distributions (cosine similarity of <code>doc_topic[i]</code> between sessions).</p>
<p><strong>HDBSCAN</strong> clusters the 2D embedding density:</p>
<pre><code class="language-python">hdbscan.HDBSCAN(min_cluster_size=25, metric='euclidean',
                 cluster_selection_method='eom')
</code></pre>
<ul>
<li><code>eom</code> (Excess of Mass) selects clusters by density rather than enforcing a fixed threshold</li>
<li><code>min_cluster_size=25</code> chosen after testing <code>{20, 25, 30}</code> — gives 7 clusters + 15.3% noise</li>
</ul>
<h3 id="session-metadata-extraction">Session Metadata Extraction</h3>
<p>The Track, Format, Track×Format, Countries, and Upvotes tables are extracted from the session <code>.md</code> files using regex + keyword matching. Complete standalone script (no external dependencies):</p>
<pre><code>A-PROJECTS/DRAPAC 26 Analysis/drapac_metadata.py
</code></pre>
<p>Run it with:</p>
<pre><code class="language-bash">python3 drapac_metadata.py ~/Vault/D-ARCHIVES/DRAPAC\ 26\ Sessions\ Submission/
</code></pre>
<h4 id="field-extraction">Field Extraction</h4>
<table>
<thead>
<tr>
<th>Field</th>
<th>Regex</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td>Session ID</td>
<td><code>r'-(\d+)\.md$'</code></td>
<td>Basename filename</td>
</tr>
<tr>
<td>Upvotes</td>
<td><code>r'##\s*#\d+\s*\n+\[(\d+)\]'</code></td>
<td><code>[N](url)</code> link after heading</td>
</tr>
<tr>
<td>Track</td>
<td><code>r'^|\s*Track\s*|\s*(.+?)\s*|'</code></td>
<td>Table row, normalised to Co-creating/Collaborative</td>
</tr>
<tr>
<td>Format</td>
<td><code>r'^|\s*Format\s*|\s*(.+?)\s*|'</code></td>
<td>Table row, title-cased</td>
</tr>
<tr>
<td><strong>Content</strong></td>
<td><code>r'^|\s*Content\s*|\s*(.+?)(?=\n|)'</code></td>
<td>Session body only — all theme analysis uses this</td>
</tr>
<tr>
<td>Organiser</td>
<td><code>r'^|\s*Organiser\s*|\s*(.+?)\s*|'</code></td>
<td>Table row</td>
</tr>
</tbody>
</table>
<h4 id="track-normalisation">Track Normalisation</h4>
<pre><code class="language-python">tm = re.search(r'^\|\s*Track\s*\|\s*(.+?)\s*\|', c, re.MULTILINE)
track = 'Unknown'
if tm:
    t = tm.group(1).strip().lower()
    if 'co-creat' in t:   track = 'Co-creating'    # Co-creating shared resources
    elif 'collab' in t:   track = 'Collaborative'  # Collaborative action across movements
</code></pre>
<h4 id="format-extraction">Format Extraction</h4>
<pre><code class="language-python">fm = re.search(r'^\|\s*Format\s*\|\s*(.+?)\s*\|', c, re.MULTILINE)
fmt = fm.group(1).strip().title() if fm else 'Unknown'
</code></pre>
<h4 id="countries-%E2%80%94-substring-keyword-search">Countries — Substring Keyword Search</h4>
<p>Case-insensitive substring match across the <strong>entire file</strong> (Title + Organiser + Content). Sessions are counted once per matched country — duplicates within a file do not inflate counts.</p>
<pre><code class="language-python">COUNTRY_VARIANTS = {
    'Indonesia':    ['indonesia'],
    'Philippines':  ['philippines'],
    'India':        ['india'],
    'Nepal':        ['nepal'],
    'Myanmar':      ['myanmar', 'burma'],
    'Bangladesh':   ['bangladesh'],
    'Pakistan':     ['pakistan'],
    'Malaysia':     ['malaysia'],
    'Sri Lanka':    ['sri lanka'],
    'Thailand':     ['thailand'],
    'Taiwan':       ['taiwan'],
    'Singapore':    ['singapore'],
    'Vietnam':      ['vietnam'],
    'China':        ['china'],
    'Cambodia':     ['cambodia'],
    'Korea':        ['korea', 'south korea', 'north korea'],
    'Japan':        ['japan'],
    'Australia':    ['australia'],
    'Pacific':      ['pacific', 'asia pacific', 'asia-pacific', 'apac', 'oceania'],
    'Papua':        ['papua'],
    'Timor':        ['timor'],
    'Laos':         ['laos'],
}

def search_countries(text: str) -&gt; list[str]:
    """Case-insensitive substring match. Returns unique countries found."""
    text_lower = text.lower()
    found = []
    for country, variants in COUNTRY_VARIANTS.items():
        for variant in variants:
            if variant in text_lower:    # substring — not word-boundary
                found.append(country)
                break
    return found

# Usage: countries = search_countries(title + ' ' + organiser + ' ' + content)
</code></pre>
<h4 id="track-%C3%97-format-cross-tabulation">Track × Format Cross-Tabulation</h4>
<pre><code class="language-python">from collections import Counter, defaultdict
track_fmt = defaultdict(lambda: defaultdict(int))
for s in sessions:
    track_fmt[s['track']][s['format']] += 1
</code></pre>
<h4 id="upvotes-extraction">Upvotes Extraction</h4>
<pre><code class="language-python">m = re.search(r'##\s*#\d+\s*\n+\[(\d+)\]', content)
votes = int(m.group(1)) if m else 0
</code></pre>
<h4 id="aggregation">Aggregation</h4>
<ul>
<li><strong>Thematic Tracks</strong> and <strong>Session Formats</strong> tables: <code>Counter</code> aggregation of extracted <code>track</code> and <code>format</code> fields</li>
<li><strong>Track × Format matrix</strong>: <code>defaultdict</code> cross-tabulation</li>
<li><strong>Countries</strong>: <code>Counter</code> per country per track — sessions can appear in multiple country rows (sum of rows &gt; total sessions)</li>
</ul>
<p><strong>Note:</strong> Country counts reflect unique sessions mentioning each country — a session mentioning Indonesia and Philippines counts once in each row. A session may appear in multiple country rows simultaneously (sum of country rows &gt; total sessions).</p>
<h3 id="known-limitations">Known Limitations</h3>
<table>
<thead>
<tr>
<th>Issue</th>
<th>Effect</th>
<th>Mitigation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>k</code> is a chosen hyperparameter</td>
<td>Topics depend on choice of <code>k</code></td>
<td>Ran k={8,12}; 8-topic was most interpretable</td>
</tr>
<tr>
<td>LDA is probabilistic</td>
<td>Same <code>k</code> with different seeds gives slightly different topics</td>
<td>Fixed <code>random_state=42</code> throughout</td>
</tr>
<tr>
<td>Session length (~232 words avg) limits LDA quality</td>
<td>Shorter documents = noisier topic distributions</td>
<td>Filtered dictionary extremes; 40 passes for k=8</td>
</tr>
<tr>
<td>HDBSCAN requires <code>min_cluster_size</code> tuning</td>
<td>Different values produce different cluster counts</td>
<td>Tested mcs={20,25,30}; chose mcs=25 (7 clusters, 15% noise)</td>
</tr>
<tr>
<td>Stopword list may filter legitimate terms</td>
<td>Some thematic terms removed</td>
<td>Custom stoplist avoids removing domain-specific terms</td>
</tr>
<tr>
<td>Votes</td>
<td>Live snapshot from scrape date</td>
<td>Do not treat as current values</td>
</tr>
</tbody>
</table>
<hr>
<!-- Metadata for Obsidian search
created: 2026-03-29
updated: 2026-04-02
type: research/analysis
project: DRAPAC 26
region: Asia-Pacific
methods: LDA (k=8, k=12), UMAP, HDBSCAN, TF-IDF, regex extraction
scripts: drapac_analysis.py, drapac_metadata.py
-->
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Playing Around with Agentic AI ]]></title>
        <description><![CDATA[ How I turned a rarely used gaming laptop into an AI agentic infrastructure.

The AI agentic platform is widely talked about, and that sparked my interest in the possibilities it could give. My laptop has been lying around without much use, so I had to make it useful. Considering the ]]></description>
        <link>https://manasiwibi.com/playing-around-with-agentic-ai/</link>
        <guid isPermaLink="false">69c3fda6a106e40001ff1f67</guid>
        <category><![CDATA[ AI ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 25 Mar 2026 22:55:20 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>How I turned a rarely used gaming laptop into an AI agentic infrastructure.</p><p>The AI agentic platform is widely talked about, and that sparked my interest in the possibilities it could give. My laptop has been lying around without much use, so I had to make it useful. Considering the extent of possibilities and making use of my available tools, I decided to turn it into my local AI agentic infrastructure.</p><p>The tools/apps I'm exploring are:</p><ul><li><strong>Llama.cpp:</strong> To self-host an LLM model.</li><li><strong>OpenClaw:</strong> Personal Agentic AI</li><li><strong>Hermes Agent</strong>: Personal Agentic AI</li><li><strong>Firecrawl:</strong> Self-hosted browser capabilities.</li><li><strong>Honcho Memory:</strong> Memory layer for agentic AI.</li><li><strong>qmd:</strong> Search engine for my local docs.</li><li><strong>Obsidian:</strong> Managing my local docs/notes.</li></ul><p>Starting from the OS, I use Arch as the base OS, and a QEMU VM running Debian 13 for the AI system. It is crucial to compartmentalize my device for security purposes, so I went that path. Given the enormous experimentation currently going on in the sector, it is necessary not to give full control to my local devices with all the AI systems running in the same place.</p><p>For the LLM model, due to limited device specification resources, I had to use a self-hosted Llama.cpp running Qwen3.5 30b a3b. I also use the third-party services of OpenRouter. Furthermore, I decided to use two different AI agentic platforms, OpenClaw and Hermes Agent, to experiment with their advantages and disadvantages.</p><p>I use OpenClaw for slightly more private and personal interactions, complemented with the local LLM of the aforementioned models running on Llama.cpp. On Hermes Agent, I use the free routing of OpenRouter.</p><p>One of the current challenges or limitations in the agentic sector is about memory and context. All conversations are practically limited by the current conversation within a session. Each platform deals with these challenges differently, and yet, AFAIK, they are still exploring the most suitable design. This is why I self-hosted Honcho Memory. So far, it is able to retain my context across all conversations.</p><p>What it does: I am still exploring more, but it currently does these main jobs:</p><ul><li>Managing my financial records/txs.</li><li>Basic researching skills.</li><li>Daily news briefing.</li><li>Personal calendar/schedule management.</li></ul><p>It is fascinating how it does all of those automatically, given, to some degree, how tedious and repetitive the workflows or processes are. So it slightly boosted my productivity.</p><p>I'm excited for the way ahead! Will share how I explore it further and what it does to my workflow processes.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Reflecting on My CISA Certification ]]></title>
        <description><![CDATA[ I passed and am now certified as a Certified Information Systems Auditor (CISA). Now what?

I got the opportunity to go through the CISA course and pass ISACA&#39;s CISA certification. It was quite a long journey, and I carefully prepared before I took the exam and finally passed ]]></description>
        <link>https://manasiwibi.com/reflecting-on-my-cisa-certification/</link>
        <guid isPermaLink="false">69a886baa106e40001ff1f4f</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Thu, 05 Mar 2026 02:27:40 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>I passed and am now certified as a Certified Information Systems Auditor (CISA). Now what?</p><p>I got the opportunity to go through the CISA course and pass ISACA's CISA certification. It was quite a long journey, and I carefully prepared before I took the exam and finally passed it in the first try. Nevertheless, I still felt a lack of knowledge and realized there is a gap between what I know theoretically and the practices in the industry.</p><p>Over the past two years, I have worked intensely as an auditor, specifically as a digital security auditor in the non-profit sector. In the non-profit sector, we mostly conduct audits for advocacy groups or local/independent media. We also have our own framework for this type of organization: Security Auditing Framework and Evaluation Template for Advocacy Groups (SAFETAG). Developed by Internews, SAFETAG adapts traditional pentest and risk assessment methodologies to be more suitable for medium or smaller organizations, especially in the non-profit space. I have also published two guidelines in Indonesia about conducting an audit for CSOs and online media. Still, I was thinking something was missing.</p><p>From that curiosity, I decided to participate in two ISACA mentorship programs simultaneously, the regular mentorship and the student mentorship program. I am still early in the process, but the amount of insight I have already gotten is tremendous. It is such a privilege and a valuable opportunity to meet my mentors. They are truly role models for audit jobs, bringing their experiences, hands-on knowledge, and practical work in the industry across sectors. Every bit of my interaction with them is filled with insight and widens my thoughts.</p><p>Before we dig deeper, I'd like to mention one thing. CISA is indeed a paper-based proof that I know something, but regarding <em>what</em> and <em>how</em> I work, that's a whole different thing. I remember my course instructor stressed not to make CISA an end goal or the sole proof of skill proficiency. Moreover, this was also highlighted by one of my mentors, who agreed and said direct and practical experiences are more essential. I took these things not to discredit ISACA's CISA certification or the competencies from the certification, and the curricula and material about the certification itself, but rather I take it as an opportunity and challenge to learn more and involve myself deeper in this field. Reflecting on how hard I worked preparing for the exam, and the awareness that there are skills I am lacking, are the sole reasons I joined the mentorship. Furthermore, learning from experienced mentors is indeed boosting my capacity and knowledge about auditing way more easier.</p><p>As a mentee, I remember shadowing audit work for the first time. I had no clue what to do or what to say, trying to figure out why the process flows were being conducted. A lot of things were unknown to me, but I could grasp them faster through direct and practical learning. Moreover, I could clearly realize on what I was still lacking in terms of skills. Both my mentors pointed out that soft skills, such as communication, are essential. I know I can learn the technical stuff by myself, I have learned that way mostly all my life. But, as a technical person, experiencing the intricacies of soft skills is challenging, and I am looking forward to closing that gap. All of that is helped by the opportunity to learn from my mentors, and their offers to let me shadow them.</p><p>I would like to thank my current organization and Pak Bonaldi Kresnanto and Mr. Asif Mumtaz for the privilege of learning from them as a mentor. Passing CISA is indeed not a final milestone, but I learned a lot. It allows me to apply my knowledge to serve communities better, giving them proper and suitable support. I also look forward to sharing my knowledge and skills with my peers and other CISA aspirants who are still aiming to get the certification. Lastly, to involve and lears more specifically in the for profit industry.</p><p>In audit jobs, different sectors in industries do indeed have specific know-how to do the job better. But by widening my general audit skills, I hope I can implement them to make non-profit organizations and communities more secure against the shrinking civic spaces and unique adversaries they face, and explore how I can expand my support to serve communities across multiple industries.</p><p>I look forward to sharpening my skills, improving my knowledge, and learning further to help organizations and communities become more secure. Onward.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ We cannot register on Signal due to phone number verification issues ]]></title>
        <description><![CDATA[ Signal is an instant messaging application widely used by human rights defenders, activists, and other high-risk subjects. As of January 24, 2026, it seems Signal&#39;s phone number verification is broken. This means those who rely on secure communication can&#39;t use Signal.

The issue seems to have ]]></description>
        <link>https://manasiwibi.com/we-cannot-register-on-signal-due-to-phone-number-verification-issues/</link>
        <guid isPermaLink="false">6985d3922cf3e8000133dd75</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 06 Feb 2026 18:54:44 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Signal is an instant messaging application widely used by human rights defenders, activists, and other high-risk subjects. As of January 24, 2026, it seems Signal's phone number verification is broken. This means those who rely on secure communication can't use Signal.</p><p>The issue seems to have persisted since Jan 19, as raised in the source code repository:<a href="https://github.com/signalapp/Signal-Android/issues/14548/?ref=manasiwibi.com" rel="noopener">https://github.com/signalapp/Signal-Android/issues/14548/</a>. Until now, people, especially from Indonesia, still cannot register on Signal because it gets stuck on the phone number verification screen. It has been three weeks and the issue seems to be receiving no attention.</p><p>As a digital security trainer, this has become a challenge because Signal is one of the few secure messaging apps that I recommend. Unfortunately, we cannot invite new users to use this important app. I'm submitting a support request so hopefully it can be addressed.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Segregasi Internet ]]></title>
        <description><![CDATA[ Sedikit mengoceh (ranting) di malam hari. Di saat berselancar media sosial lalu menemukan tautan Medium menarik, ketika membukanya malah dipaksa untuk mendaftar di platform. Kala waktu, mencari sesuatu melalui mesin pencari yang menunjukkan informasi tertaut di forum Reddit, pas dubuka, dipaksa kembali untuk mendaftar. Suatu saat selagi memastikan penulisan atau ]]></description>
        <link>https://manasiwibi.com/segregasi-internet/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a971a2</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 07 Jan 2026 07:28:41 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Sedikit mengoceh (<em>ranting</em>) di malam hari. Di saat berselancar media sosial lalu menemukan tautan Medium menarik, ketika membukanya malah dipaksa untuk mendaftar di platform. Kala waktu, mencari sesuatu melalui mesin pencari yang menunjukkan informasi tertaut di forum Reddit, pas dubuka, dipaksa kembali untuk mendaftar. Suatu saat selagi memastikan penulisan atau arti kata yang tepat, membuka KBBI di situs web Kemdikbud pun dipaksa daftar lagi.<br><br>Jengkel mungkin menggambarkan apa yang terjadi, itulah salah satu alasan mengapa saya sempat menyediakan layanan alternatif (frontend) untuk mengakses platform populer. Nitter untuk buka Twitter, Proxitok untuk Tiktok, Scribe untuk Medium. Layanan terkait menyediakan akses ke suatu platform tanpa perlu mengakses peladennya secara langsung. Lebih cepat, ringan, dan melindungi privasi. Meskipun beberapa sudah tidak ada lagi karena alasan platform terkait melakukan pembatasan, tetapi beberapa upaya pengembangan aplikasi serupa masih berlanjut. <br><br>Menimbang sekarang eranya AI, sudah jelas platform-platform di internet akan semakin menggila melakukan <em>rate-limiting</em>. Akhirnya, open web menjadi hal pelik.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Fedora 43 Upgrade Broke Application Launcher ]]></title>
        <description><![CDATA[ When you can&#39;t wait for a shiny new stuff, so you straight up upgrading to a fresh release update, and it broke the system. It is always a goo d idea to give it some time for a newly released software, but I did not hesitate. And yep, ]]></description>
        <link>https://manasiwibi.com/fedora-43-upgrade-broke-application-launcher/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9719f</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Mon, 03 Nov 2025 21:59:37 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>When you can't wait for a shiny new stuff, so you straight up upgrading to a fresh release update, and it broke the system. It is always a goo d idea to give it some time for a newly released software, but I did not hesitate. And yep, some users report few bugs and the application launcher being broken is one of them.<br><br>The following is the error that I got by upgrading to Fedora 43 from 42.</p><pre><code>file:///usr/share/plasma/plasmoids/org.kde.plasma.kickoff/contents/ui/main.qml:21:1: Cannot load library /usr/lib64/qt6/qml/org/kde/plasma/private/kicker/libkickerplugin.so: /lib64/libKF6Runner.so.6: undefined symbol: _ZN14KWaylandExtras18xdgActivationTokenEP7QWindowRK7QString</code></pre><p>A quick workaround is to just simply downgrade the library by running <code>sudo dnf downgrade kf6-krunner</code>. In the meantime it does the job, but let's wait around for the fix.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Helping Archive the Internet ]]></title>
        <description><![CDATA[ I have known internet archiving initiative by archive.org long ago, I thought they do it all by themselves. Turns out, they do also open contributor to join the archiving efforts– I should have known better that it does indeed require massive collective effort

One thing that caught my interest ]]></description>
        <link>https://manasiwibi.com/helping-the-internet-archiving-efforts/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9719e</guid>
        <category><![CDATA[ Archive ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Tue, 27 May 2025 17:41:39 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>I have known internet archiving initiative by archive.org long ago, I thought they do it all by themselves. Turns out, they do also open contributor to join the archiving efforts– I should have known better that it does indeed require massive collective effort</p><p>One thing that caught my interest is about ArchiveTeam Warrior. It is a bundled application, where you can participate and helps the archiving initiative. The application will automatically download sites and directly upload them to archive.org. The full information about the ArchiveTeam Warrior can be seen <a href="https://wiki.archiveteam.org/index.php/Main_Page?ref=manasiwibi.com" rel="noreferrer">here</a>.</p><p>Since I still have some resources on my VPS, why not I maximize its usage by running the application. So I have been run it likes a couple of month ago, IIRC. Letting it run and pretty much I did not have to monitor nor maintain the application. It just run and archiving automatically.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://manasiwibi.com/content/images/2025/05/image.png" class="kg-image" alt="ArchiveTeam Warrior Web Interface" loading="lazy" width="2000" height="980" srcset="https://manasiwibi.com/content/images/size/w600/2025/05/image.png 600w, https://manasiwibi.com/content/images/size/w1000/2025/05/image.png 1000w, https://manasiwibi.com/content/images/size/w1600/2025/05/image.png 1600w, https://manasiwibi.com/content/images/size/w2400/2025/05/image.png 2400w" sizes="(min-width: 1200px) 1200px"><figcaption><span style="white-space: pre-wrap;">ArchiveTeam Warrior Web Interface</span></figcaption></figure><p>If you have some leftover computing and bandwidth resources and want to put them to good use, joining and participating in the ArchiveTeam Warrior is a great thing to do.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Tokopedia Tidak Ramah Email Aman ]]></title>
        <description><![CDATA[ Beberapa waktu lalu, akun Tokopedia saya tiba-tiba terblokir. Informasi ketika saya masuk ke akun Tokopedia menampilkan bahwasanya akun saya melanggar syarat dan ketentuan tanpa ada penjelasan secara spesifik.

Setelah mengirim laporan pada layanan konsumen untuk mempertanyakan alasan mengapa akun saya terblokir, balasannya sebagai berikut.

Terima kasih sudah menunggu. Kami infokan ]]></description>
        <link>https://manasiwibi.com/tokopedia-tidak-ramah-email-aman/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97199</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Thu, 08 Feb 2024 08:44:33 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><br>Beberapa waktu lalu, akun Tokopedia saya tiba-tiba terblokir. Informasi ketika saya masuk ke akun Tokopedia menampilkan bahwasanya akun saya melanggar syarat dan ketentuan tanpa ada penjelasan secara spesifik.</p><p>Setelah mengirim laporan pada layanan konsumen untuk mempertanyakan alasan mengapa akun saya terblokir, balasannya sebagai berikut.</p><blockquote>Terima kasih sudah menunggu. Kami infokan Kendala akun Kakak yang terblokir karena melanggar syarat dan ketentuan Tokopedia Tokopedia poin B No 12 :<br>"Pengguna dilarang untuk menciptakan dan/atau menggunakan perangkat, software, fitur dan/atau alat lainnya yang bertujuan untuk melakukan manipulasi pada sistem Tokopedia, termasuk namun tidak terbatas pada : (i) manipulasi data Toko; (ii) kegiatan perambanan (crawling/scraping); (iii) kegiatan otomatisasi dalam transaksi, jual beli, promosi, dsb; (v) penambahan produk ke etalase; dan/atau (vi) aktivitas lain yang secara wajar dapat dinilai sebagai tindakan manipulasi sistem".<br>Selengkapnya bisa akses di <a href="https://www.tokopedia.com/terms?lang=id&ref=manasiwibi.com" rel="noreferrer nofollow noopener">link ini</a> ya. Kedepannya Kami imbau agar selalu mengikuti syarat dan ketentuan Tokopedia agar tidak terjadi kendala yang sama ya.</blockquote><p>Lengkapnya mengenai poin dan nomor tersebut:</p><blockquote>Pengguna dilarang untuk menciptakan dan/atau menggunakan perangkat keras/lunak/fitur dan/atau alat lainnya, termasuk namun tidak terbatas pada emulator, robot, macro, crawler dan/atau perangkat otomatis yang bertujuan untuk mengakses atau menggunakan layanan pada sistem Tokopedia, seperti namun tidak terbatas pada : (i) manipulasi data Toko; (ii) membuat banyak akun; (iii) memanipulasi perangkat yang bertujuan untuk merugikan Tokopedia; (iv) kegiatan perambanan (crawling/scraping) atau penyalinan konten; (v) kegiatan otomatisasi dalam transaksi, jual beli, promosi,dan lain sebagainya; (vi) penambahan produk ke etalase; (vii) mengumpulkan (harvest) atau mencuri data pengguna; (viii) melakukan spamming, mengirimkan komunikasi elektronik dalam jumlah besar, mengirimkan surat berantai; dan/atau (ix) aktivitas lain yang secara wajar dapat dinilai sebagai tindakan manipulasi layanan dan sistem.</blockquote><p>Karena saya tidak melakukan hal-hal tersebut, saya mengajukan banding dan mendapat balasan dari mereka.</p><blockquote>Terima kasih sudah menunggu ya Kak. Agar dapat Kami bantu analisa lebih lanjut, mohon informasikan alasan menggunakan domain email tersebut ya Kak. Kami tunggu infonya ya Kak</blockquote><p>Sebagai catatan, saya menggunakan layanan <em>alias</em> email dari <a href="https://simplelogin.io/?ref=manasiwibi.com" rel="noreferrer">SimpleLogin</a>, sebuah layanan untuk melindungi alamat email asli dengan cara meneruskan suatu email pada alamat email tersebut.<br><br>Saya membalas alasan penggunaannya dengan menjelaskan layanan email alias tersebut dan "Hal tersebut juga saya lakukan sebagai langkah preventif pribadi untuk mencegah kebocoran data, sebagaimana yang Tokopedia pernah alami. Sehingga jika hal tersebut terjadi kembali, email asli saya tidak mengalami kebocoran."</p><p>Pada balasan selanjutnya, tidak ada penjelasan lebih lanjut terkait ataupun yang berkenaan dengan penggunan layanan email tersebut, akan tetapi, pihak Tokopedia hanya memerintahkan untuk mengganti email yang menggunakan layanan yang <em>umum</em>, seperti "gmail dan yahoo" sebagai solusi untuk mengaktifkan kembali akun saya.</p><blockquote>2. Email baru yang tidak terhubung dengan akun lain dengan domain yang sesuai (gmail dan yahoo)</blockquote><p>Saya mencoba untuk melakukan permintaan penggantian email menggunakan email asli saya pada layanan <a href="https://proton.me/mail?ref=manasiwibi.com" rel="noreferrer">ProtonMail</a>, namun mereka tetap tidak menerima layanan tersebut.</p><blockquote>Baik Kak, Kakak bisa menginfokan email dengan domain yang umum digunakan seperti @gmail.com ya Kak agar bisa Kami proses perubahan emailnya.</blockquote> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Digital Garden is What I Need. ]]></title>
        <description><![CDATA[ Ever since I started this website, I have been wondering how should i categorize my own site. Initially, the reason I started my site is that I just want to share thoughts regarding things that interest me on the platform where I fully control. I did not want to strictly ]]></description>
        <link>https://manasiwibi.com/digital-garden-is-what-i-need/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97197</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 10 Jan 2024 01:33:29 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Ever since I started this website, I have been wondering how should i categorize my own site. Initially, the reason I started my site is that I just want to share thoughts regarding things that interest me on the platform where I fully control. I did not want to strictly categorize it as a blog, I once deemed it simply just as a personal site, but I think that term is too broad.<br><br>Recently, I read an interesting <a href="https://www.fromjason.xyz/p/notebook/where-have-all-the-websites-gone/?ref=manasiwibi.com" rel="noreferrer">post</a>, so I looked around the author's site, the homepage outright shows "a digital garden..", a term that I once knew of but just flies by, but now it catches my interest, so I dig deep about it. I like the idea of how a digital garden is way more versatile in terms of "cultivating" the whole of the site.</p><p>The recollection of Digital Garden reminds me of a great blog post that I, unfortunately, didn't remember nor bookmarked the link, essentialy, the article addresses about why people should start writing/blogging, about anything, even though the subject is already been mentioned/written over and over. Well, that just proves its point. So yeah, that's about it. I gonna start to adjust and affirm my web as a Digital Garden.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Finding a New RSS Reader ]]></title>
        <description><![CDATA[ A couple of months ago I bought a brand new device, a laptop to be precise. It also changed my old main device, MacBook, into this new device, Lenovo, where I installed Linux. After years of not touching Linux, it has been a fun ride to distro hopping again, but ]]></description>
        <link>https://manasiwibi.com/finding-a-new-rss-reader/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97195</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 05 Jan 2024 01:52:03 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>A couple of months ago I bought a brand new device, a laptop to be precise. It also changed my old main device, MacBook, into this new device, Lenovo, where I installed Linux. After years of not touching Linux, it has been a fun ride to distro hopping again, but now is the time to finalize what distro I'm going to use and set up my new environment.<br><br>I decided to use Fedora, and have configured the Nvidia driver. One thing missing is the RSS Reader. When I still use a MacBook, <a href="NetNewsWire" rel="noreferrer">NetNewsWire</a> perfectly suits my needs. The iCloud sync, the UI, but unfortunately, it only supports Apple ecosystem. The lack of cross-platform support forces me to find a new reader where cross-platform support is available since I do still use my Apple devices as my go-to device, especially when I travel.<br><br>Initially, I just separated the RSS reader for my main device and the other one, but having a new subscription, bookmark, and read status not synched up is a bummer. I tried Raven Reader and Liferea, but none of them is far to be acceptable. The feature I looking for is mainly it has to have cross-platform support, synchronization, and also free. An application that caught my eye is <a href="https://github.com/feedbin/feedbin?ref=manasiwibi.com" rel="noreferrer">Feedbin</a>, it can be self-hosted, nevertheless, it seems tedious,  according to their README file. They suggest another application that can be self-hosted. Well, I guess I'll try to look around for a web-based RSS reader to completely suit those three features I looking for.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Starting 2024 by Playing Around with AI ]]></title>
        <description><![CDATA[ I might be late to the recent AI hype, specifically about Large Language Models and Generative Art. Those subjects are the ones I heard about the most, the utility and use case are pretty much resonated with a lot of people. That&#39;s what I&#39;m going try ]]></description>
        <link>https://manasiwibi.com/starting-2024-by-playing-around-with-ai/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97194</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 03 Jan 2024 01:28:00 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><br><br>I might be late to the recent AI hype, specifically about Large Language Models and Generative Art. Those subjects are the ones I heard about the most, the utility and use case are pretty much resonated with a lot of people. That's what I'm going try to play around with.</p><p>Furthermore, browsing around the ecosystem I was greeted by a lot of applications and tools, also the model itself varies. A lot to explore, I might say. It seems like I would start with <a href="https://github.com/StanGirard/quivr?ref=manasiwibi.com" rel="noreferrer">Quivr</a>, a project that marketed itself as a second brain and a personal assistant. That seems fun and useful. Not to mention I regularly use <a href="https://logseq.com/?ref=manasiwibi.com" rel="noreferrer">Logseq</a> for note-taking and journaling, so trying to pair both applications seems like a good idea.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Memata-matai Notifikasi Ponsel ]]></title>
        <description><![CDATA[ Ketika kalian mendapatkan notifikasi &quot;push&quot; aplikasi di ponsel kalian, tepatnya ketika kalian tidak sedang membuka aplikasi terkait, notifikasi tersebut didapatkan melalui perantara. Interaksi itu tidak terjadi antara pihak aplikasi dan pengguna secara langsung. Pengecualiannya adalah ketika pengguna sedang membuka lansung suatu aplikasi di layar ponselnya, setiap notifikasi langsung ]]></description>
        <link>https://manasiwibi.com/memata-matai-notifikasi-ponsel/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97192</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 13 Dec 2023 07:22:11 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Ketika kalian mendapatkan notifikasi "push" aplikasi di ponsel kalian, tepatnya ketika kalian tidak sedang membuka aplikasi terkait, notifikasi tersebut didapatkan melalui perantara. Interaksi itu tidak terjadi antara pihak aplikasi dan pengguna secara langsung. Pengecualiannya adalah ketika pengguna sedang membuka lansung suatu aplikasi di layar ponselnya, setiap notifikasi langsung diterima oleh pengguna.</p><p>Pada kasus <em>push notifications</em>, perantara ini bertindak seperti kantor pos, untuk mengirim dan menerima pesan. Perantara pesan push notifikasi tersebut adalah masing-masing brand dari perangkat ponsel kalian, Apple ataupun Google. Hal ini menyebebabkan kedua perusahaan tersebut bertindak sebagai pengantar pesan yang mana dapat "dicegat" oleh pihak yang berkepentingan, misal; negara, untuk mengecek notifikasi tersebut. Atau dapat mereka gunakan sendiri untuk kepentingan masing-masing perusahaan.</p><p>Pesan atau paket dari setiap notifikasi push tersebut tentu saja menghasilkan data dan juga metadata. Yang perlu menjadi catatan adalah pertukaran data dari proses tersebut tidak menggunakan proses enkripsi. Sehingga, selain data dari isi notifikasi tersebut, ada metadata lainnya seperti aplikasi apa yang menerima notifikasi, beserta waktu kejadiannya, perangkat pengguna, dan informasi akun Apple atau Google penerima notifikasi.</p><p><a href="https://www.documentcloud.org/documents/24191267-wyden_smartphone_push_notification_surveillance_letter_to_doj_-_signed?ref=manasiwibi.com" rel="noreferrer">Informasi</a> ini berdasar dari senator Amerika Sertikat, Ron Wyden. Kemungkinan lainnya, kedua perusahaan tersebut bisa memanfaatkan data ini adalah sebagaima kutipan beliau.<br>"Consequently, Apple and Google are in a unique position to facilitate government surveillance of how users are using particular apps." Bahkan, hal ini bukan kemungkinan lagi, karena aktor pada suatu negara memang mendesak Apple dan Google untuk menyerahkan catatan dari data-data notifikasi pengguna ini.<br><br>Dalam sisi <a href="https://blog.davidlibeau.fr/push-notifications-are-a-privacy-nightmare/?ref=manasiwibi.com" rel="noreferrer">teknis</a>, kelemahan ini memang inheren karena bagaimana dari keseluruhan proses push notifikasi pada perangkat ponsel bekerja. Untuk saat ini, tidak ada solusi konkret yang dapat secara mudah dilakukan, selain, dari sisi pengembang aplikasi  tidak menggunakan fitur  notifkasi, dan para pengguna, khususnya Android, bisa menggunakan sistem operasi alternatif yang lebih menghargai dan mementingkan privasi.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Dataset Domain Indonesia ]]></title>
        <description><![CDATA[ Mengumpulkan domain di Internet bisa digunakan untuk banyak hal, salah satunya adalah untuk penelitian atau riset. Indonesia sendiri mempunyai berbagai tipe country code top level domain (ccTLD), dari yang khusus untuk sekolah, pemerintahan, organisasi, hingga pondok pesantren. Berbagai domain tersebut memang bisa digunakan untuk umum, entah dari segi aspek situsnya ]]></description>
        <link>https://manasiwibi.com/dataset-domain-indonesia/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97191</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Thu, 23 Nov 2023 17:52:48 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Mengumpulkan domain di Internet bisa digunakan untuk banyak hal, salah satunya adalah untuk penelitian atau riset. Indonesia sendiri mempunyai berbagai tipe country code top level domain (ccTLD), dari yang khusus untuk sekolah, pemerintahan, organisasi, hingga pondok pesantren. Berbagai domain tersebut memang bisa digunakan untuk umum, entah dari segi aspek situsnya maupun pengguna dalam atau luar negeri. Namun demikian, beberapa domain memerlukan syarat khusus untuk mendaftarkannya. Sebagai contoh, domain <code>.sch.id</code> dan <code>.co.id</code> memerlukan dokumen verifikasi tambahan, sebelum dapat dibeli dan dipergunakan. Mengenai informasi lebih lengkap tentang persyaratan apa saja yang diberlakukan pada domain Indonesia dapat dilihat langsung pada situs pengelola domain Indonesia, yaitu, <a href="https://pandi.id/mengapa-id?ref=manasiwibi.com">PANDI</a> (Pengelola Nama Domain Internet Indonesia).</p>
<p>Pengerucutan domain tersebut bisa dimanfaatkan untuk mengumpulkan data spesifik dari tujuan TLD atau ccTLD domain itu tersendiri, kumpulan domain pemerintah bisa digunakan sebagai sumber data riset tentang keamanan situs-situs mereka. Bahkan, secara generik, dengan menganalisis keseluruhan domain <code>.id</code> bisa dimanfaatkan untuk mencari gambaran tentang kondisi teknis situs-situs dengan domain Indonesia. Sampai saat ini, 22/11/23, terdapat 816.424 domain .id <sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup>. Pada laporan tahunan 2022 PANDI terdapat informasi bahwa mereka memiliki sistem <em>crawl</em> untuk mengecek berapa banyak situs aktif dengan domain <code>.id</code>, akan tetapi, saya belum menemukan di mana informasi tersebut disosialisasikan. Sedangkan rincian dari berapa banyak jumlah per domain bisa di lihat pada tabel berikut.</p>
<table>
<thead>
<tr>
<th>Month</th>
<th>Year</th>
<th>Total</th>
<th>.ac.id</th>
<th>.biz.id</th>
<th>.co.id</th>
<th>.desa.id</th>
<th>.go.id</th>
<th>.id</th>
<th>.mil.id</th>
<th>.my.id</th>
<th>.net.id</th>
<th>.or.id</th>
<th>.ponpes.id</th>
<th>.sch.id</th>
<th>.web.id</th>
</tr>
</thead>
<tbody>
<tr>
<td>Oktober</td>
<td>2023</td>
<td>806,830</td>
<td>6,648</td>
<td>54,208</td>
<td>100,004</td>
<td>17,845</td>
<td>3,392</td>
<td>219,413</td>
<td>216</td>
<td>325,880</td>
<td>840</td>
<td>12,373</td>
<td>859</td>
<td>45,342</td>
<td>19,810</td>
</tr>
</tbody>
</table>
<p>Contoh lainnya tentang pemanfaatan <em>crawling</em> tersebut sudah pernah dilakukan oleh Scott Helme<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup>, dalam proyek crawler.ninja<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup> ia menganalisa kondisi keamanan pada 1M situs teratas. Data domain yang digunakan adalah Tranco, sebuah dataset yang memang dibuat dengan orientasi riset<sup class="footnote-ref"><a href="#fn4" id="fnref4">[4]</a></sup>. Ada juga contoh lain, khususnya pada Uni Eropa, proyek NoLeaks yang memakai sumber data yang sama melakukan analisa tentang status privasi pada situs-situs dengan domain EU di setiap negaranya masing-masing<sup class="footnote-ref"><a href="#fn5" id="fnref5">[5]</a></sup>. Dan juga banyak contoh kasus lainnya.</p>
<p>Suatu hari saya juga sempat mencoba mencari tahu tentang sumber yang bisa dipakai, khususnya dalam ruang lingkup Indonesia, sayangnya, saya tidak dapat menemukan sumber tersebut. Oleh karena itu, saya coba kelola dan juga melakukan sedikit pemrosesan data dari sumber-sumber terkait seperti Tranco dan yang lainnya.</p>
<p>Olahan kumpulan data tersebut diproses dari berbagai sumber. Saat ini terdapat 3 sumber data, Tranco, ipsniper, dan Domains Project.</p>
<h2 id="tranco">Tranco</h2>
<p>Metodologi pengumpulan data Tranco, berasal dari sumber Chrome User Experience Report (CrUX), Cloudflare Radar, Farsight, Majestic, dan Cisco Umbrella. Lalu, mereka mengaplikasikan sistem <a href="https://en.wikipedia.org/wiki/Borda_count?ref=manasiwibi.com#Dowdall_system_(Nauru)">Dowdall</a> untuk mengkalkulasi peringkat untuk setiap domain. Sampai saat ini, Tranco telah dipakai sebagai publikasi penelitian sebanyak 550 kali<sup class="footnote-ref"><a href="#fn6" id="fnref6">[6]</a></sup>.</p>
<h2 id="ipsniper">ipsniper</h2>
<p>ipsniper, tidak banyak yang bisa dibahas mengenai metode pengumpulan dari situs ini, ada satu informasi menyebutkan pengelolaan situs memang dilakukan secara anonim, sehingga informasi berkaitan dengan komunitas maupun kontak situs terkait tidak tersedia<sup class="footnote-ref"><a href="#fn7" id="fnref7">[7]</a></sup>.</p>
<h2 id="domain-project">Domain Project</h2>
<p>Sumber ini menggunakan metode <em>crawling</em> dan pengecekan DNS untuk mendapatkan domain baru<sup class="footnote-ref"><a href="#fn8" id="fnref8">[8]</a></sup>. Bohdan Turkynevych, selaku <em>maintainer</em> dari proyek ini juga mengembangkan sendiri aplikasi untuk menunjang tujuan dari metode tersebut.</p>
<h2 id="kumpulan-domain-indonesia">Kumpulan Domain Indonesia</h2>
<p>Kumpulan domain dengan TLD dan ccTLD Indonesia terkandung dalam 3 sumber tersebut. Sehingga, data tersebut bisa diolah untuk mendapatkan kumpulan dataset yang hanya mengandung domain Indonesia. Caranya bisa dilakukan dengan mengunduh sumber data mereka, lalu, melakukan pengolahan data, sebagai contoh, bisa dilakukan dengan aplikasi, <code>grep</code> atau <code>awk</code>.</p>
<p>Tanpa berlama-lama lagi, informasi dan tempat dari tata cara pengolahan dan sumber yang sudah difilter bisa lansung mengunjungi repository yang saya kelola. Yaitu, <a href="https://github.com/ManaSiWibi/dataset-domain-indonesia?ref=manasiwibi.com">Kumpulan Dataset Domain Indonesia</a>.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://pandi.id/laporan-statistik?ref=manasiwibi.com">https://pandi.id/laporan-statistik</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p><a href="https://scotthelme.co.uk/top-1-million-analysis-june-2022/?ref=manasiwibi.com">https://scotthelme.co.uk/top-1-million-analysis-june-2022/</a> <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn3" class="footnote-item"><p><a href="https://crawler.ninja/?ref=manasiwibi.com">https://crawler.ninja/</a> <a href="#fnref3" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn4" class="footnote-item"><p><a href="https://tranco-list.eu/?ref=manasiwibi.com">https://tranco-list.eu/</a> <a href="#fnref4" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn5" class="footnote-item"><p><a href="https://noleaks.eu/reports.html?ref=manasiwibi.com">https://noleaks.eu/reports.html</a> <a href="#fnref5" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn6" class="footnote-item"><p><a href="https://scholar.google.be/scholar?cites=1499698348405075976%2C10234769677796230547&ref=manasiwibi.com">https://scholar.google.be/scholar?cites=1499698348405075976%2C10234769677796230547</a> <a href="#fnref6" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn7" class="footnote-item"><p><a href="https://github.com/tb0hdan/domains/issues/13?ref=manasiwibi.com#issuecomment-1253449308">https://github.com/tb0hdan/domains/issues/13#issuecomment-1253449308</a> <a href="#fnref7" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn8" class="footnote-item"><p><a href="https://github.com/tb0hdan/domains?ref=manasiwibi.com#domains-project-bot">https://github.com/tb0hdan/domains#domains-project-bot</a> <a href="#fnref8" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<p></p><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ [WIP] Web Measurements Tools ]]></title>
        <description><![CDATA[ OpenWPM

GitHub - openwpm/OpenWPM: A web privacy measurement frameworkA web privacy measurement framework. Contribute to openwpm/OpenWPM development by creating an account on GitHub.GitHubopenwpm

Research Usage: https://scholar.google.com/scholar?hl=en&amp;as_sdt=0%2C33&amp;q=openwpm&amp;btnG=


DuckDuckGo Tracker Radar Collector

GitHub ]]></description>
        <link>https://manasiwibi.com/wip-web-measurements-tools/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97190</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 22 Nov 2023 19:40:34 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p></p><p></p><h1 id="openwpm">OpenWPM</h1><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/openwpm/OpenWPM?ref=manasiwibi.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - openwpm/OpenWPM: A web privacy measurement framework</div><div class="kg-bookmark-description">A web privacy measurement framework. Contribute to openwpm/OpenWPM development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" alt=""><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">openwpm</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/6bb90b7f570af8de33f10b48249f9a75892aad18ba461ec8d8d4bd5193d71516/openwpm/OpenWPM" alt="" onerror="this.style.display = 'none'"></div></a></figure><p>Research Usage: <a href="https://scholar.google.com/scholar?hl=en&as_sdt=0%2C33&q=openwpm&btnG=&ref=manasiwibi.com">https://scholar.google.com/scholar?hl=en&amp;as_sdt=0%2C33&amp;q=openwpm&amp;btnG=</a></p><h1 id="duckduckgo-tracker-radar-collector">DuckDuckGo Tracker Radar Collector</h1><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/duckduckgo/tracker-radar-collector?ref=manasiwibi.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - duckduckgo/tracker-radar-collector: 🕸 Modular, multithreaded, puppeteer-based crawler</div><div class="kg-bookmark-description">🕸 Modular, multithreaded, puppeteer-based crawler. Contribute to duckduckgo/tracker-radar-collector development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" alt=""><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">duckduckgo</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://opengraph.githubassets.com/55595ff599840a5e70c9a34355f730c1fe09914a69f46b532b816bfa59953964/duckduckgo/tracker-radar-collector" alt="" onerror="this.style.display = 'none'"></div></a></figure><h1 id="blacklight">Blacklight</h1><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/the-markup/blacklight-collector?ref=manasiwibi.com"><div class="kg-bookmark-content"><div class="kg-bookmark-title">GitHub - the-markup/blacklight-collector</div><div class="kg-bookmark-description">Contribute to the-markup/blacklight-collector development by creating an account on GitHub.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" alt=""><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">the-markup</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://repository-images.githubusercontent.com/296163975/12af3a00-0661-11eb-89f5-83ad3bb88a0a" alt="" onerror="this.style.display = 'none'"></div></a></figure><p>Research Usage: <a href="https://scholar.google.com/scholar?hl=en&as_sdt=0%2C33&q=themarkup.org%2Fblacklight&btnG=&ref=manasiwibi.com">https://scholar.google.com/scholar?hl=en&amp;as_sdt=0%2C33&amp;q=themarkup.org%2Fblacklight&amp;btnG=</a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Regex end of line ($) Didn&#x27;t Work ]]></title>
        <description><![CDATA[ Just trying to learn about regex, and frustratingly spent some time to figure out why the end-of-line sign did not work. Turns out, the text file format is the culprit.


Text file refers to the file format of plain text. Each operating system has its own type and it affects ]]></description>
        <link>https://manasiwibi.com/regex-end-of-line-didnt-work/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9718f</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sun, 19 Nov 2023 11:38:47 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Just trying to learn about regex, and frustratingly spent some time to figure out why the end-of-line sign did not work. Turns out, the text file format is the culprit.</p>
<p>Text file refers to the file format of plain text. Each operating system has its own type and it affects the line endings:</p>
<ul>
<li>Windows (DOS): carriage return and line feed, or CR-LF. <code>\r\n</code></li>
<li>Nix: LF. <code>\n</code></li>
</ul>
<p>A line in DOS text file contains an extra carriage return character at the end of line, the <code>\r</code>. Which makes <code>$</code> regex won't be able to detect it. Or another way of saying it is that end-of-line regex sign only applies to <code>\n</code> characters.</p>
<p>So there are 2 ways to fix it:</p>
<ul>
<li>
<p>Convert the File<br>
Simply use <code>dos2unix</code> To convert a CR-LF to LF.</p>
</li>
<li>
<p>Use the Proper Regex<br>
The correct way to detect DOS file format is with <code>\r$</code>. A literal carriage return character and the $ sign. This will match DOS format.<br>
Another way is to use <code>[[:space:]]$</code>. In which "the <code>[[:space:]]</code> bit will match any single "space-like character", and this includes the carriage-return."<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
</li>
</ul>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://unix.stackexchange.com/a/624736?ref=manasiwibi.com">https://unix.stackexchange.com/a/624736</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
 ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Pustaka Taratsa ]]></title>
        <description><![CDATA[ crosspost dari https://taratsa.id/pustaka-taratsa/

Pustaka Taratsa merupakan aplikasi berbasis web untuk menjelajah, membaca, mengunduh berbagai buku elektronik atau e-books. Sebuah perpustakaan virtual/digital serta arsip digital, dan suatu inisiatif kolektif non-komersil.

Pustaka ini merupakan salah satu program/proyek kami atas upaya untuk menyediakan ruang dan/atau platform pendistribusian ]]></description>
        <link>https://manasiwibi.com/pustaka-taratsa/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9718e</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sat, 28 Oct 2023 18:55:00 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><em>crosspost dari </em><a href="https://taratsa.id/pustaka-taratsa/?ref=manasiwibi.com"><em>https://taratsa.id/pustaka-taratsa/</em></a></p><p><a href="https://pustaka.taratsa.id/?ref=manasiwibi.com" rel="noreferrer">Pustaka Taratsa</a> merupakan aplikasi berbasis web untuk menjelajah, membaca, mengunduh berbagai buku elektronik atau <em>e-books</em>. Sebuah perpustakaan virtual/digital serta arsip digital, dan suatu inisiatif kolektif non-komersil.</p><p>Pustaka ini merupakan salah satu program/proyek kami atas upaya untuk menyediakan ruang dan/atau platform pendistribusian bahan bacaan. Kami mempunyai dua tujuan, yaitu, membuka akses dan preservasi.</p><p>Kami menyediakan koleksi kami dengan harapan akan mempermudah akses untuk berbagi dan mengumpulkan bahan bacaan dalam satu tempat. Lalu, kami juga berupaya untuk mempertahankan(preservasi) buah karya/pikiran/ide dari segala hal yang terkandung dalam situs tersebut.</p><p>Dalam mencapai tujuan tersebut, kami menggunakan program Calibre-Web, sebuah aplikasi bersumber terbuka, yang menawarkan fitur dan kemudahan tampilan untuk browsing, membaca, dan, mendownload. Kami merasakan, dari pengalaman yang sedikit kami, bahwa berbagai terbitan mandiri khususnya zine tersedia secara luas dan eksklusif di berbagai kanal ruang digital. Entah itu disediakan dalam situs penerbit masing-masing, disimpan dalam Google Drive, ataupun lain sebagainya. Kami mempunyai keinginan untuk mengkompilasi berbagai file bacaan digital di dalam satu tempat. Sehingga, diharapkan pembaca bisa lebih mudah menemukan dan mengakses file-file terkait.</p><p>Aplikasi ini juga mempunyai fitur yang <a href="https://github.com/janeczku/calibre-web?ref=manasiwibi.com#features" rel="noreferrer">banyak</a>. Contoh kecil, yang akan memudahkan pembaca, adalah ramah pembaca eReader maupun terdapat fitur OPDS (Open Publication Distribution System) feed.</p><p><a href="https://en.wikipedia.org/wiki/Open_Publication_Distribution_System?ref=manasiwibi.com" rel="noreferrer">OPDS</a> feed atau "katalog" merupakan sebuah standar yang biasa digunakan di berbagai aplikasi e-book reader. Format ini akan memungkinkan cara distribusi, penemuan, dan pengunduhan buku elektronik menjadi lebih mudah.</p><p>Di sisi yang sama, tujuan kedua. Kami terinspirasi dari berbagai inisiatif keterbukaan informasi, secara spesifik perihal preservasi dan khususnya, <a href="https://annas-archive.org/?ref=manasiwibi.com" rel="noreferrer">Anna’s Archive</a>, kami mencoba untuk membuat proses duplikasi secara mudah, sehingga upaya untuk melakukan redistribusi maupun preservasi akan tercapai. Selain dari itu, kami juga akan membagikan database kami.</p><p>Adapun kami akan mengupayakan redundansi file digital, dengan demikian file akan tersedia di situs khusus pengarsipan, seperti archive.org.</p><h3 id="kontribusi">Kontribusi</h3><p>Apabila berminat, teman-teman bisa membantu kami dengan mengirim informasi segala bentuk sumber bacaan, seperti zine, magazine, buku, komik, atau informasi tekstual lainnya, yang berbahasa Indonesia. Khususnya apabila teman-teman mempunyai penerbit favorit atau bahkan penerbit/pencipta dari karya tersebut.<br><br>Situs Pustaka juga terdapat fitur manajemen pengguna, jadi, jika ada teman-teman mau ikut bantu mengunggah file-file terkait, hal tersebut bisa dilakukan.<br><br>Jika ada pertanyaan lainnya atau dalam hal apapun, jangan ragu berkorespondensi dengan kami ya :)</p><h3 id="hak-ciptamilik-file-konten-media-dsb">Hak cipta/milik File, Konten, Media, dsb.</h3><p>Dalam halnya kami tidak menemukan informasi <em>copyright</em> sebuah karya, kami akan selalu mentautkan sumber di mana kami menemukan file tersebut.</p><p>Namun demikian, utamanya, kami akan selalu memprioritaskan file dengan lisensi Creative Commons, Open Access, domain publik, copyleft, ataupun segala lisensi yang memperbolehkan distribusi secara bebas. Kami juga akan mencoba semaksimal mungkin untuk mematuhi segala lisensi yang terkait, khususnya dalam segi atribusi. Apabila teman-teman sekalian menemukan kesalahan, contohnya dalam segi atribusi atau segala hal yang berkaitan <em>copyright</em>/lisensi, mohon informasikan kepada kami, sehingga koreksi bisa dilakukan.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Pengawasan Pemerintah - Indonesia ]]></title>
        <description><![CDATA[ Baru tahu bahwa, di tahun 2011, pemerintah Indonesia (menkominfo dan BRTI) pernah meminta akses data terenkripsi pengguna Blackberry Messenger. Alasannya? Ya tentu saja untuk memblokir pornografi dan untuk membantu memudahkan mereka mengakses isi konten komunikasi para penggunannya.

Tautnya juga, ya, untuk membantu aparat hukum untuk penyelidikan pelaku kejahatan. Termasuk mencegah ]]></description>
        <link>https://manasiwibi.com/pengawasan-negara-indonesia-me/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9718b</guid>
        <category><![CDATA[ Surveillance ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sat, 21 Oct 2023 21:29:41 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p></p><p>Baru tahu bahwa, di tahun 2011, pemerintah Indonesia (menkominfo dan BRTI) pernah meminta <a href="https://financialpost.com/technology/indonesia-threatens-to-cut-blackberry-data-service?ref=manasiwibi.com" rel="noreferrer">akses</a> data terenkripsi pengguna Blackberry Messenger. <a href="https://www.techinasia.com/blackberry-indonesia-five-demands?ref=manasiwibi.com" rel="noreferrer">Alasannya</a>? Ya tentu saja untuk memblokir pornografi dan untuk membantu memudahkan mereka mengakses isi konten komunikasi para penggunannya.</p><p>Tautnya juga, ya, untuk membantu aparat hukum untuk penyelidikan pelaku kejahatan. Termasuk mencegah terorisme, narkoba, dan korupsi.</p><figure class="kg-card kg-embed-card"><blockquote class="twitter-tweet"><p lang="in" dir="ltr">Juga narkoba &amp; terorisme. RT <a href="https://twitter.com/kemkominfo?ref_src=twsrc%5Etfw&ref=manasiwibi.com">@kemkominfo</a> http://ht.ly/3AY9i Menkominfo Kembali Minta RIM Buka Server di RI agar Korupsi Bisa Dilacak.</p>— Tifatul Sembiring (@tifsembiring) <a href="https://twitter.com/tifsembiring/status/24386752600870912?ref_src=twsrc%5Etfw&ref=manasiwibi.com">January 10, 2011</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></figure><p>Sayangnya, kebijakan serupa (mungkin) tidak terus berlanjut diberlakukan terhadap beberapa aplikasi perpesanan yang populer hingga sekarang, seperti WhatsApp atau yang lainnya.<br><br>Kalau masih berlaku, seharusnya menterinya sendiri, yang mana merupakan koruptor, bisa lebih cepat tertangkap, bukan?</p><p>Dan juga sayangnya, kalau hal tersebut dipaksakan, besar kemungkinan aplikasi <a href="https://www.signal.org/blog/uk-online-safety-bill/?ref=manasiwibi.com" rel="noreferrer">Signal</a> maupun <a href="https://www.theverge.com/2023/3/10/23633601/uk-online-safety-bill-encryption-whatsapp-leave?ref=manasiwibi.com" rel="noreferrer">WhatsApp</a> tidak akan turut mengaidahkan kebijakan terkait. Apalah negara Indonesia dibandingkan negara Inggris.</p><p>Lebih lanjut, mungkin ketika alasan pencegahan aktivitas ilegal seperi pornografi, terorisme, dan korupsi tidak atau belum juga cukup. Langkah terakhir yang mungkin dilakukan adalah dengan beralasan untuk perlidungan anak, sebagaimana pemerintah Inggris perbincangkan dalam Online Safety Bill-nya.</p><p>Hanya demi <s>bangsa dan negara</s> tujuan tersebut, sebuah pikiran seseorang yang disebarkan dalam bentuk komunikasi atau konten online, harus melalui berbagai pengawasan, pemantauan, dan pengecekan. Sebelum melalui tahapan pemeriksaan dan pengamatan, diktum tak akan dikeluarkan.</p><p>Tenang saja, tujuannya untuk mencegah aktivitas ilegal dan berbahaya. Persetan dengan kedaulatan pribadi dan privasi seseorang. Selama kita tidak melakukan perbuatan <em>berbahaya</em> atau <em>ilegal</em>, ya kita tetap aman.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Masters and Slaves, Lords and Serfs ]]></title>
        <description><![CDATA[ Currently read Data and Goliath and am transfixed about this.

Our relationship with many of the Internet companies we rely on is not a traditional company–customer relationship. That’s primarily because we’re not customers. We’re products those companies sell to their real customers. The relationship is more ]]></description>
        <link>https://manasiwibi.com/masters-and-slaves-lords-and-serfs/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9718a</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sat, 21 Oct 2023 09:56:15 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Currently read Data and Goliath and am transfixed about this.</p><blockquote>Our relationship with many of the Internet companies we rely on is not a traditional company–customer relationship. That’s primarily because we’re not customers. We’re products those companies sell to their real customers. The relationship is more feudal than commercial. The companies are analogous to feudal lords, and we are their vassals, peasants, and—on a bad day—serfs. We are tenant farmers for these companies, working on their land by producing data that they in turn sell for profit.<br><br>- <a href="https://www.schneier.com/books/data-and-goliath/?ref=manasiwibi.com">https://www.schneier.com/books/data-and-goliath/</a></blockquote><p>Upon reading that, I remember something. That passage couldn't resonate more with what the Start9 self-hosted movement:</p><blockquote>This comes right down to the basic architecture of the internet itself. <br><br>The client/server model that we have all grown used to is better understood as the slave/master model. When you use someone else's server, they are your master. <br><br>When you depend on a server that you run, you still have a master - but that master is you.<br><br>- <a href="https://docs.start9.com/latest/support/concepts/self-hosting?ref=manasiwibi.com">https://docs.start9.com/latest/support/concepts/self-hosting</a></blockquote><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ How To Install Open Journal System (OJS) with LEMP on Debian 12 ]]></title>
        <description><![CDATA[ Intro

Open Journal System (OJS) is the most widely used scholarly publishing software in the world. It counts more than 30,000 journals in 150 countries that use OJS to publish research in 60+ languages.

Below is the tutorial to manually install OJS with Linux, Nginx, MySQL, and PHP.


Installing ]]></description>
        <link>https://manasiwibi.com/how-to-install-open-journal-system-with-lemp-on-debian-12/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97188</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 04 Oct 2023 01:00:57 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <h1 id="intro">Intro</h1><p>Open Journal System (OJS) is the most widely <a href="https://pkp.sfu.ca/software/ojs/usage-data/?ref=manasiwibi.com">used</a> scholarly publishing software in the world. It counts more than 30,000 journals in 150 countries that use OJS to publish research in 60+ languages.</p><p>Below is the tutorial to manually install OJS with Linux, Nginx, MySQL, and PHP.</p><h1 id="installing-prerequisite">Installing Prerequisite</h1><p>OJS is a web application based on PHP. it also supports databases, such as MySQL, MariaDB, or PostgreSQL. Additionally, it requires some PHP extension.<br><br>Let's install the required dependencies of <a href="http://www.php.net/?ref=manasiwibi.com">PHP 8.0+</a> with php-mbstring, php-xml, and php-intl enabled.</p><pre><code>sudo apt install php-fpm php-mysql php-xml php-intl php-mbstring nginx
</code></pre><p>We are going to install it with MySQL, but since the Debian repository did not naturally come up with it, we have to manually install it.</p><pre><code>cd /tmp
wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb
sudo dpkg -i mysql-apt-config*

#libssl
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1n-0+deb11u5_amd64.deb
sudo dpkg -i libssl*

sudo apt update
sudo apt install mysql-server</code></pre><p>Next, let's create a database.</p><h1 id="creating-a-mysql-database-and-user-for-ojs">Creating a MySQL Database and User for OJS</h1><p>Make sure you already set up a basic MySQL installation or using <code>sudo mysql_secure_installation</code>.</p><p>The below snippet is to log in to MySQL, you will be asked for the password. After that, it will create a <code>ojs-db</code> database. We'll create a new user account and set the database to only able to be managed by the account.</p><pre><code>mysql -u root -p
CREATE DATABASE ojs_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_520_ci;
CREATE USER 'ojs_user'@'localhost' IDENTIFIED BY 'ojs_password';
GRANT ALL ON ojs_db.* TO 'ojs_user'@'localhost';</code></pre><p>You now have a database and user account that is made to specifically handle that particular database.</p><h1 id="configuring-nginx">Configuring Nginx</h1><p>This is pretty much a standard PHP and Nginx configuration. A few points to note is you should adjust the <code>server_name</code> to your intended IP/domain and the root folder of the installation path, in this case, I use <code>/var/www/ojs</code>.</p><p>Finally, adjust the <code>php-fpm</code>  version with the one you installed.</p><pre><code>sudo nano /etc/nginx/sites-available/your_domain</code></pre><pre><code>server {
    listen 80;
    listen [::]:80;

    root /var/www/ojs;
    index index.php;

    server_name server_domain_or_IP;

    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
    location / {
    	try_files $uri $uri/ /index.php?$args;
    }

location ~ ^(.+\.php)(.*)$ {
        set $path_info $fastcgi_path_info;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param PATH_TRANSLATED $document_root$path_info;

        if (!-f $document_root$fastcgi_script_name) {
            return 404;
        }

        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    }
}</code></pre><p>Links the file the configuration file to to <code>sites-enabled</code> directory:</p><pre><code>sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/</code></pre><p>Verify our configuration in case there are syntax errors with:</p><pre><code>sudo nginx -t </code></pre><p>If it's all good, let's reload Nginx.</p><pre><code>sudo systemctl reload nginx</code></pre><p>Next, let's start with the main parts.</p><h1 id="installing-open-journal-system">Installing Open Journal System</h1><p>It's a good idea to check if there is a newer version or any version you intend to install from <a href="https://pkp.sfu.ca/software/ojs/download/?ref=manasiwibi.com">https://pkp.sfu.ca/software/ojs/download/</a>.</p><p>We going to download the app release, extract it, and copy it to the OJS installation path.</p><pre><code>cd /tmp
curl -LO https://pkp.sfu.ca/ojs/download/ojs-3.4.0-3.tar.gz
tar xzvf ojs-3.4.0-3.tar.gz 
sudo cp -a /tmp/ojs-3.4.0-3/. /var/www/ojs</code></pre><p>Make sure we change the owner and group of the folder so it can be accessed by Nginx.</p><pre><code>sudo chown -R www-data:www-data /var/www/ojs</code></pre><p>OJS requires a file directory outside of the web root (the installation path/folder). It ensures private files, like unpublished submissions, can not be accessed by unauthorized users.</p><pre><code>sudo mkdir /var/www/ojs-files
sudo chown -R www-data:www-data /var/www/ojs-files</code></pre><h1 id="finishing-up-installation">Finishing up installation</h1><p>After the whole server configuration is done, we can start to finish the installation via the OJS web interface.</p><p>Let's visit the following link on a browser.</p><pre><code>http://server_domain_or_IP/</code></pre><p>Takes note, of our database name, user, password, and also our file directory. We will input those into the installation interface.</p><p>You will be greeted with the following images.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/10/OJS-Installation-Interface.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2023/10/OJS-Installation-Interface.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/10/OJS-Installation-Interface.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/10/OJS-Installation-Interface.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/10/OJS-Installation-Interface.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p>Ensure the files and directories as listed in the pre-installation steps are writeable.<br>If it's all good, continue to create the admin account.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/10/OJS-Create-Admin-Account-fix.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2023/10/OJS-Create-Admin-Account-fix.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/10/OJS-Create-Admin-Account-fix.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/10/OJS-Create-Admin-Account-fix.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/10/OJS-Create-Admin-Account-fix.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p><br>Adjust the directory file with the one we have created. Furthermore, at step 2, we have created the database with its own account. Input those credentials into the appropriate forms.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/10/OJS-Set-data-directory-and-database.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2023/10/OJS-Set-data-directory-and-database.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/10/OJS-Set-data-directory-and-database.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/10/OJS-Set-data-directory-and-database.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/10/OJS-Set-data-directory-and-database.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p>Scroll all the way down and click <code>Install Open Journal Systems</code> the button to finish the installation. If there is nothing wrong, you will end up with the image below. If there is indeed something wrong, continue to troubleshoot the given error.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/10/OJS-Completed-Installation.webp" class="kg-image" alt="" loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2023/10/OJS-Completed-Installation.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/10/OJS-Completed-Installation.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/10/OJS-Completed-Installation.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/10/OJS-Completed-Installation.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p>Yep, that is it. Congratulations, you made it to install OJS. In case there is any other question, feel free to <a href="https://manasiwibi.com/contact/">contact</a> me.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ VPS Migration Self-hosted Ghost Instance ]]></title>
        <description><![CDATA[ I recently migrated my Ghost site between different VPS providers. Here is my method for my reference or in case you try to find a guide for it.

First, let&#39;s start on the initial VPS we&#39;d like to back up. There is 2 thing we going ]]></description>
        <link>https://manasiwibi.com/vps-migration-self-hosted-ghost-instance/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97187</guid>
        <category><![CDATA[ Tutorial ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sat, 23 Sep 2023 17:13:20 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p></p><p>I recently migrated my Ghost site between different VPS providers. Here is my method for my reference or in case you try to find a guide for it.</p><p>First, let's start on the initial VPS we'd like to back up. There is 2 thing we going to back up, the Ghost data (content, members, images, site setting, theme, etc.) and database.</p><h1 id="old-vps">Old VPS</h1><p>Initially, we need access to the server. Then head over to the Ghost installation folder and make a backup.</p><h2 id="ghost-data-backup">Ghost Data  Backup</h2><pre><code>cd /var/www/sitename
ghost backup
scp ./backup-* user@new-vps-ip:/home/user/
</code></pre><h2 id="database-backup">Database Backup</h2><pre><code>mysqldump -u root -p sitename_prod &gt; sitename_prod.sql
scp ./sitename_prod.sql user@new-vps-ip:/home/user/
</code></pre><p>Adjust accordingly for both data and database <code>scp</code> transfer processes. </p><h1 id="new-vps">New VPS</h1><p>Within the new VPS, just simply install Ghost just like what their installation guide provides (<a href="https://ghost.org/docs/install/ubuntu/?ref=manasiwibi.com">https://ghost.org/docs/install/ubuntu/</a>). </p><p>On the installation process skip the SSL configuration parts since we will configure it later and don't run it yet. After it is finished, take a note at <code>config.production.json</code> for the auto-generated database information.</p><h2 id="restore-database-and-ghost-data">Restore Database and Ghost Data</h2><pre><code>mysql -u sitedbname -p sitename_prod &lt; /home/user/sitename_prod.sql </code></pre><pre><code>unzip /home/user/backup-* -d /var/www/sitename/content/
sudo chown -R ghost:ghost ./content
</code></pre><p>Now let's point the DNS server from the former VPS IP address into a new one. What a while for the propagation </p><pre><code>ghost setup ssl</code></pre><p>If the command running unsuccessfully, the DNS might have not propagated, wait a little longer then rerun the command. After it is done, start the Ghost site, now, the site should be hosted on the new VPS.<br><br><br>To wrap it up, recheck the new site if all the site functionality works just fine.</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Personal Cheatsheet ]]></title>
        <description><![CDATA[ Server init setup

apt-get install sudo fail2ban-y
apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw enable
ufw status
adduser admin
usermod -aG sudo admin

ssh-copy-id admin@x
ssh admin@x
sudo nano /etc/ssh/sshd_config
#PasswordAuthentication no
sudo systemctl restart ssh






mysql ]]></description>
        <link>https://manasiwibi.com/personal-cheatsheet/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97186</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 15 Sep 2023 14:50:25 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p>Server init setup</p><pre><code>apt-get install sudo fail2ban-y
apt install ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw enable
ufw status
adduser admin
usermod -aG sudo admin

ssh-copy-id admin@x
ssh admin@x
sudo nano /etc/ssh/sshd_config
#PasswordAuthentication no
sudo systemctl restart ssh

</code></pre><p></p><h1 id="mysql-debian-12">mysql Debian 12</h1><p><a href="https://dev.mysql.com/downloads/repo/apt/?ref=manasiwibi.com">https://dev.mysql.com/downloads/repo/apt/</a></p><pre><code>sudo apt install gnupg
wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb
sudo dpkg -i mysql-apt-config*

#libssl
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.1_1.1.1n-0+deb11u5_amd64.deb
sudo dpkg -i libssl*</code></pre><p></p><h1 id="nano">nano</h1><h2 id="delete-all-lines-trick">delete all lines trick</h2><pre><code>echo " " &gt; filelocation.txt</code></pre><h1 id="man">man</h1> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Quotes ]]></title>
        <description><![CDATA[ Critics: They smell life and they cannot stand it.

― Charles Bukowski

I have just now come from a party where I was its life and soul;
witticisms streamed from my lips, everyone laughed and admired me, but I
went away — yes, the dash should be as long as the radius ]]></description>
        <link>https://manasiwibi.com/quotes/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97184</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sun, 09 Jul 2023 02:52:37 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p></p><blockquote>Critics: They smell life and they cannot stand it.<br><br>― Charles Bukowski</blockquote><blockquote>I have just now come from a party where I was its life and soul;<br>witticisms streamed from my lips, everyone laughed and admired me, but I<br>went away — yes, the dash should be as long as the radius of the<br>earth's orbit ——————————— and wanted to shoot myself.<br><br>― Søren Kierkegaard</blockquote><blockquote>The reader lives faster than life, the writer lives slower.<br><br>― James Richardson, “Even More Aphorisms and Ten-Second Essays from<br> Vectors 3.0” </blockquote><blockquote>BIM BIM BIM<br>BIM BIM BIM<br>BIM BIM BIM<br>BIM BIM BIM<br><br>― Charles Bukowski</blockquote><blockquote>Let me tell you some things I find productive. Positive reinforcement. Negative reinforcement. Honesty. I'll tell you some things I find unproductive. Constantly worrying about where you stand based on inscrutable social clues and then inevitably reframing it all in a reassuring way so that you can get to sleep at night. No I do not believe in that at all. If I invited you to lunch I think you're a winner, if I didn't I don't, but I just met you all. Life is long, opinions change. Winners prove me right. Losers prove me wrong. <br><br>― Robert California</blockquote><blockquote>Even frequent fliers eventually fly away, never to be seen again.<br> <br> https://compactmag.com/article/no-cure-for-loneliness</blockquote><blockquote>Kau suka bicara tentang keindahan, Jean. Di mana keindahan suatu kekejaman, Jean?" "Tidak sederhana keterangannya, Minke. Gambar ini bersifat sangat pribadi, bukan untuk umum. Keindahannya ada di dalam kenang-kenangan.<br><br>― Pramoedya Ananta Toer</blockquote><blockquote>I remember a day in class when he leaned far forward, in his 11 characteristic pose — the pose of a man about to impart a secret — and croaked, "If you don't know how to pronounce a word, say it loud! If you don't know how to pronounce a word, say it loud!" This comical piece of advice struck me as sound at the time, and I still respect it. Why compound ignorance with inaudibility? Why run and hide?<br><br>― Nassim Nicholas Taleb</blockquote><blockquote>Every day must be a struggle for self-improvement in the service of improvement of the world.<br><br>― Alone</blockquote><blockquote>Reputation, reputation, reputation! Oh, I have lost my reputation! I have lost the immortal part of myself, and what remains is bestial.<br><br>― William Shakespeare</blockquote><blockquote><em>May you do good and not evil</em><br><em>May you find forgiveness for yourself and forgive others</em><br><em>May you share freely, never taking more than you give.</em><br><br>– SQLite</blockquote> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Putting Things in Perspective ]]></title>
        <description><![CDATA[ Humans are bad with big numbers. Count the zero of 10^6 and it is likely you will hardly be able to get a grasp of it. But to compare a grape with a watermelon is a trivial problem.

Below is an infographic/things that spark my interest. It compares ]]></description>
        <link>https://manasiwibi.com/putting-things-in-perspective/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97182</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Sun, 25 Jun 2023 18:47:54 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <p><a href="https://nautil.us/how-to-understand-extreme-numbers-236443/?ref=manasiwibi.com">Humans are bad with big numbers</a>. Count the zero of 10^6 and it is likely you will hardly be able to get a grasp of it. But to compare a grape with a watermelon is a trivial problem.</p><p>Below is an infographic/things that spark my interest. It compares things that we may encounter in everyday life. In the near future, this will be the article where I will share and update this typical comparison.</p><div class="kg-card kg-toggle-card" data-kg-toggle-state="close"><div class="kg-toggle-heading"><h4 class="kg-toggle-heading-text">Changelog</h4><button class="kg-toggle-card-icon"><svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/></svg></button></div><div class="kg-toggle-content"><p>12/07/23: add If the Moon Were Only 1 Pixel</p></div></div><h1 id="life-calendar">Life Calendar</h1><p>‌                                                                       </p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/06/Weeks-block-YOU.png" class="kg-image" alt loading="lazy" width="1550" height="1950" srcset="https://manasiwibi.com/content/images/size/w600/2023/06/Weeks-block-YOU.png 600w, https://manasiwibi.com/content/images/size/w1000/2023/06/Weeks-block-YOU.png 1000w, https://manasiwibi.com/content/images/2023/06/Weeks-block-YOU.png 1550w" sizes="(min-width: 720px) 720px"></figure><p>Doomscrolling is devastating. One time I decided to look at the outrageous amount of time I have spent mingling on social media, I was curious to reflect on how much time I have left, generally. Surely, the graph by Tim Urban came to my mind.</p><p>Each box represents a week in your life. On one hand, it tells how finite our times are, and on the other hand, there will be always a new opportunity in each new week.</p><h1 id="universe-scale">Universe Scale</h1><figure class="kg-card kg-image-card kg-width-full"><img src="https://manasiwibi.com/content/images/2023/06/Solar_System_true_color.webp" class="kg-image" alt loading="lazy" width="2000" height="1125" srcset="https://manasiwibi.com/content/images/size/w600/2023/06/Solar_System_true_color.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/06/Solar_System_true_color.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/06/Solar_System_true_color.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/06/Solar_System_true_color.webp 2400w"></figure><p>‌‌Among many planets, the Earth is the fifth largest planet from the 8th planet within our solar system. </p><p>One might wonder, how many earths could fit inside the sun? Well, assuming Earth is forced and squished without any room of empty space into the sun, it would consist of roughly 1.3 million Earth. That volume of the sun could hold that myriad of earth.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/06/Star-sizes.webp" class="kg-image" alt loading="lazy" width="2000" height="1313" srcset="https://manasiwibi.com/content/images/size/w600/2023/06/Star-sizes.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/06/Star-sizes.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/06/Star-sizes.webp 1600w, https://manasiwibi.com/content/images/size/w2400/2023/06/Star-sizes.webp 2400w" sizes="(min-width: 720px) 720px"></figure><p>Now let us just imagine if we compare Earth with VY Canis Majoris.</p><h1 id="bitcoin">Bitcoin</h1><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/06/bitcoin-secured-by-universe.webp" class="kg-image" alt loading="lazy" width="1920" height="1200" srcset="https://manasiwibi.com/content/images/size/w600/2023/06/bitcoin-secured-by-universe.webp 600w, https://manasiwibi.com/content/images/size/w1000/2023/06/bitcoin-secured-by-universe.webp 1000w, https://manasiwibi.com/content/images/size/w1600/2023/06/bitcoin-secured-by-universe.webp 1600w, https://manasiwibi.com/content/images/2023/06/bitcoin-secured-by-universe.webp 1920w" sizes="(min-width: 720px) 720px"></figure><p>The pictured illustration is partly incorrect. It does not depict the actual of how Bitcoin works as a whole. Nevertheless, my point is to extract the gist of how the cryptographic system works, which personally causes me amazement.‌‌‌‌</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-text">...until computers are built from something than matter and occupy something other than space.</div></div><h1 id="cause-of-death">Cause of Death</h1><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2023/06/cause-of-death-1.gif" class="kg-image" alt loading="lazy" width="602" height="933" srcset="https://manasiwibi.com/content/images/size/w600/2023/06/cause-of-death-1.gif 600w, https://manasiwibi.com/content/images/2023/06/cause-of-death-1.gif 602w"></figure><p>Suc‌h a distinct result between Reality vs. Google vs. Media. In some cases, Google and mainstream media generally give a biased view that does not conveys reality. Hence we should carefully consider where our limited attention goes in, especially in today personalized information overload.</p><p>A self-curated about where we got a piece of information, and a wide array of sources should prevent us from just participating in an echo chamber. I do personally utilize RSS. It is such an underrated tool.</p><p></p><h1 id="if-the-moon-were-only-1-pixel">If the Moon Were Only 1 Pixel</h1><figure class="kg-card kg-image-card kg-width-full"><img src="https://manasiwibi.com/content/images/2023/07/moonpixel_heroimage.jpg" class="kg-image" alt loading="lazy" width="2000" height="920" srcset="https://manasiwibi.com/content/images/size/w600/2023/07/moonpixel_heroimage.jpg 600w, https://manasiwibi.com/content/images/size/w1000/2023/07/moonpixel_heroimage.jpg 1000w, https://manasiwibi.com/content/images/size/w1600/2023/07/moonpixel_heroimage.jpg 1600w, https://manasiwibi.com/content/images/2023/07/moonpixel_heroimage.jpg 2116w"></figure><p><br>While scrolling around Reddit, I found this site that straight away makes me an awe.</p><p>As per the creator, Josh Worth, this site is about "A tediously accurate scale map of the solar system that illustrates the mind-boggling amount of space between planets."</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Stellar Quest Live 5: Soroban - Hello World ]]></title>
        <description><![CDATA[ Stellar Quest Live 5: Soroban

Stellar Quest Live 5: Soroban - Introduction
- Stellar Quest Live 5: Soroban - Hello World
Stellar Quest Live 5: Soroban - Auth Store

Like in every introduction of beginner programming educational resource, there isn&#39;t any perfect start but a Hello World. Let& ]]></description>
        <link>https://manasiwibi.com/stellar-quest-live-5-soroban-hello-world/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9717e</guid>
        <category><![CDATA[ Cryptocurrency ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 25 Nov 2022 11:15:42 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <div class="kg-card kg-toggle-card" data-kg-toggle-state="close"><div class="kg-toggle-heading"><h4 class="kg-toggle-heading-text">Stellar Quest Live 5: Soroban</h4><button class="kg-toggle-card-icon"><svg id="Regular" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path class="cls-1" d="M23.25,7.311,12.53,18.03a.749.749,0,0,1-1.06,0L.75,7.311"/></svg></button></div><div class="kg-toggle-content"><p><a href="https://manasiwibi.com/stellar-quest-live-series-5-soroban-introduction/">Stellar Quest Live 5: Soroban - Introduction</a><br>- Stellar Quest Live 5: Soroban - Hello World<br>Stellar Quest Live 5: Soroban - Auth Store</p></div></div><p>Like in every introduction of beginner programming educational resource, there isn't any perfect start but a Hello World. Let's pull that up! </p><p></p><p>TL;DR</p><pre><code class="language-bash">$ sq login
$ sq pull
$ sq play 1
$ sq fund &lt;Public Key&gt;
$ make build
$ soroban deploy --wasm target/wasm32-unknown-unknown/release/soroban_hello_world_contract.wasm
$ soroban invoke --id &lt;CONTRACT_ID&gt; --fn hello --arg &lt;ARGUMENT&gt;
$ sq check1

</code></pre><h1 id="opening-up-gitpod">Opening up Gitpod</h1><p>In every quest the Gitpod environment is fixed, so you only need to have the main link to the quest, there you can do quest-related things directly within Gitpod.</p><p>You can find the Gitpod link at <a href="https://quest.stellar.org/live?ref=manasiwibi.com">https://quest.stellar.org/live</a> or at the code repository <a href="https://github.com/tyvdh/soroban-quest?ref=manasiwibi.com">(https://github.com/tyvdh/soroban-quest</a>). To make it simple, just click the below link directly to open the environment.</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://gitpod.io/?ref=manasiwibi.com#ENV=prod/https://github.com/tyvdh/soroban-quest"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Dashboard — Gitpod</div><div class="kg-bookmark-description"></div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://gitpod.io/favicon256.png" alt=""></div></div></a><figcaption>Gitpod Link</figcaption></figure><p>As a side note, the Soroban Quest repository GitHub link above is where all the environment configuration relies on. In case you want to take a peek about how it works, every Gitpod configuration that makes the environment ready to go is available right there.</p><figure class="kg-card kg-image-card"><img src="https://manasiwibi.com/content/images/2022/11/soroban-quest-set-up.png" class="kg-image" alt loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2022/11/soroban-quest-set-up.png 600w, https://manasiwibi.com/content/images/size/w1000/2022/11/soroban-quest-set-up.png 1000w, https://manasiwibi.com/content/images/size/w1600/2022/11/soroban-quest-set-up.png 1600w, https://manasiwibi.com/content/images/size/w2400/2022/11/soroban-quest-set-up.png 2400w" sizes="(min-width: 720px) 720px"></figure><p></p><h1 id="account-set-up">Account Set Up</h1><p>On the terminal window shell make sure you are on "CLI - Futurenet: bash", and then proceed by connecting the quest account with <code>squirtle</code>.</p><p>If this is your first start, you are required to connect your Discord account to play the quest. Just follow the step of the given command.</p><pre><code class="language-bash">$ sq login 
$ sq user</code></pre><h1 id="playing-the-quest">Playing the quest</h1><p>First of all, make sure you are running <code>sq pull</code> to check whether there is a new quest or not. Over <code>quests/*</code>  folder, you will see any available quest to play.</p><p>To start it off, use command <code>sq play [index]</code> </p><pre><code class="language-bash">$ sq play 1</code></pre><p>You will be greeted with a quest keypair that you will be using to finish off the quest. Make sure you fund it with <code>sq fund [Public Key]</code> or choose the option that will do it automatically.</p><h1 id="tackling-the-quest">Tackling The Quest</h1><p>It is necessary to comprehend what the <code>readme.md</code> file suggests and inspects any available code like <code>lib.rs</code> or <code>test.rs</code>.  There will be complete information regarding how to complete the quest.</p><p>For example, below are the tl;dr snippet about what you need to do:</p><div class="kg-card kg-callout-card kg-callout-card-grey"><div class="kg-callout-emoji">💡</div><div class="kg-callout-text">In this quest, you will use your Quest Account to deploy and invoke the quest 1 Hello World contract on the Stellar Futurenet.</div></div><p>It indicates that we need to deploy and invoke the <code>hello world</code> contract using the the given quest account/keypair on Futurenet network. So, if we look deeper into <code>lib.rs</code> there aren't any further things we need to do!</p><p>To complete it, we can use <code>soroban-cli</code> to invoke and deploy the contract. But, we need to build the contract first.</p><h2 id="building-the-smart-contract">Building the smart contract</h2><p>To build the smart contract, we need to use a specific command to compile the contract in a <a href="https://rustwasm.github.io/docs/book/what-is-webassembly.html?ref=manasiwibi.com">WebAssembly</a> format, you can specifically build the intended contract within its folder using <code>cargo</code> or we also can use build it with <code>make</code>.</p><p><strong>A. cargo build </strong></p><p>On the terminal, go to the current quest directory to build the current contract</p><pre><code class="language-bash">$ cd quests/1-hello-world/
/workspace/soroban-quest/quests/1-hello-world $ cargo build --target wasm32-unknown-unknown --release</code></pre><p>After it is done compiling, it will show this output</p><pre><code> Compiling soroban-hello-world-contract v0.0.0 (/workspace/soroban-quest/quests/1-hello-world)
    Finished release [optimized] target(s) in 22.56s</code></pre><p>The <code>cargo build</code> command is used to build our smart contract, we also specify  <code>--target wasm32-unknown-unknown</code> to compile our program(smart contract) into WebAssembly(wasm32) for any architecture(unknown-unknown). Lastly, the <code>--release</code> profile parameter is used to optimize our program so that it does not exceed the maximum size amount of Soroban contract.</p><hr><p>As of today writings, the current quest environment does not ship with <code>makefile</code>. To compile the contract from the main directory of <code>/workspace/soroban-quest</code>, use</p><pre><code class="language-bash">$ cargo build --manifest-path=quests/1-hello-world/Cargo.toml --target wasm32-unknown-unknown --release</code></pre><p><s><strong>B. make build</strong></s></p><p><s>As a reference, we also can type out the cargo build command directly at the root directory, but it will compile the whole quest that currently available on the environment. That happen because <code>Cargo.toml</code> already configured to include the whole quest with <a href="https://doc.rust-lang.org/cargo/reference/workspaces.html?ref=manasiwibi.com">Cargo Workspace</a>.</s></p><p><s>Make sure we are at the directory of <code>/workspace/soroban-quest</code>, since <code>makefile</code> already configured we can directly type it out the command instead of the full command that includes parameters.</s></p><pre><code>$ make build</code></pre><p><s>If we take a look at <code>Makefile</code>, it already specifies the intended configuration.</s></p><pre><code>build:
	cargo build --target wasm32-unknown-unknown --release
</code></pre><p><s>After we have done building using either option, the file result available at <code>target/wasm32-unknown-unknown/release/soroban_hello_world_contract.wasm</code></s></p><p></p><h3 id="deploy-the-contract">Deploy the Contract</h3><p>And now is the part where <code>soroban-cli</code> comes in handy, to deploy our compiled contract into Futurenet netwok, we can use the command:</p><p><code>soroban deploy --wasm &lt;WASM&gt; --secret-key &lt;SECRET_KEY&gt; --network-passphrase &lt;NETWORK_PASSPHRASE&gt; --rpc-url &lt;RPC_URL&gt;</code></p><pre><code class="language-bash">soroban deploy \
    --wasm target/wasm32-unknown-unknown/release/soroban_hello_world_contract.wasm \
    --secret-key [Secret Key] \
    --rpc-url http://localhost:8000/soroban/rpc \
    --network-passphrase 'Test SDF Future Network ; October 2022'</code></pre><p>As you can see, we are giving 4 argument, here is the snippet of what it does.</p><pre><code class="language-BASH">$ soroban deploy --help
soroban-deploy 
Deploy a WASM file as a contract

USAGE:
    soroban deploy [OPTIONS] --wasm &lt;WASM&gt;

OPTIONS:
        --wasm &lt;WASM&gt;    WASM file to deploy

OPTIONS (RPC):
        --secret-key &lt;SECRET_KEY&gt;
            Secret 'S' key used to sign the transaction sent to the rpc server [env:
            SOROBAN_SECRET_KEY=]
        --rpc-url &lt;RPC_URL&gt;
            RPC server endpoint [env: SOROBAN_RPC_URL=]

        --network-passphrase &lt;NETWORK_PASSPHRASE&gt;
            Network passphrase to sign the transaction sent to the rpc server [env:
            SOROBAN_NETWORK_PASSPHRASE=]</code></pre><p>Fortunately, our Gitpod environment have set up those last 3 argument on the CLI - Futurenet bash environment variables automatically.</p><pre><code class="language-bash">$ echo $SOROBAN_RPC_URL
http://127.0.0.1:8000/soroban/rpc
$ echo $SOROBAN_NETWORK_PASSPHRASE
Test SDF Future Network ; October 2022
$ echo $SOROBAN_SECRET_KEY
SCVRMTT5GTXUS4DJDV4WP6IJUCFVQBMNYOI2G4GM42XR72M6MIOFIN67</code></pre><p>So we can simply deploy it with:</p><pre><code class="language-bash">$ soroban deploy --wasm target/wasm32-unknown-unknown/release/soroban_hello_world_contract.wasm</code></pre><p>If it deployed succesfully, the output of the command will return the <code>CONTRACT_ID</code>.</p><pre><code>success
8b473ec5ee974d1ddf6e19424f5610d1fed453c89e4dc66b0b457dbb8d0840c2</code></pre><h2 id="invoke-the-contract">Invoke the contract</h2><p>Similar with the deployment command approach, invoking a contract require some arguments to be passed,</p><pre><code class="language-bash">soroban invoke --id &lt;CONTRACT_ID&gt; --fn &lt;FUNCTION&gt; --arg &lt;ARGUMENT&gt; --secret-key &lt;SECRET_KEY&gt; --network-passphrase &lt;NETWORK_PASSPHRASE&gt; --rpc-url &lt;RPC_URL&gt;</code></pre><p><code>CONTRACT_ID</code> is the deployed contract id that we going to invoke from the last step. <code>FUNCTION</code> is the function of the smart contract itself that we are going to interact, and <code>ARGUMENT</code> is the parameter of the <code>FUNCTION</code>.</p><p>With that in mind, the comand is as follow:</p><pre><code class="language-bash">$ soroban invoke --id 8b473ec5ee974d1ddf6e19424f5610d1fed453c89e4dc66b0b457dbb8d0840c2 --fn hello --arg wibi
success
["Hello","wibi"]</code></pre><p>Do in mind that,  the expected parameter is <code>Symbol</code> (<a href="https://docs.rs/soroban-sdk/latest/soroban_sdk/struct.Symbol.html?ref=manasiwibi.com">https://docs.rs/soroban-sdk/latest/soroban_sdk/struct.Symbol.html</a>). If you hover over the <code>Symbol</code> code within <code>lib.rs</code> you will see a snippet of documentation of the <code>struct</code>.</p><p>For example, if you are passing more than ten characters or an invalid parameter, the contract won't run.</p><pre><code class="language-bash">$ soroban invoke --id 8b473ec5ee974d1ddf6e19424f5610d1fed453c89e4dc66b0b457dbb8d0840c2 --fn hello --arg MoreThanTenCharacter
error: parsing argument MoreThanTenCharacter: parse error: value is not parseable to type</code></pre><pre><code class="language-bash">$ soroban invoke --id 8b473ec5ee974d1ddf6e19424f5610d1fed453c89e4dc66b0b457dbb8d0840c2 --fn hello --arg %
error: transaction simulation failed: HostError
Value: Status(HostValueError(UnknownError))</code></pre><h1 id="finishing-up-the-quest">Finishing up the Quest</h1><p>If we are done with what we should do, it is best to check it out using <code>squirtle</code> to see if the answer is indeed the correct one.</p><pre><code class="language-bash">$ sq check 1
🎉 Correct! 🧠</code></pre><p>That is it. Let's continue to the next one!</p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Stellar Quest Live 5: Soroban - Introduction ]]></title>
        <description><![CDATA[ Introductory

A brand new Stellar Quest Live is already up, it is now their smart contract platform, Soroban, which became the main topic of the quests.

The current series is mainly designed for beginner Soroban developers. So, those who did not have any programmer or developer background may have difficulty ]]></description>
        <link>https://manasiwibi.com/stellar-quest-live-series-5-soroban-introduction/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9717d</guid>
        <category><![CDATA[ Cryptocurrency ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Mon, 21 Nov 2022 17:11:08 +0700</pubDate>
        <media:content url="https://manasiwibi.com/content/images/2022/11/landing-hero.svg" medium="image"/>
        <content:encoded><![CDATA[ <p></p><h1 id="introductory">Introductory</h1><p>A brand new <a href="https://quest.stellar.org/?ref=manasiwibi.com">Stellar Quest</a> Live is already up, it is now their smart contract platform, <a href="https://soroban.stellar.org/?ref=manasiwibi.com">Soroban</a>, which became the main topic of the quests.</p><p>The current series is mainly designed for beginner Soroban developers. So, those who did not have any programmer or developer background may have difficulty competing in the quest. Nevertheless, no one stops you to compete with one another.</p><h1 id="quest-environment">Quest Environment</h1><h2 id="gitpod">Gitpod</h2><p>Gitpod is an open source developer platform automating the provisioning of ready-to-code developer environments<sup><a href="https://www.gitpod.io/about?ref=manasiwibi.com">[1]</a></sup>. Toward finishing up the quest, most questers will be working within the Gitpod developer environment.</p><p>The tool is used to make the quest experience as convenient as possible. Every prerequisite tool to complete the quest is already built-in into the environment, so the participant only needs to complete the quest. It includes VS Code and quest-related shell environment. The Rust environment is also already set up within Gitpod, so you don't have to install anything since Gitpod can be opened up in a browser.</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://manasiwibi.com/content/images/2022/11/gitpod-stellar-soroban-quest.png" class="kg-image" alt="gitpod-stellar-soroban-quest" loading="lazy" width="2000" height="1269" srcset="https://manasiwibi.com/content/images/size/w600/2022/11/gitpod-stellar-soroban-quest.png 600w, https://manasiwibi.com/content/images/size/w1000/2022/11/gitpod-stellar-soroban-quest.png 1000w, https://manasiwibi.com/content/images/size/w1600/2022/11/gitpod-stellar-soroban-quest.png 1600w, https://manasiwibi.com/content/images/2022/11/gitpod-stellar-soroban-quest.png 2000w" sizes="(min-width: 1200px) 1200px"><figcaption>https://gitpod.io/#ENV=prod/https://github.com/tyvdh/soroban-quest--pioneer</figcaption></figure><h2 id="squirtle-soroban-cli-and-futurenet">Squirtle, Soroban CLI, and Futurenet</h2><p>Yep, those things are already included too! We will be following along to learn what is those tools and platform while doing the quest. As a snippet, Squirtle or <code>sq</code> is used for managing the Stellar Quest playground. Soroban CLI or <code>soroban</code>, is used to interact with our smart contract code. Lastly, Futurenet is the test network we will be used to.</p><h1 id="working-it-out">Working it out</h1><p>As the time of writing there are a few quests left to compete. Nevertheless, you can still dig around to learn more about Soroban based on this series. So, let's cut to the chase.</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>Quest</th>
<th style="text-align:center">Title</th>
<th style="text-align:right">Link</th>
</tr>
</thead>
<tbody>
<tr>
<td>01</td>
<td style="text-align:center">Hello World</td>
<td style="text-align:right"><a href="https://manasiwibi.com/stellar-quest-live-5-soroban-hello-world/">hello-world</a></td>
</tr>
<tr>
<td>02</td>
<td style="text-align:center">Auth Storage</td>
<td style="text-align:right">Soon</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p></p><hr><p>You can learn more about further reference on</p><ul><li><a href="https://www.stellar.org/blog/announcing-stellar-quest-live-series-5-soroban?ref=manasiwibi.com">https://www.stellar.org/blog/announcing-stellar-quest-live-series-5-soroban</a></li><li><a href="https://github.com/tyvdh/soroban-quest--pioneer?ref=manasiwibi.com">https://github.com/tyvdh/soroban-quest--pioneer</a></li><li><a href="https://quest.stellar.org/rules/series-5?ref=manasiwibi.com">https://quest.stellar.org/rules/series-5</a></li><li><a href="https://github.com/tyvdh/soroban-quest?ref=manasiwibi.com">https://github.com/tyvdh/soroban-quest</a></li></ul> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Celah Keamanan Docker dan UFW ]]></title>
        <description><![CDATA[ Secara default, kombinasi UFW dengan Docker tidak akan berjalan sebagaimana mestinya. UFW berfungsi sebagai aplikasi firewall yang memanipulasi aturan iptables, di sisi lain, Docker juga mengkonfikurasi iptables secara langsung untuk mengatur jalannya aplikasi ini tersendiri. Dengan demikian, ada dua hal yang bertabrakan sehingga Docker tidak akan mematuhi perintah dan konfigurasi ]]></description>
        <link>https://manasiwibi.com/celah-keamanan-docker-ufw/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9717b</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 16 Sep 2022 03:07:01 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <!--kg-card-begin: markdown--><p>Secara default, kombinasi UFW dengan Docker tidak akan berjalan sebagaimana mestinya. UFW berfungsi sebagai aplikasi firewall yang memanipulasi aturan iptables, di sisi lain, Docker juga mengkonfikurasi iptables secara langsung untuk mengatur jalannya aplikasi ini tersendiri. Dengan demikian, ada dua hal yang bertabrakan sehingga Docker tidak akan mematuhi perintah dan konfigurasi UFW.</p>
<h1 id="cara-kerja-ufw">Cara Kerja UFW</h1>
<p>UFW(Uncomplicated Firewall) merupakan sebuah front-end untuk aplikasi iptables. Aplikasi ini dibuat dengan tujuan untuk mensimplifikasi pengaturan firewall pada Linux, dikarenakan konfigurasi iptables ini cukup rumit, yang dimana berhubungan atau berinteraksi langsung dengan aturan netfilter.</p>
<p>Netfilter sendiri merupakan sebuah framework pada kernel Linux untuk mengatur <em>packet filtering, network address [dan port]translation (NA[P]T), packet logging, userspace packet queueing</em> dan <em>other packet mangling</em>.<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup></p>
<p>Syntax UFW mempermudah pengaturan firewall dengan cara memanipulasi perintah iptables. Sebagai contoh, perintah seperti <code>ufw allow from &lt;IP&gt; to any</code> akan diterjemahkan menjadi syntax yang dimengerti oleh iptables, <code>iptables -A INPUT -s &lt;IP&gt; -j ACCEPT</code>. Dan juga berbagai perintah lainnya yang berfungsi untuk logging serta juga rate limiting.</p>
<h1 id="proses-kerja-docker">Proses Kerja Docker</h1>
<p>Docker mengisolasi proses networking-nya dengan cara memanipulasi langsung iptables.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup> Oleh karena itu, Docker secara otomatis membuat dua aturan utama pada iptables sebelum aturan iptables lainnya, sehingga, segala paket apapun yang masuk akan dicek terlebih dahulu melalui dua aturan terkait yang berasal dari Docker.</p>
<h1 id="penyebab">Penyebab</h1>
<p>Infomasi bagaiamana Docker memanipulasi iptables tersedia di halaman dokumentasi Docker, ada poin penting yang mengindikasi di mana letak permasalahannya ketika memakai aplikasi firewall.</p>
<blockquote>
<p>Docker installs two custom iptables chains named DOCKER-USER and DOCKER, and it ensures that incoming packets are always checked by these two chains first. <br><br>
All of Docker’s iptables rules are added to the DOCKER chain. Do not manipulate this chain manually. If you need to add rules which load before Docker’s rules, add them to the DOCKER-USER chain. These rules are applied before any rules Docker creates automatically.<br><br>
Rules added to the FORWARD chain -- either manually, or by another iptables-based firewall -- are evaluated after these chains. <em>This means that if you expose a port through Docker, this port gets exposed no matter what rules your firewall has configured</em>. If you want those rules to apply even when a port gets exposed through Docker, you must add these rules to the DOCKER-USER chain. <br><br>
<a href="https://docs.docker.com/network/iptables/?ref=manasiwibi.com#add-iptables-policies-before-dockers-rules">https://docs.docker.com/network/iptables/#add-iptables-policies-before-dockers-rules</a></p>
</blockquote>
<p>Singkatnya, pada iptables aturan <code>DOCKER</code> akan mendahului aturan mendatang lainnya, jadi, jika suatu port tidak terlebih dahulu dijelaskan pada aturan <code>DOCKER</code>, port terkait akan terekspos.</p>
<h1 id="solusi">Solusi</h1>
<p>Sebagaimana letak permasalahannya di atas, ada cara untuk menanggulangi masalah tersebut. Yaitu, dengan cara mengubah konfigurasi default atas bagaimana UFW berinteraksi dengan iptables, dengan menambahakan aturan khusus pada <code>DOCKER-USER</code>.</p>
<p>Untungnya, sudah ada developer dan para komunitas yang berkontribusi untuk memperbaiki celah keamanan ini.<sup class="footnote-ref"><a href="#fn3" id="fnref3">[3]</a></sup> Cara menanggulanginya adalah sebagai berikut.</p>
<ol>
<li>Buka file <code>/etc/ufw/after.rules</code></li>
<li>Tambahkan aturan khusus di bawah ini pada akhir file tersebut</li>
</ol>
<pre><code># BEGIN UFW AND DOCKER
*filter
:ufw-user-forward - [0:0]
:ufw-docker-logging-deny - [0:0]
:DOCKER-USER - [0:0]
-A DOCKER-USER -j ufw-user-forward

-A DOCKER-USER -j RETURN -s 10.0.0.0/8
-A DOCKER-USER -j RETURN -s 172.16.0.0/12
-A DOCKER-USER -j RETURN -s 192.168.0.0/16

-A DOCKER-USER -p udp -m udp --sport 53 --dport 1024:65535 -j RETURN

-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -d 172.16.0.0/12
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 192.168.0.0/16
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 10.0.0.0/8
-A DOCKER-USER -j ufw-docker-logging-deny -p udp -m udp --dport 0:32767 -d 172.16.0.0/12

-A DOCKER-USER -j RETURN

-A ufw-docker-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix &quot;[UFW DOCKER BLOCK] &quot;
-A ufw-docker-logging-deny -j DROP

COMMIT
# END UFW AND DOCKER
</code></pre>
<ol start="3">
<li>Lalu, restart UFW. Pada kasus tertentu, aturan tersebut baru bisa berlaku ketika sudah merestart server, jadi pastikan aturan di atas sudah teraplikasi.</li>
</ol>
<p>Ada pun penjelasan dan alasan akan konfigurasi tersebut tersedia pada link yang saya kaitkan di footnote ketiga.</p>
<h1 id="penutup">Penutup</h1>
<p>Referensi bacaan lebih mendalam yang berkaitan dengan beberapa hal pada tulisan ini sebagai berikut.'</p>
<ul>
<li><a href="https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture?ref=manasiwibi.com">https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture</a></li>
<li><a href="https://serverfault.com/questions/1014531/ufw-and-iptables-which-is-better-and-why?ref=manasiwibi.com">https://serverfault.com/questions/1014531/ufw-and-iptables-which-is-better-and-why</a></li>
<li><a href="https://github.com/chaifeng/ufw-docker?ref=manasiwibi.com">https://github.com/chaifeng/ufw-docker</a></li>
<li><a href="https://wiki.ubuntu.com/UncomplicatedFirewall?ref=manasiwibi.com">https://wiki.ubuntu.com/UncomplicatedFirewall</a></li>
</ul>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://netfilter.org/?ref=manasiwibi.com">https://netfilter.org/</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p><a href="https://docs.docker.com/network/iptables/?ref=manasiwibi.com">https://docs.docker.com/network/iptables/</a> <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn3" class="footnote-item"><p><a href="https://github.com/chaifeng/ufw-docker?ref=manasiwibi.com#solving-ufw-and-docker-issues">https://github.com/chaifeng/ufw-docker#solving-ufw-and-docker-issues</a> <a href="#fnref3" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Public Instance Services ]]></title>
        <description><![CDATA[ Tor

https://metrics.torproject.org/rs.html#search/darkheroes



Unfortunately, I can no longer maintain these instances.

Nitter

A free and open source alternative Twitter front-end focused on privacy and performance.

Clearnet: https://nitter.manasiwibi.com/Onion: http://li7snkj6oituazbkr5clmilccwwumhd2dntbhttxomy4dfakeeoar4qd.onion/

Teddit

A free and open source alternative Reddit front-end focused ]]></description>
        <link>https://manasiwibi.com/public-instance-services/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a9717a</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Fri, 09 Sep 2022 19:13:50 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <h1 id="tor">Tor</h1><p><a href="https://metrics.torproject.org/rs.html?ref=manasiwibi.com#search/darkheroes">https://metrics.torproject.org/rs.html#search/darkheroes</a></p><p></p><p>Unfortunately, I can no longer maintain these instances.</p><p><strong><s>Nitter</s></strong></p><p><s>A free and open source alternative Twitter front-end focused on privacy and performance.</s></p><p><s>Clearnet: </s><a href="https://nitter.manasiwibi.com/?ref=manasiwibi.com"><s>https://nitter.manasiwibi.com/</s></a><s>Onion: </s><a href="http://li7snkj6oituazbkr5clmilccwwumhd2dntbhttxomy4dfakeeoar4qd.onion/?ref=manasiwibi.com"><s>http://li7snkj6oituazbkr5clmilccwwumhd2dntbhttxomy4dfakeeoar4qd.onion/</s></a></p><p><strong><s>Teddit</s></strong></p><p><s>A free and open source alternative Reddit front-end focused on privacy.</s></p><p><s>Clearnet: </s><a href="https://teddit.manasiwibi.com/?ref=manasiwibi.com"><s>https://teddit.manasiwibi.com/</s></a><s>Onion: </s><a href="http://24fympskbrdgbf4afuvhqwwl2tv3y2vwxg5t2ktozd4j5b3fob5ntzyd.onion/?ref=manasiwibi.com"><s>http://24fympskbrdgbf4afuvhqwwl2tv3y2vwxg5t2ktozd4j5b3fob5ntzyd.onion/</s></a></p><p><strong><s>Proxitok</s></strong></p><p><s>Open source alternative frontend for TikTok.</s></p><p><s>Clearnet: </s><a href="https://proxitok.manasiwibi.com/?ref=manasiwibi.com"><s>https://proxitok.manasiwibi.com/</s></a><s>Onion: </s><a href="http://vywqfflneajejuhg7o5iklqvzemu2fcdrb3gtkvnyqsho6qin5svdsad.onion/?ref=manasiwibi.com"><s>http://vywqfflneajejuhg7o5iklqvzemu2fcdrb3gtkvnyqsho6qin5svdsad.onion/</s></a></p><p><strong><s>Invidious</s></strong></p><p><s>An open source alternative front-end to YouTube.</s></p><p><s>Clearnet: </s><a href="https://invidious.manasiwibi.com/?ref=manasiwibi.com"><s>https://invidious.manasiwibi.com/</s></a><s>Onion: </s><a href="http://znhhnv55asjawcfy3xjun6dlbzevkd5wv5mswq7ztlkx4zawagc3bryd.onion/?ref=manasiwibi.com"><s>http://znhhnv55asjawcfy3xjun6dlbzevkd5wv5mswq7ztlkx4zawagc3bryd.onion/</s></a></p><p><strong><s>Librarian</s></strong></p><p><s>An alternative frontend for LBRY/Odysee.</s></p><p><s>Clearnet: </s><a href="https://librarian.manasiwibi.com/?ref=manasiwibi.com"><s>https://librarian.manasiwibi.com/</s></a><s>Onion: </s><a href="http://jnfc354jfpp3euom2iape3lfqam3jkidztfks2zeap3sfowv6z5yy3qd.onion/?ref=manasiwibi.com"><s>http://jnfc354jfpp3euom2iape3lfqam3jkidztfks2zeap3sfowv6z5yy3qd.onion/</s></a></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Self-host Matomo dan Konfigurasi Analitik Web ]]></title>
        <description><![CDATA[ Berfungsi sama seperti Google Analytics, Matomo merupakan sebuah platform tracking untuk suatu website atau aplikasi.


Perbedaan siginifikannya adalah dalam bagaimana data-data yang dihasilkan, data-data hasil analitik sepenuhnya dapat dimiliki. Dalam hal lainnya, aplikasi ini juga memberikan kebebasan mengenai data-data seperti apa yang akan dikoleksi untuk para pengunjung website ini.


Matomo ]]></description>
        <link>https://manasiwibi.com/self-host-matomo-dan-konfigurasi-pengaturan-analitik/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97177</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Tue, 06 Sep 2022 19:40:54 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <!--kg-card-begin: markdown--><p>Berfungsi sama seperti Google Analytics, Matomo merupakan sebuah platform <em>tracking</em> untuk suatu website atau aplikasi.</p>
<p>Perbedaan siginifikannya adalah dalam bagaimana data-data yang dihasilkan, data-data hasil analitik sepenuhnya dapat dimiliki. Dalam hal lainnya, aplikasi ini juga memberikan kebebasan mengenai data-data seperti apa yang akan dikoleksi untuk para pengunjung website ini.</p>
<p>Matomo sendiri merupakan aplikasi perangkat lunak <em>open source</em>. Dengan fitur yang hampir serupa dengan Google analytics, Matomo memberikan kontrol penuh terhadap data yang dihasilkan. Tidak hanya itu, privasi pengguna terlindungi dan kepemilikan data sepenuhnya didapatkan, hal-hal yang tidak bisa didapatkan ketika menggunakan Google Analytics.</p>
<p>Proses instalasi Matomo sendiri cukup mudah. Ada image Docker official<sup class="footnote-ref"><a href="#fn1" id="fnref1">[1]</a></sup> yang tersedia ataupun juga instalasi secara manual, entah itu menggunakan control panel web hosting maupun langsung via <em>server</em>.</p>
<h1 id="gdpr-dan-consent-cookie-serta-pelacakan">GDPR, dan <em>Consent</em> Cookie serta Pelacakan</h1>
<p>GDPR sendiri mewajibkan suatu aplikasi atau website yang melayani pengunjung dari Uni Eropa, diwajibkan menanyakan konfirmasi atas <em>consent</em> untuk penggunaan data dari setiap pengunjung ataupun penggunaan cookies.</p>
<p>Konfigurasi dan fitur yang tersedia dalam Matomo memberikan keluwesan pemilik website untuk memilih jenis pelacakan yang mematuhi regulasi GDPR, bahkan tanpa <em>consent</em> pengunjung ataupun banner cookies sekalipun.</p>
<p>Hal itu disebabkan karena jenis <em>tracking</em> yang digunakan tidak memakai <em>tracking</em> jenis cookies, data yang digunakan hanya sebagai data analitik tidak untuk keperluan lainnya, pengunjung tidak dilacak di berbagai website-website lain, dan informasi pengunjung tidak bisa dilacak atau dipetakan.<sup class="footnote-ref"><a href="#fn2" id="fnref2">[2]</a></sup></p>
<p>Mengenai apakah ruang lingkup web atau blog personal wajib mematuhi GDPR atau apa itu GDPR sendiri secala lengkap, itu mungkin bahasan lain. Yang terpenting adalah setiap situs atau aplikasi harus menjamin keamanan dan privasi para pengunjungnya dalam interaksi apapun.</p>
<h1 id="konfigurasi-tracking">Konfigurasi <em>Tracking</em></h1>
<p>•	<strong>Menonaktifkan pelacakan yang menggunakan cookies</strong></p>
<p>Konfigurasi dalam dashboard Matomo:</p>
<p><img src="https://manasiwibi.com/content/images/2022/09/matomo-tracki-cookie.png" alt="matomo-tracki-cookie" loading="lazy"></p>
<p>Dan pada kode tag pelacakan JavaScript</p>
<p><code> _paq.push(['disableCookies']);</code></p>
<p>•	<strong>Anonimisasi alamat IP</strong></p>
<p><img src="https://manasiwibi.com/content/images/2022/09/anonimisasi-ip-matomo.png" alt="anonimisasi-ip-matomo" loading="lazy"></p>
<p>• <strong>Preferensi Do Not Track</strong></p>
<p><img src="https://manasiwibi.com/content/images/2022/09/opt-out.png" alt="opt-out" loading="lazy"></p>
<p>Dan yang terakhir, opsi opt-out <em>tracking</em> tersedia pada halaman <strong>GHOST_URL</strong>/privacy-policy/. Para pengguna <em>browser</em> yang mengaktifkan DNT, sudah secara otomatis menonaktifkan <em>tracking</em> dari Matomo.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p><a href="https://hub.docker.com/_/matomo/?ref=manasiwibi.com">https://hub.docker.com/_/matomo/</a> <a href="#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p><a href="https://matomo.org/faq/new-to-piwik/how-do-i-use-matomo-analytics-without-consent-or-cookie-banner/?ref=manasiwibi.com">https://matomo.org/faq/new-to-piwik/how-do-i-use-matomo-analytics-without-consent-or-cookie-banner/</a> <a href="#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
<!--kg-card-end: markdown--> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Configure Ghost as an Onion Service ]]></title>
        <description><![CDATA[ As you have may notice, my blog is built over Ghost. I’m a keen supporter of the Tor network as a whole. So why wouldn’t I onionized my own website.

I’m gonna skip the ghost installation part but straight into configuring the onion service.


As a prerequisite, ]]></description>
        <link>https://manasiwibi.com/configure-ghost-as-an-onion-service/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97176</guid>
        <category><![CDATA[  ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Thu, 18 Aug 2022 10:53:41 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <!--kg-card-begin: markdown--><p>As you have may notice, my blog is built over Ghost. I’m a keen supporter of the Tor network as a whole. So why wouldn’t I onionized my own website.<br>
I’m gonna skip the ghost installation part but straight into configuring the onion service.</p>
<p>As a prerequisite, I configured Ghost using Ubuntu manual installation with Nginx and SSL set up. And of course, you should have installed Tor.</p>
<p>Assuming we have a similar configuration, we will find the SSL Nginx<br>
configuration file at <code>/etc/nginx/sites-available/{sitename}-ssl.conf</code>.</p>
<p>We just simply need to add the Onion-Location header and Onion service address inside our Nginx config. But before we go over that part let's start with starting up the onion service</p>
<h1 id="creating-onion-service">Creating onion service</h1>
<p>On <code>/etc/tor/torrc</code> append below config to the bottom of the file.</p>
<pre><code>HiddenServiceDir /var/lib/tor/{sitename}/
HiddenServicePort 80 127.0.0.1:80
</code></pre>
<p>Restart the Tor process, <code>sudo systemctl restart tor</code>. After that, let's see the generated Onion Service address by running <code>sudo cat /var/lib/tor/{sitename}/hostname</code>.</p>
<h1 id="nginx">NGINX</h1>
<p>The Onion Service address is ready. Now let's configure it so Nginx sent the information about the onion address to the client by using Onion-Location.</p>
<p>Upon <code>/etc/nginx/sites-available/{sitename}-ssl.conf</code>, add the config just before <code>location / {</code> line.</p>
<pre><code>add_header Onion-Location http://{generated-onion-address}.onion$request_uri;
</code></pre>
<p>After that, add a new <code>server block</code> in the bottom of the file.</p>
<pre><code>server {
    listen 80;

    server_name {generated-onion-address}.onion;

    location / {
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://127.0.0.1:2368;
    }
}
</code></pre>
<p>Check if the config is all good and restart Nginx.</p>
<pre><code>sudo nginx -t
sudo systemctl restart nginx
</code></pre>
<p>The whole config should look like this.</p>
<pre><code>server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name manasiwibi.com www.manasiwibi.com;
    root /var/www/ghost/system/nginx-root; # Used for acme.sh SSL verification (https://acme.sh)

    ssl_certificate /etc/letsencrypt/manasiwibi.com/fullchain.cer;
    ssl_certificate_key /etc/letsencrypt/manasiwibi.com/manasiwibi.com.key;
    include /etc/nginx/snippets/ssl-params.conf;

    add_header Onion-Location http://{generated-onion-address}.onion$request_uri;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:2368;
    }

    location ~ /.well-known {
        allow all;
    }

    client_max_body_size 1g;
}


server {
    listen 80;

    server_name {generated-onion-address}.onion;

    location / {
        proxy_set_header X-Forwarded-Proto https;
        proxy_pass http://127.0.0.1:2368;
    }
}

</code></pre>
<p>The reason why I set <code>X-Forwarded-Proto</code> to <code>https</code> is since ghost setting are making an internal http to https redirection by default, so we need to override that via the web server, by assuming/overriding the connection on the local reverse proxy is https.</p>
<h1 id="checking-it-out">Checking It Out</h1>
<p>Run <code>wget --server-response --spider your.domain</code> to see whether Nginx already sent out the onion information. The output should indicate it exists.</p>
<pre><code>onion-location: http://{generated-onion-address}.onion/
</code></pre>
<p>Or simply just open up Tor Browser and directly visit your clearnet domain. It should automatically be redirected into the configured Onion Service address.</p>
<p>As a caveat; if you want your onion service/server to be kept private. I suggest you follow the recommended guidelines based on Tor project websites and other consideration/guidelines recommendations.</p>
<!--kg-card-end: markdown--><p></p><p></p> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Apa Itu Browser Fingerprinting? ]]></title>
        <description><![CDATA[ Apa itu browser fingerprinting


Berdasar standarisasi organisasi World Wide Web Consortium(W3C), secara singkat, browser fingerprinting adalah kapabilitas situs internet atau website untuk mengidentifikasi dan mengidentifikasi ulang suatu pengunjung, user agent atau perangkat, melalui konfigurasi pengaturan atau karakteristik lainnya yang terdapat pada perangkat Anda.


Browser Fingerprinting ini digunakan website untuk ]]></description>
        <link>https://manasiwibi.com/apa-itu-browser-fingerprinting/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97175</guid>
        <category><![CDATA[ Privacy ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Tue, 16 Aug 2022 19:16:11 +0700</pubDate>
        <media:content url="" medium="image"/>
        <content:encoded><![CDATA[ <!--kg-card-begin: markdown--><h1 id="apa-itu-browser-fingerprinting">Apa itu browser fingerprinting</h1>
<p>Berdasar standarisasi organisasi World Wide Web Consortium(W3C), secara singkat, browser fingerprinting adalah kapabilitas situs internet atau website untuk mengidentifikasi dan mengidentifikasi ulang suatu pengunjung, user agent atau perangkat, melalui konfigurasi pengaturan atau karakteristik lainnya yang terdapat pada perangkat Anda.</p>
<p>Browser Fingerprinting ini digunakan website untuk menampilkan dan mengoptimasi layanan/tampilan mereka untuk perangkat atau browser tertentu. Tampilan yang diberikan website pada pengguna desktop dan handphone tentu saja berbeda, dalam hal lain, informasi zona waktu mengenai kapan dimulainya pertandingan sepak bola dapat kita dapatkan karena browser fingerprinting ini. Hal tersebut secara inheren merupakan cara kerja dari browser dan web itu sendiri. Akan tetapi, hal ini bisa dijadikan sebagai hal yang membahayakan privasi. Jika diiringi dengan identitas yang bisa dilacak seperti alamat email atau nama Anda, Informasi yang diturunkan dari fingerpint browser bisa digunakan untuk memetakan tingkah laku, perilaku, kesukaan, serta kapan dan di mana Anda mengakses website. Dalam kata lain, mengidentifikasi pengguna mengenai aktifitas digitalnya.</p>
<h1 id="pengaruh-browser-fingerprinting-terhadap-aktifitas-digital">Pengaruh Browser Fingerprinting Terhadap Aktifitas Digital</h1>
<p>Data digital personal, seperti perilaku, kesukaan, ketidaksukaan, dan hobi pada suatu pengujung website bisa digunakan untuk banyak hal. Seperti menargetkan iklan yang sesuai dengan preferensi kalian, mengurangi botnet atau tindakan merugikan pada suatu website, mencegah tindak penipuan pada internet banking atau penggunaan kartu debit/credit, dan juga penipuan pada website jual-beli. Di sisi negatifnya, karena browser fingerprinting ini bisa terjadi tanpa persetujuan penggunannya, proses-proses yang menginvasi hak privasi pengguna akan sangat rawan disalahgunakan. Beberapa aktifitas digital yang seharusnya berada dalam ruang privat, bisa digunakan dan dikoleksi untuk tujuan marketing atau lainnya.</p>
<p>Singkatnya, fingerprinting ini dapat digunakan untuk halnya keamanan, akan tetapi, tracking ini juga sangat berisiko terhadap privasi pengguna dalam aktvitas digital.</p>
<p>Browser fingerprinting dapat digunakan untuk:</p>
<ul>
<li>Mengidentifikasi pengguna</li>
<li>Mengkorelasikan aktivitas browsing</li>
<li>Melacak pengguna tanpa transparansi dan kontrol</li>
</ul>
<p>Browser fingerprinting ini sangat berpotensi untuk melanggar hak privasi kalian. Proses pada browser fingeprinting tidak memerlukan persetujuan dari penggunanya seperti cookies. Hal rawan inilah yang harus menjadi perhatian khusus bagi kita semua, karena tanpa persetujuan kita, aktifitas digital kita bisa dikoleksi dan digunakan untuk memonitor perilaku kita secara online.</p>
<h1 id="bagaimana-browser-fingerprinting-bekerja">Bagaimana browser fingerprinting bekerja?</h1>
<p>Praktik fingerprinting terjadi ketika setiap kali pengguna mengunjungi sebuah website. Tracker yang berasal dari situs itu tersendiri atau layanan pihak ketiga, akan termuat setiap kali kita membuat suatu situs. Oleh karena itu, tracker ini dapat digunakan untuk mengumpulkan identitas digital para penggunanya. Yang mengakibatkan, informasi spesifik seperti apa yang sedang user lakukan dan di mana mereka mengunjungi suatu situs dapat dipetakan.</p>
<p>Data dari browser selalu mengeluarkan informasi yang berupa, sistem operasi, jenis browser yang digunakan, hingga versi browser. Lalu, browser juga mengirim informasi tambahan berupa sistem operasi beserta versinya, tipe font yang ter-install, plugin yang digunakan, system colors, dan zona waktu pada browser.</p>
<p>Setiap kombinasi dari data-data tersebut dijadikan sebagai identitas/fingerprint unik dari browser yang kita gunakan saat mengunjungi suatu website. Data-data yang terkumpul oleh browser fingerprinting mungkin terlihat biasa-biasa saja, akan tetapi, informasi tersebut dapat mengidentifikasi setiap pengguna internet.</p>
<h1 id="melihat-langsung-cara-kerja-browser-fingerprinting">Melihat Langsung Cara Kerja Browser Fingerprinting</h1>
<p>Kalian semua bisa secara langsung melihat bagaimana browser fingerprinting ini bekerja, ada beberapa situs yang memang dibuat khusus untuk melakukan penelitian atau memberikan informasi secara umum. Sebagai contoh, kalian bisa langsung mengunjungi situs:</p>
<ul>
<li><a href="https://amiunique.org/?ref=manasiwibi.com">https://amiunique.org/</a></li>
<li><a href="https://coveryourtracks.eff.org/?ref=manasiwibi.com">https://coveryourtracks.eff.org/</a></li>
<li><a href="https://noscriptfingerprint.com/?ref=manasiwibi.com">https://noscriptfingerprint.com/</a></li>
</ul>
<p>Hasil dari situs tersebut, menampilkan data-data apa saja yang browser kalian keluarkan setiap kali mengunjungi suatu website. Dari informasi secara umum hingga penjelasan detail mengenai contoh dari data-data terkait.</p>
<p>Dari informasi itulah yang menimbulkan potensi data personal yang sangat spesifik digunakan tanpa sepengetahuan dan sepertujuan kita.</p>
<h1 id="mencegah-browser-fingerprinting-pada-aktifitas-digital">Mencegah Browser Fingerprinting Pada Aktifitas Digital</h1>
<p>Karena fingerprint browser ini secara inheren terjadi didalam bagaimana proses berselancar di dunia maya, hal ini tidak bisa dihilangkan. Namun demikian, ada beberapa hal yang bisa kita lakukan untuk meminimalisir keunikan dari data personal/browser kita.</p>
<p>Cara simple-nya adalah dengan menggunakan browser yang melindungi data privasi kalian semua. Browser seperti Firefox, Tor Browser, dan Safari secara bawaan terdapat fitur yang mencegah browser fingerprinting dapat dilakukan secara efektif.</p>
<p>Akan tetapi, jika kalian memiliki alasan kuat dan jelas untuk menghindari browser fingerprinting, sudah sepatutnya bahwa menggunakan Tor Browser adalah pilihan yang tepat.</p>
<!--kg-card-end: markdown--> ]]></content:encoded>
    </item>
    <item>
        <title><![CDATA[ Coming soon ]]></title>
        <description><![CDATA[ This is ManaSiWibi, a brand new site by Wibi that&#39;s just getting started. Things will be up and running here shortly, but you can subscribe in the meantime if you&#39;d like to stay up to date and receive emails when new content is published! ]]></description>
        <link>https://manasiwibi.com/coming-soon-2/</link>
        <guid isPermaLink="false">694a5ced088b3b0001a97172</guid>
        <category><![CDATA[ News ]]></category>
        <dc:creator><![CDATA[ Wibi ]]></dc:creator>
        <pubDate>Wed, 04 May 2022 01:29:30 +0700</pubDate>
        <media:content url="https://static.ghost.org/v4.0.0/images/feature-image.jpg" medium="image"/>
        <content:encoded><![CDATA[ <p>This is ManaSiWibi, a brand new site by Wibi that's just getting started. Things will be up and running here shortly, but you can <a href="#/portal/">subscribe</a> in the meantime if you'd like to stay up to date and receive emails when new content is published!</p> ]]></content:encoded>
    </item>

</channel>
</rss>