Development Tools
Setting up your local development environment is another complex puzzle. This whole using Linux for web development project, is a giant puzzle and each piece of the puzzle is another complex puzzle. It’s an art and a science. It’s complicated, interesting and fun.
My understanding of the subject is still fairly superficial. Writing these stories is helping me learn and understand the technology. My exploratory perspective of computer science is valuable for anyone trying to figure this out. I’ve been tinkering around with computers long enough to learn how to show you a productive strategy to get started programming your programmable computers and design and build your own websites and create your own digital art.. It will help you understand what you need to learn. If you follow my directions, you will investigate and learn a very high performance set of technology, tactics and strategy. Keep exploring, learning and developing your own high performance cloud of artificial intelligence.
Each one of the applications is a powerful tool and has a learning curve,. Some steep, some not so steep. Learning how they all work together is another huge learning project. You’ll need a broad spectrum of knowledge and skill. It takes a lot of seeking the truth. Read! A lot!
My style and my tool set is just one of many options. I recommend that you follow my direction to get started. Then, you can explore the market and build your system the way you want to build it. Try to learn one system first. Trying to learn about all the options will distract you and slow you down. Build something valuable with this particular set of tools and by the time you finish, you will have a much more thorough understanding of the global ecosystem. And you can design your own custom system.
Read the manuals of the programs you want to use. Watch a lot of videos, about all aspects of computer science. Harvard and MIT both have complete computer science courses available online, for free. I’m sure there are many others. The Missing Semester is one of my favorites.
Local Development
Once you have your Linux operating system set up the way you like it, setting up your development environment is another major stage of building your very high performance productivity engine in our global cloud of artificial intelligence.
Use what works best for you. Start with Kate, Konsole and Dolphin. While you are using the default KDE applications, investigate Kitty, Dolphin, ZSH and Neovim. There are many other very good options. There are often many ways to do things right in Linux. KDE Plasma tools, like Konsole, Kate and Dolphin, are very easy to use.
Konsole is a great tool. Alacritty is much more advanced technology. Much faster and just as powerful as Konsole. Kitty is even better, because of it’s multiplexing capabilities and it is just as fast as Alacritty. Alacritty and Kitty are both very extensible. Multiplexer is built into Kitty, You have to use the Tmux multiplexor with Alacritty. Alacritty and Tmux are a fantastic set of tools. I prefer the all in one Kitty, with its builtin multiplexing capabilities and its ability to be extended and improved with Kittens.
Get Kitty, ZSH and Neovim installed. Configuring each one will be a major project that takes time and research and discipline. Each one of them is complicated software, which you will have to have to study a lot, to learn how to use them well. This is why it is important to select a set of tools and get really good at using those tools, before you try a different set of tools that do the same thing.
First, get really good at using the KDE tools, like Kate, Kile and Kontact. I recommend installing Kitty right away and learning how to use it. Later on, if you want to advanced your computer programming skills, you can replace Bash with Zsh and start learning how to configure and use Neovim. Neovim is a very advanced, programmable text editor. You can build your own custom Integrated Development Environment around Kitty, Zsh and Neovim.
You can usually install them with a simple, sudo apt install, command, or sudo pkcon install. Sometimes you will have to add a repository to your list of software repositories or maybe you will need to use curl or wget or some other software installer software.
You will be clumsy and slow at first, especially while you learn how to use Neovim, but then, you’ll be much faster when you get some experience and muscle memory. If you learn how to compile applications from source, you can get the latest greatest version of the application.
Configuring Your Tools
~/.zshrc ~/.vimrc ~/.config/vifm/vifmrc ~/.config/alacritty/alacritty.yml ~/.tmux/.conf ~/.config/gtk-3.0/gtk.css
are some of the “dot files” you will create and edit to configure your tools to look and act the way you want them to. It’ll take trial and error to get it all setup the way you like it.
The configuration files for each user are in the user’s home folder, usually in the .config directory. The config files for the root user are usually in the /etc directory. Sometimes they’re in the /opt directory. Figure out where they all are and learn how to edit and configure them properly.
It’s usually best to create a separate file with a .d extension and require your custom configuration file in the default configuration file. That way, your custom configuration will override the default configuration and not be, “clobbered,” by any upgrade.
Libraries
Start your investigation of computer science by learning the scripting languages AWK and ZSH. Learn how to communicate with your computers. AWK is an ancient language used to program computers. ZSH is a much more modern version of the same thing. Study them both. They are powerful tools that give you minute control of every detail of your computers. Learning how to write scripts in AWK and Zsh and other programming languages is a very valuable skill.
There is a difference between a scripting language and a programming language. There is some overlap. C and C++ are not the easiest programming languages to learn, but they are very powerful tools. Linux is written in C and other languages. KDE is written in C++, QML and JavaScript. Get familiar with these languages. They are the rules of law for free and open source software.
C is most likely already installed on your Linux system. Install gcc if it isn’t. g++, the C++ library, is usually included in gcc. Get C++, QML and JavaScript installed and configured.
Getting the qt-sdk installed is quite a bit more complicated. You have to be aware of the version of qt you are installing. Make sure you install it in the right directory. Make sure it is executable and add it to your path. Use Duckduckgo to search for, “install qt,” on your distribution of Linux and follow the instructions.
To install the Javascript development environment, install curl with, sudo pkcon install curl. Then, use curl to install nvm. Then use nvm to install node.
To install Python use, sudo pkcon install python3 python3-pip. Then use pip for installing python applications.
Text Editors and IDEs
Get Kate configured so that you can use it to edit and develop your projects. Kate is a very easy to use, fully featured text editor. Use Kate along side your Dolphin file manager. Use Kate to write code and Kile to write stories.
Use Kitty, and Neovim to drill much deeper into the Linux ecosystem. Use Kexi to manage your databases. Learning how to use Kitty will teach you how to use Zsh. Learning how to use Neovim will teach you how to write code. Learning how to use Kile will teach you how to use Latex.
Clone the source code for the applications you like using, like Kontact, Calligra, Falkon, Krita and digiKam and start working on improving them. Learn the process. Share your data with the team and work on creating an ultra advanced KDE platform that you can run on all of your computers.
Do your research. Investigate how to compile programs and write code.
Virtual Environments and Containers
When you are ready, you can start investigating and learning how to use Qemu, KVM, LXC and LXD. Qemu uses the Linux Virtualization Machine(LVM) to create virtual environments. LXC and LXD are the Linux container tools. LXD is a higher level command line interface for using the Linux container application, LXC.
Docker is a commercial version of LXC, which you can use on your Linux operating system. Docker runs on Linux, but it enables you to make programs that can run exactly the same on any machine.
It seems like LXC has the benefits of a virtual environment and the light weight of a container. Docker uses LXC for deploying applications. LXD uses LXC for deploying Linux containers. Qemu uses KVM to create a completely virtual environment, like VirtualBox.
A virtual environment requires your application to run in a hypervisor. Containers also use a hypervisor, but virtual environments require a separate kernel for each virtual environment and containers use your computer’s kernel to run the programs in the container.
Qemu/KVM is the Linux version of virtualization. It is probably more complicated and a lot less refined. Like many Linux tools are. Knowing how to use Qemu/KVM will probably allow you to do things you can’t otherwise do. Most commercial virtualization tools are commercial versions of Qemu and KVM.
I definitely recommend taking the time to learn and use Qemu/KVM and LXD/LXC, rather than VirtualBox and Docker. It’s the real Linux way. Be the artist, the creator, rather than using whatever the corporations offer. Using the proprietary software has its advantages. So does using the free and open source software.
Flatpak and SNAP Packages
Ubuntu has been using Snap Packages for installing new programs. They seem like a form of container for the applications, to keep them isolated from your kernel and from each other. The fact that they contain a very small Ubuntu OS makes them more like virtualization, than containerization.
Flatpak is the Redhat/Fedora/CentOS solution for containing applications. It seems like Flatpak is more popular in the Linux community. They are interchangeable. You can use Flatpak on Ubuntu. I’m not sure about other operating systems. Pop-OS! uses Flatpaks and Snaps, mostly Flatpaks.
My current KDE Neon has 2655 applications installed with dpkg, including 6 snaps and 6 flatpacks. I did install one of the snaps intentionally. Get in the habit of installing snaps and flatpaks, to make your computers more secure.
dpkg is the software installer built into Linux. Software installers applications like apt, pkcon, Discover, Muon and Synaptic, etc., all use dpkg to install software on your Linux computers, at least on Debian based operating systems. Debian is a major distribution of Linux with many versions. Ubuntu, Linux Mint and many others are Debian based distributions.
Virtualenv and Venv
When you build an application with Python, for example, you would use venv or virtualenv to contain the application within a containerized workspace. Venv is an integral feature of Python. Virtualenv is an improved version of the same thing, which you can install using pip install. Venv is like a subset of Virtualenv.
Create at least five different applications as fast as you can. Try different combinations of the setup, to see what you want and need.
Practice using all of your tools. Repetition is an important tactic for learning how to use your software. Writing stories in Kile is a good way to start learning Latex. Using Neovim to configure your system and to create applications is a good way to learn how to use Neovim.
Containerizing your applications is a routine part of your workflow. Use Virtualenv to containerize your python applications. I’ve noticed that venv works out of the box. You have to create a symlink to get virtualenv to work. I know its pretty simple to do, I’m just not sure were the symlink comes from and goes to.
cd into your project folder, then use the command, virtualenv -p python3 nameofapplication. That command will create a container in a new directory named, nameofapplication. cd into nameofapplication and enter bin/activate. Your shell will indicate that you are working inside a virtual environment. Enter deactivate to return to the normal environment. Checkout the virtualenv documentation to get it installed properly and learn how to use it.
Once you get your virtual environment set up, create a Git repository inside the virtual environment to keep a record of the changes you make to your application and enable collaboration with other programmers.
Git and SSH
One of the first things you do when you start a new project is create a git repository for your project. This will record everything you do, so you can recover previous stages of development. If you mess something up, you can go back to a previous state and start over.
Take the time to learn Git. It is a tool that is not necessarily central to your workflow, but it is one that you will use all the time. The sooner you get familiar with Git, the sooner you will be able to spin up projects and be a high performance application developer.
Secure Shell, SSH, is how you establish secure communications between your local development environment and your remote hosts, such as Github and your live websites. You can SSH into other computers, as long as you have the right credentials. Then you can work on that other computer remotely, just as if you were physically present.
If you plan on working on projects other than websites, you may want to set up a Github account. Set up a Git repository on Github or Bitbucket to keep a git repository of your project development at a remote location. This way, you create a back up of your project automatically, you can work on your project on any computer and you can collaborate on projects with other developers.
I’m not sure you really need a Github repository for a website. I know you can publish a website on Github. I’m not so sure that Github is the best hosting service for a live website. You can definitely create a Github page with the configuration files for your computers. That way, you can just clone your own configuration files into any computer you want to.
Git is another complicated program you can learn how to use in your software development career. SSH is another complicated piece of the puzzle. Brave is an invaluable tool to use to find out how to use each one of them properly. Just search for Git and SSH. Brave is a web browser and search engine designed for protecting your privacy and for defeating the people who are trying to censor and control the Internet.
I am opposed to any criminal activity. I am also opposed to turning the Internet or our civilization into a prison to prevent crime. Double or triple the penalty for using any technology to commit a crime.
Databases
You’re eventually going to need to install and configure databases for your projects. Your database is one of the most important components of your projects. SQL is one of the most important languages you should get familiar with.
Artificial intelligence is based on big data. Learn everything you can about data processing. Learn how to insert, extract and otherwise manipulate the data in your databases.
Start with Calligra Sheets. Use it to create the financial documentation for your business. Then, work on exploring Kexi and deploying the PostgreSQL databases, to learn the SQL language and to understand how to learn from and use the data in your databases.
Apparently, Python also has a small database built into it. Venv is the containerization tool and SQLite is the database that ships with Python. Get familiar with both of these tools. Learn how to use them well, before you move on to using Virtualenv and PostgreSQL.
SQLite is a light weight database that you can use for your local development work. Installing Python, automatically installs SQLite. PostgreSQL is the world’s most advanced open source relational database. It is released with the BSD license. Use PostgreSQL for your live production environment.
As usual, if you are not already familiar with computer science and databases, I recommend that you find an up to date manual and read it. I recommend watching this video about PostgreSQL before, during or after reading the manual.
Apparently, PostgreSQL comes out of the BSD shop at UC Berkeley. Like the Internet, PostgreSQL started out as a DARPA project. DARPA is the Defense Advanced Research Project Agency.
Take a look at Kexi, the Calligra database management application. Learn how to use it and incorporate it into your high performance, data processing system.
Web Server
Apache2 is the old reliable web server. Nginx is a newer, faster web server. Your web server allows you to view your website in your browser, while you’re working on it.
Nginx is newer and faster than Apache2. The main advantage of Nginx is that it is non-blocking. In other words, it can serve more than one project at a time. Apache2 can only serve one at a time.
The main advantage of Apache2 is that you can serve dynamic web pages that can accept input from your audience and change dynamically.
Interestingly, Nginx comes out of Moscow Russia. Nginx has recently been purchased by F5 corporation. F5 turns out to be located here in Seattle.
You can also set them up so that Nginx serves your static pages and Apache serves your dynamic pages. You have to configure them to work together. You can set them up to listen on different ports, 80 and 81, for example, or 442 and 443 for HTTPS, secure Internet connections.
Web Hosting
Bluehost is my current hosting company. I’ve been using them for years and the service has been great. They seem to be specializing in hosting WordPress, which is a great way to get started building websites. Get started as soon as you can. The sooner you get started, the sooner you will learn how to develop WordPress websites.
I like that Bluehost has an affiliate program, which I can advertise on my websites and I can also buy stock in the parent company (Endurance International Group, Inc., (EIGI)) and actually own Bluehost. If you want, Bluehost also has a reseller program that you can use to host websites you build for other people.
Learn how to use your cPanel. You use it to get your website set up and then, not much after that. You’ll have to use the cPanel to set up each of your websites. There are other ways of building websites, but a lot of hosting companies use cPanel.
Finally
Each one of these systems has really good documentation about itself, but there is not very much documentation about how they all connect to each other and work together.
The documentation teaches you how each program works, it doesn’t teach you how to get all the programs to work together. This subject is one of the main themes of homeoffice.studio.
Read the documentation. Brave is one of your most valuable tools. QuteBrowser is an alternative browser that works a lot like Vim. I’m investigating QuteBrowser to see if I can use it in my workflow. It is like an attempt to integrate a web browser into Neovim.
homeoffice.studio is just an educational service to help you find your way through the bewildering array of options. My way is not the only way. It is just one particular way.
I like my way. I like my style. Computer science is fun and interesting and challenging. My laptop is a beautiful work of art. It is a very high performance system, being held together with electrical tape, which I will be describing in the pages of this Holistic Home Office website.
For now, I’m working on this One Click WordPress project on Bluehost. It’s a good system to learn and teach.