php + json-schema

Я, конечно, понимаю что уже поздновато размораживаться, но, оказывается, существует волшебная штука json-schema которой можно валидироавть структуру json’а.

Но особенно прекрасно то что оно сущетсвует для php и что ещё более прекрасно — в php оно проверяет не json, а обычный \stdClass.

То есть если вам нужно проверить структуру сложного объекта, с проверкой типов, возможностью кастинга и использованием дефолтных значений — json-scheme может спасти вам здоровье, психику и остатки волос.

И оно даже соберет все ошибки, укажет в чем проблема и даст вам путь к неправильному элементу.

  1. https://mamchenkov.net/wordpress/2017/03/11/validating-json-against-schema-in-php/
  2. https://github.com/justinrainbow/json-schema
  3. http://json-schema.org/understanding-json-schema/

2019.10.16 16:58

alsa + pulseaudio

Кстати, прошлое решение проблемы нескольких источников звука в сабже отгнило.

Теперь нужно добавить в ~/.asoundrc следущее:

% cat ~/.asoundrc

pcm.pulse {
    type pulse
}
ctl.pulse {
    type pulse
}
pcm.!default {
    type pulse
}
ctl.!default {
    type pulse
}

Пользуясь случаем хочу послать лучи благодарности генте которая оберегает меня от systemd. Не знаю сколько ещё получится держаться, но если не gentoo то только funtoo.

2019.10.02 02:45

Browser: restore on demand

Объясните мне, не самому умному человеку на планете, зачем в 2k19 каждый браузер по умолчанию не загружает содержимое востановленных из сессии табов?

Я ещё могу, очень условно, понять что если бы сейчас был 1998, у людей вместо интернета диалап, а вместо оперативной памяти мегабайт 16 недоразумения. Ладно, могу понять, хотя в те времена такого не было.

Но почему в 2k19 браузер не может загрузить таб пока на него не нажмёшь мышкой? Для чего это? Почему если у меня открыт gmail, то для того чтобы узнать есть ли новые письма мне нужно на него не забыть нажать мышкой?

И ладно бы хром — все мы питаем тёплые чувства к крому. Но даже файрфокс… Файрфокс с каждым годом всё страннее и странее.

about:config > browser.sessionstore.restore_on_demand = false

2019.10.01 23:52

Смешное в open-rc

Л – Логика

