Очень нужно сильно захотелось написать простой маленький консольный бинарничичек. Конечно же не на пхп ведь мы же не монстры, правда?
Немедленно открываем документацию к 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
Мэтт написал, что приветствует создание форка, и заблокировал учётные записи, чтобы дать им необходимый толчок для старта и стимулировать переход от слов к делу.
🤌
2025.01.12 14:39
Пхп местами странноватый язык который странновато эволюционирует.
$a = new class {
public readonly object $b;
public readonly object $c;
public function __construct() {
$this->b = new class {
public function helloworld() {
return 'hello world';
}
};
}
};
Вот если у нас есть объект в котором есть 2 проперти, одно из которых инициализировано, а другое нет.
С инициализированным проперти всё просто и понятно:
echo $a->b?->helloworld(); // hello world
А вот если вы так же сделаете для неинициализированного то оно умрёт:
echo $a->c?->helloworld(); // Typed property class@anonymous::$c must not be accessed before initialization
Неудобно когда умирает поэтому приходится делать дополнительную проверку:
if (isset($a->c)) {
echo echo $a->c->helloworld();
}
Ещё более неудобно когда хочешь проверить есть ли какой-то объект и проверить что-то в этом объекте, то начинается…
if (isset($a->c) && $a->c->isValid()) {
return true;
}
По непонятной причине ?-> умирает если оно неиницилизовано и не заменяет isset(), а вот ?? не умирает и вполне себе живёт и заменяет isset() поэтому…
echo ($a->c ?? null)?->helloworld();
if (($a->c ?? null)?->isValid()) {
return true;
}
Какой же ад, нравится!
2024.12.10 18:01
Install the
rarAURpackage for bothRARandUnRAR,unrarfor justUnRAR, orunrar-freefor a FOSS implementation ofunrar.
Хочешь рар, хоти и аур!
2024.12.10 14:03
Совсем недавно в прошлом году тут было восхищение состоянием параметрического проектирования в линуксе. Прошли годы и я делаю это снова!
Всё не изменилось абсолютно!
1. Появился bricscad который вроде как работает, очень ничего, но стоит тысячу евро.
2. Появился совсем молодое plasticity и оно выглядит очень интересно, вроде бы работает, стоит сильно дешевле, есть триал. Внутри у оно parasolid kernel который внутри у onshape и кого-то там ещё. :огонёк:
3. В OpenSCAD появилась линейка мерять измеряемое. У меня так и не получилось.
4. FreeCAD в прошлом месяце зарелизился в первую версию, починил всё что было сломано и добавил в себя новый встроенный Assembly workbench который меня просто восхитил своей простотой. Первые ассембли во фрикаде которым у меня получилось воспользоваться. Только оно у меня постоянно крашится на этом ассембли и убивает файл. И фрикад постоянно вылетает. Ассембли самоуничтожается в процессе ассембли. И бибикает тормозит.
5. 2 года назад была новая версия solvespace и эта лапочька сейчас просто работает, модельки собираются. Можно поменять параметры на первом шаге, а последний шаг перестроится. Невероятно. Просто работает. :рыдание: :слёзы: :огонёк:
И цветовая схема такая что линию можно отличить от чего-угодно-ещё. И узловые точки видно без увеличения их размера в настройках.
Это просто невероятно как плох freecad. И больше всего меня удивляет то, что есть люди которые собирают во фрикаде двигатели и у них просто всё работает, ничего не вылетает, всё отлично лучший cad из всех возможных. Как???7
#cad #freecad #solvespace #parametric_cad
2024.12.02 02:26
Не так давно в этом блоге был вопрос как в линуксах сделать меню с чекбоксами, а меню с чекбоксами надо делать через fzf и потом нажимать там внутри shift+tab. Не то чтобы чекбоксы, но вертикальные выделенные полоски что почти чекбоксы!
$ cat ~/bin/fkill.sh #!/bin/sh # ps -A --sort=uid -o pid,user:16,cmd # list of processes, sorted by userid, so root's processes are on top, pid as first column # fzf --ansi --multi --tac --no-sort --exact --height=30 # fzf with allowed multiselect via <shift>+<tab>, dont forget to search! # sed 's#\ *\([0-9]*\).*#\1#' # cut everything except first column with <pid> # xargs --no-run-if-empty kill -9 # actual kill of selected processes ps -A --sort=uid -o pid,user:16,cmd | fzf --ansi --multi --tac --no-sort --exact --height=30 | sed 's#\ *\([0-9]*\).*#\1#' | xargs --no-run-if-empty kill -9
2024.11.26 14:51
$ ls --group-directories-firstИтак, если вы такая же жертва файловых менеджеров как и я, вы понимаете приятную мятность вывода сначала дирректорий, а потом файлов, двумя группами. Не понимаю почему, но мне так лучше.
$ ls --group-directories-first
пожалуйста сохраняйте в свои функции алиасы как там у вас принято в вашем окружении я не осуждаю.
2024.10.31 22:23
Недавно мне захотелось найти как называется фильм, в гугле забил в строку поиска:
space movie where guy used clocks arrow to communicate
гугл не смог. а то что гугл смог было даже не рядом.
а чатгпт онлайн без регистрации смс сразу же дал ответ что это интерстеллар.
всё, гугл устарел. конец эпохи. уже какое-то время идёт другая эпоха.
очень неожиданное будущее мы выбрали!
2024.10.12 01:28
То странное чувство когда своя мышка дома и приходится пользоваться дешёвой публичной, но у дешёвой публичной нормально нажимается третья кнопка.
😠
2024.10.08 14:39
Интересно как разные диалекты sql по-разному оптимизированы.
Вот было у меня две таблички A, B и это one to many, надо было левенько заджойнится с некоторыми условиями, а где не получилось с условиями — вернуть null. А если получилось несколько раз, то вернуть самое последнее справа.
Казалось бы что тут могло произвести вот это вот:
Aggregations of aggregations are not allowed at [10:8] SELECT list expression references a.title which is neither grouped nor aggregated at [10:18] Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN. ORDER BY clause expression references column b.id which is neither grouped nor aggregated at [34:14] HAVING clause should return type BOOL, but returns INT64 at [42:8] Aggregate function MAX not allowed in JOIN ON clause at [24:21] Star expansion expression references column id which is neither grouped nor aggregated at [28:19]
Решение решения сложно назвать решением, но оно решение:
select a.*, b.* from a as a left join (select * from b where id in ( select id from b where (cond1 = 1) and (cond2 = 2) and (cond3 = 3) group by a_id order by id desc )) as b on (a.id = b.a_id)
2024.09.13 17:04
Хотите карманную малинку с дисплеем, батарейками и клавиатурой от блекбери? Хотите дальше: https://www.tindie.com/products/zitaotech/hackberrypi-cyberdeck-handheld-with-bbq20-keyboard/
2024.09.09 10:00
Мне очень нравится что новый дизайн википедии удачно использует экранное пространство и позволяет на лету настроить размер шрифта и скрыть ненужные элементы интерфейса!


2024.09.05 13:23
Мне кажется занимательным что веломагазины не доставляют велокурьерами. Вызывает доверие.
2024.08.26 17:17