Comments 242
Если без эмоций — так программировали в 2001-2005 годах на php 4 — я не знаю в силу каких обстоятельств вас заставляют делать то же самое, когда за окном виден composer, mvc, psr-*, symfony, yii2, laravel и другие прекрасные вещи… Попробуйте добавить ваш проект в scrutinizer или другой CI и посмотрите на качество кода.
Название "мрак" описывает само себя )
Реально на долго застрял в районе функцинальщины между паскалем и вижуалбейсиком.
Вроде и Си был не пустым звуком, и теоретически классы, объекты, наследование — слышал. Но дошло лет через пять только.
Велосипедов настроил… И да, все вокруг казались идиотами)
Зато сейчас пишу с оглядкой на меня тогдашнего.
Реально на долго застрял в районе функцинальщины между паскалем и вижуалбейсиком.
Это как? Процедурщины тогда уж.
На улице ведь 2016, я правильно ощущаю время?
https://github.com/mpak2/mpak.su/commits/master/modules/chat/all.php
Экспериментов было много. Не все прижились, но следы от них все еще остаются.
Я просто к чему это: если пишете код не модно, то не стоит публиковать это на всеобщее обозрение, иначе здесь вы не найдёте поддержки, а лишь отрицательные эмоции от критики (должен признать — по делу).
Но в своё оправдание могу сказать что и php 5 с переработанными функциями ООП только вышла…
Но никогда не поздно сделать это сейчас.
Как и любой другой технарь у меня проблема с попыткой что-то описать.
Пожалуйста, не примазывайтесь. Что-то даже с этим предложением у вас не так.
И что, оно того стоило? )
Как и любой другой технарь у меня проблема с попыткой что-то описатьНу вы там это, давайте без всякого, а то чот не оч и всё такое, да. Вот.
Warning: array_key_exists() expects parameter 2 to be array, boolean given in /srv/www/vhosts/mpak.cms/include/mpfunc.php on line 1497
Перенести из одной бд в другую дело 15 минут. Речь только о целесообразности каждого решения для конкретной ситуации.
На большей части сайтов данные и занимают пару мегабайт. Вы же с экскаватором за червями не едите?
Есть большой пласт задач где этого достаточно. Так что Вы не правы. Всё остальное тут да, привет из 90-х. С этим не поспоришь.
Ситуация в которой вы можете просто закинуть файлы на хостинг и они будут работать не задумываясь о версии бд, хосте конфигах.
Кстати никто не заметил а тем не менее эта система совсем без конфигов. Точнее они там есть, но для данной бд достаточно дефолтного конфига который будет искать бд прямо в корне сайта.
https://github.com/mpak2/mpak.su/blob/master/include/config.php
Он лежит прямо в index.phar и заменить его мы можем положив по тому же пути файл в фс сайта.
Я не поленился, клонировал репозиторий, открыл его в IDE. Надеялся найти там что-то интересное, но… нет, увольте. Когда открываешь файл, длиной в 1600+ строк, и видишь там столько много буков, что они закрывают 95% экрана, желание копаться дальше испаряется.

