1. Резидентам – участникам внешнеэкономической деятельности осуществить обязательную продажу иностранной валюты в размере 80 процентов суммы иностранной валюты, зачисленной начиная с 1 января 2022 г. на их счета в уполномоченных банках на основании внешнеторговых контрактов, заключенных с нерезидентами и предусматривающих передачу нерезидентам товаров, оказание нерезидентам услуг, выполнение для нерезидентов работ, передачу нерезидентам результатов интеллектуальной деятельности, в том числе исключительных прав на них, не позднее трех рабочих дней со дня вступления в силу настоящего Указа.
Что-то мне кажется что первый пункт немного печальнее... А еще там ниже
4. Определить, что порядок осуществления продажи иностранной валюты на основании пунктов 1 и 2 настоящего Указа устанавливается Центральным банком Российской Федерации.
который вполне может оказаться "продавай за сколько сказали" (ттт)
Зум на 4000 бесполезен был имхо, как и кнопки снизу, которые в итоге забились и перестали работать. Индикация есть, но перенесена на сами кнопки, вполне удобно. К F кнопкам привык и не хочу отдельно :) В целом мне новая версию больше 4000 нравится.
Есть у Microsoft Natural 4000 одна раздражающая проблема - заедает пробел. На новой Ergonomic Keyboard они это пофиксили и печатать теперь еще удобнее.
Но автор уже бегал по беговой дорожке дома. Беговая дорожка ему тоже не угодила.
Дорожки нет, если обычный (не смарт) велотренажор — более унылое занятие найти сложно: жарко, мокро (= пот ручьями), 4 стены (= скукота), бррр, короче. Лишь немного спасают фильмы, но полностью погрузиться всё равно не получится. Поэтому чтобы заниматься нужна реально сильная мотивация (которой у автора, очевидно, нет). Не стал бы рекомендовать.
Что то, что нравится одним не всегда нравится другим, что бы не писали ученые.
Просто ты не с той стороны зашел. Смысл не в том чтобы себя пытать заставляя каждый день делать какую-то ненавистную херню (очевидно же что в долгосрочной перспективе это не работает), а в том чтобы изменить образ жизни и заниматься тем чем нравиться (это и к работе относится). Если говорить о весе, то самую первую очередь это меньше жрать, но это не значит голодать и мучить себя, достаточно совсем по чуть-чуть уменьшать порции и посуду, для мозга это пройдет незаметно. Во-вторую надо найти то что тебя прет, кроме качалки и фитнеса, есть еще
велосипед — ищем местный велоклуб, спрашиваем че купить, покупаем не совсем шлак (но и топ тоже брать не надо, первый вел практически всегда ошибка с размером и/или видом, через год от него обычно избавляют и берут что-то более подходящие) и начинаем катать с народом — удивишься сколько интересных мест вокруг города. Если зайдет, то можно поучаствовать в соревнованиях. (если кому-то интересно могу подробнее написать с чего стоит начать и на что обращать внимание)
лыжи беговые — если в городе недалеко если хорошая лыжня, то отличный вариант зимой, нагрузки побольше, но, тут главное именно чтобы недалеко, если надо пару часов куда ехать/идти то это быстро надоест.
лыжи горные / сноуборд — больше для фана, народу на самом деле много катает, собираются ездят по трассам.
туризм — необязательно многодневный, очень многие опять ходят (или ездят на веле) на один-два дня, в хорошей компании тоже отличный вариант.
и т.д. и т.п.
но основное всё равно "меньше жрать", спортом похудеть можно, но это надо реально много пахать, не всем это подходит, банально потому что есть много других интересных активностей, которыми можно заниматься вместо тупого сжигания сожранного.
Третье, не надо надрываться — чувствуешь что устал/надоело — сядь отдохни день, подумай почему надоело: или это просто усталость (= отдыхаем день-два) или оно не интересно (= ищем что-то другое). Если все делать правильно, то тут на каком-то этапе почувствуешь что наука права когда говорит: "при физнагрузках выделяются какие-то гормоны, из-за чего я должен быть счастлив".
Она популярна за те вещи, которые вы воспринимаете как данное и не замечаете
Наверное да, но вот если хочется чуть больше программирования, то это боль :( Жаль я не успел вовремя остановиться на нескольких тупых работающих плейбуках и решил добавить настроек… видимо придется еще и salt глянуть, там вроде это все погибче, правда что-то стандартные формулы не внушают доверия — та же mysql на убунте судя по всему кладет конфиг не туда куда должна… Блин, раньше я даже как-то не догадывался что у сисадминов все так же плохо как на frontend-е :D
ЗЫ include_role не надо использовать, это preview и таковым оно останется навсегда.
Правда? Очень жаль, если бы сделали параметры с проверкой (как у стандартных действий) и без их перекрытия через -e было бы очень удобно выносить повторяющие блоки. Банальный пример, у меня mysql через auth_socket и везде надо втыкать
Как раз начал ковырять ansible, статьи сделали все немного понятнее, спасибо. Однако, после знакомства с "переменными" у меня только один вопрос: что надо было курить чтобы родить подобное? Отдельно, кстати, порадовался поведению private_role_vars = true.
Вооружённые этим знанием мы уже можем попытаться догадываться, что за фигня происходит в этом коде:
КМК, это просто (еще) один из косяков архитектуры, будь, например, оно в явном виде и проблем с понимаем было бы сильно меньше.
- name: This is loop
loop: '{{ groups.all }} as item'
tasks:
- name: Do not do this
file: path=hello.txt state=touch
vars:
ansible_host: '{{ hostvars[item].ansible_host }}'
но исправлять они не могут, потому что любое прикосновение к этой области сломает самым непонятным образом уже написанные плейбуки
Жаль они не знают про major версии где смело можно забить на всё что есть и сделать нормально.
include_role
Я пока пришел к мнению что если воспринимать их как вызовы функций со своими параметрами (которые в данном случае стоит класть в vars/, а не в defaults/ чтобы исключить влияние внешних переменных (но не всех, да) и для которых кстати вроде есть PR который позволит явно указать список параметров), то всё вроде вполне неплохо и ожидаемо (и всяко сильно лучше чем, например, private_role_vars = true и dependencies у ролей...), но надо помнить что оно по сути создает новую изолированную область и, например, все "dependencies" будут вызваны еще раз, что далеко не всегда желательно.
ЗЫ: Удивляет как настолько кривая система стала популярной.
Проблема в том что Laravel из коробки использует php для миграций, но оно поддерживает далеко не всё что есть в sql (из совсем банального — нету енумов), поэтому в реальности миграции все равно содержат sql, который еще и привязан к конкретной базе (собственно это одна из основных причин полного перехода на raw sql).
А вообще костыли всё это.
Ага, но ide-helper сильно всё упрощает :) И кстати, вон вроде плагин есть, который под капотом использует ide-helper (сам не пробовал).
Не, он ничего не требует, кроме, разве что PHPStorm-а, для которого он генерирует метадату (автокоплит для контейнера и переопределение типа возвращаемого значения некоторых методов). Дополнительно к ней он может создавать псевдоклассы для фасадов и Macroable, ну и генерировать phpdoc с полями для моделей (базу при этом использует туже что и сама модель).
Там даже с обычным phpdoc проблемы, в IDE всё красное
Для Laravel-а практически обязателен https://github.com/barryvdh/laravel-ide-helper, который решает почти все проблемы с автокоплитом в PHPStorm-е :) (быстрее бы еще фабрики смержили...)
А что не так с вагрантом? Для разработки (под виндой по крайней мере) очень удобно — буквально за день сделал шаблон, и постепенно перетащил все проекты в отдельные виртуалки, при этом у каждой отдельный домен (на основе имени из composer/package.json). Как это сделать на докере сходу не нашел.
Для каких-нибудь gd функций оно возможно актуально (даже не вспомню где еще есть по 10 параметров?), но для обычного кода оно не нужно, а если нужно, то это скорее повод задуматься о том что пора что-то отрефакторить. Поэтому, кмк, недостатков гораздо больше чем достоинств (подробнее ниже написал https://habr.com/ru/post/511266/#comment_22276484)
Я профессионально программирую на PHP с 2004 года, то есть вот уже 16 лет на момент написания этой статьи, и продолжаю это делать каждый день
А я где-то с 2006-7, и не согласен — в целом всё радует (эх, дженерики бы еще...), за исключением именованных параметров:
Сама по себе проблема больше выдуманная, в нормальным коде функций где больше 4-5 параметров мало, да и IDE давным-давно умеют выводить названия параметров.
Названия теперь часть публичного API, а значит чтобы исправить опечатку придется выпускать новую мажорную версию, но
Проверка имен при наследовании есть только в рантайме — т.е. при обновлении зависимостей теперь гораздо больше работы ибо придется так же проверять и синхронизировать имена.
Ассоциативные массивы при распаковке будут использованы как именованные параметры, что может сломать существующий код
Привести код к единому стилю больше невозможно и у нас всегда будет каша из argName, argname и arg_name. Два последних варианта использует сам PHP, а т.к. теперь они часть публичного API то исправлены могут быть только в PHP 9 (т.е. в реальности надежд на согласованное std api всё меньше и меньше).
Можно конечно не делать ничего, но сама по себе фича очень удобная.
Это "удобная" фича сделала имена параметров частью публичного апи, теперь чтобы исправить опечатку в названии параметра нужно будет выпустить новую мажорную версию. Вариант с array_fill(50, default, 0); был, кмк, лучше.
Если вам нужно перерендерить дочерние компоненты, а при этом их входные данные не поменялись — вы делаете что-то не по канонам Angular
Это обычный очень распространенный кейс:
<страница которая с сервера объект с дочерними элементам>
<заголовок, который используется на многих других страницах и вычисляет статус по дочерними элементам />
<дочерний элемент №1>
<редактировать />
<удалить />
</дочерний элемент №1>
<дочерний элемент №2>
<редактировать />
<удалить />
</дочерний элемент №2>
</страница которая с сервера объект с дочерними элементам>
Когда дочерний элемент удаляет/изменят сам себя надо
1) уведомить страницу
2) перерисовать всё компоненты
Когда объект действительно сложный гораздо проще было бы сказать "перерендерь меня полностью", но вместо этого приходится создавать глубокую копию*, ну или пробрасывать refresh$, но это как раз (очередной) костыль для решения проблемы, которую должен решать фреймфорк. Более того, refresh$, в отличии от клона, может не работать когда где-то внутри есть сторонние компоненты, который о нем не знают.
* — еще можно реализовать deep check (обычно оверкил), или фейковый @Input (ничем не лучше refresh$).
Ну а программное изменение инпутов компонента — это проделки Императора, смотрите совет №5 :)
Далеко не все можно написать декларативно. Ну а если вы не учитываете что ваш компонент может быть использовать программно, то вы сами роете себе яму чтобы попасть в неё в будущем.
Как видим должен быть number, предоставили {}, а сам компонент ждет string — и ни одной ошибки. Поэтому @Inject() скорее антипатерн и вместо него почти всегда лучше использовать абстракный класс.
1) инжектируя работу роут как параметр ...
Для случая описанного в статье так-то есть https://angular.io/api/router/Resolve, который отложит рендеринг компонента до момента резолва всех резолверов (= пользователь не будет смотреть в пустую страницу) тем самым позволит выбросить *ngIf + можно вывести ошибку и опционально перенаправить пользователя на другую страницу если резолвинг провалился (= сервер вернул 404 например)
Правда с типами тут тоже не все идеально ибо data: Observable<{[name: string]: any;}>.
Что-то мне кажется что первый пункт немного печальнее... А еще там ниже
который вполне может оказаться "продавай за сколько сказали" (ттт)
Зум на 4000 бесполезен был имхо, как и кнопки снизу, которые в итоге забились и перестали работать. Индикация есть, но перенесена на сами кнопки, вполне удобно. К F кнопкам привык и не хочу отдельно :) В целом мне новая версию больше 4000 нравится.
Есть у Microsoft Natural 4000 одна раздражающая проблема - заедает пробел. На новой Ergonomic Keyboard они это пофиксили и печатать теперь еще удобнее.
Дорожки нет, если обычный (не смарт) велотренажор — более унылое занятие найти сложно: жарко, мокро (= пот ручьями), 4 стены (= скукота), бррр, короче. Лишь немного спасают фильмы, но полностью погрузиться всё равно не получится. Поэтому чтобы заниматься нужна реально сильная мотивация (которой у автора, очевидно, нет). Не стал бы рекомендовать.
Просто ты не с той стороны зашел. Смысл не в том чтобы себя пытать заставляя каждый день делать какую-то ненавистную херню (очевидно же что в долгосрочной перспективе это не работает), а в том чтобы изменить образ жизни и заниматься тем чем нравиться (это и к работе относится). Если говорить о весе, то самую первую очередь это меньше жрать, но это не значит голодать и мучить себя, достаточно совсем по чуть-чуть уменьшать порции и посуду, для мозга это пройдет незаметно. Во-вторую надо найти то что тебя прет, кроме качалки и фитнеса, есть еще
велосипед — ищем местный велоклуб, спрашиваем че купить, покупаем не совсем шлак (но и топ тоже брать не надо, первый вел практически всегда ошибка с размером и/или видом, через год от него обычно избавляют и берут что-то более подходящие) и начинаем катать с народом — удивишься сколько интересных мест вокруг города. Если зайдет, то можно поучаствовать в соревнованиях. (если кому-то интересно могу подробнее написать с чего стоит начать и на что обращать внимание)
лыжи беговые — если в городе недалеко если хорошая лыжня, то отличный вариант зимой, нагрузки побольше, но, тут главное именно чтобы недалеко, если надо пару часов куда ехать/идти то это быстро надоест.
лыжи горные / сноуборд — больше для фана, народу на самом деле много катает, собираются ездят по трассам.
туризм — необязательно многодневный, очень многие опять ходят (или ездят на веле) на один-два дня, в хорошей компании тоже отличный вариант.
и т.д. и т.п.
но основное всё равно "меньше жрать", спортом похудеть можно, но это надо реально много пахать, не всем это подходит, банально потому что есть много других интересных активностей, которыми можно заниматься вместо тупого сжигания сожранного.
Третье, не надо надрываться — чувствуешь что устал/надоело — сядь отдохни день, подумай почему надоело: или это просто усталость (= отдыхаем день-два) или оно не интересно (= ищем что-то другое). Если все делать правильно, то тут на каком-то этапе почувствуешь что наука права когда говорит: "при физнагрузках выделяются какие-то гормоны, из-за чего я должен быть счастлив".
Чет меня поперло))) Ладно, в общем подытожу:
1) Меньше жрать
2) Делать то что нравится
Банально, но оно реально работает.
Наверное да, но вот если хочется чуть больше программирования, то это боль :( Жаль я не успел вовремя остановиться на нескольких тупых работающих плейбуках и решил добавить настроек… видимо придется еще и salt глянуть, там вроде это все погибче, правда что-то стандартные формулы не внушают доверия — та же mysql на убунте судя по всему кладет конфиг не туда куда должна… Блин, раньше я даже как-то не догадывался что у сисадминов все так же плохо как на frontend-е :D
Правда? Очень жаль, если бы сделали параметры с проверкой (как у стандартных действий) и без их перекрытия через
-e
было бы очень удобно выносить повторяющие блоки. Банальный пример, у меня mysql черезauth_socket
и везде надо втыкатьвместо этого было бы лучше обертку сделать.
Как раз начал ковырять ansible, статьи сделали все немного понятнее, спасибо. Однако, после знакомства с "переменными" у меня только один вопрос: что надо было курить чтобы родить подобное? Отдельно, кстати, порадовался поведению
private_role_vars = true
.КМК, это просто (еще) один из косяков архитектуры, будь, например, оно в явном виде и проблем с понимаем было бы сильно меньше.
Жаль они не знают про major версии где смело можно забить на всё что есть и сделать нормально.
Я пока пришел к мнению что если воспринимать их как вызовы функций со своими параметрами (которые в данном случае стоит класть в
vars/
, а не вdefaults/
чтобы исключить влияние внешних переменных (но не всех, да) и для которых кстати вроде есть PR который позволит явно указать список параметров), то всё вроде вполне неплохо и ожидаемо (и всяко сильно лучше чем, например,private_role_vars = true
иdependencies
у ролей...), но надо помнить что оно по сути создает новую изолированную область и, например, все "dependencies" будут вызваны еще раз, что далеко не всегда желательно.ЗЫ: Удивляет как настолько кривая система стала популярной.
Проблема в том что Laravel из коробки использует php для миграций, но оно поддерживает далеко не всё что есть в sql (из совсем банального — нету енумов), поэтому в реальности миграции все равно содержат sql, который еще и привязан к конкретной базе (собственно это одна из основных причин полного перехода на raw sql).
Ага, но ide-helper сильно всё упрощает :) И кстати, вон вроде плагин есть, который под капотом использует ide-helper (сам не пробовал).
Ну… у меня оно raw sql например)
Так это логично, как иначе он узнает какие поля есть у таблицы?
Для моделей он вот такое генерит:
Не, он ничего не требует, кроме, разве что PHPStorm-а, для которого он генерирует метадату (автокоплит для контейнера и переопределение типа возвращаемого значения некоторых методов). Дополнительно к ней он может создавать псевдоклассы для фасадов и Macroable, ну и генерировать phpdoc с полями для моделей (базу при этом использует туже что и сама модель).
Для Laravel-а практически обязателен https://github.com/barryvdh/laravel-ide-helper, который решает почти все проблемы с автокоплитом в PHPStorm-е :) (быстрее бы еще фабрики смержили...)
Спасибо. Правда судя по беглому взгляду в Windows 10 оно просто так не заведется (
hosts
как минимум обновлять оно, похоже, не умеет).А что не так с вагрантом? Для разработки (под виндой по крайней мере) очень удобно — буквально за день сделал шаблон, и постепенно перетащил все проекты в отдельные виртуалки, при этом у каждой отдельный домен (на основе имени из
composer/package.json
). Как это сделать на докере сходу не нашел.Так нету этой необходимости, php storm давным-давно умеет вот так:
vscode сразу из коробки так не умеет, но вон там https://github.com/microsoft/vscode/issues/16221 вроде есть плагин.
Для каких-нибудь
gd
функций оно возможно актуально (даже не вспомню где еще есть по 10 параметров?), но для обычного кода оно не нужно, а если нужно, то это скорее повод задуматься о том что пора что-то отрефакторить. Поэтому, кмк, недостатков гораздо больше чем достоинств (подробнее ниже написал https://habr.com/ru/post/511266/#comment_22276484)А я где-то с 2006-7, и не согласен — в целом всё радует (эх, дженерики бы еще...), за исключением именованных параметров:
argName
,argname
иarg_name
. Два последних варианта использует сам PHP, а т.к. теперь они часть публичного API то исправлены могут быть только в PHP 9 (т.е. в реальности надежд на согласованное std api всё меньше и меньше).Это "удобная" фича сделала имена параметров частью публичного апи, теперь чтобы исправить опечатку в названии параметра нужно будет выпустить новую мажорную версию. Вариант с
array_fill(50, default, 0);
был, кмк, лучше.Это обычный очень распространенный кейс:
Когда дочерний элемент удаляет/изменят сам себя надо
1) уведомить страницу
2) перерисовать всё компоненты
Когда объект действительно сложный гораздо проще было бы сказать "перерендерь меня полностью", но вместо этого приходится создавать глубокую копию*, ну или пробрасывать
refresh$
, но это как раз (очередной) костыль для решения проблемы, которую должен решать фреймфорк. Более того,refresh$
, в отличии от клона, может не работать когда где-то внутри есть сторонние компоненты, который о нем не знают.* — еще можно реализовать deep check (обычно оверкил), или фейковый
@Input
(ничем не лучшеrefresh$
).Далеко не все можно написать декларативно. Ну а если вы не учитываете что ваш компонент может быть использовать программно, то вы сами роете себе яму чтобы попасть в неё в будущем.
См: https://github.com/angular/angular/issues/22567
Будет, и еще какая, но это скорее проблема
@Inject()
, который не может проверить типы предоставленного значения и того что нужно.Как видим должен быть
number
, предоставили{}
, а сам компонент ждетstring
— и ни одной ошибки. Поэтому@Inject()
скорее антипатерн и вместо него почти всегда лучше использовать абстракный класс.Для случая описанного в статье так-то есть https://angular.io/api/router/Resolve, который отложит рендеринг компонента до момента резолва всех резолверов (= пользователь не будет смотреть в пустую страницу) тем самым позволит выбросить
*ngIf
+ можно вывести ошибку и опционально перенаправить пользователя на другую страницу если резолвинг провалился (= сервер вернул 404 например)Правда с типами тут тоже не все идеально ибо
data: Observable<{[name: string]: any;}>
.