This commit is contained in:
Rawley Fowler
2023-10-11 17:08:06 -06:00
parent c0803dc3da
commit b67e7f814c
10 changed files with 129 additions and 343 deletions

86
become-an-engineer.html Normal file
View File

@@ -0,0 +1,86 @@
<!DOCTYPE html>
<html>
<head>
<title>rawley.xyz</title>
<style>
</style>
</head>
<body style="margin: 0; padding: 0; background-color: rgb(254, 249, 232)">
<a href="/">&gt;&gt; Home</a>
<div style="margin: 48px; width: 530px;">
<h1>Become an Engineer</h1>
<p>
This learning track assumes you have a computer built after 2004, with
<a href="https://debian.org">Debian Linux</a>, <a href="https://freebsd.org">FreeBSD</a> or <a href="https://openbsd.org">OpenBSD</a> installed. (Windows simply won't do.)
</p>
<h2>Start here (read both and do all of the exercises)</h2>
<ul>
<li>
<a href="https://mitp-content-server.mit.edu">Structure and Interpretation of Computer Programs by Sussman et. al</a>
</li>
<li>
<a href="https://en.wikipedia.org/wiki/The_C_Programming_Language">The C Programming Language by K&R</a>
</li>
</ul>
<h2>Getting deeper (read all 3, do all exercises)</h2>
<ul>
<li>
<a href="https://algs4.cs.princeton.edu/home/">Algorithms by Robert Sedgewick</a>
</li>
<li>
<a href="https://en.wikipedia.org/wiki/Types_and_Programming_Languages">Types and Programming Languages by Benjamin C. Pierce</a>
</li>
<li>
<a href="https://www.macs.hw.ac.uk/~greg/books/gjm.lambook88.pdf">An Introduction to Functional Programming Through Lambda Calculus by Greg Michaelson</a>
</li>
</ul>
<h2>Low level learning</h2>
<ul>
<li>
<a href="https://mitpress.mit.edu/9780262640688/the-elements-of-computing-systems/">The Elements of Computing Systems by Noam Nisan and Shimon Schocken</a>
</li>
</ul>
<h2>Category theory</h2>
<ul>
<li>
<a href="https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/">Category Theory for Programmers by Bartosz Milewski</a>
</li>
</ul>
<h2>High(er) Level Languages (pick at least 2)</h2>
<ul>
<li>
<a href="https://www.oreilly.com/library/view/programming-perl-4th/9781449321451/">Programming Perl by Christiansen, foy, and Orwant</a>
</li>
<li>
<a href="https://learnyousomeerlang.com/">Learn You Some Erlang for Great Good by Fred Hebert</a>
</li>
<li>
<a href="http://learnyouahaskell.com/">Learn You a Haskell for Great Good by Miran Lipovaca</a>
</li>
<li>
<a href="https://www.stroustrup.com/tour2.html">A Tour of C++ by Stroustrup</a>
</li>
<li>
<a href="http://www.cs.cmu.edu/~rwh/isml/book.pdf">Programming in Standard ML by Robert Harper</a>
</li>
<li>
<a href="https://www.oreilly.com/library/view/the-ruby-programming/9780596516178/">The Ruby Programming Language by Flanagan & Matz</a>
</li>
</ul>
<p>
This is the way to becoming a truly great software engineer. I've read all of these books, and I can say that they all manifest within
me a strong sense of confidence, and the ability to adapt to any situation that might come my way in computer science.
</p>
<p>
You may be reading this list, thinking... what about Java or JavaScript??? Now, I don't think these languages are bad per-se, but I do think
they have the ability to destroy your life. Once you've used Java or JavaScript, there is a good chance you will become closed off from
the rest of the computing world, falling into a world of patterns and objects. You may also find that languages like these have the adverse
effect of having incredibly low skill-ceilings, which compounds the idea of you becoming stuck. A low ceiling, and a low floor, is a prison, not
a tool to conjure the spirits of the computer.
</p>
<br>
<br>
</div>
</body>
</html>

View File

@@ -1,3 +0,0 @@
requires 'Text::Markdown';
requires 'Mojolicious';
requires 'Mojo::SQLite';

BIN
gnu_emacs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

43
index.html Normal file
View File

@@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<title>rawley.xyz</title>
<style>
</style>
</head>
<body style="margin: 0; padding: 0; background-color: rgb(254, 249, 232)">
<div style="margin: 48px; width: 530px;">
<a href="https://openbsd.org"><img style="width: 300px; height: 240px;" src="puffy.png"/></a>
<p>
Christian, Husband, Dad, Functional programmer, Emacs fan and BSD user.
</p>
<p>
I am the creator of many <a href="https://www.gnu.org/philosophy/free-sw.en.html">free-software</a> libraries and tools.
As well as an ambassador for reading and knowledge transfer. I'm currently working on building a
platform to make reading fun and accessible for everyone. I try my best to bring out the best in everyone,
by pushing the envelope of what is perceived to be possible.
</p>
<h2>Links</h2>
<ul>
<li>
<a href="https://github.com/rawleyfowler">Github</a>
</li>
<li>
<a href="https://github.com/rawleyfowler/emacs">Emacs</a>
</li>
<li>
<a href="/become-an-engineer">The real software path.</a>
</li>
<li>
<a>rawleyfowler at proton dot me</a>
</li>
</ul>
<div>
<a href="http://www.gnu.org/software/emacs">
<img src="gnu_emacs.png"/>
</a>
</div>
</div>
</body>
</html>

View File

@@ -1,34 +0,0 @@
#!/usr/bin/env perl
use strict;
use warnings;
use Carp qw(croak);
use Mojo::SQLite;
use Mojo::File;
use feature qw(say);
my $db = Mojo::SQLite->new('sqlite:site.db')->db;
my $title = shift || croak 'Expected $1 to be title';
my $slug = shift || croak 'Expected $2 to be slug';
my $content = shift || croak 'Expected $3 to be md file';
$content = Mojo::File->new($content)->slurp;
my $post = {
title => $title,
slug => $slug,
content => $content
};
if ( my $old_post = $db->select( 'posts', ['id'], { slug => $slug } )->hash ) {
say 'Updating post.';
$db->update( 'posts', $post, { id => $old_post->{id} } );
}
else {
say 'Inserting post.';
$db->insert( 'posts', $post );
}
say 'Finished.';

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

View File

@@ -1,133 +0,0 @@
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="Rawley.xyz, Rawley Fowler's web ring">
<title>rawley.xyz</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
<style>
div.ticked > i::before {
content: "`";
}
div.ticked > i::after {
content: "`";
}
body * {
font-size: calc(0.33vw + 12px);
}
</style>
</head>
<body class="container fw-light text-decoration-none">
<nav class="d-flex flex-row mt-3">
<div class="me-3">
<a href="/">Home</a>
</div>
<div>
<a href="/blog">Blog</a>
</div>
</nav>
<h1 class="display-1 mt-3">Rawley Fowler</h1>
<p>
Hi, I'm Rawley, a Software Engineer from rural Saskatchewan, Canada.
I specialize in <a href="https://perl.org">Perl</a>, and <a href="https://go.dev">Go</a> development, tackling all areas
of the software life cycle. I also like to dabble in Pure Functional languages. At work I develop microservices using Java, SpringBoot, and PostgreSQL. I'm passionate about software performance,
functional programming, and making programs safer. If you have a position that you think I'd like (especially focusing on Perl, or Go), please feel free to <a href="mailto:rawleyfowler@proton.me">email</a> me.
Outside of my professional work, I spend a lot of time <a href="https://github.com/rawleyfowler">contributing</a> to open-source projects. You may or may not have used some of them :)
</p>
<h2 class="pt-5 display-3">Skills</h2>
<p>
The following are technologies that I can confidently say I am good at.
</p>
<h3 class="display-6">Programming Languages</h3>
<div class="ticked">
<i>Perl</i>
<i>Go</i>
<i>Raku (Perl 6)</i>
<i>OCaml</i>
<i>Haskell</i>
<i>Java</i>
<i>PlpgSQL</i>
</div>
<h3 class="display-6">Operating Systems</h3>
<div class="ticked">
<i>FreeBSD</i>
<i>GNU/Linux</i>
<i>OpenBSD</i>
<i>NetBSD</i>
</div>
<h3 class="display-6">Other</h3>
<div class="ticked">
<i>Docker</i>
<i>Docker Compose</i>
<i>PostgreSQL</i>
<i>MySQL</i>
<i>AWS</i>
<i>RabbitMQ</i>
<i>CouchDB</i>
<i>Podman</i>
</div>
<h2 class="pt-5 display-3">Experience</h2>
<p>
I've been a Software Engineer for around 3 years. I've been contributing to open-source for even longer.
</p>
<div>
<b>Farm Credit Canada (FCC)</b>: Software Developer Consultant. <b>Jan 2023</b> - <b>Present</b>
<p>
Designing, developing, and maintaining a large array of SpringBoot microservices to modernize core customer and lending business functions.
Maintenance on a multi-million line of code Java 7 monolith, including migrating code to new microservices.
</p>
</div>
<div>
<b><a href="https://github.com/mollusc-labs">Mollusc Labs</a></b>: Sole Proprietor. <b>Jun 2023</b> - <b>Present</b>
<p>
A small business that I am sole-proprietor of. This business exists to allow me to build software in my spare-time and license it under an organization.
When taking solo contracts I also use this business as the business name at which the work is being completed by.
</p>
</div>
<div>
<b>Saskatchewan Polytechnic</b>: Instructor. <b>May 2023</b> - <b>Jun 2023</b>
<p>
Instructed a single class during the summer semester at Saskatchewan Polytechnic.
This class covered Docker, Software Performance, Docker Compose, and the basics of Software Architecture.
Students in the end had to develop and deploy a microservice using Docker and a technology of their choice, which was then benchmarked on the last day of class.
</p>
</div>
<div>
<b>Dev-Pro Consulting</b>: Instructor. <b>Jun 2022</b> - <b>Jan 2023</b>
<p>
Worked on various internal projects at Dev-Pro including re-designing from the ground-up, a major internal product, using WebSockets and Angular 14 features.
Daily work consisted of developing with Angular, Java, and PostgreSQL, and deploying through an internal Jenkins CI/CD platform.
</p>
</div>
<h2 class="pt-5 display-3">Education</h2>
<div>
<b>Saskatchewan Polytechnic</b>: Computer Systems Technology. <b>Sept 2021</b> - <b>Jun 2023</b>
<p>
Took a 2 year diploma to upgrade my skills, this included courses in Azure Cloud, Advanced Database Management, and ended with a capstone project using
.NET, Vue.js, Docker, Pusher, Heroku, AWS RDS and PostgreSQL.
</p>
</div>
<div>
<b>University of Regina</b>: Bachelor of Science in Mathematics. <b>Sept 2020</b> - <b>Jun 2021</b>
<p>
Studied various mathematical concepts (mostly Linear Algebra, and Calculus), ultimately did not finish due to extraneous circumstances. Hoping to have the time one day to complete this degree.
</p>
</div>
<div class="my-5">
Links: <a href="mailto:rawleyfowler@proton.me">rawleyfowler@proton.me</a> &gt; <a href="https://github.com/rawleyfowler">GitHub</a> &gt; <a href="https://github.com/mollusc-labs">Mollusc Labs</a>
</div>
<div>
Rawley.xyz is powered by:
</div>
<footer class="d-flex flex-row flex-wrap my-3 mb-5">
<a href="https://www.perl.org"><img class="me-3" width="80" height="80" src="/perl.png" alt="The Perl Programming Language" /></a>
<a href="https://www.alpinelinux.org"><img width="80" height="80" src="alpine.png" alt="Alpine Linux" /></a>
</footer>
</body>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

