Начало
Берёт моя история начало в сентябре прошлого года – именно тогда нашей школе оказали большую честь и ввели новый, абсолютно не испытанный электронный дневник, журнал, форум и чат в одном лице, именуемый также «Московским регистром качества образования». И никого не волновало, что наша гимназия уже тогда была подключена к проекту «Дневник.ру» и очень неплохо развивалась там. Но суть не в этом.
Сам МЦКО
Суть в том, что этот дневник был ужасен. Он работал для всей Москвы, что означало постоянные перебои в доступе и невозможность зайти и просто посмотреть домашнее задание после пяти часов дня. Дизайн же навевал смутные мысли о фрилансере, которому эту работу и поручили.
Развитие
Всё это в сумме делало взаимодействие трудным. И, разумеется, я решил исправить эту несправедливость, ведь кто, если не я?
Поначалу была мысль сделать сайт-парсер, который бы, используя 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)
AlexanderS
12.05.2015 12:18+18По идее, внедрение информационных технологий на базе компьютерной техники должно вроде как сильно упрощать жизнь. То, что это очевидно для обывателя — это факт: гораздо проще посмотреть в компьютере/смартфоне прогноз погоды на неделю вперёд, нежели идти и покупать газетку или ждать вечернего выпуска новостей. И вроде бы и наши родные руководители обществом тоже не оспаривают этот факт, соглашаются, идут навстречу вызову времени и новым тенденциям. Но когда сталкиваешься с проявлением бюрократического понимания как эти технологии должны «помогать» обществу почему-то первые мыли нечто типа «зачем было делать именно так», «как там можно было сделать», «какой в этом смысл»?
Я, конечно, все понимаю. Выделили денег. Освоили. На остатки нашли человека который за копейки сделал как умел. Техническая консультация, тестирование и отладка, исселодование юзабилити — это нецелевые траты типа. Говорю как человек, который с этим столкнулся: проконсультироваться вообще даже в ум не приходит (!), вместо этого начинается поиск исполнителя, по связям и знакомым. А когда все сделано приёмка происходит в стиле: куда тут тыкать? — понятно! Не заказчик говорит как надо делать, что бы было удобнее пользователям, а исполнитель говорит заказчику что надо делать вот именно так, так как иначе работать не будет или он не сможетсделать :) Потом это все спускается обязаловкой, так как нужно отчитаться о внедрении, стребовать еще на поддержку и развитие и т.д. и т.п. И в этой огромной машине никого не волнует что с этим будет делать конечный пользователь. Как таковой обратной связи не закладывается вообще нигде! Система может даже вообще быть неработоспособной к внедрению. Тратятся средства и время, куча народу что-то делает (реально что-то делает, люди заняты, без дела-то не сидят), а потом на выходе конечный пользователь уныло смотрит на результат чудовищной некомпетентности…
И вроде привыкнуть давно пора к реалиям жизни.
А порой прорывается.
Извините.
Автору + за реальую работу, которую должны были сделать другие.Ashot
12.05.2015 14:02Не заказчик говорит как надо делать, что бы было удобнее пользователям, а исполнитель говорит заказчику что надо делать вот именно так, так как иначе работать не будет или он не сможетсделать :)
Только как правило заказчик исполнителя не слушает, и получается то, что на первом скриншоте. К сожалению.
Если исполнитель толковый, конечно, и предлагает толковые вещи.AlexanderS
12.05.2015 14:15Я имел ввиду, что этот диалог происходит вообще после заверешния всех работ.
Понятно дело, что по идее стороны должны приходить к компромиссу. Т.к. один должен выставлять внятное ТЗ (а для этого нужна техконсультация) как он это видит, а исполнитель-разработчик аргументированно корректировать его. И в результате этого процесса получается какой-то сбалансированный продукт. Только такого диалога нет изначально, вот в чем беда.
NickKolok
12.05.2015 19:23Мой совет — копните в сторону Распоряжения Правительства РФ №2299-р от 17 декабря 2010 года. Если исходники этого дела не открыты — спрашивайте, почему. Написать заявление в какой-нибудь Рособрнадзор — пять минут на заполнение формочки на сайте ведомства.
Может, и удастся доказать, что те, кто внедряет проприетарное ПО в образовании, саботируют универсальную концепцию импортозамещения.Delphinum
13.05.2015 00:56Может, и удастся доказать, что те, кто внедряет проприетарное ПО в образовании
А вы думаете это не государство внедряет? Дали 10 миллионов на внедрение, из них 5 ушло в карман и чхать они хотели на закон.
Invision70
12.05.2015 14:37+7Спасибо за исходники, отличный пример того, как не стоит писать код.
myrrec Автор
12.05.2015 14:59+4Не за что, всегда рад стараться ради объективной критики
vlreshet
12.05.2015 15:10+4Объективная? Да легко :)
- «Магические цифры» в коде. Обилие кода типа «unset($array[0])», без объяснений почему именно ноль, и зачем вообще, и почему дальше ещё 3-тий элемент так же само удаляется
- Практически нет архитектуры. Файлы хаотично иклюдят друг друга, без чёткой схемы
- В коде акская смесь HTML PHP и SQL. Нет ни шаблонов, ни отдельно вынесенной работы с базой
- вот_такая_аннотация. Кто-то поспорит, но как по мне — это минус
- Кодстайл местами ужасен
myrrec Автор
12.05.2015 15:22+4Я же и говорю — рад стараться.
1)Из массива на главной странице удаляются ненужные элементы, чтобы не засорять и без того, мягко говоря, немалое количество данных
2) Согласен, как и предыдущему комментатору, скажу, что летом буду переводить проект на Laravel и создавать хоть какую-нибудь архитектуру
3)Перевожу на PDO по, опять же, совету комментатора
4)Определённо минус, но придумывать более правильные аннотации попросту не хватает времени, хотя это, разумеется, не оправдание
5)Практически везде, согласен. Вот и переписываю с нуля(пока закрытый репозиторий Wedney 2.0
И пожалуйста, исправьте «акская смесь».Invision70
12.05.2015 17:11Как правило пункт 2 не всегда работает. Только представьте как трудно сопровождать подобный проект, сейчас он открыт и благодаря этой статье у вас отличный шанс получать полезные pull request'ы, развиваться дальше… увы… Желаю удачи и процветания проекту!
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!myrrec Автор
12.05.2015 15:17+1Огромное спасибо. Проблема, наверное, в том, что, когда я начинал этот проект, то о фреймфорках понятия не имел. В июне попробую перевести Wedney на Laravel — он мне приглянулся.
Delphinum
12.05.2015 18:50+7Почему многие стремятся писать велосипеды?
Потому что многие новички, а новички должны писать велосипеды.
AlexBin
12.05.2015 17:56Такие бюрократические проблемы не только в системе образования. Например в ISP нельзя (было?) использовать самописный биллинг, что доставляет множество проблем и костылей.
P.S.: Раз уж предстоит все переписать и освоить кучу новых технологий, может, пока не поздно, стоит хотя бы почитать про другие языки и фреймворки? Есть ведь всякие джанги, рельсы, фласки.evnuh
12.05.2015 21:20+3Не стоит начинать извечный спор про языки. Автору на данном этапе хватает энтузиазма на свершения, но не хватает фундаментального опыта разработки (ООП, фреймворки, архитектуры и т.д.). Так тогда гораздо приятнее освоить разработку на том языке, с которым знаком, нежели тыркаться во всё подряд. А разработка она одинакова везде, на любом языке. Максимум — смена парадигмы.
AlexBin
13.05.2015 01:11Может Вы и правы. Однако, я не говорил тыркаться во все подряд, я предложил просто почитать для ознакомления. Мне кажется, что язык правильнее выбирать после какого-то сравнения, а не по принципу «чем умею, тем и заколачиваю». Инструмент лучше выбирать именно на данном этапе, а не когда проект уже почти написан и находится в стадии «блин, если бы я знал, что этот язык не умеет нормально обрабатывать ошибки...»
Лично я жалею, что мне в свое время не посоветовали что-то нормальное, в результате чего я потратил кучу времени на освоение «ООП, фреймворков и архитектуры» на неповоротливом и невыразительном языке, в котором вместо решения поставленной задачи, я решаю проблемы языка (глупый был путь). И хоть теперь я тщательно выбираю инструменты, старые проекты проще поддерживать костылями, чем полностью переписывать, увы.
GeXoGeN
13.05.2015 10:247 лет назад работал в достаточно крупном ISP (в рамках города). Был самописный биллинг, при чём по этому биллингу ещё и аттестация была регулярная.
AlexBin
13.05.2015 12:30Ну я уже не помню, но вот видимо аттестация и требуется, чтобы можно было его использовать. Но это хотя бы что-то, а в системе образования вообще, как я понял, нельзя самописное.
GeXoGeN
14.05.2015 09:25Возможно, не так поняли меня. Аттестация сотрудников на знание биллинговой системы была. Услуги, статусы, переходы, время жизни и т.п.
JeStoneDev
13.05.2015 04:19+3Вспомнилась статья habrahabr.ru/post/239647
Сначала подумал копипаст, а нет… человек просто на те же грабли наступил
Moskus
13.05.2015 06:34Чисто случайно, для наложения собственных стилей есть готовые расширения для всех browser-ов, например — Stylish для Firefox, в том числе с автоматическим обновлением стилей через userstyles.org
vz10
13.05.2015 06:42+1А у нас (в Харькове) централизованных электронных дневников нет, поэтому я сделал все примерно тоже самое, но для себя, никому из учителей не навязывал. Еще и прикрутил к нему Arduino с NFC reader-ом, сделал типа пропускную систему в кабинет, чтоб автоматически учитывать посещаемость. Все работает на ура и детям нравится.
Но думаю, что и к нам скоро придут с централизованным сервисом и придется прикрывать лавочку.aslanalexander
13.05.2015 08:08А у вас на Украине вообще как дела с автоматизацией образования обстоят дела?
vz10
13.05.2015 08:12В общем и целом дела обстоят хреново. Есть куча инициатив, но они выглядят примерно таким образом — кто-то продавил через РАЙОНО или ГОРОНО какую-то новую идею и все школы заставляют внедрять, причем бумажную работу никто не отменяет, просто добавляют еще все тоже самое, только в цифровом варианте. Потом пройдет годик-другой, придет другой начальник и через него продавят другую инициативу, тогда все школы забывают про предыдущую и начинают с матюками осваивать новое, которое такое же дерьмовое, как старое.
Но не исключено, что это чисто Харьковская проблема, так как я разговаривал с людьми из Днепропетровска, там у них электронные журналы и электронная отчетность развивается семимильными шагами.
IncorrecTSW
Не надо так…
myrrec Автор
Уже отмаливаю. А если честно, сегодня же исправлю
Invision70
да и mysql_* давно уже deprecated
DjOnline
Это он в головах индусских разработчиков PHP deprecated по желанию их левой пятки, ведь насрать они хотели на обратную совместимость, в HHVM он живее всех живых.
IncorrecTSW
Вот это поворот. А Вы считали сколько лет он уже deprecated? Столько не живут. Не выпилили только из за индусов до сих пор использующих его. Даже в системах средней паршивости работа с бд покрыта толстым слоем абстракций и замена должна нести минимальные трудозатраты. Собственно те кто годами забивают на deprecated обычно не нуждаются в новых версиях языка.
DjOnline
В мире энтерпрайза, а не сиюминутных поделок, совместимость должна быть превыше всего.
IncorrecTSW
Энтерпрайз на PHP который использует функции которые более 5 лет deprecated. Я видимо в другом мире работаю.
msfs11
Наша страховая до сих пор работает на системе, разработанной в 2007 году на php4. Бизнес-функции выполняет же. Сейчас, правда, переходим на другую КИС на Java.
gaelpa
И чтобы этот энтерпрайз не скатывался с годами в окончательную безысходность обратной совместимости, для новых проектов следует не пользоваться явно deprecated средствами.
SerafimArts
Выпилили. В php 7 его действительно уже нет: https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
mc_dir
попробуйте PDO
myrrec Автор
Собирался, спасибо за совет
Awake
mysqli тоже вариант
Strate
Лучше пробуйте сразу Doctrine DBAL
myrrec Автор
Уже перевожу на Laravel. Адрес будущего репозитория на Github
IncorrecTSW
Судя по минусу тут есть ярые защитники mysql_*. Шок. =)