При оформлении заявлений в детский сад на детей на uslugi.mosreg.ru столкнулся с тем, что если ранее было подано заявление и нужно какие-то данные в нём поправить, то выбрать год зачисления ребёнка в ДС можно только следующий. То есть, мы подали в 2024, а теперь можно выбрать только 2026 год, потому что текущий нельзя.
Мне показалось это не очень удобным, решил немножко изучить фронтенд сайта и обнаружил, что валидации на простановку года нет :)
В видео подробнее, как обойти ограничение
P.S. На записи не видно контекстного меню в браузере, когда нажимаешь ПКМ, нас интересует последний пункт "Просмотреть код"
Я много и часто просматриваю JSON-файлы: от конфигураций сервисов до API ответов и логов. Каждый раз, открывая очередной файл, я форматирую содержимое, чтобы было удобнее читать (ведь JSON не только machine-readable, но и human-readable). И каждый раз я грущу, что все сервисы (онлайн, встроенные средства IDE и даже плагины) предоставляют лишь две крайности: форматировать всё или ничего (минифицировать в одну строку).
Но что, если я хочу отформатировать JSON лишь до определённого уровня? Что, если у меня есть огромный список словарей (возможно, даже глубоких), который при форматировании выглядит как-то так:
Да, многие текстовые редакторы вроде Sublime Text или VS Code дают возможность свернуть контент до определённого уровня. Но что, если я хочу оставить файл в этом промежуточном виде и просматривать его прямо в терминале, подключившись по ssh? Или я хочу посмотреть файл на гитхабе с телефона? Да, возможно, мои вкусы весьма специфичны, но в существующих реалиях я вынужден грустно довольствоваться лишь полностью развёрнутым вариантом (или делать это вручную). Встроенные средства форматирования JSON в JS или Python также не предоставляют простой возможности ограничить глубину (либо я так и не научился их готовить).
Поэтому я собрался с силами и написал свой форматтер с возможностью ограничить глубину. Помимо базового функционала вроде валидации, минификации и настройки количества отступов, в нём есть настройка максимальной глубины (по умолчанию она равна нулю, что соответствует привычному форматированию без ограничений).
Да, он вряд ли подойдёт, чтобы редактировать на лету гигантские JSON файлы. И он уж точно не пытается стать убийцей какого-либо из существующих онлайн сервисов. В первую очередь он призван решить мою проблему: сделать форматирование JSON чуточку более управляемым. А если и вы сталкивались с подобной проблемой, буду рад, если сервис поможет и вам!
Привет, развил тему пропихивания стручков (pod'ов) в кубернетис, добавил в меню выбора типа объектов команду apply. Теперь kui'ем можно приколачивать мYAMLики, создавая любые типы объектов. По умолчанию предлагает создать стручок:
создай свой стручок
Но с помощью кнопки edit можно изменить мямлик, изменения сохранятся в файл ~/.kyml.
С удивлением обнаружил что хаб Кодобред переименован в Говнокод О_о Чтож, так даже интереснее.
Привет, приспичило создать тестовый стручек (pod), проверить кое-что. Создал и добавил это в kui, в секцию "быстрых" команд:
добавь свой стручек
Тестовый стручек создается вот такой командой:
kube run $quick_pod_name $ns --image=$quick_pod_image --command -- $quick_pod_command 2>&1
Для изменения названия, образа или команды стручка подредактируйте вот эти переменные в начале скрипта:
quick_pod_name=busytest # Pod name for simple test pod
quick_pod_image=busybox:1.32 # Pod image for simple test pod
quick_pod_command="sleep 3600" # Pod command for simple test pod
Привет, зачастую после тыкания в какой-нибудь стручок (pod) приходится подниматься на уровень выше в деплой, стейтфулсет или даемонсет. Для этого в kui надо было сначала посмотреть чем контролируется стручок, сделав describe, потом сменить тип объекта, найти нужный... Хватить теребонькать эти стручки! Добавил для стручков команду Controlled by, она сразу тыкает kui в нужное место!
Привет, долгожданные новости из мира кубернетиса. Иногда надо посмотреть за подиками, как они там живут поживают, все ли (ре)стартанули или кто завис. В kui для этого сделана кнопка RELOAD. Но постоянно жмякать кнопку это же дро...во какое-то правда? Хватит это терпеть! Добавил команду watch it, теперь можно залипнуть на какое-то время, глядя как подики ползают туда-сюда.
watch it
Оно будет с паузой в 3 секунды (+ время на обновление) постоянно показывать вывод kubectl get ...
NAME READY STATUS RESTARTS AGE
chi-cluster-dev01-0-0-0 2/2 Running 0 23d
chi-cluster-dev01-0-1-0 2/2 Running 0 23d
chi-cluster-dev01-0-2-0 2/2 Running 0 23d
Press x to stop watching this...
Бинго разработчика: ставь лайк зачеркивай, если было
В выходные не работаем, но развлекаемся, поэтому предлагаем вам сыграть в бинго разработчика! Правила — простые:
сохраняйте/делайте скрин картинки из поста;
отмечайте клеточки с вашей разработческой жизой;
скидывайте в комментарии итог. Или можете просто писать в комментах то, что хотели бы зачеркнуть в этом бинго, ваши варианты особенно приветствуются)
Ждем того, кто соберет все ачивки!
А как закончите с бинго — в нашем TG‑канале есть еще одна занимательная игра с кубиком и картами инженерного таро, которые предскажут ваше будущее! Переходите по ссылке и развлекайтесь, на канал тоже подписывайтесь, там часто бывает всякое интересное.
Привет, все знают(?) что данные в скрипт можно передать через аргументы, как-то так:
$ cat test
#!/bin/bash
var=$1
echo $var
$ ./test bla
bla
Но в какой-то момент аргументов становится слишком много, а так чешется всунуть что-то еще) Куда всунуть? Как? В каком порядке? Сначала сунуть это, потом то? Городить гетопс? В этом случае бывает удобно использовать переменные окружения!
$ cat test
#!/bin/bash
var1=$1
var2=$2
var3=$3
var4=$4
var5=$5
echo $var1 $var2 $var3 $var4 $var5 $one_more_var
$ one_more_var=ble ./test
ble
Привет, иногда хочется утащить из скрипта переменные или функции. Это можно легко сделать используя source. Но есть заковыка. Скрипт-источник будет выполнен, что не всегда удобно. Пример:
$ cat test
#!/bin/bash
var1=bim
var2=bom
echo you should not see this $var1 $var2
Пробуем засорсить:
$ var1= var2=; . ./test; echo $var1 $var2
you should not see this bim bom
bim bom
Мы получили вожделенные переменные но при этом выполнился нежелательный код. Как этого избежать? Можно немного модифицировать скрипт:
$ cat test
#!/bin/bash
var1=bim
var2=bom
[[ $1 == only_vars ]] && return
echo you should not see this $var1 $var2
Теперь если сорсить скрипт с параметром only_vars, нежелательный код будет опущен, пробуем:
Привет! Подкрутил немного анимацию spinner'а, теперь выглядит так:
бынь-бынь
Spinner - это небольшой скриптик чтобы заполнить пустоту экранного пространства во время работы какого-нибудь долгого процасса, не выводящего ничего. Работает как-то так:
В заросшей репе есть очень грязный код Забыт в нём SOLID, и не понять подход Сказать я пытался: «Профанов нету в гите» Но тут же раздался противный голос в мите Голос в мите
«Мне больно видеть чистый код, пишу сплошной огромный баг Я очень много лет хочу чтоб невозможен был дебаг Мне некомфортно в чистоте, и я мечтаю об одном: Скорее SOLID разнести, раздуть свой старый жирный код Проклятый старый код»
Жил былдокодер, тупой и жутко злой Никто не вспомнил о нём зимой дебажной той Коллеги не стали его клинкоду учить Макбуки достали, решили сами чинить Глюки и баги
«Мне больно видеть чистый код, пишу сплошной огромный баг Я очень много лет хочу чтоб невозможен был дебаг Мне некомфортно в чистоте, и я мечтаю об одном: Скорее SOLID разнести, раздуть свой старый жирный код Проклятый старый код»
И эту репу стороной обходит айти люд И суеверные твердят: «Там ламеры живут»
Пятница, вечер, а я все продолжаю тыкать свой kui в ноды кубернетиса.
Node pods
Натыкал такое, добавил две новые команды: Node pods и Top node pods. Первая позволяет посмотреть все поды ноды. А вторая сделать топ поды ноды.
И если поды ноды kubectl умеет показывать из коробки, как-то так:
kubectl get po -A --field-selector spec.nodeName=<node_name>
То с топами подов нодов пришлось немного повозиться, kubectl не может сам сделать топ поды ноды, говорит такое:
kubectl top po -A --field-selector spec.nodeName=<node_name>
Error from server (BadRequest): "spec.nodeName" is not a known field selector: only "metadata.name", "metadata.namespace"
Пришлось ему немного помочь, сначала я запомнил поды ноды в переменную np
np=$(
kubectl get po -A --field-selector spec.nodeName=<node_name> | \
awk '{print $2}'
)
Потом сделал топ всех подов и грепнул поды ноды
kubectl top po -A | grep -F "$np"
И еще там были сопутствующие изменения и вот это вот все.
Позанимался немного с нодами и подумал что удобно было бы выбирать ноды из вывода kubectl top no, добавил это. Команда (top) доступна на первом шаге (выбор кластера) и через "быстрые команды".