Хотелось бы поделится собственным велосипедом.

image

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



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

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

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

Работу с файлами портальной системы удалось упростить посредством упаковки базовой системы цмс в php phar архим. Разворачивание сайт при этом свелось к копированию одного файла в директорию проекта. Обновление всей портальной системы свелось к замене одного единственного файла обновленной версией цмс.

Так как sqlite не требует авторизации конфигурационный файл не требуется. Вместе с двумя указанными файлами нам потребуется директория где хранятся все загруженные изобрадения сайта а также файл .htaccess который покажет веб верверу откуда начинать загрузку.

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

При первом входе система попросит вас ввести логин и пароль администратора. Человек который ввел пароль становится администратором и получает пондый доступ ко всем разделам адмисистемы.

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

Файловая система сделана по мотивам файловой системы unionFS в которой система считает файловой системой сразу несколько уровней. Первым наиболее приоритетным является уровень файловой ситемы проекта. Размещенный в общей директории файл путь которого совпадает с системный будет являтся более приоритеным чем лежащий в phar архиве. Для изменения работы любого файла достаточно разсестить его измененную копию по такому же пути, что и в phar архиве. При этом он начитает работать сразу же. Подобным образом на сайт добавляются собственные шаблоны, собственные модели и даже основной файл ядра для изменения достаточно разместить index.php в директории проекта рядом с index.phar

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

Index.phar — cms
.htdb — файл бд (полный доступ)
.htaccess — файл перенаправление на исполняемый файл движка
/include/images Директория для заливаемый файлов (полный доступ)

Как то так должна выглядеть файловая система.

Адрес на github — github.com/mpak2/mpak.su

Зайти в админку можно тут http://phar.mpak.su/admin пользователь/пароль admin/admin

К сожалению в рамках комментарий не удается озвучить все интересующие темы. Контакты для общения сможете найти в вышестоящей ссылке.
Поделиться с друзьями
-->

