Tag Archives: linux

LFNW 2016 command-line talk follow-up materials

Here are follow-up materials for my talk at LFNW 2016.



Open raw notes in a new window/tab

2016-04-23 LinuxfestNW

The Command Line 

Adam - published author, speaker, co-founder of SeaGL
notes by James Zeringue ([email protected])

Thank you blug/btc for hosting! 

The command line is a great place to leverage other's knowledge and hard work, which they have already shared!

                                at, rename, locate

                                Highly customizable automation at the tip of your fingers.

The Command line as a tank, which is given away for free:

	"Save your money! Take one of our free tanks!"

	Station wagon buyer "i don;t know how to maintain a tank!"

	"volunteers will fix it for you for free while you sleep!"

	Buyer: "stay away from our home!!"

CMD	j dotfiles	(change dir and list contents)
	Ctrl-r		Reverse interactve command history search

SHELL	fish		friendly interactive shell
		fish automatically lists completion possibilities 
		auotmagic syntax highligting on the command line
		advanced tab-completion with list of possible matches w/ descriptions
		web-based config

CMD	alt-.		argument history, repeat to go back

	globs		groups of files expanded by the shell

	watch		run multiple commands and monitor their output at intervals
			highlights changed output in the commands

	dirjump	(j)	maintains index of visited paths, then performs a smart autocomplete when using j command

"What is the difference between python and shell version?"
A: The shell is an interactive programming language, while python is more of a programming langunage.

cmd	locate		find files by index (always uses pre-cached index, contrast with find which reads filenames in real-time)

cmd	pv		progress meter (see pipes)

cmd	progress	detects and monitors interesting commands and monitors

cmd	toilet		(colorful banners in the console)

cmd	nmap		find hosts on network, much more
		* masscan has Adam's favorite README on github ( https://github.com/robertdavidgraham/masscan )

	text editor, standard in any *nix system
			enhanced status line capabilities
		tight integration with git
		Syntastic enables inline error checking on save with line highlighting
	multiple windows
	folds - hide/show information in sections
	'snippets' - "ultisnips+youcompleteme"
			templated auto complete and code snippet plugins
	(xkcd about vim users spending time editting vimrc files)

HOWTO - make this environment portable?
	automate it! host all dotfiles and rcfiles and download them on-demand
		check github for a management solution

tmux	terminal multiplexer
		sits between you and the command line
		allows multiple connections to the same terminal for collaboration

You should VERSION-CONTROL your plaintext!
	"indispensible" tool
	github, others

Free Software Claus is Coming to Town

I help organize a conference for Free Software enthusiasts called SeaGL. This year I’m proud to report that Shauna Gordon McKeon and Richard Stallman (aka “RMS”) are keynote speakers.

I first invited RMS to Seattle 13 years ago, and finally in 2015 it all came together. In his words:

My talks are not technical. The topics of free software, copyright vs community, and digital inclusion deal with ethical/political issues that concern all users of computers.

So please do come on down to Seattle Central College on October 23rd and 24th, 2015 for SeaGL!

Yes, You Should Swap

If you’ve ever set up a machine by hand, you’ve probably had to decide how much of your disk to set aside as swap.

I’ve often wondered “why swap at all”? This quote by Nick Piggin from 2004 finally helped me answer the question.

no matter how much ram you have, swap can increase performance by allowing unused anonymous memory to be paged out, thereby increasing your maximum effective RAM

Found via this post on Hacker News, where the poster raises the point that some filesystem buffers might be extremely “hot” (frequently used), but might only fit in physical RAM (where they should be) if some swap space is available to page out other “cold” information.

Debugging web tests on remote servers

I run “web tests” on a remote server. I use Selenium to act like a person interacting with a website, viewing and entering data. Selenium is pretty awesome, it can drive a real web browser like Firefox.

Even better is to have these web tests run automatically every time I commit code. I use Jenkins for this. Jenkins even fires up a headless desktop so Selenium can run Firefox.

When a web test breaks (especially in some way I can’t reproduce on my local desktop), sometimes it helps to actually see what Jenkins sees as it runs the test. Here’s a quick guide for doing so on an Ubuntu GNU/Linux server.

  1. Connect to the remote server using SSH. Install VNC server:
    sudo apt-get install vnc4-server
  2. On the remote server, become the user tests run as. For example:
    sudo su - ci
  3. Set a password for the VNC server using the vncpasswd command.
  4. Start headless X server by running vncserver. Note the given display. If example.com:1 is included in the output of vncserver, the display is :1.
  5. Figure out which port the VNC server is using. I usually do something like

    sudo netstat -nape | grep '^tcp.*LISTEN.*vnc.*'

    Here’s some example output:

    tcp        0      0  *               LISTEN      107        3099855     13233/Xvnc4     
    tcp6       0      0 :::5901                 :::*                    LISTEN      107        3099858     13233/Xvnc4

    By trial and error, I figured out that 5901 was the port I should use.

  6. Port-forward VNC to your local machine.

    1. Disconnect from the server.
    2. Reconnect, including -L10000:localhost:5901 on your SSH command line.
    3. Leave this connection open.
  7. On your local machine, connect a VNC client to localhost:10000. An X terminal should be displayed.

  8. In the X terminal, run your web tests.

  9. When finished debugging, kill the X server using the display noted earlier.
    vncserver -kill :1