<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ian Effendi</title>
    <description>The latest articles on DEV Community by Ian Effendi (@effendiian).</description>
    <link>https://dev.to/effendiian</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F128489%2F64988fad-ee56-4ada-b048-825e81f4ac08.jpg</url>
      <title>DEV Community: Ian Effendi</title>
      <link>https://dev.to/effendiian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/effendiian"/>
    <language>en</language>
    <item>
      <title>Quicklook: Discovering Logseq</title>
      <dc:creator>Ian Effendi</dc:creator>
      <pubDate>Thu, 01 Aug 2024 22:42:32 +0000</pubDate>
      <link>https://dev.to/effendiian/quicklook-discovering-logseq-39kf</link>
      <guid>https://dev.to/effendiian/quicklook-discovering-logseq-39kf</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovhlgea1kks81yvthejj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fovhlgea1kks81yvthejj.jpg" alt="Photograph of pink notebooks with one saying, 'You are exactly where you need to be.'"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.pexels.com/photo/pink-and-peach-stationery-19797271/" rel="noopener noreferrer"&gt;Photo by Viridiana Rivera&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://logseq.com/" rel="noopener noreferrer"&gt;LogSeq&lt;/a&gt; is a &lt;a href="https://en.wikipedia.org/wiki/Personal_knowledge_management" rel="noopener noreferrer"&gt;personal knowledge management system&lt;/a&gt; application that assists those interested in working with lots of networked information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering LogSeq
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qt7oppj7ma6o7flmq9f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qt7oppj7ma6o7flmq9f.png" alt="Screenshot of LogSeq homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Screenshot of the &lt;a href="https://logseq.com/" rel="noopener noreferrer"&gt;LogSeq&lt;/a&gt; homepage.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  What is this software?
&lt;/h3&gt;

&lt;p&gt;LogSeq is suited for &lt;em&gt;knowledge workers&lt;/em&gt;. It's the perfect tool for students, academics, writers, project managers, and developers (among other professions) to manage, store, and retrieve notes that they create.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;LogSeq&lt;/em&gt; is provided under the &lt;a href="https://github.com/logseq/logseq?tab=readme-ov-file" rel="noopener noreferrer"&gt;AGPL-3.0 License&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.logseq.com/#/page/start%20here" rel="noopener noreferrer"&gt;You can read more about how to use this software here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who maintains this software?
&lt;/h3&gt;

&lt;p&gt;LogSeq is open-source software with a relatively healthy community.&lt;/p&gt;

&lt;p&gt;At the time of writing, &lt;a href="https://github.com/logseq/logseq/commits/master/?until=2024-08-01" rel="noopener noreferrer"&gt;the last commit was from 2 weeks ago&lt;/a&gt;, with over 1,524 open issues and 53 open pull requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who created this software?
&lt;/h3&gt;

&lt;p&gt;The project was started by &lt;a href="https://github.com/tiensonqin" rel="noopener noreferrer"&gt;Tienson Qin (@tiensonqin)&lt;/a&gt; four years ago on &lt;a href="https://github.com/logseq/logseq/commit/8ad40979876b47d3e2d830935981a8f72e3ac066" rel="noopener noreferrer"&gt;May 23rd, 2020&lt;/a&gt;. Qin (and four others) went on to create the privately funded &lt;a href="https://pitchbook.com/profiles/company/483967-18#overview" rel="noopener noreferrer"&gt;LogSeq, Inc.&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;LogSeq, Inc. &lt;a href="https://blog.logseq.com/logseq-raises-4-1m-to-accelerate-growth-of-the-new-world-knowledge-graph/" rel="noopener noreferrer"&gt;raised $4.1M in May 2022&lt;/a&gt;, with some very notable investors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to[Stripe]%20CEO"&gt;Patrick Collision&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.toformer%20CEO%20of%20[GitHub]"&gt;Nat Friedman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Tobias_L%C3%BCtke" rel="noopener noreferrer"&gt;Tobias Lütke&lt;/a&gt;, Founder of &lt;a href="https://www.shopify.com/" rel="noopener noreferrer"&gt;Shopify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://a16z.com/author/sriram-krishnan/" rel="noopener noreferrer"&gt;Sriram Krishnan&lt;/a&gt;, GP at &lt;a href="https://a16z.com/" rel="noopener noreferrer"&gt;A16Z&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Charlie_Cheever" rel="noopener noreferrer"&gt;Charlie Cheever&lt;/a&gt;, Founder of &lt;a href="https://expo.dev/" rel="noopener noreferrer"&gt;Expo&lt;/a&gt;/&lt;a href="https://www.quora.com/" rel="noopener noreferrer"&gt;Quora&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Dave_Winer" rel="noopener noreferrer"&gt;Dave Winer&lt;/a&gt;, the forefather of outliners, scripting, weblogs, RSS, podcasting, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Where do you go to download new releases?
&lt;/h3&gt;

