<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>HV Open - An Open Technology meetup serving the Hudson Valley of NY State</title>
		<description>A monthly gathering of open technology contributors, users, enthusiasts, and open curious folks. Main meeting with lecture and lightning talks held the first Wednesday of the month at Vassar College.</description>
		<link>https://hvopen.org</link>
		<atom:link href="https://hvopen.org/feed.xml" rel="self" type="application/rss+xml" />
		
			<item>
				<title>Mad Science Fair's 8th year promises Robotic Fun</title>
				<description>&lt;!-- For Immediate Release

Mad Science Fair&apos;s 8th year promises Robotic Fun

**July 2, 2018**  - --&gt;

&lt;p&gt;Makers of all sorts will be showing off their projects
in this year’s Mad Science Fair coming up on Wednesday July 11th -
6pm at Lourdes High School.&lt;/p&gt;

&lt;p&gt;The Mad Science Fair was thought up almost 10 years ago at the Palace
Diner in Poughkeepsie by Joe Apuzzo, long time member of the HV Open
Technology Meetup. Members of HV Open were discussing all kinds of
projects they were working on over dinner. These ranged from simple
blinking of LED lights, building radio equipment, to custom designing
and manufacturing circuit boards overseas. “You know what would be
great, if we had an old time Science Fair, but showing off all these
projects to each other,” said Joe Apuzzo. “It would be like the Mad
Science version of a Science Fair, a Mad Science Fair.”&lt;/p&gt;

&lt;p&gt;And ever since then HV Open has dedicated it’s July meetup to the Mad
Science Fair. Sophi Kravitz, notable local maker who works for
Hack-a-day, once brought an interactive art project that pulsed light
and sound based on your heartbeat. By using a pulse ox sensor, those
typically used during a doctor visit, the art reacted to your own
body, and made for a different experience every time a different
wearer put it on.&lt;/p&gt;

&lt;p&gt;Among the many projects this year will include robots, green screens,
a learn to solder station, geothermal heating, and much more. Matthias
Johnson, IT Director for Lourdes High School, is also the mentor for
the Lourdes robotics team. Every year they compete in a statewide
challenge to build and program robots to navigate a complex obstacle
course. He’ll have some of the robots and parts of the course on
display.&lt;/p&gt;

&lt;p&gt;“It’s always a wonderful night. You find yourself learning so much,
and talking with folks about incredible projects they’ve made.” said
Sean Dague, founder of HV Open. “I always walk away inspired to create
something new.”&lt;/p&gt;

&lt;p&gt;The Mad Science Fair runs from 6 - 8pm on Wednesday July 11th in the
Cafeteria at Our Lady of Lourdes High School in Poughkeepsie NY. For
more information check out the HV Open website - http://hvopen.org.&lt;/p&gt;

&lt;h2 id=&quot;contacts&quot;&gt;Contacts:&lt;/h2&gt;

&lt;p&gt;HV Open:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Sean Dague, sean@dague.net&lt;/li&gt;
  &lt;li&gt;Matthias Johnson, matthias.a.johnson@gmail.com&lt;/li&gt;
&lt;/ul&gt;
</description>
				<pubDate>Mon, 02 Jul 2018 08:00:00 -0400</pubDate>
				<link>https://hvopen.org/2018/07/msf</link>
				<guid isPermaLink="true">https://hvopen.org/2018/07/msf</guid>
			</item>
		
			<item>
				<title>The New HV Open Website</title>
				<description>&lt;p&gt;As part of the rebranding to HV Open it was time to simplify the
platform for the website at the same time. I had a few requirements
going into this.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;There had to be a way to sync to meetup. I hate double data entry.&lt;/li&gt;
  &lt;li&gt;It should be mobile friendly / responsive.&lt;/li&gt;
  &lt;li&gt;The server costs to maintain should be low. That’s both hardware
resources, but also the time it takes to do regular security
maintenance of the software stack.&lt;/li&gt;
  &lt;li&gt;All the old meeting urls had to be maintained (even if through
redirects). People put these in their resumes showing that they have
public speaking experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;!--more--&gt;

&lt;p&gt;The 3rd generation of the website was based on Drupal, which worked
well for us. But it was started under the idea that more user
generated content would be hosted there. The reality is, that never
really happened. Also, at the time I was maintaining a Drupal site for
the Poughkeepsie Farm Project, but they migrated off of that nearly 5
years ago.&lt;/p&gt;

