8000 GitHub - jasongrimes/fretboardfoundation at v1.0
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

jasongrimes/fretboardfoundation

Repository files navigation

Fretboard Foundation

This is the source code for a book I’m slowly writing called Fretboard Foundation: Practical building blocks for intermediate guitarists, hosted at fretboardfoundation.com.

The website is rendered into static HTML with Jekyll via GitHub Pages, using a custom Jekyll theme I created to support a proper book format and my preferred workflow (jekyll-chapterbook).

Style guide

See Journal of Music Theory Style Guide.

Citation style

Adding references and citations

See references in the jekyll-chapterbook documentation.

Testing the site locally

Install Ruby, Bundler, and Jekyll

Install versions to match https://pages.github.com/versions/

Install RVM https://rvm.io/

Install the same version of Ruby used by GitHub pages, and then the jekyll gem.

rvm install ruby-2.7.4
gem install jekyll

Install required Jekyll gems with bundler

rvm use 2.7.4
bundle install

Run the site

rvm use 2.7.4
bundle exec jekyll serve

Open the site locally at http://127.0.0.1:4000/

Connect to local site from mobile, etc.

Find your IP address:

IP=`ifconfig en0 | grep "inet " | awk '{print $2}'`
echo $IP

Bind jekyll serve to it:

bundle exec jekyll serve --host=$IP

Then connect to it from a mobile or other device on the same network using the IP address from $IP and port 4000.

For example: http://10.0.0.10:4000

Generating the printable single-page version

Update the edition version

Edit _config.yml and set latest_edition to the name of the new edition. (This will appear on the title page.)

Render the PDF

Generate the site locally as described above.

Use the bin/bookbinder utiltity to compile all of the rendered HTML chapters into a single file and modify all the HTML links and anchor tags accordingly. Then wrap it in the printable header and footer (printable-head.html and printable-footer.html). (Note that bookbinder is compiled for Apple Silicon. To use it on other architectures, see https://github.com/jasongrimes/bookbinder.)

cd _site
../bin/bookbinder $(<printmap.txt) >printable-inner.html && \
  cat printable-head.html printable-inner.html printable-footer.html >../printable.html

Then open the printable file http://localhost:4000/printable.html in a web browser, and proofread the rendered preview. Make sure that pagination looks good throughout. If needed, add or remove page breaks by appending the following helper classes in appropriate places in the markdown: {:.page-break-before} and {:.no-page-break-after}.

When it looks good, print it via the browser and select "Save as PDF". (Note that as of this writing, there's a bug in Chrome on Mac that prevents the pagination from rendering properly, but it works when using Safari or Firefox.)

Save the PDF file to pdf/Fretboard-Foundation-YYYY-MM-DD.pdf, and also copy it over the existing pdf/Fretboard Foundation.pdf.

Update the list of editions

Update _pages/editions.md with a link to the new edition.

Tag a new release in GitHub

Commit and push the changes to GitHub. Then create a new release for the new edition on the GitHub website, following the existing naming convention at https://github.com/jasongrimes/fretboardfoundation/releases

Generating offline site

With jekyll

RMDIRS=(tmp assets/archives assets/demo)
RMFILES=(CNAME Gemfile Gemfile.lock *.code-workspace)
bundle exec jekyll build --baseurl=. \
    && for dir in $RMDIRS; do echo "Removing $dir"; rm -rf _site/$dir; done \
    && for file in $RMFILES; do echo "Removing $file"; rm _site/$file; done \
    && du -sh _site

With httrack

datestamp=`date -I`
httrack http://127.0.0.1:4000 -w -O ./fretboardfoundation-$datestamp -v --max-rate=1000000000 --sockets=50 --disable-security-limits --display --assume svg=application/octet-stream -o0

rm -rf fretboardfoundation-$datestamp/hts-cache

zip -r fretboardfoundation-$datestamp.zip fretboardfoundation-$datestamp

Making simple staff notation with VexFlow

https://jsfiddle.net/m2kjgLbs/

const note = 'C/4';
const filename = 'note-C4.svg';

// Create a VexFlow renderer attached to the DIV element with id="output".
const { Factory, StaveNote } = Vex.Flow;
const vf = new Factory({renderer: { 
  elementId: 'output', 
  width: 80, 
  height: 130 
}});
// Create a guitar staff, displaced down one octave
vf.System().addStave({voices:[vf.EasyScore().voice([
	new StaveNote({ 
    keys: [note], 
    duration: "w", 
    octave_shift: -1
  })
])]})
.addClef('treble', 'default', '8vb');
vf.draw();

// Hack to append a download link for the generated SVG
const svgData = $('#output')[0].innerHTML.replace('<svg ', '<svg xmlns="http://www.w3.org/2000/svg" ');
const svgBlob = new Blob([svgData], {type:"image/svg+xml;charset=utf-8"});
const svgUrl = URL.createObjectURL(svgBlob);
const downloadLink = document.createElement("a");
downloadLink.innerText = 'Download';
downloadLink.href = svgUrl;
downloadLink.download = filename;
$('#output')[0].after(downloadLink);

Copyright

Copyright © 2022-2023 by Jason Grimes.

About

A free book about learning guitar for intermediate guitarists.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

0