Очень нужно сильно захотелось написать простой маленький консольный бинарничичек. Конечно же не на пхп ведь мы же не монстры, правда?
Немедленно открываем документацию к 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 я закончу.
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
rarAUR
package for bothRAR
andUnRAR
,unrar
for justUnRAR
, orunrar-free
for 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
предмет | 25.90 EUR |
доставка | 09.99 EUR |
НДС | 10.56 EUR |
таможенное оформление | 13.90 EUR |
всего без таможни | 35.89 EUR |
всего | 69.69 EUR |
2024.08.15 13:18