If you’re not crazy about using Helvetica for your UI, this is an easy way to change it to something more suitable. After looking for a bit for alternatives, I found Source Sans to be a very good alternative, closer to Lucida Grande, and with a wide range of weights.
Warning: This package has not been extensively tested. It works in my system without problems, but use at your own risk.
How it works
This does not hack or patch your OS in any way. It is a completely non-destructive way to replace the systemfont. It works by modifying the Source Sans font files to set their names to what Yosemite expects Helvetica to be. By placing them in your /library/fonts folder, they will be loaded before the actual Helvetica fonts. The original fonts are not modified or replaced.
Known Issues
User name is misaligned in the menubar
Descenders get cut off in spotlight
How to install
Download the font files
You can clone, fork, or download the repo from GitHub.
Once you have the files, extract the font files (.ttf) to a temporary place.
Copy to your library
In a finder window, choose Go–>Go to folder and type in /Library/Fonts/. Copy the extracted files there. Note: you should copy to the root library and not the user library.
Log out & in
Log out and in from your user for the changes to take effect.
How to uninstall
Remove the SystemSourceSans* fonts from your /Library/Fonts folder. Log out & in again.
Licence
The Source Sans Family is licensed under the SIL Open Font Licence Version 1.1. The Open Font License is a free software license, and as such permits the fonts to be used, modified, and distributed freely (so long as the resulting fonts remain under the Open Font License).
#Questions? Comments?
The font set was generated and is maintained by Kemie Guaida. It was only tested briefly. So far only minor bugs were discovered, so if you find any, please open an issue.
If you have questions or suggestions, you can open an issue here at github, or ping me via twitter @kemie
A tiny Swift CSV decoder/encoder library, conforming to RFC 4180 as closely as possible
TinyCSV is designed to be a minimalist csv decoder and encoder, returning a basic array of rows of cells (strings) during decoding. It attempts to be as lenient as possible when decoding, and very strict when encoding.
TinyCSV decoding doesn’t enforce columns, header rows or ‘expected’ values. If the first row in your file has 10 cells and the second has only 8 cells, then that’s what you’ll get in the returned data. There are no column formatting rules, it is up to you to handle and massage the data after it is returned. TinyCSV attempts to break the input data into rows and cells following the (admittedly not well defined) CSV rules and then let you decide what you want to do with the raw once it has been parsed.
A TinyCSV decoder expects a Swift String as its input type – if you need to read csv data from a file you will have to read the file into a String yourself before passing it to be decoded.
All processing is (currently) handled in memory, so large csv files may cause memory stress on smaller devices. If you want to reduce your memory footprint, you might try looking into the event driven decoding method.
Decoding support
TinyCSV supports :-
definable delimiters (eg. comma, semicolon, tab)
basic delimiter autodetection
Unquoted fields (eg. cat, dog, bird)
Quoted fields (eg. "cat", "dog", "bird")
Mixed quoting (eg. "cat", dog, bird)
Embedded quotes within quoted fields (eg. "I like ""this""", "...but ""not"" this.")
Embedded quotes within unquoted fields using a field escape character (eg. I like \"this\", ...but \"not\" this.)
Embedded newlines within quoted fields eg. "fish and chips, cat and dog"
Embedded newlines within unquoted fields using a field escape character eg. fish and\ chips, cat\ and\ dog
Optional comment lines
Optional ignore header lines
Parsing options
Specifying a delimiter
You can specify a delimiter to use when decoding the file.
By default, the library attempts to determine the delimiter by scanning the first row in the file. If it cannot determine a delimiter, it will default to using a comma.
// Use `tab` as a delimiter
letresult= parser.decode(text: text, delimiter:.tab)
// Use `-` as the delimiter
letresult= parser.decode(text: text, delimiter:"-")
Skipping header lines
If your CSV file has a fixed number of lines at the start that are not part of the csv data, you can skip them by setting the header line count.
You can specify the character to use to indicate that the line is to be treated as comment. If a line starts with the comment character, the line is ignored (unless it is contained within a multi-line quoted field).
// Use `#` to ignore the comment lines
letresult= parser.decode(text: text, commentCharacter:"#")
Field escape character
Some CSVs use an escaping character to indicate that the next character is to be taken literally, especially when dealing with files that don’t quote their fields, for example :-
…,Dr. Seltsam\, oder wie ich lernte\, die Bombe zu lieben (1964),…
The parser allows you to optionally specify an escape charcter (in the above example, the escape char is \) to indicate that the embedded commas are part of the field, and is not to be treated as a delimiter.
letparser=TinyCSV.Coder()lettext= /* some csv text */
let result = parser.decode(text: text)letrowCount= result.records.count
letfirstRowCellCount= result.records[0].count
letfirstRowFirstCell= result.records[0][0]letfirstRowSecondCell= result.records[0][1]
Encoding
The encoder automatically sanitizes each cell’s text, meaning you don’t have to concern yourself with the csv encoding rules.
letparser=TinyCSV.Coder()letcells=[["This \"cat\" is bonkers","dog"],["fish","chips\nsalt"]]letencoded= parser.encode(csvdata: cells)
produces
"This ""cat"" is bonkers","dog"
"fish","chips
salt"
Event driven decoding
TinyCSV internally uses an event-driven model when parsing csv content.
The startDecoding method on the coder allows you to access the event driven decoding functionality if you need more fine-grained control over the decoding process, and don’t want TinyCSV to store an entire copy of the decoded results in memory.
You can choose to receive callbacks when :-
The parser emits a field (including the row number, the column number and text)
The parser emits a record (including the row number and the array of column texts)
These callback functions return a boolean value. Return true to continue parsing, false to stop.
MIT License
Copyright (c) 2024 Darren Ford
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
A tiny Swift CSV decoder/encoder library, conforming to RFC 4180 as closely as possible
TinyCSV is designed to be a minimalist csv decoder and encoder, returning a basic array of rows of cells (strings) during decoding. It attempts to be as lenient as possible when decoding, and very strict when encoding.
TinyCSV decoding doesn’t enforce columns, header rows or ‘expected’ values. If the first row in your file has 10 cells and the second has only 8 cells, then that’s what you’ll get in the returned data. There are no column formatting rules, it is up to you to handle and massage the data after it is returned. TinyCSV attempts to break the input data into rows and cells following the (admittedly not well defined) CSV rules and then let you decide what you want to do with the raw once it has been parsed.
A TinyCSV decoder expects a Swift String as its input type – if you need to read csv data from a file you will have to read the file into a String yourself before passing it to be decoded.
All processing is (currently) handled in memory, so large csv files may cause memory stress on smaller devices. If you want to reduce your memory footprint, you might try looking into the event driven decoding method.
Decoding support
TinyCSV supports :-
definable delimiters (eg. comma, semicolon, tab)
basic delimiter autodetection
Unquoted fields (eg. cat, dog, bird)
Quoted fields (eg. "cat", "dog", "bird")
Mixed quoting (eg. "cat", dog, bird)
Embedded quotes within quoted fields (eg. "I like ""this""", "...but ""not"" this.")
Embedded quotes within unquoted fields using a field escape character (eg. I like \"this\", ...but \"not\" this.)
Embedded newlines within quoted fields eg. "fish and chips, cat and dog"
Embedded newlines within unquoted fields using a field escape character eg. fish and\ chips, cat\ and\ dog
Optional comment lines
Optional ignore header lines
Parsing options
Specifying a delimiter
You can specify a delimiter to use when decoding the file.
By default, the library attempts to determine the delimiter by scanning the first row in the file. If it cannot determine a delimiter, it will default to using a comma.
// Use `tab` as a delimiter
letresult= parser.decode(text: text, delimiter:.tab)
// Use `-` as the delimiter
letresult= parser.decode(text: text, delimiter:"-")
Skipping header lines
If your CSV file has a fixed number of lines at the start that are not part of the csv data, you can skip them by setting the header line count.
You can specify the character to use to indicate that the line is to be treated as comment. If a line starts with the comment character, the line is ignored (unless it is contained within a multi-line quoted field).
// Use `#` to ignore the comment lines
letresult= parser.decode(text: text, commentCharacter:"#")
Field escape character
Some CSVs use an escaping character to indicate that the next character is to be taken literally, especially when dealing with files that don’t quote their fields, for example :-
…,Dr. Seltsam\, oder wie ich lernte\, die Bombe zu lieben (1964),…
The parser allows you to optionally specify an escape charcter (in the above example, the escape char is \) to indicate that the embedded commas are part of the field, and is not to be treated as a delimiter.
letparser=TinyCSV.Coder()lettext= /* some csv text */
let result = parser.decode(text: text)letrowCount= result.records.count
letfirstRowCellCount= result.records[0].count
letfirstRowFirstCell= result.records[0][0]letfirstRowSecondCell= result.records[0][1]
Encoding
The encoder automatically sanitizes each cell’s text, meaning you don’t have to concern yourself with the csv encoding rules.
letparser=TinyCSV.Coder()letcells=[["This \"cat\" is bonkers","dog"],["fish","chips\nsalt"]]letencoded= parser.encode(csvdata: cells)
produces
"This ""cat"" is bonkers","dog"
"fish","chips
salt"
Event driven decoding
TinyCSV internally uses an event-driven model when parsing csv content.
The startDecoding method on the coder allows you to access the event driven decoding functionality if you need more fine-grained control over the decoding process, and don’t want TinyCSV to store an entire copy of the decoded results in memory.
You can choose to receive callbacks when :-
The parser emits a field (including the row number, the column number and text)
The parser emits a record (including the row number and the array of column texts)
These callback functions return a boolean value. Return true to continue parsing, false to stop.
MIT License
Copyright (c) 2024 Darren Ford
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Welcome to the home of the Subtxt Guide, your go-to resource for mastering Subtxt! This repository holds everything you need to navigate, understand, and get the most out of the app. Whether you’re here to learn more about story structure, clarify a tricky concept, or help improve the documentation, you’re in the right place.
What’s the Subtxt Guide?
The Subtxt Guide is a comprehensive resource designed to help you use Subtxt to its fullest potential. It’s packed with:
Clear explanations of core concepts like Storyforms, Premise, and Thematic Exploration.
Practical tips for building dynamic and compelling stories.
Step-by-step instructions for navigating the app’s features.
Solutions to common issues, ensuring you spend more time writing and less time troubleshooting.
Think of it as your friendly co-pilot in the world of storytelling!
How You Can Help
This guide is a living document, and we’re always looking to make it better. If you notice something that could use an update, a correction, or a bit more clarity, we’d love your help! Here’s how you can contribute:
Spot an Issue? Open an issue right here in the repository to let us know.
Have a Fix? Feel free to submit a pull request with your updates. We’re all about collaboration, and every little improvement helps!
Not sure how to start? No problem. Just reach out through the Issues tab, and we’ll guide you.
Questions or Feedback?
We’re here to help! If you have questions about Subtxt or ideas for making this guide even better, let us know.
All you need to do, is install discord.js using npm i discord.js@11.4.2 or simply using setup.bat/setup.sh files.
Setup
If you want to use DiscordPinger, you will need to rename config.js.example to config.js.
Then, open config.js and fill it with needed informations.
config.js:
constconfig={"prefix": "",//Add your prefix here"ownerOnly": true,//If set to true, only bot owner can control Pinger. If set to false, everyone can use Pinger."ownerID": "",//Id of bot owner for "ownerOnly" function."channelName": "",//Name of channel, where will be all pings sent."pingInterval": "1000",//Time in ms (miliseconds). 1000 recommended - If 1000ms (1s), bot will send ping every 1000ms (1s)."token": ""//Bot token from discord app.}module.exports=config;
Running DiscordPinger
You can start bot using node pinger.js, or simply use start.bat on windows, or start.sh on linux.
Commands
Usage
Description
ping <@mention>
This will start pinging mentioned user.
stop
This command will stop pinging.
To-do
Add stop to stop pinging.
If channel does not exist, or was deleted, create new one.
Prevent stopping, when bot does not pinging.
Create DBM (Discord Bot Maker) version of DiscordPinger: here.
If you will find bug, create an issue and describe it.
Feel free to make Pull request with new features, or fixes.
Gravity-SPHINCS is a stateless hash-based signature scheme designed by Jean-Philippe Aumasson and Guillaume Endignoux while working in Kudelski Security’s research team.
Additional_Implementations/debug: A version of the reference implementation that prints intermediate values. This directory includes intermediate values files for each of the three Gravity-SPHINCS versions.
The Makefile included in the reference implementation has the following targets:
$ make
Please choose a target:
analyze runs static analyzers
bench runs speed benchmarks
clean cleans up
format formats the code using .clang-format rules
The Makefile of the debug implementation in addition provides make ivs and make check targets.
KATs
KAT/: Includes NIST’s s PQCgenKAT_sign.c, rng.c, and [rnc.h], as well as a Makefile that we created to generate the files PQCsignKAT_64.req and PQCsignKAT_64.rsp required by NIST, using our fast implementation in Reference_Implementation/.
KAT/PQCsignKAT_all.req: .req KAT file generated by running make, same for all Gravity-SPHINCS versions.
Our source code is released under Apache 2.0 license.
Patent situation: We haven’t filed any patent related to Gravity-SPHINCS nor are we aware of existing patent or patent application covering Gravity-SPHINCS.
Acknowledgments
Thanks to Samuel Neves for helping optimize our code.
Change the timezone and pihole login password, you can skip the pihole_password to autogenerate the password by pihole it self and grab the password from the log. Make sure to comment out the WEBPASSWORD in docker compose file /config/pihole.yml.j2.