Комментарии (242)


  1. zenn
    09.05.2016 20:58
    +25

    Решил значит изучить ваш «код» на пригодность и открыл точку входа… в ваше приложение/cms… после чего у меня волосы на заднице голове встали дыбом и я пошел мыть глаза с мылом…
    Если без эмоций — так программировали в 2001-2005 годах на php 4 — я не знаю в силу каких обстоятельств вас заставляют делать то же самое, когда за окном виден composer, mvc, psr-*, symfony, yii2, laravel и другие прекрасные вещи… Попробуйте добавить ваш проект в scrutinizer или другой CI и посмотрите на качество кода.


    1. Temirkhan
      09.05.2016 21:39
      +4

      It was at this moment Nathan knew he f%#@ed up…

      Я тоже опрометчиво открыл index.php


    1. yara_73
      09.05.2016 22:10
      +1

      Мне всегда казалось, что MVC и OOD довольно старая штука, а по коду: все весьма печально


    1. SerDIDG
      09.05.2016 22:35
      +8

      Название "мрак" описывает само себя )


      1. mmjurov
        09.05.2016 22:44
        +2

        А комментирующие «мракоборцы», значит


        1. SerDIDG
          09.05.2016 22:56
          -6

          Скрытый текст


          1. SerDIDG
            10.05.2016 00:30
            -9

            А за что минусы то? ) На фото мракоборцы из гп. Или тут гп не в почёте?


    1. roman_gemini
      10.05.2016 16:48
      +7

      Так часто бывает, например, когда человек живет в маленьком городке, вдали от комьюнити. Видимо среди своих знакомых-родственников-заказчиков он — гениальный программист-самоучка. Начал писать свою CMS до того как взялся изучать PHP. Вероятно не пользуется IDE и не слышал даже о вышеперечисленных прекрасных вещах.) Небыло конструктивной критики в нужное время — вот результат. Я уверен, мы тут все сумасшедшие для него, пишем какие-то странные вещи, издеваемся над ним. Не можем оценить проделанный им титанический труд).


      1. Mendel
        10.05.2016 18:38
        +2

        Я лет 10 назад так переходил из мира бейсика-ассемблера в мир ОПП.
        Реально на долго застрял в районе функцинальщины между паскалем и вижуалбейсиком.
        Вроде и Си был не пустым звуком, и теоретически классы, объекты, наследование — слышал. Но дошло лет через пять только.
        Велосипедов настроил… И да, все вокруг казались идиотами)
        Зато сейчас пишу с оглядкой на меня тогдашнего.


        1. gearbox
          10.05.2016 19:00
          +3

          я на этой волне на php в свое время написал парсер/транспилер highlight файлов от vim, для подсветки кода на форумах (он у меня уже даже сносно php, perl и sh подсвечивал). Было где то начало 2000 -ых. Повезло — раньше чем увяз в своем коде помер комп,  причем наглухо, исходники канули вместе с ним (там такие спагетти были, италия отдыхает). Зато на одном форсмажоре пришло и понимание бэкапов и систем версионного контроля и ООП чуть позже понял зачем нужен. А все вот так же — в собственном соку, без комьюнити, без волшебных пендалей и отеческих подзатыльников.


        1. MacIn
          11.05.2016 00:22
          +3

          Реально на долго застрял в районе функцинальщины между паскалем и вижуалбейсиком.

          Это как? Процедурщины тогда уж.


  1. ErickSkrauch
    09.05.2016 21:04
    +3

    github.com/mpak2/mpak.su/blob/master/modules/chat/all.php#L3-L5
    На улице ведь 2016, я правильно ощущаю время?


    1. mpakep
      09.05.2016 21:07
      -2

      Вы нашли один из самых древних частей кода.

      https://github.com/mpak2/mpak.su/commits/master/modules/chat/all.php

      Экспериментов было много. Не все прижились, но следы от них все еще остаются.


      1. ErickSkrauch
        09.05.2016 21:11
        +5

        Увы, просто первые 5 секунд изучения репозитория вывели меня туда. Комментатор выше дал ссылку на точку входа, это первая секунда знакомства с проектом.

        Я просто к чему это: если пишете код не модно, то не стоит публиковать это на всеобщее обозрение, иначе здесь вы не найдёте поддержки, а лишь отрицательные эмоции от критики (должен признать — по делу).


        1. mbait
          10.05.2016 02:50
          +7

          если пишете код не модно

          не модно


          1. ErickSkrauch
            10.05.2016 11:29
            -5

            Понятия «не современно» и «по-старому» очень растяжимы и не фиксируется во времени. Поэтому «не модно» отлично описывает реакцию сообщества на данный проект.


      1. funnybanana
        11.05.2016 13:13
        +1

        А я прекрасно понимаю автора, сам был таким лет 10 назад… к слову и код был примерно такой же…
        Но в своё оправдание могу сказать что и php 5 с переработанными функциями ООП только вышла…

        кстати...
        ах да… mysql_connect mysqli_connect


  1. deniskreshikhin
    09.05.2016 21:05
    +8

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


    1. Mendel
      09.05.2016 21:36
      +4

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


      1. mpakep
        09.05.2016 21:47
        -15

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


        1. yara_73
          09.05.2016 22:13
          +4

          Как и любой другой технарь у меня проблема с попыткой что-то описать
          Это вас характеризует явно не с лучшей стороны. Да и вроде как среди технарей достаточно много людей которые пишут книги, статьи и прочие материалы для общественного использования.


        1. ivlis
          09.05.2016 22:23
          +11

          Как и любой другой технарь у меня проблема с попыткой что-то описать.


          Пожалуйста, не примазывайтесь. Что-то даже с этим предложением у вас не так.


          1. mpakep
            10.05.2016 01:13
            -5

            Это лишь доказывает мои слова.


            1. lair
              10.05.2016 01:16
              +5

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


              (заодно у вас проблемы с логикой)


            1. MacIn
              10.05.2016 01:31
              +2

              Кто ясно мыслит, тот ясно излагает.


        1. hudson
          09.05.2016 23:01
          +1

          >> что мне пришлось сделать с собой чтобы вообще что то выдавить из себя

          И что, оно того стоило? )


          1. mpakep
            10.05.2016 02:50
            +2

            Нет. Не высказывать своего мнения оказалось целесообразнее.


        1. Ohar
          10.05.2016 01:05
          +4

          Как и любой другой технарь у меня проблема с попыткой что-то описать
          Ну вы там это, давайте без всякого, а то чот не оч и всё такое, да. Вот.


  1. korniltsev
    09.05.2016 21:43
    +6

    http://demo.mpak.su/
    Warning: array_key_exists() expects parameter 2 to be array, boolean given in /srv/www/vhosts/mpak.cms/include/mpfunc.php on line 1497


    1. mpakep
      09.05.2016 21:52
      -20

      Попробуйте лучше скопировать три файла и запустить на своем хостинге. Уверен вам понравится. Демка не работает уже пару лет как.


      1. hudson
        09.05.2016 23:00
        +9

        По демке встречают…


      1. valera5505
        09.05.2016 23:17
        +8

        А какой тогда смысл в такой демке? Тем более если вы знаете о том, что оно не работает. Может, стоит ее починить? Не каждому хочется что-то копировать и запускать. Ну или удалите ссылку вовсе, чтобы не было ложных ожиданий.


      1. mmjurov
        09.05.2016 23:18
        +7

        А может быть вам самим стоит скопировать три файла в демку? В статье сказано, что это очень просто сделать, и сайт обновится


        1. mpakep
          10.05.2016 00:09
          -6

          Есть особенность в ее работе. Демка без возможности изменение — бесполезна. А каждый второй наровит все поломать удалив нужные блоки или играясь с правами доступа к разделам. Систему с записью и постоянно работающую не получилось сделать. Так и стоит все время сломанная.


          1. Borro
            10.05.2016 00:13
            +4

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


            1. mpakep
              10.05.2016 00:45
              -4

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


  1. boodda
    09.05.2016 21:47
    -2

    развернуть у клиента..., бог мой, git clone или svn co уже давно решают. бд, sqllite -это выбор для пары мегабайт или 100 страниц, как я вижу вас? такие как вы делаете код только для того чтобы доить клиентов на поддержке вашего говна, для it сферы — вы инфекция, вы только тратите свое время и деньги клиентов


    1. mpakep
      09.05.2016 21:57
      -2

      То же самое пару лет назад мне говорили о mysql Однако как быстро меняется мир.
      Перенести из одной бд в другую дело 15 минут. Речь только о целесообразности каждого решения для конкретной ситуации.
      На большей части сайтов данные и занимают пару мегабайт. Вы же с экскаватором за червями не едите?


    1. Mendel
      09.05.2016 22:39
      +4

      Строго говоря только идея использовать sqllite и phar для простоты инсталяции в этом проекте и не вызывает критики :)
      Есть большой пласт задач где этого достаточно. Так что Вы не правы. Всё остальное тут да, привет из 90-х. С этим не поспоришь.


      1. hudson
        09.05.2016 23:05

        Вот тут соглашусь, SQLite не так прост, как многие могут подумать. Для чего-то простого и не часто изменяемого, но всё-таки не статического, может быть очень даже в тему. Ну а phar это ну почти что jar. Для чего-то небольшого может быть очень удобно. В том числе для file-based CMS, например.


      1. mpakep
        10.05.2016 00:14
        -2

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

        https://github.com/mpak2/mpak.su/blob/master/include/config.php

        Он лежит прямо в index.phar и заменить его мы можем положив по тому же пути файл в фс сайта.


  1. mmjurov
    09.05.2016 21:54
    +3

    Да тут просто полный набор антипаттернов… и транслитерация с русского в именах функций, и глобалки, отсутствие следования стандартам и много чего еще. В 21 веке так не делают.
    Я не поленился, клонировал репозиторий, открыл его в IDE. Надеялся найти там что-то интересное, но… нет, увольте. Когда открываешь файл, длиной в 1600+ строк, и видишь там столько много буков, что они закрывают 95% экрана, желание копаться дальше испаряется.

    А вот, кстати, и файлик, скрин из IDE со встроенным анализатором ошибок
    image


    1. hudson
      09.05.2016 23:09
      +2

      Не совсем по теме поста, но про IDE и их проверки «по умолчанию»: как-то принимал проект на поддержку. Открываю самый толстый контроллер и IDE сообщает — есть ошибки. Использование не инициализированных переменных. Ну, думаю, если даже статический анализ такое показывает… то я в *опе… =) так и оказалось.


    1. mpakep
      09.05.2016 23:29
      -3

      php работает в режиме error_report(E_ALL) не представляю что вы там могли найти.


      1. mmjurov
        09.05.2016 23:37

        А вы прогоните свой код через любой статический анализатор кода и посмотрите. Хуже точно не будет


  1. boodda
    09.05.2016 21:55
    -7

    Разворачивание сайт при этом свелось к копированию одного файла в директорию проекта.


    Это вы сейчас серьёзно? Мой бог но svn co и git clone знают все.

    Sqllite это для 2 мб и 100 страниц текста, дальше будут тупняки.

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

    Горите в аду


    1. mpakep
      09.05.2016 22:02
      -5

      Вы видели как меняется лицо клиента когда вы начинаете ему обьяснять почему надо использовать git или svn или какую нибудь еще непонятную абривиатуру? Значете что они при любой возможности вам говорят? «Зачем не вся эта хрень?» Я вас также сейчас спрашиваю. Зачем все это если можно обойтись без этого? Про https://ru.wikipedia.org/wiki/Бритва_Оккама слышали что нибудь?


      1. KriMs
        09.05.2016 22:07
        +6

        Если вы не можете объяснить клиенту зачем, так может быть просто вы сами не знаете для чего это?


        1. mpakep
          09.05.2016 22:11
          -1

          Где нужно это используется. Но остается львиная часть проектов где я не буду настраивать git так как он там просто не нужен. Зачем система контроля версий в директории состоящей из трех файлов?


          1. boodda
            09.05.2016 22:16
            +1

            но если сделать хорошо будет не 3 файла. а больше и что вы там настраивать хотите не понятно.


          1. yara_73
            09.05.2016 22:17

            Зря вы так, настройка git репозитория не так уж и много времени занимает, а иногда очень долго можно искать куда пропали изменения.


          1. mmjurov
            09.05.2016 22:17
            +2

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


          1. IncorrecTSW
            09.05.2016 22:18
            +1

            Ну как минимум для

            контроля версий


            1. Mendel
              09.05.2016 22:50
              +1

              Для контроля версий конечно да. Но тут спор начался о необходимости гит для _разворачивания проекта_. И тут надо признать логика у топикстартера имеется. При всем ужасе его кода и других ошибках — далеко не для каждого проекта уместно использовать гит для разворачивания. Если на хостинге нет доступа в консоль и гита, то это не повод отказываться от хостинга если у тебя сайт визитка…


      1. mmjurov
        09.05.2016 22:20
        +2

        А зачем вы заказчику вообще про git рассказываете? Вы ожидаете, что он начнет пользоваться инструментарием разработчиков, чтобы разворачивать свои сайты? Для чего козе баян?
        Ну и вообще — ваш способ «простого» обновления сайта ничем не отличается от набора команды git pull или composer update. Ну или на худой конец можно и всю CMS в архив запаковать — сложность обновления то будет та же самая.
        Только вот в итоге вы через какое-то время наткнетесь на другие грабли, которые не дадут вам так просто обновлять CMS с помощью копирования phar архика, поверьте.


      1. Mendel
        09.05.2016 22:47
        +1

        Подождите еще немножко и вас начнут микросервисами пугать :)
        А если серьезно, то хоть народ и немножко перегибает с гитом и т.п., и действительно в мире где самым популярным CMS является вордпресс странно слышать что «гит знают все», но вы должны их понять — то КАК вы пишете это сравнимо с тем чтобы кучер из 18-ого века учил бы пилота Формулы-1 правильной езде. НА ЛОШОДЯХ НЕ ЕЗДЯТ. ТАК НЕ ПИШУТ. Спортивные клубы и ипподромы в другой стороне, как и хаб «ненормальное программирование». Это пхп, это бреинфак. Почитайте азы. DRY, SOLID, почитайте банду четырех… посмотрите что в 21-веке в тренде. Лучше всего найдите себе наставника. И будет вам счастье. Просто напишите тут, мол «чуваки, кто научит писать, а то я чёт неграмотный малёха». Вас пошлют сначала грамматику исправить в тексте, а потом и в нужны тексты ткнут…


  1. boodda
    09.05.2016 22:15

    php, sqllite, phar, копируй то, создай сё. чем лучше то, такие же непонятные слова. И не надо объяснять ничего клиенту, если он не понимает вас, говорите на его языке, «мы все сделаем за X дней, за Y денег, если не срочно сделаем скидку, если срочно накинете 50%, подвинем других ради вас.»

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

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

    И я лично видел как за подобное натурально били в лицо.


    1. mpakep
      09.05.2016 22:28
      -1

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


      1. boodda
        09.05.2016 22:41
        +6

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


        1. Mendel
          09.05.2016 22:54
          +2

          Хуже. Тут другая крайность — тут не эксперементальные технологии, которые случайно могут и выгореть и стать стандартом и т.п. Тут отставание от твердого стандарта лет на 10. И отставание с каждым днем будет еще больше. Так что тут намного хуже чем эксперементы с технологиями.)


          1. mpakep
            09.05.2016 23:05
            -4

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


            1. Mendel
              09.05.2016 23:13
              +6

              ДА пожалуйста. Пусть будет sqlite3, почему бы и нет? (кстати обращаю внимание — я не зря указываю тройку)
              Вас ведь в основном не за это макают. А за методы «чуть» больше 20 строк. За отстутствие стандарта кодирования как класса (черт, я сам этим грешу, в проекте уже за сотню классов а всё никак не вычищу ляпы с именованием классов и т.п., но у вас каша которая коробит даже меня.
              Отсутствие внятной структуры, стиля, мешанина экспериментов, «ой, это у меня от прошлого десятилетия осталось», отстутствие тестов… да вообще отсутствие всего без чего выкладывать код стыдно. Черт, у меня намного лучше код, но я тупо стесняюсь его на публику выкладывать. А тут такая непосредственность)
              А потом еще и приправленная «ой, это демка, я ее сто лет не обновлял, это ерунда, пусть глючит», и «та пофиг на грамматические ошибки и опечатки в тексте, мне его вычитывать лень, пусть лучше сотня человек покоробится читая это, чем мне править..» и после этого вы такой «ой, меня за sqlite3 ругают»… да может половина бы и поругала за него, может и согласилась бы что ваше решение имеет право на жизнь, если бы это было основным спорным моментом… Но тут ВСЁ ужасно :)


              1. mpakep
                09.05.2016 23:35
                -5

                Убейте в себе перфикциониста. Перфекционизм — зло. Я выложил то, что работает а оно не всегда красиво. Как раз то, что годами не выгребается и есть то, что не глючит. То, что глючит первым делом выгребается. Что именно показалось вам особо ужасным? Синтаксис? Я тоже вроде не первый год пишу код и мне это кажется достаточно удобным и понятным. Извините если наши вкусы различаются.


                1. mmjurov
                  09.05.2016 23:39
                  +3

                  Вам однозначно нужен наставник. Если вы уже не первый год пишете такой код, и к Вам не приходит понимание того, что так делать нельзя, то что-то Вы делаете не так, ИМХО. И перфекционизм тут ни при чем.


                  1. mpakep
                    09.05.2016 23:44
                    -8

                    Есть хорошее высказывание умных людей по этому поводу. Насколько помню звучит оно примерно так.

                    95% обратной связи — полная лажа. Но из за оставшихся 5% стоит ее читать.
                    И есть еще одна 95 процентов людей идиоты. На данном ресурсе их меньше, но все равно процент достаточно велик.

                    Не удивляюсь что не все понимают того о чем я написал.

                    Мне нужны единомышленники. Я знаю что я делаю и для чего.


                    1. mmjurov
                      09.05.2016 23:58
                      +8

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


                      1. mpakep
                        10.05.2016 00:20
                        -1

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


                        1. kolyaflash
                          10.05.2016 11:23
                          +6

                          А я всё же перейду на личности.

                          Во первых, говнокод — не методика, не цель и не решение. Жизненная позиция — возможно.

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

                          Не рассказывайте ничего про перфекционизм. Вам до него далеко. И вам никто ничего не говорит про «красоту» и «синтаксис». Речь про то, что если сайт «запускается» — это ещё не значит, что вы выполнили свою задачу, всё хорошо и всё остальное — лишнее.

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


                    1. saintbyte
                      11.05.2016 11:32

                      Блин, люди вам говорят правду, сравните код с код использования фреймворков. вы написали кучу сырых SQL запросов и хотите чтоб это было переносимо на другую базу, вы написали массу кода и хотите чтоб он был хорошо отлаживаемый. Надо писать модуль чтоб он был хорош для одной задачи и использовать и использовать его в дальнейшем. Если вас смущает влияние автолоадинга в пхп на производительность, то более чем 30 млсек мне не удавалось выиграть сливание всех файлов в один большой в случае например с ЗендФреймоворком версии 1.10.


                1. Mendel
                  10.05.2016 08:47
                  +5

                  Это не вкусы. Это PSR-2.
                  Я думаю сообщество мне простило бы то что у меня имена классов начинаются с маленькой буквы а открывающая скобка методов не с новой строки. Если бы общая идея показалась бы интересной, то думаю что простили бы и то, что в некоторых местах (в некоторых!) у меня методы доходят вплоть до 30 строк.
                  Но я не буду выкладывать такое просто потому что например у меня нет описаний половины методов, а это уже непростительно. И описывая и подправляя какие-то другие вещи — заодно исправлю и меньшие ляпы.
                  Ваш код нечитаем. Работать с ним невозможно. Нет, вру. Можно. Вчера партнеру объяснял почему мы отказываемся от заказов требующих опенкарт, хотя я и некоторые другие разрабы в команде его отлично знаем. Мой ответ был простой — задача которая на нормальном коде занимает 15 минут, там займет несколько часов. Если я сделаю это за 15 минут, то клиенту это будет стоить как 15 минут моего времени. Исполнитель под опенкарт сделает ту же задачу скажем за 5 часов. При цене часа в 5 раз ниже моего это будет в 4 раза дороже чем мои 15 минут.

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


        1. mpakep
          09.05.2016 22:59
          -3

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


          1. lair
            10.05.2016 01:18
            +1

            Один простой вопрос: кто, кроме вас, сможет (и, что важно, захочет) это поддерживать?


          1. lair
            10.05.2016 01:24
            +8

            Это работает уже долгие годы без сбоев. Тут нет слабых мест.
            [...]
            А код потихоньку переписывается по мере того как в нем начинает что то сбоить

            Я считаю, это просто прекрасно.


            1. mpakep
              10.05.2016 09:36
              -4

              Как в свое время написал Линус Торвальдс в своих первых сообщениях о Линуксе:

              Я сомневаюсь что это когда до будет поддерживать что то кроме файловой системы.

              Я тоже сомневаюсь, что это кто то когда то будет поддерживать.


              1. lair
                10.05.2016 10:54
                +6

                Я тоже сомневаюсь, что это кто то когда то будет поддерживать.

                И при этом от сайта зависит миллионный бизнес? От сайта, который не может поддерживать никто, кроме одного человека?


                1. Janom
                  12.05.2016 04:17

                  А что? Не плохо! Сделай себя незаменимым)


                  1. lair
                    12.05.2016 09:01

                    Ну так, непрофессиональненько.


    1. mpakep
      09.05.2016 22:52
      -2

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


      1. mmjurov
        09.05.2016 22:58
        +1

        Вряд ли вам придется создавать сайты для миллионного бизнеса вот на таком движке.
        «Зоопарк» технологий, как вы говорите, разводят не для того, чтобы систему намеренно усложнить, а как раз таки наоборот. Каждая технология в миллионном проекте предназначена для решения своей задачи
        И если кто-то бездумно ввел какую-то технологию в проект необоснованно, а потом не может с этой технологией справиться, то заказчик явно нанял неадекватного подрядчика, и ему нужен аудитор, который быстро такого исполнителя забракует


      1. Delphinum
        09.05.2016 23:09

        Это вы к тому, что на вашем решении держится миллионный бизнес?


        1. mpakep
          10.05.2016 00:25
          -6

          В рублях конечно, не в долларах. Хотя оборот уже наверно в долларах.
          Сайты уже точно исчисляются сотнями. Возможно за тысячу.

          Не на sqlite конечно. Его я еще буду какое то время тестировать перед внедрением.


          1. facha
            10.05.2016 11:18
            +4

            Можете ссылку дать на какие-нибудь сайты с этой смс?


  1. kingpin
    09.05.2016 22:22

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

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

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


    1. mpakep
      09.05.2016 22:33
      -2

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


      1. kingpin
        09.05.2016 22:51

        При всей «лёгкости вхождения» и «удобстве администрирования» SQLite не подходит для большинства сайтов размером больше дюжины-другой страниц.

        Причина простая: каждый раз, когда клиент обращается к вашему сайту, сервер приложений (если таковой имеется) должен отправить запрос к БД и получить из неё данные. Клиент-серверные СУБД справляются с этой задачей на ура, производя различные оптимизации и храня выбранные недавно данные (блоки, страницы) в памяти (кэш буферов).

        SQLite при каждом запросе к БД будет запускать новый процесс и читать одни и те же данные в память, — крайне накладно с точки зрения расходования ресурсов ЦП, ОЗУ, дисковой подсистемы — и со временем (по мере роста объёма данных в БД) вам потребуется либо вертикальное масштабирование произвести (покупка мощного ЦП, SSD и т. д.), влекущее дополнительные траты, либо задействовать кэширование (вроде memcached), что сильно усложнит приложение.

        Ваши конкуренты тем временем будут использовать MySQL или PostgreSQL и в ус не дуть длительное время, пока нагрузка действительно не станет большой (миллионы запросов в сутки).


        1. Mendel
          09.05.2016 23:00
          +1

          Строго говоря сайт с посещалкой в тысячу уников, с тысячей страниц, грамотной архитектурой и кешированием (да в ту же базу, просто чтобы не плодить много запросов за страницу), да такой где динамического контента нет, изменения в базу делает только админ, а пользователи только читают, инвалидаторы написаны грамотно — такой сайт будет прекрасно себя чувствовать на самом дешевом хостинге и с SQLite. Если бы мы увидели нормальную визитницу с MVC, PSR-2 и т.п., засунутую в phar и sqlite3 то я бы слова не сказал бы. Может даже на вооружение взял бы. Но под капотом то ад адовый. Неподдерживаемый код, в котором 90% что куча дыр которые никто не вскрыл просто потому что пока никому не нужно было… супер.


          1. kingpin
            09.05.2016 23:10

            да такой где динамического контента нет, изменения в базу делает только админ

            Верный кандидат на реазиацию с использованием генератора статических сайтов (Jekyll, Sphynx, metalsmith и т. д.) — в БД вообще отпадает необходимость.


        1. mpakep
          09.05.2016 23:11
          -2

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


          1. Mendel
            09.05.2016 23:16

            Вся база в десяток мб влезает в ОЗУ и поэтому мы ее сделаем файловой? Ой!
            При том что я тут один из немногих кто защищает вашу идею с sqlite3 — я даже не возьмусь объяснять всю прелесть вашей мысли)
            Хотя чего там — шаредхостинг, сотня юзеров онлайн…


            1. mpakep
              09.05.2016 23:24
              -1

              Любая бд файловая. Хранить данные в ДНК еще не научились. Вопрос в том, что мы ничего кроме файлов не пользуем. Выкидываем кучу ненужных промежуточных элементов таких как порты, права доступа, логи, пользователи, сервисы, демоны дам кучу всего. Концепция куда кинул там и работает. На 99 процентов хостингов закинул в директорию и все работает. Это ли не прекрасно?


            1. kingpin
              09.05.2016 23:48

              Перед тем как привести несколько доводов против SQLite для динамических сайтов почитал про механизм резервного копирования на официальном сайте.

              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 такое сделать несложно имеющимися средствами, и это работает надёжно.


              1. mpakep
                09.05.2016 23:58
                -2

                Уверен в sqlite куча недостатков. Но при приемлемом количестве плюсов и минусов сам sqlite может быть достаточно приемлемым для использования. Это как маяк к которому на мой субьективный взгляд должна стремиться вся it индустия. Не создавая монстров а делая что то простое и понятное. Давайте следить вместе за этим решением резко отрицаьельных отзывов я еще не встречал. При некоторых очевидных плюсах общее мнение о данной бд вполне положительное.


                1. kingpin
                  10.05.2016 00:06

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


                  1. mpakep
                    10.05.2016 00:52
                    -2

                    Предлагаю все-таки приводить доводы основанные на опыте. Из того что я читал разработчики sqlite достаточно грамотно подходят к своему делу. Верю что можно сделать достаточно хорошее решение. А подходит или не подходит лучше утверждать на цифрах. При таком количестве решение приемлемо, при большем — не подходит. Границы приемлемости данного решения еще не понятны. Будем тестировать.


                    1. Fractalzombie
                      10.05.2016 12:42

                      Предложите фейсбуку перейти на sqlite


                      1. mpakep
                        10.05.2016 13:42
                        -1

                        sqlite это такие же файлы с которыми и сейчас идет работа. Вопрос не в названии а насколько надежно и удобно это сумели реализовать разработчики. Если подходить строго — любая другая бд использует у же самую файловую систему. Так в чем разница? В том что у sqlite реализовал другой подход он выкинул часть элементов которые посчитал ненужными. Веб сервер баз данных, сокеты возможно что то еще.

                        Но мы ведь не раз сталкивались с ситуацией когда приходят ребята и применим новый подход упрощают старую устоявшуюся как казалось вещь и она работает лучше. Пример тот же git кто бы мог подумать до его появления что можно без сервера обойтись в системе контроля версий? Пришли сделали и у всех глаза открылись что сервер в SVN был слабым звеном оставшимся в качестве наследия от предыдущих поколений разработчиков. Или bitcoin который переворачивает финансы. Мир платежей делистя на две части до биткоина и после. Также и тут. Все ресурсы на которых работает sqlite те же что и у любой другой бд это оперативная память, файловая система и операционная система. В вот подходя у них разные. Так почему вы утверждаете что одно заведомо хуже другого? И кто сказал что в ближайшее время это не изменится?


                        1. lair
                          10.05.2016 14:14
                          +2

                          Если подходить строго — любая другая бд использует у же самую файловую систему. Так в чем разница?

                          Вы серьезно не понимаете, в чем разница между in-process БД (особенно в контексте веб-сервера, поднимающего процесс на каждый запрос), и БД в собственном процессе?


                          Пример тот же git кто бы мог подумать до его появления что можно без сервера обойтись в системе контроля версий?

                          То-то вы github используете.


                          Так почему вы утверждаете что одно заведомо хуже другого?

                          Потому что есть очевидные вещи, связанные с (а) кэшированием и (б) управлением конкурентным доступом, которые будут явно отличаться у самостоятельной СУБД и СУБД-в-запросе.


                        1. Delphinum
                          10.05.2016 14:50
                          +1

                          В том что у sqlite реализовал другой подход он выкинул часть элементов которые посчитал ненужными

                          Нет, разница в том, что SQLite писался под одни задачи, а, к примеру, PostgreSQL под другие. Тобишь авторы этого решения не взяли PostgreSQL, удалили из него все лишнее и получили SQLite. Они изначально знали, какими функциями и органичениями должна обладать их СУБД, и разрабатывали в этом контексте.


                        1. Mendel
                          10.05.2016 18:46
                          +1

                          Нечто новое… отбрасывающее старое… и противопоставляющее себя старому… делающее иначе… ведь так как все — никому не нужно. Так вы это видите да?
                          А ведь я уже несколько раз вас носом мокнул в цифру 3. Мокну еще раз. Помимо sqlite3 есть еще sqlite4. Да ее стадия развития «немножко» другая. Но тем не менее. Не говорите за людей то чего они не говорили и не думали. Я серьезно считаю, что для бесплатных визиток и прочей мелочи — sqlite3 хороший выбор. Как и phar. Но вы несете такую ересь, что спорить с вашими оппонентами просто нет возможности)


  1. lair
    09.05.2016 23:52
    +1

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

    И что будет, если логика работы подменяемого файла изменится с выходом новой версии вашего движка?


    Аналогичный вопрос: а что будет, если вам надо изменить структуру БД?


    И да, что там у SQLite с параллельными обращениями? Например, если администратору захочется поменять десяток-другой страниц быстренько?


    1. mpakep
      10.05.2016 00:03
      -2

      Если надо менять структуру — она меняется. К примеру тут
      https://github.com/mpak2/mpak.su/blob/master/index.php#L118

      Логика работы уже не меняется лет пять. Не представляю ситуации чтобы она поменялась в дальнейшем.
      С sqlite небольшой опыт работы. Все решения до этого момента были с mysql но в sqlite вижу определенные перспективы, поэтому решил попробовать. Будет положительный или отрицательный опыт обязательно поделюсь.


      1. lair
        10.05.2016 00:05
        +3

        Если надо менять структуру — она меняется. К примеру тут

        А что в этот момент происходит с другими частями, которые используют эту таблицу?


        Логика работы уже не меняется лет пять. Не представляю ситуации чтобы она поменялась в дальнейшем.

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


        С sqlite небольшой опыт работы.

        А, то есть вы предлагаете решение, о работоспособности которого вы даже не знаете?


        1. mpakep
          10.05.2016 00:39
          -1

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

          Блоки, Модули, Пользователи, Настройки и СЕО раздел отвечающий за адресацию. То, что используется независимо от сайта. Дальше список функционала расширяется индивидуально исходя их требований сайта.


          1. lair
            10.05.2016 00:42

            Так как обновление идет одним файлов index.phar там уже идут все измененные части для новой структуры. А про пользовательские разделы система ничего не знает они расположены в файловой системе сайта и их система никогда не трогает.

            Я не про пользовательские разделы, я про описанное вами изменение работы системы.


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

            … и как этот модуль поддерживать? На него же теперь не распространяется описанная вами простота-обновления-одним-файлом.


            А что будет, если модуль использует функциональность, которую вы решили поменять?


            1. mpakep
              10.05.2016 01:07

              Нет никакой функциональности. В адресе вы используете имя раздела и файла. А php файлы и шаблоны подключаются обычным инклюдом с небольшой обработкой. Все, что будут работать при обычном инклюде будет работать если положите это в директорию со своим модулем. Адресация тоже простая «http://имя-сайта.рф/имя-раздела: файл» есть еще адресация которая тоже подминяется, но на скрипты внутри раздела это никак не сказывается. Права доступа обрабатываются системой. Выдача 404 ошибки, динамическая генерация тайтлов и дескрипшнов все это система. Есть четкая грань между работой системы и скриптами раздела. Но эта грань очень четкая и никогда не пересекается. Модуль не берет на себя работу системы а система ничего не знает о том, что делает модуль.


              1. lair
                10.05.2016 01:09
                +2

                Нет никакой функциональности.

                Тогда зачем нужна ваша система, если она не дает никакой функциональности?


                1. mpakep
                  10.05.2016 03:18

                  А что будет, если модуль использует функциональность, которую вы решили поменять?

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


                  1. lair
                    10.05.2016 10:55
                    +1

                    Нет функциональности которую можно было бы поменять

                    То есть каждый модуль сам, как хочет, обращается в БД? Сам, как хочет, управляет своими правами? Использует свои и только свои способы отображения данных?


  1. Delphinum
    10.05.2016 00:09
    +2

    А что умеет предлагаемая CMS?


    1. mpakep
      10.05.2016 00:31
      -7

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


  1. mpakep
    10.05.2016 01:26
    -1

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

    http://phar.mpak.su/admin

    Список сессий можно посмотреть тут http://phar.mpak.su/sess:admin/r:mp_sess

    Проверим сразу на хабронагрузке.


    1. lair
      10.05.2016 01:31
      +2

      на сайте Array посетителей

      А говорите — нечему ломаться.


      1. mpakep
        10.05.2016 01:40

        Я только что доделал этот блок. Его надо было добавить в админку. По умолчанию он там не стоит.


        1. lair
          10.05.2016 01:41
          +1

          Это много говорит о качестве того, что вы выкладываете — и как вы это делаете.


          1. mpakep
            10.05.2016 01:51
            -6

            У кода есть один существенный код — он работает.


            1. lair
              10.05.2016 01:52
              +3

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


            1. koceg
              10.05.2016 07:08
              +3

              Блин, я вот прочитал все комментарии до этого момента и этот меня добил. Вы же реально не понимаете, что вам люди говорят…
              Как можно говорить, что ваш код работает в ветке, где описан пример того, как он не работает… И, я уверен, это только один из огромного множества примеров.
              То, что вы пока не столкнулись с серьёзными проблемами в вашем коде, не значит, что их там нет. Это лишь значит, что у вас, возможно, неадекватное определение серьёзности (ну array посетителей… и ладно, ничего страшного, не упало же ничего). Ну а отсутствие тестов вообще не позволяет вам делать никаких категоричных заявлений. Выше вот показали, что статический анализ IDE нашёл в вашем коде минимум 5 серьёзных ошибок.

              И всё это не имеет никакого отношения к «играм» «студентов» с «новыми технологиями»…

              Блин, вот зачем я всё это писал, я же видел, как вы на комментарии реагируете…


              1. otykh
                10.05.2016 13:02
                +1

                можно еще примерчик работы и неломательности?
                joxi.ru/J2bNXagI4bXJ82


                1. roman_gemini
                  10.05.2016 13:47

                  Что же вы на парня так все накинулись?) А вдруг он скоро напишет, например, убийцу Битрикса, которую все люто поносят, но от этого она не становится менее популятной и востребованой на рынке)


                  1. Delphinum
                    10.05.2016 14:51
                    -2

                    Я утром уже написал убийцу Битрикса. Потом спустил воду…


    1. SerDIDG
      10.05.2016 01:41
      +2

      Не знаю, что я сделал, но как-то так. http://screencloud.net/v/oDo2
      PS. Обновил скриншот.


      1. otykh
        10.05.2016 14:01

        http://joxi.ru/brREnpzUQDJboA


    1. Mendel
      10.05.2016 09:38

      admin/admin не подходит. Но это ладно. Мне никаких сообщений не выводит.
      Пустая форма тоже не показывает ошибок мол нет логина, неверный пароль и.тп.


  1. SerafimArts
    10.05.2016 01:34
    +9

    <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). В чём причина переписывать это?


    Велосипеды — это конечно хорошо, но делать их надо в разумных пределах.


    1. mpakep
      10.05.2016 01:58
      -4

      Это не мой код. Я бы не стал писать ничего похожего. Код был взял с откуда то с форума.
      И если посмотрите скрипт который собирает phar архив то данный кусок кода в него не входит

      https://github.com/mpak2/mpak.su/blob/master/phar/mpak.php#L31


      1. lair
        10.05.2016 02:01
        +2

        Если этот код входит в ваше решение — то вы за него отвечаете, вне зависимости от того, откуда вы его взяли. Если не входит — что он делает в репозитории?


        1. mpakep
          10.05.2016 02:09
          -3

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


          1. lair
            10.05.2016 02:13

            О, то есть помимо решения из одного файла, которое вы предлагаете, есть еще и какая-то "портальная система" с "администраторской функцией"? И как это соотносится друг с другом?


            1. mpakep
              10.05.2016 02:21
              -3

              Там много чего есть. Быстрая установка это лишь конкретное решение. До этого все работало на mysql и без фара.
              Немного доработав получилось удачное решение для быстрой установки. Его описание и представил в статье.


              1. lair
                10.05.2016 10:53
                +2

                Там много чего есть. Быстрая установка это лишь конкретное решение. До этого все работало на mysql и без фара.

                То есть то решение, которое, по вашим словам, давно работает у ваших заказчиков — это не то же, которое вы здесь предлагаете?


  1. mpakep
    10.05.2016 02:16
    -8

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

    Если авторизоваться администратором, система показывает файл из которого выводится верстка

    < !-- Начало: 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 — >

    Сделал специально для вертальщика, так как возникали сложности с поиском файлов верстки


    1. SerafimArts
      10.05.2016 04:04
      +7

      Laravel 5+:


      // Provider. Подключаем код композера к любой вьюшке системы
      $views->composer('*', PathShareComposer::class); 
      
      // PathShareComposer. Расшариваем переменную со значением пути
      $view->with('path', $view->getPath());
      
      // Template. Выводим
      {{ $path }}

      3 строчки кода для реализации функционала. А ещё проще посмотреть в дебагбаре, который ставится двумя строчками.


    1. lair
      10.05.2016 10:59

      В asp.net MVC это делается тривиально.


    1. valera5505
      10.05.2016 16:34

      Возможно, я немного не понял вашу концепцию. Вы изобрели шаблонизирование?


      1. mpakep
        10.05.2016 16:42

        Не совсем. Это попытка сделать мир проще.
        Концепция состоит в следующем. На любой хостинг в директорию вы закидываете три файла и все.
        Заходите на сайт и все работает. Это немного упрощает работу с установкой, резервным копированием и исправлением ошибки в случае поломки сайта. У вас нет конфигурационных файлов — они не нужны. Вы можете запустить сайт на хостинге в случае ограниченного количества mysql баз данных более того вам человеку разварачивающего сайт не требуется каких то специальных знаний о базах данных то, без чего сегодня вы не установите ни один сайт.

        Сайт превращается в аналог ексель документа который открть можно на любом компьютере. Требования к его инфраструктуре сокращаются на порядок.


        1. lair
          10.05.2016 16:46
          +1

          Вот прямо на любой хостинг?


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


          1. SerafimArts
            10.05.2016 20:18

            Нет конечно, на 99% хостингах оно просто не заработает, напрмер из-за <? в качестве открывающего тега, вместо стандартного <?php.


            1. Mendel
              10.05.2016 21:00

              На 99% таки заработает. Его специально отключать надо. В PSR оно запрещено из соображений что МОЖНО отключить. А <?= отключить УЖЕ нельзя, так что его приняли. Но замечание да, в тему.


              1. SerafimArts
                10.05.2016 22:11

                И действительно:
                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 назад встречал скрипты с шорт-тегами, которые запускал, так что в этом плане уверенно отстал от жизни.


                1. Mendel
                  10.05.2016 22:50

                  Default Value: On

                  И на практике на дюжине хостингов ни разу такие скрипты проблем не доставляли.
                  Да, рекомендуют во избежание редких проблем запрещать, если оно реально не нужно.
                  Но на практике чаще бывает что клиент использует шорты чем проблемы от шортов. А шаредхостинги стандартно под массового клиента заточены.
                  Я реально пока с полгода назад на эту тему не подискутировал с SamDark где-то, был в твердом заблуждении что у этих шорт такая же судьба как у <?= и они уже везде стандартно есть и всё такое, и запрет на них анахронизм который приходится поддерживать ради совместимости со стандартами кодирования. СамДарк меня просвятил тогда что это не так, а благодаря Вашей ссылки я теперь знаю почему они так делают)


                  1. alexkbs
                    11.05.2016 04:00

                    Default Value может быть какой угодно, но ниже написано что short_open_tag = Off


                    Практически пример: устанавливаете Debian stable, подключаете PHP… <? echo "Hi"; ?> уже не работает. То есть, чтобы заработало нужно явно дописывать конфиг.


                    1. Mendel
                      11.05.2016 09:13

                      Ок, с этим в принципе соглашусь, но в практическом смысле — везде работает.
                      Хостеры нарушают рекомендации потому что клиенты нарушают, а клиенты нарушают потому что «ну работает же, чего бы и не использовать?»


  1. mpakep
    10.05.2016 03:13
    -6

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

    http://phar.mpak.su/pages:test Учитывается вложенность php тегов друг в друга


    1. Fedcomp
      10.05.2016 08:25

      haml спасёт этот мир.


  1. igor-petrov
    10.05.2016 07:40
    +8

    Ого, сколько комментов накатали. Пробегитесь глазами по комментам автора, это же просто троллинг.


    1. Mendel
      10.05.2016 10:06

      На хабре сейчас неделя однофайловых фреймворков. Если бы он был один такой, я бы поверил что это троллинг. Но нет, он всерьез)


      1. mpakep
        10.05.2016 10:36

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


        1. kolyaflash
          10.05.2016 11:37

          Нет.


          1. mpakep
            10.05.2016 11:42

            Позволю себе процитировать чужие слова

            Людям нет никакого смысла иметь дома компьютер – Кен Олсон, президент, председатель и основатель Digital Equipment Corporation (DEC), в своей речи, данной на встрече общества World Future Society в 1977 году в Бостоне


            1. lair
              10.05.2016 11:43
              +4

              И — в отношении некоторых людей — он полностью прав.


              1. mpakep
                10.05.2016 14:55

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


                1. lair
                  10.05.2016 15:00

                  Если бы вам задать тот же вопрос сегодня вы ответили бы также?

                  А какой вопрос был задан?


                  Может в этом проблема?

                  Проблема обычно в том, что люди не хотят думать и развиваться.


  1. MatSkywalker
    10.05.2016 09:38
    +2

    Осталось сделать Telegram бота, который будет создавать сайты.


  1. DeLuxis
    10.05.2016 09:38
    +3

    Каждый РНР программист должен написать свою СМS. :P


  1. vlreshet
    10.05.2016 09:46
    +7

    https://github.com/mpak2/mpak.su/blob/master/index.php, строка 119: }else{ pre(«Ошибка обработки ошибки», $error); };

    А что если возникнет ошибка обработки ошибки обработки ошибки? ;)


  1. Nicklasos
    10.05.2016 17:00
    +1

    Возможно стоит посоветовать www.phptherightway.com
    И книгу Head First Design Patterns.


    1. SerafimArts
      10.05.2016 20:23

      Как показывает практика — большинство таких советов игнорируется в лоб, ну или отклоняется с аргументацией "Эти рекомендации никому не нужны, надо писать код, а не чистоту разводить", ну или "Мой код всё равно быстрее (<irony>на 0.00001</irony>) вашего работает", ну и так далее. Будет чудом, если эта ссылка действительно поможет автору выбраться из "зоны его комфорта".


      P.S. mpakep — по ссылке выше написаны действительно полезные вещи, крайне рекомендую всё же постараться ознакомиться. Если возникнут вопросы — с удовольствием готов ответить (и не только я) на Тостере.


      1. yara_73
        11.05.2016 00:44

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


      1. SerafimArts
        11.05.2016 13:15

        P.P.S Nicklasos Ванга мод: https://habrahabr.ru/post/283166/#comment_8890198 Отговорки почти те же, что я и перечислил.


  1. MetaDone
    11.05.2016 08:44

    https://github.com/mpak2/mpak.su/blob/master/index.php#L15 о великий Ктулху, что это?
    и это в ту же кучу
    Вообще обожаю упоротые посты про самописные cms, особенно когда люди вместо того, чтоб взять и установить большую часть через composer долго, упорно и коряво делают свою реализацию, при этом забивая болт на PSR и юнит-тесты, смешивая запросы к базе или обертки над этим с логикой, в особо запущенных случаях не используют неймспейсы, и свято веруют, что такой подход вознаградит хорошей скоростью, быстротой разработки и тем, что запустить можно будет везде.


  1. OlegLustenko
    11.05.2016 09:38

    Сколько коммитов :)
    Все реально


  1. mpakep
    11.05.2016 10:10
    -3

    Года три назад я работал в одной из студий. И там установил их разработку себе на четырехядерный комп. После первый минут работы заметил что система серьезно притормаживает, при этом приходилось после каждого изменения чистить кеш так как без кеширования одна страница в однопользовательском режиме отображалась еще дольше от 10 до 20-25 секунд. При попытке что то изменить главным аргументом было ты не придерживаешься концепции ООП у тебя не идеалогически правильный код.

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

    Наш разговор похож на беседу сектантов из разных сект.

    — Ты должен прочитать первый том нашей книги тогда тебе откроется пусть праведный.
    — Выбери себе наставника и пусть он тебе расскажет про наших богов.
    — Больше посещай мероприятия где наши идеологи расскажут тебе о том кому надо покланаться.

    Считайте меня старовером. Я поклоняюсь ветру и солнцу, деревьям и огню. Всему тому что вижу в своей повседневной жизни и что позволяет мне охотится и добывать себе еду. Многие сегодняшние «модные практики» уйдут как уже было не один десяток раз. А воздух с солнцем останется.

    Между тест хаброэффектом прошел вполне себе удачно. За сутки то, что по утверждению многих тут даже работать не должно было посетил 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


    1. ds_pro
      11.05.2016 11:01
      +1

      От ваших выводов становится только смешней.

      Ваша cms это ужасный и недокументированный код, который кое как работает.

      600 человек в сутки))))))


    1. lair
      11.05.2016 11:05
      +3

      И работает быстро, и запускается везде.

      Вот только вы не можете ответить на банальные вопросы "действительно ли везде работает", "насколько быстро быстро" и "сколько стоит это поддерживать".


      Между тест хаброэффектом прошел вполне себе удачно. За сутки то, что по утверждению многих тут даже работать не должно было посетил 601 посетитель

      Вы, кажется, не знаете, что такое хабраэффект.


    1. lair
      11.05.2016 11:06

      (del)


      1. Mendel
        11.05.2016 11:24

        Вы забыли про безглючность :)
        То что при объемах меньше 10к в сутки смотрят только на колво трафика в тарифе, и ни о какой производительности речь не идет — это понятно. Самое веселое что человек ВСЕРЬЕЗ считает что оно «нагрузку» ВЫДЕРЖАЛО.


        1. lair
          11.05.2016 11:35

          Для меня "безглючность" включена в "сколько стоит поддерживать".


        1. mpakep
          11.05.2016 11:36
          -3

          В том что оно запустилось и работает вы уже не сомневаетесь? Так смотришь и кто сопровождать будет найдется. Окно Овертона открывается…


          1. lair
            11.05.2016 11:41

            В том что оно запустилось и работает вы уже не сомневаетесь?

            Define "работает".


          1. roman_gemini
            11.05.2016 11:53
            +2

            Вы можете выложить ссылки на проекты, сделанные на вашем движке?


            1. roman_gemini
              11.05.2016 19:08

              Первый нашел — http://специальный.рф/ )


              1. lair
                11.05.2016 20:34

                … ну и я там, не напрягаясь, влетел в ошибку.


              1. lair
                11.05.2016 20:36

                http://специальный.рф/admin


                Сайт в продакшне. С аутентификацией на формах. Без https.


                Ага.


              1. Mendel
                11.05.2016 21:43

                Я правильно понимаю что это сплог/дорвей?


          1. Mendel
            11.05.2016 16:04

            Я не сомневаюсь что оно НЕ работает.
            Эпл в качестве MVP использует металические/пластиковые болванки. Они тоже «работают».
            Но если я не смог авторизоваться и при этом не получил сообщений об ошибках, а люди увидели кучу ошибок пхп в браузере, то это не более чем пруф оф концепт. И да, lair лучше я возьму пауерпоинт чем такое :)


    1. xotey83
      11.05.2016 17:16

      601 посетитель — это мелочи. Можно сказать, что трафа совсем и не было.
      Для сравнения: top.mail.ru/visits?id=152591 — проект «недвижимость» у мейлрушечки, написан на PHP с использование фрейворка (не собственного, а «нормального»), 100--200 тысяч визитов в сутки, а хитов от полумиллиона. И это не самый нагруженный сайт.
      (з.ы. я не работаю в этом проекте)

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


      1. Mendel
        11.05.2016 17:26

        Так он и 600 не выдержал. Критерий «выдержал» это отсутствие глюков.


      1. mpakep
        11.05.2016 17:28
        -1

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


        1. lair
          11.05.2016 17:43

          До полноценного годного решения этому еще далеко

          Тогда на основании чего вы говорите, что оно "работает"?


          1. Mendel
            11.05.2016 17:53
            +1

            Я думаю обоснование простое:

            10 let РАБОТАЕТ = TRUE;
            20 if РАБОТАЕТ <> TRUE then goto 10;
            


            1. MacIn
              11.05.2016 18:13

              Это на каком языке?


              1. xotey83
                11.05.2016 18:16

                Basic


                1. MacIn
                  11.05.2016 18:24

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


                  1. Mendel
                    11.05.2016 21:46

                    Да, бейсик, бейсик. Скорее всего моя ошибка. Хотя может и было где-то.


  1. Hayate
    11.05.2016 12:26
    +1

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


    1. roman_gemini
      11.05.2016 12:37

      Та не. Месседжы к коммитам зацени. Тот же стиль :)


    1. MetaDone
      11.05.2016 13:37

      кем бы ни был настоящий автор — его творения уже растащили
      http://govnokod.ru/19969
      http://govnokod.ru/19971


  1. MacIn
    11.05.2016 13:10

    Чувствую, затравят автора. Чем дальше, тем больше пустой желчи и меньше дела.


    1. Hayate
      11.05.2016 13:12

      Ну автор по делу тоже не особо отвечает.


    1. mpakep
      11.05.2016 13:20
      -1

      Травители… :)


      1. Hayate
        11.05.2016 13:54

        Может вы чужое творчество себе присвоили и троллите здесь всех?


  1. mpakep
    11.05.2016 18:39

    Кто то упорно пытается подобрать инжекцию

    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|||


    1. MetaDone
      11.05.2016 18:56
      +1

      http://phar.mpak.su/pages:admin/r:mp_pages_cat/p:1

      нашли чем гордиться)


    1. Mendel
      11.05.2016 21:52

      Чувак, я нашел твое призвание. Тебе нужно обфускатором работать.)
      А по теме «меня ломают» — XSRF вроде как. Правда могу ошибаться, там что-то страшное возле формы пряталось, я испугался и решил дальше не смотреть…


  1. mpakep
    12.05.2016 00:18
    -2

    Дайте я попробую задать вопрос. Вот к примеру выше собеседник поместил кусок кода в говнокод. Речь об этом http://govnokod.ru/19971

    Хотел бы спросить сколько людей из вас понимают что в нем делается. Реально интересно знать сколько таких. Напишите свои версии.


    1. yara_73
      12.05.2016 00:29
      +1

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


    1. Mendel
      12.05.2016 00:41
      +1

      Эм…
      Походу тут нужно использовать «модную технологию» для расшифровки — гадание на картах Карно.
      Иначе эту обфускацию не прочитать.


    1. lair
      12.05.2016 00:49
      +4

      А вы правда не понимаете, что то, что по коду нельзя понять, что в нем делается — это недостаток кода?


      Я вот не понимаю, что делается в вашем коде. Нет, если мне понадобится, я разберусь, конечно — только зачем?


    1. t_kanstantsin
      12.05.2016 00:50
      +1

      В этом и вся проблема, что таких, кто бы разобрался в этом куске кода — единицы. Особенно ради интереса, а не по рабочей задаче. Именно поэтому столько людей писали о паттернах, psr и многом другом.

      То, что Вы, автор, разбираетесь в том, что там написано, не говорит о Вас, как о профессионале своего дела — просто Вы потратили N часов на его разработку и M часов — на поддежрку. А новый человек в этом даже не захочет разбираться.


      1. Mendel
        12.05.2016 08:15
        +1

        Да! Ключевое слово — не захочет!
        Есть простой способ понять говнокод — переписать его.
        Разрезаем на кусочки, делаем вспомогательные методы и тп.
        Говнокод сохраняется, но проявляется структура.
        Вот только зачем?


    1. roman_gemini
      12.05.2016 10:11
      +2

      Вот что получилось — https://gist.github.com/pldin601/a441ffacaeec6c43e0ff3830c12bab77

      Чтобы прочитать и понять Ваш код мне пришлось сделать его более линейным. Из того, что я понял за 30 минут, могу сказать, что в Вашем коде делаются очень разные вещи). Я тоже любитель писать свои велосипеды. Примерно так я начинал писать свои первые проекты. Но у меня небыло каких-то особых убеждений и я часто все переписывал с нуля поэтому с каждым разом код становился все проще и проще. У Вас, видимо, это первый крупный проект поэтому Вы им так гордитесь. Я когда-то в школе года 2 писал «убийцу WinAmp'а». Мне тогда казалось это гениальным. Что не функция то — шедевр))


      1. mpakep
        12.05.2016 16:28
        -4

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

        На каждом увовне не зря стоит иф. Он проверяет условия для дальнейшей работы и при невыполнении выдает ошибку.

        Сейчас вы не сделали его понятнее. Вы его испортили. Он не будет работать. Попробуете еще раз?


        1. lair
          12.05.2016 16:30
          +1

          То, что вы сделали это не то что требовалось

          О, у нас началось обсуждение того, что "требовалось". А где требования? Или хотя бы тесты, по которым можно определить требования?


        1. roman_gemini
          12.05.2016 16:41
          +2

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

          О каком конце идет речь? В Вашем коде здесь http://govnokod.ru/19971 после отработки крайнего блока else ничего нет.

          Я же делал это не для того чтобы Вам угодить, а чтобы попытаться разобраться. Спортивный интерес.
          Пробовать дальше не интересно :)


          1. lair
            12.05.2016 16:58
            +1

            Более того, мы же понимаем, что для имитации "нужного" поведения достаточно завернуть всю эту бороду в одну функцию и делать return из нее. Что там после нее вызывает скрипт — не наше дело.


  1. mpakep
    12.05.2016 01:18
    -7

    То есть небольшое отклонение от шаблонов и никто не способен понять что здесь написано.

    Так кто находится в зоне комфорта? Кому надо выбраться из нее и попробовать разобраться в том, что не соответствует его шаблонам?
    Ведь проще всего крикнуть что говно то, в чем я не разобрался. Если написано не по книжке которую я прочитал последней или используя другой подход не как тот к которому привык. Зачем мне разбираться? Я и без этого знаю что это все говнокод!

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

    Задумайтесь. Думающие люди в обществе пяти идиотов становятся изгоями. Идиоты просто лайкать будут только то, до чего дотягивается их умишко. Все что им не под силу будут отвергать как слишком сложное. Я не стану тратить N часов чтобы разобраться в этом. Патерн — оторвать бумажку, подтереться. Рулон закончился — разрыв патерна. Это к вопросу о 95 процентов населения. Извините что редко пишу. Нет возможности это делать чаще. Похоже для среднестатистического населения то, о чем говорю также трудно для восприятия как и код в котором вы так и не смогли разобраться.


    1. SerafimArts
      12.05.2016 02:04

      Разобраться можно, только это рутина и требует довольно много времени. Другой вопрос — зачем так писать, чтобы в этом, для того, чтобы понять — требуется тратить столько времени? ;)


      Для примера:


      // Вместо
      if ($a && $b === $c && $d !== $e || $f !== $a && $b !== $g) {
          // ...
      }
      
      // Писать
      $isValidSome = $a && $b === $c && $d !== $e;
      $isValidAny = $f !== $a && $b !== $g;
      
      if ($isValidSome || $isValidAny) {
          // ...
      }

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


      1. SerafimArts
        12.05.2016 02:13

        P.S. Избавление от переносов строк (некоторых, мы же не хотим лишать полностью код читаемости?) и пробелов во всём вашем коде — добавит элитарности, да такой, что в нём начнут разбираться и "выходить из зоны комфорта" ещё меньше людей. Как же вы раньше до этого не додумались? Смотрите как здорово! https://gist.github.com/SerafimArts/2bc70b28c086552057d1831ffb47bff6


        Если вы не поняли что написано в файле "после", то у вас "проблемы восприятия кода, где больше трёх ифов (с)"


        1. Hayate
          12.05.2016 07:18

          И в экран намного лучше помещается.


    1. Delphinum
      12.05.2016 02:24
      +2

      Естественно это мы такие хилые программисты, что даже не можем понять вашего 11 лвлного вложения if'ов.


    1. Hayate
      12.05.2016 05:11
      +3

      Вынужден вас расстроить, если вы не троллите, но в зоне комфорта находитесь как раз к сожалению вы. И вызовы вы ищете не в том месте.


    1. MetaDone
      12.05.2016 08:18
      +3

      Почитайте статью по ссылке. Как говорил дядюшка Фаулер, «Любой дурак может написать код, понятный компьютеру. Хорошие программисты пишут код, понятный людям.». Неужели вы, когда писали подобное, ни разу не подумали, что где-то повернули не туда и что можно было сделать проще или просто понятнее?


    1. Mendel
      12.05.2016 08:44
      +3

      Еще раз повторю, как для олигофренов:
      час моего времени стоит 25$.
      я присылаю свой код знакомому с ценой часа в 50$ с просьбой оценить.
      Он посмотрел код за 15 минут, подсказал ошибку и посоветовал оптимизацию.
      Ему не сложно, ведь вчера я ему подсказал репозиторий morozovsk чем сэкономил ему пару дней которые он бы писал сервер сам. Я сэкономило время ему потому, что можно за 15 минут вдумчиво изучить документацию и еще за 15 минут изучить код. И принять решение что в случае чего его можно поддерживать самому. После чего мой знакомый форкнул репу, и «завтра» сделает пару пулреквестов с теми фичами которых ему не хватало.
      «Послезавтра» мне тоже понадобится вебосет-сервер, тоже с теми фичами что сейчас понадобились моему знакомому, и я получу уже готовый код.
      Все в выигрыше. Это и есть современная мода которая вам так не нравится.

      А что предлагаете вы? Вы предлагаете потратить 5-10 часов на чтение кода который делает тоже самое что делал мой код который можно прочитать за 15 минут. При этом заранее известно что найденные после этого ошибки исправляться не будут, потому что ни одной названной вам здесь ошибки вы даже не признали, не то чтобы исправить. Вопрос — зачем?
      Нет, некоторые тут читают ваш говнокод из спортивного интереса. Некоторые чтобы показать другим, поржать. Другие чтобы тыкать носом в это Г. учеников, чтобы те поняли почему их заставляют писать грамотно…

      Черт, это же как нужно нас неуважать, чтобы самому лениться разбивать код по 20 строк и до трех уровней вложенности (большего от вас и не ждут), а ожидать что КАЖДЫЙ кто прочитал это — будет расшифровывать вашу лапшу…


    1. lair
      12.05.2016 11:04
      +1

      То есть небольшое отклонение от шаблонов и никто не способен понять что здесь написано.

      Не "не способен", а "не хочет тратить время".


      Так кто находится в зоне комфорта?

      Ну да, я нахожусь в зоне комфорта. И, что характерно, горжусь и доволен тем фактом, что я работаю в зоне комфорта. А что, должно быть иначе?


      Кому надо выбраться из нее и попробовать разобраться в том, что не соответствует его шаблонам?

      Да в том-то и дело, что не надо. Кому было настолько интересно — те пошли, посидели и разобрались, но никому это не надо — потому что, к счастью, практически никому не надо по работе иметь дело с таким кодом.


      Зачем мне разбираться?

      Именно. Зачем?


      Судя по комментариям у людей проблема восприятия того, где больше трех ифов.

      Ну да, объем воображаемого стека в голове у людей ограничен. Для вас это новость? У вас он тоже ограничен.


      Вы не понимаете простой вещи: любой хороший программист может написать код, подобный вашему. Не будет, потому что его учили (или он сам научился) так не делать, но может. Но вот можете ли вы написать хорошо структурированный и читаемый (в терминах МакКоннела) код?


      1. Mendel
        12.05.2016 11:13

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

        Я видимо плохой программист. Я не могу писать такой влажный (wet) и нечитаемый код. Хотя гены говнокода во мне живут прочно, но мне не хватит усидчивости на ТАКОЕ количество абсолютно бесполезной работы.
        Вот реально не могу. Сейчас сижу и прокрастинирую тут, когда нужно заставить себя и писать подобный говнокод чтобы закончить очередной проект с адским легаси, и в очередной раз поклястся себе что «да больше никогда, и ни за какие деньги я таких заказов не возьму»… Ну да ладно, побольше воздуха в легкие, начинаю погружение в фекалии) Ушел работать…


        1. lair
          12.05.2016 11:14

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

          … это как раз называется "не хочу". Но это уже вопрос философский.


    1. MacIn
      12.05.2016 12:29

      Зачем мне разбираться? Я и без этого знаю что это все говнокод!

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


      1. mpakep
        12.05.2016 17:34
        -4

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

        Для того чтобы назвать любой код говнокодом достаточно чтобы он был больше десяти строк. Это слишком сложно и разбираться что в нем происходит просто не обязательно. 95% людей не могут разобраться в коде и это достаточный повод для плевка в его сторону. Для себя я сделал вывод. Никто так и не смог даже предположить что там делается. А единственный кто попытался переделать не учел его функциональны особенности. Остальные считают выше своего достоинства разбираться в этом (или не могут так как относятся к 95% населения) скорее последнее.


        1. lair
          12.05.2016 17:37

          Единственная претензия к коду в том, что у него больше трех иф подряд. Верно?

          Нет, неверно.


          1. mpakep
            12.05.2016 18:44
            -3

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

            Представьте — вы доказываете 223 комента что код говно и все это время один человек в него заглянул.
            Это достижение. 223 коммента умничать не зная даже о чем говоришь.
            Лайр, держитесь до последнего. Напишите еще пятьдесят комментов что мне нужно изменить в себе чтобы вы соизволили разобраться в предмете разговора. Извините, что я вывожу вас из зоны комфорта, заставляю разбираться в этом жутко большом количестве условий.


            1. lair
              12.05.2016 18:55

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

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


              Представьте — вы доказываете 223 комента что код говно и все это время один человек в него заглянул.

              Прекрасно, а теперь докажите это утверждение.


              1. roman_gemini
                13.05.2016 08:20

                Если код использует присвоения внутри if (и вообще присвоения внутри выражений) — то это тоже, скорее всего, говнокод.


                Очень часто используется присвоения внутри выражений. Например:

                while ($file = readdir($dir));
                while ($row = $pdo->fetch());


                Но как и везде — главное не злоупотреблять этим.


                1. Mendel
                  13.05.2016 09:08
                  +1

                  В идеале не делать так вообще. Это и анализаторам усложнение и человеку сложнее.
                  Все мы регулярно плодим технический долг, и я не грамнаци, но я за то, чтобы человек четко понимал что это — технический долг. Не топикстартер конечно, это невозможно)


                  1. roman_gemini
                    13.05.2016 09:34

                    А как бы Вы написали этот блок?

                    while ($row = $pdo->fetch()) {
                    doSomething($row)
                    }


                    Допустим, нужно обработать все записи в таблице, и известно, что записей несколько миллионов.


                    1. Mendel
                      13.05.2016 10:34
                      +1

                      Или я еще не проснулся, или

                      PDOStatement implements Traversable


                      1. roman_gemini
                        13.05.2016 11:08

                        Проверил — так и есть.


                        1. Mendel
                          13.05.2016 11:29
                          +1

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

                          while (false !== ($entry = readdir($handle)))

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


                          1. roman_gemini
                            13.05.2016 11:32

                            Документация PHP — отдельный разговор. Отсюда наверное и появляются подобные велосипеды. :)


                1. lair
                  13.05.2016 10:38

                  Ну вот потому я и написал "скорее всего". Впрочем, если этого можно избежать, я препочту избежать.


                  1. Mendel
                    13.05.2016 10:54

                    Ну избежать то всегда можно. Просто иногда это неоправданно усложняет код.
                    Как и любой технический долг — пользуйтесь, но осторожно.


            1. MetaDone
              12.05.2016 19:51
              +1

              Вы, кажется, даже не понимаете суть претензий к Вашему коду. Одно дело, когда код сложный из-за сложности предметной области того, что в этом коде реализовано, к примеру расчет какой-либо сложной траектории, расчета расстояния по широте и долготе и т.п… Но ваш код сложный не из-за заумных алгоритмов, не из-за того, что он специфичен для какой-то области, а из-за кривых рук его автора.
              Можете привести пример того, как вписать в вашу систему вход через разные соцсети? Или bbcode? Вы говорите, что ваш код решает задачу, но как видно из скрина, что я присылал раньше, он и с ограниченными задачами не справляется.

              Напишите еще пятьдесят комментов что мне нужно изменить в себе

              Эффект Даннинга — Крюгера когда-нибудь пройдет.


            1. Mendel
              12.05.2016 21:30
              +1

              Общаясь с вами я медитирую…
              Я смотрю на очередной ваш комментарий… когда вылажу из выгребной ямы кода написанного таким же талантом как ты. Вдохнуть свежего воздуха. Я читаю то что здесь написано… вдыхаю, выдыхаю. А потом все проклятия и маты которые звучат в моей голове, и уже были переправлены с автора говношедевра с которым я работаю на вас — мысленно провожу рефакторинг текста. Чтобы без мата. Без оскорблений.
              Без эпитетов. И отправляю.
              Там то я даже переписать почеловечески то что правлю не могу. VQMOD!
              А в тюрьме ужин. Макароны. А рядом открыт другой проект. Который я в перекурах таки дописываю. Там нет дедлайна. Но нет и дерьма. И «внычку» от партнера и своей совести которые кричат «не трогай! добей это дерьмо, сдай, забудь, и всё!» — «внычку» я пишу то что было начато еще осенью. Ведь надо сдать. И вижу как в перерывах. В перекурах (ведь я не курю, а значит имею право потратить время в свое удовольствие, на нормальный код). Растет нормальный проект. Я трачу на него единицы процентов времени, в сравнении со вторым. Говнистым. Но функционал растет на порядок быстрее.
              А еще я делаю в перерывах то, что вам и не снилось — я делаю рефакторинг. Сокращаю размеры уже написанных и работающих методов. Исправляю и дополняю описания. Перемещаю куски кода в более подходящие классы. Это доставляет почти физическое удовольствие после копания в дерьме на подобии вашего кода…


              1. roman_gemini
                13.05.2016 11:45

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


        1. Delphinum
          12.05.2016 18:13

          Как мы выяснили выше никто даже не пытался понять что в нем делается

          Вы хотите чтоб у нас глаза вытекли? )
          Никто так и не смог даже предположить что там делается

          Идеи, заложенные в вашем коде слишком сложны для нас, простых сметрых. Я долго пытался постичь смысл этого кода http://govnokod.ru/19971 но мой друг, сказал что он похож на кулак ( С этими словами я решил закончить изучение, так как живот уже сводили судороги.


          1. Hayate
            13.05.2016 08:49

            Скорее на фак.


        1. MacIn
          12.05.2016 18:24
          +1

          Единственная претензия к коду в том, что у него больше трех иф подряд. Верно?

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

          Для того чтобы назвать любой код говнокодом достаточно чтобы он был больше десяти строк

          Нет. Код может быть замечательным и даже при 1000 строк, при правильном разбиении. Ваш — нет.

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

          Нет, 95% не имеют мотивации, чтобы в нем разобраться. Потому что это трудно. Не сложно; трудно. Заплатите любому из этих 95% — почти наверняка, если сумма достаточна, он разберется. Но копаться в этом фарше просто так — не, спасибо.

          Остальные считают выше своего достоинства разбираться в этом (или не могут так как относятся к 95% населения) скорее последнее.

          Вы подводите людей к деревенскому сортиру и предлагаете посмотреть, какое сокровище лежит на дне. Притом, это может быть действительно сокровище, но это ясно только с ваших слов. Теперь любого, кто отказался нырять, вы называете неумехой, входящим в 95%. Именно из-за такого подхода и «упаковки» ваш код отнесли к говнокоду.

          Люди не не могут, а не хотят.


        1. roman_gemini
          12.05.2016 19:27

          Никто так и не смог даже предположить что там делается.


          Мне интересно, а как Вы сами себе представляете ответ на этот впрос?

          На вскидку,

          if ($diff = array_diff_key($_GET, array_filter($_GET))) {
          mpre("Входящие параметры содержат пустые значения", $diff);
          }


          Поиск пустых значений в массиве используя array_diff_key и array_filter — довольно оригинально…


  1. barker
    12.05.2016 08:48

    Не, ну заканчивайте. Видно же, что автор просто угарает)

    Наверное…


    1. Mendel
      12.05.2016 09:15

      Можно подумать что в начале 90-х вы писали более читабельный код чем у автора.
      Но тогда не было гитхаба. Коммиты свежие, кода много. Так что говнокод аутентичный.
      Версию о том, что может кто-то нашел чужой код и троллит тут рассматривали.
      Бритва Оккама — если автор этого кода существует, то троль тут лишняя сущность.
      Ники совпадают.
      Автор делал какие-то правки на доменах совпадающих с ником, и читал оттуда логи…
      Вероятность фейка конечно сохраняется, но она очень уж мизерна.


  1. roman_gemini
    12.05.2016 10:16

    https://www.youtube.com/watch?v=oRbtiySesfQ
    Представляю как он про фреймворки рассказывает, паттерны и т.д)


    1. Hayate
      12.05.2016 10:56

      Это идеалити.


  1. dozent
    13.05.2016 09:54
    +1

    Что вы к нему пристали, пускай пишет человек как хочет, это же его личные проекты, ему в них разбираться. Единственная просьба к автору: не ходите в IT компании работать, поберегите нервы коллег [да вас и не возьмут]
    P.S. все-таки надеюсь, что автор тролль и ловит просто тонны позитива, смотря на то, что делается в комментах