VolCh
+2
Насчёт копирования при начале — копировать надо реально всё, что можно. Например, может оказаться пропатченной библиотека в /usr/share/lib или в /usr/local/bin окажется бинарник, собранный из исходников в хомяке какого-то пользователя.
VolCh
0

С телефона всё не осмыслил, два вопроса:


  • есть ли возможность валидировать обычные объекты, в том числе stdClass хотя бы на уровне public свойств? Как с вложенностью объектов?
  • есть ли возможность задавать кастомные валидаторы (Callable), в том числе с возможностью валидировать по сложной логике несколько свойств, типа "два свойства должны быть равны" или "одно, и только одно из списка свойств должно быть не null"?
VolCh
0
А в конструкторе можно уже придумать любую валидацию без всяких мета-языков, на чистом PHP.

В целом, чаще всего на чистом PHP реализуют валидацию в конструкторах/сеттерах в императивной манере, что часто приводит к потере читаемости. В целом декларативный стиль описания правил более удобен на сложной логике.


Это больше похоже на сериализатор, что-то аналогичное jms serializer, но нагрузили еще валидацией.

Скорее это чистой воды валидатор. В принципе ничего вроде не мешает его использованию в конструкторе или сеттерах. Главное есть ли преимущества по сравнению с более популярными валидаторами.

VolCh
+1

Грубо — по обстоятельствам. Вводить в общий стор данные, которые нужны одному и только одному модулю в общем случае считаю нецелесообразным. Ну и я не о конкретно Redux.

VolCh
0

При реализации этого требования юнит-тест назначения низкоприоритетной задачи на сегодня должен упасть, равно как и тест назначения сегодняшней задачи низкого приоритета. Если таких юнит-тестов не было (назначение приоритета и даты разные методы и ранее никаких требований по связи приоритета и даты не было, поэтому в связке они не тестировались), то такие тесты должны быть созданы в рамках реализации нового требования. Если не созданы, или созданы лишь частично (проверяется что приоритет меняется на высокий при установке сегодняшней даты, но не проверяются попытки изменить приоритет у сегодняшней даты), то должна упасть метрика покрытия кода тестами.

VolCh
0

Да, дублирование данных присутствует в общем случае, как следствие представление графа объектов в виде дерева, но популярные клиенты вполне справляются с его конвертацией обратно в граф с устранением дублирования.


Стиль обработки данных вне уровня протокола обмена лежит.

VolCh
0
нашедший должен сдать этот документ в органы правопорядка либо иными способами предотвратить распространение этой информации

Можно ссылку? По моей информации обычный гражданин не то, что не должен что-то предотвращать, а имеет полное право делать что угодно с секретным документом, поскольку разглашение гостайны уже произошло в момент когда он получил доступ к секретному документу.


В этом смысл данной статьи, а не во вседозволенности человека любой ценой.

Права и свободы не означают вседозволенность и отсутствие ответственности, но для ограничения прав и свобод одного человека нужно чтобы эти права и свободы нарушали права и свободы другого человека. Вот нарушил ваши права и свободы какой-то аноним — начинайте мероприятия по установлению личности с целью привлечения к ответственности. Это обычная практика расследования правонарушений. Но начинать такие мероприятия до совершения правонарушения, причём применять их каждому — явное нарушение презумпции невиновности, если запрет на анонимность обосновывается нуждами охраной прав. По крайней мере пока Интернет не признан средством повышенной опасности как автомобили и оружие, пока для получения права доступа в Интернет не нужно государственное лицензирование с прохождением медкомиссии, то запреты на анонимность для потенциального облегчения потенциальных расследований потенциальных правонарушений являются нарушением презумпции невиновности, а блокировки сайтов — нарушение запрета на цензуру. Вы согласны, что блокирвки — это цензура?


Почему?

Потому что я взрослый дееспособный человек и сам могу принимать решения о том, какую информацию мне потреблять, а какую игнорировать. Равно как и кому доверять хранение моих персональных данных, моей переписки и иных сообщений, а кому не доверять.

VolCh
0

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


Право — не мораль, да. Это кодифицированная наиболее важная часть морали, господствующей в настоящее время. Со временем меняются и мораль, и право — абсолютных общечеловеческих нет.

VolCh
0

Цитирую по вашей ссылке:


доверенную лицу или ставшую известной ему по службе, работе, учебе или в иных случаях, предусмотренных законодательством Российской Федерации

Согласно закону о гостайне ознакомление с ней происходит при получении допуска. Нет допуска — нет способов законно получить доступ к гостайне. Найденный на улице документ — незаконное получение доступа, а закон нарушил тот, кто потерял, а не тот, кто нашёл.


А второе, высшей ценностью государства являются права общества, и ради прав общества права личности ограничиваются

Не знаете обычных законов, знайте хотя бы основы конституционного строя: "Человек, его права и свободы являются высшей ценностью. Признание, соблюдение и защита прав и свобод человека и гражданина — обязанность государства."


Ну и последнее, где у нас есть «борьба с информацией»?

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

