aboutsummaryrefslogtreecommitdiff
path: root/public/state-of-web-technologies-and-web-development-in-year-2022.html
blob: d98a2020d3121ffb3307d463c6f299044b360d23 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!doctype html><html lang=en-us><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=generator content="JBMAFP - github.com/mitjafelicijan/jbmafp"><link href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL69vf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv76+/8LBwQkAAAAAAAAAAAAAAAC+vb3/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+9vf/Bv78JAAAAAAAAAAAAAAAAu7q6/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC7ubr/vr29CAAAAAAAAAAAy8nJAZ6foP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnqGj/6GipAoAAAAAHLjU/xcXHf/BwsL/I8XY/yPK3v8XGiD/IbjL/yPF2f8XGiD/Fxkf/yLF2f8gnK3/Fxog/62ztv8fwNf/FRcd/x271v8mz93/GRsi/xkXHf8p097/GiIp/xobIv8p0t3/KdPe/xocIv8fYmr/KNPe/xoZH/8aHCL/J87c/xy81/8VFxz/IsPZ/8zS0/8XGiD/Ir/R/yPH2/8XGiD/Fxkf/yPH2/8dd4T/GBog/yPJ3f8jyNr/uru9/xcUGv8cudb/EhITDKi5vRKlvMP/RUpOERwcHRAdOj4QHTk8EBwdHRAdNTgQHTo/EBwcHRAcHB0QSGduEKW4vf+koqQfHzg+EBqz0ewSFRv7EyMr/xq51vsTERb7ExUb+xq41fsau9j7ExUb+xiPp/sZudb7ExUb+xMVG/sZuNX/GKvI/BIUGfMdvdn/IrfL/xcaIP8n1eb/J9Dh/xkcIf8ZGR7/J8/f/xxCSv8ZGyH/J9Dg/ybQ4P8ZHCL/FSQs/yPK3/8UExj/GE1b/ybS5P8ZGB7/Ghwj/ynW5P8p2Ob/Ghwi/yWrtv8p1eH/Ghwi/xocIv8p1uT/J8XT/xkcIv8m1un/Hb7d/xUYH/8hzOr/HtHu/xcaIf8XGB//I8vi/xgxOv8XGSD/I8rg/yPK4P8XGiD/GUFL/yPP6f8SERj/Fhkh/x3A4f8AAAAAJ2f9/ydr//8mZPH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlYu38J2v//ydo/f8AAAAAAAAAAAd8/fkFqf//Iob8sAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMY39awWr//8FfP3/AAAAAAAAAAAFm/7/SfD//wR+/f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOB/f9B7v//BaX+/wAAAAAAAAAAQ878SAyZ/v9n1v4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADu9v8DDJb+/z3N/XgAAAAA3/sAAN/7AADf+wAA3/sAAAAAAAAAAAAAAAAAAN/7AAAAAAAAAAAAAAAAAAAAAAAAj/EAAI/5AACP8QAA3/sAAA==" rel=icon type=image/x-icon><title>State of Web Technologies and Web development in year 2022</title><meta name=description content="Initial thoughtsThis post is a critique on the current state of web development."><link rel=alternate type=application/rss+xml title="Mitja Felicijan's posts" href=https://mitjafelicijan.com/index.xml><link rel=alternate type=application/rss+xml title="Mitja Felicijan's notes" href=https://mitjafelicijan.com/notes.xml><style>body{padding:2.5rem;max-width:1900px;background:#fff;font-family:sans-serif;line-height:1.35rem;font-size:16px}hr{margin-block-start:1.5rem}h1,h2,h3{line-height:initial}h1{font-size:xx-large}footer{margin-block-start:2rem}cap{text-transform:capitalize}table{max-width:100%;border-collapse:separate;border-spacing:2px;border:1px solid #000;border-left:1px solid #999;border-top:1px solid #999}blockquote{font-style:italic}table thead{background:#eee}ul.list li{padding:.2em 0}ul{line-height:1.4em}td,th{border:1px solid #000;padding:4px;border-right:1px solid #999;border-bottom:1px solid #999;text-align:left}pre{text-wrap:nowrap;overflow-x:auto;padding:0 1em;border:1px solid #dcdcdc}code{padding:0 3px;font-size:14px;border:0}pre code{line-height:1.3em}pre,code,pre *,code *{font-family:monospace}figure{margin-inline-start:0;margin-inline-end:0}figcaption{text-align:center}figcaption p{margin:.3em 0 0}img,video,audio{width:800px;max-width:100%}header{display:flex;flex-direction:row;gap:6rem}nav{display:flex;gap:.75rem}nav.main{}.pstatus-orange{background:gold}.pstatus-green{background:#9acd32}.pstatus-red{background:#cd5c5c}@media only screen and (max-width:600px){body{padding:15px}header{flex-direction:column;gap:1rem}a{word-wrap:break-word}}</style><header><nav class=main itemscope itemtype=http://schema.org/SiteNavigationElement role=toolbar><a href=/>Home</a>
<a href=https://github.com/mitjafelicijan target=_blank>Code</a>
<a href=/vault.html>Vault</a>
<a href=/mitjafelicijan.pgp.pub.txt target=_blank>PGP</a>
<a href=/curriculum-vitae.html>CV</a>
<a href=/index.xml target=_blank>RSS</a></nav></header><main role=main><article itemtype=http://schema.org/Article><h1 itemtype=headline>State of Web Technologies and Web development in year 2022</h1><p><cap>post</cap>, Oct 6, 2022 on <a href=https://mitjafelicijan.com>Mitja Felicijan's blog</a><div><h2 id=initial-thoughts>Initial thoughts</h2><p><em>This post is a critique on the current state of web development. It is an
opinionated post! I will learn more about this in the future, and probably
slightly change my mind about some of the things I criticize.</em><p>I have started working on a hobby project about two weeks ago, and I wanted to
use that situation as a learning one. Trying new things, new technologies, new
tools. I always considered myself to be an adventurous person when it comes to
technology. I never shy away from trying new languages, new operating systems
etc. Likewise, I find the whole experience satisfying, and it tickles that part
of my brain that finds discovery the highest of the mountains to climb.<p>What I always wanted to make was a coding game, that you would play in a browser
(just to eliminate building binaries for each operating system) where you would
level up your character and go into these scriptable battles. You know, RPG
elements.<p>So, the natural way to go would be some sort of SPA (single page application)
with basic routing and some state management. Nothing crazy.<blockquote><p><strong>Before we move on</strong>, I have to be transparent. Take my views on this with
a grain of salt. I have only scratched the surface with these technologies,
and my knowledge is full of gaps. This is my experience using some of these
products for the first time or in a limited capacity.</blockquote><p>Having this out of the way, I got myself a fresh pot of coffee and down the
rabbit hole I went.<h2 id=giving-react-js-a-spin>Giving React JS a spin</h2><p>I first tried <a href=https://reactjs.org/>React JS</a>. I kind of like it. Furthermore,
I have worked with libraries like this in the past and also wrote a couple of
them (nothing compared to that level), but I had the basic understanding of what
was going on. I rolled up a project quickly and had basic things done in a
matter of two hours, which was impressive.<p>I prefer using <a href=https://tailwindcss.com/>Tailwind CSS</a> for my styling
pleasures, and integrating that was also a painless experience. It was actually
nice to see that some things got better with time. In about 2 minutes I got
Tailwind working, and I was able to use classes at my disposal. All that
<code>postcss</code> stuff was taken care of by adding a couple of things in config files
(all described really well in their documentation).<p>It is not that different from Vue which I have had more encounters with in the
past People will probably call me a lunatic for saying this. But you know, it is
the truth. Same same, but different. I still believe that using libraries like
this is beneficial. I am not a JavaScript purist. They all have their quirks,
but at the end of the day, I truly believe it’s worth it.<h2 id=bundlers-and-transpilers>Bundlers and Transpilers</h2><p>I still reject calling <a href=https://www.typescriptlang.org/>Typescript</a> to
<a href=https://www.javascript.com/>JavaScript</a> conversion a "compilation process". I
call them <a href=https://devopedia.org/transpiler>transpilers</a>, and I don’t care! 😈<p>And if you want to fight this, take a look at this little chart and be mad at
it!<figure><img src=/posts/state-of-web/compiling-vs-transpiling.png alt="Compiling vs Transpiling"></figure><p>The first one that I ever used was <a href=https://webpack.js.org/>webpack</a>, and it
was an absolute horrific experience. Saying this, it is an absolutely fantastic
tool. I felt more like a config editor than actually a programmer. To be fair,
I am a huge fan of <a href=https://www.gnu.org/software/make/>make</a>, and you can do as
you wish with this information. I like my build systems simple.<p>Also, isn’t it interesting that we need something like
<a href=https://babeljs.io/>Babel</a> to make JavaScript code work in a browser that has
only one client side scripting available, which is by no accident also
JavaScript. Why? I know why it’s needed, but seriously, why.<p>I haven’t used Babel for years now. Or if I did, it was packaged together by
some other bundler thingy. Which does not make things better, but at least I
didn’t need to worry about it.<p>I really don’t like complicated build systems. I really don’t like abstracting
code and making things appear magical. The older I get, the more I appreciate
clear and clean, expressive code. No one-liners, if possible.<p>But I have to give props to <a href=https://vitejs.dev/>Vite</a>! This was one of the
best developer experiences I have ever had. Granted, it still has magical
properties. And yes, it still is a bundler and abstracts things to the nth
degree. But at least it didn’t force me to configure 700 lines of JSON. And I
know that this makes me a hypocrite. You can’t have it all. Nonetheless, my
reasoning here is, if using bundlers is inevitable, then at least they should
provide an excellent developer experience.<p>I also noticed that now the catch-all phrase is “blazingly fast” and “lightning
fast” and “next generation” and stuff like that. I mean, yeah, tools should get
faster with time. But saying that starting a project now takes 2 seconds instead
of 20 seconds is something that is a break it or make it kind of a deal is
ridiculous. I don’t mind waiting a couple of seconds every couple of days. I
also don’t create 700 projects every day, and also who does? This argument has
no bite. All I want is a decent reload time (~100ms is more than good enough for
me) and that is it.<p>You don’t need to sell me benefits if I only get them when I start a fresh
project, and then try to convince me that this is somehow changing the fate of
the universe. First of all, it is not. And second, if this is your only argument
for your tool, I would advise you to maybe re-focus your efforts to something
else. Vite says that startup times are really fast. And if that would be the
only thing differentiating it from other tools, I would ignore it. But it has
some really compelling features like <a href=https://www.geeksforgeeks.org/reactjs-hot-module-replacement/>Hot Module
Replacement</a> that
really works well. It was a joy to use.<p>So, I will be definitely using Vite in the future.<h2 id=jam-stack-mach-stack-no-snack>Jam Stack, Mach Stack no snack</h2><p>Let's get a couple of the acronyms out of the way, so we all know what we are
talking about:<ul><li>Jam Stack - JavaScript, API and Markup<li>Mach Stack - Microservices, API-first, Cloud-Native SaaS, Headless</ul><p>It is so hard to follow all these new trendy things happening around you, that
it makes you have a massive <strong>FOMO</strong> all the time. But on the other hand, you
also don’t want to be that old fart that doesn’t move with the times and still
writes his trusty jQuery code while listening to Blink 182 All the small things
on full blast. It’s a good song, don’t get me wrong, but there are other songs
out there.<p>I have to admit. <a href=https://vercel.com/>Vercel</a> is really cool! Love the
simplicity of the service. You could compare it to
<a href=https://www.netlify.com/>Netlify</a>. I haven’t tried Netlify extensively, but
from a couple of experimental deployments I still prefer Vercel. It is much more
streamlined, but maybe this is bias in me. I really like Vercel’s Analytics,
which give you a <a href=https://web.dev/vitals/>Core Web Vitals report</a> in their
admin console. Kind of cool, I’m not going to lie.<p>This whole idea about frontend and backend merging into <a href=https://www.debugbear.com/blog/server-side-rendering>SSR (server-side
rendering)</a> looks so good
on paper. It almost doesn’t come with any major flaws.<p>But when it comes to the actual implementation, there is much to be desired.
I’m going to lump <a href=https://nextjs.org/>Next.js</a> and
<a href=https://nuxtjs.org/>Nuxt.js</a> together because they are essentially the same
thing, just a different library.<p>Now comes the reality. Mixing backend and frontend in this manner creates this
weird mental model where you kind of rely on magical properties of these
libraries. You relinquish control over to them for better developer experience.
But is that really true? Initially, I was so stoked about it. However, the more
I used them, the more I felt uncomfortable. I felt dirty, actually. Maybe this
is because I come from old ways of doing things where you control every step of
request, and allowing something to hijack it feels like blasphemy.<p>More than that, some pretty significant technical issues arose from this. How do
you do JWT token authentication? You put it in <code>api</code> folder and then do some
fetching and storing into local state management. But doing this also requires
some tinkering with await/async stuff on the React/Vue side of things. And then
you need to write middleware for it. And the more I look at it, the more I see
that this whole thing was not meant to be used like this, and it all feels and
looks like a huge hack.<p>The issue I have with this is that they over-promise and under-deliver. They
want to be an all-in-one replacement for everything, and they don’t deliver on
this promise. And how could they?! We have to be fair. It is an impossible task.<p>They sell you <a href=https://www.geeksforgeeks.org/overview-of-noops/>NoOps</a>, but
when you need to accomplish something a little bit more out of the scope of
Hello World, you have to make hacky decisions to make it work. And having a
deployment strategy that relies on many moving parts is never a good idea.
Abstracting too much is usually a sign of bad architecture.<p>Lately, this has become a huge trend that will for sure bite us in the future.
And let’s not get it twisted. By doing this, PaaS providers like
<a href=https://aws.amazon.com/>AWS</a>, <a href=https://cloud.google.com/>GCS</a>, etc. obscure
their billing, and you end up paying more than you really should. And even if
that is not an issue, it comes down to the principle of things. AWS is known for
having multiple “currencies“ inside their projects like write operations, read
operations, etc. which add up, and it creates this impossible to track billing
scheme. It all behaves suspiciously like a pay-to-win game you could find on
mobile phones that scams you out of your money.<p>And as far as I am concerned, the most important thing was me not coding the
functionalities for the game I want to make. I was battling libraries and cloud
providers. How to deploy, what settings are relevant. Bad documentation or
multiple versions of achieving the same thing. You are getting bombarded by all
this information, and you don’t really have any control over it.
Production-ready code becomes a joke, essentially. Especially if you tend to
work on that project for a prolonged period of time.<p>All of these options end up creating a fatigue. What to choose, what not to
choose. Unnecessary worrying about if the stack will still be deemed worthy in
six months. There is elegance in simplicity.<blockquote><p>JavaScript UI frameworks and libraries work in cycles. Every six months or
so, a new one pops up, claiming that it has revolutionized UI development.
Thousands of developers adopt it into their new projects, blog posts are
written, Stack Overflow questions are asked and answered, and then a newer
(and even more revolutionary) framework pops up to usurp the throne.
— Ian Allen</blockquote><figure><img src=/posts/state-of-web/2008-vs-2020.png alt="To many options"></figure><p>And this jab at these libraries and cloud providers is not done out of malice.
It is a real concern that I have about them. In my life, I have seen
technologies come and go, but the basics always stick around. So surrendering
all the power you have to a library or a cloud provider is in my opinion a
stupid move.<h2 id=tailwind-css-still-rocks>Tailwind CSS still rocks!</h2><p>You know, many people say negative things about Tailwind. And after a lot of
deliberation, I came to the conclusion that Tailwind is good for two types of
developers. Tailwind is good for a complete noob or a senior developer. A
complete noob doesn’t really care about inner workings of CSS, and a senior
developer also doesn’t care about CSS. Well, at least, not anymore. And
developers in between usually have the biggest issues with it. Not always of
course, but in a lot of cases.<p>I like the creature comforts of Tailwind. Being utility first would make me
argue that it is actually more similar to <a href=https://sass-lang.com/>Sass</a> or
<a href=https://lesscss.org/>Less</a> than something like Bootstrap. Not technically, but
ideologically. After I started using it, I never looked back. I use it every
time I need to do something web related.<p>Writing CSS for general things feels like going several steps back. Instead of
focusing on what you are actually trying to achieve, you focus on notations like
<a href=https://en.bem.info/methodology/css/>BEM</a>, code structuring, optimizing HTML
size. Just doing things that make 0.1% difference. You know that saying: Early
optimization is the root of all evil. Exactly that.<p>I am also not saying that Tailwind is the cure for everything. Sometimes custom
CSS is necessary. But from what I found out in using it for almost two years in
a production environment (on a site getting quite a lot of traffic and
constantly being changed), I can say without any reservations that Tailwind
saved our asses countless times. We would be rewriting CSS all the time without
it. And I don’t really think writing CSS is the best way to spend my time.<p>I have also noticed that people who criticize Tailwind the most never actually
used it in a real project that has a long lifetime with plenty of changes that
will happen in the future.<p>But you know, whatever floats your boat!<h2 id=code-maintainability>Code maintainability</h2><p>Somehow, people also stopped talking about maintenance. If you constantly try to
catch the latest and greatest train, you are by that logic always trying new
things. Which is a good thing if you want to learn about technologies and try
them. But for the production environment, you have to have a stable stack that
doesn’t change every 6 months.<p>You can lock dependencies for sure. Nevertheless, the hype train moves along
anyway. And the mindset this breeds goes against locking the code. This
bleeding-edge rolling release cycle is not helping. That is why enterprise
solutions usually look down on these popular stacks and only do bare minimum to
appear hip and cool.<p>With that said, I still think that progress is good, but should be taken with a
grain of salt. If your project is something that should be built once and then
rarely updated, going with the latest stack is a possible way to go. But, if you
are working on a project that lasts for years, you should probably approach it
with some level of caution. Web development is often times too volatile.<h2 id=web-development-has-a-marketing-issue>Web development has a marketing issue</h2><p>I noticed that almost every project now has this marketing spin put on it.
Everything is blazingly fast now. I get it, they are competing for your
attention, but what happened to just being truthful and not inflating reality.<p>And in order to appeal to mass market, they leave things out of their marketing
materials. These open-source projects are now behaving more and more like
companies do. Which is a scary thought on its self.<p>And we are also seeing a rise in a concept of building a company in the open,
which is a good thing, don't get me wrong. But when it is using open-source to
lure people and then lock them in their ecosystem, there is where I have issues
with it.<p>This might be because I have been using GNU/Linux for 20 years now and have been
so beholden for my success to open-source that I see issues when open-source is
being used to trick people into a false sense of security that these projects
are built in the spirit of open-source. Because there is a difference. They are
NOT! They have a really specific goal in mind. And the open-source is being used
as a delivery system. Which is in my opinion disgusting!<h2 id=conclusion>Conclusion</h2><p>I will end my post with this. Web development is running now in circles. People
are discovering <a href=https://www.tutorialspoint.com/remote-procedure-call-rpc>RPC</a>
now and this is the now the next big thing. <a href=https://graphql.org/>GraphQL</a> is
so passé. And I am so tired of it all. Of blazingly fast libraries, of all these
new technologies that are actually just a remake of old ones. Of just the
general spirit of the web. I will just use what I already know. Which worked 10
years ago and will work 10 years after this. I will adopt a couple of little
tools like Vite. But I will not waste my time on this anymore.<p>It was a good exercise to get in touch with what’s new now. Nothing really
changed that much. FOMO is now cured! Now I have to get my ass back to actually
code and make the project that I wanted to make in the first place.</div></article></main><section><hr><h2>Posts from blogs I follow around the net</h2><ul><li><a href=https://utcc.utoronto.ca/~cks/space/blog/solaris/ZFSWhyNotDirectoryToFilesystem target=_blank rel=noopener>One reason that ZFS can't turn a directory into a filesystem</a><a href=https://utcc.utoronto.ca/~cks/space/blog/>Chris's Wiki :: blog</a><div>One of the wishes that I and other people frequently have for ZFS
is the ability to take an existing directory (and everything
underneath it) in a ZFS filesystem and turn it into a sub-filesystem
of its own. One reason for wanting this is that a number of things
are set and controlled on a per-filesyst…<li><a href=http://www.landley.net/notes-2023.html#28-10-2023 target=_blank rel=noopener>October 28, 2023</a><a href=http://www.landley.net/notes-2023.html>Rob Landley's Blog Thing for 2023</a><div>Oh good grief, two of my least favorite licensing people, Larry Rosen
and Bradley Kuhn, are interacting on the OSI's license-discuss
list where the're doing
bad computer history and insisting that a guy Larry Rosen
coincidentally interviewed for a book years ago is clearly the origin of
somethin…<li><a href="http://offbeatpursuit.com:80/blog/?id=25" target=_blank rel=noopener>A fix by any other name</a><a href=http://offbeatpursuit.com:80/blog/>WLOG - blog</a><div>tags:
i2c, plan9
Another month, another file system.
Well, if you can’t fix it in software, fix it in hardware (looking at
you, bme680, we’re not
done yet). The show must go on, as they say, and I would like my
experiments to go on.
So a “new” addition to the environmental sensor family connected to
the h…<li><a href=https://mirzapandzo.com/next-image-url-parameter-is-valid-but-upstream-response-is-invalid target=_blank rel=noopener>Next/Image "url" parameter is valid but upstream response is invalid</a><a href=https://mirzapandzo.com/>Mirza Pandzo's Blog</a><div>Getting "url" parameter is valid but upstream response is invalid error with Next/Image on WSL2<li><a href=https://drewdevault.com/2023/10/13/Going-off-script.html target=_blank rel=noopener>Going off-script</a><a href=https://drewdevault.com>Drew DeVault's blog</a><div>There is a phenomenon in society which I find quite bizarre. Upon our entry to
this mortal coil, we are endowed with self-awareness, agency, and free will.
Each of the 8 billion members of this human race represents a unique person, a
unique worldview, and a unique agency. Yet, many of us have the sam…<li><a href=https://szymonkaliski.com/writing/2023-10-02-building-a-diy-pen-plotter/ target=_blank rel=noopener>Building a DIY Pen Plotter</a><a href=http://github.com/dylang/node-rss>Szymon Kaliski</a><div>This article documents my learnings from designing and building a DIY Pen Plotter during the summer of 2023.
My ultimate goal is to build my…<li><a href=https://neil.computer/notes/chart-of-accounts-for-startups-and-saas-companies/ target=_blank rel=noopener>Chart of Accounts for Startups and SaaS Companies</a><a href=https://neil.computer/>Neil Panchal</a><div>Accounting is fundamental to starting a business. You need to have a basic understanding of accounting principles and essential bookkeeping. I had to learn it. There was no choice. For filing taxes, your CPA is going to ask you for an Income Statement (also known as P/L statement). If<li><a href=https://journal.valeriansaliou.name/deploy-a-nomad-cluster-on-alpine-linux-with-vultr/ target=_blank rel=noopener>Deploy a Nomad Cluster on Alpine Linux with Vultr</a><a href=https://journal.valeriansaliou.name/>Valerian Saliou</a><div>After spending countless hours trying to understand how to deploy my apps on Kubernetes for the first time to host Mirage, an AI API service that I run, I ended up making myself a promise that the next app I work on would be using a more productive & simpler<li><a href=https://jcs.org/2023/10/25/wifi_da target=_blank rel=noopener>BlueSCSI Wi-Fi Desk Accessory 1.0 Released</a><a href=https://jcs.org/>joshua stein</a><div>BlueSCSI Wi-Fi Desk Accessory
1.0 has been released:
wifi_da-1.0.sit
(StuffIt 3 archive)
SHA256: ccfc9d27dd5da7412d10cef73b81119a1fec3848e4d1d88ff652a07ffdc6a69aSHA1: ff124972f202ceda6d7fa4788110a67ccda6a13a
This is the initial public release of my BlueSCSI Wi-Fi Desk Accessory for
classic MacOS.<li><a href=https://michael.stapelberg.ch/posts/2023-10-25-my-all-flash-zfs-network-storage-build/ target=_blank rel=noopener>My 2023 all-flash ZFS NAS (Network Storage) build</a><a href=https://michael.stapelberg.ch/>Michael Stapelbergs Website</a><div>For over 10 years now, I run two self-built NAS (Network Storage) devices which serve media (currently via Jellyfin) and run daily backups of all my PCs and servers.
In this article, I describe my goals, which hardware I picked for my new build (and why) and how I set it up.
Design Goals
I use my netw…</ul><p>Generated with <a href=https://git.sr.ht/~sircmpwn/openring target=_blank rel=noopener>openring</a>.</section><footer><hr><p><big><strong>Want to comment or have something to add?</strong></big><p>You can write me an email
at <a href=mailto:mitja.felicijan@gmail.com>mitja.felicijan@gmail.com</a> or
catch up with me <a href=https://telegram.me/mitjafelicijan target=_blank>on Telegram</a>.<hr><p>This website does not track you. Content is made available under
the <a href=https://creativecommons.org/licenses/by/4.0/ target=_blank rel=noreferrer>CC BY 4.0 license</a> unless specified
otherwise. Blog is also available as <a href=/index.xml target=_blank>RSS feed</a>.</footer><script>
	 window.va = window.va || function () { (window.vaq = window.vaq || []).push(arguments); };
	</script><script defer src=/_vercel/insights/script.js></script>