Welcome to PLUG

Celebrating 20 years of Portland's best technical dialog

The Portland Linux/Unix Group (PLUG) is a group of enthusiasts dedicated to teaching and learning about Linux, Unix and related projects. There is no membership fee to join and we welcome people of all levels of experience. PLUG has met since 1994 and hosts monthly General and Advanced Topics presentations plus a hands-on support Clinic.

PLUG is open to everyone and does not tolerate abusive behavior on its mailing lists or at its meetings.

PLUG Mailing Lists, IRC and Twitter

Between meetings, we converse on a number of mailing lists and IRC:

irc.geekshed.net #pdxlinux
chat.freenode.net #orlug

You can also follow PLUG on Twitter at twitter.com/pdxlinux

PLUG General Meeting Information

Our general meetings are held at 7:00 PM on the first Thursday of every month, unless the first Thursday falls on a major holiday. Our meetings are generally held in Room FAB 86-01 of The Fariborz Maseeh College of Engineering and Computer Science Building at Portland State University. This room is hidden away in the basement; but go into the Fariborz Maseeh College of Engineering building, go to down stairs to the basement and wonder around the halls and you will find it.

The Fariborz Maseeh College of Engineering and Computer Science Building (also nick named the New Engineering Building) is at 1930 SW 4th Avenue across from SW College Street. See location H-10 on the PSU campus map.

Many of us head to the Lucky Lab Northwest Beer Hall at 1945 NW Quimby Portland, Oregon after the meeting for refreshments and continued discussion.

Live Streaming

We stream some of our 1st Thursday and 3rd Tuesday 7PM PST meetings at pdxlinux.org/live
Thank you ScaleEngine for providing this service!

Our next General meeting is:

Who: Sumana Harihareswara
What: HTTP Can do THAT?!
Where: PSU, 1930 SW 4th Ave. Room FAB 86-01 (Lower Level)
When: Thursday, June 2nd, 2016 at 7pm
Why: The pursuit of technology freedom
Stream: http://pdxlinux.org/live (PSU WiFi Permitting)

Web developers who only know about GET and POST and use the most popular
headers and response codes are missing out! Underappreciated verbs,
headers, and response codes can boost your web application's
performance, flexibility, and testability, and help you better
appreciate the structure of the web.

The version of the Hypertext Transfer Protocol you will deal with most
is 1.1. As a quick refresher: Clients and servers talk to each other via
HTTP messages (requests and responses), which are clear text comprising
start-lines, headers, and bodies.


GET ("gimme") and POST ("here you go") are overwhelmingly popular, the
Dave Matthews Band of methods. To illustrate their importance: you can
create an API that allows the user to POST but not GET, but that would
be a terrible idea. https://github.com/brainwane/secureapi demonstrates
this with Python 2 code using the BaseHTTPServer standard library.

Using POST to mean "Create resource", "Update resource", and "Delete
resource" is inelegant! So why do we overload POST, and what are the
alternatives? PUT, meaning "create resource," is implemented throughout
the HTTP 1.1 ecology and is unambiguously great; be more careful with
DELETE, which deletes a resource (as demonstrated with Python 2 code
using the BaseHTTPServer standard library and the requests library).
It's also worth looking into PATCH and OPTIONS for specialized use

An exciting alternative to GET is HEAD, which requests only the metadata
about a resource; if the client really only needs to know whether it
could GET a resource, or wants a resource's size, last-modified
timestamp, or other information available in its headers, using HEAD
instead of GET can speed performance by more than 50%. I demonstrate
this using the requests library and the %timeit functionality in