&lt;p&gt;The website really exists to answer the following questions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What’s the next meeting&lt;/li&gt;
  &lt;li&gt;What other events are coming up&lt;/li&gt;
  &lt;li&gt;What other institutional memory should we write down so we don’t
forget, and neither do others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I had originally intended to make the 4th generation be based on
Wordpress. I maintain an instance for
my &lt;a href=&quot;https://dague.net&quot;&gt;blog&lt;/a&gt;. Wordpress’ auto update functionally
makes staying up to date on security patches easy. But, after
contributing to Home Assistant and Kubernetes docs, I decided to make
a late change and go with Jekyll instead.&lt;/p&gt;

&lt;h2 id=&quot;dive-into-jekyll&quot;&gt;Dive into Jekyll&lt;/h2&gt;

&lt;p&gt;Jekyll is a static site generator written in Ruby. One of the more
well known in the space. The source is a bunch of annotated markdown
files, then it compiles HTML out of it. Like any compiler, you pay a
cost up front for that, so builds take noticable time (especially once
you import the 180 old events). However, that build time means a quite
quick website on the other side.&lt;/p&gt;

&lt;p&gt;It took about a week to find a base theme that worked for me. There
are tons of Jekyll themes out there, but most of them focus on blogs,
resumes, or product pages. I needed a relatively un-adulterated
bootstrap theme. I eventually found (Jekyll
Clean)[https://github.com/scotte/jekyll-clean]. The site is a fork of
that respository, though modified enough that it’s origins are not
obvious.&lt;/p&gt;

&lt;p&gt;I did look at some other static site systems, but two things made my
decision. Jekyll is designed to be extended, not just with custom
tags, but in a number of ways. I’ve now written 2 plugins for Jekyll
(more below). Secondly, two of the projects I contribute to use
Jekyll, so anything I learn here can be applied there.&lt;/p&gt;

&lt;h3 id=&quot;embracing-jekyll&quot;&gt;Embracing Jekyll&lt;/h3&gt;

&lt;p&gt;Jekyll has a concept of posts (blog posts) and pages out of the
box. But you can also build custom types via the collections
mechanism. For HV Open the custom types are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;events&lt;/code&gt; and
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locations&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;With the gen3 website, I realized that we only really have about 6
locations we ever do anything in. It’s much easier to provide the
information about a location once, and reference it in events. That
means the location page can include a map if people want to drill down
that far. In the gen3 site that was a custom google map, but with the
greater control in gen4 I can use leaflet.js and have pretty maps
based on Open Street Maps.&lt;/p&gt;

&lt;p&gt;Events are key. We have 12 meetings a year, 12 lunches a year, 4
leadership meetings, and then sometimes want to cross promote with
other groups. Events drive the front page (what’s next, what’s
coming). Events also need enough information that we can sync them to
meetup. That means 2 dates (start and end), location field, and
types.&lt;/p&gt;

&lt;div class=&quot;language-yaml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;na&quot;&gt;collections&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;events&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Events&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;permalink&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/:collection/:year/:month/:title&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;locations&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;output&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Locations&lt;/span&gt;
    &lt;span class=&quot;na&quot;&gt;permalink&lt;/span&gt;&lt;span class=&quot;pi&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;/:collection/:title&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These custom types live under &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_events&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_locations&lt;/code&gt; in the
repository respectively.&lt;/p&gt;

&lt;h2 id=&quot;extending-jekyll&quot;&gt;Extending Jekyll&lt;/h2&gt;

&lt;p&gt;I’ve written two custom plugins for Jekyll for the hvopen site, one
for mapping, and one for ical.&lt;/p&gt;

&lt;h3 id=&quot;mapping&quot;&gt;Mapping&lt;/h3&gt;

&lt;p&gt;The
&lt;a href=&quot;https://github.com/hvopen/hvopen-website/blob/master/_plugins/map.rb&quot;&gt;map plugin&lt;/a&gt; is
used on location pages to inject a custom leaflet.js map for those
pages. It’s build as a custom tag that you insert in pages (or
layouts) where you want a map.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;/locations/300-rockefeller-hall&quot;&gt;&lt;img src=&quot;/images/posts/leaflet-map.png&quot; alt=&quot;Leaflet.js map&quot; title=&quot;Example of Leaflet&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the old system, I had hand crafted a Google Map and embedded it via
an iFrame. Now this can be done by providing enough metadata in a
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;location&lt;/code&gt; that it can be rendered on the fly in a leaflet map. That
includes not only the location pin, but the optional parking marker as
well.&lt;/p&gt;

&lt;p&gt;Leaflet is backended by &lt;a href=&quot;https://www.mapbox.com/&quot;&gt;Mapbox&lt;/a&gt;, which
uses &lt;a href=&quot;https://www.openstreetmap.org&quot;&gt;Open Street Map&lt;/a&gt; data.&lt;/p&gt;

&lt;h3 id=&quot;calendar&quot;&gt;Calendar&lt;/h3&gt;

&lt;p&gt;The
&lt;a href=&quot;https://github.com/hvopen/hvopen-website/blob/master/_plugins/cal.rb&quot;&gt;calendar plugin&lt;/a&gt; provides
an ical feed for upcoming events. That provides a portable way to
export our events to other services. This was a walk back in time to
the ruby icalander gem, which I was once a maintainer.&lt;/p&gt;

&lt;p&gt;The calendar plugin is a jekyll generator, which creates a static page
early in the rendering process, that is then copied into the site for
publication. This took a little more effort to figure out, and some
reading of the jekyll source code itself. Examples around generators
are more scarce.&lt;/p&gt;

&lt;h2 id=&quot;lots-of-metadata&quot;&gt;Lots of Metadata&lt;/h2&gt;

&lt;p&gt;The primary purpose of the website is to make it easy to find out
about upcoming events. One of the ways to do this was to be better
about structured metadata that search engines, social networks, and
message services use. An article from the slack team
about
&lt;a href=&quot;https://medium.com/slack-developer-blog/everything-you-ever-wanted-to-know-about-unfurling-but-were-afraid-to-ask-or-how-to-make-your-e64b4bb9254&quot;&gt;unfurling&lt;/a&gt; was
rather inspiring there. That means there are open graph and twitter
card tags in every event.&lt;/p&gt;

&lt;p&gt;It also means using the &lt;a href=&quot;http://schema.org/Event&quot;&gt;schema.org&lt;/a&gt; standard
for describing events:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@context&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;http://schema.org&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Event&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;location&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Place&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;address&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;@type&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;PostalAddress&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;addressLocality&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Poughkeepsie&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;addressRegion&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;NY&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;postalCode&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;12604&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;streetAddress&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;Vassar College&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
        &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;300 Rockefeller Hall 3rd Floor Auditorium&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;

    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;HV Open Lecture: Unity 3D Development&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;

    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;startDate&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;2018-04-04T18:00:00-04:00&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;endDate&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;2018-04-04T20:00:00-04:00&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;These are embedded in every event page header and make the pages more
machine friendly. Some of this may start popping up in the way the
site is displayed in google once the great reindexing is done.&lt;/p&gt;

&lt;h2 id=&quot;meetup-sync&quot;&gt;Meetup Sync&lt;/h2&gt;

&lt;p&gt;We started using meetup about 8 years ago as a way to find new
members. Meetup is good about cross promoting events based on
geography and interests. But the last thing I ever wanted to do was
have to enter events into multiple systems. In the gen3 site I wrote a
custom Drupal plugin that updated meetup inside the save hook.&lt;/p&gt;

&lt;p&gt;While Jekyll does support custom commands, because of the way this is
hosted (more in a minute), this is always going to be an offline
activity. But it shouldn’t be harder than running a simple sync
command. I wrote
a
&lt;a href=&quot;https://github.com/hvopen/hvopen-website/blob/master/meetup-sync.py&quot;&gt;sync script&lt;/a&gt; in
python.&lt;/p&gt;

&lt;p&gt;The script takes a single argument, which is the event source file
that should be synced. If it already has a meetup_id in it’s
frontmatter header, this is an update call. If not, it creates the
event, which returns a meetup_id, and rewrites the file with it
included. Meetup posts support a &lt;strong&gt;very&lt;/strong&gt; limited set of html (which
does not include header tags or lists), so this does substantial
massaging to make the meetup post be legible.&lt;/p&gt;

&lt;p&gt;There is a wrapper shell script that will look through recent git
history for changed events, and call out to the sync script. That will
eventually end up under cron control, though right now it’s manual.&lt;/p&gt;

&lt;h2 id=&quot;netlify-hosting&quot;&gt;Netlify Hosting&lt;/h2&gt;

&lt;p&gt;In contributing to the Kubernetes Docs I
discovered &lt;a href=&quot;https://www.netlify.com/&quot;&gt;Netlify&lt;/a&gt;. They automate the
process of building static sites like this. Once of their services is
rendering draft output on pull requests, making it much easier to
review documentation pull requests.&lt;/p&gt;

&lt;p&gt;But, they also offer hosting for static sites in their CDN
infrastructure. That includes managing SSL certificates
via &lt;a href=&quot;https://letsencrypt.org/&quot;&gt;letsencrypt&lt;/a&gt;, as well as optimizing
assets for faster load. I decided to embrace that, given that if
anything happens with their service we could easily retarget to local
hosting in about 24 hours.&lt;/p&gt;

&lt;p&gt;The slideshow for upcoming events is also now hosted in their
infrastructure at &lt;a href=&quot;https://live.hvopen.org&quot;&gt;live.hvopen.org&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;migration-of-old-content&quot;&gt;Migration of Old Content&lt;/h2&gt;

&lt;p&gt;Before hvopen.org went live, I wanted to make sure all the old
meetings were imported, and that their urls from the old site still
worked. I was able to build a json export view of all the old
meetings, and
a
&lt;a href=&quot;https://github.com/hvopen/hvopen-website/blob/master/tools/importer.py&quot;&gt;tool&lt;/a&gt; which
took that and wrote them out. The trickiest part of this was scrubbing
and converting the html for the posts into reasonable markdown. The
graphical editor for Drupal makes some weird decisions about
whitespace at time that I had to regex clean up.&lt;/p&gt;

&lt;p&gt;Maintaining the stable urls is done with
the
&lt;a href=&quot;https://github.com/jekyll/jekyll-redirect-from&quot;&gt;jekyll-redirect-from&lt;/a&gt;
plugin. The redirects are listed in the frontmatter header, then when
the site is generated it builds a set of redirect pages at all the old
urls. That ensures that anyone who has listed their talk at MHVLUG in
the past in a resume or article won’t have a broken link.&lt;/p&gt;

&lt;p&gt;Any migration is imperfect. We have not yet moved over older meeting
notes (we probably will) or non meeting events (we probably
won’t). There are also some broken images in the old meetings because
not every image file has been brought over. That’s going to be a
slower fixing process as we go.&lt;/p&gt;

&lt;h2 id=&quot;contributing&quot;&gt;Contributing&lt;/h2&gt;

&lt;p&gt;The entire website, including all the custom code I talked about, is
up
on &lt;a href=&quot;https://github.com/hvopen/hvopen-website&quot;&gt;github&lt;/a&gt;. Contributions
are welcomed as pull requests, which allow netlify to build the
proposal and make sure it looks right before we merge. If you want to
fix a broken link or a typo or anything else, please do!&lt;/p&gt;

&lt;h2 id=&quot;jekyll-thus-far&quot;&gt;Jekyll thus far&lt;/h2&gt;

&lt;p&gt;It’s been a very interesting learning journey thus far. There are
things I love about Jekyll, like how fast the site is to load for
people. It’s consistently sub second response now, the best I could
get on the Drupal stack even after pretty aggressive caching was 3 - 4
seconds. I love how extensible it is, and that with the level of
control I have in the templates and plugins it’s actually very easy to
get a site to be exactly what I want. Full CMS stacks have so many
layers between content and rendering that it’s often hard to get that.&lt;/p&gt;

&lt;p&gt;I don’t love the build speed for local development, which seems to
have non-linear slow down on the number of events in the system. At
180 events we’re at about 4 minutes on a local build (depending on
your hardware). Unfortunately you can’t do the render in parallel. I’ve
worked around that with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_config_fast.yml&lt;/code&gt; which excludes all events
prior to 2018.&lt;/p&gt;

&lt;p&gt;I also found the documentation on Jekyll extremely lacking. The
&lt;a href=&quot;https://jekyllrb.com/docs/plugins/&quot;&gt;plugins page&lt;/a&gt; talks about the
different kinds of plugins, but typically provides only one very
simple example. Everything I was trying to do was more complicated
than that, so I ended up having to just read a lot of existing jekyll
plugins, and the jekyll source code to figure out how to do
things. It’s one of the advantages of open source, I could do that,
but it would have been nicer if I didn’t have to.&lt;/p&gt;

&lt;p&gt;Also the jekyll docs don’t replicate anything in the liquid template
docs, so you typically have to have both pages up in tabs and flip
back and forth between them to build a unified list of tags in your
head. Documentation that’s this normalized is easier to maintain, but
much harder to consume.&lt;/p&gt;

&lt;p&gt;Overall I’m very happy with this choice, and that when I did need to
extend jekyll I could do it without modifying core code. I also love
how fast it is for users, and will put up with it being a little
slower to build locally for me.&lt;/p&gt;
</description>
				<pubDate>Mon, 26 Mar 2018 15:00:00 -0400</pubDate>
				<link>https://hvopen.org/2018/03/hvopen-website</link>
				<guid isPermaLink="true">https://hvopen.org/2018/03/hvopen-website</guid>
			</item>
		
			<item>
				<title>MHVLUG becomes HV Open</title>
				<description>&lt;p&gt;&lt;img src=&quot;/images/logo_medium.png&quot; alt=&quot;HV Open Logo&quot; title=&quot;HV Open Logo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;15 years ago MHVLUG was formed around the nascent Linux operating
system. Linux was just transitioning from the hobbyist and ISP realms
into every day work in non technology businesses. What Linux needed
was human networks where people could get together and help each other
with what they were learning. MHVLUG was created to be that kind of
place. We started a monthly lecture series to share our expertise. We
held regular weekend install fests to help people install and
configure Linux on their computers.&lt;/p&gt;

&lt;!--more--&gt;

&lt;p&gt;A lot has changed in 15 years. Linux is now everywhere. As a group, we
branched out from just Linux pretty quickly. Over the past few years
our agenda has rarely included Linux itself. Open data efforts, like
Open Street maps. Preservation of culture efforts, like the Internet
Archive. Even addressing other challenges we have in the field, like
Overcoming Imposter Syndrome. Our content evolved, but the name
remained the same.&lt;/p&gt;

&lt;p&gt;A name is a first impression. And it became more and more clear that
Linux User Group comes with a lot of preconceptions in the minds of
folks not familiar with our group. Those preconceptions keep folks
away. Folks we’d love to have in the room, on the stage, and part of
our leadership team. 15 years is a nice round number, and a sensible
place to make the break from the old to the new.&lt;/p&gt;

&lt;h3 id=&quot;what-does-this-mean-for-the-monthly-meetings&quot;&gt;What does this mean for the monthly meetings?&lt;/h3&gt;

&lt;p&gt;Very little. Meetings will still be happening every 1st Wednesday and
the content will largely be similar. This gives us a little more
freedom on topic choices, anchored around the concept of open
technologies.&lt;/p&gt;

&lt;h3 id=&quot;what-does-this-mean-for-the-website&quot;&gt;What does this mean for the website?&lt;/h3&gt;

&lt;p&gt;Over the next 6 months we’ll be converting over to the new branding
across our website and all the social networks we participate in. As
this is a nights and weekend effort, it will take a while. Expect to
see both mhvlug and hvopen references for a while.&lt;/p&gt;

&lt;h3 id=&quot;lots-of-thanks-to-go-around&quot;&gt;Lots of thanks to go around&lt;/h3&gt;

&lt;p&gt;Thanks to Al Jachimiak for triggering the rebrand idea
initially. Thanks to Milo Axelrod for working with us to provide the
new branding. Thanks to the leadership team for helping shephard this
process along.&lt;/p&gt;
</description>
				<pubDate>Fri, 09 Mar 2018 15:00:00 -0500</pubDate>
				<link>https://hvopen.org/2018/03/mhvlug-becomes-hvopen</link>
				<guid isPermaLink="true">https://hvopen.org/2018/03/mhvlug-becomes-hvopen</guid>
			</item>
		
	</channel>
</rss>