BIN
puffy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

173
site.pl
View File

@@ -1,173 +0,0 @@
#!/usr/bin/env perl
use 5.016;
use Mojolicious::Lite -signatures;
use Mojo::SQLite;
use Mojo::File;
use Carp qw(croak);
my $sql = Mojo::SQLite->new('sqlite:site.db');
helper db => sub { state $db = $sql->db };
$sql->migrations->name('posts_table')->from_string(<<EOF)->migrate;
-- 1 up
CREATE TABLE IF NOT EXISTS posts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
content TEXT,
slug TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 1 down
DROP TABLE posts;
EOF
$sql->migrations->name('posts_index')->from_string(<<EOF)->migrate;
-- 2 up
CREATE INDEX IF NOT EXISTS slug_idx ON posts (slug);
-- 2 down
DROP INDEX slug_idx;
EOF
get '/' => sub {
my $c = shift;
$c->reply->static('index.html');
};
get '/blog' => sub {
my $c = shift;
$c->stash( posts => [ $c->db->select('posts')->hashes->each ] );
$c->render;
};
get '/blog/:post' => sub {
my $c = shift;
my $post = $c->db->select(
'posts',
[ 'title', 'content', 'slug' ],
{ slug => $c->param('post') }
)->hash;
return $c->render( template => 'not_found', status => 404 ) unless $post;
$c->stash( post => $post );
$c->render( template => 'post' );
};
app->start;
__DATA__
@@ not_found.html.ep
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
%= include '_header', title => '404 Not Found'
<body class="container fw-light">
%= include '_nav'
<h1 class="mt-3 display-2">404 - Not Found</h1>
</body>
</html>
@@ post.html.ep
% use Text::Markdown qw(markdown);
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
<head>
<title><%= $post->{title} %></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
<link href="/post.css" rel="stylesheet">
<style>
body * {
font-size: calc(0.33vw + 13px);
}
h2 {
font-size: calc(24px + 0.33vw);
}
h3 {
font-size: calc(20px + 0.33vw);
}
h4 {
font-size: calc(18px + 0.33vw);
}
h5, h6 {
font-size: calc(16px + 0.33vw);
}
h2, h3, h4, h5, h6 {
font-weight: 300;
}
</style>
</head>
<body class="container fw-light">
<div class="mt-3">
<a href="/blog"><< Go Back</a>
</div>
<h1 class="mt-3 display-2"><%= $post->{title} %></h1>
<div>
<%== markdown($post->{content}) %>
</div>
</body>
</html>
@@ blog.html.ep
<!DOCTYPE html>
<html lang="en" data-bs-theme="dark">
%= include '_header', title => 'Blog'
<body class="container fw-light">
%= include '_nav'
<h1 class="mt-3 display-2">Blog</h1>
<p>
This is my blog; it represents my opinions, not that of my employer(s) past, present or future.
My blog is made up of Functional Programming, Perl & Raku, Rants, Politics, and whatever else I dream up.
If you are prone to becoming upset about things, this might not be the best place for you.
</p>
<p>
All content is licensed under the <a href="https://creativecommons.org/licenses/by-sa/3.0/">Creative-Commons Attribution-ShareALike 3.0</a> license unless specified otherwise.
</p>
<div class="d-flex flex-row justify-content-between mt-3">
<h2>Title</h2>
<h2>Publish Date</h2>
</div>
% for (@$posts) {
<div class="d-flex flex-row justify-content-between mt-3">
<a href="/blog/<%= $_->{slug} %>"><%= $_->{title} %></a>
<div><%= $_->{created_at} %></div>
</div>
% }
%= include '_footer'
</body>
</html>
@@ _header.html.ep
<head>
<title><%= $title %></title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script>
<style>
body * {
font-size: calc(0.33vw + 12px);
}
</style>
</head>
@@ _footer.html.ep
<div class="mt-5">Rawley.xyz is powered by:</div>
<footer class="d-flex flex-row flex-wrap mt-3 mb-5">
<a href="https://www.perl.org"><img class="me-3" width="80" height="80" src="/perl.png" alt="The Perl Programming Language" /></a>
<a href="https://www.alpinelinux.org"><img width="80" height="80" src="/alpine.png" alt="Alpine Linux" /></a>
</footer>
@@ _nav.html.ep
<nav class="d-flex flex-row text-decoration-none mt-3">
<div class="me-3">
<a href="/">Home</a>
</div>
<div>
<a href="/blog">Blog</a>
</div>
</nav>