Broken crystal face:
Replaced:
Broken crystal face:
Replaced:
Customer brought in a plasma cutter that had popped when first powered on then did not power on after that.
I fixed the obviously-damaged arc drive lug, but the device still didn’t power on. It was not worth troubleshooting the rest of the device at the time as it is difficult to disassemble. No charge to the customer, but I probably should have checked the primary power section of the cutter first.
I didn’t take a picture of the final solder
The customer still has it. I may try troubleshooting again sometime …
Missing secondary crown:
Replaced:
A customer brought in a Christmas tree. She had dropped the power adapter and it had a funny connector so she couldn’t find a replacement.
I replaced the connector with USB and gave her an adapter. Better than buying a new one!
A customer brought in a hard drive hoping to recover the data. The data wasn’t worth paying a laboratory so she brought it to me for an attempt.
I was not able to recover the data, but I was able to diagnose the problem so for no charge she got the peace of mind of knowing the data was gone forever. The platter was badly scratched. I called the lab and they told me they couldn’t recover the data even for $100,000! Impossible?
A customer brought in a Megatouch (bar solitaire touch screen arcade game, see photo) in which he had replaced the permanent-memory battery and it would not power on.
I verified the battery charge level, configured the CMOS settings properly and returned it to him with brief “step-by-step” showing how to factory reset in the future.
Thanks for bringing it in!
If I cannot recover your data, you don’t pay anything.
If I can recover your data, $50 charge for it and I give you a download link if the data is not sensitive, or a thumb drive if your data is sensitive. I make some quick attempts and may be able to recommend something.
The next option would be a laboratory. I can diagnose and try to give you some idea of your chances if you send your media to a laboratory.
If your data is worth $500+, I recommend Data Recovery Labs. They have a “no data, no charge” guarantee.
Last resort, I can open the drive and make an attempt. Opening a hard drive does not usually cause damage that would prevent a laboratory from recovering data if you decide to send it, but it can increase the recovery cost and the laboratory will know if the drive has been opened.
Free consultation. Call 614-205-1285, send photos to email for some diagnosis.
Bring it in. If I fix it, $40 minimum, $40 per hour.
No charge if I don’t fix. No surprises. I communicate what I’m doing.
$VARIABLE_NAME
is a variableapt
combines apt-get
and apt-cache
and it is newer. Use apt
.sudo apt update && sudo apt upgrade -y
script savedcommands.txt
.sh
file is an executable shell script. # to comment within./
is used to specify the current working directory especially when running something that could be the same as a system command.$PATH
, echo "${PATH//:/$'\n'}"
or just echo $PATH
$PATH
for the current session, export PATH='/new/directory:$PATH'
>
sends command output to a file. >>
appends the output to a file without overwriting existing contents.PS C:\current\path>
%VARIABLE_NAME%
is a variablePS > winget search Microsoft.PowerShell
PS > winget install --id Microsoft.PowerShell --source winget
PS > Get-ExecutionPolicy -List
PS > Set-ExecutionPolicy -Scope Process RemoteSigned
Python is not natively-installed on Windows, unlike on Linux machines. This pretty much covers it: https://learn.microsoft.com/en-us/windows/python/web-frameworks
PS > wsl --install
PS > wsl --list --verbose
PS > wsl
# code .
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
To install dependencies.
What this does: download source code, unpack it, make directory ~/.localpython
to install into, run the configuration file setting install going to install folder, compile, install compilation, create a virtualenv pointing to the install, switch to the virtualenv to use it:
mkdir ~/src
cd ~/src
$ wget http://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz
$ tar -zxvf Python-3.11.0.tgz
$ cd Python-3.11.0
$ mkdir ~/localpython3110
$ ./configure --prefix=$HOME/localpython3110 --enable-optimizations
https://realpython.com/installing-python/#how-to-build-python-from-source-code
$ make &&
make altinstall
$ ~/localpython3110/bin/python3.11 -m venv py3110_venv
$ source py3110_venv/bin/activate
$ sudo apt install python3-pip -y
$ pip install --upgrade pip
$ pip install tk pillow numpy astropy astroplan pandas pytz matplotlib scikit-learn
$ pip list
$ pip -V
$ which python
$ pip install --upgrade pip
$ pip freeze --local > requirements.txt
$ deactivate
$ rm -rf somename_env
$ pip install -r requirements.txt
Note the venv folder stores neither the Python installation nor your code for your project. It is only used to store version information about the Python installation used for your project.
pip download package1 package2 -d'~/src/python-packages'
pip install package1 package2 -f ~/src/python-packages --no-index
sudo apt install python3
sudo apt install exiv2
sudo apt install -y python3-tk python3-numpy python3-pandas python3-astropy
pip install -U scikit-learn
python -c 'import os, sys; print(os.path.dirname(sys.executable))'
to see the path to the current python installation.
PS > $env:path -split ';'
to see the path variable in Windows (readable format)
This is step-by-step how to install Astropy and Astroplan on a Raspberry Pi Zero W (1st gen, not the ‘2’).
Raspberry Pi OS download here along with imager here.
sudo passwd
(change from default as desired for security)
sudo raspi-config
Set up location, time zone, language, keyboard, Wi-Fi, SSH. Turn off Bluetooth? How?
python --version
>> Python 3.9.2
– for the Raspberry Pi, it is better to not use pip because it installs software not compiled for the Pi (the Pi Zero ISA is ARMv6l).sudo apt install python3-pip
sudo apt install python3-numpy
sudo apt install python3-astropy
Note! Astropy installs this one. Not the rc2 or any of the other ones.
sudo apt install python3-pyerfa
(installs with Astropy – I think)
sudo apt install python3-pyyaml
(installs with Astropy – I think)
sudo apt install python3-packaging
(installs with Astropy – I think)
sudo apt install python3-astroplan
sudo apt install python3-pytz
(installs with Astroplan)
sudo apt install python3-astroquery
sudo apt install python3-scipy
sudo apt install python3-kivy
sudo apt install fim
sudo apt install kivy
sudo apt install libmtdev1
sudo apt autoremove
The Raspberry Pi Zero W is 32-bit and uses ARMv6 instead of the newer ARMv7. The [biggest? only?] difference is in how the processor handles floating point operations.
The Raspberry Pi Zero 2 W is 64-bit.
The Raspberry Pi OS version 11 – the latest version still – is 32-bit. A 64-bit Raspberry Pi OS is in development but not available yet.
To check the version of Raspberry Pi OS installed, cat /etc/os-release
.
Python comes already installed with the Raspberry Pi OS. To verify, type python --version
. You could install if necessary with sudo apt install python3.8x
.
sudo apt update
is also a good command to run.
Pycharm is a the most popular Python editor.
NEVERMIND Develop on Windows, then put the program on the Raspberry Pi after. Or Develop directly on the Pi? Seems like develop on Windows is the best option.
The latest PyCharm is 64-bit and requires a 64-bit OS and 64-bit JDK.
The PyCharm install comes packed as a .tar
and compressed as .gz
, so .tar.gz
. Decompress the file with gzip -d filename.tar.gz
, then unpack it with tar -xvf filename.tar
. This will create a directory of the same name as the .tar file.
Linux comes with both gzip and tar installed so the commands work right away.
Once unpacked, you can run PyCharm by navigating to the bin folder, in my case /etc/pycharm-community-2018.3/bin
and type ./pycharm.sh
. You need Java to run it, so …
https://mrchromebox.tech/#home
https://cloudbytes.dev/snippets/upgrade-python-to-latest-version-on-ubuntu-linux
https://www.x.org/wiki/
On Ubuntu, to get latest python, sudo add-apt-repository ppa:deadsnakes/ppa
, then sudo apt update && sudo apt upgrade -y
. To see if a version is available, apt list | grep python3.10
Navigate to About Phone -> Build Number. Tap Build Number 7x for Developer Mode.
Under settings, there will be a new option called Developer Options. Within Developer Options, enable OEM unlocking.
Some useful apps for rooting and installing Linux are
https://www.python.org/downloads/
Raspberry Pi OS and Python versions support and description here.
The command pip3
is made for Python 3, so use it, not just pip
.
pip3 list
, or python -c "import numpy; print(numpy.__version__)"
to find the Numpy version installed.
sudo apt-get install libatlas-base-dev
pip3 install numpy --upgrade
and it upgraded to Numpy 1.21.5Astroplan highly recommends to be installed using Conda rather than by manually installing Python and required packages.
Both Anaconda and Miniconda are Conda and Conda is a Python distro. Miniconda is Python plus data science tools. Anaconda is Minconda plus a GUI and more tools.
Do you have to remove existing Python to install Conda? No, you can leave Python installed. But for a legacy Miniconda install with the latest Python? May be an issue?
https://conda.io/projects/conda/en/latest/user-guide/install/linux.html
Legacy Miniconda downloads here. For the Raspberry Pi Zero W (1st gen, which is an ARMv6 processor), I found just one ARMv6 version from the long list of legacy Miniconda installs: Miniconda-3.5.5-Linux-armv6l.sh
.
Miniconda 3.5.5 was released in Jun 2014.
For the conda
command to work, an appropriate line has to be added to the .bashrc
and .bash_profile
files. The install does it automatically, BUT: I installed Miniconda into /etc/miniconda
and in order to do this, I installed it as root user and because of that, the conda
command only worked if I opened the terminal as the root. Of note, once I switched to root and back to pi in the terminal, the conda
command still worked as pi. /home/username/.bashrc
is for “non-login” shells. /home/username/.bash_profile
is for “login” shells
Installation instructions: https://docs.astropy.org/en/stable/install.html
Astropy required Python packages.
Astropy installation files archive with various ISA support. Download the appropriate wheel file, then install with the command pip3 install /home/pi/file_name.whl
.
Astropy comes with the full Anaconda install. With Miniconda, the recommended way to install Astropy is using the command conda install astropy
.
Astropy 0.3.0 is what Miniconda 3.5.5 installs. This is a much earlier version than I would have expected. Astropy 0.3 was released in Nov 2013.
Astropy 0.4 was released in Jul 2014. Therefore Astropy 0.3 was the latest version when Miniconda 3.5.5 was released and is probably why Miniconda 3.5.5 installs with Astropy 0.3.
Astropy v1.2 requires Python v2.7 or later and Numpy 1.7.0 or later.
Astropy v1.3: “vectors and coordinates can be reshaped like arrays.”
Astropy v2.0.0 started to implement Python 3 but specifically says does not change functionality with Python 2. However, from 2.0.0 to 2.0.18, Python 2 was gradually phased out.
Astropy v3.0 is the first version that supports only Python 3.
I think I want Astropy v1.3 – unless it won’t run for some reason. Why does Miniconda 3.5.5 install Astropy 0.3.0? Was it the current Astropy at the release time? Answer: yes, it was. Do the newer Astropy versions require newer ISA? At some point, I got a “need ARMv7” error so probably.
However, also unexpectedly, it updates Python from 2.7.7 to 2.7.8. Python 2.7.8 was released in Jul 2014.
There are various types of servers, but they all consist of a physical computer somewhere. This tutorial shows how to set up a server first with the simplest of physical devices you can have in your home for less than $20 and side-by-side with how to do it in its more abstract – and more common – form, a VPS (virtual private server) you can rent from a hosting service.
The two procedures are very analogous. Seeing them side-by-side helps make concrete what you are actually doing even though sometimes you can’t physically see it.
Can be purchased many places, such as Microcenter or Amazon.
I purchased a VPS from Hostwinds. There are various operating systems available. I used Ubuntu 20.04.
I SSH login using the MobaXterm SSH Client. The server is usually a remote computer to which you do not have physical access, so instead of plugging in a keyboard, mouse and screen, you establish a connection that gives you access to the server’s command prompt. SSH stands for secure shell, meaning the data you transfer between your computer and the server are encrypted. SSH is enabled by default in Ubuntu, but not all Linux flavors.
Useful Linux Commands: https://vitux.com/40-most-used-ubuntu-commands/
Connect the Raspberry Pi Zero to your LAN. There is a way to do this with command line but the Raspberry Pi OS connects to WiFi on the initial startup, so just do it on initialization. If you want, to view the saved password with the command line to know generally where WiFi passwords are stored, use
sudo grep psk= /etc/wpa_supplicant/*
which searches the appropriate directory for “psk=” and you see the stored WiFi keys.
Enable SSH. SSH is not enabled by default with Raspberry Pi Zero. Many tutorials tell you to add a blank file to the /boot
folder called SSH
(no extension at all). Use the command touch ssh
, then reboot
. If you do this, notice once SSH is enabled then the file gets deleted so you will not see any change other than the SSH login should work.
Or enable SSH by: in the raspberry pi terminal window, enter sudo raspi-config
, select Interfacing Options
, SSH
, enable it.
2. Ubuntu
Must install openssh-server. Use sudo apt install openssh-server
. Check status after install with sudo systemctl status ssh
.
Find the Raspberry Pi’s own IP address in the command line with ip add
or ip addr
or ifconfig
. The IP will show after wlan0: inet __.__.__.__
Within a LAN, it is often something like 192.168.1.* Alternatively, you can type your router’s IP into your browser and view a list of connected devices. Or, use nmap, sudo apt install nmap
and the command sudo nmap -sn 192.168.1.0/24
(without sudo you won’t see all the MAC addresses)
On a VPS, SSH is (should be) enabled by your host to allow the purchaser to access it. You will get a default username and password from the hosting service who established the VPS with its default settings.
In MobaXterm, “Remote host” is where you specify the IP address of your server, available in your Hostwinds account.
The username is “root”
The password is whatever you set in Hostwinds
At this point, you are using Linux. Either Raspberry Pi OS or Ubuntu are “flavors” of Linux. Having a list of basic commands is helpful:
https://vitux.com/40-most-used-ubuntu-commands/
This step appears complex and does not appear necessary especially this early in the process. Strictly speaking, it is indeed not necessary. You could skip this step and do everything as the root or default user that already exists. However, it is best to do this now because:
sudo adduser new_username
usermod -a -G sudo new_username
Change the password for the current user as desired with:
passwd
Grant all privileges to the user with the command sudo visudo
and add a line in the /etc/sudoers file below the root user line: new_username ALL=(ALL:ALL)ALL
This only allows the user to give itself privileges. The user does not have all read/write privileges like the root itself. Log in as the new user through SSH.
sudo apt update
is the Debian update command (Raspberry Pi OS is based on Debian).
Update Ubuntu (only required if there is a new version of Ubuntu).*
*First, be sure you can login as the non-root super-user before updating Ubuntu as the new install will default to not allow root login. This means if you were planning to just use the existing root user with infinite powers you are now infinitely locked out of your own VPS and have to have your host re-initialize it. Your VPS host changed this setting when it set up your VPS so you can login but when you update the Ubuntu OS, the OS returns to the OS default which is to not allow SSH root login! This is a GREAT example of why to do the user basics as the very first step.
sudo do-release-upgrade
Update the advanced package tool:
(without the -get is newer, so I use it)sudo apt-get update
sudo apt update
L: Linux, already installed. I used 20.04.
A: Apache. The Apache2 default site appears immediately by typing server IP address in browser.
sudo apt install apache2
P: php
sudo apt install php php-mysql
sudo reboot
php -v
You can test php functionality by making index.php file in the /html/ directory and visiting the file in a browser:
<?php
phpinfo();
M: MySQL. Mariadb seems to be the most widely-used version of MySQL, so I installed mariadb instead of the standard MySQL. The XAMPP controller that establishes localhost for developing uses mariadb. Mariadb is a version of MySQL.
sudo apt install mariadb-server
(I don’t think this was necessary) Enable mysqli in /etc/php/7.2/apache2/php.ini by removing comment ‘;’
extension=mysqli ; nate enabled this
also:
sudo phpenmod mysql
To login to MySQL from the Linux command prompt:
sudo mysql -u root
or mysql -u username -p
From the MySQL command prompt, which is “MariaDB” – a version of MySQL, same thing, various self-explanatory commands:
MariaDB [(none)]> CREATE user 'new_username'@'localhost';
SELECT user, host, authentication_string FROM mysql.user;
DROP user 'new_username'@'localhost'
CREATE USER 'new_username'@'localhost' IDENTIFIED BY 'yourpassword';
CREATE database yourdatabasename;
GRANT SELECT, INSERT, UPDATE ON yourdatabasename.* TO 'new_username'@'localhost';
or GRANT ALL ...
ALTER USER 'new_username'@'localhost' IDENTIFIED BY 'yournewpassword';
SHOW DATABASES;
USE yourdatabasename;
CREATE table
This sounds convoluted and it is when you are accustomed to dealing with desktop computers designed for convenience. Linux is designed for security.
Make a new group, sudo addgroup servermanager
, and add the new user to the group, sudo adduser new_username servermanager
, groups new_username
make the new group the owner of the required directories:
sudo chown -v -R :servermanager /var/www/
sudo chown -v -R :servermanager /etc/apache2/sites-available/
sudo chown -v -R :servermanager /etc/apache2/sites-enabled
then modify the directory permission to be written by the owner group:
sudo chmod -v -R g+w /var/www/
sudo chmod -v -R g+w /etc/apache2/sites-available
sudo chmod -v -R g+w /etc/apache2/sites-enabled
Linux has a group and user structure to manage permissions and it is very useful to be able to view the current state:
List all users in the system:
cat /etc/passwd
List all groups on the system:
cat etc/group
or less etc/group
or
getent group
for all members of a single group:
getent group group_name
check ownership of a directory, for example:
ls -ld /var/www/
check ownership of a file:
ls -l /var/www/
Find all the files owned by a particular user (may take some time):
sudo find / -user username
Change the active group for the session, possibly not:
newgrp servermanager
delete a group:
sudo groupdel group_name
delete a user (-r removes the user’s directory and mail spool):
sudo userdel -r username
search “linux octal permissions” to understand the numbering system.
Show all currently logged in users on a system:
w
With the commands above, you gave the non-root super-user sufficient permission to set up sites.
Upload any site directory to /var/www/html/your_site/
Go to /etc/apache2/sites-available/ and copy the default .conf file:
cp 000-default.conf your_site.conf
and modify with the following information:
ServerName your_site.com
ServerAlias www.your_site.com
ServerAdmin you@email.com
DocumentRoot /var/www/html/your_site
Use the following command to enable the site. What it actually does is copy the .conf file from /sites-available/ to /sites-enabled/:
sudo a2ensite your_site
opposite is sudo a2dissite your_site
sudo systemctl reload apache2
to show some server information:
ps aux | grep apache2 | less
#q
to get out of this command.
Once the Pi server is serving a site on its IP within the LAN, making the site available outside the LAN (on the internet) is as simple as directing site requests that arrive to your internet IP to the Pi server. Sounds complicated, but when a browser looks for a website on the internet, it looks on port 80. Most routers have an option to direct all traffic arriving on a specific port to a specific IP within the LAN. Connect to your network’s router to configure it, usually by entering its IP (often 192.168.1.1) into a browser and logging in with a password you set. You should see an option like this under the advanced settings.
Normally, you generate a public and private key on your local computer then copy the public key to the server along with some settings. Hostwinds has an option in server management to generate the key, download the private key, and install the public key on the server. Reboot required.
On a fresh Debian VPN. Per WordPress.org’s own list:
sudo apt install apache2
sudo apt install php
sudo apt install php-curl
sudo apt install php-[the rest of the recommended extensions]
php -m
to see a list of the php extensions installed.
sudo apt install mariadb-server
sudo systemctl start apache2
sudo systemctl start mariadb
sudo mysql_secure_installation
mysql -u root -p
sudo apt install httpd mariadb mariadb-server php php-common php-mysql php-gd php-xml php-mbstring php-mcrypt php-xmlrpc unzip wget -y
To make a backup file, sudo su root
then navigate to root directory, and:
tar cvpzf backup.tgz --exclude=/proc --exclude=/lost+found --exclude=/backup.tgz --exclude=/mnt --exclude=/sys /
Download the resulting file.
To restore:
tar -xvpfz backup.tgz -C /
then, mkdir /proc
, mkdir /lost+found
, mkdir /mnt
, mkdir /sys
reboot
At its lowest level, software must execute code properly on the processor chip itself. Processor architecture is standardized to allow for code to be written and compiled that works across many individual models of chips. Some common architectures with examples are:
IA-32 is the 32-bit version of Intel’s x86 architecture.*
*Notice x86** does not by itself specify an architecture, it is a family of Intel architecture that includes everything from 16-bit released in 1978 to modern 64-bit.
**Note, the x86 Wikipedia article has a good explanation of which chips generally use which ISA.
Released by Intel in 2003, 64-bit began to replace 32-bit.
ARMv8-A is the first 64-bit version of the ARM architecture. ARMv8-A is AArch64, which is the same as ARM64.
ARM is a double-acronym. RISC stands for Reduced Instruction Set Computing. All together, ARM stands for “Advanced Reduced Instruction Set Computing Machine.” The ARM architecture in general is maintained by ARM Ltd. in Cambridge, UK.
Currently, Raspberry Pi does not offer a 64-bit OS, but a beta 64-bit OS is in work and already available for download from the official library.
In a Linux command terminal, you can see processor information including architecture with the command:
lscpu
From Windows PowerShell, you can see processor information including architecture with the command:
systeminfo
Get-WmiObject Win32_Processor