Все мы знаем что email@example.com — это имейл. Но что значит имейл? А значит оно что на сервере который находится по адресу example.com есть аккаунт с именем email. Ещё мы знаем что это имейл поэтому мы знаем на какой порт обращаться и какой протокол использовать (уточним детали в dns).
Точно так же каждый *nix аккаунт можно записать как user1@computer1 что значит что на computer1 есть аккаунт user1.
Символ @ буквально называется at:
user1-at-computer1email-at-example.comУдобно. Униформатично.
И тут приходит глупый твиттер и решает что теперь все будут @user2 и сломал интернет. ТВИТТЕР ДОЛЖЕН БЫЛ ИСПОЛЬЗОВАТЬ user2@!!!111
Всё потеряно. Дальше только хуже.
2025.11.28 17:53
Google развивает ОС Aluminium для ноутбуков и планшетов
А будет форк OS Aluminum?
2025.11.25 13:00
вы конечно не ожидайте что я буду часто писать и дальше, конечно же не буду.
Теперь вместо meme.jpg надо ai_picture.jpg
2025.11.12 22:59
А что вам больше нравится: мёд или кленовый сироп?
Напишите в комментариях, интересно посмотреть какая у меня аудитория!
2025.10.21 19:36
Очень нужно сильно захотелось написать простой маленький консольный бинарничичек. Конечно же не на пхп ведь мы же не монстры, правда?
Немедленно открываем документацию к racket чтобы узнать как это делать:
(command-line optional-name-expr optional-argv-expr
flag-clause ...
finish-clause)
optional-name-expr =
| #:program name-expr
optional-argv-expr =
| #:argv argv-expr
flag-clause = #:multi flag-spec ...
| #:once-each flag-spec ...
| #:once-any flag-spec ...
| #:final flag-spec ...
| #:usage-help string ...
| #:help-labels string ...
| #:ps string ...
flag-spec = (flags id ... help-spec body ...+)
| (flags => handler-expr help-expr)
flags = flag-string
| (flag-string ...+)
help-spec = string
| (string-expr ...+)
finish-clause =
| #:args arg-formals body ...+
| #:handlers handlers-exprs
arg-formals = rest-id
| (arg ...)
| (arg ...+ . rest-id)
arg = id
| [id default-expr]
handlers-exprs = finish-expr arg-strings-expr
| finish-expr arg-strings-expr help-expr
| finish-expr arg-strings-expr help-expr
unknown-expr
Пожалукйста, потратьте минутку и насладитесь этим шедевром форматирования.
Спасибо, больше не надо этого делать. Если вы не поняли как это работает, то вот вам настоящий пример от человека который понял:
(define parser
(command-line
#:usage-help
"Here you can write a general description of your program"
"You can have multiple strings to make multiple lines"
#:once-each
[("-m" "--my-parameter") MY-PARAMETER-NAME
"write a short description of what setting MY-PARAMETER-NAME does"
(my-parameter (string->number MY-PARAMETER-NAME))]
[("-a" "--another-parameter") ANOTHER-PARAM
"a little description of ANOTHER-PARAM"
(another-parameter (string=? "true" ANOTHER-PARAM))]
[("-s" "--string") A-STRING
"what is A-STRING?"
(a-string A-STRING)]
#:args () (void)))
Очень мне нравится как в они в этом racket’е любят использовать магические строки типа #:once-each которые непонятно что делают и никак не автодополняются официальной IDE.
Очень, очень захватывающе. Пожалуй, на этом с racket я закончу.
#racket #why #wtf #theway #deep
2025.01.26 14:54