VolCh
0
В древнем Риме, Месопотамии или Китае за вами не было закреплено права на анонимность, её просто не рассматривали как что-то, достойное описания

Потому что не приходило в голову, что на это право могут покушаться? Может потому оно и базовое.


Да и представляться чужим именем, особенно. знатным, в отдельные времена было опасно для жизни

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


Это регламентация именно прогулок, регламентация разрешённой для них территории.

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

VolCh
0

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

VolCh
+1

Государство не должно наказывать анонимного распространителя, я имею полное право опубликовать найденный документ с грифом "Секретно" — я не давал подписки о неразглашении. И вы, если тоже не давали, имеете полное право с ним ознакомиться и передать информацию кому-то дальше.


Государство, как и любой субъект, имеет право на тайны (в ограниченных пределах), но наказывать за их разглашение нужно только тех, кто обязан их хранить или тех, кто пытается получить к ним доступ незаконными способами. Набрать поисковый запрос и перейти по ссылке — не незаконный способ получения информации. Государство имеет право пытаться установить откуда у меня секретный документ, но зная, что он не был мне доверен им же, и узнав, что я не нарушал законы для его получения, должно оставить меня в покое, разбираясь кто из его сотрудников его потерял по халатности или преднамеренно подбросил мне. А если я опубликую его анонимно, то государство имеет право пытаться установить мою личность различными способами, но оно не имеет право обязывать меня и провайдеров применять превентивные меры на такой случай, не имеет право нарушать наши права и свободы на всякий случай, чтобы потом облегчить себе расследование, если вдруг я всё-таки разглашу документ, который был мне в нужном порядке доверен государством или я его получу какими-то шпионскими методами.


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

VolCh
0

"Свой" значит, что модуль приложения знает об источнике. "Единый" означает, что у модуля один и только один источник.

VolCh
0

Не очень понимаю о чём речь — пример можно?

VolCh
+1

GraphQL особого отношения к реакту не имеет. Есть модули связи с ним, как есть с тем же ангуляром, не более.


GraphQL по сути — протокол взаимодействия клиента с сервером, направленный на, имхо, упрощение разработки клиентов. Apollo GrphQL Client — реализация этого протокола с высокоуровневой оберткой, упрощающей решения типовых задач.

VolCh
0

Думаю, RoR позволяет называть таблицы во множественном числе, просто по умолчанию называет их соответственно имени класса, которое обычно в единственном числе.

VolCh
0

Ну я исключительно о сознательном внедрении.

VolCh
0

Адекватность — понятие субъективное. Какой выбор по вашему более адекватный — берём фреймворк, закрывающий 90% функциональности, пускай и содержащий ещё 400% кода, который использовать в обозримом будущем не планируется, или берём набор библиотек, закрывающий процентов 50 функциональности, а остальное пишем сами?

VolCh
0
А, ну так теперь понятно откуда ноги растут. Оказывается все дело в RoR, который просто не дает именовать таблицы иначе)))

Задолго до появления RoR в MySQL служебные таблицы именовались в единственном числе, например: mysql.user — таблица пользователей.

VolCh
0

Лучше выглядит, да. Но работать же ней всё равно типа SELECT * FROM users WHERE user.name = 'root'?

VolCh
0

Нарушается принцип неотвратимости наказания за преступления в Интернете. В том числе за преступления против личности. По крайней мере если соблюдать презумпцию невиновности.

VolCh
0

Плохая аналогия, потому что плохая вакцина наносит объективный физический ущерб. Информация же его не наносит.


Для тех, кто не знает или не хочет как самостоятельно ограничивать себя от нежелательной информации, провайдеры могут предлагать дополнительную услугу по фильтрации. Можно даже обязать их сделать её по умолчанию, но отключать по заявлению абонента.

VolCh
0

Всё же в идее нет слова "представление", есть "клиент":


GraphQL… gives clients the power to ask for exactly what they need and nothing more

Промежуточный слой(и) так или иначе создаётся. Вопрос куда его пихать. Тут предлагается чуть ли не каждый "умный" компонент в него оборачивать. Я же стараюсь максимально изолировать части приложения друг от друга, компонентам нужно знать только о сторе — едином источнике правды для компонента. Как и когда взаимодействовать с сервером решает он. Он может быть локальным для компонента, но смешивать данные из глобального или вышележащего сторов и локального, по-моему, сильно усложняет поддержку.

VolCh
0

Добавьте что-то вроде :


server_cert
[ server_cert ]
# Extensions for server certificates (`man x509v3_config`).
basicConstraints = CA:FALSE
nsCertType = server
nsComment = "OpenSSL Generated Server Certificate"
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

и вызывайте с ключиком -extensions server_cert

VolCh
0

Это не я придумываю, это одна из распространенных практик именования таблиц. То, что она вам не нравится не даёт вам права называть её чушью, даже если та, которая вам нравится, станет частью стандарта SQL.


