В качестве предисловия хотелось бы сказать, что данная запись, хоть и имеет ценность для it-сообщества, носит характер истории. Не очень-то и весёлой.

Начало


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

image

Сам МЦКО


Суть в том, что этот дневник был ужасен. Он работал для всей Москвы, что означало постоянные перебои в доступе и невозможность зайти и просто посмотреть домашнее задание после пяти часов дня. Дизайн же навевал смутные мысли о фрилансере, которому эту работу и поручили.

Развитие


Всё это в сумме делало взаимодействие трудным. И, разумеется, я решил исправить эту несправедливость, ведь кто, если не я?

Поначалу была мысль сделать сайт-парсер, который бы, используя api, получал нужную информацию. Но тут возникла проблема — API у МЦКО попросту не было. Поскольку на тот момент парсить страницы я не умел, то решил создать расширение для браузеров, которое бы облагораживало сайт.

Сам проект: addons.opera.com/ru/extensions/details/mcko-styler/?display=ru



Всё лучше, чем оригинал


Это оказалось не таким уж сложным делом – всего лишь надо было при загрузке страницы при помощи javascript вставлять стили с !important. Разумеется, привожу исходный код расширения.

Время текло, постепенно накапливались загрузки (в магазине приложений Google их набралось более 800), но мне хотелось чего-то большего. Я решил не исправлять порочную систему, а создать свою, новую и удобную, и предложить её для использования хотя бы в нашей гимназии.

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



Мой прототип


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

Для реализации такого заноса оценок я использовал jquery. При клике на поле оно превращалось в input type=«text» и после ввода оценки и клика в другом месте запускало ajax-запрос, который, собственно, и отправлял данные к файлу, заносящему их в базу.

Код именно этого файла: j.mp/perfect-journal



Идеальный журнал


Кульминация


Понемногу доделав проект, я, как и предполагалось заранее, обратился к руководству сего проекта, которые уже успели обзавестись своим собственным офисом на Шаболовке, но получил отказ. Оказывается, был принят закон, по которому (Внимание!) ни одна школа, подключённая к МЦКО, не могла использовать другой дневник.

Развязка


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