&lt;p&gt;LogSeq provides a number of built binaries for different platforms on their &lt;a href="https://logseq.com/downloads" rel="noopener noreferrer"&gt;downloads page&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is this software powered by?
&lt;/h3&gt;

&lt;p&gt;According to the breakdown on GitHub, LogSeq is written with the following languages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Clojure 59.3%&lt;/li&gt;
&lt;li&gt;TypeScript 20.5%&lt;/li&gt;
&lt;li&gt;CSS 13.4%&lt;/li&gt;
&lt;li&gt;JavaScript 4.7%&lt;/li&gt;
&lt;li&gt;HTML 0.9%&lt;/li&gt;
&lt;li&gt;Swift 0.5%&lt;/li&gt;
&lt;li&gt;Other 0.7%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Logseq is also made possible by the following projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://clojure.org/" rel="noopener noreferrer"&gt;Clojure &amp;amp; ClojureScript&lt;/a&gt; - A dynamic, functional, general-purpose programming language&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/tonsky/datascript" rel="noopener noreferrer"&gt;DataScript&lt;/a&gt; - An immutable database and Datalog query-engine for Clojure,
ClojureScript and JS&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://ocaml.org/" rel="noopener noreferrer"&gt;OCaml&lt;/a&gt; &amp;amp; &lt;a href="https://github.com/inhabitedtype/angstrom" rel="noopener noreferrer"&gt;Angstrom&lt;/a&gt;, for the document parser &lt;a href="https://github.com/logseq/mldoc" rel="noopener noreferrer"&gt;mldoc&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://isomorphic-git.org/" rel="noopener noreferrer"&gt;isomorphic-git&lt;/a&gt; - A pure JavaScript implementation of Git for NodeJS and web browsers&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/borkdude/sci" rel="noopener noreferrer"&gt;SCI&lt;/a&gt; - A Small Clojure Interpreter&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Reception
&lt;/h2&gt;

&lt;p&gt;LogSeq itself has been well-received, although it hasn't reached the same levels of market utilization as similar PKMS giant &lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The good news, is that LogSeq has a pretty decent following with &lt;a href="https://twitter.com/logseq/verified_followers" rel="noopener noreferrer"&gt;30K+ followers on Twitter&lt;/a&gt; and &lt;a href="https://github.com/logseq/logseq" rel="noopener noreferrer"&gt;30k+ stars on GitHub&lt;/a&gt; at the time of writing.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's it do well?
&lt;/h3&gt;

&lt;p&gt;This probably has a lot to do with LogSeq's primary philosophy diverging from known tools:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Logseq is challenging legacy knowledge management systems that are based on skeuomorphic design (which mimics the systems used for storing physical papers, files, and folders). Why? Because humans don't think linearly in pages and folders, but rather link inter-connected concepts together non-linearly. Logseq is designed to capture this type of non-linear, thinking creating intuitive and interconnected data, and allowing users to unlock their maximum potential.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The pure emphasis on backlinking and graph discoverability for ones notes is a novel idea and takes some getting used to for people who are purely familiar with traditional notetaking applications (eg. physical notebooks and their similar digital counterparts).&lt;/p&gt;