# rc-update remove chronyd
 * rc-update: invalid command `remove'
# rc-update delete chronyd
 * service chronyd removed from runlevel default

2019.09.22 12:44

Аметистовые Вены – Последний танец 🎵

Сложно даже вспомнить что и когда было в последний раз на ревайнде! Восторг!

2019.09.11 16:09

recover linux from grub

Новая порция новостей про обновление мира! Ура! Дождались! Я знаю что вы переживали получится ли у меня написать ещё один пост на эту тему или конец, мир разрушен?!

Но нет, мир был на грани, но спасён. Не сразу, но спасён! Так получилось что это уже не первое обновление мира на моём локалхосте поэтому вспоминая весёлый опыт предудущих обновлений иксы были исключены из загрузки, а то знаете как это бывает: компьютер загрузился, а клавиатура не работает. Грустновато.

# rc-update del xdm default

Но удар в спину пришёл от mysql. После смены профиля и переноса библиотек в другие места mysql блокировал загрузку и даже не умирал по ttl. Как вы понимаете загрузочной дискеты нет, а интерактивный режим в openrc не работает.

Интересный факт: оказывается, если у вас есть андроид, otg кабель и usb flash — есть некоторый шанс что у вас получится сделать загрузочную флешку прямо из андроида! Восхитительно!

А мне пришлось через груб грузится прямо в консоль и включать интерактивный режим. В этом раз мне повезло и у меня был доступ к интернету, но на будущее я сохраню этот в файл в корне. На всякий случай.

# loading grub
# press `c` to open internal console
# read content of this file:
ls (hd0,1)/
cat (hd0,1)/recover_how_to

# return to entries list in grub and press `e`
# append to `linux` line `init=/bash/sh`
- linux /boot/grub_vmlinuz_new root=/dev/sda1 acpi_backlight=video
+ linux /boot/grub_vmlinuz_new root=/dev/sda1 acpi_backlight=video init=/bin/sh

# boot to shell and remount root
mount -o remount,rw /dev/sda1 /
mount -t proc none /proc

# do your recovery magic

2019.09.08 20:50

gentoo@localhost # emerge @world || fix blocks

И снова здравствуйте! Не прошло и трёх лет (а нет, прошло) как мне очень захотелось обновить всё что катится, а всё что не катится покатить и тоже обновить. Пришло время моей gentoo сделать очередной rolling realise, знаете ли.

Вот уже третьи сутки пойдут скооро, а к заветному сабжу ещё даже не удалось подступиться, всё всякие зависимости и их блокировки, знаете ли rolling release всё же!


В интернетах получилось найти удивительную комбинацию неадекватного безумия и бесконечной гениальности:

emerge -1av $(equery depends <package-name> | sed 's/-[0-9]\{1,\}.*$//')

Допустим случилось невероятное и у вас возник блок пакета, типа emerge в общем-то и не против поставить уже новую версию пакета, но старая версия очень уж нужна другим пакетам:

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

sys-libs/readline:0

  (sys-libs/readline-8.0_p1:0/8::gentoo, installed) pulled in by
    >=sys-libs/readline-8.0:0= required by (app-shells/bash-5.0_p11:0/0::gentoo, ebuild scheduled for merge)
    ^^                  ^^^^^^                                                                                                                                                        
    sys-libs/readline:0/8= required by (app-text/hunspell-1.7.0-r1:0/1.7::gentoo, installed)
                     ^^^^^                                                                                                      
    (and 10 more with the same problems)

  (sys-libs/readline-7.0_p5:0/7::gentoo, ebuild scheduled for merge) pulled in by
    sys-libs/readline:0/7=[abi_x86_32(-),abi_x86_64(-)] required by (dev-db/sqlite-3.29.0:3/3::gentoo, installed)
                     ^^^^^                                                                                                                           
    (and 12 more with the same problem)

Вариантов решения такой проблемы как бы три:

1) Удалить пакет и забыть, а emerge там как-нибудь сам что-нибудь сделает, но такое можно сделать сильно невсегда

2) Форсировать обновление одного пакета игнорируя зависимости, но тоже такое:

emerge -1av --nodeps sys-libs/readline:0

3) Обновить вручную все те пакеты что требуют старую версию пакета. Вот именно тут приходит на пользу строка упомянутая выше. Она, конечно, не обновляет все пакеты которые требуют старую версию, зато она просто обновляет все пакеты которым нужен указанный пакет. ВО-С-ХИ-ТИ-ТЕ-ЛЬ-НО:

emerge -1av $(equery depends sys-libs/readline:0 | sed 's/-[0-9]\{1,\}.*$//')

Случаются удивительные курьезы с версиями пакетов, например вот мне рассказывают что мой текущий пакет очень-очень устаревший, нужно очень-очень срочно его обновить:

- sys-libs/binutils-libs-2.32::gentoo (masked by: package.mask)
# If you still use one of these old toolchain packages, please upgrade (and
# switch the compiler / the binutils) ASAP. If you need them for a specific
# (isolated) use case, feel free to unmask them on your system.

Но на что же нам предлагают его обновить то?

[ebuild     U  ] sys-libs/binutils-libs-2.32-r1:0/2.32::gentoo [2.32:0/2.32::gentoo] USE="nls -64-bit-bfd -multitarget -static-libs" ABI_X86="32 (64) (-x32)" 20,431 KiB

Ага, то есть 2.32 плохо, а вот 2.32-r1 — это прям вот то что нужно, на острие!

Причём сам пакет замаскирован:

If you still use one of these old toolchain packages, please upgrade (and switch the compiler / the binutils) ASAP.

Affected packages: <sys -devel/gcc-5.4>, <sys-libs/glibc-2.28>, <sys-devel/binutils-2.32-r1>, <sys-devel/binutils-hppa64-2.32-r1>, <sys-libs/binutils-libs-2.32-r1>

Удивительный @world!

2019.09.06 03:30

Солнцестояние 🔆👨

Какова тема модна эмоджами полна!

Эпиграф посвящается кринжу.

Дорогой читатель который не существует, признайся что единственное зачем ты продолжаешь читать этот блог (хаханет) — это обзоры фильмов которые потрясли меня настолько что я как предоблогер не могу удержаться от кинообзора!

Есть удивительный американо-шведский фильм Солнцестояние, если вам посчасливилось не знать про этот фильм ничего — посмотрите трейлер.

Если вам понравилось то что вы увидели в трейлере, если вы почувствовали истинный дух независимого кино, то после этого абзаца дальше не читайте. До конца этого же абзаца я расскажу свои краткие впечатления от фильма без спойлеров: Кринж от всего! Постоянное горение жопы! Фейспалм вызывает всё: переходы камеры, изподземная музыка, главная героиня. Доставляет каждую секунду.


Главная героиня — истеричка с паническими атаками которой сестра написала странное сообщение. ГГ ушла в паническую атаку. Потом оказалась что сестра убила родителей и себя. ГГ — истерично-депрессивное существо, каждая секунда ГГ в кадре окрашивается только мыслью о том что она едет с друзьями на бойню и её могут убить!

Она напросилась к своему парню и его друзьям на удивительный праздник солнцестояния в Швеции в закрытой группе людей со своими нравами. Никто из друзей ей не рад, но швед который пригласил всю компанию на праздник — оказался очень дружелюбен и с большим удовольствием позвал её на праздник! Вот так интрига! Швед вообще поражающе добродушен приглашая людей не бойню. Восхитительный психопат.

В этой шведской коммунне считают что у человека есть четыре цикла по 18 лет, а в 72 пора заканчивать цикл. На глазах гостей со скалы (они нашли восхитительную скалу которая выглядит как акварель!!!) прыгнуло 2 старика. Но второй старик не разбился о камень и его добили огромным молотом… Это такой странный абсурд что смотреть на это просто невозможно!

И несмотря на такое странное поведение членов общины (спрыгнуть со скалы на огромнй камень????)
никого из иностранных гостей это не удивило. А один антрополог так вообще всё записывал. Все остались в общине. Никто не развернулся и не ушел куда угодно подальше от этих странных людей. Все остались.

И все продолжали оставаться когда иностранцы пропадали по одному!

И весь этот восторг смысла происходит по странные звуки, постоянно какие-то трипованные фоны, мелькающие паттерны. При этом герои картины употребляют наркотики. И пропадают по одному.

Весь фильм у меня горело в анусе от постоянного кринжа на экране, но потом в конце все гости сгорели! Как же у меня горело от того что они сгорели!

А главная героиня нашла свою новую семью, немного выжила и осталась в общине. Ну а что ей ещё делать: дома мёртвые родители, а в общине остались мертвые друзья!

Этот фильм по-настоящему изменил меня! Рекомендую к просмотру всей семьёй от 18+.

кринж и горение жопы. красивый восторг!

2019.08.23 02:31

Ruby is a gem

Прогрессивный язык будущего:

[!] There was an error parsing `Gemfile`: You cannot specify the same gem twice with different version requirements.
You specified: ruby-prof (< 1.0.0) and ruby-prof (>= 0). Bundler cannot continue.

2019.07.31 02:16

Linux и клавиатурная раскладка

Linux вообще сложно любить потому что он или очень странно почти работает, или приходится красноглазить. Чаще проще игнорировать проблему чем её решать, но иногда в линуксе очень просто решить проблему которую вообще непонятно как решать в других местах.

Совсем недавно был пост про hardware linux way где у меня переодически отгнивали кнопки на клавиатуре и у меня успешно получалось игнорировать эту проблему. Но, внезапно, кнопки внезапно отгнили и перестали работать и пришлось купить новую клавиатуру на ебае. Есстественно, нормальные люди смотрят не только на цену, но и на раскладку, но некоторые люди (я) идиоты и не смотрят на раскладку.

А раскладка оказалась конченная сказочная и вместо длинного левого шифта у меня короткий левый шифт и волшебная кнопка чтобы печатать символы <, >. Это очень неудобно потому что у меня уже есть скобочки на клавиатуре, а рука просто не может нажимать на этот огрызок шифта — я недостаточно осьминог.

Как же решить эту проблему? Как же адоптироваться к новым условия? Что же делать?.. Но ведь это же, простите Боги, линукс! Почему бы просто не сказать этой кнопке вести себя как левый шифт? Ну, будет у меня два коротки левых шифта вместо одного длинного так и это даже хорошо: один шифт сломается — второй запасной будет.

Запускаем xev и находим код этой клавиши. Потом проверяем все ли работает как надо:

$ xmodmap -e 'keycode 94 = Shift_L'

И если всё хорошо и эта кнопка начала работать как левый шифт (!!!!!!!) то добавляем это в ~/.Xmodmap:

$ echo 'keycode 94 = Shift_L' >> ~/.Xmodmap

Можно бесконечно ненавидеть линукс, но разве чем-то ещё можно пользоваться?

2019.07.16 16:20

Блогеры

Сейчас когда говорят “блогер” имееют в виду или инстаграм (и его гениальные сторисы), или ютуб. То есть с течением времени и эволюции блогеры сменили среду обитания с текста на видео.

Значит ли это что все владельцы исключительно текстовых блогов уже теперь не блогеры, а недоблогеры? Обидно!

… или предоблогеры?

2019.06.21 15:11

alsa + pulseaudio

Если вы в 2к19 являетесь счастливым обладателем связки alsa + pulseadio (с разморозкой), то у вас может быть проблема источниками звука если их больше одного. Но это легко и просто решается добавлением в файл /etc/pulse/default.pa:

load-module module-alsa-sink device=dmix
load-module module-alsa-source device=dsnoop

2019.06.04 14:05

Песни про лес

Oleg Kach: Песня про лес

Darya Vasileva: КлипДАРЫ / Pianoбой (Дмитрий Шуров) – Это Наш Лес

2019.05.16 17:42