\usepackage[nolangwarn,abbreviations,nonumberlist,prefix]{glossaries-extra}
\setabbreviationstyle{long-short-sc}
\setabbreviationstyle[noexpand]{short-nolong}
\Addlcwords{of}
\usepackage{glossary-mcols}
\pdfstringdefDisableCommands{%
	\def\glsxtrlong#1{}%
	\def\glsxtrlongpl#1{}%
	\def\glsxtrshort#1{}%
	\def\glsxtrshortpl#1{}%
	\def\acrfull#1{}%
	\def\acrfullpl#1{}%
	\def\Glsxtrlong#1{}%
	\def\Glsxtrlongpl#1{}%
	\def\Glsxtrshort#1{}%
	\def\Glsxtrshortpl#1{}%
	\def\Acrfull#1{}%
	\def\Acrfullpl#1{}%
	\def\gls#1{}%
	\def\glspl#1{}%
	\def\glsentrytext#1{}%
	\def\Gls#1{}%
	\def\Glspl#1{}%
	\def\Glsentrytext#1{}%
	\def\titlecap#1{}%
	\def\MakeUppercase#1{}%
}

% Initialize the glossaries
\makeglossaries%

% Acronym
\newcommand{\myacronym}[4][]{%
%	\newacronym[type=\glsdefaulttype,#1]{#2}{#3}{#4}
	\newabbreviation[#1]{#2}{#3}{#4}
}
\myacronym[category=noexpand]{3COWS}{3cows}{The three ``CO'' (Composability, Comprehensibility, Correctness) winter school}
\myacronym{ADC}{adc}{analog-to-digital converter}
\myacronym{ADT}{adt}{algebraic data type}
\myacronym{AST}{ast}{abstract syntax tree}
\myacronym{API}{api}{application programming interface}
\myacronym{ARDSL}{ardsl}{\gls{ARDUINO} \glsxtrshort{DSL}}
\myacronym[category=noexpand]{CEFP}{cefp}{Central European \glsxtrlong{FP} School}
\myacronym{CRS}{crs}{\gls{CLEAN} Raspberry Pi system}
\myacronym{CRTS}{crts}{\gls{CLEAN} Raspberry Pi temperature sensor}
\myacronym{CWS}{cws}{\gls{CLEAN} \gls{WEMOS} system}
\myacronym{CWTS}{cwts}{\gls{CLEAN} \gls{WEMOS} temperature sensor}
\myacronym{DHT}{dht}{digital humidity and temperature}
\myacronym{DSL}{dsl}{domain-specific language}
\myacronym{DVFS}{dvfs}{dynamic voltage and frequency scaling}
\myacronym{ECO2}{eCO\textsubscript{2}}{equivalent carbon dioxide}
\myacronym{EDSL}{edsl}{embedded \glsxtrlong{DSL}}
\myacronym[prefixfirst={a\ },prefix={an\ }]{FP}{fp}{functional programming}
\myacronym[prefixfirst={a\ },prefix={an\ }]{FRP}{frp}{functional reactive programming}
\myacronym[prefixfirst={a\ },prefix={an\ }]{FPGA}{fpga}{field-programmable gate array}
\myacronym{GADT}{gadt}{generalised \glsxtrshort{ADT}}
\myacronym{GHC}{ghc}{Glasgow \gls{HASKELL} Compiler}
\myacronym{GPIO}{gpio}{general-purpose \glsxtrlong{IO}}
\myacronym{GPL}{gpl}{general-purpose language}
\myacronym{GRS}{grs}{graph rewriting system}
\myacronym{GUI}{gui}{graphical \glsxtrlong{UI}}
\myacronym{HOAS}{hoas}{high-order abstract syntax}
\myacronym{IOT}{Io\kern-.3mmT}{internet of things}
\myacronym[category=noexpand]{IDE}{ide}{integrated development environment}
\myacronym[category=noexpand]{IO}{i/o}{input/output}
\myacronym{IR}{ir}{intermediate representation}
\myacronym{ISR}{isr}{interrupt service routine}
\myacronym{LEAN}{lean}{language of East-Anglia and Nijmegen}
\myacronym[category=noexpand,prefixfirst={a\ },prefix={an\ }]{LED}{led}{light-emitting diode}
\myacronym[category=noexpand]{OLED}{oled}{organic \glsxtrshort{LED}}
\myacronym[category=noexpand]{OS}{os}{operating system}
\myacronym{OTA}{ota}{over-the-air}
\myacronym{PIR}{pir}{passive infrared}
\myacronym{PFRP}{p-frp}{priority-based \glsxtrshort{FRP}}
\myacronym{PRS}{prs}{\gls{PYTHON} Raspberry Pi system}
\myacronym{PWS}{pws}{\gls{MICROPYTHON} \gls{WEMOS} system}
\myacronym{PRTS}{prts}{\gls{PYTHON} Raspberry Pi temperature sensor}
\myacronym{PWTS}{pwts}{\gls{MICROPYTHON} \gls{WEMOS} temperature sensor}
\myacronym{QDSL}{qdsl}{quoted \glsxtrshort{DSL}}
\myacronym[category=noexpand]{RAM}{ram}{random-access memory}
\myacronym{RFID}{rfid}{radio-frequency identification}
\myacronym{RTOS}{rtos}{real-time \glsxtrshort{OS}}
\myacronym{RTS}{rts}{run-time system}
\myacronym[prefixfirst={a\ },prefix={an\ }]{SDS}{sds}{shared data source}
\myacronym[prefixfirst={a\ },prefix={an\ }]{SN}{sn}{sensor network}
\myacronym{SLOC}{sloc}{source lines of code}
\myacronym{TH}{th}{Template \gls{HASKELL}}
\myacronym[category=noexpand]{TCP}{tcp}{transmission control protocol}
\myacronym{TOP}{top}{task-oriented programming}
\myacronym{TOSD}{tosd}{task-oriented software development}
\myacronym{TRS}{trs}{term rewriting system}
\myacronym{TTH}{tth}{typed \glsxtrlong{TH}}
\myacronym{TVOC}{tvoc}{total volatile organic compounds}
\myacronym{UI}{ui}{user interface}
\myacronym{UOD}{uod}{universe of discourse}
\myacronym{UOG}{uog}{University of Glasgow}
\myacronym{VM}{vm}{virtual machine}

% Glossaries
\newglossaryentry{ABC}{%
	name=ABC,
	description={- \gls{CLEAN}'s intermediate graph-rewriting language},
}
\newglossaryentry{MTASK}{%
	name=mTask,
	description={- a \glsxtrshort{TOP} \glsxtrshort{EDSL} for edge devices integrated with the \gls{ITASK} system},
}
\newglossaryentry{ITASK}{%
	name=iTask,
	description={- a \glsxtrshort{TOP} \glsxtrshort{EDSL} for creating distributed multi-user collaborative web applications},
}
\newglossaryentry{TOPHAT}{%
	name=TopHat,
	description={- a \glsxtrshort{TOP} language designed to formally capture the essence of \gls{TOP}}
}
\newglossaryentry{CLEAN}{%
	name=Clean,
	description={- Clean \glsxtrlong{LEAN}, a pure lazy \glsxtrlong{FP} language based on graph rewriting}
}
\newglossaryentry{HASKELL}{%
	name=Haskell,
	description={- a pure lazy \glsxtrlong{FP} language designed by a committe as a concept language}
}
\newglossaryentry{HASKELL98}{%
	name=Haskell98,
	description={- a standardised version of \gls{HASKELL}},
}
\newglossaryentry{ARDUINO}{%
	name=Arduino,
	description={- a widely used framework for programming microcontrollers}
}
\newglossaryentry{MBED}{%
	name=mbed,
	description={- a widely used framework for programming microcontrollers designed for ARM cortex-M}
}
\newglossaryentry{CPP}{
	name=C\texttt{++},
	description={- a general-purpose imperative programming language based on \gls{C}}
}
\newglossaryentry{C}{
	name=C,
	description={- a general-purpose imperative programming}
}
\newglossaryentry{I2C}{
	name=I\textsuperscript{2}C,
	description={(Inter-Integrated Circuit) {-} a simple serial communication protocol often used to connect sensors to microcontrollers}
}
\newglossaryentry{WIFI}{
	name=Wi-Fi,
	description={- is a family of wireless network protocols commonly used for local area networking}
}
\newglossaryentry{SPI}{
	name=SPI,
	description={(Serial Peripheral Interface) {-} a synchronous serial communication protocol often used to connect sensors to microcontrollers}
}
\newglossaryentry{TINYML}{
	name=TinyML,
	description={- a deep learning framework for microcontrollers}
}
\newglossaryentry{PYTHON}{
	name=Python,
	description={- a multi-paradigm interpreted programming language}
}
\newglossaryentry{MICROPYTHON}{
	name=MicroPython,
	description={- a \gls{PYTHON} implementation tailored for microcontrollers}
}
\newglossaryentry{FREERTOS}{
	name=FreeRTOS,
	description={- an open-source \glsxtrshort{RTOS} for microcontrollers}
}
\newglossaryentry{ONEWIRE}{
	name=1-wire,
	description={- a simple single wire communication protocol often used to connect sensors to microcontrollers}
}
\newglossaryentry{JSON}{
	name=JSON,
	description={(JavaScript Object Notation) {-} a open data interchange format using human readable text}
}
\newglossaryentry{MQTT}{
	name=MQTT,
	description={(MQ Telemetry Transport) {-} a publish-subscribe network protocol designed for resource constrained devices}
}
\newglossaryentry{WEMOS}{
	name=WEMOS,
	description={- a popular ESP8266 microcontroller based prototyping platform supporting \gls{ARDUINO}.}
}
