eadmund
Joined 14 years ago
Joined 14 years ago
Is it valid? I’m not really convinced. I’m not particularly a fan of copyright to begin with, and this looks like yet another abuse of it. I consider myself a creative person, and I fundamentally do not believe it is ethical to try to prevent people from employing tools to manipulate the creative works one gives to them.
Writing Visual Studio, for example. Debugging Visual Studio. Extending Visual Studio in more than the ways it has already provided.
It means not being constrained to do only those things someone else had seen fit to permit you to do. It means freedom.
Yes, that would be pretty awesome. The GIMP tries to be something like that.
Direnv is awesome! Note, thought, that it does not depend on Nix, just a Unix-like OS and a supported shell: https://direnv.net/#prerequisites
Its intended use case is loading environment variables (you could use this to load your virtualenv), but it works by sourcing a script — and that script can be ‘cat usage.txt.’
Great tool.
If you use Emacs (and you should!), there’s a direnv mode. Emacs also has its own way to set configuration items within a directory (directory-local variables), and is smart enough to support two files, so that there can be one file checked into source control for all members of a project and another ignored for one’s personal config.
Were I trying to optimise this, I would test to see if a hash table of alphabetical characters is better, or just checking (or (and (char>= c #\A) (char<= c #\Z)) (and (char>= c #\a) (char<= c #\z))). The accumulator would probably be better as an adjustable array with a fill pointer allocated once, filled with VECTOR-PUSH-EXTEND and reset each time. It might be better to use DO, initializing C and declaring its type.
Also worth giving it a shot with (optimize (speed 3) (safety 0)) just to see if it makes a difference.
Yes, definitely more verbose. Perl is good at this sort of task!
FWIW, I agree. Jujutsu seems fine, but Magit is fine too. Maybe Magit is the Blub of version control, and Jujutsu would change my life for the better, but … I seem to be able to run in circles around my Git-CLI–using colleagues as it is.
Is it[1]? My version below accumulates alphabetical characters until it encounters a non-alphabetical one, then increments the count for the accumulated word and resets the accumulator.
(let (c accumulator (counts (make-hash-table :test #'equal)))
(handler-case
(loop
(setq c (read-char))
(if (find c "ABCDEFGHIJKLMNOPQRSTUVWXYZ" :test #'char-equal)
(push (char-downcase c) accumulator)
(when accumulator
(incf (gethash (coerce (reverse accumulator) 'string) counts 0))
(setq accumulator nil))))
(end-of-file ()
(when accumulator
(incf (gethash (coerce (reverse accumulator) 'string) counts 0))
(setq accumulator nil))
(maphash #'(lambda (word count)
(push (list count word) accumulator))
counts)
(format t "~{~&~{~a ~a~}~%~}" (reverse (last (sort accumulator #'< :key #'car)
(let ((n (second sb-ext:*posix-argv*)))
(if n (parse-integer n) 100))))))))
It’s not exactly pretty or idiomatic, but its 19 lines appear to get the job done.1: Well, technically it is, because there is SPLIT-SEQUENCE: https://github.com/sharplispers/split-sequence
Firefox does this when I type in a URL and the server is down. I absolutely hate this behaviour, because I run a bunch of services inside my network.
If I tell my browser ‘fetch http://site.example,’ I mean for it to connect to site.example on HTTP on port 80 nothing more. If there is a web server run ning which wants to redirect me to https://site.example, awesome, but my browser should never assume I mean anything I did not say.)