- 1
- 2
- 3
Именно поэтому я за «PHP» #3
#1: https://govnokod.ru/26462 https://govnokod.xyz/_26462
#2: https://govnokod.ru/26827 https://govnokod.xyz/_26827
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
Именно поэтому я за «PHP» #3
#1: https://govnokod.ru/26462 https://govnokod.xyz/_26462
#2: https://govnokod.ru/26827 https://govnokod.xyz/_26827
Какая защита )))
С той же страницы:
> This will allow you to use negative values
Только в «PHP» можно отправлять поток управления в прошлое. Именно поэтому я за «PHP».
Какой flush )))
Чувствуется глубокое понимание современных информационных технологий
https://www.youtube.com/watch?v=qOgVuO1s8ys
Сука, вместо того чтобы своё тормозное говно пофиксить, они вывод флашат. Ещё бы по таймеру пробелами срали.
нидерландцы ёбаные, странно что не slapen
Что за шумовая сила?
От него всегда блюют.
> can also be interrupted, but will continue sleeping after the signal arrived
WAT?
>серверс
VPSы? Не, не слышал
а
а зачем?
С тобой встретимся,
Будем php курить
Какое секьюрити )))
Может быть там юзерские файлы какие-то, имена которых не хочется светить?
Ну или какие-то свойства системы выяснить по именам чтобы поискать соотв. эксплойты.
Сайт Стеленбосского университета в ЮАР.
>>>
>>> В PHP 8, при сравнении чисел и строк с помощью нестрогого == оба операнда приводятся к строке и сравниваются как строки, если один из них не является числовой строкой.
>>> 0 == 'foobar' теперь официально false.
>>> В PHP 8 будет новый оператор nullsafe: ?->.
Именно поэтому я за «PHP».
А вот «Renamed Parameters», как в «Свифте» — это забавно. Можно будет писать запутанный код: function($first:second, $second:first).
>> Пользователям Laravel 5.5 рекомендуется не использовать драйвер сессий 'cookie'.
Какой багор )))
В Свифте позиция аргумента fixed
{ Вы случайно не Middle PHP ? }
Опровергаю.
Ав-ав-ав-ав!
Пробел значим только в таком примере:
https://ideone.com/Dxg8eS
8.5 — это восемь с половиной.
8 . 5 — это привести 8 к строке и сконкатенировать с 5, приведённым к строке.
Т. е. в тех случаях, когда десятичный разделитель можно спутать с конкатенацией.
Других примеров придумать не могу.
Напечатает лишний перевод строки
Ещё багры бывают из-за BOM, если исходник в UTF-8 (а они обычно сейчас в такой кодировке).
https://imgur.com/a/6dgXz8K
гений знает, что очень сложная хуйня не бесплатна в плане времени на ее понимание, так что иногда лучше сделать проще.
Есть три стадии программиста
Джун делает всё тупо и на коленке, хардкодом, в одном файле, c копипастой, потому получается просто
Миддлу уже так не интеерсно, и он старается сделать Очень Умный Фреймворк, который сам всё сделает.
Получается пиздецовый монстр, где на любой чих нужно тридцать два класса или метушня
И только сеньор понимает, что сложность нужно ограничивать, иначе будет пиздец.
Сеньор, вероятно, не делает систему расширяемой в том месте, где это не нужно, и не плодит лишних уровней абстракции
борьба с "лишними" уровнями это прекрасно, но часто разбивается о камни хотелок бизнеса, меняющихся раз в неделю
что не отменяет того факта, что некоторые любят написать нечто такое, что само по себе неожиданно не менее сложно, чем весь остальной код. но "сеньорность" на это никак не влияет.
g: YAGNI
А что с ним? Не припомню там бесполезных вещей и оверинжиниринга.
Хотя я хуйню сказал, да, т.к. вулкан делает ровно то, для чего он нужен.
Лучше бы я про QT вспомнил, его можно и за и против ягни приплести.
Да ну. Тоже плохой пример. Вполне практичная либа, оверинжиниринга там на порядок меньше чем в бусте и стд.
Ему разве что нарушение DRY можно приписать, но тогда реальных альтернатив не было. Для многих классов в духе QString и сейчас нету.
Но так у них есть классы для работы с FTP, обязательно ли их наличие в UI-тулките, вопрос
А в UI-тулките их и нет, лол. Там же отдельная либа на каждую тему всё-таки. Если тебе просто гуйню наваять -- не подключай QtNetwork.
приходишь ты на совещание, там тебе говорят: "нам надо сделать то, то и сё, а вот это переделать, а вот это уже не нужно"
а ты такой с вертухи: YAGNI, KISS, DRY!
а тебе: спасибо, у Вас завтра последний день, зайдёте в бухгалтерию
ещё раз: best practises как самоцель это мастурба
сеньор, если он сеньор, а не лычкодрочер, должен помогать бизнесу достигать целей своей экспертизой, а не лайки собирать на медиуме, копипастя баззворды с википедии
чтобы понимать, о чем говоришь
YAGNI не мешает бизнесу достигать своих целей, и даже наоборот: помогает, потому что экономит время и деньги
возможно, в твоей компании это ок, я ж не знаю
Ягни не означает "отказывать бизнесу в выполнении требований"
во-вторых, эти ягни в разговор зачем-то принёс ты
так шо могу лишь ещё раз посоветовать сходить на курсы "русская езык" =)
>предпочитаю делать реальную работу вместо того, чтобы зазубривать семантику аббревиатур
/0
Я принес ягни, и ты сообщил:
[quote]
приходишь ты на совещание, там тебе говорят: "нам надо сделать то, то и сё, а вот это переделать, а вот это уже не нужно"
а ты такой с вертухи: YAGNI, KISS, DRY!
[/quote]
из этого следует, что ты почему-то считаешь, что YAGNI призывает отказывать бизнесу в его требованиях.
Это неверно.
>так шо могу лишь ещё раз посоветовать сходить на курсы "русская езык" =)
"О чем может спорить человек, который не поменял паспорт? Какие взгляды на архитектуру может высказать мужчина без прописки?
И вообще, разве нас может интересовать мнение человека лысого, с таким носом?" (c)
"гналась за Вами пять вёрст, чтобы сказать, как Вы мне безразличны"?
Спустя 5-10-15 лет систему будут использовать так как синьйор и представить не мог
То, что они 20 лет не развиваются, к "ягни" отношения не имеет.
Ягни не является советом "не развивайтесь двадцать лет"
А пример "hurd" дает нам обратный пример
моя точка зрения заключается в том что авторы переусложненной хуйни делают предположения о том что будет нужно, а адепты ягни делают предположения о том что точно будет не нужно
по-моему это одно и тоже и адепты ягни воюют с мельницами или сами с собой
Я видел и обратные примеры. В одной конторе была ягни-питушня с самого её создания. Её пилили академики, и код там был крайне умный, но без рахитектурных наворотов. Решили её заменить аналогичной питушнёй, но сделанной "по уму". С инъекциями фабрик стратегий прямо в пятую точку разработчику и всем прочим. Итог на сегодняшний день: изначальная ягни-питушня живёт, а замена похоронена.
Тут скорее сама задача нерентабельна. Как ты будешь монетизировать архив почтовых переписок, которые читает кучка нердов? Это же не тикток и не инстаграм. Вот и крутится как есть 20 лет.
- гуглпочту они ж как-то монетизируют
Там есть твои приватные данные, а в рассылках всё публичное и доступно в других местах.
- не всё вроде бы
Чем-то мне это напоминает сёмино «нинужно»...
Я уверен, что и в линухе есть вещи, которые ты ain't gonna need, но кому-то они могут быть очень даже нужны.
Плюс, насколько я понимаю, ты предлагаешь добавлять фичи и инфраструктуру для них по мере поступления хотелок начальства? Тогда могут возникнуть серьёзные проблемы, т.к. придётся рефакторить или даже переписывать чуть ли не весь существующий код.
Или зачем делать отдельную прослойку для сетевого взаимодействия, все наши три модели могут прямо из конструктора сходить по хттп и принести добра
и проч.
Поскольку мы не знаем какие языки будут популярны в будущем, то логично разработать виртуальную машину, и запускать код в ней. Это позволит нам писать на любом языке.
При серьезных нагрузках мы наверняка столкнёмся с необходимостью профилирования, так что неплохо бы поддержать у этой машины API для разработки профилировщика.
Машину лучше реализовать как минимум под x86 и arm, причем с JIT.
>Или зачем делать отдельную прослойку для сетевого взаимодействи
Не стоит завязываться на HTTP, ты же недавно приносил его аналоги. Лучше разработать свой протокол, который может работать как поврех HTTP, так и поверх голого TCP.
Однако TCP это далеко не лучшее решение, есть например SCTP, который тоже может понадобиться, так что вероятно стоит ввести уровень абстракции, позволяющий нашему проткоолу работать поверх чего угодно.
Не стоит так же забывать про IPX/SPX, которые еще могут встречаться в очень старых системах.
А более сложный код более сложен в поддержке (неожиданно, правда?), менее надежен и более труден для понимания.
>которые ты ain't gonna need, но кому-то они могут быть очень даже нужны.
Если они кому-то нужны, то это не ягни. В ягни речь о том, что не нужно никому.
>Тогда могут возникнуть серьёзные проблемы, т.к. придётся рефакторить
Идеальный код, который поддерживает все возможные кейсы занимает по времени разработки бесконечность.
Именно потому фичи нужно добавлять по мере необходимости, о чем собссно и говорит ягни
Сложный код – это когда нет комментариев, а сам код писали Индусы на коленке за еду. В такой код сложно что-то добавить, ведь посыпется всё остальное.
А хороший код должен быть продуманным и следовать принципам SOLID.
> Если они кому-то нужны, то это не ягни.
Тогда зачем нужен ЯГНИ? Мне кажется, что если программист говорит: «В ТЗ написано сделать программу для подсчёта кур, но я пока далеко не продвинулся, ебусь с функцией выгула свино-собак», то ему уже никакое ЯГНИ не поможет, а нормальных людей оно наведёт на непристойные мысли, что клиенту никогда не понадобится считать индюков, макак, прыщебля́дей и т.д.
> Идеальный код, который поддерживает все возможные кейсы
Это правда, но в пределах одной предметной области вполне возможно выстроить замечательную архитектуру и охватить как можно большее количество фич.
> Именно потому фичи нужно добавлять по мере необходимости
Смысл продуманной архитектуры не в том, чтобы добавить все фичи, а чтобы сделать процесс их добавления очень простым и быстрым. Это, кстати, довольно легко организуется, если программист скилловый, а потом фичи добавляются с удовольствием.
SOLID это хуита из ООП, которая за пределами ООП-хуйни неприменима, так что нехуй его вплетать в определение "хорошего кода"
Я не знаю как ФПшники и процедурники организуют код, но что-то мне подсказывает, что они раскидывают процедуры и функции по файлам, чтобы не было мешанины.
А разве плохо, когда программа состоит из изолированных друг от друга частей с понятными правилами кто кого меняет/вызывает?
У меня в Си это называется "функция". Зачем мне для этого модули?
Вообще, SOLID нужен для всякой энтерпрайз питушни, где без него код быстро превратится в лапшу и умрёт, а прошивке такое обычно не грозит.
А что насчет OCP (open–closed principle), что за хуйню он должен означать, если классов нет и, соответственно, наследования тоже нет?
The open–closed principle states "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification".
Как видишь, «software entities» – это не только классы.
Эм, да OCP -- это же банальное "не ломай интерфейс без причины, сука!"
Причём здесь вообще классы? Оно и для сишки со структурами и функциями прекрасно работает. Если эти функции больше одного раза юзаются, конечно.
А зачем для этого придумывать некий принцип, если это и так очевидно? Почему тогда нет принципа "не давать функциям и переменным длинные и нечитаемые имена"? А то вот кто-то напишет еще код вида:
На вики https://ru.wikipedia.org/wiki/Принцип_открытости/закрытости пишут что есть OCP Мейера и еще какое-то полиморфное OCP.
Собственно, цитата:
>Принцип открытости/закрытости означает, что программные сущности должны быть:
>
> открыты для расширения: означает, что поведение сущности может быть расширено путём создания новых типов сущностей.
> закрыты для изменения: в результате расширения поведения сущности, не должны вноситься изменения в код, который эту сущность использует.
Э? А как это относится к не ломанию интерфейсов? Ну и если сущности будут закрыты для изменения и даже закрыты для расширения, я интерфейс один фиг могу сломать, выкинув старую сущность и написав новую.
Тут про какие-то "сущности" говорят, что это вообще за "сущности"? Структуры? А как я их закрою для изменения? Может командой chmod ugo-r some_struct_defs.h ?
Мне вообще концепция ООП(вокруг которой построена вся эта SOLID-концепция) совершенно не нравится - https://habr.com/ru/post/451982/
Имхо, ООП это просто инструмент.
Иногда он нужен, иногда нет.
Но адпеты ООП еще в конце 90-х всех заебали рассказами, что ООП это серебрянная пуля, а за одно и все хорошие практики записали на счет ООП.
Инкапсуляция, говорили они, есть только в ООП.
Хотя хороший API разумеется инкапсулирует в себе детали реализации, даже если он написан на QBasic.
Полиморфизм кококо, говорили они.
А разве одинаковая работа линукса с любой файловой системой через VFS это не полиморфизм?
В итоге они всех так заебали, что за упоминание ООП стали давать в морду.
А нужно было просто признать, что ООП это такой же примерно прием как передача объекта по ссылке.
Иногда полезен, иногда нет.
Такая же хуйня произошла с GUI.
А SOLID есть и без ООП
Наприме Single-responsibility principle
это же перефраз "UNIX way"
А как выглядит LSP без ООП?
Ну вот напилил ты драйверов для последовательного порта на разных чипах. А потом берёшь один из них и юзаешь. А вызывающий код от этого не охуевает и его не надо править, для него они все просто "драйверы последовательного порта".
Нарушение LSP в данном случае -- нахуярить под каждый чип свой уникальный интерфейс, под который придётся подпиливать всю остальную логику.
Причем технически API должен совпадать, а семантика должна отличаться, иначе это не интересно)
Например, драйвер последовательного порта получает ioctl, и там указатель на массив байт, и должен их послать в порт, и там дёрнуть прерывание в конце (хз так ли это на самом деле).
А вот ты пишешь драйвер, который вроде бы умеет получать то же самое ioctl, но шлёт в порт только каждый пятый байт. Или сначала дергает прерывание, а потом начинает слать в порт.
Это вроде бы и есть классическое нарушение LSP, и в общем протекание абстракции
Ну ок, натянуть интерфейс от UART'а на SPI. А потом требовать, чтобы клиент сначала высрал 10 нулевых байт через write, а только потом звал read. Где-то я такую херь даже видел.
Нет, LSP это не только про соблюдения единого API. Это и про то, что если ты некую хрень расширяешь чем-то, то это не должно ломать поведение того, что до этого в базовом классе. Например, если у тебя есть звуковая карта, которая умеет только лишь воспроизводить звук через ЦАП (микрофонного входа нет), ты сделал некий драйвер с неким API, а потом появилась звуковуха еще и с входом под микрофон, и ты унаследуешь интерфейс, добавляя еще хуйню чтоб аудиосемплы принимать. А если у тебя будет хуйня только с микрофонным входом, и ты унаследуешься от хуиты в которой есть функция воспроизведения аудиосемплов, это уже хуйня какая-то, потому как зачем тебе это воспризведение? Использование функции воспроизведения аудиосемплов тогда не имеет смысла, так что надо наслеоваться от хуйни, которая вообще нихуя не умеет по-сути, т.е. из нее отнаследовать хуйню для АЦП, потом от нее же хуйню для ЦАП, а потом надо еще эти хуйни совместить (когда и то и то есть), и как это в ООП-парадигме описывается?
class SoundDevice
у него массив capabilities: Capability[]
Sink extends Capability //апутпут
Source extends Capability //микрофон
Алгоритм для работы с микрофоном может искать нужный capability.
Если инофрмции о типе в рантайме нет, но можно использовать visitor, прости господи
А если у нас какие-то ебанутые ограничения на одновременное юзание sink и source? Например, если совмещенные АЦП и ЦАП от одного источника получает тактовые импульсы, и получается что samples per second на АЦП и на ЦАП должно быть строго одинаково, т.е. не может быть такой хуйни, что АЦП работает на 8000 а ЦАП 44100? Ну а если все же иногда можно, например если в одном 8000 а в другом 16000, то тогда можно 16000 поделить на 2 встроенным делителем частоты, и тогда норм? А если в кодеке, совмещающем ЦАП и АЦП есть какие-то особые функции, например аппаратное эхоподавление, которое работает только тогда, когда частоты дискретизации строго совпадают, и тогда вот трюк с делением на 2 уже не работает?
Вот как все эти говноньюансы какой-то там микросхемки учитывать в этом делегировании? Как тут соблюдать LSP?
Конечно, причём на многих уровнях одновременно.
Начнём с того, что понятие объекта из ООП вредно и избыточно, поскольку оно заигрывает с понятием объекта в реальном мире. А отношения между абстрактными понятиями в реальном мире сами люди друг-другу-то объяснить не могут, чего говорить о тупой машине. К примеру, можно ли наследовать `математику' от класса `наука'? У всех будут разные мнения, т.к. в реальном мире понятие `наука' довольно расплывчато, и поэтому, например, позитивизм приводит к такому неистовому багру учёных.
В функциональщине с тайпклассами абстракции куда более простые и эффективные. Они математические. Хоть они и менее интуитивные, но зато если ты доказал, что при подстановке твоей питушни в тайпкласс `зигоморфизм' все уравнения зигоморфизма выполняются, то твоя питушня — зигоморфизм и точка.
В ООП не так. Всякий раз, когда я наблюдал код-ревью у адептов ЙАЖА, это были сраные "диалоги" Платона. Является ли свойство X частью интерфейса Y? Один йажник считает, что X-ность является частью эйдоса Y-ковости. Другой считает, что нет. Поставить точку в этом споре нельзя, ибо всё донельзя субъективно. 1/2
Далее об избыточности. Класс в ООП-язычках типа йажи выполняет одновременно четыре несвязанные роли:
1) это контейнер для функций и контроль видимости (то, что в нормальных языках делает модуль),
2) он создаёт контракты (то, что в нормальных языках делает class declaration)
3) он выполняет контракты (то, что в нормальных языках делает instance declaration)
4) он до кучи занимается лочками (synchronized methods)
В итоге получается паззл, который с первого раза собрать невозможно, отсюда рефакторинг. ЙАЖА-программисты меня часто спрашивают, как я рефакторю ФП в Emacs. А необходимости в этом особой нет, т.к. все куски кода друг с другом слабо связаны и двигать их туда-сюда, чтобы что-то новое добавить, не нужно.
В тайпскрипте можно изъебнуться с literal types, на крестах наверное можно наметушить, но к ООП это отношения не имеет)
В яже придется описывать контракт в документации, проверять в рантайме, и кидать исключение.
А наследование реализации -- штука мутная, и лучше без необходимости её не использовать, иначе можно получить много дырявых абстракций.
Основные концепции ООП (официально) это абстракция, инкапсуляция и полиморфизм. Наследование не обязательно. И кстати все три концепции можно выразить без ООП.
- Алан Кей смотрит на тебя с недоумением
какой багор ))
Зачем тогда вообще ООП? Чтобы пердолиться с наследованием и думать которому из классов прикрутить метод?
зачем они в крестах?
Чтобы визиторов не городить, как минимум.
я опять забыл
Визитор работает когда у тебя фиксированный набор объектов, а функций дохуя и они добавляются.
Мультиметоды просто работают, и им не нужна вся эта ООПшная хуйня.
хотя не, не лучше
А нахуя в крестах этот псевдо-оопшный костыль? Там и так свободные функции есть.
Вот у меня есть петуз.
Что можно сделать с питузом?
Я пишу pituz.[space], и получаю список всех экстеншен методов из библиотек, и нахожу нужную.
Это позволяет мне быть дебилом, и вместо чтения документации жать пробел.
А автору экстеншена позволяет писать код в случайном месте, называть его случайным образом, и не документировать.
Поиск по типам аргументов можно привернуть, как в доке по хаски. Будешь просто какой-то хоткей на переменной/типе жать вместо точки.
С другой стороны, разве не пиздато писать
10.times{} как в руби?
Чтобы визиторов не городить, как минимум. (c)
Охуеть. Почти как в функциональщине, не то что в сраных джавах и сишарпах.
Но как то поможет-то?
Или ты предлагаешь добавить экстененом метод в Livestock, и компилятор обяжет тебя реализовать его для ВСЕХ наследников?
А откуда он знает про всех, вдруг они в другой либе?
только реализацию
ниже привёл пример, как сделать реализацию по умолчанию и для конкретного класса
честно скажу, что никогда так писать в настоящем проекте не приходилось)
или в скриптушне с обезъяньими заплатками
В руби совершенно нормально навесить говнеца на строку или число, или иной другой базовый тип.
Правда никаких интерфейсов тут нет, бо типизация струк утиная.
Но в отличие от экстеншенов, которые в Котлине (и полагаю, что и в C#) резолвятся в комайл тайме, и превращаются в обычные вызовы функций с первым аргументом, в Руби говно навешивается прямо внутрь самого класса.
зы: пздц конечно руби на винде шустрый, рубокоп три минуты мой код в три строки обсасывал
У него есть две реализации: Rooster и Pig.
У тебя есть логика, говорящая, что свинью нужно запечь, а петуха зажарить.
Ты получаешь инстанс Livestock.
Можно проверить его тип (цепочкой instanceof) и построить логику на этом.
Но во-первых не всегда тип известен в рантайм, во-вторых можно случайно проебать один из типов (если в языке нет каких нить sealed classes для этого)
Ты делаешь интерфейс Visitor с методами visitPig и visitRooster.
Первый метод полуает Pig, другой Rooster.
И реализуешь его.
Далее, в Livestock ты делаешь метод visit, получаюший этот интерфейс.
Pig реализует его вызывая visitPig(this)
Rooster тоже соответственно.
Именно поэтому я против "ООП".
пока в голову пришло что-то такое
выведет
А тьфу, тут дефолтная сработала.
в этом месте компилятор знает тип "c".
А теперь представим функцию, которая получает Animal.
Пусть тип "c" будет Animal.
Тогда сработает?
но вообще к, сожалению, нет, так не сработает
Правильного. Ну как это работает с обычными виртуальными методами.
Ну понятно, всё-таки экстеншены как в C# сделаны, без динамического полиморфизма.
Но хотя бы интерфейс к существующему объекту привернуть можно, уже прогресс.
The short answer is that protocol extensions don't do class polymorphism. This makes a certain sense, because a protocol can be adopted by a struct or enum, and because we wouldn't want the mere adoption of a protocol to introduce dynamic dispatch where it isn't necessary.
Структуры и энамы в Свифте наследование не поддерживают
Возможно, поэтому не стали делать
- в данном случае это и не виртуальные методы в общем
но это решение другой задачи :-)
Ко мне пришел Animal. Если это коза, то я делаю одно. Если корова, то другое.
Как мне это сделать?
Pet cat
Pet dog
Pet some animal
логика построена в зависимости от типа, экстеншены присутствуют. каких развлечений вам ещё хочется?
- ну вы просто как обычно формулируете условия задачи чанками
Х.з., по-моему всё понятно было у МАКАКи: на входе Animal (а не конкретный тип).
Именно поэтому мы за «YAGNI».
>Ко мне пришел Animal.
?
В смысле где тут переменная типа Animal?
Чтобы требовать контракт для группы связанных функций (хотя это тоже наверное можно без ООП).
на джаву не переводица
Файл в /proc является частным случаем (подтипом) абстрактного понятия "файл".
Функция "fopen" должна работать с файлами на /proc так же, как и с обычными.
Например, я могу открыть ``/proc/1/io``
Это и есть LSP.
Так вижу.
В линукс есть, например, API для псевдотерминалов.
Если ты хочешь сделать новый эмулятор терминала, то ты просто берешь это API, и не трогаешь ядро.
Ядро открыто для расширений (добавлений в него новых видов терминалов) но закрыто для изменений (тебе не нужно испрвлять ядро, чтобы добавить новый темринал)
OCP, как и любой принцип и паттерн, говорит про очевидные вещи, которые ты используешь каждый день, просто не всегда знаешь, как они называются.
Сложный код это кода:
* Высока цикломатическая сложность
* Высоко количество различных состояний системы
* Высоко количество абстракций
Первые два пункта усложняют понимание того, как поведет себя система при оперделенных входных данных.
Третий требует усвоения бОльшего числа концепций, и усложняет поддержку так как нужно реализовывать больше контрактов.
>А хороший код должен быть продуманным и следовать принципам SOLID.
Безусловно. Лучше быть богатым и здоровым, чем бедным и больным.
К сожалению, полностью продумать код ты можешь только если ты уже решил ТОЧНО ТАКУЮ ЖЕ задачу, да и то, только если в мире ничего не поменялось с последней версии (что вряд-ли)
Но так не бывает, так что всё равно приходится что-то рефакторить.
Именно потому водопад с его "давайте всё досконально продумаем, и за пять лет сделаем" был обоссан
>Тогда зачем нужен
Чтобы не тратить время на то, что не нужно прямо сейчас.
Во-первых важно как можно быстрее выйти на рынок, и застолбить место.
Пока ты будешь реализовывать все возможные фичи, твои конкуренты-говнокодеры уже соберут свое говно на пхп, и станут популярными.
Во-вторых ты заранее не можешь знать, что будет нужно.
Результаты эксперементов иной раз бывают совершенно непредсказуемые и контринтуитивные.
Ты тратишь время на интеграцию с FB, а потом оказывается, что 90% твоих пользователей хотят на самом деле ВК.
Ты тратишь время на разработку клиента под Android, а потом оказывается, что 90% твоих пользователей используют ios.
Ты не никак не мог этого ожидать, пока не увидел статистику.
> не в том, чтобы добавить все фичи, а чтобы сделать процесс их добавления очень простым и быстрым.
Разумеется, но угадать что-либо с первого раза далеко не всегда получается.
>Это, кстати, довольно легко организуется,
Если бы это было так, то не нужен был бы ни рефакторинг, но инструменты для него.
Люди с первого раза продумывали бы хорошие API, и потом писали бы под них плагины.
>Ты не никак не мог этого ожидать, пока не увидел статистику.
мне очень интересно как ты собираешься получить эту статистику не запуская продукт
К примеру, ты запускаешь веб версию, и видишь, что к тебе в основном заходят с айфонов, и делаешь выводы
Чтобы любители опросов прошли нахуй.
Хотя на 1-2 вопроса можно и ответить.
Всё прямо как с собеседованиями и тестовыми заданиями.
Notice
: Undefined offset: 1 in
/var/www/myprintbar.ru/docs/core/classes/engine.class.php
on line
6672
https://printbar.ru/muzhskiye-hudi/hudi-krasivaya-dochy-1419849/
или такой
https://printbar.ru/muzhskiye-hudi/hudi-flag-2805562/
?
Блядь, как же это говно тормозит-то! Реально пыхеры-мускульщики не нужны
Это всё из-за YAGNI!
Кошка бросила котят - Это YAGNI виноват,
Зайку бросила хозяйка - Кто виновен, угадай-ка!
Вот кончается доска У несчастного бычка,
Наша Таня громко плачет - Рядом YAGNI, не иначе!
Свет погас, упал забор, У авто заглох мотор,
Зуб здоровый удалили Иль залез в квартиру вор,
Не понравилось кино, Наступили вы в говно…
У любого катаклизма Объяснение одно…
Знает каждый технократ - Это YAGNI виноват!
Кто вчера в моём подъезде Лифт зассал до потолка?
Мне, товарищи, поверьте- Это YAGNI или DRY!
Я поймал по пьяни «белку» - Это SOLID'a проделки!
Куча под столом говна. Это PHP вина!
Засорился унитаз - Это defecate-plus-plus приказ,
Накидал туда бычков, Воду слил - и был таков!
По ночам бельё ворует, Стёкла в нашем доме бьёт.
Пьяным во дворе танцует. Это YAGNI - обормот!
Нет спасенья от злодея! Джавой пишет на стенах,
Изломал кусты в аллее. Это YAGNI - ох и ах!
Программиста дождик мочит - YAGNI весело хохочет.
Затопило вашу дачу? - Это SOLID, не иначе!
Вас гроза в пути застала? - То рука YAGNÍ достала.
Холод, ветер, снегопад - Снова YAGNI виноват.
Сносит крышу ураганом? - Это linux мстит баранам.
Шторм, цунами, наводненье? - Это YAGNI, без сомненья!
Ливень, оползень, циклон - Виноват конечно он
Сель, лавина, камнепад? - Ясно: YAGNI виноват!
Смерч, тайфун, землетрясенье - Нет от singleton спасенья!
В темя клюнула ворона? - это был адепт ООПа.
KISSы, JITы жалят вас? - Это хипстерский СпецНаз.
Видишь этого скрипта? - Он на службе у ЯГНЯ!
Если верите в такое - Это здравый смысл и реалистичная картина мира, близкая к объективной истине.
всю дорогу YAGNI жал,
а у самых у ворот
DRY засунул прямо в рот!
https://phpclub.ru/talk/threads/%D0%9D%D1%83%D0%B6%D0%BD%D0%B0-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C-%D0%B2-%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%BA%D0% B5-php-oop.87345/
https://twitter.com/PHP_CEO/status/621429503911460864
Похоже, Роскомнадзор просто сравнивал адреса по подстрокам. И любые домены, которые содержали в названии «t.co», замедлялись. Поэтому «под раздачу попали» Microsoft.com, rt.com, Reddit.com, поддомены GitHub и другие сайты.
Алгоритм незамысловатый. Уверены, что есть варианты «эффективней». Давайте попробуем придумать новый алгоритм для РКН. На будущее, так сказать.
https://echo.msk.ru/blog/elenaservettaz/2803078-echo/
*на всякий намекну, что это такая же вореция постиронии, как и ИА Панорама
Ебать, я думал это шутка была.
Как можно было не заметить такую рагулярку? Или провайдеры тестировали не на нём?
Так что саму регулярку могли и проглядеть. А замедляйку тестировали на своём каком-нибудь тестовом сайте.
Можно в доке по формату почитать, она открытая, в отличие от самого реестра. Звёздочки для доменов и маски для айпи там вроде больше года уже.
Есть всякие Ахо-Карасики для этого.... хотя.... можно интересно реализовать их на регулярках?
Я сегодня узнал, что нет, нельзя, потому что в таблице на Википедии так написано.
Наоборот, у тебя это получится (и очень даже легко), потому что и регулярки, и Ахо-Карасики – это finite state automata.
)))
Аккуратнее надо быть
Говорят, в аду для программистов их заставляют пять дней в няделю дебажить код ня PHP ..・ヾ(。><)シ.
> Как поживает PHP сообщество в Дагестане?
Ну давайте посмотрим на каналы!
> PHP Dagestan — телеграм-чат для PHP-разработчиков
https://m.ok.ru/video/5446567231
Название звучит как канал для пранков вольнова. Туда заходят дагестаняне, а потом звонят ему: «Лэээ саламалекум, это ты там пхп обсирал?»
> А может на PHP ? — телеграм-канал для PHP-разработчиков
Вы случайно не... ?
> Dev Seagulls Fem — instagram страница женского дагестанского IT-сообщества
Уже вступила туда? :з
> Горский дизайн — телеграм-чат для дизайнеров
Это надо было в одноклассниках такую группу создавать. Или там уже такое название занято?
> Работа для дизайнера — телеграмм-канал
Информативно )))
> Работа в ИТ — телеграмм-канал c it вакансиями
Линкедин? ХХРУ? Да пошли они гахуй, есть же чатик в телеге!
> Легкие мемi на английском — мой телеграмм-канал с легкими мемами на английском для изучения языка
Там, наверное, самые, блин, убогие на свете «мемi», которые только может увидеть человек в своей жизни.
Ты типа реально думаешь, что он женского рода?
лол
Полина это gost. Молодой, но очень умный парень из Волгограда. Хорошо знает стандарт крестов, разбирается также в прыщевой и сетевой безопасности
значит, русь ня
Когда вы госта то успели сдеанонить?
Думаешь, Гост это ПХП программистка из Дагестана?
"Вообще Дагестан довольно айтишный регион"
https://habr.com/ru/company/redhatrussia/blog/566830/
Какой пирдолинг ))
Оказывается, при чтении пароля с терминала нужно перевести его в raw режим, чтобы пароль не был виден! Про это написали целую статью!
https://habr.com/ru/company/macloud/blog/566748/
Стивенс ставит лайк
https://phptherightway.com/#mysql_extension
И еще паттерн делегат в ``Database``
Запретили <? ?> (asp-style tags, short tags), а <?= ?> оставили, они в куче шоблонов используются.
https://www.php.net/manual/ru/language.basic-syntax.phptags.php
Кстати, вот тебе свежая статья 2020-го года про современную многообещаующую технологию
https://habr.com/ru/post/524288/
Но её заминусовали (╥﹏╥).
База данных — это место для хранения данных
Если приложение маленькое, то все данные можно хранить в памяти. Но учтите, что это память на вашем компьютере, вашем телефоне. И чем больше данных туда пихать, тем медленнее будет работать программа.
https://habr.com/ru/post/555760/
Подделка от нетфликс!
https://www.rlsnet.ru/tn_index_id_7734.htm
Так уж вышло, что приличное количество классных людей, которых я знаю, — из Владивостока. А ещё так получилось, что мой любимый стрит-фуд — главный на улицах Владивостока. Да и вообще, в Приморье живописные бухты, в которые можно сделать приятные барахты.
Мы с ребятами сделали тест с уникальным гидом в конце и разыгрываем авиабилеты во Владивосток. Открой для себя новый Владивосток, как говорится в брошюрах.
Родной Владивосток!
Здесь Русь берет начало,
А ты ее исток!
Своей неколебимостью
На краешке земли
Хранишь ты Русь от ворогов,
Как предки берегли.
И моря синь играючи,
Ласкает бережок.
О, порт с глазами синими,
Родной Владивосток!
Стыли руки на морозе у нее.
В полынье вода - не чай,
Припевала невзначай,
Чуть слетала песня та,
Паром таяла у рта.
На Онеге белый снег да белый лед.
Над Онегой белый дым из труб идет.
Дым идет белей белья
Изо всякого жилья,
Изо всякой мастерской -
Прямо в небо день-деньской.
Город Каргополь, он, город невелик!
А забыть его мне сердце не велит:
Может, он и мал слегка,
Да Онега велика,
Да немерены леса,
Да без краю небеса.
Так и вижу - на Онеге белый лед,
Так и слышу - каргополочка поет.
Пусть мороз лютует зло.
Все равно у нас тепло.
Грел бы душу лад да труд,
Шел бы дым из наших труб.
Мне кажется, у меня не будет шанса выжить.
Если дать ему графпланшетку, он будет някать всю жизнь.
Отличный повод поучиться рисовать, благо отвлекать ничего не будет.
Ха. Мысли уровня "вот выйду на пенсию - отдохну".
Явно же придётся строить колонию, охотиться на марсианских тушканов, топить печку. И эксперименты проводить ещё начиная со времени полёта.
нахуя вы это читаете?
с чего ты взял? только из-за сатирки про вьетнам?
Я понимаю, кстати, почему он тебе не нравится. Там многовасто левой хуиты. Но в 60-е это было в духе времени
у меня от этого берроуз
> понимаю, почему он тебе
а вот тут обидно было
Как для меня выглядит путешествие во Владивосток: богатый масквич выиграл билет, прошел анальное зондирование и досмотр урками в аэропорту (как в той песне про вертухая), прилетел в другой город, где живут такие же заёьпнные люди, ходят по говну и лужам, месят грязь. На небе ни облачка: оно просто монотонно серое, старые вороны и чайки клюют трупы крыс, которые сдохли от голода. Пенсионерки еле тащятся на почту России за пенсией, чтобы не сдохнуть с голода. Красноглазые студенты тоже пытаются не сдохнуть с голода: кто-то работает весь день на ногах заёбаннвй разносит листовки и пиццы блядские, кто-то пиздит богатых и отбирает у них вещи. На улицах пробки сплошные, в автобусах и метро давка, масквич едет полюбоваться на бухту, где бухие мужэки и их семейства бухают, едят шашлыки, орут и матерятся, курят, пердят, ссут в море, а срут за гаражами в 10 метрах от живописной бухты. На пляже битое стекло, мусор, говно, вода ледяная, недалеко кто-то моет машину в море.
И вот маасквич стоит и ЛЮБУЕТСЯ красотами, пока вокруг него почти каждый человек думает о том, как бы ухватить пожрать, кого бы выебать в самые неожиданные отверстия, кому бы свернуть шею, где бы посрать/поссать и т.д. ...
Организация подготовила свой доклад, основываясь на официальных данных Росстата.
Как сказано в отчете, 400 тысяч россиян эксперты относятся к группе "экстремальной уязвимости". Этим людям приходится пропускать приемы пищи, ограничивать количество еды или не есть вообще из-за отсутствия денег или других ресурсов.
8,8 миллионов россиян эксперты поместили в группу "умеренной уязвимости". То есть им приходится экономить и либо есть меньше, либо покупать низкокачественные продукты.
А в людные засранные места ездят не путешественники, а дуристы.
На луну? Хотя и там уже натоптали и мусора накидали.
А мусор от него есть.
Зато там есть волки, которые хотят отгрызть кому-нибудь лицо, дикие собаки, которые как волки, насекомые, которые откладывают личинки под кожу и в глаза, рои ос-убийц, пауки, яд которых вызывает некроз и смерть за 30 минут, анальные змеи, мозговые паразиты, разъярённые казуары, беглые зеки, голодные жители-канибалы окрестных заброшенных деревень, ядовитые споры мозговых грибков... И это ещё далеко не всё, а если рядом есть вода, то там ещё больше всякой живности.
https://www.youtube.com/watch?v=iH8wIGWbiNs
Ну так что, знаешь её?
кстати, багор: "Пражскую" строили чехи и использовали звукопоглощающие технологии, про которые в совке почему-то не думали. а ещё багор в том, что в Праге была станция "Московская", которую строили советские инженеры, её переименовали после падения занавеса
теперь после каждого бурления говн вокруг Чехии можно услышать предложения переименовать и "Пражскую", но пока никак
https://youtu.be/fB2b-lTjCQA
Пользователь с таким логином уже существует.
AvokadaGovno
С помощью бранчей я решил задачу создания окружения на AWS в один хрюк, и получилось прикольно
--а у меня кутикулы
какой стерторизм
- Ну же, не плачь. Где твой папа?
- Я его скууушал...
- А мама где?
- Я её тоооже скууушал...
- Ну и кто же ты после этого?
- Сиротиииинушка...
Анекдот_про_нового_руссково_и_ляляки
- Передайте, пожалуйста, талончик.
- У меня руки заняты, вот грузин стоит, он передаст.
- Слюшай, ти сам передаст, папа твой - передаст, и дэти твои
вырастут передастами!
-- Мой билетик.
-- Ну ваш билетик?
-- Ну мой билетик.
-- Ну покажите его
-- Ну купите себе, и смотрите
-- Вы что, больной?
-- А вы что, доктор?
-- Я кондуктор
-- А я сантехник
На трамвай билета нет.
– Все с яйцами.
– Я с куриными!
– Пропустите инвалида.
Причем все три части взаимозаменяемы
смысл в том, что жена дала ему инжир вместо яблок, когда он собирался идти к какому-то вельможе, а тому что-то не понравилось и он начал бросать в Ходжу принесённые фрукты, ну а инжир мягкий и ушибов не оставляет
вот Насреддин и бегал и орал "спасибо тебе жена"
шутки за 40 девственниц
Спи спокойно, Петя(((
Упоминание встретилось мне более 30 лет назад, в журнале "Наука и Жизнь".
https://govnokod.ru/27539
https://govnokod.xyz/_27539/