Разворачивание сайт при этом свелось к копированию одного файла в директорию проекта.
Это вы сейчас серьёзно? Мой бог но svn co и git clone знают все.
Sqllite это для 2 мб и 100 страниц текста, дальше будут тупняки.
Знаете как я вижу таких людей которые предлагают вот такие решения? Вы инфекция. Вы занимаетесь не своим делом. Все что вы делаете это тратите чужое время и деньги, внедряя тонны вот такого вот говна под видом отличной конфеты клиентам, которые не очень понимают в технологиях.
Горите в аду
контроля версий
Ну и вообще — ваш способ «простого» обновления сайта ничем не отличается от набора команды git pull или composer update. Ну или на худой конец можно и всю CMS в архив запаковать — сложность обновления то будет та же самая.
Только вот в итоге вы через какое-то время наткнетесь на другие грабли, которые не дадут вам так просто обновлять CMS с помощью копирования phar архика, поверьте.
А если серьезно, то хоть народ и немножко перегибает с гитом и т.п., и действительно в мире где самым популярным CMS является вордпресс странно слышать что «гит знают все», но вы должны их понять — то КАК вы пишете это сравнимо с тем чтобы кучер из 18-ого века учил бы пилота Формулы-1 правильной езде. НА ЛОШОДЯХ НЕ ЕЗДЯТ. ТАК НЕ ПИШУТ. Спортивные клубы и ипподромы в другой стороне, как и хаб «ненормальное программирование». Это пхп, это бреинфак. Почитайте азы. DRY, SOLID, почитайте банду четырех… посмотрите что в 21-веке в тренде. Лучше всего найдите себе наставника. И будет вам счастье. Просто напишите тут, мол «чуваки, кто научит писать, а то я чёт неграмотный малёха». Вас пошлют сначала грамматику исправить в тексте, а потом и в нужны тексты ткнут…
И с лицом вашего заказчика будет все в порядке, будет улыбка. Потому что ему вообще насрать, что у сайтом под капотом если работает.
Но что действительно от вас ожидает любой человек, который даёт вам деньги за что угодно? Ответственность.
Вот если вы продаёте это говно клиентам, я думаю если им захочется что то поменять и они найдут хорошего профессионала и посмотрит на то что было ДО… он скажет, прискорбно вам сообщать, но в прошлый раз под видом конфеты вам продали кусок говна, и теперь надо бы еще раз вложится и сделать хорошо. Что подумает о вас ваш клиент.… ЧТо вы очень плохая компания, а вам ответить будет нечего, вы просто скажете, да чел мы тебя поимели. извини бро, но это биз.
И я лично видел как за подобное натурально били в лицо.
Вас ведь в основном не за это макают. А за методы «чуть» больше 20 строк. За отстутствие стандарта кодирования как класса (черт, я сам этим грешу, в проекте уже за сотню классов а всё никак не вычищу ляпы с именованием классов и т.п., но у вас каша которая коробит даже меня.
Отсутствие внятной структуры, стиля, мешанина экспериментов, «ой, это у меня от прошлого десятилетия осталось», отстутствие тестов… да вообще отсутствие всего без чего выкладывать код стыдно. Черт, у меня намного лучше код, но я тупо стесняюсь его на публику выкладывать. А тут такая непосредственность)
А потом еще и приправленная «ой, это демка, я ее сто лет не обновлял, это ерунда, пусть глючит», и «та пофиг на грамматические ошибки и опечатки в тексте, мне его вычитывать лень, пусть лучше сотня человек покоробится читая это, чем мне править..» и после этого вы такой «ой, меня за sqlite3 ругают»… да может половина бы и поругала за него, может и согласилась бы что ваше решение имеет право на жизнь, если бы это было основным спорным моментом… Но тут ВСЁ ужасно :)
95% обратной связи — полная лажа. Но из за оставшихся 5% стоит ее читать.
И есть еще одна 95 процентов людей идиоты. На данном ресурсе их меньше, но все равно процент достаточно велик.
Не удивляюсь что не все понимают того о чем я написал.
Мне нужны единомышленники. Я знаю что я делаю и для чего.
Во первых, говнокод — не методика, не цель и не решение. Жизненная позиция — возможно.
Людям с такими мыслями в голове, какие вы тут озвучиваете — просто нельзя давать писать код. От ваших действий страдают люди, понимаете?
Мне недавно не повезло столкнуться с чем-то похожим на то, что вы тут представили. И совсем небольшие изменения вылились для заказчика большим счётом, а для меня нервами и временем ковыряния в г**. И так будет с каждым последующим изменением на том сайте.
Не рассказывайте ничего про перфекционизм. Вам до него далеко. И вам никто ничего не говорит про «красоту» и «синтаксис». Речь про то, что если сайт «запускается» — это ещё не значит, что вы выполнили свою задачу, всё хорошо и всё остальное — лишнее.
Вам действительно либо нужен наставник, либо я лично хотел бы вас попросить не делать работу для клиентов.
Я думаю сообщество мне простило бы то что у меня имена классов начинаются с маленькой буквы а открывающая скобка методов не с новой строки. Если бы общая идея показалась бы интересной, то думаю что простили бы и то, что в некоторых местах (в некоторых!) у меня методы доходят вплоть до 30 строк.
Но я не буду выкладывать такое просто потому что например у меня нет описаний половины методов, а это уже непростительно. И описывая и подправляя какие-то другие вещи — заодно исправлю и меньшие ляпы.
Ваш код нечитаем. Работать с ним невозможно. Нет, вру. Можно. Вчера партнеру объяснял почему мы отказываемся от заказов требующих опенкарт, хотя я и некоторые другие разрабы в команде его отлично знаем. Мой ответ был простой — задача которая на нормальном коде занимает 15 минут, там займет несколько часов. Если я сделаю это за 15 минут, то клиенту это будет стоить как 15 минут моего времени. Исполнитель под опенкарт сделает ту же задачу скажем за 5 часов. При цене часа в 5 раз ниже моего это будет в 4 раза дороже чем мои 15 минут.
НО дело даже не в этом.
В вашем коде наверняка есть куча ошибок. Как собственно и в моем и в любом другом.
Но я могу дать почитать мой код коллегам. А вы не можете.
Если мы оба выложим его в опенсорс, то мой код будут читать и присылать мне пулреквесты, а ваш не будут читать. Только использовать. Нет будут. Но только новички вроде вас.
Эта проблема кумулятивно ухудшает код с каждым днем.
Один простой вопрос: кто, кроме вас, сможет (и, что важно, захочет) это поддерживать?
Это работает уже долгие годы без сбоев. Тут нет слабых мест.
[...]
А код потихоньку переписывается по мере того как в нем начинает что то сбоить
Я считаю, это просто прекрасно.
«Зоопарк» технологий, как вы говорите, разводят не для того, чтобы систему намеренно усложнить, а как раз таки наоборот. Каждая технология в миллионном проекте предназначена для решения своей задачи
И если кто-то бездумно ввел какую-то технологию в проект необоснованно, а потом не может с этой технологией справиться, то заказчик явно нанял неадекватного подрядчика, и ему нужен аудитор, который быстро такого исполнителя забракует
Сопровождение и администрирование вносит огромные накладные расходы тем временем в подавляющем большенстве проектов функционал баз данных остается не востребованным. Как привлекательно совместить простоту работы с файлами, гибкость и функционал реляционных баз данных. Как хочется свести создание резервной копии базы данных к простому копированию одного единственного файла.
Не хотите самостоятельно администрировать БД, купите разделяемый хостинг — стоит-то копейки, как одна булочка в месяц.
А вообще вы ведь не настраиваете для своего сайта новую среду выполнения каждый день. Резервирование всех популярных серверов реляционных баз данных сегодня выполняется парой строчек в кроне.
Причина простая: каждый раз, когда клиент обращается к вашему сайту, сервер приложений (если таковой имеется) должен отправить запрос к БД и получить из неё данные. Клиент-серверные СУБД справляются с этой задачей на ура, производя различные оптимизации и храня выбранные недавно данные (блоки, страницы) в памяти (кэш буферов).
SQLite при каждом запросе к БД будет запускать новый процесс и читать одни и те же данные в память, — крайне накладно с точки зрения расходования ресурсов ЦП, ОЗУ, дисковой подсистемы — и со временем (по мере роста объёма данных в БД) вам потребуется либо вертикальное масштабирование произвести (покупка мощного ЦП, SSD и т. д.), влекущее дополнительные траты, либо задействовать кэширование (вроде memcached), что сильно усложнит приложение.
Ваши конкуренты тем временем будут использовать MySQL или PostgreSQL и в ус не дуть длительное время, пока нагрузка действительно не станет большой (миллионы запросов в сутки).
При том что я тут один из немногих кто защищает вашу идею с sqlite3 — я даже не возьмусь объяснять всю прелесть вашей мысли)
Хотя чего там — шаредхостинг, сотня юзеров онлайн…
Whether or not the backup process is restarted as a result of writes to the source database mid-backup, the user can be sure that when the backup operation is completed the backup database contains a consistent and up-to-date snapshot of the original. However:
- Writes to an in-memory source database, or writes to a file-based source database by an external process or thread using a database connection other than pDb are significantly more expensive than writes made to a file-based source database using pDb (as the entire backup operation must be restarted in the former two cases).
- If the backup process is restarted frequently enough it may never run to completion and the backupDb() function may never return.
Т. е. чтобы не допустить ситуации, когда резервное копирование стартует снова и снова (потому что внешний процесс что-то захотел записать в БД) или вовсе не может завершиться, наше приложение не должно использовать больше одного соединения с базой SQLite. Т. о. если клиентов много, операция резервного копирования может заметно ухудшить производительность сайта или создать потенциальную угрозу выполнения атаки отказа в обслуживании даже при небольшом количестве одновременных запросов.
В других СУБД используется совершенно иная модель резервного копирования, в которой применяется журнал воспроизведения (журнал транзакций) — БД всегда доступна для записи и чтения, и выполнять резервное копирование можно в любое время без прерывания процесса.
А ещё в SQLite, похоже, нельзя делать инкрементальное резервное копирование — копировать только изменения, а не базу данных целиком.
Кроме того было бы интересно узнать, как топикстартер реализовал бы защиту данных, например. В MySQL, PostgreSQL, Oracle Database, SQL Server такое сделать несложно имеющимися средствами, и это работает надёжно.
Но мы ведь не раз сталкивались с ситуацией когда приходят ребята и применим новый подход упрощают старую устоявшуюся как казалось вещь и она работает лучше. Пример тот же git кто бы мог подумать до его появления что можно без сервера обойтись в системе контроля версий? Пришли сделали и у всех глаза открылись что сервер в SVN был слабым звеном оставшимся в качестве наследия от предыдущих поколений разработчиков. Или bitcoin который переворачивает финансы. Мир платежей делистя на две части до биткоина и после. Также и тут. Все ресурсы на которых работает sqlite те же что и у любой другой бд это оперативная память, файловая система и операционная система. В вот подходя у них разные. Так почему вы утверждаете что одно заведомо хуже другого? И кто сказал что в ближайшее время это не изменится?
Если подходить строго — любая другая бд использует у же самую файловую систему. Так в чем разница?
Вы серьезно не понимаете, в чем разница между in-process БД (особенно в контексте веб-сервера, поднимающего процесс на каждый запрос), и БД в собственном процессе?
Пример тот же git кто бы мог подумать до его появления что можно без сервера обойтись в системе контроля версий?
То-то вы github используете.
Так почему вы утверждаете что одно заведомо хуже другого?
Потому что есть очевидные вещи, связанные с (а) кэшированием и (б) управлением конкурентным доступом, которые будут явно отличаться у самостоятельной СУБД и СУБД-в-запросе.
В том что у sqlite реализовал другой подход он выкинул часть элементов которые посчитал ненужными
Нет, разница в том, что SQLite писался под одни задачи, а, к примеру, PostgreSQL под другие. Тобишь авторы этого решения не взяли PostgreSQL, удалили из него все лишнее и получили SQLite. Они изначально знали, какими функциями и органичениями должна обладать их СУБД, и разрабатывали в этом контексте.
А ведь я уже несколько раз вас носом мокнул в цифру 3. Мокну еще раз. Помимо sqlite3 есть еще sqlite4. Да ее стадия развития «немножко» другая. Но тем не менее. Не говорите за людей то чего они не говорили и не думали. Я серьезно считаю, что для бесплатных визиток и прочей мелочи — sqlite3 хороший выбор. Как и phar. Но вы несете такую ересь, что спорить с вашими оппонентами просто нет возможности)
Размещенный в общей директории файл путь которого совпадает с системный будет являтся более приоритеным чем лежащий в phar архиве. Для изменения работы любого файла достаточно разсестить его измененную копию по такому же пути, что и в phar архиве. При этом он начитает работать сразу же. Подобным образом на сайт добавляются собственные шаблоны, собственные модели и даже основной файл ядра для изменения достаточно разместить index.php в директории проекта рядом с index.phar
И что будет, если логика работы подменяемого файла изменится с выходом новой версии вашего движка?
Аналогичный вопрос: а что будет, если вам надо изменить структуру БД?
И да, что там у SQLite с параллельными обращениями? Например, если администратору захочется поменять десяток-другой страниц быстренько?
https://github.com/mpak2/mpak.su/blob/master/index.php#L118
Логика работы уже не меняется лет пять. Не представляю ситуации чтобы она поменялась в дальнейшем.
С sqlite небольшой опыт работы. Все решения до этого момента были с mysql но в sqlite вижу определенные перспективы, поэтому решил попробовать. Будет положительный или отрицательный опыт обязательно поделюсь.
Если надо менять структуру — она меняется. К примеру тут
А что в этот момент происходит с другими частями, которые используют эту таблицу?
Логика работы уже не меняется лет пять. Не представляю ситуации чтобы она поменялась в дальнейшем.
Это всего лишь значит, что вы пять лет никуда не развиваетесь. Тогда и обновляться незачем, чего уж.
С sqlite небольшой опыт работы.
А, то есть вы предлагаете решение, о работоспособности которого вы даже не знаете?
Блоки, Модули, Пользователи, Настройки и СЕО раздел отвечающий за адресацию. То, что используется независимо от сайта. Дальше список функционала расширяется индивидуально исходя их требований сайта.
Так как обновление идет одним файлов index.phar там уже идут все измененные части для новой структуры. А про пользовательские разделы система ничего не знает они расположены в файловой системе сайта и их система никогда не трогает.
Я не про пользовательские разделы, я про описанное вами изменение работы системы.
Создав новый модуль мы получаем новый раздел в админке со своей структурой бд, пространством имен и директорией со скриптами и шаблонами.
… и как этот модуль поддерживать? На него же теперь не распространяется описанная вами простота-обновления-одним-файлом.
А что будет, если модуль использует функциональность, которую вы решили поменять?
Нет никакой функциональности.
Тогда зачем нужна ваша система, если она не дает никакой функциональности?
Нет функциональности которую можно было бы поменять. А функциональность самой системы я ниже описал.
Права доступа к скриптам, проверка стурктуры кодов, подсказка путей до шаблонов, учет посетителей история, Функциональность системы очень большая.
http://phar.mpak.su/admin
Список сессий можно посмотреть тут http://phar.mpak.su/sess:admin/r:mp_sess
Проверим сразу на хабронагрузке.
на сайте Array посетителей
А говорите — нечему ломаться.
Это много говорит о качестве того, что вы выкладываете — и как вы это делаете.
Ну, я своими глазами видел, что не работает. И ниже еще один замечательный скриншот.
Как можно говорить, что ваш код работает в ветке, где описан пример того, как он не работает… И, я уверен, это только один из огромного множества примеров.
То, что вы пока не столкнулись с серьёзными проблемами в вашем коде, не значит, что их там нет. Это лишь значит, что у вас, возможно, неадекватное определение серьёзности (ну array посетителей… и ладно, ничего страшного, не упало же ничего). Ну а отсутствие тестов вообще не позволяет вам делать никаких категоричных заявлений. Выше вот показали, что статический анализ IDE нашёл в вашем коде минимум 5 серьёзных ошибок.
И всё это не имеет никакого отношения к «играм» «студентов» с «новыми технологиями»…
Блин, вот зачем я всё это писал, я же видел, как вы на комментарии реагируете…
joxi.ru/J2bNXagI4bXJ82
Не знаю, что я сделал, но как-то так. http://screencloud.net/v/oDo2
PS. Обновил скриншот.
Пустая форма тоже не показывает ошибок мол нет логина, неверный пароль и.тп.
<irony>Однажды я написал в комментах, что Битрикс — это самое плохое, что могло случиться с миром PHP. Как же я был тогда наивен...</irony>
А если по теме, пока я ещё жив и не покончил жизнь самоунынием, напишу очередную и довольно тривиальную мысль:
Ваше бы шило (в хорошем смысле), да в нужное русло. Такое количество кода, причём зачастую совершенно бессмысленного (который заменяется одной встроенной в php функцией — https://github.com/mpak2/mpak.su/blob/master/include/utf-8.inc или строчкой в composer.json https://github.com/mpak2/mpak.su/blob/master/modules/sess/class/geo.php). В чём причина переписывать это?
Велосипеды — это конечно хорошо, но делать их надо в разумных пределах.
И если посмотрите скрипт который собирает phar архив то данный кусок кода в него не входит
https://github.com/mpak2/mpak.su/blob/master/phar/mpak.php#L31
Если этот код входит в ваше решение — то вы за него отвечаете, вне зависимости от того, откуда вы его взяли. Если не входит — что он делает в репозитории?
О, то есть помимо решения из одного файла, которое вы предлагаете, есть еще и какая-то "портальная система" с "администраторской функцией"? И как это соотносится друг с другом?
Немного доработав получилось удачное решение для быстрой установки. Его описание и представил в статье.
Если авторизоваться администратором, система показывает файл из которого выводится верстка
< !-- Начало: phar:///srv/www/vhosts/phar.mpak.su/index.phar/modules/pages/index.tpl — >
Бла бла какой то код шаблона
< !-- Окончание: phar:///srv/www/vhosts/phar.mpak.su/index.phar/modules/pages/index.tpl — >
Сделал специально для вертальщика, так как возникали сложности с поиском файлов верстки
Laravel 5+:
// Provider. Подключаем код композера к любой вьюшке системы
$views->composer('*', PathShareComposer::class);
// PathShareComposer. Расшариваем переменную со значением пути
$view->with('path', $view->getPath());
// Template. Выводим
{{ $path }}
3 строчки кода для реализации функционала. А ещё проще посмотреть в дебагбаре, который ставится двумя строчками.
В asp.net MVC это делается тривиально.
Концепция состоит в следующем. На любой хостинг в директорию вы закидываете три файла и все.
Заходите на сайт и все работает. Это немного упрощает работу с установкой, резервным копированием и исправлением ошибки в случае поломки сайта. У вас нет конфигурационных файлов — они не нужны. Вы можете запустить сайт на хостинге в случае ограниченного количества mysql баз данных более того вам человеку разварачивающего сайт не требуется каких то специальных знаний о базах данных то, без чего сегодня вы не установите ни один сайт.
Сайт превращается в аналог ексель документа который открть можно на любом компьютере. Требования к его инфраструктуре сокращаются на порядок.
Вот прямо на любой хостинг?
А вообще, в современном мире, внезапно, можно вообще ничего не "закидывать на хостинг", а просто открыть эккаунт на одном из десятков сайтоконструкторов и получить сайт.
Нет конечно, на 99% хостингах оно просто не заработает, напрмер из-за <?
в качестве открывающего тега, вместо стандартного <?php
.
И действительно:
https://github.com/php/php-src/blob/master/php.ini-development#L202
https://github.com/php/php-src/blob/master/php.ini-production#L202
C другой стороны может вы и правы, кто знает этих хостеров. Я последний раз лет 5 назад встречал скрипты с шорт-тегами, которые запускал, так что в этом плане уверенно отстал от жизни.
Default Value: On
И на практике на дюжине хостингов ни разу такие скрипты проблем не доставляли.
Да, рекомендуют во избежание редких проблем запрещать, если оно реально не нужно.
Но на практике чаще бывает что клиент использует шорты чем проблемы от шортов. А шаредхостинги стандартно под массового клиента заточены.
Я реально пока с полгода назад на эту тему не подискутировал с SamDark где-то, был в твердом заблуждении что у этих шорт такая же судьба как у <?= и они уже везде стандартно есть и всё такое, и запрет на них анахронизм который приходится поддерживать ради совместимости со стандартами кодирования. СамДарк меня просвятил тогда что это не так, а благодаря Вашей ссылки я теперь знаю почему они так делают)
Default Value может быть какой угодно, но ниже написано что short_open_tag = Off
Практически пример: устанавливаете Debian stable, подключаете PHP… <? echo "Hi"; ?>
уже не работает. То есть, чтобы заработало нужно явно дописывать конфиг.
И при нарушении вложенности тегов в друг друга выводится сообщение
Показывает путь до файла с нарушенной версткой а также последний тег на котором найден сбой.
http://phar.mpak.su/pages:test Учитывается вложенность php тегов друг в друга
Людям нет никакого смысла иметь дома компьютер – Кен Олсон, президент, председатель и основатель Digital Equipment Corporation (DEC), в своей речи, данной на встрече общества World Future Society в 1977 году в Бостоне
И — в отношении некоторых людей — он полностью прав.
Время идет, а мнение некоторых людей на вещи не меняется. Может в этом проблема?
И книгу Head First Design Patterns.
Как показывает практика — большинство таких советов игнорируется в лоб, ну или отклоняется с аргументацией "Эти рекомендации никому не нужны, надо писать код, а не чистоту разводить", ну или "Мой код всё равно быстрее (<irony>на 0.00001</irony>
) вашего работает", ну и так далее. Будет чудом, если эта ссылка действительно поможет автору выбраться из "зоны его комфорта".
P.S. mpakep — по ссылке выше написаны действительно полезные вещи, крайне рекомендую всё же постараться ознакомиться. Если возникнут вопросы — с удовольствием готов ответить (и не только я) на Тостере.
P.P.S Nicklasos Ванга мод: https://habrahabr.ru/post/283166/#comment_8890198 Отговорки почти те же, что я и перечислил.
и это в ту же кучу
Вообще обожаю упоротые посты про самописные cms, особенно когда люди вместо того, чтоб взять и установить большую часть через composer долго, упорно и коряво делают свою реализацию, при этом забивая болт на PSR и юнит-тесты, смешивая запросы к базе или обертки над этим с логикой, в особо запущенных случаях не используют неймспейсы, и свято веруют, что такой подход вознаградит хорошей скоростью, быстротой разработки и тем, что запустить можно будет везде.
Все реально
А ведь все верно. И работает быстро, и запускается везде. И кеш нет необходимости использовать так как и без него все работает отлично и чистить не приходится после каждого изменнеия. Этот тот мир про который большая часть людей уже забыла. Обычной практикой стало под один сайт с одной цмс выделять отдельный сервер потому что иначе оно не работает, слишком много сжирают накладные расходы.
Наш разговор похож на беседу сектантов из разных сект.
— Ты должен прочитать первый том нашей книги тогда тебе откроется пусть праведный.
— Выбери себе наставника и пусть он тебе расскажет про наших богов.
— Больше посещай мероприятия где наши идеологи расскажут тебе о том кому надо покланаться.
Считайте меня старовером. Я поклоняюсь ветру и солнцу, деревьям и огню. Всему тому что вижу в своей повседневной жизни и что позволяет мне охотится и добывать себе еду. Многие сегодняшние «модные практики» уйдут как уже было не один десяток раз. А воздух с солнцем останется.
Между тест хаброэффектом прошел вполне себе удачно. За сутки то, что по утверждению многих тут даже работать не должно было посетил 601 посетитель
авторизованных: 73 — линукса, 146 — виднузов, 23 — мобьльных устройства и 1 — неопределен.
неавторизованных: 38 — линуксов, 129 — виндузов, 42 — мобильных и 1 — неопределен.
боты: 3 — Googlebot-Image/1.0, 7 — Mail.RU_Bot/2.0, 10 — Googlebot/2.1
http://phar.mpak.su/pages:img/null/screen.png
Ваша cms это ужасный и недокументированный код, который кое как работает.
600 человек в сутки))))))
И работает быстро, и запускается везде.
Вот только вы не можете ответить на банальные вопросы "действительно ли везде работает", "насколько быстро быстро" и "сколько стоит это поддерживать".
Между тест хаброэффектом прошел вполне себе удачно. За сутки то, что по утверждению многих тут даже работать не должно было посетил 601 посетитель
Вы, кажется, не знаете, что такое хабраэффект.
(del)
То что при объемах меньше 10к в сутки смотрят только на колво трафика в тарифе, и ни о какой производительности речь не идет — это понятно. Самое веселое что человек ВСЕРЬЕЗ считает что оно «нагрузку» ВЫДЕРЖАЛО.
Для меня "безглючность" включена в "сколько стоит поддерживать".
В том что оно запустилось и работает вы уже не сомневаетесь?
Define "работает".
Эпл в качестве MVP использует металические/пластиковые болванки. Они тоже «работают».
Но если я не смог авторизоваться и при этом не получил сообщений об ошибках, а люди увидели кучу ошибок пхп в браузере, то это не более чем пруф оф концепт. И да, lair лучше я возьму пауерпоинт чем такое :)
Для сравнения: top.mail.ru/visits?id=152591 — проект «недвижимость» у мейлрушечки, написан на PHP с использование фрейворка (не собственного, а «нормального»), 100--200 тысяч визитов в сутки, а хитов от полумиллиона. И это не самый нагруженный сайт.
(з.ы. я не работаю в этом проекте)
Попробуйте, всё-таки, потестировать ab'шкой? Если ваш сайт выдержит хотя бы 1050 хитов за полчаса (50 тысяч в сутки) с конкурентностью не менее пяти, то признаю, что ваше решение годное.
http://govnokod.ru/19969
http://govnokod.ru/19971
sqlite> SELECT * FROM mp_pages_cat
1|1||Категория
2|2||
3|1|fdgsfgdfg|fdgfgsdfgs
6|1|это тег|тест
11|1|ghgh|ghghgh
15|2|Hey|Hey24|1|sdf|sdf
29|||
Хотел бы спросить сколько людей из вас понимают что в нем делается. Реально интересно знать сколько таких. Напишите свои версии.
Походу тут нужно использовать «модную технологию» для расшифровки — гадание на картах Карно.
Иначе эту обфускацию не прочитать.
А вы правда не понимаете, что то, что по коду нельзя понять, что в нем делается — это недостаток кода?
Я вот не понимаю, что делается в вашем коде. Нет, если мне понадобится, я разберусь, конечно — только зачем?
То, что Вы, автор, разбираетесь в том, что там написано, не говорит о Вас, как о профессионале своего дела — просто Вы потратили N часов на его разработку и M часов — на поддежрку. А новый человек в этом даже не захочет разбираться.
Чтобы прочитать и понять Ваш код мне пришлось сделать его более линейным. Из того, что я понял за 30 минут, могу сказать, что в Вашем коде делаются очень разные вещи). Я тоже любитель писать свои велосипеды. Примерно так я начинал писать свои первые проекты. Но у меня небыло каких-то особых убеждений и я часто все переписывал с нуля поэтому с каждым разом код становился все проще и проще. У Вас, видимо, это первый крупный проект поэтому Вы им так гордитесь. Я когда-то в школе года 2 писал «убийцу WinAmp'а». Мне тогда казалось это гениальным. Что не функция то — шедевр))
Выход тут тоже не уместен так как все работа скрипта должна дойти до конца. То, что вы сделали это не то что требовалось
На каждом увовне не зря стоит иф. Он проверяет условия для дальнейшей работы и при невыполнении выдает ошибку.
Сейчас вы не сделали его понятнее. Вы его испортили. Он не будет работать. Попробуете еще раз?
То, что вы сделали это не то что требовалось
О, у нас началось обсуждение того, что "требовалось". А где требования? Или хотя бы тесты, по которым можно определить требования?
О каком конце идет речь? В Вашем коде здесь http://govnokod.ru/19971 после отработки крайнего блока else ничего нет.
Я же делал это не для того чтобы Вам угодить, а чтобы попытаться разобраться. Спортивный интерес.
Пробовать дальше не интересно :)
Так кто находится в зоне комфорта? Кому надо выбраться из нее и попробовать разобраться в том, что не соответствует его шаблонам?
Ведь проще всего крикнуть что говно то, в чем я не разобрался. Если написано не по книжке которую я прочитал последней или используя другой подход не как тот к которому привык. Зачем мне разбираться? Я и без этого знаю что это все говнокод!
Судя по комментариям у людей проблема восприятия того, где больше трех ифов. С такими темпами мы придем к проблеме восприятия того, где больше двадцати строк. Вы действительно правы. Поддерживать у вас это не получится. Для этого надо приложить усилия и разобраться в том, что здесь написано. А это судя по всему неподъемная для некоторых задача.
Задумайтесь. Думающие люди в обществе пяти идиотов становятся изгоями. Идиоты просто лайкать будут только то, до чего дотягивается их умишко. Все что им не под силу будут отвергать как слишком сложное. Я не стану тратить N часов чтобы разобраться в этом. Патерн — оторвать бумажку, подтереться. Рулон закончился — разрыв патерна. Это к вопросу о 95 процентов населения. Извините что редко пишу. Нет возможности это делать чаще. Похоже для среднестатистического населения то, о чем говорю также трудно для восприятия как и код в котором вы так и не смогли разобраться.
Разобраться можно, только это рутина и требует довольно много времени. Другой вопрос — зачем так писать, чтобы в этом, для того, чтобы понять — требуется тратить столько времени? ;)
Для примера:
// Вместо
if ($a && $b === $c && $d !== $e || $f !== $a && $b !== $g) {
// ...
}
// Писать
$isValidSome = $a && $b === $c && $d !== $e;
$isValidAny = $f !== $a && $b !== $g;
if ($isValidSome || $isValidAny) {
// ...
}
Неужели вот такую "модную штуку" — сложнее написать ради того, чтобы сторонний читатель сразу понял что обозначают эти условия?
P.S. Избавление от переносов строк (некоторых, мы же не хотим лишать полностью код читаемости?) и пробелов во всём вашем коде — добавит элитарности, да такой, что в нём начнут разбираться и "выходить из зоны комфорта" ещё меньше людей. Как же вы раньше до этого не додумались? Смотрите как здорово! https://gist.github.com/SerafimArts/2bc70b28c086552057d1831ffb47bff6
Если вы не поняли что написано в файле "после", то у вас "проблемы восприятия кода, где больше трёх ифов (с)"
час моего времени стоит 25$.
я присылаю свой код знакомому с ценой часа в 50$ с просьбой оценить.
Он посмотрел код за 15 минут, подсказал ошибку и посоветовал оптимизацию.
Ему не сложно, ведь вчера я ему подсказал репозиторий morozovsk чем сэкономил ему пару дней которые он бы писал сервер сам. Я сэкономило время ему потому, что можно за 15 минут вдумчиво изучить документацию и еще за 15 минут изучить код. И принять решение что в случае чего его можно поддерживать самому. После чего мой знакомый форкнул репу, и «завтра» сделает пару пулреквестов с теми фичами которых ему не хватало.
«Послезавтра» мне тоже понадобится вебосет-сервер, тоже с теми фичами что сейчас понадобились моему знакомому, и я получу уже готовый код.
Все в выигрыше. Это и есть современная мода которая вам так не нравится.
А что предлагаете вы? Вы предлагаете потратить 5-10 часов на чтение кода который делает тоже самое что делал мой код который можно прочитать за 15 минут. При этом заранее известно что найденные после этого ошибки исправляться не будут, потому что ни одной названной вам здесь ошибки вы даже не признали, не то чтобы исправить. Вопрос — зачем?
Нет, некоторые тут читают ваш говнокод из спортивного интереса. Некоторые чтобы показать другим, поржать. Другие чтобы тыкать носом в это Г. учеников, чтобы те поняли почему их заставляют писать грамотно…
Черт, это же как нужно нас неуважать, чтобы самому лениться разбивать код по 20 строк и до трех уровней вложенности (большего от вас и не ждут), а ожидать что КАЖДЫЙ кто прочитал это — будет расшифровывать вашу лапшу…
То есть небольшое отклонение от шаблонов и никто не способен понять что здесь написано.
Не "не способен", а "не хочет тратить время".
Так кто находится в зоне комфорта?
Ну да, я нахожусь в зоне комфорта. И, что характерно, горжусь и доволен тем фактом, что я работаю в зоне комфорта. А что, должно быть иначе?
Кому надо выбраться из нее и попробовать разобраться в том, что не соответствует его шаблонам?
Да в том-то и дело, что не надо. Кому было настолько интересно — те пошли, посидели и разобрались, но никому это не надо — потому что, к счастью, практически никому не надо по работе иметь дело с таким кодом.
Зачем мне разбираться?
Именно. Зачем?
Судя по комментариям у людей проблема восприятия того, где больше трех ифов.
Ну да, объем воображаемого стека в голове у людей ограничен. Для вас это новость? У вас он тоже ограничен.
Вы не понимаете простой вещи: любой хороший программист может написать код, подобный вашему. Не будет, потому что его учили (или он сам научился) так не делать, но может. Но вот можете ли вы написать хорошо структурированный и читаемый (в терминах МакКоннела) код?
вещи: любой хороший программист может написать код, подобный вашему
Я видимо плохой программист. Я не могу писать такой влажный (wet) и нечитаемый код. Хотя гены говнокода во мне живут прочно, но мне не хватит усидчивости на ТАКОЕ количество абсолютно бесполезной работы.
Вот реально не могу. Сейчас сижу и прокрастинирую тут, когда нужно заставить себя и писать подобный говнокод чтобы закончить очередной проект с адским легаси, и в очередной раз поклястся себе что «да больше никогда, и ни за какие деньги я таких заказов не возьму»… Ну да ладно, побольше воздуха в легкие, начинаю погружение в фекалии) Ушел работать…
Зачем мне разбираться? Я и без этого знаю что это все говнокод!
Вы не поняли. Вам предъявили претензию, что ваш код — говнокод по форме, а не по содержанию. Про суть никто ничего не говорил, потому что до нее не добраться.
Как мы выяснили выше никто даже не пытался понять что в нем делается.
Каких то других требований тоже не прозвучало.
Для того чтобы назвать любой код говнокодом достаточно чтобы он был больше десяти строк. Это слишком сложно и разбираться что в нем происходит просто не обязательно. 95% людей не могут разобраться в коде и это достаточный повод для плевка в его сторону. Для себя я сделал вывод. Никто так и не смог даже предположить что там делается. А единственный кто попытался переделать не учел его функциональны особенности. Остальные считают выше своего достоинства разбираться в этом (или не могут так как относятся к 95% населения) скорее последнее.
Единственная претензия к коду в том, что у него больше трех иф подряд. Верно?
Нет, неверно.
Представьте — вы доказываете 223 комента что код говно и все это время один человек в него заглянул.
Это достижение. 223 коммента умничать не зная даже о чем говоришь.
Лайр, держитесь до последнего. Напишите еще пятьдесят комментов что мне нужно изменить в себе чтобы вы соизволили разобраться в предмете разговора. Извините, что я вывожу вас из зоны комфорта, заставляю разбираться в этом жутко большом количестве условий.
Главное не пытайтесь понять что он делает. Вам же это не нужно. Вы и без этого легко отличаете говнокод от кашерного.
Ну да, если по коду нельзя понять, что он делает — значит, скорее всего, это говнокод. Если код использует присвоения внутри if
(и вообще присвоения внутри выражений) — то это тоже, скорее всего, говнокод. Если код использует глобальные переменные без необходимости — это говнокод. Можно продолжать, в принципе.
Представьте — вы доказываете 223 комента что код говно и все это время один человек в него заглянул.
Прекрасно, а теперь докажите это утверждение.
Если код использует присвоения внутри if (и вообще присвоения внутри выражений) — то это тоже, скорее всего, говнокод.
Очень часто используется присвоения внутри выражений. Например:
while ($file = readdir($dir));
while ($row = $pdo->fetch());
Но как и везде — главное не злоупотреблять этим.
Все мы регулярно плодим технический долг, и я не грамнаци, но я за то, чтобы человек четко понимал что это — технический долг. Не топикстартер конечно, это невозможно)
while ($row = $pdo->fetch()) {
doSomething($row)
}
Допустим, нужно обработать все записи в таблице, и известно, что записей несколько миллионов.
PDOStatement implements Traversable
Правда там акцентируют внимание на другой ошибке, и просят не забывать делать так:
while (false !== ($entry = readdir($handle)))
Но я всё равно считаю что это попахивает, поэтому завернул бы это в какой-то врапер и спрятал с глаз долой. А во врапере так бы и писал да. Выкручивать наизнанку было бы лень.
Ну вот потому я и написал "скорее всего". Впрочем, если этого можно избежать, я препочту избежать.
Можете привести пример того, как вписать в вашу систему вход через разные соцсети? Или bbcode? Вы говорите, что ваш код решает задачу, но как видно из скрина, что я присылал раньше, он и с ограниченными задачами не справляется.
Напишите еще пятьдесят комментов что мне нужно изменить в себе
Эффект Даннинга — Крюгера когда-нибудь пройдет.
Я смотрю на очередной ваш комментарий… когда вылажу из выгребной ямы кода написанного таким же талантом как ты. Вдохнуть свежего воздуха. Я читаю то что здесь написано… вдыхаю, выдыхаю. А потом все проклятия и маты которые звучат в моей голове, и уже были переправлены с автора говношедевра с которым я работаю на вас — мысленно провожу рефакторинг текста. Чтобы без мата. Без оскорблений.
Без эпитетов. И отправляю.
Там то я даже переписать почеловечески то что правлю не могу. VQMOD!
А еще я делаю в перерывах то, что вам и не снилось — я делаю рефакторинг. Сокращаю размеры уже написанных и работающих методов. Исправляю и дополняю описания. Перемещаю куски кода в более подходящие классы. Это доставляет почти физическое удовольствие после копания в дерьме на подобии вашего кода…
Как мы выяснили выше никто даже не пытался понять что в нем делается
Вы хотите чтоб у нас глаза вытекли? )
Никто так и не смог даже предположить что там делается
Идеи, заложенные в вашем коде слишком сложны для нас, простых сметрых. Я долго пытался постичь смысл этого кода http://govnokod.ru/19971 но мой друг, сказал что он похож на кулак ( С этими словами я решил закончить изучение, так как живот уже сводили судороги.
Единственная претензия к коду в том, что у него больше трех иф подряд. Верно?
Нет. Код написан так, что для его понимания нужно потратить слишком много времени. Именно поэтому его назвали говнокодом, как бы ни было вам обидно за это. У каждого человека есть определенное кол-во предметов, которое он может удержать в кратковременной памяти и оперировать ими всеми сразу. Это кол-во ограничено, у вас тоже. Другое дело, что поскольку вы написали этот код, некоторые части его выступают для вас одним целым, поэтому вы можете им оперировать. Человек со стороны — нет.
И не потому что он дурак, а вы умница. Потому что вы свой код уже знаете.
Проблема не только во вложенности; в длинных условиях, в том, что код в экран не вмещается по горизонтали, в расстановке фигурных скобок. Все это делает код плохо читаемым.
Для того чтобы назвать любой код говнокодом достаточно чтобы он был больше десяти строк
Нет. Код может быть замечательным и даже при 1000 строк, при правильном разбиении. Ваш — нет.
95% людей не могут разобраться в коде и это достаточный повод для плевка в его сторону.
Нет, 95% не имеют мотивации, чтобы в нем разобраться. Потому что это трудно. Не сложно; трудно. Заплатите любому из этих 95% — почти наверняка, если сумма достаточна, он разберется. Но копаться в этом фарше просто так — не, спасибо.
Остальные считают выше своего достоинства разбираться в этом (или не могут так как относятся к 95% населения) скорее последнее.
Вы подводите людей к деревенскому сортиру и предлагаете посмотреть, какое сокровище лежит на дне. Притом, это может быть действительно сокровище, но это ясно только с ваших слов. Теперь любого, кто отказался нырять, вы называете неумехой, входящим в 95%. Именно из-за такого подхода и «упаковки» ваш код отнесли к говнокоду.
Люди не не могут, а не хотят.
Никто так и не смог даже предположить что там делается.
Мне интересно, а как Вы сами себе представляете ответ на этот впрос?
На вскидку,
if ($diff = array_diff_key($_GET, array_filter($_GET))) {
mpre("Входящие параметры содержат пустые значения", $diff);
}
Поиск пустых значений в массиве используя
array_diff_key
и array_filter
— довольно оригинально…Наверное…
Но тогда не было гитхаба. Коммиты свежие, кода много. Так что говнокод аутентичный.
Версию о том, что может кто-то нашел чужой код и троллит тут рассматривали.
Бритва Оккама — если автор этого кода существует, то троль тут лишняя сущность.
Ники совпадают.
Автор делал какие-то правки на доменах совпадающих с ником, и читал оттуда логи…
Вероятность фейка конечно сохраняется, но она очень уж мизерна.
Представляю как он про фреймворки рассказывает, паттерны и т.д)
P.S. все-таки надеюсь, что автор тролль и ловит просто тонны позитива, смотря на то, что делается в комментах
Самый простой способ создать сайт