&lt;p&gt;For users who get past this hurdle, they tend to love it!&lt;/p&gt;

&lt;h3&gt;
  
  
  What can it improve?
&lt;/h3&gt;

&lt;p&gt;LogSeq is technically early access - there isn't a version 1.0.0 available yet. The maintainers themselves maintain a roadmap of what they need to do to get there. One particular sticking point is performance of large "graphs" and the lack of real-time collaboration, &lt;a href="https://discuss.logseq.com/t/why-the-database-version-and-how-its-going/26744" rel="noopener noreferrer"&gt;which they talk about here&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Any competitors on the market?
&lt;/h3&gt;

&lt;p&gt;There are plenty of similar competitors currently on the market:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://obsidian.md/" rel="noopener noreferrer"&gt;Obsidian&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://roamresearch.com/" rel="noopener noreferrer"&gt;Roam Research&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further resources
&lt;/h2&gt;

&lt;p&gt;These resources may be valuable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://logseq.com/" rel="noopener noreferrer"&gt;LogSeq Homepage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.logseq.com/resources/" rel="noopener noreferrer"&gt;Official LogSeq Resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/logseq" rel="noopener noreferrer"&gt;@logseq on Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>blog</category>
      <category>quicklook</category>
      <category>opensource</category>
      <category>logseq</category>
    </item>
    <item>
      <title>Crosspost! Publishing to Dev.to From My Personal Blog</title>
      <dc:creator>Ian Effendi</dc:creator>
      <pubDate>Thu, 01 Aug 2024 22:41:32 +0000</pubDate>
      <link>https://dev.to/effendiian/crosspost-publishing-to-devto-from-my-personal-blog-5ce7</link>
      <guid>https://dev.to/effendiian/crosspost-publishing-to-devto-from-my-personal-blog-5ce7</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijmkd5me53oozz7iop6g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijmkd5me53oozz7iop6g.jpg" alt="Picture of a 4-way road intersection" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.pexels.com/photo/white-car-on-intersection-among-stripes-22626687/" rel="noopener noreferrer"&gt;Photo by Shahram Hafezi&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Would you look at that? You’re now seeing crossposts to my &lt;a href="https://dev.to/effendiian"&gt;dev.to blog&lt;/a&gt;. Check out the canonical link at the top to link back to the original post!&lt;/p&gt;

&lt;h2&gt;
  
  
  How'd I do it?
&lt;/h2&gt;

&lt;p&gt;There were two main parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate an RSS feed for the original blog at &lt;a href="https://effendiian.github.io" rel="noopener noreferrer"&gt;effendiian.github.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Connect it using the RSS extension provided by Dev.to's settings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Generating the RSS feed
&lt;/h3&gt;

&lt;p&gt;My website is a static site built with &lt;a href="https://hexo.io/" rel="noopener noreferrer"&gt;Hexo&lt;/a&gt; and served through &lt;a href="https://pages.github.com/" rel="noopener noreferrer"&gt;GitHub Pages&lt;/a&gt;. Hexo's documentation isn't the best, but with a little digging, I found that, in the years since I last used it, they've provided &lt;a href="https://github.com/hexojs/hexo-generator-feed" rel="noopener noreferrer"&gt;a pretty robust first-party plugin&lt;/a&gt; for generating RSS and ATOM feeds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can read more about &lt;a href="https://www.ibm.com/docs/en/baw/22.x?topic=formats-atom-feed-format" rel="noopener noreferrer"&gt;atom.xml feeds here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using the RSS feed
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Thanks to the excellent writeup from &lt;a href="https://dev.to/tessak22"&gt;Tessa Kriesel&lt;/a&gt; on, &lt;a href="https://dev.to/tessak22/connecting-your-rss-feed-url-for-easy-publishing-to-dev-to-31de"&gt;Connecting your RSS feed URL for easy publishing to dev.to&lt;/a&gt;, it was quite simple to get it all working.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You simply add the feed to your Dev.to site via the RSS extension under settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can read more about &lt;a href="https://www.rssboard.org/rss-specification" rel="noopener noreferrer"&gt;rss2.xml feeds here&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Connecting to other third-party platforms
&lt;/h3&gt;

