<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Code Vamping</title><link>https://www.codevamping.com/</link><description>Recent content on Code Vamping</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 30 Nov 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://www.codevamping.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Create and Sign a MacOS PKG Installer</title><link>https://www.codevamping.com/2023/11/macos-pkg-installer/</link><pubDate>Thu, 30 Nov 2023 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2023/11/macos-pkg-installer/</guid><description>&lt;p>Creating and Signing a PKG installer for MacOS devices is not
hard, but the available resources can be confusing.&lt;/p>
&lt;p>In this article, I will detail the steps required to create and sign a pkg
installer for a VST3 plugin. These same steps will also work for an application.&lt;/p></description></item><item><title>Next.js and Bootstrap</title><link>https://www.codevamping.com/2023/09/next-js-and-bootstrap/</link><pubDate>Thu, 14 Sep 2023 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2023/09/next-js-and-bootstrap/</guid><description>Before You Start I will be assuming the following :
You will be using Next.js &amp;gt;= 13 with app routing rather than the legacy page routing. You will be using Boostrap &amp;gt;= 5.3 so that jquery is not required. You already know a fair amount about Next.js You are starting fresh with a new Next.js project. These instructions can be used to retrofit Boostrap into an existing project, however. Install NPM Create a new Next.</description></item><item><title>Hugo and Bootstrap</title><link>https://www.codevamping.com/2023/09/hugo-and-bootstrap/</link><pubDate>Fri, 08 Sep 2023 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2023/09/hugo-and-bootstrap/</guid><description>&lt;p>Setting hugo to use bootstrap in a way that allows for customization is not
difficult, but isn&amp;rsquo;t transparent either.&lt;/p></description></item><item><title>House Cleaning</title><link>https://www.codevamping.com/2023/09/house-cleaning/</link><pubDate>Sun, 03 Sep 2023 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2023/09/house-cleaning/</guid><description>&lt;p>Haven&amp;rsquo;t posted here in a while, but thought it was time to do a little cleaning.&lt;/p></description></item><item><title>More Than One Way to Digest a Sugar</title><link>https://www.codevamping.com/2020/08/digesting-sugars/</link><pubDate>Tue, 18 Aug 2020 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2020/08/digesting-sugars/</guid><description>Central Asian peoples have been dairy farming for a long time, but are lactose intolerant. How does that work?</description></item><item><title>Human Perception and Neolithic House Orientation</title><link>https://www.codevamping.com/2020/01/human-perception-and-neolithic-house-orientation/</link><pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2020/01/human-perception-and-neolithic-house-orientation/</guid><description>A &lt;a href="https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0226082">Study in the journal
PLOS&lt;/a>
suggests a method to figure out the relative order of house construction based
on a quirk of the human visual system</description></item><item><title>Using GCP Secret Manager in Cloud Functions</title><link>https://www.codevamping.com/2019/12/gcp-secrets-manager/</link><pubDate>Sun, 12 Jan 2020 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/12/gcp-secrets-manager/</guid><description>&lt;p>&lt;a href="https://cloud.google.com/secret-manager/docs/">GCP Secret Manager&lt;/a> is a beta
service to store and manage the various secrets (API Keys, etc) that
applications and services may need. This article explains how to use the API
from a Cloud Function.&lt;/p></description></item><item><title>Getting purgecss to read from stdin</title><link>https://www.codevamping.com/2020/01/purgecss_stdin/</link><pubDate>Mon, 06 Jan 2020 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2020/01/purgecss_stdin/</guid><description>Small wrapper to run &lt;a href="https://www.purgecss.org">purgecss&lt;/a> on css from stdin.</description></item><item><title>Build Hyper-V Arch VM</title><link>https://www.codevamping.com/page/build-hyper-v-arch-vm/</link><pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/build-hyper-v-arch-vm/</guid><description>&lt;p>A raw list of notes about putting together a Hyper-V Arch Linux VM. Take with
a grain of salt.&lt;/p>
&lt;p>This adds most of the stuff I use for my development.&lt;/p>
&lt;p>More will be added as I still need to figure out sharing files between the host
and guest.&lt;/p></description></item><item><title>Journey to DNS Nirvana (maybe?)</title><link>https://www.codevamping.com/2019/12/dns-nirvana/</link><pubDate>Mon, 30 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/12/dns-nirvana/</guid><description>&lt;p>During my various hikes through the woods of the internet, I came across &lt;a href="https://dnsspy.io">DNS
Spy&lt;/a> one of the many dns checkers like, well, &lt;a href="https://dnschecker.org">DNS
Checker&lt;/a>. But it offers constant monitoring like, for
example &lt;a href="https://www.thousandeyes.com/lps/dns-monitoring">Thousand Eyes&lt;/a>.&lt;/p>
&lt;p>codevamping.com is definitely a &amp;ldquo;vanity site&amp;rdquo; that I am not trying to monetize in any
way. The only thing that would really be hurt if things go south is my ego. But
DNS Spy offered a free scan, so why not.&lt;/p></description></item><item><title>Getting Started With Google Cloud Functions</title><link>https://www.codevamping.com/2019/12/getting-started-with-google-cloud-functions/</link><pubDate>Sun, 15 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/12/getting-started-with-google-cloud-functions/</guid><description>&lt;p>Google has created a &lt;em>lot&lt;/em> of documentation around the use and creation of
cloud functions. But it is a bit scattered and can be hard to piece together.&lt;/p>
&lt;p>This article is an attempt to bring the basics into one place for easy
reference. Along the way, I&amp;rsquo;ll hopefully add a bit of guidance as well.&lt;/p></description></item><item><title>Simple Scheduled Netlify Deploy</title><link>https://www.codevamping.com/2019/11/simple-scheduled-netlify-deploy/</link><pubDate>Mon, 02 Dec 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/11/simple-scheduled-netlify-deploy/</guid><description>A simple way to automate Netlify redeploys using Google Cloud Scheduler</description></item><item><title>Site Redesign</title><link>https://www.codevamping.com/2019/11/site-redesign/</link><pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/11/site-redesign/</guid><description>&lt;p>The site is a year old, so of course, a redesign is needed. New looks, New
comments, and more.&lt;/p></description></item><item><title>std::string Gotcha</title><link>https://www.codevamping.com/2019/11/std_string-gotcha/</link><pubDate>Mon, 18 Nov 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/11/std_string-gotcha/</guid><description>&lt;p>std::string has some useful features, but be careful.&lt;/p></description></item><item><title>Working on a Remote VM</title><link>https://www.codevamping.com/2019/10/working-on-a-remote-vm/</link><pubDate>Mon, 04 Nov 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/10/working-on-a-remote-vm/</guid><description>&lt;p>Logging into a remote VM from a local VM. Getting from here to there isn&amp;rsquo;t all
that hard.&lt;/p></description></item><item><title>Close Primes</title><link>https://www.codevamping.com/2019/10/close-primes/</link><pubDate>Mon, 21 Oct 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/10/close-primes/</guid><description>&lt;p>There is a recent paper that contains progress on proving the conjecture that
there are &lt;a href="https://www.nature.com/news/first-proof-that-infinitely-many-prime-numbers-come-in-pairs-1.12989">infinitely many pairs of twin
primes&lt;/a>&lt;/p>
&lt;p>This got me thinking about some other questions.&lt;/p></description></item><item><title>Better Identifiers</title><link>https://www.codevamping.com/2019/10/better-identifiers/</link><pubDate>Mon, 07 Oct 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/10/better-identifiers/</guid><description>&lt;p>Using plain old &lt;code>int&lt;/code>s as identifiers for classes/structs is tried and true, but
we can do better.&lt;/p></description></item><item><title>Resizing Boot Partition for VirtualBox Machine</title><link>https://www.codevamping.com/2019/02/resizing-boot-partition/</link><pubDate>Mon, 25 Feb 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/02/resizing-boot-partition/</guid><description>&lt;p>The VM I use for development ran out of room on the boot partition. Here is how
I fixed that.&lt;/p></description></item><item><title>C++20 Interesting Papers</title><link>https://www.codevamping.com/2019/01/c-20-interesting-papers/</link><pubDate>Mon, 18 Feb 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/01/c-20-interesting-papers/</guid><description>&lt;p>Most of the big proposals for C++20 have been talked over quite a bit. But
there are a few &amp;ldquo;hidden&amp;rdquo; ones that caught my eye.&lt;/p></description></item><item><title>Incremental Sieve of Eratosthenes</title><link>https://www.codevamping.com/2019/01/incremental-sieve-of-eratosthenes/</link><pubDate>Mon, 21 Jan 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/01/incremental-sieve-of-eratosthenes/</guid><description>&lt;p>The &lt;a href="https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes">Sieve of
Eratosthenes&lt;/a> is a well
known algorithm for computing primes, but suffers from space requirements. The
&lt;em>Incremental Sieve&lt;/em> solves that problem.&lt;/p></description></item><item><title>Attribute Hoisting in Boost Spirit X3</title><link>https://www.codevamping.com/2019/01/attribute-hoisting-in-boost-spirit-x3/</link><pubDate>Mon, 07 Jan 2019 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2019/01/attribute-hoisting-in-boost-spirit-x3/</guid><description>&lt;p>Spirit tries hard to make dealing with attributes easy, but sometimes,
it just gets in the way.&lt;/p></description></item><item><title>Comment Systems for Static Websites</title><link>https://www.codevamping.com/page/comment-systems-for-static-websites/</link><pubDate>Sun, 30 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/comment-systems-for-static-websites/</guid><description>&lt;p>(&lt;strong>Updated 2019-12-18&lt;/strong>)&lt;/p>
&lt;p>Static websites are fast and tend to be simple to maintain. But the lack of
processing on the server side means that comments (and other interaction) is a
bit of a hassle.&lt;/p>
&lt;p>This is a list - by no means complete - of the systems for doing comments on a
static website.&lt;/p></description></item><item><title>Spirit X3 File Organization</title><link>https://www.codevamping.com/2018/12/spirit-x3-file-organization/</link><pubDate>Mon, 24 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/12/spirit-x3-file-organization/</guid><description>&lt;p>For larger Spirit-based project, organizing the source code well can lead to
more efficient builds and increased maintainability.&lt;/p>
&lt;p>Of course, this is true for any project. But the heavily templated nature of
even a fully realized Spirit parser makes this doubly so. Figuring out how to
take advantage of separate compilation while maintaining the ability for each
of the pieces to see the needed type/template information is not trivial.&lt;/p></description></item><item><title>Spirit X3 Error Handling</title><link>https://www.codevamping.com/2018/12/spirit-x3-error-handling/</link><pubDate>Mon, 17 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/12/spirit-x3-error-handling/</guid><description>&lt;p>Once your parser grammar grows beyond a few rules/parsers, handling errors will
become a priority. Being able to give feedback about where things went wrong,
what exactly went wrong, and possible fixes are all things you would like to
provide. It might also be nice to see if you could recover the parsing process
from the point of failure and continue parsing to maybe find other problems.&lt;/p></description></item><item><title>Integrate VirtualBox and PuTTY</title><link>https://www.codevamping.com/2018/12/integrate-virtualbox-and-putty/</link><pubDate>Mon, 10 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/12/integrate-virtualbox-and-putty/</guid><description>This is a simple Powershell script to automate starting and logging into a headless VBox VM using PuTTY.
My main development environment is a VirtualBox VM running Arch Linux on top of a Windows 10 host. While I could work directly on the console, I like to have multiple windows up - one that has vim running and one that I use for things like running hugo server.
So, I start the VM headless and connect to it with one or more PuTTY sessions.</description></item><item><title>Rust Move vs Copy</title><link>https://www.codevamping.com/2018/12/rust-move-copy/</link><pubDate>Mon, 03 Dec 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/12/rust-move-copy/</guid><description>I&amp;rsquo;ve been looking at the Rust Ownership model .
The skinny is that Rust has made mostly opposite decisions from C++.
Copy vs Move An assignment in Rust is by default, a move. The original variable is declared as invalid and using it will net you a hard error at compile time.
The example used in the docs is:
let s1 = String::from(&amp;#34;hello&amp;#34;); let s2 = s1; println!(&amp;#34;{}, world!&amp;#34;, s1); That last line will not compile because s1 is no longer valid.</description></item><item><title>Building the Latest Version of Hugo</title><link>https://www.codevamping.com/2018/11/build-latest-hugo/</link><pubDate>Tue, 27 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/11/build-latest-hugo/</guid><description>This short article shows the process I came up with for building hugo
on crostini.</description></item><item><title>Other Websites</title><link>https://www.codevamping.com/page/other-websites/</link><pubDate>Thu, 22 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/other-websites/</guid><description>&lt;p>A list of web sites I have found useful or interesting&lt;/p></description></item><item><title>Live on codevamping.com!</title><link>https://www.codevamping.com/2018/11/live-on-codevamping-com/</link><pubDate>Wed, 21 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/11/live-on-codevamping-com/</guid><description>Now officially live on the new blog at codevamping.com!
The new site uses:
Hugo - site building Jeffprod - theme Netlify - hosting Zapier - automated build for scheduled posts Google - as domain registrar. GitHub - for repostory hosting. I still have posts to migrate from the old site. That is a bit of pain, since it wasn&amp;rsquo;t originally written in Markdown. One tool that has been indispensible is Dillinger.</description></item><item><title>Chrome OS Linux Container (crostini) tips</title><link>https://www.codevamping.com/2018/11/chromeos-linux-tips/</link><pubDate>Sun, 18 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/11/chromeos-linux-tips/</guid><description>&lt;p>The new Linux Containers available on some ChromeBooks are manna from heaven if
you are a developer. Having a full blown Debian based distribution just a click
away makes supported ChromeBooks very usable development platforms. And getting
such a device can be cheap.&lt;/p>
&lt;p>Here is a set of tips to help make things a little nicer.&lt;/p></description></item><item><title>Dotfile Maintenance</title><link>https://www.codevamping.com/2018/11/dotfile-maintenance/</link><pubDate>Mon, 12 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/11/dotfile-maintenance/</guid><description>Here is a party I&amp;rsquo;m a bit late in joining. And it is one of those ideas that makes you smack your head wondering why you didn&amp;rsquo;t think of it.
Config file tweaks For years, I&amp;rsquo;ve maintained a tar.Z bundle that contains a .profile, .cshrc, .bashrc, .vimrc etc. You can tell how old it is by the fact that I still maintain it with compress rather than gzip. When I started it, gzip did not exist.</description></item><item><title>Dairying in Mongolia</title><link>https://www.codevamping.com/2018/11/dairying-mongolia/</link><pubDate>Wed, 07 Nov 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/11/dairying-mongolia/</guid><description>This will be a bit off from the normal fodder for this blog, but I thought it was interesting.
Lets start with a bit of biology.
Babies naturally produce an enzyme called lactase that allows them to digest the main sugar component of milk - lactose. Many (globally it would be most) people lose that ability near puberty. This leads to lactose intolerance and the GI issues it can cause. Many people of European heritage, however, are lactase persistent and maintain the ability to digest lactose - to the delight of the dairy industry.</description></item><item><title>Musical Sensors</title><link>https://www.codevamping.com/2018/10/musical-sensors/</link><pubDate>Thu, 25 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/10/musical-sensors/</guid><description>Vibrating cantilevers has a long history of being used as sensors, but almost always in the micro-domain. The cantilever is frequently etched into silicon or other substrate. The weight of even single molecules can be measured or detected.
The idea is fairly simple. Change the distribution of weight on the cantilever, and the frequency of vibration will change.
It can even be used as a motion detector since acceleration in the same plane as the natural vibration will either start the cantilever vibrating or will change the frequency of the vibration.</description></item><item><title>Onyx Spec Page</title><link>https://www.codevamping.com/2018/10/onyx-spec-page/</link><pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/10/onyx-spec-page/</guid><description>I figured I better at least start the Onyx Spec page, so I did. You can find it in the Menu.
Built in types are there now.
Onyx Spec</description></item><item><title>Onyx Specification</title><link>https://www.codevamping.com/page/onyx-specification/</link><pubDate>Mon, 22 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/onyx-specification/</guid><description>Built-in Types Integral: int - 32 bit signed integer
byte - 8 bit unsigned integer
bigint - 64 bit signed integer
May need to add a few more but they will all have form intnn (e.g. int16 or int8)
There are no unsigned versions except byte.
implicit conversion can only widen, but cannot narrow. Narrowing conversion can be explicitly requested. Narrowing conversion will throw an exception if the source value is out of range.</description></item><item><title>The Onyx Project</title><link>https://www.codevamping.com/2018/10/the-onyx-project/</link><pubDate>Sun, 14 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/10/the-onyx-project/</guid><description>I have decided to design, and build my own computer language. It will be called Onyx.
I agree, that is a pretty big task.
So we will take a bit at time.
Design Criteria I don&amp;rsquo;t really have a whole lot yet. You might think of onyx as C++ EXCEPT - meaning, it acts like C++ EXCEPT these differences. Over time the list will grow and I&amp;rsquo;ll turn it into a full-feature language spec.</description></item><item><title>Spirit X3 Separate Lexer Part II</title><link>https://www.codevamping.com/2018/10/spirit-x3-separate-lexer-part-ii/</link><pubDate>Mon, 08 Oct 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/10/spirit-x3-separate-lexer-part-ii/</guid><description>&lt;p>&lt;a href="https://www.codevamping.com/2018/09/spirit-x3-separate-lexer-part-i/">Last time&lt;/a>, we looked at the lexer and supporting staff. This time, we will look at the primitive parser and final usage.&lt;/p></description></item><item><title>Spirit X3 Separate Lexer - Part I</title><link>https://www.codevamping.com/2018/09/spirit-x3-separate-lexer-part-i/</link><pubDate>Sat, 29 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/spirit-x3-separate-lexer-part-i/</guid><description>Back in this post, I said about Spirit ..
&amp;hellip;it would be very feasible to write a lexical analyzer that makes a token object stream available via a ForwardIterator and write your grammar rules based on that. But is it ? really?
The short answer is - Yes it is feasible, but probably not a good idea.
The long answer is the journey we&amp;rsquo;ll take on the next two posts.</description></item><item><title>Static Exceptions</title><link>https://www.codevamping.com/2018/09/static-exceptions/</link><pubDate>Thu, 27 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/static-exceptions/</guid><description>Dynamic Exceptions have their flaws. Herb Sutter has proposed a replacement known as Static Exceptions . Lets look at it a bit.
Before we do, we need to look at the C+11 feature std::error_code
std::error_code and Friends Anyone who has done any coding in C knows about good old errno, the global int that many system functions will set to signal a problem. This, of course, has many problems, not the least of which is that different platforms could and did use different integer values to represent the same error.</description></item><item><title>MSSQL Pivot</title><link>https://www.codevamping.com/2018/09/mssql-pivot/</link><pubDate>Tue, 25 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/mssql-pivot/</guid><description>Pivots (turning a column&amp;rsquo;s values into actual columns) is a very common activity. Spreadsheet programs have robust support for it. But Standard SQL? Not so much.
The Problem Create Table orders ( orderNumber int, sku char(3), quantity int, salesPerson varchar(10) ); insert into orders values ( 1, &amp;#39;ZR34&amp;#39;, 2, &amp;#39;Mary&amp;#39;), ( 1, &amp;#39;AS99&amp;#39;, 1, &amp;#39;Mary&amp;#39;), ( 2, &amp;#39;ZR34&amp;#39;, 1, &amp;#39;Jim&amp;#39;), ( 2, &amp;#39;MB01&amp;#39;, 1, &amp;#39;Jim&amp;#39;); The ubiquitous order table with the SKU, quantity and sales person.</description></item><item><title>About</title><link>https://www.codevamping.com/about/</link><pubDate>Sun, 23 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/about/</guid><description>Code Vamping This blog will deal mainly with Software development topics with C++ being a major focus. However, a bit of music will be thrown in from time to time for spice. Needless to say, something that combines both will definitely fit.
The main point of this site is to give me an outlet to explore technologies and topics that don&amp;rsquo;t really fit into my day job.
The Technology The site is built with the following techologies (and others):</description></item><item><title>Color</title><link>https://www.codevamping.com/page/colorchart/</link><pubDate>Sun, 23 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/colorchart/</guid><description>&lt;p>Color chart to explore options for style this site.&lt;/p></description></item><item><title>Identifier Parsing in Boost::Spirit X3 - Custom Parser</title><link>https://www.codevamping.com/2018/09/identifier-parsing-in-boost-spirit-x3-custom-parser/</link><pubDate>Sat, 22 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/identifier-parsing-in-boost-spirit-x3-custom-parser/</guid><description>This time around, we will use a custom parser to handle the keywords.
I really hadn&amp;rsquo;t planned on making this a series, but there you go. This will be the last - I think.
Upgrades I started from the code from the last post, but did make a minor adjustment. I made underbar (&amp;rsquo;_&amp;rsquo;) a valid character in an identifier.
auto const ualnum = alnum | char_(&amp;#39;_&amp;#39;); auto const reserved = lexeme[symtab &amp;gt;&amp;gt; !</description></item><item><title>Identifier Parsing - Redux</title><link>https://www.codevamping.com/2018/09/identifier-parsing-redux/</link><pubDate>Thu, 20 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/identifier-parsing-redux/</guid><description>The ink hadn&amp;rsquo;t dried1 on my Identifier Parsing post when I realized that there was indeed a better way to handle multiple keywords.
In that post I stated that a symbols&amp;lt;T&amp;gt; parser would not help because it suffered the same problem as lit(). Which is true.
What I missed was that, of course, you could use the same trick with symbols as you did with lit() to make it work.</description></item><item><title>The Tools</title><link>https://www.codevamping.com/2018/09/the-tools/</link><pubDate>Tue, 18 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/the-tools/</guid><description>I thought I would take a moment and document my current development environment.
The main computer runs windows 10. However, the development computer is actually a VirtualBox ArchLinux client running on that Win 10 box. I use X11 Forwarding to display back to an cygwin/X server running on the host.
I am currently using Codelite as my IDE, though it has some rough edges. GNU compiler suite rounds things out.</description></item><item><title>Identifier Parsing in Boost::Spirit X3</title><link>https://www.codevamping.com/2018/09/identifier-parsing-in-boost-spirit-x3/</link><pubDate>Sun, 16 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/identifier-parsing-in-boost-spirit-x3/</guid><description>In Boost.Spirit X3, parsing identifiers is a bit tricky.
If you are used to the distinction between lexical analysis and syntactical analysis (as I am), Spirit can take some getting used. Lexical analysis is done in the same grammar as the syntactical analysis. So the ubiquitous IDENT token type is now a grammar rule.
To be sure, it doesn&amp;rsquo;t have to be this way. Spirit parsers work on iterator pairs, so it would be very feasible to write a lexical analyzer that makes a token object stream available via a ForwardIterator and write your grammar rules based on that.</description></item><item><title>Day One</title><link>https://www.codevamping.com/2018/09/day-one/</link><pubDate>Thu, 13 Sep 2018 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/2018/09/day-one/</guid><description>So, I decide to join the blogging crowd. It remains to be seen if it sticks.
Why? I&amp;rsquo;ve been doing some home-brew software development lately and found that there were some things I wanted to say and no place to say them. So here is that place.
This won&amp;rsquo;t be all about software development. There will undoubtedly be some music-ish things thrown in. And things about music software and probably software music too.</description></item><item><title>Markdown test page</title><link>https://www.codevamping.com/page/markdown-test/</link><pubDate>Sat, 21 Jan 2017 00:00:00 +0000</pubDate><guid>https://www.codevamping.com/page/markdown-test/</guid><description/></item></channel></rss>