diff --git a/README.md b/README.md
index 5a5c32e..a8265ef 100644
--- a/README.md
+++ b/README.md
@@ -15,13 +15,13 @@ sources in text w/ formatting in markdown conventions
## 2023
-Wed April 26th, 2023 - [**Query the (Open) Ethereum Blockchain (Database) with Contract Services**](https://github.com/viennacrypto/viennacrypto.github.io/tree/master/ethers) - Using Strongly-Typed Application Binary Interfaces (ABIs) With ethers.js (v6) Via JSON-RPC @ Vienna.js
+Wed April 26th, 2023 - [**Query the (Open) Ethereum Blockchain (Database) with Contract Services**](ethers.md) - Using Strongly-Typed Application Binary Interfaces (ABIs) With ethers.js (v6) Via JSON-RPC @ Vienna.js
Tue March 28th, 2023 - [**Inside Ordinal Inscriptions - Turn the Blockchain Into A Database For Digital Artefacts**](https://github.com/pixelartexchange/ordinals.sandbox/tree/master/insideordinals) @ Technologieplauscherl LXXX (Linz, Austria)
-Wed March 8th, 2023 - [**GoReleaser In Action - Deliver Go Binaries As Fast and Easily As Possible (For Windows, Mac, Linux & Co.) Via GitHub Actions (Workflow)**](https://github.com/pixelartexchange/artbase.server/tree/master/goreleaser) @ Vienna.go
+Wed March 8th, 2023 - [**GoReleaser In Action - Deliver Go Binaries As Fast and Easily As Possible (For Windows, Mac, Linux & Co.) Via GitHub Actions (Workflow)**](goreleaser.md) @ Vienna.go
@@ -42,46 +42,49 @@ https://github.com/cryptopunksnotdead/punkbase/tree/master/insidepunkbase) @ Sta
## 2019
-Wed May 15th, 2019 - [**JavaScript in 2019 - Teach Yourself Web Programming in ~24 Hours~ 10 Minutes**](https://github.com/geraldb/talks/blob/master/javascript2019.md) @ Inhouse (Private)
+Wed May 15th, 2019 - [**JavaScript in 2019 - Teach Yourself Web Programming in ~24 Hours~ 10 Minutes**](javascript2019.md) @ Inhouse (Private)
Tue April 30th, 2019 -
-[**Contract Scripting for Everyone: (Hyperledger) Car Registration Sample - From Go Chaincode to (Secure) Ruby Contract Script**](https://github.com/geraldb/talks/blob/master/fabcar.md)
-@ [Vienna Hyperledger Meetup](https://meetup.com/Hyperledger-Vienna/events/260252086)
+[**Contract Scripting for Everyone: (Hyperledger) Car Registration Sample - From Go Chaincode to (Secure) Ruby Contract Script**](fabcar.md)
+@ Vienna Hyperledger Meetup
Thu April 4th, 2019 -
-[**The State of Bool - Everything You Never Wanted to Know**](https://github.com/geraldb/talks/blob/master/bool.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
-
+[**The State of Bool - Everything You Never Wanted to Know**](bool.md)
+@ Vienna Ruby Meetup
Tue March 12th, 2019 -
-[**Contracts, Contracts, Contracts - Code Your Own (Crypto Blockchain) Contracts w/ Ruby (sruby), Universum & Co**](https://github.com/geraldb/talks/blob/master/contracts.md)
-@ [Vienna Crypto Programming Meetup](https://viennacrypto.github.io)
+[**Contracts, Contracts, Contracts - Code Your Own (Crypto Blockchain) Contracts w/ Ruby (sruby), Universum & Co**](contracts.md)
+@ Vienna Crypto Programming Meetup
+
## 2018
Thu October 18th, 2018 -
-[**Mining for Gold Using the World's #1 and Most Popular Data Format**](https://github.com/geraldb/talks/blob/master/csv.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+[**Mining for Gold Using the World's #1 and Most Popular Data Format**](csv.md)
+@ Vienna Ruby Meetup
Wed June 20th, 2018 -
-[**Stay Static - Build Static Websites w/ VuePress (and Text with Formatting Conventions in Markdown)**](https://github.com/geraldb/talks/blob/master/vuepress.md)
-@ [Vienna Vue.js Meetup](https://meetup.com/Vue-js-Vienna/events/249255348)
+[**Stay Static - Build Static Websites w/ VuePress (and Text with Formatting Conventions in Markdown)**](vuepress.md)
+@ Vienna Vue.js Meetup
+
Wed April 11th, 2018 -
-[**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Go from Zero (Scratch)**](https://github.com/geraldb/talks/blob/master/blockchain_go.md)
-@ [Vienna Go Meetup](https://meetup.com/vienna-go-Vienna-Go-User-Group/events/248920971)
+[**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Go from Zero (Scratch)**](blockchain_go.md)
+@ Vienna Go Meetup
+
Tue March 13th, 2018 -
-[**Blockchain vs (Hyper) Ledger -- Inside (Hyper) Ledger Lite - Add Transactions One Block at a Time and Balance the Accounts (Books)**](https://github.com/geraldb/talks/blob/master/hyperledger.md)
-@ [Hyperledger Vienna](https://meetup.com/Hyperledger-Vienna/events/246847194)
+[**Blockchain vs (Hyper) Ledger -- Inside (Hyper) Ledger Lite - Add Transactions One Block at a Time and Balance the Accounts (Books)**](hyperledger.md)
+@ Hyperledger Vienna
+
+Mon March 12th, 2018 - [**Build (Online) Presentations / Talks (and Handout Notes) with (Structured) Text with Formatting in Markdown Markup Conventions and (Off-the-Shelf Open Free) Slide Design Themes (Reveal.js, Bespoke.js, Impress.js, Shower.js, S6, ...) and the Jekyll (Static) Website Compiler**](slideshow-s9.md)
+@ Austria.TXT Meetup
-Mon March 12th, 2018 - [**Build (Online) Presentations / Talks (and Handout Notes) with (Structured) Text with Formatting in Markdown Markup Conventions and (Off-the-Shelf Open Free) Slide Design Themes (Reveal.js, Bespoke.js, Impress.js, Shower.js, S6, ...) and the Jekyll (Static) Website Compiler**](https://github.com/geraldb/talks/blob/master/slideshow-s9.md)
-@ [Austria.TXT Meetup](https://github.com/austriacodes/austria.txt)
-Thu March 8th, 2018 - [**Build (Online) Books and Documentation with Markdown and Octobook Themes and the Jekyll (Static) Website Compiler - Incl. Yuki & Moto Press Bookshelf Case Study**](https://github.com/geraldb/talks/blob/master/octobook.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+Thu March 8th, 2018 - [**Build (Online) Books and Documentation with Markdown and Octobook Themes and the Jekyll (Static) Website Compiler - Incl. Yuki & Moto Press Bookshelf Case Study**](octobook.md)
+@ Vienna Ruby Meetup
@@ -89,21 +92,22 @@ Thu March 8th, 2018 - [**Build (Online) Books and Documentation with Markdown an
## 2017
-Thu December 7th, 2017 - [**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Ruby from Zero (Scratch)**](https://github.com/geraldb/talks/blob/master/blockchain_ruby.md) •
+Thu December 7th, 2017 - [**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in Ruby from Zero (Scratch)**](blockchain_ruby.md) •
[(Slides)](http://slideshow-s9.github.io/demos/blockchain_ruby.html), [(Print)](http://slideshow-s9.github.io/demos/blockchain_ruby.pdf.html)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+@ Vienna Ruby Meetup
Mon November 13rd, 2017 -
[**Build Blazing Fast (Static) Websites with GraphQL (and Gatsby)**](gatsby2.md#whats-graphql) •
[(Slides)](http://slideshow-s9.github.io/demos/gatsby2.html), [(Print)](http://slideshow-s9.github.io/demos/gatsby2.pdf.html)
-@ [GraphQL Vienna Meetup](https://meetup.com/GraphQL-Vienna/events/243984437)
+@ GraphQL Vienna Meetup
Wed September 27th, 2017 -
-[**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in JavaScript from Zero (Scratch)**](https://github.com/geraldb/talks/blob/master/blockchain.md) •
+[**Blockchain! Blockchain! Blockchain! - Build Your Own Blockchains in JavaScript from Zero (Scratch)**](blockchain.md) •
[(Slides)](http://slideshow-s9.github.io/demos/blockchain.html), [(Print)](http://slideshow-s9.github.io/demos/blockchain.pdf.html)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/236300243)
+@ Vienna JavaScript Meetup
+
Wed September 20th, 2017 -
[**Progressive Web Apps (PWAs) and Lighthouse - From Responsive to Mobile to Offline First Design**](progressive.md)
@@ -111,33 +115,34 @@ Wed September 20th, 2017 -
Thu September 14th, 2017 -
[**JSON - What's Next for the No 1. Universal (Non-Binary/Human) Data Exchange Format**](jsonnext.md)
-@ [Microservices Vienna Meetup](https://meetup.com/microservices-vienna/events/241960207)
+@ Microservices Vienna Meetup
Tue September 5th, 2017 -
[**Gastsby 1.0 - Build Single-Page Static Websites in React w/ Gatsby and GraphQL**](gatsby2.md)
-@ [React (JavaScript) Vienna Meetup](https://meetup.com/ReactVienna/events/242821292)
+@ React (JavaScript) Vienna Meetup
Tue July 4th, 2017 -
[**Quik - The Missing Project Scaffolder for Ruby - Quick Start Your Ruby Gems, Your Sinatra Apps, Your Jekyll Sites 'n' More**](quik.md)
-@ [Ruby Linz Meetup](https://meetup.com/Ruby-User-Group-Linz-RUGL/events/240388912)
+@ Ruby Linz Meetup
Thu June 8th, 2017 -
[**Meet Jason Feed - The New Web Feed & Syndication Guy (Ruby Edition)**](webfeeds2.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+@ Vienna Ruby Meetup
Wed May 31st, 2017 -
[**Meet Jason Feed - The New Web Feed & Syndication Guy (JavaScript Edition)**](jsonfeed.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/236300238)
+@ Vienna JavaScript Meetup
Wed May 17th, 2017 -
[**Building Static Websites with Jigsaw 'n' Blade (in PHP)**](jigsaw.md)
-@ [Laravel (PHP) Vienna Meetup](https://meetup.com/Laravel-Frameworkers-Vienna/events/237725787)
+@ Laravel (PHP) Vienna Meetup
+
Fri May 5th, 2017 -
[**The World Factbook - Explore the World with Free Open Public Domain Datasets**](factbook.md)
-@ [Linuxwochen Wien '17](http://www.linuxwochen.at/Wien)
+@ Linuxwochen Wien '17
Free Open Public Domain Data :: 250+ Country Profiles (Incl. Flags 'n' Maps)
@@ -156,7 +161,7 @@ Wed April 19th, 2017 -
Thu April 6th, 2017 -
[**New Horizons - Build Your Own (Static) Planet News Site with Pluto (and Ruby)**](planet.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+@ Vienna Ruby Meetup
The talk covers how to read web feeds in ruby w/ the standard rss
module and 3rd party libraries such as the universal feedparser gem and
@@ -170,11 +175,12 @@ wrap up discussing the future of planet ruby.
Wed March 29th, 2017 -
[**factbook.json - How to model the world with JavaScript**](factbook.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/230066469)
+@ Vienna JavaScript Meetup
Wed March 15th, 2017 -
[**Jekyll vs Middleman - Build static websites with Ruby**](jekyll_vs_middleman.md)
-@ [Ruby Linz Meetup](https://meetup.com/Ruby-User-Group-Linz-RUGL/events/237342046)
+@ Ruby Linz Meetup
+
## 2016
@@ -182,34 +188,36 @@ Wed March 15th, 2017 -
Thu November 17th, 2016 -
Part I) [**factbook.json - Turn the World Factbook into Open (Structured) Data**](factbook.md)
Part II) [**factbook.json - Using Git (and GitHub) for (Publishing) Data**](git_for_data.md)
-@ [Vienna Open Data Meetup](https://meetup.com/Open-Knowledge-Oesterreich/events/233208866)
+@ Vienna Open Data Meetup
Thu September 22nd, 2016 -
[**Building Static Websites with Jigsaw 'n' Blade (in PHP)**](jigsaw.md)
-@ [Vienna PHP Meetup](https://meetup.com/viennaphp/events/232763541)
+@ Vienna PHP Meetup
Wed August 31rd, 2016 -
[**Building static websites with the Great Gatsby and React.js web components**](gatsby.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/230515294)
+@ Vienna JavaScript Meetup
+
Thu August 11th, 2016 -
Part I) [**Building static websites with Metalsmith**](metalsmith2.md)
Part II) [**Building static websites with Gatsby**](gatsby.md)
-@ [Stahlstadt JavaScript Linz Meetup](https://meetup.com/stahlstadt-js/events/232729094)
+@ Stahlstadt JavaScript Linz Meetup
Wed July 20th, 2016 -
[**The New New JavaScript / ECMAScript (ES6, ES7, ES8)**](es6.md) @ Inhouse (Private)
Wed July 13rd, 2016 -
[**Stay Static - Build Single-Page Websites with the Great Gatsby**](gatsby.md)
-@ [React (JavaScript) Vienna Meetup](https://meetup.com/ReactVienna/events/232438531)
+@ React (JavaScript) Vienna Meetup
Thu June 9th, 2016 -
[**Stay Static - Build Static Websites with Hugo and the Go Template Language**](gohugo.md)
-@ [Vienna Go Meetup](https://meetup.com/Vienna-Golang-Meetup/events/230458823)
+@ Vienna Go Meetup
-Sat April 30th, 2016 @ [Linuxwochen Wien '16](http://www.linuxwochen.at/Wien)
+
+Sat April 30th, 2016 @ Linuxwochen Wien '16
I) [**The New HTML - Markdown - Use Plain Text for Websites, Presentations and Books**](markdown.md)
@@ -226,11 +234,12 @@ In 2016 you can get pretty far with just HTML, JS and CSS. The talk shows how to
Tue March 8th, 2016 -
[**Building Static Websites with Metalsmith (+Handelbars/Nunjucks)**](metalsmith2.md)
-@ [Node (JavaScript) Vienna Meetup](https://meetup.com/nodejs-vienna/events/228638709)
+@ Node (JavaScript) Vienna Meetup
+
Thu March 3rd, 2016 -
[**Stay Static - Jekyll vs. Middleman - Build Static Websites with Ruby**](jekyll_vs_middleman.md)
-@ [Vienna Ruby Meetup](https://viennarb.github.io)
+@ Vienna Ruby Meetup
Wed March 2nd, 2016 -
@@ -241,13 +250,14 @@ Wed March 2nd, 2016 -
Thu October 15, 2015 -
[**Dr. Jekyll and Mr. Hyde: The Missing Theme Package Manager & Quick Start Script Wizard**](drjekyll.md)
-@ [Vienna Ruby Meetup](https://meetup.com/vienna-rb/events/225097350)
+@ Vienna Ruby Meetup
Wed September 30, 2015 -
[**Add (Deep) Anchor Links to Your Website**](anchor.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/220339170)
+@ Vienna JavaScript Meetup
+
-Fri May 8th, 2015 @ [Linuxwochen Wien '15](http://www.linuxwochen.at/Wien)
+Fri May 8th, 2015 @ Linuxwochen Wien '15
I) **Building Websites, Blogs, Books w/ Static Site Generators**
@@ -277,11 +287,11 @@ Join to learn more and discuss the state of open data with a focus on practical
Wed August 27th, 2014 -
[**Building Your Own Web Components (Tags / Elements)**](webcomponents2.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/135052012)
+@ Vienna JavaScript Meetup
-Sat May 10th, 2014 @ [Linuxwochen Wien '14](http://www.linuxwochen.at/Wien)
+Sat May 10th, 2014 @ Linuxwochen Wien '14
I) **Use Markdown for Websites, Presentations and Books**
@@ -298,7 +308,7 @@ What's the state of open data for the World Cup? And football in general? What o
Wed April 30th, 2014 -
[**Using Open Football Data - Get Ready for the World Cup in Brazil w/ JavaScript**](open_data_world_cup_with_js.md)
-@ [Vienna JavaScript Meetup](https://meetup.com/viennajs/events/126159362)
+@ Vienna JavaScript Meetup
@@ -308,7 +318,7 @@ Mon Oct 7th, 2013 -
[**(J)Ruby in Action - Web Apps w/ Rails 'n' Jetty"**](jruby_web_apps.md)
@ Java Austria
-Fri May 3rd, 2013 @ [Linuxwochen Wien '13](http://www.linuxwochen.at/Wien)
+Fri May 3rd, 2013 @ Linuxwochen Wien '13
**football.db - Using Open Football Data**
diff --git a/ethers.md b/ethers.md
new file mode 100644
index 0000000..d6da081
--- /dev/null
+++ b/ethers.md
@@ -0,0 +1,940 @@
+# Query the (Open) Ethereum Blockchain (Database) with Contract Services
+
+using strongly-typed application binary interfaces (ABIs) with ethers.js (v6) via JSON-RPC
+
+
+
+Abstract:
+
+I am a no-coiner (HODLing 0 ethers) and a (big) fan of open data / transactions / art.
+There's lot of misunderstandings of blockchains and crypto -
+this talk shows how you can use the ethers.js library to query ("on-chain")
+contract services on ethereum (for free).
+
+The ABI (application binary interface) - "serialized" in JSON - for contract services
+is kind of emerging as a new (open) standard / spec for (yes, strongly-typed) apis
+(that you can use in any programming language incl. - of course - javascript).
+Learn the difference between "on-chain" and "off-chain" tokens
+or how to query for "on-chain" (generative) art and much more.
+
+
+
+
+## Ethers.js v5 vs v6? What's News?
+
+> Big Numbers
+>
+> One of the biggest changes in v6 is that the BigNumber
+> class has been replaced with the built-in ES2020 BigInt
+> offered by modern JavaScript environments.
+>
+> There is plenty of online documentation to get you started with JavaScript ES2020 BigInt.
+> Keep in mind, just like BigNumber, a ES2020 BigInt can only operate on integers.
+
+
+
+## Numbers in JavaScript
+
+No Integer! All Numbers are (64-Bit) Double Precision Floating Point Numbers
+(w/ 52 bits to represent the mantissa)
+
+
+
+
+(Source: [Double-precision floating-point format @ Wikipedia](https://en.wikipedia.org/wiki/Double-precision_floating-point_format))
+
+
+
+Max (biggest) integers safely to represent between `-(2^53 – 1)` and `2^53 – 1`
+
+
+``` js
+Number.MAX_SAFE_INTEGER
+//=> 9007199254740991
+
+2**53-1
+//=> 9007199254740991
+```
+
+
+
+## Money, Money, Money
+
+
+Best Practice - Use Integers Only (For Calculations)
+
+Euro 5.99 change to 599 cents
+
+1 Euro == 100 Cents (10^2)
+
+
+
+Triva Quiz
+
+Bitcoin 5.99 change to ___ sat(oshis)
+
+Ether 5.99 change to __ wei
+
+- 1 Bitcoin == ____ Sat(oshis) (10^ __ )
+- 1 Ether == ____ Wei (10^ __ )
+
+
+Answer
+ 5990000000000000000n
+```
+
+
+
+
+
+
+## Before BigInt
+
+``` js
+10**18
+//=> 1000000000000000000
+
+(10**18)+1 // or (10**18)+2 ...
+//=> 1000000000000000000 - FAIL!!
+```
+
+Notice the suffix n (for BigInt)
+
+``` js
+(10n**18n)+1n
+//=> 1000000000000000001n - SUCCESS!!
+```
+
+Note: You CANNOT mix & match numbers and bigint in calculations - bigint calculations only work with bigints.
+e.g. `(10n**18)+1`
+Otherwise you get:
+
+> Error: Cannot mix BigInt and other types, use explicit conversions
+
+
+However, you CAN compare numbers and bigints as usual:
+
+``` js
+1n < 2; // true
+2n > 1; // true
+2 > 2; // false
+2n > 2; // false
+2n >= 2; // true
+```
+
+Beware - about strictly vs loosly equal number and bigints:
+
+``` js
+0n === 0; // false
+1n === 1; // false
+
+0n == 0; // true
+1n == 1; // true
+```
+
+
+Bigint "Convenience" Helper Functions - works with Number, String, Hex, Octal & Bin
+
+
+``` js
+const hugeNum = BigInt(9007199254740991);
+//=> 9007199254740991n
+```
+Note: Number - remember - only up-to Number.MAX_INTEGER! that is 9007199254740991 (2^53-1)
+
+
+``` js
+const hugeString = BigInt("9007199254740991");
+//=> 9007199254740991n
+
+const hugeHex = BigInt("0x1fffffffffffff");
+//=> 9007199254740991n
+
+const hugeOctal = BigInt("0o377777777777777777");
+//=> 9007199254740991n
+
+const hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
+//=> 9007199254740991n
+```
+
+or use literals
+
+``` js
+const hugeHex = 0x1fffffffffffffn;
+//=> 9007199254740991n
+
+const hugeOctal = 0o377777777777777777n;
+//=> 9007199254740991n
+
+const hugeBin = 0b11111111111111111111111111111111111111111111111111111n;
+//=> 9007199254740991n
+```
+
+
+
+## BigInt - Can I Use?
+
+BigInt added in ES2020 (ES11)
+
+
+
+
+Or see
+
+
+
+## The "Magic" of Private/Public Key Cryptography is Big Integer Numbers
+
+How Big (in Bits) Is Safe & Secure For Elliptic Curve Cryptography (ECC)?
+
+
+Triva Quiz - Private Keys (in Bitcoin, Ethereum, etc.) Are Big Integer Numbers - Q: How Big?
+
+- (A) 128-Bit
+- (B) 256-Bit
+- (C) 512-Bit
+- (D) 1024-Bit
+- __ Other, Please Tell
+
+
+
+``` js
+2n**256n-1n
+//=> 115792089237316195423570985008687907853269984665640564039457584007913129639935n
+
+// as hexstring (64 chars)
+0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn // or
+BigInt( "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" )
+//=> 115792089237316195423570985008687907853269984665640564039457584007913129639935n
+```
+
+
+If you ask - How big (or how safe) is a (random) 256-bit / 32 byte integer number?
+
+- How many sand grains on the beach?
+- How many sand grains on earth?
+- How many atoms in the universe?
+
+Yes, 256-bit is that big - there aren't enough atoms in the universe (squared).
+
+
+
+Aside - Elliptic What?
+
+> Elliptic-curve cryptography (ECC) is an approach to public-key cryptography
+> based on the algebraic structure of elliptic curves over finite fields.
+>
+> (Source: [Elliptic-curve cryptography @ Wikipedia](https://en.wikipedia.org/wiki/Elliptic-curve_cryptography))
+
+
+Why not "classic" and "military-grade" RSA (Rivest–Shamir–Adleman) public-key cryptography?
+How big (in bits) is safe?
+
+> RSA keys are typically 1024 to 4096 bits long.
+> In 2003, RSA Security estimated that 1024-bit keys were likely to become crackable by 2010.
+> As of 2020, it is not known whether such keys can be cracked,
+> but minimum recommendations have moved to at least 2048 bits.
+> It is generally presumed that RSA is secure if n is sufficiently large,
+> outside of quantum computing.
+>
+> (Source: [RSA cryptosystem @ Wikipedia](https://en.wikipedia.org/wiki/RSA_(cryptosystem)))
+
+
+
+
+## ethers.js Uses Noble Crypto(graphy) JS Libraries by Paul Milller
+
+Article - Learning fast elliptic-curve cryptography (ECC) [in JavaScript/TypeScript with BigInts]
+see
+
+Live Demo - Elliptic curve (point) calculator
+see
+
+
+---
+
+
+
+
+## Getting Started w/ ethers.js
+
+
+
+
+## History - Programming Ethereum (or is it Web 3.0?) with JavaScript API
+
+
+web3.js - First (and original) library - still available (and in use) - see
+
+ethers.js - New (cool) kid in town by [Richard Moore](https://github.com/ricmoo) (Toronto, Canada) - "One-Man Show"
+
+
+
+
+
+## ethers.js - The official project summary / readme blurb
+
+
+> A complete, compact and simple library for Ethereum and ilk, written in TypeScript.
+>
+> **Features**
+>
+> - Keep your private keys in your client, **safe** and sound
+> - Import and export **JSON wallets**
+> - Import and export BIP 39 **mnemonic phrases** (12 word backup phrases) and **HD Wallets** (English as well as Czech, French, Italian, Japanese, Korean, Simplified Chinese, Spanish, Traditional Chinese)
+> - Meta-classes create JavaScript objects from any contract ABI, including **ABIv2** and **Human-Readable ABI**
+> - Connect to Ethereum nodes over [JSON-RPC](https://github.com/ethereum/wiki/wiki/JSON-RPC), [INFURA](https://infura.io), [Etherscan](https://etherscan.io), [Alchemy](https://alchemyapi.io), [Ankr](https://ankr.com) or [MetaMask](https://metamask.io)
+> - **ENS names** are first-class citizens; they can be used anywhere an Ethereum addresses can be used
+> - **Tiny** (~120kb compressed; 400kb uncompressed)
+> - **Tree-shaking** focused; include only what you need during bundling
+> - **Complete** functionality for all your Ethereum desires
+> - Extensive [documentation](https://docs.ethers.org/v6/)
+> - Large collection of **test cases** which are maintained and added to
+> - Fully written in **TypeScript**, with strict types for security
+> - **MIT License** (including ALL dependencies); completely open source to do with as you please
+>
+> (Source: [ethers-io/ethers.js @ GitHub](https://github.com/ethers-io/ethers.js))
+
+
+
+## ethers.js - Getting Started w/ Node.js
+
+```
+$ npm install ethers
+$ npm ls --all
+
+`-- ethers@6.3.0
+ +-- @adraffy/ens-normalize@1.9.0
+ +-- @noble/hashes@1.1.2
+ +-- @noble/secp256k1@1.7.1
+ +-- aes-js@4.0.0-beta.3
+ +-- tslib@2.4.0
+ `-- ws@8.5.0
+ +-- UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1
+ `-- UNMET OPTIONAL DEPENDENCY utf-8-validate@^5.0.2
+```
+
+
+
+
+## Query for Token Contract Basics
+
+- name
+- symbol
+- totalSupply
+
+using
+
+
+```
+function name() view returns (string)
+function symbol() view returns (string)
+function totalSupply() view returns (uint256)
+```
+
+
+
+
+## Query for Token Contract Basics (Cont.)
+
+No ethereum accounts (or ether) needed for read-only (query) contract access.
+
+All data is public (incl. data declared "private" in code).
+
+All contract functions / methods are always strongly-typed.
+
+AND require / follow an application binary interface
+(for data encoding/decoding - big endian vs little endian etc.).
+
+
+
+
+## Token Basics - Via JSON-RPC Using ethers.js
+
+
+``` js
+import { ethers } from "ethers"; // Import everything
+
+console.log( `Hello, ethers.js ${ethers.version}!` );
+//=> Hello, ethers.js 6.3.0!
+
+const provider = new ethers.JsonRpcProvider( "https://mainnet.infura.io/v3/" );
+```
+
+**Blockchain JSON-RPC Provider Options**
+
+Option 1)
+You can run your own local (ethereum) blockchain node (e.g. geth).
+
+Option 2)
+Easier to get started with third-party provider
+e.g. Infura, Alchemy, QuickNode, and many more.
+
+Requires (free) sign-up for API key.
+
+
+
+
+## Contract №1 - Token Basics - Via JSON-RPC Using ethers.js (Cont.)
+
+
+``` js
+const abi = [
+ "function name() view returns (string)",
+ "function symbol() view returns (string)",
+ "function totalSupply() view returns (uint256)",
+];
+
+const addr = '0x06012c8cf97bead5deae237070f9587f8e7a266d';
+
+// Create a contract
+const contract = new ethers.Contract( addr, abi, provider);
+
+const name = await contract.name();
+//=> CryptoKitties
+const sym = await contract.symbol();
+//=> CK
+const total = await contract.totalSupply();
+//=> 2022592n
+```
+
+
+
+**Q: What about (cryptokitties) token metadata (& image)?**
+
+A: It's still early ;-). SOON!
+In theory, yes. KittBase contract incl. `function tokenMetadata(uint256 tokenId) view returns (string)`
+In practice, the metadata contract (reference) is set to null address (0x0000000000000000000000000000000000000000).
+
+"Social" consensus ;-). Use:
+- .
+-
+- ...
+-
+
+resulting in:
+
+``` json
+{"id":1,
+ "name":"Genesis",
+ "generation":0,
+ "genes":"626837621154801616088980922659877168609154386318304496692374110716999053",
+ "created_at":"2017-11-23T06:19:59.000Z",
+ "birthday":"2017-11-23T00:00:00.000Z",
+ "image_url":"https://img.cryptokitties.co/0x06012c8cf97bead5deae237070f9587f8e7a266d/1.png",
+ "image_url_cdn":"https://img.cn.cryptokitties.co/0x06012c8cf97bead5deae237070f9587f8e7a266d/1.png",
+ ...
+}
+```
+
+
+
+
+
+A classic crypto fraud - "own your kitties 100% forever!" - yeah, sure
+
+
+reality - you do NOT own the kitty/cat image
+and the metadata (& image) is "off-chain" and hosted on a classic "central" company web server.
+What you "own" is the token (and the "on-chain" genes/dna - a 256-bit integer)
+that you can sell to greater fools for (fun &) profit!
+
+Read the (hidden) fineprint - from the CryptoKitties License F.A.Q:
+
+> Dapper Labs, Inc. created [and owns] the art of your cryptokitty,
+> and it's a big part of our brand.
+> At the end of the day, businesses also need to have the right to make the big decisions [and the big $$$] about how the art gets used in a commercial setting.
+>
+> We reserve to ourselves the right to make bigger [and bigger] deals
+> to help our business grow [and rake in all the $$$ for ourselves - of course].
+>
+> [...]
+>
+> Q: What am I allowed to do with the art:
+>
+> - Use the Kitty art for your own personal, non-commercial use.
+>
+> Q: What am I NOT allowed to do with the art:
+>
+> - Modifying the art;
+> - Using the art to market or sell products;
+> - Trying to trademark your art, or otherwise acquire intellectual property rights in it.
+
+
+=> "own your kitties 100% forever!" - the blockchain guarantees and says so ;-).
+
+Dapper Labs Inc. (Vancouver, Canada) - A Billion $$ Unicorn with "Blue-Chip" Venture Capital Investors & More
+
+
+
+
+
+## Contract №2 - "Off-Chain" Token Basics - Via JSON-RPC Using ethers.js
+
+Let's try another... add to abi ...
+
+- `function tokenURI(uint256 tokenId) view returns (string)`
+
+and let's query... Phree the Phunks ...
+
+
+
+``` js
+const addr = '0xf07468ead8cf26c752c676e43c814fee9c8cf402';
+
+const abi = [
+ "function name() view returns (string)",
+ "function symbol() view returns (string)",
+ "function totalSupply() view returns (uint256)",
+ "function tokenURI(uint256 tokenId) view returns (string)",
+];
+
+
+// Create a contract
+const contract = new ethers.Contract( addr, abi, provider);
+
+const name = await contract.name();
+//=> CryptoPhunksV2
+const sym = await contract.symbol();
+//=> PHUNK
+const total = await contract.totalSupply();
+//=> 10000n
+```
+
+**Q: What about token metadata (& image)?**
+
+Let's try...
+
+
+``` js
+const token0 = await contract.tokenURI( 0 );
+//=> ipfs://QmcfS3bYBErM2zo3dSRLbFzr2bvitAVJCMh5vmDf3N3B9X/0
+
+const token1 = await contract.tokenURI( 1 );
+//=> ipfs://QmcfS3bYBErM2zo3dSRLbFzr2bvitAVJCMh5vmDf3N3B9X/1
+
+...
+
+const token9999 = await contract.tokenURI( 9999 );
+//=> ipfs://QmcfS3bYBErM2zo3dSRLbFzr2bvitAVJCMh5vmDf3N3B9X/9999
+```
+
+resulting in "off-chain" ipfs (InterPlanetary File System) links.
+
+Tip: Try an ipfs http gateway e.g.
+
+-
+-
+- ...
+-
+
+resulting in:
+
+``` json
+{"description":"Phunk #0",
+ "name":"Phunk #0",
+ "attributes":[{"trait_type":"Eyes","value":"Green Eye Shadow"},
+ {"trait_type":"Ears","value":"Earring"},
+ {"trait_type":"Hair","value":"Blonde Bob"},
+ {"trait_type":"Sex","value":"Female"}],
+ "image_url":"https://gateway.pinata.cloud/ipfs/Qmazio5AkcBwNJByXHtbBk1hgnw4g1ADsYK369TSPLMqar/phunk0000.png"}
+```
+
+
+
+
+
+
+
+
+## (Blockchain) Contract Services - Strongly-Typed ABIs Available As JSON
+
+In theory you can write your blockchain contracts in any language.
+In practice Solidity (JavaScript-like) is mostly used
+and the definite (contract) ABI spec is
+
+
+
+
+**From Solidity To (Contract) ABI JSON**
+
+The solc (solidity ompiler) generates / compiles the contract source(s)
+into a binary [blob] AND the ABI in JSON e.g.
+
+``` json
+{"type": "function",
+ "name": "name",
+ "constant": true,
+ "payable": false,
+ "stateMutability": "view",
+ "inputs": [],
+ "outputs":[{"name":"","type":"string"}]
+},
+{"type": "function",
+ "name": "symbol",
+ "constant": true,
+ "payable": false,
+ "stateMutability": "view",
+ "inputs": [],
+ "outputs":[{"name":"","type":"string"}]
+},
+{"type":"function",
+ "name":"totalSupply",
+ "constant":true,
+ "payable":false,
+ "stateMutability":"view",
+ "inputs":[],
+ "outputs":[{"name":"","type":"uint256"}]
+},
+...
+```
+
+Great idea. Easy to read/parse (for computers) BUT gets big and unreadable very fast for humans.
+
+Tip: See [ABI-To-Sol](https://gnidan.github.io/abi-to-sol/)
+to convert JSON ABIs back to "human" readable
+"Solidity-like" interface headers.
+
+
+
+
+## The "Human-Reabable" ABI Format
+
+Yes, introduced first in ethers.js
+(and invented by Richard Moore back in 2018 -
+see [ethers.js: Human-Readable Contract ABIs](https://blog.ricmoo.com/human-readable-contract-abis-in-ethers-js-141902f4d917)).
+
+Human-readable, really? At least computer programmer-readable ;-).
+
+
+
+``` js
+const abi = [
+ "function name() view returns (string)",
+ "function symbol() view returns (string)",
+ "function totalSupply() view returns (uint256)",
+ "function tokenURI(uint256 tokenId) view returns (string)",
+ "function traitDetails(uint256 layerIndex, uint256 traitIndex) view returns (string name, string mimetype, bool hide)",
+ "function traitData(uint256 layerIndex, uint256 traitIndex) view returns (string)",
+];
+```
+
+
+
+
+## Contract №3 - "On-Chain" Token Basics - Via JSON-RPC Using ethers.js
+
+Let's try another... Seize the memes of production...
+
+``` js
+const addr = '0xe9b91d537c3aa5a3fa87275fbd2e4feaaed69bd0';
+
+const abi = [
+ "function name() view returns (string)",
+ "function symbol() view returns (string)",
+ "function totalSupply() view returns (uint256)",
+ "function tokenURI(uint256 tokenId) view returns (string)",
+ "function traitDetails(uint256 layerIndex, uint256 traitIndex) view returns (string name, string mimetype, bool hide)",
+ "function traitData(uint256 layerIndex, uint256 traitIndex) view returns (string)",
+];
+
+
+
+// Create a contract
+const contract = new ethers.Contract( addr, abi, provider);
+
+const name = await contract.name();
+//=> Crypto Marcs
+const sym = await contract.symbol();
+//=> MARCS
+const total = await contract.totalSupply();
+//=> 5000n
+```
+
+**Q: What about token metadata (& image)?**
+
+Let's try...
+
+``` js
+const token0 = await contract.tokenURI( 0 );
+```
+
+
+resulting in:
+
+```
+data:application/json;base64,
+eyJuYW1lIjoiQ3J5cHRvIE1hcmNzICMwIiwiZGVzY3JpcHRpb24iOiJBIGNvbGxlY3Rpb24gb2YgNWs
+gQ3J5cHRvTWFyY3MgZnVsbHkgT24tQ2hhaW4gLSBTZWl6aW5nIHRoZSBtZW1lcyBvZiBwcm9kdWN0aW
+9uIiwic3ZnX2ltYWdlX2RhdGEiOiJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSM
+GFEMGlNVEl3TUNJZ2FHVnBaMmgwUFNJeE1qQXdJaUIyYVdWM1FtOTRQU0l3SURBZ01USXdNQ0F4TWpB
+d0lpQjJaWEp6YVc5dVBTSXhMaklpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TUR
+Bd0wzTjJaeUlnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZkSEpoYm5Od1lYSmxiblE3WW
+1GamEyZHliM1Z1WkMxcGJXRm5aVHAxY213b1pHRjBZVHBwYldGblpTOXdibWM3WW1GelpUWTBMR2xXU
+Ws5U2R6QkxSMmR2UVVGQlFVNVRWV2hGVldkQlFVRkNaMEZCUVVGWlEwRlpRVUZCUkdka2VqTTBRVUZC
+UVVOWVFrbFhXRTFCUVVGelZFRkJRVXhGZDBWQmJYQjNXVUZCUVVGS2EyeEZVVlpTU1dsbE0wNU5VVVZ
+CUVVGcVJFMU5ReTgxTWtWRGRteFNRVEF3Ym5Gek0yMDVRWGRCUVVGQlFVRkJTbmt4UXpkdlJFeGtaSG
+[...]
+dmiOiJTcG90cyJ9LHsidHJhaXRfdHlwZSI6Ik1hcmMgVHlwZSIsInZhbHVlIjoiTWFyYyA0In1dfQ==
+```
+
+
+let's base64 decode - resulting in:
+
+``` json
+{"name":"Crypto Marcs #0",
+ "description":"A collection of 5k CryptoMarcs fully On-Chain - Seizing the memes of production",
+ "svg_image_data":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwMCI...",
+ "image_data":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSI...",
+ "attributes":[{"trait_type":"1/1","value":"Original"},
+ {"trait_type":"Mouth","value":"Marc"},
+ {"trait_type":"Eyes","value":"Marc"},
+ {"trait_type":"Lips","value":"Marc"},
+ {"trait_type":"Facial Hair","value":"Marc"},
+ {"trait_type":"Head","value":"Bandana"},
+ {"trait_type":"Neck","value":"Grey Shirt"},
+ {"trait_type":"Nose","value":"Marc"},
+ {"trait_type":"Ear","value":"Marc"},
+ {"trait_type":"Emotion","value":"Marc"},
+ {"trait_type":"Face","value":"Spots"},
+ {"trait_type":"Marc Type","value":"Marc 4"}]}
+```
+
+and let's base64 decode the svg_image_data ;-) - resulting in:
+
+``` xml
+
+```
+
+
+
+
+
+
+
+
+## Contract №3 - Let's seize the memes of production ;-).
+
+
+Let's get (query for) all generative art (image) blocks and names...
+If the contract uses / supports:
+
+- `function traitDetails(uint256 layerIndex, uint256 traitIndex) view returns (string name, string mimetype, bool hide)` and
+- `function traitData(uint256 layerIndex, uint256 traitIndex) view returns (string)`
+
+than you can "auto-magically" download all "on-chain" layers,
+that is, all metadata triplets by repeatedly calling `traitDetails` starting
+with index `0/0`, `0/1`, ..., `1/0`, `1/1`, ... and so on e.g.
+
+- `traitDetails( 0, 0 )` => `["Zombie", "image/png", false]`
+- `traitDetails( 0, 1 )` => `["Cline", "image/png", false]`
+- ...
+- `traitDetails( 1, 0 )` => `["Bubble Gum", "image/png", false]`
+- `traitDetails( 2, 1 )` => `["Medical Mask", "image/png", false]`
+- ...
+
+resulting in 171 Attributes (incl. Nones) in 11 Categories (plus 1/1s):
+
+```
+id, category, name
+0, 1/1, Zombie
+1, 1/1, Cline
+2, 1/1, Pauly Devil
+3, 1/1, Deal With It Devil
+4, 1/1, Marc
+5, 1/1, Gold
+6, 1/1, Marcdonalds
+7, 1/1, Marc (2)
+8, 1/1, Devil
+9, 1/1, Marc (3)
+10, 1/1, Madlad Marc
+11, 1/1, Chad
+12, 1/1, Ape
+13, 1/1, Claudia Bot
+14, 1/1, Marc (4)
+15, 1/1, Bot
+16, 1/1, Marc (5)
+17, 1/1, Marc (6)
+18, 1/1, Alien
+19, 1/1, Claudia Gold
+20, 1/1, Marc (7)
+21, 1/1, Original
+22, Mouth, Bubble Gum
+23, Mouth, Medical Mask
+24, Mouth, Hookah
+25, Mouth, Pipe
+26, Mouth, Cigar
+27, Mouth, Vape
+28, Mouth, Cigarette
+29, Mouth, None
+30, Eyes, Tears
+31, Eyes, Monocle
+32, Eyes, Lasers
+33, Eyes, Pink Shades
+34, Eyes, Aviators
+35, Eyes, Polarized White
+36, Eyes, VR Headset
+37, Eyes, Gold Glasses
+38, Eyes, 3D Glasses
+...
+```
+
+
+and all images (as binary blobs) by calling `traitData` e.g.
+
+- `traitData( 0, 0 )` => `"\x89PNG..."`
+- `traitData( 0, 1 )` => `"\x89PNG..."`
+- ...
+
+and so on resulting in:
+
+
+
+
+
+
+For many more real-world examples incl. Mad Camels, Ape Origins, Punkin Spicies, NFL, etc.
+see the [**Art Factory Sandbox**](https://github.com/generativeartfactory/artfactory.sandbox).
+
+
+
+
+
+## Questions? Comments?
+
+
+Thanks.
+
+
+**What's ETH Vienna / Wien Meetup / Stammtisch?**
+
+The idea is to (re)start the Eth(erum) community in Vienna / Wien.
+
+Eth(ereum) Vienna Meetup(s) - Jour Fixe - Every First Wednesday of the Month.
+
+- **Wednesday, April 5th, 2023, 6-8pm - (Ethereum) Blockchain & Red Kriek Beer**
+- **Wednesday, May 3rd, 2023, 6-8pm**
+- **Wednesday, June 7th, 2023, 6-8pm**
+- Summer Break
+
+@ Delirium Café Vienna, Passauer Platz 2, 1. District (Beside the Church - Maria am Gestade)
+
+Note: Everyone MUST pay for your own drink(s) and optional food.
+For the menu & prices, see . For example - A traditional (on tap!) Belgian kriek lambic beer by Brouwerij F. Boon costs 0.15L €2.80 / 0.33L €4.80.
+
+Join us. See or .
+
+
+
+
+---
+
+## Bonus
+
+## What's the point of (Contract) ABIs?
+
+Spec(ification) of strongly-typed function calls (and function call data)
+guarantees binary interop(eration).
+
+It is kind of emerging as a new (open) standard / spec for (yes, strongly-typed) apis
+(that you can use in any programming language incl. - of course - javascript).
+
+Note: Ideally all (blockchain) contract code is open source (and "byte-by-byte" verified)
+but in practice NOT all contract source code gets published.
+
+
+Yes, "native" language is Solidity.
+
+Designed "like-JSON", that is, limited set of data types - works and fits into most programming languages.
+See my own [abicoder (yes, v2-compatible) in ruby](https://github.com/rubycocos/blockchain/tree/master/abicoder) ;-).
+
+ABI v2 (yes, there's an update) incl. tuples (also known as structs)
+and arrays of arrays or tuple of tuples or array of tuples and so on.
+
+
+
+## ABI Types
+
+The following elementary types are supported:
+
+- `uint`: unsigned integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`. e.g. `uint32`, `uint8`, `uint256`.
+- `int`: two's complement signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`.
+- `address`: equivalent to `uint160`, except for the assumed interpretation and language typing.
+ For computing the function selector, `address` is used.
+- `bool`: equivalent to `uint8` restricted to the values 0 and 1. For computing the function selector, `bool` is used.
+- `bytes`: binary type of `M` bytes, `0 < M <= 32`.
+
+
+The following (fixed-size) array types are supported:
+
+- `[M]`: a fixed-length array of `M` elements, `M >= 0`, of the given type.
+
+
+The following non-fixed-size types are supported:
+
+- `bytes`: dynamic sized byte sequence.
+- `string`: dynamic sized unicode string assumed to be UTF-8 encoded.
+- `[]`: a variable-length array of elements of the given type.
+
+Types can be combined to a tuple by enclosing them inside parentheses, separated by commas:
+
+- `(T1,T2,...,Tn)`: tuple consisting of the types `T1`, ..., `Tn`, `n >= 0`
+
+It is possible to form tuples of tuples, arrays of tuples and so on.
+
+
+
+## What's abigen?
+
+Using the abigen command-line tool
+you can generate type-safe "wrapper" code for contracts from abis (in json)
+for your language.
+
+Started with Go Lang (a statically compiled programming language)
+but works practically with any language.
+See my own [little abigen in ruby, that is, abi2ruby](https://github.com/rubycocos/blockchain/tree/master/abi2ruby) ;-) -
+a python-like dynamic programming language.
+
+
+Also used in JS for auto-documentation "in the real-world"
+or - of course - for type-safe contracts in ... TypeScript -
+see [ABI Type - Strict TypeScript types for Contract ABIs.](https://abitype.dev)
+and many more.
+
+
diff --git a/goreleaser.md b/goreleaser.md
new file mode 100644
index 0000000..5715238
--- /dev/null
+++ b/goreleaser.md
@@ -0,0 +1,237 @@
+# GoReleaser Talk Notes
+
+- Vienna Go (Lang) Meetup March 2023 @ fiskaly
+
+
+
+## How-To Cross-Compile Go Programs for Window, Mac OS, and Linux
+
+Cross-Compile == Build Go Programs / Applications for Different Operation Systems (`GOOS`) and
+(Processor) Architectures (`GOARCH`) e.g. build Mac OS on Windows or Windows on Linux etc.
+
+
+Q: Cross-Compile!?
+
+> Programs written in Go can easily be compiled for a wide variety of target operating systems
+> such as Windows, Mac OS, and Linux
+> by using the `GOOS` and `GOARCH` environmental variables.
+
+
+Q: What is GOOS and GOARCH?
+
+> `GOOS` refers to the operating system (Linux, Windows, BSD, etc.),
+> while `GOARCH` refers to the (processor) architecture (386, amd64, arm64, etc.) to build for.
+
+
+Q: How-to find out your GOOS and GOARCH values?
+
+ $ go env GOOS
+ windows
+ $ go env GOARCH
+ amd64
+ $ go env GOOS GOARCH
+ windows
+ amd64
+
+or
+
+ $ go env
+
+resulting in (sorted a-z):
+
+ ..
+ set GOARCH=amd64
+ ...
+ set GOOS=windows
+ ...
+
+ or
+
+ $ go version
+ go version go1.18 windows/amd64
+
+
+Q: What values for GOOS and GOARCH possible?
+
+ $ go tool dist list
+
+resulting in:
+
+```
+aix/ppc64
+android/386
+android/amd64
+android/arm
+android/arm64
+darwin/amd64
+darwin/arm64
+dragonfly/amd64
+freebsd/386
+freebsd/amd64
+freebsd/arm
+freebsd/arm64
+illumos/amd64
+ios/amd64
+ios/arm64
+js/wasm
+linux/386
+linux/amd64
+linux/arm
+linux/arm64
+linux/mips
+linux/mips64
+linux/mips64le
+linux/mipsle
+linux/ppc64
+linux/ppc64le
+linux/riscv64
+linux/s390x
+netbsd/386
+netbsd/amd64
+netbsd/arm
+netbsd/arm64
+openbsd/386
+openbsd/amd64
+openbsd/arm
+openbsd/arm64
+openbsd/mips64
+plan9/386
+plan9/amd64
+plan9/arm
+solaris/amd64
+windows/386
+windows/amd64
+windows/arm
+windows/arm64
+```
+
+
+
+Coding Example - hello.go:
+
+``` go
+package main
+
+import(
+ "fmt"
+ "runtime"
+)
+
+func main() {
+ fmt.Printf( "OS: %s\nArchitecture: %s\n",
+ runtime.GOOS,
+ runtime.GOARCH)
+}
+```
+
+build (64-bit binary)
+
+ $ go build hello.go
+
+run
+
+ $ hello
+ OS: windows
+ Architecture: amd64
+
+build (32-bit binary)
+
+ $ set GOOS=windows
+ $ set GOARCH=386
+ $ go build hello.go
+
+run
+
+ $ hello
+ OS: windows
+ Architecture: 386
+
+build (linux binary on windows)
+
+ $ set GOOS=linux
+ $ set GOARCH=386
+ $ go build hello.go
+
+run
+
+ $ hello
+
+ > This version of hello is not compatible with the version of Windows you're running.
+ > Check your computer's system information and then contact the software publisher.
+
+
+Note: You CAN run the the binary / executable
+only on the target platform (e.g. on Window, Linux, Mac OS, etc.) -
+out the other end only runs on OS X, and cannot be run on
+
+
+Cross-compile in unix shell:
+
+ $ GOOS=linux GOARCH=386 go build hello.go
+
+ $ GOOS=darwin GOARCH=arm64 go build hello.go
+ ..
+
+
+## Artbase Server Binary Case Study
+
+see
+
+
+Download Releases (Binaries) On Github
+
+see
+
+Example:
+
+- `artbase_1.0.0_linux_64bit.tar.gz` - 2.84 MB
+- `artbase_1.0.0_linux_armv6.tar.gz` - 2.66 MB
+- `artbase_1.0.0_macos_64bit.tar.gz` - 2.93 MB
+- `artbase_1.0.0_macos_arm64.tar.gz` - 2.82 MB
+- `artbase_1.0.0_windows_64bit.zip` - 2.82 MB
+
+
+
+Automate, Automate, Automate
+
+via GitHub Actions & GoReleaser
+
+GoReleaser (Freemium with Pro version) -
+Release Go projects as fast and easily as possible!
+
+see
+
+
+How-To Use
+
+Step 1: .gorealser.yml Configuration
+
+see
+
+
+
+Step 2: .github/workflows/release_build.yml (Git Action / Workflow Configuration)
+
+see
+
+
+Step 3: git tag (triggers goreleaser)
+
+see
+
+ $ git tag v0.0.5
+ $ git tag v1.0.0
+
+only "local" - to trigger goreleaser push tags to github (upstream)
+
+ $ git push origin --tags
+ or
+ $ git push origin v0.0.5
+ $ git push origin v1.0.0
+
+
+
+That's it.
+
+## Questions? Comments?
+
diff --git a/i/bigint-compat.png b/i/bigint-compat.png
new file mode 100644
index 0000000..4f453c2
Binary files /dev/null and b/i/bigint-compat.png differ
diff --git a/i/double-precision-number.png b/i/double-precision-number.png
new file mode 100644
index 0000000..71a01f8
Binary files /dev/null and b/i/double-precision-number.png differ
diff --git a/i/kitty1.png b/i/kitty1.png
new file mode 100644
index 0000000..f69f16f
Binary files /dev/null and b/i/kitty1.png differ
diff --git a/i/marc0.svg b/i/marc0.svg
new file mode 100644
index 0000000..e37ec99
--- /dev/null
+++ b/i/marc0.svg
@@ -0,0 +1,22 @@
+
diff --git a/i/marcs-spritesheet-24x24.png b/i/marcs-spritesheet-24x24.png
new file mode 100644
index 0000000..e28438e
Binary files /dev/null and b/i/marcs-spritesheet-24x24.png differ
diff --git a/i/phunk0.png b/i/phunk0.png
new file mode 100644
index 0000000..4c5a563
Binary files /dev/null and b/i/phunk0.png differ