|
|
|
% Options for packages loaded elsewhere
|
|
|
|
\PassOptionsToPackage{unicode}{hyperref}
|
|
|
|
\PassOptionsToPackage{hyphens}{url}
|
|
|
|
|
|
|
|
\documentclass[
|
|
|
|
]{article}
|
|
|
|
\usepackage{amsmath,amssymb}
|
|
|
|
\usepackage{titlesec}
|
|
|
|
\usepackage{titling}
|
|
|
|
\usepackage{lmodern}
|
|
|
|
\usepackage{xcolor}
|
|
|
|
\usepackage{iftex}
|
|
|
|
\usepackage[margin=1in]{geometry}
|
|
|
|
\ifPDFTeX
|
|
|
|
\usepackage[T1]{fontenc}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
|
\usepackage{textcomp} % provide euro and other symbols
|
|
|
|
\else % if luatex or xetex
|
|
|
|
\usepackage{unicode-math}
|
|
|
|
\defaultfontfeatures{Scale=MatchLowercase}
|
|
|
|
\defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
|
|
|
|
\fi
|
|
|
|
% Use upquote if available, for straight quotes in verbatim environments
|
|
|
|
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
|
|
|
|
\IfFileExists{microtype.sty}{% use microtype if available
|
|
|
|
\usepackage[]{microtype}
|
|
|
|
\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
|
|
|
|
}{}
|
|
|
|
\makeatletter
|
|
|
|
\@ifundefined{KOMAClassName}{% if non-KOMA class
|
|
|
|
\IfFileExists{parskip.sty}{%
|
|
|
|
\usepackage{parskip}
|
|
|
|
}{% else
|
|
|
|
\setlength{\parindent}{0pt}
|
|
|
|
\setlength{\parskip}{1pt plus 2pt minus 1pt}}
|
|
|
|
}{% if KOMA class
|
|
|
|
\KOMAoptions{parskip=half}}
|
|
|
|
\makeatother
|
|
|
|
\definecolor{myblue}{RGB}{24, 102, 201}
|
|
|
|
\titleformat{\section}
|
|
|
|
{\huge\bfseries\color{myblue}}
|
|
|
|
{}
|
|
|
|
{0em}
|
|
|
|
{}[\titlerule]
|
|
|
|
|
|
|
|
\titleformat{\subsection}
|
|
|
|
{\Large\bfseries}
|
|
|
|
{}
|
|
|
|
{0em}
|
|
|
|
{}
|
|
|
|
|
|
|
|
\titleformat{\subsubsection}[runin]
|
|
|
|
{\bfseries}
|
|
|
|
{}
|
|
|
|
{0em}
|
|
|
|
{}[:]
|
|
|
|
|
|
|
|
\titlespacing{\subsubsection}
|
|
|
|
{0em}{0.75em}{0.5em}
|
|
|
|
|
|
|
|
\titlespacing{\subsection}
|
|
|
|
{0em}{1em}{0.65em}
|
|
|
|
|
|
|
|
\titlespacing{\maketitle}
|
|
|
|
{0em}{0em}{0em}
|
|
|
|
\renewcommand{\maketitle}{
|
|
|
|
\begin{center}
|
|
|
|
{\huge\bfseries \theauthor}\\
|
|
|
|
\vspace{.35em}
|
|
|
|
\href{https://sufyaan.me/mnml}{sufyaan.me/mnml}
|
|
|
|
\end{center}
|
|
|
|
}
|
|
|
|
\usepackage{color}
|
|
|
|
\usepackage{fancyvrb}
|
|
|
|
\newcommand{\VerbBar}{|}
|
|
|
|
\newcommand{\VERB}{\Verb[commandchars=\\\{\}]}
|
|
|
|
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}}
|
|
|
|
% Add ',fontsize=\small' for more characters per line
|
|
|
|
\newenvironment{Shaded}{}{}
|
|
|
|
\newcommand{\AlertTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
|
|
|
|
\newcommand{\AnnotationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
|
|
|
|
\newcommand{\AttributeTok}[1]{\textcolor[rgb]{0.49,0.56,0.16}{#1}}
|
|
|
|
\newcommand{\BaseNTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
|
|
|
|
\newcommand{\BuiltInTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{#1}}
|
|
|
|
\newcommand{\CharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
|
|
|
|
\newcommand{\CommentTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textit{#1}}}
|
|
|
|
\newcommand{\CommentVarTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
|
|
|
|
\newcommand{\ConstantTok}[1]{\textcolor[rgb]{0.53,0.00,0.00}{#1}}
|
|
|
|
\newcommand{\ControlFlowTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
|
|
|
|
\newcommand{\DataTypeTok}[1]{\textcolor[rgb]{0.56,0.13,0.00}{#1}}
|
|
|
|
\newcommand{\DecValTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
|
|
|
|
\newcommand{\DocumentationTok}[1]{\textcolor[rgb]{0.73,0.13,0.13}{\textit{#1}}}
|
|
|
|
\newcommand{\ErrorTok}[1]{\textcolor[rgb]{1.00,0.00,0.00}{\textbf{#1}}}
|
|
|
|
\newcommand{\ExtensionTok}[1]{#1}
|
|
|
|
\newcommand{\FloatTok}[1]{\textcolor[rgb]{0.25,0.63,0.44}{#1}}
|
|
|
|
\newcommand{\FunctionTok}[1]{\textcolor[rgb]{0.02,0.16,0.49}{#1}}
|
|
|
|
\newcommand{\ImportTok}[1]{\textcolor[rgb]{0.00,0.50,0.00}{\textbf{#1}}}
|
|
|
|
\newcommand{\InformationTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
|
|
|
|
\newcommand{\KeywordTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{\textbf{#1}}}
|
|
|
|
\newcommand{\NormalTok}[1]{#1}
|
|
|
|
\newcommand{\OperatorTok}[1]{\textcolor[rgb]{0.40,0.40,0.40}{#1}}
|
|
|
|
\newcommand{\OtherTok}[1]{\textcolor[rgb]{0.00,0.44,0.13}{#1}}
|
|
|
|
\newcommand{\PreprocessorTok}[1]{\textcolor[rgb]{0.74,0.48,0.00}{#1}}
|
|
|
|
\newcommand{\RegionMarkerTok}[1]{#1}
|
|
|
|
\newcommand{\SpecialCharTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
|
|
|
|
\newcommand{\SpecialStringTok}[1]{\textcolor[rgb]{0.73,0.40,0.53}{#1}}
|
|
|
|
\newcommand{\StringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
|
|
|
|
\newcommand{\VariableTok}[1]{\textcolor[rgb]{0.10,0.09,0.49}{#1}}
|
|
|
|
\newcommand{\VerbatimStringTok}[1]{\textcolor[rgb]{0.25,0.44,0.63}{#1}}
|
|
|
|
\newcommand{\WarningTok}[1]{\textcolor[rgb]{0.38,0.63,0.69}{\textbf{\textit{#1}}}}
|
|
|
|
\setlength{\emergencystretch}{3em} % prevent overfull lines
|
|
|
|
\providecommand{\tightlist}{%
|
|
|
|
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
|
|
|
|
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
|
|
|
|
\ifLuaTeX
|
|
|
|
\usepackage[bidi=basic]{babel}
|
|
|
|
\else
|
|
|
|
\usepackage[bidi=default]{babel}
|
|
|
|
\fi
|
|
|
|
\babelprovide[main,import]{english}
|
|
|
|
% get rid of language-specific shorthands (see #6817):
|
|
|
|
\let\LanguageShortHands\languageshorthands
|
|
|
|
\def\languageshorthands#1{}
|
|
|
|
\ifLuaTeX
|
|
|
|
\usepackage{selnolig} % disable illegal ligatures
|
|
|
|
\fi
|
|
|
|
\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
|
|
|
|
\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
|
|
|
|
\urlstyle{same} % disable monospaced font for URLs
|
|
|
|
\hypersetup{
|
|
|
|
pdftitle={(POST) Keep It Minimal},
|
|
|
|
pdflang={en},
|
|
|
|
colorlinks=true,
|
|
|
|
linkcolor=blue,
|
|
|
|
filecolor=blue,
|
|
|
|
urlcolor=blue,
|
|
|
|
pdfcreator={LaTeX via pandoc}}
|
|
|
|
|
|
|
|
\title{Sufyaan's Website}
|
|
|
|
\author{Sufyaan's Website}
|
|
|
|
\date{}
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
|
|
|
|
\section[Keep It Minimal]{Keep It Minimal}\label{why-i-use-terminal-apps}
|
|
|
|
|
|
|
|
\textbf{27 June 2023}
|
|
|
|
|
|
|
|
|
|
|
|
\textbf{Category: }Software
|
|
|
|
|
|
|
|
In technology, you should keep it simple as much as possible. The KISS
|
|
|
|
philosophy and the \href{sufyaan.me/definitions/unix-philosophy/}{UNIX
|
|
|
|
philosophy} especially must be followed if you want quality software.
|
|
|
|
Most pieces of famous software nowadays do not follow this guideline and
|
|
|
|
it is costing millions of people dearly.
|
|
|
|
|
|
|
|
\hypertarget{why-minimal}{%
|
|
|
|
\subsection[Why Minimal?]{Why Minimal?}\label{why-minimal}}
|
|
|
|
|
|
|
|
Simply put, a piece of minimal software:
|
|
|
|
|
|
|
|
\begin{enumerate}
|
|
|
|
\tightlist
|
|
|
|
\item
|
|
|
|
Is easier to maintain
|
|
|
|
\item
|
|
|
|
Has a dearth of bugs
|
|
|
|
\item
|
|
|
|
Runs fast on all devices
|
|
|
|
\item
|
|
|
|
Is easily extensible
|
|
|
|
\item
|
|
|
|
Helps avoid complications
|
|
|
|
\item
|
|
|
|
Contributes to the world
|
|
|
|
\end{enumerate}
|
|
|
|
|
|
|
|
Let\textquotesingle s expand on the first and second points. Why is
|
|
|
|
minimal software so easy to maintain? Why do developers hate being
|
|
|
|
developers when they are working with bloated pieces of software?
|
|
|
|
Keeping software minimal gives developers the opportunity to easily find
|
|
|
|
code that is slowing down the whole program or is inefficient. It also
|
|
|
|
helps developers find bugs easy. This is because a smaller codebase
|
|
|
|
means that it takes less time to review the code. A group of 10 people
|
|
|
|
can easily perfect a program whose codebase is less than 1500 lines.
|
|
|
|
After that, it is just a work of maintaining the program and making sure
|
|
|
|
that any requests that users have are answered.
|
|
|
|
|
|
|
|
Minimal software runs fast on all devices. It is simply no contest. A
|
|
|
|
1000-line Python program is going to be much faster than a 100K-line C
|
|
|
|
program even though C is much faster than Python. Inefficiencies and
|
|
|
|
lackluster execution of functions in a program can be spotted much more
|
|
|
|
easily in a smaller program. There is a huge disregard for old
|
|
|
|
computers. People simply cannot use old computers anymore because the
|
|
|
|
software that they use is so inefficient that their computer struggles
|
|
|
|
to do basic things. For example, they use Adobe Reader to open PDFs
|
|
|
|
which is one of the worst things to do. Adobe Reader takes an incredibly
|
|
|
|
long time to open considering the fact that they are the ones that
|
|
|
|
invented PDFs. Another example is Word. Why does Word take long to open
|
|
|
|
and write on? It\textquotesingle s code is bloated. Think of Zathura. It
|
|
|
|
is a PDF viewer that follows the
|
|
|
|
\href{sufyaan.me/definitions/unix-philosophy/}{UNIX philosophy} of doing one
|
|
|
|
thing well. Even on the slowest of computers, Zathura takes milliseconds
|
|
|
|
to open a PDF. Think about LaTeX. You do the writing then you compile
|
|
|
|
the document into a PDF. It does everything from linking, referencing,
|
|
|
|
bibliographies much better than Word. In fact, it is so good that many
|
|
|
|
universities require its use for proper formatting and referencing.
|
|
|
|
|
|
|
|
Minimal software can be extensible as per the
|
|
|
|
\href{sufyaan.me/definitions/unix-philosophy/}{UNIX philosophy}. Instead of
|
|
|
|
creating a massive program that tries to do everything, minimalist
|
|
|
|
programs create modules for certain functions. This makes
|
|
|
|
troubleshooting a piece of cake as the initial confusion of finding out
|
|
|
|
what exactly causes the error is practically eliminated. For example, if
|
|
|
|
you are making a login page and the authentication does not work, you
|
|
|
|
know that you should look in the authentication module. However, if you
|
|
|
|
make it all in a single program, it is difficult to root out whether an
|
|
|
|
issue is due to an incorrect variable type or a redundant function.
|
|
|
|
|
|
|
|
All of this helps developers to avoid complications. No team wants
|
|
|
|
another error or speed complaint in the middle of another issue. All of
|
|
|
|
the advantages listed thus far help developers have peace of mind.
|
|
|
|
|
|
|
|
Finally, minimal pieces of software can be liberated and made into
|
|
|
|
\href{sufyaan.me/definitions/free-software/}{free software} to contribute to the
|
|
|
|
world. Once the initial stages of bug-fixing and optimization is over,
|
|
|
|
it is just a matter of letting the world find ways to make the program
|
|
|
|
better. An inefficiency that no one would spot otherwise can be ironed
|
|
|
|
out by a top-tier programmer who worked in a plethora of huge companies
|
|
|
|
with decades of experience. It also helps budding developers learn about
|
|
|
|
development.
|
|
|
|
|
|
|
|
\hypertarget{closing-the-program}{%
|
|
|
|
\subsection[Closing The Program]{Closing The
|
|
|
|
Program}\label{closing-the-program}}
|
|
|
|
|
|
|
|
To sum it up, everyone should use and develop minimal software if
|
|
|
|
possible. This is because minimal software is easier to maintain, debug
|
|
|
|
and optimize due to its smaller codebase. It also runs fast on all
|
|
|
|
devices and avoids complications during development time. Minimal
|
|
|
|
software can also be liberated into
|
|
|
|
\href{sufyaan.me/definitions/free-software/}{free software} which will allow
|
|
|
|
talented developers to review the program and contribute to the world.
|
|
|
|
|
|
|
|
\end{document}
|