text:
# Awesome CEO

> — Hello, my name is Dima and I'm a CEO
>
> — (chorus) Welcome, Dima

A curated and **opinionated** list of resources for startup founders and leaders of high-growth companies.

📢 [Subscribe to get updates](https://awesomeceo.substack.com/)

## Contents

 * [Fundraising](#fundraising)
 * [Entrepreneurship](#entrepreneurship)
 * [Product](#product)
 * [Sales](#sales)
 * [Marketing](#marketing)
 * [Management](#management)
 * [Hiring](#hiring)
 * [Finance](#finance)
 * [Books](#books)
 * [More links](#more-links)

## Fundraising

 * [A Guide to Seed Fundraising](https://www.ycombinator.com/library/4A-a-guide-to-seed-fundraising) - YCombinator

   Very good starting point.
 * [A Playbook for Fundraising](https://www.lennysnewsletter.com/p/a-playbook-for-fundraising?triedSigningIn=true) - Lenny Rachitsky [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/lennysan)

   Great summary.
 * [The Startup Fundraising Playbook](https://www.docsend.com/index/startup-fundraising/) - Dropbox
 * [How to raise money before launch](https://medium.com/@zebulgar/how-to-raise-money-before-launch-a3544ef4dba6) - Khosla Ventures 💰
 * [How I got 50 high-profile angel investors to join our seed round](https://www.mentava.com/blog/how-i-got-50-high-profile-angel-investors-to-join-our-seed-round)
 * [What does it take to raise capital, in SaaS, in 2022?](https://medium.com/point-nine-news/what-does-it-take-to-raise-capital-in-saas-in-2022-7ebe55c86e3e)
 * [How to Raise Money for Your Startup](https://noise.beehiiv.com/p/how-to-raise-money-for-your-startup) - Alex Banks [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/thealexbanks)
 * ![youtube](https://socialize-md.vercel.app/api/badge/youtube) [How to pitch to a VC](https://www.ted.com/talks/david_s_rose_how_to_pitch_to_a_vc) - David S. Rose [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/davidsrose)
 * [How to Talk About Valuation When a VC Asks](https://bothsidesofthetable.com/how-to-talk-about-valuation-when-a-vc-asks-7376f5721226) - Mark Suster [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/msuster)
 * [Pre-seed and seed founder's hardest question](https://www.linkedin.com/posts/adityaagarwal3_the-single-hardest-question-at-the-pre-seed-activity-7021553572609744896-XEue/) - Aditya Agarwal [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/adityaag)

   The single hardest question at the pre-seed and seed stage for a founder is knowing whether to persist on the current product or to move on to the next idea.
 * [Option grants at seed round](https://www.indexventures.com/rewardingtalent/how-much-and-who-gets-it) - Index Ventures
 * [How Startup Funding Works](https://www.linkedin.com/posts/herwigspringer_founder-investor-venturecapital-activity-7000525239516319744-iDS_/)
 * [IPOs and Beyond: A Guide to Exit Options for Companies](https://future.a16z.com/ipos-and-beyond-a-guide-to-exit-options-for-companies/) - a16z
 * [What would a CTO equity be for a small startup?](https://www.quora.com/What-would-a-CTO-compensation-equity-be-for-a-small-startup)
 * [Options vs Cash](https://danluu.com/startup-options/) - Dan Luu [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/danluu)
 * [How To Invest In Startups](https://blog.samaltman.com/how-to-invest-in-startups) - Sam Altman [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/sama)

### Fundraising tools
 * [Startup Equity Dilution Calculator](https://www.capboard.io/en/captable/equity-dilution-calculator)
 * [Startup Economics Calculator](https://smartasset.com/infographic/startup)

### Angels directories
 * [First Round Capital](https://angels.firstround.com) 💰
 * [NFX list](https://signal.nfx.com) 💰
 * [funden](https://funden.com) 💰

### Startup decks
 * [30 Legendary Startup Pitch Decks and What You Can Learn From Them](https://piktochart.com/blog/startup-pitch-decks-what-you-can-learn/)
 * [Pitch deck collection from VC funded startups](https://www.alexanderjarvis.com/pitch-deck-collection-from-vc-funded-startups/)
 * [Startup decks collection](https://startupdecks.co/decks/)

## Entrepreneurship

 * [What are the things startups have to get right?](https://www.quora.com/What-are-the-things-startups-have-to-get-right)
 * [85 Things I learned being a CEO](https://hackernoon.com/85-things-i-learned-being-a-ceo-4c25fc1c7b99)
 * [What’s the Second Job of a Startup CEO?](https://blog.ycombinator.com/the-second-job-of-a-startup-ceo/) - Y Combinator
 * [Things I will tell my kids if they become entrepreneurs](https://www.slideshare.net/laurenthaug/things-i-will-tell-my-kids-if-they-become-entrepreneurs)
 * [What do VCs really look for when making investments?](https://www.quora.com/What-do-VCs-really-look-for-when-making-investments)
 * [As an employee of a startup, how do you know when to quit?](https://www.quora.com/As-an-employee-of-a-startup-how-do-you-know-when-to-quit)
 * [YC’s Series A Diligence Checklist](https://blog.ycombinator.com/ycs-series-a-diligence-checklist/) - Y Combinator
 * [Startup Playbook](https://playbook.samaltman.com) - Sam Altman [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/sama)
 * [Startup Class](https://startupclass.samaltman.com) - Sam Altman
 * [Lean Canvas](https://leanstack.com/leancanvas) + [Miro template](https://miro.com/templates/lean-canvas/)
 * [Open Source Pitch Deck Templates for Figma](https://www.figmafinder.com/figma-pitch-deck)
 * ![github](https://socialize-md.vercel.app/api/badge/github) [List of startups that had successful pivots](https://github.com/fikrikarim/companies-with-successful-pivot)

## Product

 * [Product is Hard](https://www.mindtheproduct.com/product-is-hard-by-marty-cagan/) - Marty Cagan [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/cagan)

   Solutions need to be:

    - Valuable – Something that our customers will choose to use
    - Usable – Easy to figure out how to use
    - Feasible – Buildable using the technology stack and skills we have
    - Viable – Workable for our stakeholders within our budget, legal, ethical, and reputational constraints
 * [Red Oceans: How to Find Profitable Startup Ideas](https://capitalandgrowth.org/answers/Article/3143488/How-to-Find-Profitable-Business-Ideas)
 * [The Secrets Of Creative Thinking](https://www.lemonade.com/blog/creative-thinking-hacks/)
 * [Most Startups Should Be Deer Hunters](https://bothsidesofthetable.com/most-startups-should-be-deer-hunters-7fdecf58f4f6) - Mark Suster [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/msuster)
 * [8 Product Hurdles Every Founder Must Clear](https://review.firstround.com/8-product-hurdles-every-founder-must-clear-this-pm-turned-founder-shares-his-playbooks) - First Round Capital

### Product-Market Fit

 * [12 Things About Product-Market Fit](https://a16z.com/2017/02/18/12-things-about-product-market-fit-2/) - a16z

## Sales

 * [Your first 10 customers](https://stripe.com/en-in/guides/atlas/starting-sales) - Stripe

## Marketing

 * [Get creative with your marketing](https://www.linkedin.com/posts/kevinleeme_marketing-growth-business-activity-7002752700526256129-5Wsi/)
 * [Developer Marketing Guide](https://www.devmarketingguide.com)
 * [Top Resources for Startup Marketing and PR](https://docs.google.com/spreadsheets/d/1tAiya71mDQgtwn_F9-mNQhuc7GdsQ5e2_BeG69Cb82A/edit#gid=0)
 * [SaaS Email Marketing Handbook](https://saasemailmarketing.net)
 * [How today's fastest growing B2B businesses found their first ten customers](https://www.lennysnewsletter.com/p/how-todays-fastest-growing-b2b-businesses) - Lenny Rachitsky [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/lennysan)

## Management

 * [What makes for a successful CEO and CTO relationship in a startup?](https://www.quora.com/What-makes-for-a-successful-CEO-and-CTO-relationship-in-a-startup)
 * [Maker's Schedule, Manager's Schedule](http://www.paulgraham.com/makersschedule.html) - Paul Graham [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/paulg)
 * [The Secret To Discussing Pay With Employees](https://www.officevibe.com/blog/secret-to-discussing-pay-with-employees)
 * ![github](https://socialize-md.vercel.app/api/badge/github) [Awesome Leading and Managing](https://github.com/LappleApple/awesome-leading-and-managing)
 * [Lessons from Keith Rabois: How to be an Effective Executive](https://delian.io/lessons-3) - Keith Rabois [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/rabois)
 * [How Context Switching Sabotages Your Productivity](https://blog.doist.com/context-switching/)
 * [10,000 Hours with Reid Hoffman: What I Learned](https://casnocha.com/reid-hoffman-lessons)
 * [7 Ways to Set Up a New Hire for Success](https://hbr.org/2019/05/7-ways-to-set-up-a-new-hire-for-success)
 * [Individuals matter](https://danluu.com/people-matter/) - Dan Luu [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/danluu)
 * [Mandate Levels](https://cutlefish.substack.com/p/tbm-2752-mandate-levels) - John Cutler [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/johncutlefish)
 * [10 ideas for building great culture in a distributed (remote) team](https://twitter.com/nathanbarry/status/1520442729397858304) - Nathan Barry [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/nathanbarry)
 * [Adapting to Endure / Crisis management](https://www.sequoiacap.com/adapting-to-endure-2022/) - Sequoia Capital

## Hiring

 * [Lessons from Keith Rabois: How to Interview an Executive](https://delian.io/lessons-2)
 * [Lessons from Keith Rabois: How to Become a Magnet for Talent](https://delian.io/lessons-5)
 * [GitLab Talent Acquisition Framework](https://about.gitlab.com/handbook/hiring/talent-acquisition-framework/)

## Finance

 * [Financial Planning & Analysis](https://about.gitlab.com/handbook/finance/financial-planning-and-analysis/) - GitLab
 * [Framework for balancing and budgeting engineering resourcing](https://medium.com/engineering-operations/a-framework-for-balancing-and-budgeting-engineering-resourcing-d0cce0e6911c)
 * [Negotiate the right deal with suppliers](https://www.infoentrepreneurs.org/en/guides/negotiate-the-right-deal-with-suppliers/)
 * [Strategic Procurements 10 Commandments for Managing the Buying Process](https://strategicdynamicsfirm.com/strategic-procurements-10-commandments-managing-hospital-buying-process/)

## Books

 * 📕 [The Hard Thing About Hard Things](https://amzn.com/dp/B00DQ845EA) - Ben Horowitz

   Practical advice on how to handle the toughest challenges while building and leading a startup, from laying off employees to dealing with personal crises. How to cultivate a strong company culture and lead with empathy and humility.
 * 📕 [Zero to One: Notes on Startups, or How to Build the Future](https://amzn.com/dp/B00J6YBOFQ) - Peter Thiel

   A framework for identifying and developing disruptive ideas that can create new markets and transform industries. A contrarian view on how to build truly innovative startups.
 * 📕 [The 7 Habits of Highly Effective People](https://amzn.com/dp/B07WF972WK) - Stephen Covey

   The title is misleading - because of it I was avoiding this book for years. It's actually very smart and actionable: principles of personal responsibility, proactive action, and continuous improvement. An approach to achieving success and fulfillment, developing strong personal relationships, cultivating a growth mindset, and aligning your actions with a clear sense of purpose.
 * 📕 [First Things First](https://amzn.com/dp/B00V1XGKJK) - Stephen Covey

   Time management and productivity guide. How to overcome procrastination and achieve your most important goals, while balancing your work and personal life, and focusing on the things that truly matter in the long term.
 * 📕 [The Cold Start Problem: How to Start and Scale Network Effects](https://amzn.com/dp/B08HZ5XY7X) - Andrew Chen [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/andrewchen)

   A framework for building a new network effect startup. Strategies and tactics that successful network effect startups have used to overcome the challenges of building a user base from scratch.
 * 📕 [Atomic Habits: An Easy & Proven Way to Build Good Habits & Break Bad Ones](https://amzn.com/dp/B07D23CFGR) - James Clear

   A framework for building and maintaining good habits and breaking bad ones. How to make small, incremental changes in your daily routines that can lead to long-term success and personal growth.
 * 📕 [Thinking, Fast and Slow](https://amzn.com/dp/B00555X8OA) - Daniel Kahneman

   A framework for improving your decision-making abilities. Our automatic, intuitive "fast" thinking often leads to errors and biases, while our more deliberate and analytical "slow" thinking can help us make better decisions and avoid common pitfalls.
 * 📕 [The Mom Test: How to talk to customers & learn if your business is a good idea when everyone is lying to you](https://amzn.com/dp/B01H4G2J1U) - Rob Fitzpatrick [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/robfitz)

   A framework for conducting effective customer interviews and building products that people actually want to use. How to validate your ideas without relying on false positives or biased feedback.
 * 📕 [Disciplined Entrepreneurship: 24 Steps to a Successful Startup](https://amzn.com/dp/B00DQ97TWO) - Bill Aulet [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/BillAulet)

   A framework for developing and testing innovative business ideas, from identifying customer needs and segmenting markets, to prototyping and testing solutions, to launching and scaling a successful venture.
 * 📕 [Mochary Method Curriculum](https://docs.google.com/document/d/18FiJbYn53fTtPmphfdCKT2TMWH-8Y2L-MLqDk-MFV4s/preview) - Matt Mochary [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/mattmochary)

## More links

 * [The Founder Library](https://www.nfx.com) - NfX
 * [Advices from founders](https://foundr.com/articles) - foundr
 * [Learn with Sherpa](https://www.learnwithsherpa.com) - Alex Lieberman [![twitter](https://socialize-md.vercel.app/api/badge/twitter)](https://twitter.com/businessbarista)
 * ![github](https://socialize-md.vercel.app/api/badge/github) [Awesome startup tools list](https://github.com/Ibexoft/awesome-startup-tools-list)
 * ![github](https://socialize-md.vercel.app/api/badge/github) [Awesome books, videos, courses and resources about making a startup](https://github.com/KrishMunot/awesome-startup)
 * [Go-To Startup Resources](https://learningloop.notion.site/learningloop/Go-To-Startup-Resources-28954916f3ad4445be7e713554bc6a8b)

## Other
- [Awesome CTO](https://github.com/kuchin/awesome-cto) *(GitHub)*
- [Awesome TPM](https://github.com/kuchin/awesome-tpm) *(GitHub)*

## License

[![CC0](https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg)](https://creativecommons.org/publicdomain/zero/1.0/)

repo_name: kuchin/awesome-ceo


text:
# Contribution Guidelines

(This was modified from another [awesome](https://github.com/aleksandar-todorovic/awesome-c) project.)

Please ensure your pull request adheres to the following guidelines:

> If you forget any of these I will nicely ask you to change it in the pull request.

# Updating [README.md](https://github.com/JohnBlood/awesome-basic/blob/master/README.md)

- You can either add a link or new categories, or improvements... all are welcome.
  - If you have other ideas for discussion please leave an issue.
- Use the following format: [Project Name][Project Link] - Description. [`License Name`](License Link)
  - Example: `[Clang][38] - C compiler for LLVM. Supports C11. ['NCSA'](https://en.wikipedia.org/wiki/Software_license)`
  - Keep descriptions simple.
  - Licenses are optional, but encouraged.
  - License should be link to the project's license file if applicable.
- Titles should be [capitalized](http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html).
- Make pull request titles descriptive i.e. not `Updated README`.
- Additions should be added to the bottom of the relevant category.
- New sub-category are placed in alphabetical order.
- New categories or improvements to the existing categorization are welcome.
- Check your spelling and grammar.
- Make sure your text editor is set to remove trailing whitespace.
- End all descriptions with a period.
- No Amazon affiliate codes in links for books.
- Add authors in book listing with `by **Author**` format.

# How to contribute from GitHub.com

- Make sure you have a free [GitHub.com](https://github.com/join) account and you are logged in.
- Find an appropriate topic category in the [README.md](https://github.com/JohnBlood/awesome-basic/blob/master/README.md) file to add it under, or add your own if you think it is needed.
- Click the :pencil: button [Edit link](https://github.com/JohnBlood/awesome-basic/blob/master/README.md) on the top right-hand corner of the README.md. This will do two things:
  - Fork the repository to your account.
  - Create a new branch so you can send your changes in a pull request.
- Add your changes.
- Scroll down to the `Propose file change` box and write a commit message and optional extended description.
- Click the `Propose file change` button.

> NOTE: this works the same for any of the files

repo_name: JohnBlood/awesome-basic

mime_type: text/plain


text:
Awesome Basic [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)
============
A curated list of awesome BASIC dialects, IDEs, and tutorials

### Contents

* [Dialects](#Dialects)
* [IDEs, Editors, Plugins, and Tools](#ides-editors-plugins-and-tools)
* [Miscellaneous](#Miscellaneous)
* [Tutorials](#Tutorials)

## Dialects

* [AppGameKit](https://www.appgamekit.com/) - an easy to learn game development engine, ideal for Beginners, Hobbyists & Indie developers. Now anyone can quickly code and build apps for multiple platforms using AppGameKit - have your demos and games up and running on mobile devices.
* [atinybasic](https://github.com/trevorjay/atinybasic) - An Actually Tiny BASIC for Arduino.
* [B4X](https://www.b4x.com/) - Simple, powerful and modern development tools.
* [BaCon](https://www.basic-converter.org/) - a free BASIC to C translator for Unix-based systems, which runs on most Unix/Linux/BSD platforms, including MacOSX. It intends to be a programming aid in creating tools which can be compiled on different platforms (including 64bit environments), while trying to revive the days of the good old BASIC.
* [basgo](https://github.com/udhos/basgo) - compiles BASIC-lang to Golang.
* [BASIC Compiler](https://github.com/lwiest/BASICCompiler) - BASIC Compiler is an open-source BASIC compiler written in Java. It compiles a BASIC program into Java bytecode, which can be executed with any Java Virtual Machine 1.5 and higher.
* [BASIC8](https://store.steampowered.com/app/767240/BASIC8/) - an integrated Fantasy Computer for game and other program development. You can create, share and play disks in a modern BASIC dialect, with built-in tools for editing sprite, tiles, map, quantized, etc.
* [BASIC-256](https://sourceforge.net/projects/kidbasic/) - an easy to use version of BASIC designed to teach anybody how to program. A built-in graphics mode lets them draw pictures on screen in minutes, and a set of easy-to-follow tutorials introduce programming concepts through fun exercises.
* [BBCSDL](http://www.bbcbasic.co.uk/bbcsdl/index.html) - an advanced cross-platform implementation of BBC BASIC for Windows, Linux (x86 CPU only), MacOS, Raspberry Pi (Raspbian), Android, iOS or for running in a browser. It combines the simplicity of BASIC with the sophistication of a structured language, allowing you to write utilities and games, use sound and graphics, and perform calculations.
* [BCX](https://bcxbasiccoders.com/) - BCX converts your BCX BASIC source code into high performing, efficient C\C++ source code. Use C\C++ libraries and header files without having to first convert them into BASIC.
* [BlitzMax DX](https://www.blitzcoder.org/forum/topic.php?id=803) - a fork of BlitzMax NG.
* [BlitzMax NG](https://blitzmax.org/) - a fast cross-platform, open-source, programming language.
* [bootBASIC](https://github.com/nanochess/bootBASIC) - a BASIC language in 512 bytes of x86 machine code.
* [Bywater BASIC Interpreter](https://sourceforge.net/projects/bwbasic/) - implements a large superset of the ANSI Standard for Minimal BASIC (X3.60-1978) and a significant subset of the ANSI Standard for Full BASIC (X3.113-1987) in C.
* [Cerberus X](https://www.cerberus-x.com/community/index.php) - A cross-platform development toolset which serves 2D game development at its core. Cerberus X is a fork of the [Monkey X programming language](https://blitzresearch.itch.io/monkeyx).
* [Chipmunk Basic](http://www.nicholson.com/rhn/basic/) - an interpreter for the BASIC Programming Language. It runs on multiple OS platforms, and is reasonably fast for a pure interpreter. Chipmunk Basic presents a traditional (vintage) terminal-command-line programming environment, and supports a simple, old-fashioned, and easy-to-learn dialect of the Basic Programming Language. (Line numbers are required when using the built-in command-line console, but are not required in Basic programs written using an external text editor.) The language also supports a few advanced extensions. Free for educational and personal use.
* [cmbasic](https://github.com/mist64/cbmbasic) - a portable version of Commodore's version of Microsoft BASIC 6502 as found on the Commodore 64.
* [Dark Basic Pro](https://github.com/TheGameCreators/Dark-Basic-Pro) - an open source BASIC programming language for creating Windows applications and games.
* [endbasic](https://github.com/jmmv/endbasic) - BASIC environment with a REPL, a web interface, and RPi support written in Rust.
* [FreeBASIC](https://www.freebasic.net/) - a free/open source (GPL), BASIC compiler for Microsoft Windows, DOS and Linux.
* [FutureBasic](https://www.brilorsoftware.com/fb/pages/home.html) - a high-level procedural programming language combined with an "Integrated Development Environment" (IDE) for creating native Intel Macintosh applications. It provides an editor, compiler, project manager, documentation, and code samples.
* [Gambas](http://gambas.sourceforge.net/en/main.html) - a free development environment and a full powerful development platform based on a Basic interpreter with object extensions, as easy as Visual Basic.
* [GLBasic](https://store.steampowered.com/app/819510/GLBasic_SDK/) - an easy to learn BASIC language with Editor, Compiler and Debugger. The generated C++ code compiles to lightning-fast apps for several platforms.
* [JADE](https://github.com/xet7/JadeLib) - AKA "Jade's A Developing Experiment" - This is a proof of concept using a BASIC-like syntax to program C++.
* [jScriptBasic](https://github.com/verhas/jScriptBasic) - ScriptBasic for Java is a BASIC interpreter that can be embedded into Java programs.
* [Just BASIC](https://justbasic.com/) - a programming language for Windows. It is completely free and it is suitable for creating all kinds of applications for business, industry, education and entertainment.
* [jvmBASIC](https://github.com/teverett/jvmBASIC) - A BASIC to JVM bytecode compiler.
* [KayaBASIC](https://github.com/kankouhin/Kaya-BASIC) - Multi-platform BASIC compiler, supports Windows, Linux and macOS. easy extends with C++.
* [Liberty BASIC](https://libertybasic.com/) - The commercial version of [Just BASIC](https://justbasic.com/).
* [LychenBASIC](https://github.com/axtens/LychenBASIC) - anachronistic, Windows-only, BASIC language programming [blog post explanation](https://dev.to/bugmagnet/lychenbasic-anachronistic-windows-only-basic-language-programming-11d1).
* [MatrixBrandy](https://github.com/stardot/MatrixBrandy) - a Fork of Brandy BASIC V for Linux. Brandy implements Basic VI, the the 64-bit floating-point mathematics variant of the dialect of Basic that Acorn Computers supplied with their ranges of desktop computers that use the ARM processor such as the Archimedes and RiscPC. Basic V and VI are an extended version of BBC Basic. This was the Basic used on the BBC Micro that Acorn made during the early 1980s.
* [MBC](https://github.com/Airr/MBC) - MBC is a Basic to C/C++ translator, originally based on the BCX Windows translator by Kevin Diggins. It has successfully compiled using Clang++ and G++ on macOS/Linux 64bit OS's, and G++ on RaspberryPi.
* [micro(A)](https://github.com/aurelVZ/microA-programming-language) - micro(A) is a modern and minimal general purpose programming language. It is Easy to Use BASIC like Programming Language. micro(A) interpreter comes with complete IDE in which you can make your programs.
* [Monkey 2](https://blitzresearch.itch.io/monkey2) - Monkey2 is an easy to use, cross platform, games oriented programming language from Blitz Research.
* [my_basic](https://github.com/paladin-t/my_basic) - A lightweight BASIC interpreter written in standard C in dual files. Aims to be embeddable, extendable and portable.
* [NaaLaa](https://www.naalaa.com/) - stands for 'Not An Advanced Language At All'. It's a very easy to learn programming language for beginners interested in retro style game development. NaaLaa is free to use and you may do whatever you want with the programs you create with it. NaaLaa runs and compiles on Windows and Linux.
* [NSB/AppStudio](https://www.nsbasic.com/) - A complete, powerful development environment. Create apps for iOS, Android, Windows, MacOS and Linux.
* [nuBASIC](https://github.com/eantcal/nubasic) - nuBASIC is an implementation of a BASIC interpreter and IDE for Windows and Linux .
* [nuBScript](https://github.com/eantcal/nubscript) - nuBScript is a programming language distributed under MIT License.
* [Oxygen Basic](https://www.oxygenbasic.org/) - a Compact embeddable JIT compiler that reads C headers and compiles to x86 machine code. Executes directly in memory or creates DLLs and EXE files. Supports overloading and OOP. Currently available for MS platforms.
* [PC-BASIC](https://robhagemans.github.io/pcbasic/) - a free, cross-platform interpreter for GW-BASIC, Advanced BASIC (BASICA), PCjr Cartridge Basic and Tandy 1000 GWBASIC.
* [PuffinBASIC](https://github.com/mayuropensource/PuffinBASIC) - BASIC interpreter written in Java.
* [PureBasic](https://www.purebasic.com/) - a modern BASIC programming language. The key features of PureBasic are portability (Windows, Linux and OS X supported with the same source code), the production of very fast and optimized native 32-bit or 64-bit executables and, of course, the very simple BASIC language syntax. PureBasic has been created for the beginner and expert alike. We have put a lot of effort into its conception to produce a fast, reliable system and friendly BASIC compiler.
* [PyBasic](https://github.com/richpl/PyBasic) - Simple interactive BASIC interpreter written in Python
* [QB64](https://www.qb64.org/portal/) - a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.
* [Quite BASIC](http://www.quitebasic.com/) - a web-based classic BASIC online programming environment.
* [RAD Basic](https://radbasic.dev/) - 100% compatible with your Visual Basic 6 projects.
* [RCBasic](http://rcbasic.com/) - a simple easy to learn programming language with many builtin functions to aid in game and multimedia application development. RCBasic is free software distributed under the zlib license.
* [RemObjects Mercury](https://www.remobjects.com/elements/mercury/) - Mercury is an implementation of the BASIC programming language that is fully code-compatible with Microsoft Visual Basic.NET™, but takes it to the next level, and to new horizons.
* [sdlBASIC](https://sourceforge.net/projects/sdlbasic/) - A easy basic in order to make games in 2d style amos for linux and windows.
* [SharpBASIC](https://sharpbasic.com/) - SharpBASIC is a new programming language that is currently in development. As the name suggests the language should be considered a sharper BASIC, more powerful, less verbose but with a clear structure.
* [SmallBASIC](https://smallbasic.github.io/) - a fast and easy to learn BASIC language interpreter ideal for everyday calculations, scripts and prototypes. SmallBASIC includes trigonometric, matrices and algebra functions, a built in IDE, a powerful string library, system, sound, and graphic commands along with structured programming syntax.
* [SmallBasic](http://www.smallbasic.com/) - Small Basic is the only programming language created specially to help students transition from block-based coding to text-based coding.
* [SpecBAS](https://github.com/ZXDunny/SpecBAS) - an enhanced Sinclair BASIC interpreter for modern PCs.
* [SpiderBasic](https://www.spiderbasic.com/) - A Basic to master the web.
* [thinBASIC](https://www.thinbasic.com/) - a very fast "BASIC like" programming language useful to Beginners and to Gurus. BASIC interpreter for Windows able to create console and gui applications with most of the user interface controls, automate process, automate data exchange, connect to databases, send mails, connect to ftp sites, rest api, parsing strings, tokenizing, traversing xml, handling files, Windows Registry, OpenGl, graphics, sound, printing ... and much more.
* [twinBASIC](https://github.com/twinbasic/twinbasic) - twinBASIC is a modern version of the classic BASIC programming language.
* [wwwBASIC](https://github.com/google/wwwbasic) - an implementation of BASIC that runs on Node.js and the Web.
* [X11-Basic](http://x11-basic.sourceforge.net/) - a dialect of the BASIC programming language with graphics and sound.
* [XC=BASIC](https://github.com/neilsf/XC-BASIC) - a dialect of the BASIC programming language for the Commodore-64 and xcbasic64 is a cross compiler that compiles an XC=BASIC program to 6502 machine code trough the DASM macro assembler. It runs on Windows, Linux and Mac OS. The name XC=BASIC stands for "Cross Compiled BASIC".
* [Xojo](https://www.xojo.com/) - Build Native, Cross-Platform Apps. Rapid application development for Desktop, Web, Mobile & Raspberry Pi. Develop on macOS, Windows or Linux.
* [Yabasic](http://www.yabasic.de/) - a traditional basic-interpreter. It comes with goto and various loops and allows to define subroutines and libraries. It does simple graphics and printing. Yabasic can call out to libraries written in C and allows to create standalone programs. Yabasic runs under Unix and Windows and has a comprehensive documentation; it is small, simple, open-source and free.
* [YAB](https://github.com/bbjimmy/Yab) - a complete BASIC programming language for [Haiku](https://www.haiku-os.org/). Yab allows fast prototyping with simple and clean code. yab contains a large number of BeAPI specific commands for GUI creation and much, much more. yab-IDE is a powerful development environment, which of course is programmed in yab itself.

## IDEs, Editors, Plugins, and Tools

* [DavsIDE](http://www.qbasicnews.com/dav/projects.php#DAVSIDE) - an Alternative IDE for the QB64 compiler.
* [InForm](https://www.qb64.org/inform/) - a GUI engine and WYSIWYG interface designer for QB64.
* [QBASDOWN](https://github.com/clasqm/QBASDOWN) - a Markdown implementation for FreeDOS. Written for FreeDOS in QuickBASIC 4.5
* [mono-basic](https://github.com/mono/mono-basic) - Visual Basic Compiler and Runtime.
* [WinFBE](https://github.com/PaulSquires/WinFBE) - FreeBASIC Editor for Windows.

## Miscellaneous

* [Collection of Commodore BASIC programs](https://github.com/robfromoz/C64-BASIC)
* [Hoard of GW-BASIC](https://github.com/robhagemans/hoard-of-gwbasic) - A collection of GW-BASIC code by various authors.
* [MBASIC-Protect](https://github.com/w4jbm/MBASIC-Protect) - Information on the CP/M MBASIC interpreter's protect mode.
* [GW-BASIC source code](https://github.com/microsoft/GW-BASIC) - The original source code of Microsoft GW-BASIC from 1983.
* [Project Cherry](https://github.com/Sarania/Project-Cherry) - a Chip-8/SCHIP emulator written in FreeBASIC.
* [The Basics' page (since 2001)](http://basic.mindteq.com/)

## Tutorials

* [A Beginner's Guide To FreeBasic](https://github.com/andykmv/Freebasic_user_guide)
* [A Beginner's Guide to Gambas](https://distro.ibiblio.org/vectorlinux/Uelsk8s/GAMBAS/gambas-beginner-guide.pdf)
* [BASIC Gaming](https://games.freebasic.net/basicgaming.php) - a short lived ezine that has a wealth of information
* [BlitzMax for the Absolute Beginner](http://blitzmaxbook.com/)
* [Franktic's FreeBASIC Programming Tutorial](https://frankticfreebasic.blogspot.com/)
* [Programming with yab](https://www.smashwords.com/books/view/691720)
* [QB64 Game Programming](https://www.qb64sourcecode.com/)
* [QBasic (QB64) Tutorial Video Series by SchoolFreeware](https://www.youtube.com/playlist?list=PLF6199808BD4901E1)


text:
# code-vault
Collection of useful notebooks and snippets

repo_name: austin-taylor/code-vault

repo_language: Jupyter Notebook


text:
{:tasks
 {:init (do
          (def +unminify-gcp+ "xfthhxk/unminify-gcp"))
  docker:build:gcp
  {:doc "Builds the GCP Docker container"
   :task
   (let [file "Dockerfile.gcp"
         version "alpha"
         tag (str +unminify-gcp+  ":" version)
         ctx-dir "."
         cmd (format "docker build -f %s -t %s %s" file tag ctx-dir)]
     (shell cmd))}

  docker:run:gcp
  {:doc "Runs the GCP Docker container"
   :task
   (let [{:strs [bucket filename
                 version]
          :or {version "alpha"}} (apply hash-map *command-line-args*)
         cmd (str "docker run -it --rm -p 8080:8080 "
                  " --env BUCKET=" bucket
                  " --env FILENAME=" filename
                  " " +unminify-gcp+ ":" version)]
     (println cmd)
     (shell cmd))}}}

repo_name: xfthhxk/unminify

repo_language: Clojure

mime_type: text/x-clojure


text:
FROM node:16-alpine
RUN npm install nbb -g
RUN mkdir -p /unminify
COPY . /unminify/
WORKDIR /unminify
RUN npm install
WORKDIR /unminify/workspaces/unminify-core
RUN npm install
WORKDIR /unminify/workspaces/unminify-gcp
RUN npm install
WORKDIR /unminify
EXPOSE 8080
ENTRYPOINT ["nbb", "--classpath", ".:./workspaces/unminify-core/src:./workspaces/unminify-gcp/src", "./workspaces/unminify-gcp/src/unminify/gcp.cljs"]


text:
# unminify
unminifies JS stacktrace errors

* Command Line Interface (CLI)
* Google Cloud native Docker container (alpha)
* Other containers?

## Install
Install the command line interface (cli). The executable is `unminify`.
```shell
npm install @unminify/cli -g
```

## CLI Usage
```shell
$ unminify
unminify: restore a minified stacktrace using a source map

  Usage:
  unminify :source-map index.js.map :stacktrace stacktrace.txt

  Available options:
  - :source-map (required) path to source map file
  - :stacktrace (required) path to a file with the minified stacktrace
```

Example minified stacktrace:
```shell
cat stacktrace.txt
TypeError: Cannot read properties of null (reading 'g')
    at https://app.example.com/js/index.js:933:67
    at tg (https://app.example.com/js/index.js:813:394)
    at Function.bd.j (https://app.example.com/js/index.js:815:147)
    at Function.ri.gb (https://app.example.com/js/index.js:933:34)
    at https://app.example.com/js/index.js:3201:443
    at https://app.example.com/js/index.js:1785:34
    at i_ (https://app.example.com/js/index.js:1727:67)
    at p_ (https://app.example.com/js/index.js:1741:67)
    at o_ (https://app.example.com/js/index.js:1745:415)
    at b (https://app.example.com/js/index.js:1724:150)
```

Unminify:
```shell
unminify :source-map index.js.map :stacktrace stacktrace.txt
TypeError: Cannot read properties of null (reading 'g')
    at f (cljs/core.cljs:5265:37)
    at G__42694 (cljs/core.cljs:2527:20)
    at cljs.core.iter_reduce (cljs/core.cljs:2577:8)
    at cljs.core.reduce (cljs/core.cljs:5265:10)
    at page (example/app/core.cljs:55:49)
    at G__45346 (re_frame/subs.cljc:198:70)
    at f (reagent/ratom.cljs:44:5)
    at reagent.ratom/deref-capture (reagent/ratom.cljs:420:7)
    at _run (reagent/ratom.cljs:415:6)
    at reagent.impl.batching/ratom-flush (reagent/impl/batching.cljs:97:5)
```
---
## GCP Container
A Docker container to ingest errors, unminify and write to Error Reporting.

```shell
docker run -it --rm -p 8080:8080 \
--env BUCKET=some-bucket \
--env FILENAME='path/to/source-maps/${version}.index.js.map' \
--env ERROR_ENDPOINT=/error \
--env CORS_ORIGINS='https://*.example.com$,https://*.example.io$' \
--env CORS_CREDENTIALS=true \
--env CORS_MAX_AGE=600 \
--env CORS_ALLOWED_HEADERS='Access-Control-Allow-Origin, Access-Control-Request-Method' \
xfthhxk/unminify:gcp-alpha
```

* Uses source maps from [Cloud Storage](https://cloud.google.com/storage)
* Unminifies the error
* Writes to [Error Reporting](https://cloud.google.com/error-reporting)
* Use environment variables to configure

The `FILENAME` contains `${version}` which is replaced with the version from the client to find the relevant source map. This means as part of your build, the source map must be copied to the bucket at the specified path.

Cloud Run is a good target for running the container.

* Client:
  - Sends request body as either JSON or EDN (Transit coming soon).
  - Includes `stacktrace`, `version` and `service` keys in body.

## Built With
* [nbb](https://github.com/babashka/nbb)
* [node](https://nodejs.org)
* [express](https://expressjs.com)

## Credits
* [Michiel Borkent](https://github.com/borkdude) for making nbb and other amazing tools so that I can Clojure all the things. Much joy!
* [mifi](https://github.com/mifi) for [stacktracify](https://github.com/mifi/stacktracify)

## License
This is free and unencumbered software released into the public domain.


text:
(ns unminify.core
  (:require ["stacktrace-parser" :as stacktrace-parser]
            ["source-map" :as source-map]
            ["fs" :as fs]
            [promesa.core :as p]))

(defn unminify*
  [{:keys [source-map stacktrace]}]
  (when-not (fs/existsSync source-map)
    (throw (ex-info "source-map file not found" {:source-map source-map})))
  (let [stack (->> (stacktrace-parser/parse stacktrace)
                   (mapv (fn [obj]
                           {:method-name (.-methodName obj)
                            :line-number (.-lineNumber obj)
                            :column (.-column obj)})))
        src-map (fs/readFileSync source-map "utf-8")
        header (first (.split stacktrace "\n"))]
    (p/let [consumer (source-map/SourceMapConsumer. src-map)]
      (reduce (fn [ans {:keys [method-name line-number column]
                       :or {method-name ""}}]
                (if (or (not line-number) (< line-number 1))
                  (conj ans {:method-name method-name})
                  (let [p (.originalPositionFor
                           consumer #js {:line line-number :column column})
                        name (some-> p .-name)
                        source (some-> p .-source)
                        line (some-> p .-line)
                        column (some-> p .-column)]
                    (cond-> ans
                      (and p line) (conj {:method-name name
                                          :source source
                                          :line line
                                          :column column})))))
              [{:header header}]
              stack))))

(defn stringify
  [[header & stack]]
  (reduce (fn [ans {:keys [method-name source line column]}]
            (if line
              (str ans "    at " method-name " (" source ":" line ":" column ")\n")
              (str ans "    at " method-name "\n")))
          (some-> header :header (str "\n"))
          stack))

(defn unminify
  "unminifies and stringifies the `:stacktrace` using `:source-map` a
  string pointing to a source map file."
  [args]
  (p/let [stack (unminify* args)]
    (stringify stack)))


text:
(ns unminify.gcp
  "GCP specific unminify and write to error reporting."
  (:require [clojure.string :as str]
            [clojure.edn :as edn]
            [goog.object]
            ;; [cognitect.transit :as transit]
            ["@google-cloud/storage" :as storage]
            ["@google-cloud/error-reporting" :as er]
            ["express$default" :as express]
            ["cors$default" :as cors]
            [unminify.core :as unminify]
            [promesa.core :as p]
            ["process" :as process]
            ["path" :as path]
            ["os" :as os]
            ["fs" :as fs]))

(defonce ^:dynamic *state* {})

(defn- download!
  "Downloads a `filename` from `bucket` and writes it to `destination`.
  Returns a promise."
  [{:keys [bucket file destination]}]
  (-> (storage/Storage.)
      (.bucket bucket)
      (.file file)
      (.download #js {:destination destination})))

(defn- gen-destination
  "Returns the destination file to save the source map to"
  []
  (let [dir (-> (os/tmpdir)
                (path/join "unminify")
                (fs/mkdtempSync))]
    {:dir dir
     :file (path/join dir "source.js.map")}))

(defn- remote-filename
  "Returns a string with the version embedded
  into the filename template. the filename should
  be some path like string with '${version}' in
  the string ie 'source-maps/v${version}.js'"
  [filename version]
  (let [filename (if (str/starts-with? filename "/")
                   (subs filename 1)
                   (filename))]
    (str/replace filename "${version}" version)))

(defn- send-to-error-reporting!
  "Repots an error via error reporting."
  [{:keys [headers service version user-id
           remote-ip]} stacktrace]
  (let [errors (er/ErrorReporting. #js {:reportMode "always"})
        error-msg (doto (.event errors)
                    (.setMessage stacktrace)
                    (.setReferrer (goog.object/get headers "user-agent"))
                    (.setRemoteIp (goog.object/get headers "x-forwarded-for" remote-ip))
                    (.setServiceContext service version)
                    (.setUser user-id)
                    (.setUserAgent (goog.object/get headers "user-agent")))]
    (.report errors error-msg)))

(defn report-unminified!
  "Unminifies the `stacktrace` and reports it to error reporting."
  [{:keys [stacktrace
           version
           service
           bucket
           filename
           debug?] :as args}]
  (when debug?
    (js/console.debug (pr-str args)))
  (assert version)
  (assert bucket)
  (assert stacktrace)
  (assert service)
  (assert filename)
  (let [remote-file (remote-filename filename version)
        {:keys [dir file]} (gen-destination)]
    (p/let [_ (download! {:bucket bucket
                          :file remote-file
                          :destination file})
            legible (unminify/unminify {:stacktrace stacktrace
                                        :source-map file})]
      (send-to-error-reporting! args legible)
      (fs/rm dir #js {:force true :recursive true} identity))))

;;----------------------------------------------------------------------
;; -- HTTP API --
;;----------------------------------------------------------------------
(defn env-variables
  []
  (let [e (.-env process)]
    {:port (js/parseInt (goog.object/get e "PORT" "8080"))
     :error-endpoint (goog.object/get e "ERROR_ENDPOINT" "/error")
     :ping-endpoint (goog.object/get e "PING_ENDPOINT")
     :bucket (goog.object/get e "BUCKET")
     :filename (goog.object/get e "FILENAME")
     :cors-origins (goog.object/get e "CORS_ORIGINS")
     :cors-exposed-headers (goog.object/get e "CORS_EXPOSED_HEADERS")
     :cors-allowed-headers (goog.object/get e "CORS_ALLOWED_HEADERS")
     :cors-credentials? (= "true" (goog.object/get e "CORS_CREDENTIALS" "false"))
     :cors-max-age (js/parseInt (goog.object/get e "CORS_MAX_AGE" "600"))
     :debug? (= "true" (goog.object/get e "DEBUG" "false"))}))

(defn body-reader
  [req _res next]
  (let [buffers #js []]
    (.on req "data" #(.push buffers %))
    (.on req "end" (fn []
                     (->> buffers
                          js/Buffer.concat
                          str
                          (goog.object/set req "body"))
                     (next)))))

;; (defn- parse-transit
;;   [s]
;;   (transit/read (transit/reader :json) s))

(defn strip-byte-order-mark
  [s]
  (if (= \ufeff (first s))
    (subs s 1)
    s))

(defn- parse-json
  [s]
  (-> s js/JSON.parse (js->clj :keywordize-keys true)))

(defn body-parser
  [req _res next]
  (let [ct (.header req "content-type")
        body (some-> (.-body req) strip-byte-order-mark)
        parser (case ct
                 "application/json" parse-json
                 "application/edn" edn/read-string
                 ;; "application/transit+json" parse-transit
                 identity)
        parsed (parser body)]
    (goog.object/set req "body" parsed)
    (next)))

(defn parse-cors-orgins
  [s]
  (if (str/blank? s)
    "*"
    (->> (str/split s ",")
         (mapv re-pattern)
         (into-array))))

(defn start-server!
  []
  (println "Starting server.")
  (let [{:keys [port
                ping-endpoint
                error-endpoint
                cors-origins
                cors-exposed-headers
                cors-allowed-headers
                cors-credentials?
                cors-max-age]} *state*
        app (express)
        cors-mw (-> {:origin (parse-cors-orgins cors-origins)
                     :methods ["GET" "POST"]
                     :allowedHeaders cors-allowed-headers
                     :exposedHeaders cors-exposed-headers
                     :credentials cors-credentials?
                     :maxAge cors-max-age
                     :optionsSuccessStatus 204}
                     clj->js
                     cors)]

    (doto app
      (.disable "x-powered-by")
      (.use body-reader)
      (.use body-parser)
      (.use cors-mw)
      (.options "*" cors-mw))

    (when ping-endpoint
      (.get app ping-endpoint
            (fn [_req res]
              (doto res
                (.json #js {"ping" "pong"})
                (.status 200)))))
    (.post app error-endpoint
           (fn [req res]
             (-> (.-body req)
                 (assoc :headers (.-headers req)
                        :remote-ip (-> req .-socket .-remoteAddress))
                 (merge (select-keys *state* [:bucket :filename :debug?]))
                 (report-unminified!)
                 (.then (fn [_]
                          (println 204 error-endpoint)
                          (doto res
                            (.status 204)
                            (.end))))
                 (.catch (fn [err]
                           (println 500 error-endpoint err)
                           (doto res
                             (.status 500)
                             (.end)))))))
    (.listen app port (fn [] (println "Server listening on port: " port)))))

(defn main
  []
  (.on js/process "unhandledRejection" (fn [reason _promise] (println "ERROR: unhandledRejection " reason)))
  (alter-var-root #'*state* (constantly (env-variables)))
  (println "state: " *state*)
  (assert (string? (:bucket *state*)) "BUCKET env not found")
  (assert (string? (:filename *state*)) "FILENAME env not found")
  (start-server!))

(main)


text:
#!/usr/bin/env node

import { addClassPath, loadFile } from 'nbb';
import { fileURLToPath } from 'url';
import { dirname, resolve } from 'path';

const __dirname = fileURLToPath(dirname(import.meta.url));

addClassPath(resolve(__dirname, 'src'));
addClassPath(resolve(__dirname, 'node_modules/@unminify/core/src'));
await loadFile(resolve(__dirname, 'src/unminify/cli.cljs'));


text:
(ns unminify.cli
  "unminify: restore a minified stacktrace using a source map

  Usage:
  unminify :source-map index.js.map :stacktrace stacktrace.txt

  Available options:
  - :source-map (required) path to source map file
  - :stacktrace (required) path to a file with the minified stacktrace"
  (:require [clojure.edn :as edn]
            [unminify.core :as unminify]
            [promesa.core :as p]
            ["fs" :as fs]))

(defn exit!
  [status msg]
  (println msg)
  (js/process.exit status))

(defn validate-args!
  [{:keys [source-map stacktrace]}]
  (when-not source-map
    (exit! -1 ":source-map not specified"))
  (when-not stacktrace
    (exit! -1 ":stacktrace not specified"))
  (when-not (fs/existsSync source-map)
    (exit! -1 (str ":source-map file not found: " source-map)))
  (when-not (fs/existsSync stacktrace)
    (exit! -1 (str ":stacktrace file not found: " stacktrace))))

(defn- usage
  []
  (-> *ns* meta :doc))

(defn cli
  []
  (let [args-set (set *command-line-args*)]
    (when (or (empty? args-set)
              (contains? args-set "-h")
              (contains? args-set "--help"))
      (exit! -1 (usage)))
    (when-not (even? (count *command-line-args*))
      (exit! -1 "Expected even number of args"))
    (let [{:keys [source-map
                  stacktrace] :as args}
          (into {} (for [[k v] (partition 2 *command-line-args*)]
                     [(edn/read-string k) v]))]
      (validate-args! args)
      (p/let [s (unminify/unminify
                 {:source-map source-map
                  :stacktrace (fs/readFileSync stacktrace "utf-8")})]
        (println s)))))

(alter-var-root #'*command-line-args*
                (-> js/process.argv
                    (.slice 2)
                    js->clj
                    not-empty
                    constantly))

(cli)


text:
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open, welcoming, and inclusive environment, we as contributors and maintainers pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Using welcoming and inclusive language
* Showing empathy and kindness toward other community members
* Being respectful of differing opinions, viewpoints, and experiences
* Providing constructive feedback if it is asked for, and gracefully accepting constructive criticism
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience

Examples of unacceptable behavior include:

* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying and enforcing our standards of
acceptable behavior and are expected take appropriate and fair corrective action in
response to any instances of unnacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the project team at MapPromptMonday@gmail.com.
The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

repo_name: MapPromptMonday/MapPromptMonday


text:
![A world map created using bounding boxes of internal administrative boundaries. Text on the map says Map Prompt Monday. A weekly social mapping project for everyone!](https://user-images.githubusercontent.com/120138702/208989231-043ebc41-c798-4112-8f68-be6f1ad225dd.jpg)

# Welcome to Map Prompt Monday!

**This is the official repository for #MapPromptMonday, a weekly social mapping project open to everyone.**

The intent of Map Prompt Monday is to create a welcoming, supportive, and thoughtful community around producing and sharing maps on social media using the hashtag #MapPromptMonday.

# Map Prompts

[2023 prompts](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023)

| Start Date    | End Date   | Prompt     |
| ---           | ---        | ---        |
| 2023-01-02    | 2023-01-08 | [Region(s)](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-01-02)|
| 2023-01-09    | 2023-01-15 | [Heat Map or Hot Spot Map](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-01-09)|
| 2023-01-16    | 2023-01-22 | [Colorblind Friendly](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-01-16)|
| 2023-01-23    | 2023-01-29 | [Film/TV](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-01-23)|
| 2023-01-30    | 2023-02-05 | [Flow Map](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-01-30)|
| 2023-02-06    | 2023-02-12 | [Climate/Weather](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-02-06)
| 2023-02-13    | 2023-02-19 | [Bivariate Map](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-02-13)
| 2023-02-20    | 2023-02-26 | [Black and White / Grayscale](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-02-20)
| 2023-02-27    | 2023-03-05 | [NGO Data](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-02-27)
| 2023-03-06    | 2023-03-12 | [Favorite Animal](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-03-06)
| 2023-03-13    | 2023-03-19 | [Earth Imagery](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-03-13)
| 2023-03-20    | 2023-03-26 | [Inspired By...](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-03-20)
| 2023-03-27    | 2023-04-02 | [Recent Environmental Disaster](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-03-27)
| 2023-04-03    | 2023-04-09 | [Bucket List](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-04-03)
| 2023-04-10    | 2023-04-16 | [Topography](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-04-10)
| 2023-04-17    | 2023-04-23 | [Environment](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-04-17)
| 2023-04-24    | 2023-04-30 | [Disease](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-04-24)
| 2023-05-01    | 2023-05-07 | [Urban vs. Rural](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-05-01)
| 2023-05-08    | 2023-05-14 | [Home](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-05-08)
| 2023-05-15    | 2023-05-21 | [Proportional Symbols](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-05-15)
| 2023-05-22    | 2023-05-28 | [Book Cover](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-05-22)
| 2023-05-29    | 2023-06-04 | [Climate Chg Vulnerability](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-05-29)
| 2023-06-05    | 2023-06-11 | [Safety](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-06-05)
| 2023-06-12    | 2023-06-18 | [Arctic or Antarctic](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-06-12)
| 2023-06-19    | 2023-06-25 | [Solstice/Seasons](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-06-19)
| 2023-06-26    | 2023-07-02 | [Plants](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-06-26)
| 2023-07-03    | 2023-07-09 | [Snow or Ice](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-07-03)
| 2023-07-10    | 2023-07-16 | [Deserts](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-07-10)
| 2023-07-17    | 2023-07-23 | [Desserts](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-07-17)
| 2023-07-24    | 2023-07-30 | [Natural Wonders](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-07-24)
| 2023-07-31    | 2023-08-06 | [Health](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-07-31)
| 2023-08-07    | 2023-08-13 | [Voronoi Polygons](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-08-07)
| 2023-08-14    | 2023-08-20 | [Map of Personalities](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-08-14)
| 2023-08-21    | 2023-08-27 | [Purple](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-08-21)
| 2023-08-28    | 2023-09-03 | [Media to Map](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/Prompts/2023/2023-08-28)

# How Map Prompt Monday Works

Each week you can create and share a map based on the provided prompt. Prompts are provided in advance, but a new prompt begins each Monday. Given the #MapPromptMonday name you are encouraged to share your maps and relevant resources on Mondays! However, knowing life is busy and to encourage participation, you are also encouraged to share your maps and resources throughout the week of the current prompt!

Prompts will take a variety of forms, such as focus on making a specific type of map, a map with a specific dataset, or focusing on map accessibility. To help everyone have the ability to learn more about map making, you can find a list of free additional resources on various mapping and cartographic topics that will continue to be added to over time [in the AdditionalResources folder](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/AdditionalResources).

Prompts will be released in advance in monthly blocks at minimum one week before the beginning of the month. For example, map prompts for all weeks in February will be released no later than January 25.

Still have a question? See the Frequently Asked Questions section at the end of this README file.

# Map Prompt Monday Guidelines

Everyone is welcome to participate, but please follow these guidelines:
1) Be supportive and kind to all participants and [follow our Code of Conduct](https://github.com/MapPromptMonday/MapPromptMonday/blob/main/CODE_OF_CONDUCT.md)
2) Strive to make ethical maps using best practices and be mindful of your power as mapmaker. For background and references on these topics, see the [Map & Data Ethics section of the Tutorials & References page in the Additional Resources folder](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/AdditionalResources/Tutorials%26References)
3) Please no negative or critical unsolicited comments on another person’s map. If a person says they are open to comments, please keep comments positive, constructive, and how you envision the map might be improved.
4) Make sure to include a picture of your map when you post it, and please add alt text to your maps. You can learn more about alt text and ideas for crafting good alt text in the section called "Please Use Alt Text" below.
5) Please consider sharing information about how you made your map. You are not required to share any supplemental resources, but others may appreciate learning from your work.
6) Please only post maps you have made using the #MapPromptMonday hashtag. However, feel free to reshare with attribution any other maps with this hashtag.
7) Give credit to the data sources you use to create your map whenever possible

A tip of the hat to #30DayMapChallenge and #TidyTuesday for providing inspiration to start this project and templates for how to operate.

# Submitting Ideas For Map Prompts

Thanks for your Map Prompt ideas! We will work to implement all submitted ideas into future prompts that meet the following criteria: (1) the topic is general enough to allow participants flexibility and variety to create maps in different ways and interpretations; (2) the prompt is relatively short and simple; (3) the topic and prompt are accessible to people at all skill levels.

You can submit your idea for a map prompt in one of two ways:

#### (1) Submit A New Issue via GitHub

1) [Go to Issues section](https://github.com/MapPromptMonday/MapPromptMonday/issues) and select the New Issue button

2) Provide a title and short description of the map prompt as part of your submission. For example, your map prompt title could be "Points" and your description for the map prompt would say "In this prompt, participants would make a map that includes points". If your idea uses a data set, please include a link to the data set.

#### (2) Provide Prompt via Google Form

[Go to the linked Google Form here](https://forms.gle/t96VGVrDyRk223Ev8) and follow the instructions to submit your prompt idea.

# Please Use Alt Text

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)

# Map Prompt Monday Frequently Asked Questions

Below is a list of questions you might have about #MapPromptMonday and answers for each one

##### Q: I’m intimidated by all the beautiful maps because I’m not really a cartographer. Should I even do this?
A: Yes, we hope you join us! We encourage people of all mapping abilities and levels to post their maps! Maps can still have important stories to tell and be great conversation-starters even if they are not deemed to be aesthetically pleasing by someone who claims to be a cartographer. We want Map Prompt Monday to be a community where anyone feels safe sharing their maps and being comfortable.

##### Q: Can I make multiple maps for a prompt and post them?
A: Absolutely! Make as many maps as you want for each prompt. We assume most people who participate for a chosen week will create one or two maps to practice their skills on that specific prompt, but there is no limit to how many maps you make. Just make sure they are your original creations!

##### Q: I want to post a map I made that’s relevant to the prompt this week
A: Awesome! Please at minimum do the following things before you post your map. One: Include a picture of the map when you post to Twitter (or other platform) and in the text of your post use the #MapPromptMonday hashtag so we can all quickly and efficiently access your map! Two: please add alt text (also known as alternative text) to your map image so that we are inclusive to all social media users! See the section Please Use Alt Text above.

##### Q: I want to post a web page or other online accessible resource that’s relevant to the prompt this week
A: Great! Please remember to include a link to the resource in your post. Also, please only post free and openly accessible resources so everyone has the ability to access them.

##### Q: I want to post a map or resource that’s not relevant to the prompt this week
A: I’m glad you are enthusiastic, but please either save the maps or resources for another week when they are relevant, or feel free to post the resource on your own but without the #MapPromptMonday hashtag

##### Q: Do I need to sign up for anything?
A: Nope! Just share and/or enjoy the maps and cartography resources everyone is posting.

##### Q: How often should I participate?
A: Participate whenever and how often you want. The idea behind having the whole week for a prompt is so people have more time and flexibility to participate. However, you are not obligated to participate any week you don’t want to or don’t have the time or energy.

##### Q: I have an idea for a map prompt to be done in the future!
A: Ideas for prompts are always appreciated and we want to hear them! Please follow guidelines in the "Submitting Ideas For Map Prompts" section of this page.

##### Q: Am I restricted in the tools, technologies, or data I can use to create maps?
A: The short answer is no, you can use any tools or data to make your maps. There are a couple possible exceptions. One: a few prompts might focus on using a specific dataset or data provider. In that scenario, you can use other datasets in combination with the dataset chosen for the prompt, but at least one of your data layers used to create your map features should come from the chosen dataset. Two: please use your best judgement when choosing data sources and map visualizations by keeping data and map ethics in mind so that you are not inadvertently causing harm. Links to articles on this topic can be found under the [Map & Data Ethics section of the Tutorials & References page in the Additional Resources folder](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/AdditionalResources/Tutorials%26References).


text:
# Additional Resources Section

In these folders you can find links to webpages and additional information on various resources related to mapping and cartography


text:
## Mapping Tools/Software

Below is a selection of *free open source mapping tools* available to anyone. However, map prompts can be completed using any type of tools/software, including without GIS/Mapping software or without a computer.

If you are looking for tutorials for many of these tools, [see the Tutorials & References Section](https://github.com/MapPromptMonday/MapPromptMonday/tree/main/AdditionalResources/Tutorials%26References)

### [QGIS](https://www.qgis.org/en/site/)

QGIS is a free and open source Geographic Information System software that you can install on your computer. QGIS provides you to tools to read and write multiple data formats and output a variety of map types.

### [Felt](https://felt.com/)

Felt is a website with basic map-making tools where you can use data on their website or bring in your own, then make a variety of edits and annotations.

### [R Geospatial Packages](https://www.r-project.org/)

R is a free command-line driven software originally designed for statistical computing and graphics, but many packages (or plug-ins) have been designed and can be accessed to provide an array of geospatial capabilities. Below are just a small selection of packages frequently used for geospatial analyses:

[sf](https://r-spatial.github.io/sf/): simple features for R

[ggplot2](https://ggplot2.tidyverse.org/): creates graphics and can handle spatial features

[terra](https://rspatial.org/pkg/index.html): provides methods for vector and raster spatial data analysis

[tmap](https://cran.r-project.org/web/packages/tmap/vignettes/tmap-getstarted.html): for thematic mapping

[rayshader](https://www.rayshader.com/): create 2D and 3D data visualizations

[osmplotr](https://github.com/ropensci/osmplotr): produce maps using OpenStreetMap (OSM) data

[cartography](https://cran.r-project.org/web/packages/cartography/vignettes/cartography.html): control visual quality of thematic maps

### [Aerialod](https://ephtracy.github.io/index.html?page=aerialod)

Aerialod is path tracing renderer that can be used to create 3D visualizations

### [Blender](https://www.blender.org/)

Blender provides a 3D creation suite of tools. You can also work on spatial data in Blender with the help of the [BlenderGIS add-ons](https://github.com/domlysz/BlenderGIS)


text:
## Data Sources

Unless the focus of a prompt is to use a specific data set, **you can use any data you want**. This page provides links to various data sources provided in geospatial-friendly file formats that can help you more quickly get mapping.

### Topical Data Sources

[OpenStreetMap](https://www.openstreetmap.org/): OpenStreetMap (OSM) is a free and open geographic database updated by volunteers. There are a few ways to get extracts of the data. [GeoFabrik](https://download.geofabrik.de/) allows you to download Shapefiles of countries or sub-regions. [BBBike](https://extract.bbbike.org/) allows you to set bounding areas and obtain data within your selected area. [Overpass Turbo](https://overpass-turbo.eu/) allows you to have more control over the areas and features you select and export to a chosen data type.

[Natural Earth Data](https://www.naturalearthdata.com/): Natural Earth is a public domain map dataset available at 1:10m, 1:50m, and 1:110 million scales. A varierty of both physical earth and human cultural layers are made available. **NOTE** For cultural layers such as the countries polygon layers, make sure you understand the difference between the de facto versus the de jure data and choose the data appropriate for your map.

[ESRI ArcGIS Open Data Hub](https://hub.arcgis.com/search): An online platform that allows you to browse and display geographic information from organizations and governments.

[AWS Open Geographic Data Repo](https://github.com/giswqs/aws-open-data-geo): A GitHub page listing publicly available geospatial datasets hosted by Amazon Web Services.

[Free GIS Data](https://freegisdata.rtwilson.com/): A website with a categorised list of links to over 500 sites providing freely available geographic datasets

[Humanitarian Data Exchange](https://data.humdata.org/): Datasets relevant to humanitarian causes and population from around the world

[EfoxMaps GIS Data Sources](https://vlckel.notion.site/vlckel/a360dea317234868a0f7cfb1ef249843?v=2923f79780214ec390b9f0fefbc1c002): An extensive list of GIS-applicable data sources

[Maptastic Resources by Kate Berg](https://docs.google.com/spreadsheets/d/1aLOpW2oQHw5r2vc70o8TiM5SJctR9TuH4a70d-ZtbXA/edit#gid=0): A list of various GIS data portals


text:
## Tutorials & References
Below are links to tutorials and references on various topics related to mapping and cartography

Topical headers sorted under the Tutorials and References sections are sorted alphabetically

The resources below will continue to be added to over time

## Tutorials

### Blender
[How to Create 3D Terrain with Google Maps and Blender! - YouTube](https://www.youtube.com/watch?v=Mj7Z1P2hUWk&ab_channel=CGGeek): A concise guide on how to use Google Maps in Blender to build 3D terrain maps.

### QGIS

[QGIS 3 for Absolute Beginners](https://www.youtube.com/watch?v=kCnNWyl9qSE) by Klas Karlsson is one good starting point for people new to geographic information systems software

[QGIS Uncovered](https://www.youtube.com/playlist?list=PL7HotvlLKHCs9nD1fFUjSOsZrsnctyV2R) by Steven Bernard is another good starting point for learning QGIS

[QGIS Tutorials and Tips](https://www.qgistutorials.com/en/) by Ujaval Gandhi is another great learning and reference resource for QGIS

[Daniel Coe Tutorials](https://dancoecarto.com/tutorials): Tutorials on creating DEMs and REMs by cartographer Daniel Coe

### R

[Geocomputation with R](https://geocompr.robinlovelace.net/): A book by Robin Lovelace, Jakub Nowosad, and Jannes Muenchow on geographic data analysis, visualization and modeling. Chapter 9 specifically focuses on making maps in R.

[Creating High-Quality 3D Visuals with Rayshader](https://spencerschien.info/post/data_viz_how_to/high_quality_rayshader_visuals/) by Spencer Schien provides A detailed step-by-step guide on how to make 3D maps using the "rayshader" package All the required code may be found in the GitHub repository that is included.

[Blog | Milos Popovic - personal website and blog](https://milospopovic.net/blog/): An extensive collection of guides on using R to produce beautiful visualizations.

[How To Make Geographic Map Visualizations In R](https://www.business-science.io/code-tools/2020/12/08/geographic-map-visualization.html?utm_content=buffer09aff&utm_medium=social&utm_source=twitter.com&utm_campaign=buffer) by Matt Dancho is a brief tutorial showing step-by-step how to use ggplot2 to generate a simple map visualization

[R Maps: Beautiful Interactive Choropleth & Scatter Maps with Plotly - YouTube](https://www.youtube.com/watch?v=RrtqBYLf404&ab_channel=Dataslice): A step-by-step guide for using Plotly to make interactive choropleth and scatter maps

[Make Your Own Interactive Map of COVID-19 Spread Using R Shiny - YouTube](https://www.youtube.com/watch?v=eIpiL6y1oQQ&ab_channel=RockEDUScienceOutreach): A detailed guide on how to create an interactive choropleth map utilizing COVID-19-related public data sources.

## References

### Color

#### Color Palettes and Selection Websites

[Coolors](https://coolors.co/): color palettes generator

[ColorSpace](https://mycolor.space/): color palettes generator

[ColorBrewer](https://colorbrewer2.org/): pick and view color palettes

[Adobe Color](https://color.adobe.com/create): create color palettes based on various color schemes

[Color-Hex](https://www.color-hex.com/color-palettes/popular.php): View color palettes

#### Color Palettes and Selection for R users

[paletteer](https://github.com/EmilHvitfeldt/paletteer): comprehensive collection of color palettes in R

[MetBrewer](https://github.com/BlakeRMills/MetBrewer): R color palettes inspired by works at the Metropolitan Museum of Art in New York

[nationalparkcolors](https://github.com/katiejolly/nationalparkcolors): R color palettes based on US National Parks

[eyedroppeR](https://github.com/doehm/eyedroppeR): select colors from an image

[scico](https://github.com/thomasp85/scico): Scientific color palettes

#### Other Miscellaneous Color-related Tools

[Sequential Color Scheme Generator](http://eyetracking.upol.cz/color/): Generate sequential color schemes

[Paletton](https://paletton.com/): Color Scheme Designer

[0 to 255](https://0to255.com/): Help picking Lighter and Darker Colors

### Fonts and Text

[Cartographers’ Preferred Typefaces](https://somethingaboutmaps.wordpress.com/2018/02/12/cartographers-preferred-typefaces/) Blog post by Daniel Huffman describing the preferred typefaces of cartographers interviewed by Daniel

[Chapter 7: Typography](https://alg.manifoldapp.org/read/introduction-to-cartography/section/f040bcf8-a5a9-4261-a749-9f793220c702) Part of a book called *Introduction to Cartography* published by the University System of Georgia

[Labeling and text hierarchy in cartography](https://www.axismaps.com/guide/labeling): A guide by Axis Maps to placing text on your maps

### Map and Data Ethics

[Cartography and Power](http://gistbok.ucgis.org/bok-topics/cartography-and-power): Section from GIS Body of Knowledge on the power and ethics of map making to be aware of, with links to many other references and resources used to create the entry

[Do No Harm Guide: Applying Equity Awareness in Data Visualization](https://www.urban.org/research/publication/do-no-harm-guide-applying-equity-awareness-data-visualization): A report by the Urban Institute on best practices for ethical data visualization

[British Cartographic Society Code of Ethics](https://www.cartography.org.uk/code-of-ethics): One set of code of ethics for cartographers that can serve as a starting point for ethical conduct in map making


text: ### Map Prompts by Year


text:
# 2023 Map Prompts

Prompts by Week in 2023 for #MapPromptMonday


text:
## Week of May 15th to 21st (Prompt = Proportional Symbols)

#### Prompt: For this week, make a map on a topic of your choice that can be depicted using proportional symbols.

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of January 2nd to January 8th (Prompt = Regions)

#### Prompt: Make a map with one or more region(s). You as the maker of the map get to decide how you will define, interpret, and map your chosen region(s), whether it be a defined administrative boundary or based on physical earth and/or human cultural characteristics. The goal of this prompt is to get you to engage with the idea of how a region might be defined and think about various ways to best visualize the region(s).

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of February 20th to February 26th (Prompt = Black and White / Grayscale)

#### Prompt: Make a map on a topic of your choice that only uses black, white, and/or grayscale for color. These maps are typically used for educational or reference purposes, and are often simpler and easier to read than maps that use multiple colors. For example, they can be used to show a specific aspect of a location, such as topography or political boundaries.

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of May 1st to 7th (Prompt = Urban vs. Rural)

#### Prompt: Create a map that showcases urban / rural divide (or different levels of urbanicity) across a given dimension, such as electrification, infrastructure, access to healthcare, etc…it’s up to you!

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of June 5th to June 11th (Prompt = Safety)

#### Prompt: June is National Safety Month, and to celebrate it, this week create a safety-themed map. You have various options to choose from, such as fire safety, swimming-related deaths, 911 calls, and addressing. Let's explore how we can represent these topics visually on a map!

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of May 29th to June 4th (Prompt = Climate Change Vulnerability)

#### Prompt: Create a map illustrating the disproportional impacts of climate change on a specific region / country / city, or other location. For example, you could highlight the areas that are most vulnerable to rising sea levels, droughts, floods, or other environmental risks.

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of April 3rd to 9th (Prompt = Bucket List)

#### Prompt: Map something on your bucket list! It could be an activity, like petting sea turtles, a location or a city you want to visit, or something entirely different!

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)


text:
## Week of August 21 to August 27 (Prompt = Purple)

#### Prompt: For this week, make a map that predominantly uses the color purple (you can use other colors, but the purple color should be an important color of the colors you use). Bonus if the object or phenomena you choose to map is purple in real life!

## Please Use Alt Text (Resources)

Please add alt text (alternative text) to all of your posted maps for #MapPromptMonday

You can find [Twitter guidelines here](https://help.twitter.com/en/using-twitter/picture-descriptions) how to add alt text to your images, as well as [a description on Twitter Help here](https://help.twitter.com/en/using-twitter/set-image-description-reminder#:~:text=Select%20Settings%20and%20privacy.&text=Select%20Accessibility%2C%20display%2C%20and%20languages.&text=Select%20Accessibility.&text=In%20the%20Media%20section%2C%20select,for%20Receive%20image%20description%20reminder.) how you can set up image description reminders when you have tweets with images

[DataViz Society/Nightingale article on alt text](https://medium.com/nightingale/writing-alt-text-for-data-visualization-2a218ef43f81)

[Penn State Charts and Accessibility article](https://accessibility.psu.edu/images/charts/)

## Please Use Alt Text (Example)

> ### Here is a simple formula that can help you quickly generate alt text for your map:
>
> Alt Text = “Map of location that shows type of data. Primary takeaway from map.”
>
> #### “Map of”
>
> You can also be more specific here by describing the type of map, such as choropleth or raster satellite image
>
> #### “location”
>
> Describe the location and scale of your map. Is it the United States, Illinois, Chicago, or the Lincoln Park neighborhood of Chicago?
>
> #### “type of data”
>
> Explain what data is being shown by the map
>
> #### "Primary takeaway from map"
>
> Summarize in a sentence what you most want the reader to know about what the map shows
>
> ### Example
>
> ![World Map of Tea Production 2019](https://user-images.githubusercontent.com/120138702/207097510-3304da4f-a1fe-4058-b0ae-9931f89baf4e.png)
>
> Alt Text Example for the Map Above: "A world map showing production of tea leaves by country. China and India are the world leading producers of tea."
>
> Map Author: Caroline Léna Becker, Map source: [Wikimedia Commons](https://commons.wikimedia.org/wiki/File:World_Map_Tea_Production.svg)