diff --git a/blog/blog/kings-peak.md b/blog/blog/2013-08-17-kings-peak.md similarity index 100% rename from blog/blog/kings-peak.md rename to blog/blog/2013-08-17-kings-peak.md diff --git a/blog/blog/lone-star-hiking.md b/blog/blog/2014-12-03-lone-star-hiking.md similarity index 100% rename from blog/blog/lone-star-hiking.md rename to blog/blog/2014-12-03-lone-star-hiking.md diff --git a/blog/blog/shaky-start.md b/blog/blog/2017-01-30-shaky-start.md similarity index 100% rename from blog/blog/shaky-start.md rename to blog/blog/2017-01-30-shaky-start.md diff --git a/blog/blog/blog-transition.md b/blog/blog/2018-01-17-blog-transition.md similarity index 100% rename from blog/blog/blog-transition.md rename to blog/blog/2018-01-17-blog-transition.md diff --git a/blog/blog/crate-management.md b/blog/blog/2018-01-26-crate-management.md similarity index 100% rename from blog/blog/crate-management.md rename to blog/blog/2018-01-26-crate-management.md diff --git a/blog/blog/redefining-failure.md b/blog/blog/2018-03-09-redefining-failure.md similarity index 100% rename from blog/blog/redefining-failure.md rename to blog/blog/2018-03-09-redefining-failure.md diff --git a/blog/blog/pycon-2018.md b/blog/blog/2018-05-18-pycon-2018.md similarity index 100% rename from blog/blog/pycon-2018.md rename to blog/blog/2018-05-18-pycon-2018.md diff --git a/blog/blog/rustfest-2018.md b/blog/blog/2018-06-04-rustfest-2018.md similarity index 100% rename from blog/blog/rustfest-2018.md rename to blog/blog/2018-06-04-rustfest-2018.md diff --git a/blog/blog/speeding-up-rust-builds-code-gen-edition.md b/blog/blog/2019-10-10-speeding-up-rust-builds-code-gen-edition.md similarity index 100% rename from blog/blog/speeding-up-rust-builds-code-gen-edition.md rename to blog/blog/2019-10-10-speeding-up-rust-builds-code-gen-edition.md diff --git a/blog/blog/reflecting-on-errors-in-2019.md b/blog/blog/2019-11-26-reflecting-on-errors-in-2019.md similarity index 100% rename from blog/blog/reflecting-on-errors-in-2019.md rename to blog/blog/2019-11-26-reflecting-on-errors-in-2019.md diff --git a/blog/blog/liquid-v20.md b/blog/blog/2020-03-16-liquid-v20.md similarity index 100% rename from blog/blog/liquid-v20.md rename to blog/blog/2020-03-16-liquid-v20.md diff --git a/blog/blog/pushgen-experiment.md b/blog/blog/2021-07-07-pushgen-experiment.md similarity index 100% rename from blog/blog/pushgen-experiment.md rename to blog/blog/2021-07-07-pushgen-experiment.md diff --git a/blog/blog/learning-rust.md b/blog/blog/2021-09-15-learning-rust.md similarity index 100% rename from blog/blog/learning-rust.md rename to blog/blog/2021-09-15-learning-rust.md diff --git a/blog/blog/optimizing-toml_edit.md b/blog/blog/2021-09-30-optimizing-toml_edit.md similarity index 100% rename from blog/blog/optimizing-toml_edit.md rename to blog/blog/2021-09-30-optimizing-toml_edit.md diff --git a/blog/blog/clap3.md b/blog/blog/2021-12-30-clap3.md similarity index 100% rename from blog/blog/clap3.md rename to blog/blog/2021-12-30-clap3.md diff --git a/blog/blog/cobalt-getting-started.md b/blog/blog/cobalt-getting-started.md deleted file mode 100644 index 0663314..0000000 --- a/blog/blog/cobalt-getting-started.md +++ /dev/null @@ -1,73 +0,0 @@ ---- -title: Using Cobalt for Blogging -is_draft: true -data: - tags: ["oss", "programming"] ---- -So I'm trying out [https://github.com/cobalt-org/cobalt.rs](Cobalt) and [https://pages.github.com/](github.io) for blogging. - - - -## [https://pages.github.com/](Setup) my user github.io repo - -Follow the github.io [https://pages.github.com/](steps). - -## Initialize the repo - -Instead of running -'''bash -cobalt new myBlog -''' - -I copied from [https://github.com/amethyst/website](amethyst). - -The main differences are -- Posts are kept in a "src" directory - -### Tweak travis.yml - -Enable syntax highlighting by replacing the install command with -'''bash -cargo install cobalt-bin --features="syntax-highlight" -''' - -Set the email address - -Went with practices recommended in llogiq's [https://llogiq.github.io/2016/07/05/travis.html](blogpost) -'''yaml -sudo: false -''' - - -https://stackoverflow.com/questions/39978856/unable-to-change-source-branch-in-github-pages - -Be sure to have "Build only if .travis.yml is present" set - -Used bootstrap for a starting point in CSS -https://getbootstrap.com/css/ - - -officially recognized attributes -- title -- extends -- date -- description (used for RSS) -- except (used for RSS) -- excerpt_separator -- is_post -- draft -- path (or specify it in .cobalt.yml) - - Can't access the original template file's name though - - Liquid documentation https://shopify.github.io/liquid/ - - Odd, kstep https://github.com/kstep/kstep.github.com seems to be able to use post.excerpt without it falling back to post.content - - Tries to mirror Jekyll but missing features - - blank excerpt separator causes no excerpts to be created (note: default separator is two \n's - - :title reflecting file name - - :slug for path - - site.uri isn't available. Maybe at least provide link? - - -https://domchristie.github.io/to-markdown/ to convert stuff to markdown diff --git a/blog/blog/developing-on-github.md b/blog/blog/developing-on-github.md deleted file mode 100644 index 0f9da38..0000000 --- a/blog/blog/developing-on-github.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: Developing on github -is_draft: true -data: - tags: ["programming"] ---- -Setting up a GitHub Project -Setup appveyeor and travis accounts -- https://github.com/japaric/trust -- https://llogiq.github.io/2016/07/05/travis.html - -Setup Bash for Windows -sudo apt-get install ruby -sudo apt-get install ruby-dev (latter to avoid `require': no such file to load -- mkmf (LoadError)') -sudo apt-get install build-essential (latter to avoid “make: not found”) -sudo gem install travis -travis encrypt -r epage/relint GH_TOKEN=KEY - -Badges -AppVeyor: "settings"->"badges" -Travis: right on the top of the screen -Line count: https://github.com/Aaronepower/tokei#badges - - -Fork -clone your fork -git remote add upstream -git checkout -b -... -git push --set-upstream origin -git push - -Update from master -git checkout master -git rebase upstream/master -git checkout -git rebase master diff --git a/blog/blog/how-to-maintain-100-packages-without-going-insane.md b/blog/blog/how-to-maintain-100-packages-without-going-insane.md index 9007690..9f97d7a 100644 --- a/blog/blog/how-to-maintain-100-packages-without-going-insane.md +++ b/blog/blog/how-to-maintain-100-packages-without-going-insane.md @@ -100,11 +100,16 @@ of a focus area when you shouldn't. For me, I've found there is an implicit social pressure to merge PRs. Someone had a need and devoted their time to resolve it. Quickly reviewing and merging PRs encourages further contributions and use of your package. -PRs can take a lot of time whether from not having consensus on the problem or +However, PRs can take a lot of time, whether from not having consensus on the problem or requirements, to problems with the implementation, to just the work it takes to re-acquainting with some intricacies. -I've seen some who dealt with this pressure by becoming apathetic to -these users. +When it comes to AI contributions, +this can turn into a DoS on the maintainer. + +As I've seen it put, PRs are "free as in puppies": given by love but come with a cost. +Some maintainers setup boundaries by emotionally cutting them off from their users, +becoming apathetic. +Others burn them out to satisfy their users. I'm trying to find a middle ground for this. So far, my approach is to [document](https://github.com/clap-rs/clap/blob/master/CONTRIBUTING.md#where-to-start) @@ -132,6 +137,46 @@ Some highlights include: - Focus bugs on behavior differences - Call out use cases for features +TODO https://www.jlowin.dev/blog/oss-maintainers-guide-to-saying-no + +## Streamline Issues + +Something I picked up from the Rust Project is useful ways to leverage tags to make it easier to work with Issues. + +Track the status: `S-` prefixed tags, including +- `S-triage`: brand new issue. Use templates to set this on new issues. +- `S-needs-info`: need reproduction steps, deeper exploration of use cases, etc +- `S-needs-design`: needs someone to step through the use cases, requirements, prior art, etc and come with with solution options and suggest a specific +- `S-blocked`: cannot move forward for some reason +- `S-needs-mentor`: designed is accepted but no maintainer has committed the capacity to move this forward yet +- `S-accepted`: reviewer available + +Tracking the area of the code base: `A-` prefixed tags. +This can help in finding issues, find duplicates, or features to work on together. + +Tracking the issue's category: `C-` prefixed tags, including +- `C-bug` +- `C-enhancement` +- `C-tracking` + +## Time boxing + +A focus area may grow beyond what you expected, taking all of your time, snuffing out other efforts of interest. +Or you may feel there is a reason to make an exception to your focus area. + +Time boxing is the act of setting aside a fixed time. +Establishing a time box can help keep you on track with your long term goals. + +Sometimes you might not feel you need a timebox. +Be sure to reevaluate. +I've been working to improve the MSRV experience in Rust and +`cfg_rust_version` would be an important piece in this puzzle. +In 2025, I had a lot on my plate but there seemed to be a lot of interest from `T-lang` in a design I had for `cfg_rust_version` to unblock it so I took some time to work on it. +There ended up being an unexpected amount of disagreement among `T-lang` on my RFC. +In considering the remaining work and stress in working to achieve conesus among `T-lang`, +I realized I had exceeded the time and stress time box that I had never formalized but had intended and stepped away. +While I care a lot, that care can lead to burnout and I have to set aside those feelings. + ## Automating ### Multiplying effort across repos @@ -161,16 +206,9 @@ The main downside I've seen to this is the error reporting; its common for it to - RenovateBot - cargo release -https://www.jlowin.dev/blog/oss-maintainers-guide-to-saying-no - snapbox -tags - templates to encourage the right behavior - typos -time boxing -- like my rust_version RFC - Dealing with load shifts diff --git a/blog/blog/learning_rust.md b/blog/blog/learning_rust.md deleted file mode 100644 index dc354db..0000000 --- a/blog/blog/learning_rust.md +++ /dev/null @@ -1,89 +0,0 @@ ---- -is_draft: true ---- -anstall rust up -- Started at the perfect time since rustup hit 1.0 - -vim-rust -toml -let g:rustfmt_autosave = 1 - -rustup install nightly -rustup run nightly cargo install clippy -See https://github.com/rust-lang-nursery/rustup.rs/issues/876 -cargo install rustfmt - -Later switched to nightly -- Cargo check -- Better errors -- Any performance improvements - -cargo init --bin --name relint --vcs git - - - -cargo install cargo-outdated - -Document checking in the lock file - -Started with error_chain but taking it out because I feel like I need to start with more basics. - -Using ripgrep as my template -- Originally meant to just modify ripgrep but realized I'd learn more by doing it on my own -- Liked the arg/flag functions for using clap. Modified them to be arg/option/flag to match clap's terminology - -Surprised I don't see people using (24 days, clap docs, ripgrep) -- crate_authors!() -- crate_version!() - -Integrated rustfmt to let myself not worry about formatting -Tempted to get auto-completion going but, like not directly forking ripgrep, I felt it would teach me the library best if I kept having to scour the documentation - - -Useful documentation -- https://doc.rust-lang.org/std/index.html#modules -- https://doc.rust-lang.org/book/README.html - - -Odd that extern crate seems duplicate of my Cargo.toml - -Resource https://github.com/ctjhoa/rust-learning/blob/master/README.md - -practices https://pascalhertleif.de/artikel/good-practices-for-writing-rust-libraries/ - -TODO -- https://www.reddit.com/r/rust/comments/5jr30w/tokei_now_has_a_badge_service_now_you_can_show/ -- https://rust-lang.github.io/book/ch11-03-test-organization.html - - -Common mistakes -- When doing a match on an enum, I expect to list the data types rather than the enum instances - -Improve compile errors -- When a function is moving a mutable value out, you get an error about type mismatch (normal + &mut). Suggest people use * -- When complaining about not specifying lifetimes for a struct, name what those lifetimes are - - - -People to inform -https://www.reddit.com/r/rust/comments/5ldqa9/regex_02_is_out_precursor_to_10/dbwpwo8/?st=ixm3gpy5&sh=784fe31a - - - -Option/Result - -Iter> -> Result> -- i.collect() -- Will stop the iterator early -Iter> -> (Vec<_>, Vec) -- let (oks, fails): (Vec<_>, Vec<_>) = results.partition(Result::is_ok); -- let values: Vec<_> = oks.into_iter().map(Result::unwrap).collect(); -- let errors: Vec<_> = fails.into_iter().map(Result::unwrap_err).collect(); - -http://xion.io/post/code/rust-iter-patterns.html - -Option> -> Result> -- opt.map_or(Ok(None), |r| r.map(Some)) - -Option> -> Option<_> -- opt.map_or(None, |o| o) diff --git a/blog/blog/rust-ci.md b/blog/blog/rust-ci.md deleted file mode 100644 index 560cadb..0000000 --- a/blog/blog/rust-ci.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -is_draft: true ---- -https://beachape.com/blog/2016/11/02/rust-performance-testing-on-travis-ci/ - -Problems -- Warnings -- Time - - lacking prebuilt binaries - diff --git a/blog/blog/rust-dev-env.md b/blog/blog/rust-dev-env.md deleted file mode 100644 index cbf7d8d..0000000 --- a/blog/blog/rust-dev-env.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: A Rust Development Environment -is_draft: true -data: - tags: ["programming", "rust"] ---- -Sadly, I’ve recently switched to Windows at home for some expediency reasons. I’ll call out the Windows-specific parts - - - -## Install [rustup](https://www.rust-lang.org/en-US/install.html) - -rustup is the toolchain manager. This helps you upgrade the compiler, cross compile, etc. -When you install on Windows, you need to decide [which ABI want to use](https://github.com/rust-lang-nursery/rustup.rs/blob/master/README.md#working-with-rust-on-windows). I already had Visual Studio installed, so I went with that. -Rust has several release channels you can follow to stay up to date: Nightly, Beta, and Stable. By default, you are on the Stable channel. -Some basic commands to know -'''sh -# Update rustup -rustup self update -# Update the default rustc -rustup update -# Switch to nightly -rustup default nightly -''' -https://gist.github.com/epage/cb521bb2dd4ea262d6355821d2c8eb42 - - -Developing with nightly is a bit controversial. Some interesting aspects of Nightly -The Rust community keeps it fairly stable -Early access to compiler features -Early access to language or library features -Access to features with designs too controversial to make it into the language yet - -The last is very controversial due to [concerns it might split the community](https://news.ycombinator.com/item?id=13251729). This is slowly going away as the most [commonly used feature](https://github.com/rust-lang/rfcs/blob/master/text/1681-macros-1.1.md) (needed for serialization) has been approved and is making its way to the [Stable channel](https://github.com/rust-lang/rust/blob/master/RELEASES.md). -I personally am sticking to stable features but taking advantage of improved error messages. At this point, most of those have already hit Stable. - -## Setting up [stdx-dev](https://github.com/llogiq/stdx-dev) - -Rust tries to not be opinionated but to leave that to the community. Being blessed as part of a language helps to raise awareness but it has also been shown to stagnate projects or limit evolution. stdlib’s are where libraries go to die. -The community is still trying to work out the best way to raise awareness. One experiment is github repos that represent what would be included if Rust were to be batteries included. [stdx-dev](https://github.com/llogiq/stdx-dev) is the developer tools version of that. -TK rustfmt and clippy -rustup bug - -Clippy doesn't work with rustup 1.0 on Windows · Issue #876 · rust-lang-nursery/rustup.rs -https://github.com/rust-lang-nursery/rustup.rs/issues/876 - -Looks like the PATH / LD_LIBRARY_PATH issue is back, that used to happen here: #402 If you run clippy with the latest…github.com - -'''bat -@ECHO OFF -setlocal - -set PATH=%PATH%;C:\Users\epage.AMER\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\x86_64-pc-windows-msvc\lib\ - -%* - -endlocal -''' -https://gist.github.com/epage/6a4c3397d9d2f12894a636799f41cd50 - - - - -## Setting up VIM - -### [rust.vim](https://github.com/rust-lang/rust.vim) -Be sure to install rustfmt first -let g:rustfmt_autosave = 1in your .vimrc file if you want -Can’t speak for syntastic and playpen integration since I’ve not used them - -### [vim-toml](https://github.com/cespare/vim-toml) - -### [vim-racer](https://github.com/racer-rust/vim-racer) - -Out of frustration, I almost installed vim-racer for auto-completion but held back. At the moment, my primary goal is to learn Rust. I wanted rustfmt to auto-clean up my code to not get distracted by formatting my code while I focused on learning. - -TK https://github.com/dan-t/rusty-tags diff --git a/blog/blog/rust-notes.md b/blog/blog/rust-notes.md deleted file mode 100644 index 45f9f2f..0000000 --- a/blog/blog/rust-notes.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -is_draft: true ---- -```rust -let opt = match opt { - Some(r) => { - let val = r?; - Some(val) - } - None => None, -}; -``` - -```rust -let opt = opt.map_or(Ok(None), |r| r.map(Some))?; -``` diff --git a/blog/blog/serde-and-complex-configuration.md b/blog/blog/serde-and-complex-configuration.md deleted file mode 100644 index c4fa991..0000000 --- a/blog/blog/serde-and-complex-configuration.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: Serde and Complex Configuration -layout: default.liquid -is_draft: true ---- -Discuss cobalt's move from directly exposing `Builder` to using `Config` diff --git a/blog/blog/why-rust.md b/blog/blog/why-rust.md deleted file mode 100644 index 095afef..0000000 --- a/blog/blog/why-rust.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: "Why Rust?" -is_draft: true -data: - tags: ["programming", "rust"] ---- -I’ve fallen into the pattern of using two kinds of languages: a rapid development language (Python) and a catch-all language (C++). I’ve long watched for something that would unseat C++ and I feel I finally found that in Rust. - - - -A language for rapid development should allow me to quickly iterate on ideas even at the risk of there being bugs. In short, it shouldn’t be work. - -My catch-all language needs to be usable within any environment I’m working on, included embedded applications, minimize defects, and give me control to get the maximum performance. I’m willing to sacrifice on the workflow to meet these needs. - -For a long time, I’ve been an advocate for C++. I kept looking at new languages coming out that were suppose to save us from its flaws but they never quite accomplished the same level of expressiveness, usually due to their religious adherence to a single programming paradigm like OOP, or due to their lack of low level control. - -- Java: OOP koolaide and protects the developer from themself too much -- C#: Initially a Java wannabe which means it copied a lot of the flaws though they try to patch over them now. Also maddeningly frustrating that they designed the language around using Visual Studio -- D: Initially the proprietary compiler limited things but then there was the standard library split. Also, I felt it was too inelegant. It felt like they kept bolting on features to the language itself when C++ could handle most or all of the cases through its expressiveness -- Go: Initially claiming to be a systems programming language but then they back off on it and it seems like it is being relegated to a backend language. - -Rust is a language that Mozilla made to meet the needs of their research web browser, Servo, especially helping the developer handle insanely concurrent applications. Surprisingly, the language evolved into a systems programming language and is pretty exciting. - -Some great things about rust: -- Full language, including exception-like error handling, is available in limited execution environments, unlike C++. -- A well designed package system (Cargo) -- A well designed toolchain manager (rustup) - -TODO https://brson.github.io/fireflowers/ -TODO https://withoutboats.github.io/blog/rust/2017/01/04/the-rust-module-system-is-too-confusing.html -TODO http://www.suspectsemantics.com/blog/2017/01/26/setting-expectations-for-rusts-difficulty/ - - -https://vitiral.github.io/2017/02/25/one-year-with-rust.html - Plus, it offered things which were completely new: concurrency without fear, safety without garbage collection and abstraction without cost. - - change garbage collection to resource management