So I installed IPython today. It was a bit of an adventure, so thought I’d document it here, in case it helps anyone else (including my future self, heh):
- Installed Python 3.6 (the default, 2.7, included with macOS, isn’t new enough). This puts the “python3” executable on your machine, which you can invoke similarly to “python” (which will invoke the default OS-supplied Python, probably 2.7).
- Got ‘pip‘. Note this was a convoluted process that involved copying some text from the pip website, pasting it into a text file, then executing that text file from python3 like so: ‘python3 get-pip.py’ (without the quotes). This yielded the ‘pip3.6’ executable, located here: /usr/local/bin/pip3.6
- Used the ‘pip3.6’ executable to download ‘ipython’: /usr/local/bin/pip3.6 install ipython
- Noticed that IPython looked like it installed correctly, but ‘ipython’ didn’t run from the command line immediately after that, and the installation path wasn’t noted anywhere in the installation output. Turns out, IPython added its installation location to my PATH via my .bash_profile file, but didn’t tell me. I reloaded my .bash_profile like this, and all was good: source ~/.bash_profile
- Now I’ve got IPython! Invoke like this from the command line like this: ‘ipython’. Output looks like this:
- Macintodffeb798:local me$ ipython
Python 3.6.3 (v3.6.3:2c5fed86e0, Oct 3 2017, 00:32:08)
Type ‘copyright’, ‘credits’ or ‘license’ for more information
IPython 6.2.1 — An enhanced Interactive Python. Type ‘?’ for help.In :
Simple! Just create an SSH tunnel. Or a couple of them.
Create SSH tunnel to MySQL server running on port 3306 on 192.168.213.207 so that server appears to be running locally on port 3307:
ssh -L 3307:127.0.0.1:3306 firstname.lastname@example.org -NnT
Create SSH tunnel to MySQL server running on port 3306 on machine2 so that server appears to be running locally on port 3308:
ssh -L 3308:127.0.0.1:3306 root@machine2 -NnT
Compare the fancyDatabaseName database on each machine using the
mysqldbcompare tool (part of the
/usr/local/bin/mysqldbcompare --email@example.com:3308 --firstname.lastname@example.org:3307 fancyDatabaseName
Explanation of flags to ‘ssh‘:
Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side. This works by allocating a socket to listen to port on the local side, optionally bound to the specified bind_address. Whenever a connection is made to this port, the connection is forwarded over the secure channel, and a connection is made to host port hostport from the remote machine. Port forwardings can also be specified in the configuration file. IPv6 addresses can be specified with an alternative syntax:
[bind_address/]port/host/hostport or by enclosing the address in square brackets. Only the superuser can forward privileged ports. By default, the local port is bound in accordance with the GatewayPorts setting. However, an explicit bind_address may be used to bind the connection to a specific address. The bind_address of ”localhost” indicates that the listening port be bound for local use only, while an empty address or ‘*’ indicates that the port should be available from all interfaces.
-N will disable the ability to execute a remote command.
-n will prevent reading from stdin.
-T will disable the pseudo-terminal allocation.
Thinking about replacing my iMac’s internal HD. Making a note here of someone else who has done it so I don’t forget.
My 2009 27″ iMac is starting to show its age. So when its hard drive started crunching this morning (and bringing the machine to a crawl), I wanted to know a little more. The command-line utility fs_usage is good if there’s not much going on, but if there’s a lot, the information flies by far too quickly to get good sense of what’s going on.
fseventer — donation-ware by Robert Pointon of fernLighting — is a great way to figure out what’s going on. It provides the interesting information from
fs_usage, but it does so in a fun, visual, animated way. Highly recommended.