diff --git a/config/survey.jl b/config/survey.jl index cfc2eef..6eb0f06 100644 --- a/config/survey.jl +++ b/config/survey.jl @@ -1 +1,248 @@ -Survey("Emacs User Survey — 2022") +Survey( + "Emacs User Survey — 2022", + "Help the community have a better understanding of itself and its + own diversity in Emacs usage. Discover and show how people are using + this versatile tool for everything, from software engineering to + academia and journalism. +

+This takes most people ?–? minutes to complete. +

+Disclaimer: This is currently just a draft based on the 2020 survey, +the questions you see now will not neccesarily be in the final survey.", + SurveyPart("Emacs Usage", + MultiSelect(:emacs_tasks, + "Which of the following activities do you use Emacs for?", + ["Work", "Hobby projects", :other]), + NumberInput(:emacs_years, + "How many years have you been using Emacs for?", + validators = v -> if v < 0 + "Seriously? Are we supposed to believe you're just planning ahead?" + elseif v > 45 + "Oh really? 🤨" + end), + RadioSelect(:emacs_version, + "Which version/fork of Emacs do you use?", + ["29 (master)" => "29", + "28", "27", "26", :other]), + MultiSelect(:operating_system, + "Which operating system to you use Emacs on?", + ["GNU/Linux", "Windows", "MacOS", "BSD", :other]), + MultiSelect(:emacs_mode, + "How do you run Emacs?", + ["Graphical Application (GUI)" => "GUI", + "Terminal (TUI)" => "TUI", + "Daemon/Client" => "daemon"]), + RadioSelect(:keybindings, + "Which keybindings do you use?", + ["Default (Emacs)" => "Emacs", "Vim", "CUA", :other]), + RadioSelect(:starter_kit, + "Do you use a starter kit/configuration framework?", + ["No, I have lightly configured vanilla Emacs" => "minimal vanilla", + "No, I have an extensive, fully-custom configuration" => "maximal vanilla", + "Doom Emacs", "Spacemacs", "Prelude", + :other]), + RadioSelect(:elisp, + "What is your level of elisp proficiency?", + ["No knowledge" => "none", + "I can copy-paste and tweak some code" => "copy-paste", + "I can write simple functions" => "simple functions", + "Fairly proficient, I can/have written my own package." => "write package", + "I maintain multiple packages" => "many packages"]), + MultiSelect(:languages, + "Which languages do you program (in Emacs) in?", + ["Assembly", "C++", "C", "C#", "Clojure", + "Erlang", "Go", "HTML/CSS", "Haskell", "Javascript", + "Julia", "Java", "Lisp", "Python", "PHP", "Perl", + "R", "Rust", "Ruby", "Shell scripting" => "Shell", + "SQL", "Typescript", :other])), + SurveyPart("First time questions", + "All of these questions are optional. Answer these if you're doing the survey for the first time.", + RadioSelect(:prior_editor, + "Which editor did you use before you started using Emacs?", + ["None", "Vim", "VS Code", "IntelliJ", "Atom", + "Eclipse", "Nodepad++", :other], + mandatory=false), + TextArea(:emacs_strengths, + "What do you think are Emacs' greatest strengths?", + validators=[wordlimit(400), charlimit(6*400)], + mandatory=false), + TextArea(:emacs_dificulties, + "Can you recall any difficulties you faced when initially learning Emacs?
Please be as specific and concrete as your memories permit.", + validators=[wordlimit(400), charlimit(6*400)], + mandatory=false), + RadioSelect(:emacs_introduction, + "How were you introduced to Emacs?", + ["Friend", "University", "Some part of the internet" => "Internet", :other], + mandatory=false), + MultiSelect(:emacs_motivations, + "What features motivated you to initially try Emacs?", + ["Extensibility", "Package/ecosystem", + "Community", "Part of the GNU project / FSF"], + mandatory=false)), + SurveyPart("Packages", + MultiSelect(:package_manager, + "How do you manage third-party packages?", + ["My framework/starter kit's default" => "framework default", + "package.el (built-in)" => "package.el", + "straight.el" => "straight.el", + "use-package" => "use-package.el", + "manual (git clone/download)" => "manual", + "not sure", :other]), + MultiSelect(:package_repositories, + "Which package repositories do you use?", + ["My framework/starter kit's default" => "framework default", + "GNU ELPA" => "ELPA", "Melpa", "Melpa Stable", + "Built from source (e.g. using straight)" => "Source", + "not sure", :other]), + TextArea(:favorite_packages, + "Could you list some of your favourite packages? (comma-seperated)"; + validators = [t -> if length(split(t, ',')) < 2 + "Come on, surely you like at least two packages?" + elseif length(split(t, ',')) > 10 + "That's a lot of packages. Surely you can cut that down to a top 10?" + end, wordlimit(30), charlimit(200)]), + MultiSelect(:theme, # people can use a light and dark theme + "Which theme do you use?", + ["The default theme" => "default", + "my own custom theme", + "doom-one", "dracula", "gruvbox", + "modus-operandi", "modus-vivendi", "nord", + "solarized", "solarized-dark", "zenburn", + :other]), + MultiSelect(:org_usage, + "Which use cases of Org Mode apply to your usage (if any)?", + ["Note taking", "General document writing", + "Task management", "Agenda", "Time tracking", + "Personal knowledge database (org-roam)" => "org-roam", + "Literate programing / notebooks (babel)" => "babel"], + mandatory=false), + RadioSelect(:magit_usage, + "How often do you use Magit?", + ["Frequently", "Rarely", "Never"]), + RadioSelect(:tramp_usage, + "How often do you use TRAMP?", + ["Frequently", "Rarely", "Never"]), + MultiSelect(:term_package, + "Do you use a terminal emulator in Emacs?", + ["No", "eshell", "shell", "term", "ansi-term", "vterm", :other]), + RadioSelect(:email_package, + "Do you use an Email client in Emacs?", + ["No", "Gnus", "Mu4e", "notmuch", "Wanderlust", :other]), + RadioSelect(:spell_package, + "Do you use a spell checker in Emacs?", + ["No", "My framework/starter kit's default" => "framework default", + "flyspell", "spell-fu", :other]), + RadioSelect(:undo_package, + "Do you use an undo package in Emacs?", + ["No", "My framework/starter kit's default" => "framework default", + "undo-tree", "undo-fu", :other]), + RadioSelect(:project_package, + "Do you use an project management package in Emacs?", + ["No", "My framework/starter kit's default" => "framework default", + "project.el", "projectile", :other]), + MultiSelect(:selection_package, + "Do you use any selection packages?", + ["No", "My framework/starter kit's default" => "framework default", + "Helm", "Ivy", "Ido", "Icomplete", + "Vertico", "Selectrum", "Marginalia", "Consult", + :other])), + SurveyPart("Contribution", + RadioSelect(:emacs_contribution, + "Have you ever contributed to Emacs or an ELPA package?", + ["No", "Occasionaly", "Frequently"]), + TextArea(:emacs_contribution_feedback, + "Have you got any feedback on the Emacs/ELPA contribution process?", + validators=[wordlimit(400), charlimit(6*400)], + mandatory=false), + RadioSelect(:melpa_contribution, + "Have you ever contributed to a Melpa package?", + ["No", "Occasionaly", "Frequently"]), + RadioSelect(:isa_package_maintainer, + "Do you maintain any Emacs packages?", + ["Yes", "No"]), + RadioSelect(:has_donated, + "Have you ever contributed financially to Emacs development (via the FSF)", + ["No", + "Yes", + "I would if I could donate to Emacs directly" => "Would directly", + "I would like to, but cannot" => "Cannot"])), + SurveyPart("Demographics (all questions are optional)", + NumberInput(:respondent_age, + "How old are you?", + validators = n -> if n < 8 + "My, you're advanced for you're age. Suspisiously advanced…" + elseif n > 100 + "Congratulations on becoming a centernarian! How about you get one of your grandchildren to do this survey instead?" + end, + mandatory=false), + RadioSelect(:respondent_gender, + "What is your gender?", + ["Male", "Female", "Other"], + mandatory=false), + RadioSelect(:respondant_education, + "What is the highest level of education you have completed?", + ["High school" => "School", + "Asosociate's Degree" => "Asosociates", + "Bachelor's Degree" => "Bachelors", + "Master's Degree" => "Masters", + "PhD or equivalent" => "PhD"], + mandatory=false), + Dropdown(:respondant_nationality, + "What is your nationality?", + # taken from https://www.gov.uk/government/publications/nationalities/list-of-nationalities + ["Afghan", "Albanian", "Algerian", "American", "Andorran", "Angolan", "Anguillan", "Antigua and Barbuda", + "Argentine", "Armenian", "Australian", "Austrian", "Azerbaijani", "Bahamian", "Bahraini", "Bangladeshi", + "Barbadian", "Belarusian", "Belgian", "Belizean", "Beninese", "Bermudian", "Bhutanese", "Bolivian", + "Bosnia and Herzegovina", "Botswanan", "Brazilian", "British", "British Virgin Islander", "Bruneian", + "Bulgarian", "Burkinan", "Burmese", "Burundian", "Cambodian", "Cameroonian", "Canadian", "Cape", "Verdean", + "Cayman Islander", "Central", "African", "Chadian", "Chilean", "Chinese", "Colombian", "Comoran", + "Congolese (Congo)", "Congolese (DRC)", "Cook Islander", "Costa", "Rican", "Croatian", "Cuban", "Cymraes", + "Cymro", "Cypriot", "Czech", "Danish", "Djiboutian", "Dominican", "Dominican Republic citizen", "Dutch", + "East Timorese", "Ecuadorean", "Egyptian", "Emirati", "English", "Equatorial", "Guinean", "Eritrean", "Estonian", + "Ethiopian", "Faroese", "Fijian", "Filipino", "Finnish", "French", "Gabonese", "Gambian", "Georgian", + "German", "Ghanaian", "Gibraltarian", "Greek", "Greenlandic", "Grenadian", "Guamanian", "Guatemalan", + "Guinea-Bissau citizen", "Guinean", "Guyanese", "Haitian", "Honduran", "Hong", "Konger", "Hungarian", "Icelandic", + "Indian", "Indonesian", "Iranian", "Iraqi", "Irish", "Israeli", "Italian", "Ivorian", "Jamaican", "Japanese", + "Jordanian", "Kazakh", "Kenyan", "Kittitian", "Kiribati citizen", "Kosovan", "Kuwaiti", "Kyrgyz", "Lao", + "Latvian", "Lebanese", "Liberian", "Libyan", "Liechtenstein citizen", "Lithuanian", "Luxembourger", + "Macanese", "Macedonian", "Malagasy", "Malawian", "Malaysian", "Maldivian", "Malian", "Maltese", + "Marshallese", "Martiniquais", "Mauritanian", "Mauritian", "Mexican", "Micronesian", "Moldovan", "Monegasque", + "Mongolian", "Montenegrin", "Montserratian", "Moroccan", "Mosotho", "Mozambican", "Namibian", "Nauruan", + "Nepalese", "New Zealander", "Nicaraguan", "Nigerian", "Nigerien", "Niuean", "North Korean", "Northern", + "Irish", "Norwegian", "Omani", "Pakistani", "Palauan", "Palestinian", "Panamanian", "Papua", "New", "Guinean", + "Paraguayan", "Peruvian", "Pitcairn Islander", "Polish", "Portuguese", "Prydeinig", "Puerto", "Rican", + "Qatari", "Romanian", "Russian", "Rwandan", "Salvadorean", "Sammarinese", "Samoan", "Sao", "Tomean", + "Saudi Arabian", "Scottish", "Senegalese", "Serbian", "Seychelles citizen", "Sierra", "Leonean", + "Singaporean", "Slovak", "Slovenian", "Solomon Islander", "Somali", "South African", "South Korean", + "South Sudanese", "Spanish", "Sri", "Lankan", "St Helenian", "St Lucian", "Stateless", "Sudanese", + "Surinamese", "Swazi", "Swedish", "Swiss", "Syrian", "Taiwanese", "Tajik", "Tanzanian", "Thai", "Togolese", + "Tongan", "Trinidadian", "Tristanian", "Tunisian", "Turkish", "Turkmen", "Turks and Caicos Islander", + "Tuvaluan", "Ugandan", "Ukrainian", "Uruguayan", "Uzbek", "Vatican citizen", "Vanuatu citizen", + "Venezuelan", "Vietnamese", "Vincentian", "Wallisian", "Welsh", "Yemeni", "Zambian", "Zimbabwean"], + mandatory=false), + RadioSelect(:respondent_ocupation, + "Which industry do you work in?", + ["Academia (Student)" => "Student", + "Academia/Research" => "Research", + "Education", "FinTech", + "Healthcare", "Legal", "Manufacturing", + "Software Development", "Telecom", + :other], + mandatory=false)), + SurveyPart("Survey bookeeping", + RadioSelect(:survey_prior, + "Did you respond to the 2020 Emacs survey?", + ["Yes", "No"]), + RadioSelect(:survey_referrer, + "How did you find out about this survey?", + ["r/emacs", "Hacker News", "Direct message", + "Discord", "Twitter", "Blog post", "Mailing list", + "lobste.rs", "Telegram", "Emacs China", "IRC", + :other]), + RadioSelect(:survey_ux, + "How well do you think this survey platform works?", + ["Great", "Ok", "Not great"]), + TextArea(:survey_feedback, + "Do you have any general feedback on the survey?", + validators=[wordlimit(200), charlimit(6*200)], + mandatory=false)))