В теории РСУБД вообще таблиц нет, есть отношения. Выполняя команду CREATE TABLE user (id INT, name VARCHAR) мы не создаём хранилище пользователей, мы создаём заголовок (схему) для отношения атрибутов id и name. Один заголовок, одно отношение. Зачем его именовать во множественном числе? Тело отношения состоит из множества кортежей(строк), но отношение оно одно, заголовок у него один. Зачем множественное число? Оно как раз лишнее.

VolCh
+2
Конечно ограничивать информацию подаваемую в интернете надо

Кому надо и зачем? Если вам не нужна какая-то информация, то просто не получайте её, ограничивайте себя сами. Не хотите, чтобы ваши дети что-то получали из интернета — ограничивайте их. Я и мои дети тут причём?


Если какая-то информация запрещена к распространению, то наказывайте распространителей, а не посредников или потребителей.


Блокировка какого-то ресурса в Интернете — это не наказание автора, а наказание аудитории. По меркам реального мира, не осуждение автора, а изъятие тиража из магазинов и библиотек. Неприкрытая цензура, которая в России запрещена.

VolCh
0

А где вы тут конфиг указываете с [alt_names]? CA не подписывает то, о чём не знает, в том числе игнорирует расширение subjectAltName

VolCh
0

Подход, предлагаемый Apollo Client как основной, нарушает абстракцию — в иерархию компонентов встраиваются знания о том, как и откуда получать данные. И, в общем случае, эти данные в общий стор приложения не попадают.

VolCh
0

Я лишь про право на анонимность, косвенно (без явного выделения в отдельное право) закрепленное на уровне Конституции. Про авторское право и обращения граждан, решил не вспоминать, чтобы не усложнять.


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


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

VolCh
0
Сбор, хранение, использование и распространение информации о частной жизни лица без его согласия не допускаются.

Каждый имеет право на неприкосновенность частной жизни, личную и семейную тайну

Каждый имеет право свободно искать, получать, передавать, производить и распространять информацию любым законным способом.

Как минимум, касательно частной жизни, не допускается не то, что фиксация содержания переписки, а даже сам её факт, равно как и факты поиска и получения информации из публичных источников.

VolCh
0

У меня нет особых вариантов как трактовать запись "user.id" кроме как "идентификатор пользователя", а вот для записи "users.id" могут быть варианты, например, "множество идентификаторов пользователей".


Мы говорим по каким полям записей объединять их, фильтровать и т. п. Результат выборки это множество, источник — множество, а вот условия объединения, фильтрации и т. п. работают на уровне записей.

VolCh
+1

Состояние UI на клиенте в базе на сервере, как правило не хранится, по многим причинам. Да и кроме пути из базы к пользователю, есть и обратный путь. И уж на нём каждое нажатие клавиши пользователем записывать в базу не просто накладно, но и небезопасно.


Если у каждого уровня/слоя/модуля/компонента приложения есть свой единый источник правды, то ему безразлично хранятся они в базе на сервере или существуют только в оперативке клиента.

VolCh
+2

Лично я не пришёл к однозначному выводу, есть ли смысл вводить ApolloProvider (и прочие подобные провайдеры) в иерархию React-компонентов. Как-то очень сильно получается зависит UI от транспортного протокола, перестаёт компонент быть функцией лишь от состояния приложения, оно перестаёт быть единым источником правды, состояние (в широком смысле слова) компонента становится зависимым и от основного стора, и от данных, пришедших с сервера.


Для независимых компонентов а-ля виджеты с внешних источников — вполне годно. А вот для компонентов, зависимых от высших уровней — сомнительно. Пока придерживаюсь подхода, по которому все данные компонента он либо получает самостоятельно, либо из стора (напрямую или через свойства от вышележащих компонентов — нюансы). Варианты типа "получаем из стора id матча и делаем в компоненте запрос на сервер, чтобы получить его данные" стараюсь исключать, реализуя получение на уровне стора, к нему компонент обращается за данными, а уж стор решает делает запрос на сервер, извлечь из кэша или вернуть заглушку.

VolCh
0

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

VolCh
0

Может. Уменьшение связанности, увеличение связности, уменьшения количества ответственностей и прочие подобные принципы созданы для упрощения разработки, а не усложнения.


Но до недавнего времени с инструментарием на фронтенде было гораздо хуже, чем с инструментарием на бэкенде.

VolCh
0
Как раз если обществу плевать на нарушение основных законов, то они если и меняются, то лишь в сторону «выглядеть поприличней для внешних наблюдателей». Пример — советские конституции. Если не плевать, то меняются сообразно требованиям общества.
VolCh
0
Но работаем мы с записями, а не с таблицами, user.id = person.user_id выглядит однозначные чем users.id = persons.id.
VolCh
–1
Таблицы лучше в единственном, а идентификаторы коллекций во множественном. Пускай дополнительные переопределения, но это удобнее.
VolCh
+1

Вопрос на засыпку: Нужен ли Kubernetes если вы не Google? Несколько раз присматривался, но каждый раз решал, что слишком сложно и не даёт ощутимого профита для оркестрации небольших (20-30 сервисов) SOA-приложений в контейнерах на пятке серверов в одном ДЦ — вполне достаточно docker swarm, docker-compose и bash.


Есть другие мнения?