Also, why am I both discussing good and bad ideas throughout this talk,
and how can you tell the difference? Sometimes bad ideas are easy ways
to understand edge cases (also, they're funny). The "horror
world-to-whiteboard scale" gives you my take on whether or not you
should try out what I'm describing.


Call-and-response header pairs such as Last-Modified and
If-Modified-Since/If-Unmodified-Since allow the client to conditionally
specify its preferences; you can save client-side processing time, and
test your application more thoroughly, by knowing and using the right
headers. For instance, check for cache problems by using Cache-Control
and ETag. (But not all headers are useful; for instance, the From header
is basically obsoleted by more advanced analytics and by the User-Agent

We require that clients send a Host header with all requests; Host works
with the path specified in the start-line, the two together forming the
full address of the resource. Sometimes the host is merely the domain
name of the server, but you can't depend on the assumption that the host
will be obvious to all the systems between the client and the server.
The client might send a request to an IP address, or to one of several
virtual hosts that act as subdomains on one host. This level of
redundancy can lead to unintended consequences; for instance, by
intentionally malforming the Host headers of GET requests, spammers can
leave links to their own sites in your access logs.

You can define your own header when sending requests or responses, and
many organizations do this; the convention is to prepend "X-" to bespoke
headers. It's easy to do this when hand-writing requests, and I'll also
demonstrate how to do this in a Python web framework.


Response codes (a.k.a. status codes) have well-specified semantics. For
instance, they come in five numbered classes, and the three-digit
integer should be sufficient to explain the response -- the
"reason-phrase" (the English explanation) should not be a necessary data
point for the client to use when debugging. As several responses sent by
real, working web servers demonstrate, if you don't respect this
principle, the results can be hilariously confusing.

HTTP includes useful response codes that mean more specific things than
"OK" or "nope"; 410 Gone, 304 Not Modified, and 451 Unavailable for
Legal Reasons help you and your users move faster, debug, test, and
recover from unavailable content.

I demonstrate how to alter the reason-phrases in your web application's
response codes, using the http standard library in Python 3:

From "don't cache this" instructions to look-before-you-leap requests to
using the "Content-Disposition" header to tell clients that a resource
should be treated as an attachment, HTTP already contains an
embarrassment of riches. Reading up on it gives you both a feeling of
power, of increased capability, and a sense of wonder, in discovering a
new way to look at the world. What might the web have been? What might
it still be?

Calagator Page: http://calagator.org/events/1250470042

Many will head to the Lucky Lab at 1945 NW Quimby St. after the meeting.

Rideshares Available

PLUG Advanced Topics

We have a monthly talk about topics for advanced Linux users, which usually meets once a month every third Tuesday at 7:00PM

LOCATION: Free Geek Community Technology Center, 1731 SE 10th Avenue, Portland

Our next Advanced Topics meeting is:

Who: Moderator Michael Dexter, PLUG Volunteer
What: Installerfest!
Where: Free Geek, 1731 SE 10th Avenue, Portland
When: Tuesday, May 17th 2016, at 7PM
Why: The pursuit of technology freedom
Stream: http://pdxlinux.org/live

From a mailing list discussion: Let's talk installers.

Not installations, installers. The things that install operating systems
to persistent and bootable storage.

Many of us have written our own over the years and at a bare minimum,
Michael can show what he's been doing with his virtualization things.

On deck: OpenBSD, FreeBSD, (thing you bring)

Calagator Page: http://calagator.org/events/1250469902

PLUG Clinics

PLUG volunteers hold a monthly clinic to help one and all with their Linux (and other *NIX) computer problems on the third Sunday of every month from 1PM to 5PM.

LOCATION: Free Geek Community Technology Center, 1731 SE 10th Avenue, Portland

NOTE: Free Geek is closed Sundays, and no one will be answering the phones. Please enter through the south door, next to the Thrift Store. We'll have a sign by the door.

PLUG Open Call for Participation

PLUG hosts two speakers a month and welcomes first-time presenters. Please send to the mailing list for discussion or to Michael Dexter 503-789-8978 directly:

A 50 to 300 word description/abstract of the talk

Optional speaker(s) bio(s)

Optional slides to be posted at pdxlinux.org

Optional handouts

Optional extended abstract and full academic paper

While the majority of PLUG talks are about open source technologies, we welcome policy-related talks and stories about your unique experiences in the technology field. Do not hesitate to ask if a topic is appropriate or for help developing a talk.

Other Regional Events

Visit the calagator.org the most comprehensive and up-to-date index of Portland area tech events.

Past Presentations

2016-05-05 Switching to BSD Unix from GNU/Linux
2016-04-19 Enduring Communities Roundtable
2016-04-07 What's new in PostgreSQL 9.5 - Josh Berkus
2016-03-15 Informal Advanced Topics meeting at the Lucky Lab
2016-03-03 Networking with Puppet and Cumulus
2016-02-16 Linux as a security camera monitoring platform - PDF
2016-02-03 zsh: What is a shell, why do you want to use one, what's so special about zsh - Steve Dum
2016-01-19 Smarter S.M.A.R.T. and related storage challenges
2016-01-07 Rust - Jim Blandy
2015-12-15 FreeNAS 10 CLI
2015-12-03 Git up 'n' go! A Git and GitHub Crash Course
2015-11-17 ARM mbed Development and a Virtualization Roundtable
2015-11-05 Kubernetes - Kelsey Hightower
2015-10-20 OpenNMS
2015-10-01 Open Source at Microsoft: Azure, Linux, node.js and more - Scott Hanselman
2015-09-15 Informal Advanced Topics meeting at the Lucky Lab
2015-09-03 Thinking in ZFS
2015-08-18 Using Mozilla's Heka project for log and event stream processing
2015-08-06 Back to the Future: A brief history of software documentation
2015-07-21 See you at OSCON
2015-07-02 Comments on Making Educational Videos - David Mandel
2015-06-04 Open Hardware and why it matters - MinnowBoard MAX case study
2015-05-19 Life of (Raspberry) Pi
2015-05-07 Block Storage Device Life Cycles
2015-04-21 FreeBSD Virtualization Options
2015-04-02 MP4 Metadata Editing
2015-03-05 Considering the Future of Copyleft: How Will The Next Generation
Perceive GPL? - Bradley M. Kuhn
2015-02-17 Informal meeting at the Lucky Lab
2015-02-05 Escaping GMail
2015-01-01 No Meeting. Happy New Year!
2014-12-16 CFPs from Announcement to Reimbursements
2014-12-04 Conference Warrior
2014-11-06 ownCloud - PDF
2014-10-21 Living Desktop Environment-free
2014-10-02 Diversity in Open Source: What We Can Do
2014-09-16 Meeting Cancelled
2014-09-04 Private Encrypted Communications: The Blackphone
2014-08-19 Software-Defined Radio Hack Session
2014-08-07 Open Sourcing the Modern Battle Rifle: Legal and technical implications in home building the semi-automatic AK-47
2014-07-15 GO TO OSCON
2014-06-05 Security and OpenSSH - Steve Dum PDF
2014-05-20 Hands-on Internet of Things - PDF
2014-05-01 Federated Wiki - Ward Cunningham
2014-04-15 Heartbleed: It's cause, the solution, lessons learned
2014-04-03 Q & A with Linus Torvalds
2014-03-18 Dynamic Tracing with DTrace and SystemTap
2014-03-06 pfSense
2014-02-18 Roundtable: Protecting Your Volunteer Effort from Caustic People
2014-02-06 Public Speaking is the Greatest Skill You Can Possess (CANCELLED)
2014-01-21 Speaking in Public is Easy
2014-01-02 Advanced OpenSSH - PDF
2013-12-17 Lustre Distributed File System
2013-12-05 PC-BSD 10 and the holy trinity of bhyve, Packet Filter and ZFS
2013-11-19 Multi-App Security Analysis: Looking for Android App Collusion
2013-11-07 Samba 4 - Brian Martin
2013-10-15 Virtual Machine Fair: Erlang/ocaml/Haskell VMs, bhyve, Xen & LXCs!
2013-10-03 FreeNAS Plugins - Michael Dexter
2013-09-17 GUI Programming with Qt - Michael Faunce
2013-09-05 Virtual Private Networks - Ted Mittlestaedt
2013-08-01 The Perl Renaissance - Paul Fenwick
2013-07-11 Physical Security and Surveillance - Steve Pasco
2013-06-18 Social Event at the Lucky Lab
2013-06-06 Hacking on the Beagle Bone Black - Russell Senior
2013-05-21 The KURB Kernel UseRspace Bridge
2013-05-02 Confronting Depression - Yshai Boussi
2013-04-04 Mozilla Socorro: an Open Source crash reporting system evolves
2013-03-19 flashrd+nsh OpenBSD Network Appliances
2013-03-07 Mike Rogoway from the Oregonian
2013-02-19 The CASH Music Project
2013-02-07 Open Source Medical Informatics
2013-01-15 Recoupling Computer Science and Computing
2013-01-03 Linux in Schools project: Past, Present, and Future
2012-12-18 Snow! Huddle at the Lucky Lab
2012-12-06 Bootstrapping an open source project community
2012-11-20 Linux Network Driver Development
2012-11-01 CUPS Unix Printing - Daniel Hedlund
2012-10-16 UnMeeting at the Lucky Lab on Hawthorne
2012-10-04 UEFI Secure Boot and Open Source. It's not a 'general war against computation.' - Vincent Zimmer, Intel
2012-09-06 The Joy of LVM - Brian P. Martin, The Happiness of ZFS - Michael Dexter
2012-08-21 Vyatta
2012-08-02 OSCON Feedback and General Questions
2012-07-05 systemd - Intel
2012-06-19 Tech Interviews!
2012-06-07 The Ganeti Virtualization Management System
2012-05-15 Verilog Synthesis - Galen Seitz
2012-05-03 OpenBSD - Bryan Linton
2012-04-17 Roundtable Discussion
2012-04-05 Asterisk, FreePBX and Trixbox
2012-03-20 Linux Containers (LXC) - Brian Martin
2012-03-01 OData Open Data and Interoperability - Microsoft
2012-02-21 FreeNAS 64-bit
2012-01-17 Hands-on FreeNAS
2012-01-05 The xkcd1k Eve Celebration
2011-11-03 Hands-on IPv6, Web Hosting with GitHub - Ted Mittelstaedt and Daniel Hedlund
2011-10-18 The Android Debug Bridge (Root your phone!)
2011-10-06 Arch Linux - Daniel Hedlund
2011-09-20 Roundtable: Web serving in the post-LAMP era
2011-08-04 Open Source in State Agencies
2011-07-19 IPv6 Networking Part 3 - Ted Mittelstaedt
2011-07-07 Rapid Discussions on Any Topic
2011-06-21 IPv6 Cont. - Ted Mittelstaedt
2011-06-02 Introduction to OpenEMR - Tony McCormick
2011-05-17 IPv6 Networking Part 2 - Ted Mittelstaedt
2011-05-05 Comments on the IPv6 Transition - Ted Mittelstaedt
2011-04-19 IPv6 Networking Part 1 - Ted Mittelstaedt
2011-04-07 Canceled to attend Richard Stallman talk
2011-03-15 Release your hardware hacker potential with gEDA
2011-03-03 Free Content and the Data Revolution
2011-02-15 BSD
2011-02-03 What is Open?
2011-01-18 Artificial Neural Networks: Principles and Applications
2011-01-06 Mini-presentations on variety of topics
2010-12-02 Open Source Desktop Publishing with Scribus - John Jason Jordan
2010-11-16 Artificial Neural Networks: Principles and Applications
2010-11-04 Forgerock - Alan Foster
2010-10-19 Ubuntu Release Engineering - Allison Randal
2010-10-07 Zentyal Linux Small Business Server
2010-09-21 The AIDE Tripwire Alternative
2010-09-02 Berkley DB
2010-08-05 Server Sky - Data Centers in Orbit
2010-07-01 Open Source Car Entertainment
2010-06-16 Perl 5 & 6 Gems - Paul Fenwick and Eric Wilhelm
2010-06-03 Puppet - An Introduction - Teyo
2010-05-19 DRBD & Pacemaker part II by Adam Gandelman - LinBIT
2010-05-06 How Linux Containers fit your cloud - Parallels
2010-04-21 What's new in Linux Wireless - Reinette Chatre - Intel
2010-04-01 Rapid Discussions on Any Topic
2010-03-17 What Went Wrong with My Disaster Recovery Plan - Brian Martin
2010-03-04 A Talk by Jeri Ellsworth
2010-02-17 OpenEmbedded - Scott Garman
2010-02-04 A Talk by Jeri Ellsworth (Rescheduled)
2010-01-20 Automated Failure Recovery/High Availability - Dwight Hubbard
2010-01-07 Drupal! What is it good for?
2009-12-16 DRDB HA Clustering on Commodity HW - LinBIT
2009-11-19 Git - Alan Olsen
2009-11-05 Unit Test Your Database!
2009-10-01 BSD Virtualization
2009-09-03 Crash Reporting: Mozilla's Open Source Solution - K Lars Lohn
2009-08-06 Virtualize vs Containerize
2009-07-15 Webslide Presentations That Don't Suck
2009-07-02 Rapid Discussions
2009-06-04 What is Linux Fund?
2009-05-07 Displaying HD Video Content with a PC
2009-04-02 Presentation by Bart Massey
2009-03-05 Fun with blktrace and seekwatcher
2009-02-05 Intro to Digital Forensics
2009-01-21 FreeTUIT - Codeless GUI Programming - Eric Wilhelm
2008-12-04 Some Random Thoughts on Open Source Philosophy
2008-11-19 OpenWrt, it's not just for Linksys Routers anymore
2008-11-06 LANs, iptables, routing, and more
2008-09-17 Perl: Indexing CPAN
2008-09-04 Building Open Source Communities
2008-08-20 Advanced Topics
2008-07-03 Stupid USB Tricks, reading magstripes, barcodes, 10-key pads, and keyboards
2008-06-18 IPv6 networking
2008-06-05 Open Source Unified Threat Management (UTM) - Dan Carrere
2008-03-19 Smalltalk - Randal Schwartz
2008-02-07 MetroFi: How Lame is It? - Russell Senior
2008-01-08 Rapid Discussions on Any Topic by Anyone & Everyone
2008-01-03 Either Mass Replication or Thin Clients
2007-10-15 Power Management Quality of Service (PM_QOS) - Intel
2007-10-04 Open Source Virtualization Xen and Multi-server / Cluster Management - Dan Carrere
2007-09-06 Comments on Starting and Running a Tech Business, especially Aboutus.org
2007-06-07 The Portland State University Aerospace Society's Linux Rocket
2006-06-19 The Eclipse on Linux Project Proposal
2005-10-06 HP Open Source Printing Activities
2005-03-16 Mozilla, the IDE (Internet Development Environment)
(Better archives to come)

Hosted by SpireTech | Linux is a registered trademark of Portland resident Linus Torvalds