<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Vinc</title>
  <subtitle>News</subtitle>
  <id>https://vinc.cc/news</id>
  <link href="https://vinc.cc/news"/>
  <link href="https://vinc.cc/news/feed.xml" rel="self"/>
  <updated>2024-12-01T01:00:00+01:00</updated>
  <author>
    <name>Vincent Ollivier</name>
  </author>
  <entry>
    <title>Reviewing November 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/12/01/changelog/"/>
    <id>https://vinc.cc/news/2024/12/01/changelog/</id>
    <published>2024-12-01T01:00:00+01:00</published>
    <updated>2024-12-02T16:55:59+01:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing November 2024&lt;/h1&gt;

&lt;p&gt;Another month working on &lt;a href="https://moros.cc"&gt;MOROS&lt;/a&gt;, my hobby operating system written in Rust,
with some improvements before the upcomming winter release: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Update clipboard behavior in editor (&lt;a href="https://github.com/vinc/moros/pull/706"&gt;#706&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update web commands (&lt;a href="https://github.com/vinc/moros/pull/703"&gt;#703&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve documentation (&lt;a href="https://github.com/vinc/moros/pull/697"&gt;#697&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update HTTP server (&lt;a href="https://github.com/vinc/moros/pull/702"&gt;#702&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add network config devices (&lt;a href="https://github.com/vinc/moros/pull/700"&gt;#700&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrade base64 module (&lt;a href="https://github.com/vinc/moros/pull/699"&gt;#699&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve Lisp (&lt;a href="https://github.com/vinc/moros/pull/684"&gt;#684&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix clock API (&lt;a href="https://github.com/vinc/moros/pull/698"&gt;#698&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is now a &lt;code&gt;browse&lt;/code&gt; command (written in shell) to view web pages, and a
&lt;code&gt;fetch&lt;/code&gt; command (written in lisp) to download files.&lt;/p&gt;

&lt;p&gt;Some device files have also been created to manage the network from userspace:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/dev/net/gw&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/net/ip&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/net/mac&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/net/usage&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, I worked on a mascot for the OS, it&amp;#39;s cute but it might be a little
too scary:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/moros-mascot.png" alt="Mascot" /&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reviewing October 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/11/01/changelog/"/>
    <id>https://vinc.cc/news/2024/11/01/changelog/</id>
    <published>2024-11-01T01:00:00+01:00</published>
    <updated>2024-11-01T16:59:53+01:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing October 2024&lt;/h1&gt;

&lt;p&gt;&lt;img src="/images/moros-mandelbrot.png" alt="Mandelbrot" /&gt;&lt;/p&gt;

&lt;p&gt;This month, I focused primarily on &lt;a href="https://moros.cc"&gt;MOROS&lt;/a&gt;, my hobby operating system
written in Rust, resulting in these merged PRs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use string instead of float as clock device output format (&lt;a href="https://github.com/vinc/moros/pull/696"&gt;#696&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add speaker device (&lt;a href="https://github.com/vinc/moros/pull/693"&gt;#693&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;List processors at boot (&lt;a href="https://github.com/vinc/moros/pull/692"&gt;#692&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Create clock module (&lt;a href="https://github.com/vinc/moros/pull/691"&gt;#691&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Create memory module (&lt;a href="https://github.com/vinc/moros/pull/690"&gt;#690&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add mandelbrot program (&lt;a href="https://github.com/vinc/moros/pull/689"&gt;#689&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Refactor vga driver (&lt;a href="https://github.com/vinc/moros/pull/688"&gt;#688&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add VGA graphics (&lt;a href="https://github.com/vinc/moros/pull/687"&gt;#687&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Free process memory on exit (&lt;a href="https://github.com/vinc/moros/pull/686"&gt;#686&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Ensure uninitialized data is zeroed when loading binary (&lt;a href="https://github.com/vinc/moros/pull/681"&gt;#681&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update panic handler (&lt;a href="https://github.com/vinc/moros/pull/680"&gt;#680&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most notable feature is the introduction of a graphic mode, with a
framebuffer and a customizable palette. I started by coding a program to
display BMP images and later played with a cool program to visualize the
&lt;a href="https://en.wikipedia.org/wiki/Mandelbrot_set"&gt;Mandelbrot set&lt;/a&gt;. New device files were added for that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/dev/vga/mode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/vga/buffer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/vga/palette&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, the following device files were also created or updated in other
PRs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/dev/clk/boot&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/clk/epoch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/clk/rtc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/dev/speaker&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I undertook significant internal refactoring and I experimented, not quite
successfully yet, with relocating the kernel to higher half memory and
activating multiple processors. More on that later.&lt;/p&gt;

&lt;p&gt;During the month I also created two PRs to improve &lt;a href="https://github.com/vinc/geodate"&gt;Geodate&lt;/a&gt;, my &lt;a href="https://geodate.org"&gt;lunisolar
calendar with decimal time&lt;/a&gt; and I spent time solving &lt;a href="/software/leetcode"&gt;LeetCode&lt;/a&gt; problems
in Ruby and MOROS Lisp to stay up to date as I will soon conclude this
funemployment period and seek my next full time job. If you&amp;#39;re hiring a
senior/staff dev with Ruby or Rust expertise, please &lt;a href="/contact"&gt;let me know&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reviewing September 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/10/01/changelog/"/>
    <id>https://vinc.cc/news/2024/10/01/changelog/</id>
    <published>2024-10-01T02:00:00+02:00</published>
    <updated>2024-11-01T12:52:00+01:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing September 2024&lt;/h1&gt;

&lt;h2&gt;CloudCheck&lt;/h2&gt;

&lt;p&gt;The first week of this month was spent wrapping up my work on
&lt;a href="https://cloudcheck.cc"&gt;CloudCheck&lt;/a&gt;, a project I&amp;#39;ve been contemplating since early 2023 to
help small teams &lt;a href="https://stop.wasting.cloud"&gt;reduce cloud waste&lt;/a&gt;. The MVP and the landing page
are complete, but I didn&amp;#39;t succeed in finding enough people interested
in trying the service or providing feedback.&lt;/p&gt;

&lt;p&gt;I tried to work on customer discovery during the previous year, but a
failure to make enough progress pushed the project to the back burner.
Eventually, I decided to spend up to a month coding it anyway to see
what would happen. I confirmed once again that &amp;quot;if you build it, they
will come&amp;quot; is not true. However, the time spent on the project was not
wasted. I got up to date with the latest Rails version and applied many
product ideas I had learned over the past two years.&lt;/p&gt;

&lt;p&gt;I found CloudCheck useful for monitoring my servers and reducing my
cloud bills, so I&amp;#39;ll keep using it and see where it goes. However, I
won&amp;#39;t invest more time working on it without user feedback.&lt;/p&gt;

&lt;h2&gt;MOROS&lt;/h2&gt;

&lt;p&gt;After that, I switched back to &lt;a href="http://moros.cc"&gt;MOROS&lt;/a&gt;, my hobby operating system
written in Rust. In comparison, talking about it and finding people
interested is much easier. I worked on many small features to improve
it during the month:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;/dev/vga/font&lt;/code&gt; device (&lt;a href="https://github.com/vinc/moros/pull/653"&gt;#653&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;base64&lt;/code&gt; command with &lt;code&gt;encode&lt;/code&gt; and &lt;code&gt;decode&lt;/code&gt; (&lt;a href="https://github.com/vinc/moros/pull/654"&gt;#654&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;kind&lt;/code&gt; syscall (&lt;a href="https://github.com/vinc/moros/pull/655"&gt;#655&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update &lt;code&gt;hash&lt;/code&gt; command (&lt;a href="https://github.com/vinc/moros/pull/656"&gt;#656&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;diff&lt;/code&gt; command (&lt;a href="https://github.com/vinc/moros/pull/657"&gt;#657&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add search to editor (&lt;a href="https://github.com/vinc/moros/pull/659"&gt;#659&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add a line mode to the editor (&lt;a href="https://github.com/vinc/moros/pull/660"&gt;#660&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add chess puzzle (&lt;a href="https://github.com/vinc/moros/pull/662"&gt;#662&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;write --parents&lt;/code&gt; option (&lt;a href="https://github.com/vinc/moros/pull/664"&gt;#664&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;pkg&lt;/code&gt; command (&lt;a href="https://github.com/vinc/moros/pull/663"&gt;#663&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve option parsing (&lt;a href="https://github.com/vinc/moros/pull/665"&gt;#665&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add scrollback buffer support (&lt;a href="https://github.com/vinc/moros/pull/627"&gt;#627&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add search to viewer (&lt;a href="https://github.com/vinc/moros/pull/666"&gt;#666&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix usage of CSI sequences for scrolling the scrollback buffer (&lt;a href="https://github.com/vinc/moros/pull/667"&gt;#667&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix userspace heap address (&lt;a href="https://github.com/vinc/moros/pull/668"&gt;#668&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Improve process code alloc (&lt;a href="https://github.com/vinc/moros/pull/669"&gt;#669&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Align cursor after scrolling in the editor (&lt;a href="https://github.com/vinc/moros/pull/671"&gt;#671&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;ptr::copy_nonoverlapping&lt;/code&gt; to load binaries (&lt;a href="https://github.com/vinc/moros/pull/670"&gt;#670&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Update Rust to nightly-2024-09-01 (&lt;a href="https://github.com/vinc/moros/pull/672"&gt;#672&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add special &lt;code&gt;alloc_error_handler&lt;/code&gt; for userspace (&lt;a href="https://github.com/vinc/moros/pull/673"&gt;#673&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix binary loading (&lt;a href="https://github.com/vinc/moros/pull/674"&gt;#674&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add more restrictive mapping on page fault (&lt;a href="https://github.com/vinc/moros/pull/675"&gt;#675&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Enable userspace memory deallocation (&lt;a href="https://github.com/vinc/moros/pull/676"&gt;#676&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Copy memory on instruction fetch page fault (&lt;a href="https://github.com/vinc/moros/pull/677"&gt;#677&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;geodate&lt;/code&gt; program (&lt;a href="https://github.com/vinc/moros/pull/304"&gt;#304&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Fix shell autocomplete command path (&lt;a href="https://github.com/vinc/moros/pull/678"&gt;#678&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;geocal&lt;/code&gt; program (&lt;a href="https://github.com/vinc/moros/pull/679"&gt;#679&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I&amp;#39;m particularly happy about adding scrollback buffer support, allowing
me to scroll up in the console and no longer be limited to what was
last printed on the screen. Adding a search mode to the editor and some
ed-like commands will also make me more productive inside the OS.&lt;/p&gt;

&lt;p&gt;A number of PRs are related to process memory, and I made some progress
in running more complex programs. Notably, my lunisolar calendar
&lt;a href="http://geodate.org"&gt;geodate&lt;/a&gt; does a lot of astronomical computations that tested the
&lt;code&gt;alloc&lt;/code&gt; and &lt;code&gt;free&lt;/code&gt; syscalls. I had to introduce some workarounds to get
everything running, and the result is not bug-free. I&amp;#39;ll have to do it
the right way later.&lt;/p&gt;

&lt;p&gt;Finally I added a basic package manager called &lt;code&gt;pkg&lt;/code&gt; to download files that
are not bundled with the kernel image.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reviewing August 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/09/01/changelog/"/>
    <id>https://vinc.cc/news/2024/09/01/changelog/</id>
    <published>2024-09-01T02:00:00+02:00</published>
    <updated>2024-09-02T11:59:08+02:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing August 2024&lt;/h1&gt;

&lt;p&gt;This month was dedicated to &lt;a href="https://cloudcheck.cc"&gt;CloudCheck&lt;/a&gt;, a project I&amp;#39;ve been thinking about
since early 2023 to help small teams &lt;a href="https://stop.wasting.cloud"&gt;reduce cloud waste&lt;/a&gt;. Many startups
lack dedicated devops or the time to continuously monitor and optimize their
server usage. I&amp;#39;ve experienced this issue firsthand in previous jobs, and it&amp;#39;s
also easy for hobbyists to forget a server running in the clouds and keep
paying for it for a long time.&lt;/p&gt;

&lt;p&gt;I built a simple MVP using Ruby 3.3 and Rails 7.2 (&lt;a href="https://rubyonrails.org/2024/8/10/Rails-7-2-0-has-been-released"&gt;released this month&lt;/a&gt;) to
monitor my AWS and DigitalOcean accounts. Over the course of the month, I added
generic cloud support so it could also be applied to the Proxmox servers in my
homelab and various Raspberry Pi servers around the house.&lt;/p&gt;

&lt;p&gt;I went down a rabbit hole exploring the &lt;code&gt;/proc&lt;/code&gt; filesystem on Linux to get the
necessary metrics for auditing a server. I created a simple bash script that
can be called by a cron job every minute to send a plain text file to an API.
The API then does some computations, sometimes with previous metrics, to derive
system load and uptime, CPU and RAM usage, disk and network IOPS, and more. I
also learned how the Linux filesystem has evolved to provide more comprehensive
data over the years.&lt;/p&gt;

&lt;p&gt;After spending enough time on the MVP, I switched gear to create a &lt;a href="https://cloudcheck.cc"&gt;landing
page&lt;/a&gt; for the service. It&amp;#39;s basic and will need further improvements, but
I&amp;#39;m satisfied with the initial result.&lt;/p&gt;

&lt;p&gt;The challenge now is finding some early adopters to test the MVP and provide
feedback for improvement. The MVP will be free, and, if possible, will remain
free for hobbyists to help terminate forgotten cloud servers. However,
marketing is hard for devs, and I don&amp;#39;t have a significant audience on social
media to promote the project.&lt;/p&gt;

&lt;p&gt;So, at the end of the month, I decided to take a break from that task and
instead spend a few days creating another Ruby on Rails app allowing people to
send emails to the AIs made by OpenAI, Anthropic, Google, and Mistral instead
of using their respective web apps. These AIs helped me write the content for
the landing page, but it was a frustrating experience that is now much easier
with this new service. I named it &lt;a href="https://goodbot.club"&gt;Goodbot.club&lt;/a&gt;, and we&amp;#39;ll see where it
goes.&lt;/p&gt;

&lt;p&gt;Anyway, if you manage cloud servers and are interested in trying
&lt;a href="https://cloudcheck.cc"&gt;CloudCheck&lt;/a&gt; you can sign up for early access, and I&amp;#39;ll be happy to read
your feedback.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reviewing July 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/08/01/changelog/"/>
    <id>https://vinc.cc/news/2024/08/01/changelog/</id>
    <published>2024-08-01T02:00:00+02:00</published>
    <updated>2024-08-11T13:14:19+02:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing July 2024&lt;/h1&gt;

&lt;p&gt;At the end of June and in the first part of July, I resumed working on my old
idea of a conlang inspired by &lt;a href="https://tokipona.org/"&gt;Toki Pona&lt;/a&gt;, &lt;a href="https://lojban.org/"&gt;Lojban&lt;/a&gt;, and Polynesian
languages. I decided to name it &lt;a href="/conlangs/faeke/"&gt;Faeke&lt;/a&gt;, and I spent a lot of time looking
at Samoan, Maori, Tahitian, and Hawaiian dictionaries to build the root words
of the language. It was fun! I&amp;#39;m now freezing the conlang to try making
sentences with what I have for a while, and next time I&amp;#39;ll build a little
website introducing an alpha version of Faeke.&lt;/p&gt;

&lt;p&gt;After that, I had a great time with shortwave radio on my &lt;a href="https://www.rtl-sdr.com/"&gt;RTL-SDR&lt;/a&gt;. I put a
long wire between the garden shed and a tree and could listen to a lot of
stations from America, Africa, and Asia. I had not done this in many years, and
it was a surprise to hear China broadcasting from so many frequencies.&lt;/p&gt;

&lt;p&gt;I also experimented again with a tin can gasifier stove for my green tea break
late in the afternoon. It&amp;#39;s interesting to boil hot water with just a few twigs
without producing any smoke once the stove gets going.&lt;/p&gt;

&lt;p&gt;Not much coding; it felt a bit like a summer holiday at home.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Reviewing June 2024</title>
    <link rel="alternate" href="https://vinc.cc/news/2024/07/01/changelog/"/>
    <id>https://vinc.cc/news/2024/07/01/changelog/</id>
    <published>2024-07-01T02:00:00+02:00</published>
    <updated>2024-08-11T12:50:58+02:00</updated>
    <author>
      <name>Vincent Ollivier</name>
    </author>
    <content type="html">&lt;h1&gt;Reviewing June 2024&lt;/h1&gt;

&lt;p&gt;This month was mostly dedicated to &lt;a href="/news/2024/06/20/moros-0-10-4-released/"&gt;MOROS 0.10.4&lt;/a&gt;, which I released on the
summer solstice, with an additional fix for an issue with &lt;a href="https://github.com/vinc/moros/pull/638"&gt;block bitmap area
calculation&lt;/a&gt; that didn&amp;#39;t make the cut. It is a breaking change that I will
merge before the next release.&lt;/p&gt;

&lt;p&gt;I also updated Nyx, the bedrock platform to build MOROS, based on Alpine Linux
and Rust. I added a server mode to &lt;a href="https://github.com/vinc/chatai"&gt;Chatai&lt;/a&gt; to have access to GPT-4 from
MOROS via a computer running it. On the same topic, I updated &lt;a href="https://github.com/vinc/fetch"&gt;Fetch&lt;/a&gt;, an
HTTP/0.9 server and proxy to HTTPS, Gemini, and Gopher, which I use from MOROS
in the same fashion.&lt;/p&gt;
</content>
  </entry>
</feed>