&lt;p&gt;This is good for now, but I'd also like to see if I can connect to other platforms, like &lt;a href="https://www.linkedin.com/in/effendiian/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://twitter.com/home" rel="noopener noreferrer"&gt;the site formerly known as Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There may even be a pretty reasonable solution using GitHub actions, given this project from &lt;a href="https://github.com/lwojcik" rel="noopener noreferrer"&gt;@lwojcik&lt;/a&gt;/&lt;a href="https://github.com/lwojcik/github-action-feed-to-social-media" rel="noopener noreferrer"&gt;github-action-feed-to-social-media&lt;/a&gt;, which allows for posting to platforms like &lt;a href="https://masto.nyc/deck/@effendiian" rel="noopener noreferrer"&gt;Mastodon&lt;/a&gt; and &lt;a href="https://discord.com/" rel="noopener noreferrer"&gt;Discord&lt;/a&gt; as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why do this now?
&lt;/h2&gt;

&lt;p&gt;Three driving reasons for why I want to get back into blogging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vague interests in technical writing.&lt;/li&gt;
&lt;li&gt;I love organizing information - similar to &lt;a href="https://google.com" rel="noopener noreferrer"&gt;personal knowledge management systems&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;I should be documenting my learning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The old site hadn't been touched in &lt;em&gt;years&lt;/em&gt; since I was busy getting degrees and working full-time. Now that I've finished the official rebranding of my site and &lt;code&gt;@effendiian&lt;/code&gt; GitHub account (formerly known as &lt;code&gt;@rimij405&lt;/code&gt;), it's time to start posting, making things, and sharing on my different social media platforms.&lt;/p&gt;

&lt;p&gt;With that, I'm glad to be writing again!&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next? What should you expect?
&lt;/h2&gt;

&lt;p&gt;Expect more. Well, more of this stuff:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frequent, shorter posts that get straight to the point&lt;/li&gt;
&lt;li&gt;Occasional post-mortems and retrospectives&lt;/li&gt;
&lt;li&gt;Musings on system design, every once in a while&lt;/li&gt;
&lt;li&gt;Observations about note-taking process and knowledge management&lt;/li&gt;
&lt;li&gt;Quicklooks into useful open-source projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are also some other site-related improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Updating the footer so it's not so cramped and has a better sitemap layout.&lt;/li&gt;
&lt;li&gt;[ ] Embed &lt;a href="https://github.com/Bloggify/github-calendar" rel="noopener noreferrer"&gt;this GitHub contributions tracker&lt;/a&gt; on the site.&lt;/li&gt;
&lt;li&gt;[ ] Adding support for &lt;code&gt;::&lt;/code&gt;-style emojis (eg. &lt;code&gt;:smile:&lt;/code&gt;) with this &lt;a href="https://github.com/theme-next/hexo-filter-emoji?tab=readme-ov-file" rel="noopener noreferrer"&gt;hexo-filter-emoji&lt;/a&gt; package.&lt;/li&gt;
&lt;li&gt;[ ] Polishing the website's landing page (maybe with some 3D illustrations... looking at you &lt;a href="https://threejs.org/" rel="noopener noreferrer"&gt;Three.js&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;[ ] Adding some analytics (which is simple, but also requires I add cookie consent trackers and global policy control listeners... so not so straightforward).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm also considering rewriting the application with a framework like &lt;a href="https://nuxt.com/" rel="noopener noreferrer"&gt;Nuxt&lt;/a&gt; or adding &lt;a href="https://unocss.dev/" rel="noopener noreferrer"&gt;UnoCSS&lt;/a&gt; styles, just to play around with the technology and see what I can do. Hexo feels like it's not quite ready for production use in an enterprise context, but it's really straightforward to get up and running with for smaller groups and solo developers.&lt;/p&gt;

