[...] they *also* added a raw image mode that will never break again and doesn't require Mach-Os.
And people said they wouldn't help. This is intended for us.
Over the past ~half year I gradually established a workflow consisting of a simple directory structure, a handful of bash-aliases and chromium profiles. It looks like this:
Each project gets its own directory somewhere in my $home with some subdirs. There might be various others specific to the project-domain, but these are the most common:
• notes/ contains plaintext files of everything i write down. File-name structure is <date-str>:<note-type>, e.g. 2020-05-09:call (:call are the most typical ones). As others have also suggested, I take a lot of notes for record keeping & plannning purposes.
• workspace/ contains all source code repositories, or other files necessary to work. Pretty much anything I might touch while coding.
• auth/ for things like ssh public keys used on the project
• downloads/ Project-specific downloads.
Then I create new entries in my ~/.bash_aliases that "get me" right into the coding-env of a project. Say I work on a python project, I might have an alias that looks sth like:
alias fb='cd ~/fooproject/workspace/foobot && echo "loading virtualenv..." && source .venv/bin/activate';
On of my current side-projects is a full-stack clojure(-script) app with these aliases:
alias foh='cd ~/opendecks/workspace/foh';
alias fohj='cd ~/opendecks/workspace/foh/src/clj/opendecks/foh';
alias fohs='cd ~/opendecks/workspace/foh/src/cljs/opendecks/foh';
First one gets me into the the source-root of the project, the other two into respective sub-paths for back- and front-end. These aliases allow me to immedeiatly "jump into a project" from any open terminal.
Lastly, I started employing chrome/chromium's user-profiles to seperate browsing for each project. This isolates work-related browsing from my personal activity (cookies, logins, passwords etc), and provides a nice cognitive barrier against procrastination. I'm not logged into any social networks on those work-profiles and switching to my private profile to browse facebook is a more concious act than opening a new tab in the current window. Each browser profile is set-up to save all downloads to the project-specific `./downloads` directory, again not to mingle (potentially confidential) resources.
I haven't automated any of the above steps, because it's so simple and takes me at most 10-15 mins to create a new instance. This has worked really well for me so far, because it clearly seperates almost all resources associated to a project, while being friction-less in tooling/switching between workspaces (versus e.g. waiting for a VM or docker instance to start). Another nice side-effect is that I can easily archive or clean-up past projects.
In Clojure, and I assume other lisps as well, you can use the < operator in the same fashion. By merit of prefix notation it's also unambiguous regarding precedence.
I'll be honest that I'm not a Clojure user, even with context I have no idea read that. Like every other language you have to be trained to read it correctly and is not intuitively obvious to everyone.
All maths functions where it makes sense take arbitrarily many arguments. (+ 1 2 3) = 6. (< 1 2 3) = true. Everything in function position (directly after an opening paren) is either a function you want to apply or a macro you want to expand, except in a select few forms, such as binding forms and conditionals. The syntax of scheme is remarkably simple once you know the basics.
I have programmed python for about 20 years, and I still do stupid mistakes. I grooked all the r6rs scheme syntax in 20 minutes, except for (do ...) which somehow never sticks. It is also rarely used.
I have tried to evangelize scheme enough to know some people just don't like it, but for me it instantly clicked.
+ and = are pretty obvious but it can still be confusing. Take not=. Does (not= x y z) mean adjacent numbers are disequal (x≠y≠z, by analogy to + and =)? Or that no two numbers are equal? Or that at least two numbers are disequal? Different lisps pick different meanings.
Which lisps? I think I have only ever seen that in clojure (thinking it was a bad idea), and clojure seems scared of parentheses. (not (equal? x y z)) is clearer, but suffers from the same drawback as your question.
The problem I think is that not= returns true as long as any elements are non-equal, which means it is not analogous to +. I can't speak for clojure, but this is in line with all equality predicates in scheme, negated or not. A predicate that checked if any neighbours are not equal would in true scheme spirit probably be called not-any-neighbour-equal? :)
> But until any of these new age apps/platforms support federation and decentralized communication, there's not much use for the masses to look for servers run by specific people.
Federation of self-hosted servers and the "official cloud" seems to be on Wire's road-map, cf:
If I read this correctly, the "Enterprise Grid" section hints at one technical reason for this move. Slack recently announced[0] a new feature that allows multiple teams, err "Workspaces", to share a channel. This violates the uniqueness of @usernames within the namespace of the shared channel, e.g. both teams having a "@john".
This announcement anticipates (a) getting developers to use surrogate UIDs instead of @username for mentions, and (b) that their clients will only use display names in the future and rely on specific UI elements to distinguish ambiguous ones.
https://www.instagram.com/fontwien