Исходный код проекта: bitbucket.org/myrrec/wedney.do

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


  1. IncorrecTSW
    12.05.2015 11:43
    +8

    $connect = mysql_connect(HOST,USER,PASS) or die(mysql_error());

    Не надо так…


    1. myrrec Автор
      12.05.2015 13:17
      +2

      Уже отмаливаю. А если честно, сегодня же исправлю


      1. Invision70
        12.05.2015 14:30
        +5

        да и mysql_* давно уже deprecated


        1. DjOnline
          12.05.2015 17:56
          -5

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


          1. IncorrecTSW
            12.05.2015 18:16
            +3

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


            1. DjOnline
              12.05.2015 19:29
              -5

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


              1. IncorrecTSW
                12.05.2015 19:35
                +4

                Энтерпрайз на PHP который использует функции которые более 5 лет deprecated. Я видимо в другом мире работаю.


                1. msfs11
                  13.05.2015 14:06

                  Наша страховая до сих пор работает на системе, разработанной в 2007 году на php4. Бизнес-функции выполняет же. Сейчас, правда, переходим на другую КИС на Java.


              1. gaelpa
                12.05.2015 19:36

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


            1. SerafimArts
              12.05.2015 20:48
              +2

              Выпилили. В php 7 его действительно уже нет: https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7


    1. mc_dir
      12.05.2015 14:43
      +1

      попробуйте PDO


      1. myrrec Автор
        12.05.2015 14:58

        Собирался, спасибо за совет


        1. Awake
          13.05.2015 10:51

          mysqli тоже вариант


        1. Strate
          18.05.2015 21:08
          +1

          Лучше пробуйте сразу Doctrine DBAL


          1. myrrec Автор
            18.05.2015 21:29

            Уже перевожу на Laravel. Адрес будущего репозитория на Github


    1. IncorrecTSW
      12.05.2015 15:01
      +1

      Судя по минусу тут есть ярые защитники mysql_*. Шок. =)


  1. AlexanderS
    12.05.2015 12:18
    +18

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

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

    И вроде привыкнуть давно пора к реалиям жизни.
    А порой прорывается.
    Извините.

    Автору + за реальую работу, которую должны были сделать другие.


    1. Ashot
      12.05.2015 14:02

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

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


      1. AlexanderS
        12.05.2015 14:15

        Я имел ввиду, что этот диалог происходит вообще после заверешния всех работ.

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


        1. Ashot
          12.05.2015 17:19

          Не давите на больное…


    1. NickKolok
      12.05.2015 19:23

      Мой совет — копните в сторону Распоряжения Правительства РФ №2299-р от 17 декабря 2010 года. Если исходники этого дела не открыты — спрашивайте, почему. Написать заявление в какой-нибудь Рособрнадзор — пять минут на заполнение формочки на сайте ведомства.
      Может, и удастся доказать, что те, кто внедряет проприетарное ПО в образовании, саботируют универсальную концепцию импортозамещения.


      1. Delphinum
        13.05.2015 00:56

        Может, и удастся доказать, что те, кто внедряет проприетарное ПО в образовании

        А вы думаете это не государство внедряет? Дали 10 миллионов на внедрение, из них 5 ушло в карман и чхать они хотели на закон.


  1. Invision70
    12.05.2015 14:37
    +7

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


    1. myrrec Автор
      12.05.2015 14:59
      +4

      Не за что, всегда рад стараться ради объективной критики


      1. vlreshet
        12.05.2015 15:10
        +4

        Объективная? Да легко :)

        • «Магические цифры» в коде. Обилие кода типа «unset($array[0])», без объяснений почему именно ноль, и зачем вообще, и почему дальше ещё 3-тий элемент так же само удаляется
        • Практически нет архитектуры. Файлы хаотично иклюдят друг друга, без чёткой схемы
        • В коде акская смесь HTML PHP и SQL. Нет ни шаблонов, ни отдельно вынесенной работы с базой
        • вот_такая_аннотация. Кто-то поспорит, но как по мне — это минус
        • Кодстайл местами ужасен


        1. myrrec Автор
          12.05.2015 15:22
          +4

          Я же и говорю — рад стараться.
          1)Из массива на главной странице удаляются ненужные элементы, чтобы не засорять и без того, мягко говоря, немалое количество данных
          2) Согласен, как и предыдущему комментатору, скажу, что летом буду переводить проект на Laravel и создавать хоть какую-нибудь архитектуру
          3)Перевожу на PDO по, опять же, совету комментатора
          4)Определённо минус, но придумывать более правильные аннотации попросту не хватает времени, хотя это, разумеется, не оправдание
          5)Практически везде, согласен. Вот и переписываю с нуля(пока закрытый репозиторий Wedney 2.0
          И пожалуйста, исправьте «акская смесь».


          1. Invision70
            12.05.2015 17:11

            Как правило пункт 2 не всегда работает. Только представьте как трудно сопровождать подобный проект, сейчас он открыт и благодаря этой статье у вас отличный шанс получать полезные pull request'ы, развиваться дальше… увы… Желаю удачи и процветания проекту!


            1. myrrec Автор
              12.05.2015 19:36

              Огромное спасибо.


  1. yjurfdw
    12.05.2015 15:10
    +3

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

    $user = DB::fetch("ass",DB::query(DB::select("id,login,pass,class","d_users","login='".$login. "' OR email='".$login. "'")));
    

    доверия не внушают.
    Но за усердие Вам 5!


    1. myrrec Автор
      12.05.2015 15:17
      +1

      Огромное спасибо. Проблема, наверное, в том, что, когда я начинал этот проект, то о фреймфорках понятия не имел. В июне попробую перевести Wedney на Laravel — он мне приглянулся.


    1. Delphinum
      12.05.2015 18:50
      +7

      Почему многие стремятся писать велосипеды?

      Потому что многие новички, а новички должны писать велосипеды.


  1. AlexBin
    12.05.2015 17:56

    Такие бюрократические проблемы не только в системе образования. Например в ISP нельзя (было?) использовать самописный биллинг, что доставляет множество проблем и костылей.

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


    1. evnuh
      12.05.2015 21:20
      +3

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


      1. AlexBin
        13.05.2015 01:11

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

        Лично я жалею, что мне в свое время не посоветовали что-то нормальное, в результате чего я потратил кучу времени на освоение «ООП, фреймворков и архитектуры» на неповоротливом и невыразительном языке, в котором вместо решения поставленной задачи, я решаю проблемы языка (глупый был путь). И хоть теперь я тщательно выбираю инструменты, старые проекты проще поддерживать костылями, чем полностью переписывать, увы.


    1. GeXoGeN
      13.05.2015 10:24

      7 лет назад работал в достаточно крупном ISP (в рамках города). Был самописный биллинг, при чём по этому биллингу ещё и аттестация была регулярная.


      1. AlexBin
        13.05.2015 12:30

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


        1. GeXoGeN
          14.05.2015 09:25

          Возможно, не так поняли меня. Аттестация сотрудников на знание биллинговой системы была. Услуги, статусы, переходы, время жизни и т.п.


  1. AlexBin
    13.05.2015 01:06

    del


  1. JeStoneDev
    13.05.2015 04:19
    +3

    Вспомнилась статья habrahabr.ru/post/239647
    Сначала подумал копипаст, а нет… человек просто на те же грабли наступил


  1. Moskus
    13.05.2015 06:34

    Чисто случайно, для наложения собственных стилей есть готовые расширения для всех browser-ов, например — Stylish для Firefox, в том числе с автоматическим обновлением стилей через userstyles.org


  1. vz10
    13.05.2015 06:42
    +1

    А у нас (в Харькове) централизованных электронных дневников нет, поэтому я сделал все примерно тоже самое, но для себя, никому из учителей не навязывал. Еще и прикрутил к нему Arduino с NFC reader-ом, сделал типа пропускную систему в кабинет, чтоб автоматически учитывать посещаемость. Все работает на ура и детям нравится.
    Но думаю, что и к нам скоро придут с централизованным сервисом и придется прикрывать лавочку.


    1. aslanalexander
      13.05.2015 08:08

      А у вас на Украине вообще как дела с автоматизацией образования обстоят дела?


      1. vz10
        13.05.2015 08:12

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