</description>
      <category>article</category>
      <category>resource</category>
      <category>rss</category>
      <category>crosspost</category>
    </item>
    <item>
      <title>Feature: chromium-apt-get Issue 626 (PR 627)</title>
      <dc:creator>Ian Effendi</dc:creator>
      <pubDate>Wed, 31 Jul 2024 03:32:26 +0000</pubDate>
      <link>https://dev.to/effendiian/feature-chromium-apt-get-issue-626-pr-627-2m79</link>
      <guid>https://dev.to/effendiian/feature-chromium-apt-get-issue-626-pr-627-2m79</guid>
      <description>&lt;p&gt;&lt;a href="https://www.pexels.com/photo/black-google-smartphone-on-box-1482061/" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Felpy5pklitc6zn5twgh8.jpg" alt="Photo by Deepanker Verma" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="https://www.pexels.com/photo/black-google-smartphone-on-box-1482061/" rel="noopener noreferrer"&gt;Photo by Deepanker Verma&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Put together a quick Dev Container feature that I’m hoping to share with the community. &lt;a href="https://effendiian.github.io/2024/07/31/chromium-apt-get/" rel="noopener noreferrer"&gt;This article was originally published on my personal site&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I needed a headless browser instance for running the Lighthouse CLI from within a Docker container. I thought I could get a quick one setup for Dev Containers, but it turns out there wasn't an easy way to get headless chromium installed onto a Dev Container.&lt;/p&gt;

&lt;p&gt;So I made a feature request on the &lt;a href="https://github.com/devcontainers-contrib/features" rel="noopener noreferrer"&gt;devcontainers-contrib/features&lt;/a&gt; repository.&lt;br&gt;
&lt;a href="https://github.com/devcontainers-contrib/features/issues/626" rel="noopener noreferrer"&gt;[Feature Request]: chromium-apt-get #626&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I wasn't even the first person to ask for something like this, at least, in the broader community: &lt;a href="https://github.com/devcontainers/features/issues/189" rel="noopener noreferrer"&gt;[Feature] Headless browser (chrome/chromium/firefox) devcontainers/features#189&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Feature
&lt;/h2&gt;

&lt;p&gt;DevContainers work by installing features in layers through their &lt;a href="https://containers.dev/spec" rel="noopener noreferrer"&gt;devcontainers.json specification&lt;/a&gt;. We just needed to get it in there.&lt;/p&gt;

&lt;p&gt;I added a pull request that describes the whole thing here: &lt;a href="https://github.com/devcontainers-contrib/features/pull/627" rel="noopener noreferrer"&gt;Pull Request #627&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can use this feature like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="nl"&gt;"features"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
 &lt;/span&gt;&lt;span class="nl"&gt;"ghcr.io/devcontainers-contrib/features/chromium-apt-get:1"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{},&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📖 Context
&lt;/h2&gt;

&lt;p&gt;There are some &lt;a href="https://chromium.woolyss.com/#notes" rel="noopener noreferrer"&gt;historical reasons&lt;/a&gt; for why it's being done this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The official Chromium team doesn't supply "stable" binaries of Chromium; they are usually compiled into stable versions by third-parties.&lt;/li&gt;
&lt;li&gt;Chromium installation breaks when installed with &lt;code&gt;snap&lt;/code&gt; packages on Ubuntu.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;apt-get install -y chromium&lt;/code&gt; on Ubuntu 20.04+ is just a wrapper for a &lt;code&gt;snap&lt;/code&gt; installations.&lt;/li&gt;
&lt;li&gt;Referenced this guide to find a reliable PPA: &lt;a href="https://ubuntuhandbook.org/index.php/2021/05/install-chromium-browser-ppa-ubuntu-20-04/" rel="noopener noreferrer"&gt;How to Install Chromium Browser via PPA in Ubuntu 20.04, 20.10&lt;/a&gt; - credit to &lt;a href="https://twitter.com/UbuntuHandbook/" rel="noopener noreferrer"&gt;UbuntuHandbook&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ⚖️ Caveats
&lt;/h2&gt;

&lt;p&gt;The maintainers may wish to scrutinize the default PPA used here, both for security and stability concerns. I agree!&lt;/p&gt;

&lt;p&gt;I think future improvement to this feature could include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parameterizing the selected PPA to allow sourcing &lt;code&gt;chromium&lt;/code&gt; binaries from public and private PPAs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Next Steps?
&lt;/h2&gt;

&lt;p&gt;Now, all that's left is to wait for the pull request to be reviewed and then I can go ahead and mark this one as done.&lt;/p&gt;

</description>
      <category>blog</category>
      <category>feature</category>
      <category>pullrequest</category>
    </item>
    <item>
      <title>DS1 - Journey into Python</title>
      <dc:creator>Ian Effendi</dc:creator>
      <pubDate>Mon, 22 Apr 2019 20:40:35 +0000</pubDate>
      <link>https://dev.to/effendiian/ds1-journey-into-python-1d0g</link>
      <guid>https://dev.to/effendiian/ds1-journey-into-python-1d0g</guid>
      <description>&lt;h1&gt;
  
  
  Data Science 001 - Journey into Python
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;&lt;a href="https://rimij405.github.io/blog/data-science/data-science-01/" rel="noopener noreferrer"&gt;This was originally posted on my blog here&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I am practicing being concise. I want to simultaneously explore the field of data science and document my journey.&lt;/p&gt;

&lt;p&gt;As part of enrollment in a seminar covering humanitarian free (libre) and open software (HFOSS), I was introduced to Python for the sake of creating an educational application for the Sugar desktop environment. Sugar is not the focus of this post; instead, I want to focus more on &lt;em&gt;learning&lt;/em&gt; Python. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Past Informs the Present
&lt;/h2&gt;

&lt;p&gt;I was born in December of 1997. I was first introduced to Python when I was seven years old. My father sat me down in front of an old computer tower that had a floppy disk drive in it - I don't remember the model name - and put me in front of an old IDE. I don't remember the name of that, either.&lt;/p&gt;

&lt;p&gt;The syntax didn't stick, but, the concepts remained. I would go on to enroll at the Rochester Institute of Technology in 2015 and pursue my undegraduate degree in Game Design &amp;amp; Development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Science
&lt;/h2&gt;

&lt;p&gt;Recently, I became enamoured with the idea of actually using my knowledge of computer science to explore datasets in a meaningful way. Many years ago, while enrolled in &lt;a href="https://www.bxscience.edu/" rel="noopener noreferrer"&gt;high school&lt;/a&gt;, I was privileged to be in a school that was fell-funded and held encouraging programs for those interested in the sciences. At the time, I was still learning the basics of Java and C#, so data never gripped me as much as the game development industry did.&lt;/p&gt;

&lt;p&gt;I went on to watch my peers do interesting things with data - I recall one group mapped geography to crime data and won a competition for their findings. My memory fails me, and, I am unsure of the specific name of that competition - but the essence of what inspired me still influences me to pursue this field in my leisure time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Python?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;Python&lt;/code&gt; is only one option when dealing with data analysis and visualization. There are libraries for data visualization in &lt;code&gt;JavaScript&lt;/code&gt;, such as D3.js and &lt;code&gt;R&lt;/code&gt; is a free software environment created for statistical computing and graphics.&lt;/p&gt;

&lt;p&gt;I simply chose Python since I was already using it for Sugar development and felt that the barrier to entry would be lower.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning Python
&lt;/h2&gt;

&lt;p&gt;So that's the goal: learn python for the sake of getting better with Data Science and chronicle the journey along the way.&lt;/p&gt;

</description>
      <category>datascience</category>
      <category>python</category>
      <category>python3</category>
    </item>
  </channel>
</rss>
