Все было на ПХП самописном, переписано было на Zend Framework. Самые замечательные изменения были связаны с моделью и видом. Модель стало гораздо легче контролировать как с ORM, так и с SQL стороны. А вид… Разный вид страниц для разных пользователей, и прочие мелкие радости (спасибо отказу от шаблонизаторов и хелперам).
В определенный момент переписал похожую систему процентов на 70-80. Доволен необычайно.
Может и вам стоит попробовать?
Вообще, главная проблема всех таких БД — абсолютная неформализуемость российского бизнеса и русских людей (а чую чем-то задним, что не только у нас такая беда). Посему нужно просто искать другой подход к построению таких приложений, классический — выявили условия, написали алгоритм, реализовали в коде — падает на третьей итерации изменения условий, которые пришлось добавлять.
1. Поставить по проектору в каждый класс.
2. Собрать полноценный компьютерный класс для информатики.
3. Собрать второй полноценный компьютерный класс для факультативов по остальным предметам.
Таким образом, мы получим огромное количество ИТ и интерактива, но на нормальных экранах, с нормальными клавиатурами, с мышками (или даже сенсорными экранами). Те, кому интересно, смогут смоделировать разные опыты с разными параметрами на компьютере.
Применение найти можно! А вот нужно ли? Скорее всего, соответствующим деньгам можно найти гораздо более хорошее применение, и в итоге получить лучшее образование.
Если будут тратить деньги на закупку оборудования, софта, тех.обслуживание, то значит, чем-то придется жертвовать, не так ли? Какие-то деньги на лабораторные работы будут сокращать.
Проблема в том, что подобные инициативы несут больше прибыли лоббистам ИТ-компаний, нежели школьникам или школам, в том, что это делается не для них, а для бизнесменов.
А я вот против таких штук в школьном образовании. Для образования нужен ряд совершенно разных вещей для детей, компьютер не в состоянии их заменить.
Карта на уроке географии должна висеть на стене и быть формата А0 как минимум.
На химии нужны лабораторные работы. Никакая модель на компьютере не передаст даже лабу по фильтрации воды, когда у всех разные результаты, которые можно и потрогать(мокро) и понюхать(зря) и посмотреть(не очистилось...).
На физике тоже нужны лабы. Мы, помнится, перевзвешивали все, что было в портфелях, едва нам дали весы =)
Даже на биологии. Мы смотрели в микроскоп, собирали гербарии вокруг школы.
История. Опять же карты — большого размера, одновременно охватывающие необходимую площадь и дающие нужную точность.
Математика и русский язык — тем более. Нужно одновременно смотреть в учебник, листать его, писать, рисовать (графики на алгебре, фигуры на геометрии) руками.
Компьютер не способен заменить жизнь, он может ее лишь смоделировать, причем плохо. А детей нужно учить жизни, нужно учить общаться с реальным миром, нужно давать потрогать все руками.
А какая разница — втыкать трансформатор в каждую розетку или поставить один на весь класс? Компу и таких розеток хватит (например, разъем молекс — 12 и 5 В).
Было бы действительно наивно думать, что там нет шумоподавителей. И что там нет шума. Только речь в статье о фотографиях, уже полученных с фотоаппарата — «картинку, которая получается в современных цифровых фотоаппаратах без обработки,… выглядит она просто ужасно». Мне стало интересно, если в 2006 г. недорогая зеркалка выдавала хорошие фотографии, то в каком году писалась эта статья?
Кстати, если бы в статье было про шумоподавители, которые ставят производители на матрицы, было бы интереснее.
Nikon D40 — 2006 год, жалкие на сегодняшний день 6 мегапикселей. Проблем с шумом нет.
Ценности в статье — 0.
Те, кого волнует эта проблема обзавелись нормальными фотоаппаратами. Тем же, кто не обзавелся по барабану шумы и прочая хрень — они видят из косяков лишь «красные глаза».
Для программистов ценности тем более — 0.
«Есть такие методы! Замечательные методы!» Картинки — результаты работы? Ссылки на коды и тексты? Хабровчане в комментах пишут больше, чем вы в посте!
Если вы также стараетесь над проектами, как над постами, то я к вам никогда не обращусь.
Как раз таки в этом топике в комментариях было доказано обратное ;)
При отладке можно повесить точки останова на всех точках выхода из функции и точно знать, где произошел возврат значения.
Первый вариант. Когда я вижу return false; я понимаю, что в этой ситуации функция возвращает false. Когда я вижу $result = false; это значит, что переменной результата присваивается значение false. И я должен просмотреть весь оставшийся код, чтобы понять, вернется ли это значение из функции, перекроется ли ниже, или же даже, скажем, будет участвовать в серии логических операций ( $result = $result || $logicStatement ).
1. объект com.sun.java.swing.plaf.gtk.GTKLookAndFeel возвращается сразу же.
if ("gnome".equals(desktop)) {
// May be set on Linux and Solaris boxs.
return "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
if ((osName.indexOf("Solaris") != -1) ||
(osName.indexOf("SunOS") != -1)) {
return "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
2. Объект com.sun.java.swing.plaf.gtk.GTKLookAndFeel может быть перекрыт объектом com.sun.java.swing.plaf.motif.MotifLookAndFeel.
if ("gnome".equals(desktop)) {
// May be set on Linux and Solaris boxs.
result = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
}
if ((osName.indexOf("Solaris") != -1) ||
(osName.indexOf("SunOS") != -1)) {
result = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
}
Неважно какой диктофон, потому как при анализе звуковой записи оная переводится экспертами в цифровой формат.
Звукозапись использовать можно но ее должны проверить эксперты-криминалисты и дать свое заключение.
Нет конечно.
USB — цифровой разъем, так что неважно из чего контакты, в отличие от разъемов на аналоговые устройства. Так что это просто стилизация под серьезные звуковые системы.
Это не компилятор — это компоновщик, он же линкер, он же сборщик.
А компилятор (или даже несколько) отработал уровнем выше — преобразовав файлы кода в *.obj файлы
Писал нечто очень похожее, но по другим причинам: у меня были более сложные классы массивов, зачастую с наследованием и переопределением логики.
Были сущности (e.g. class Entity), был специальный класс для массива сущностей (class EntitiesList), и был фабричный метод, который проверял, есть ли унаследованный класс массива для конкретной сущности. Если нет, то без всяких eval() с созданием нового класса возвращался базовый класс, в котором устанавливалась внутренняя переменная $_type.
Может и вам стоит попробовать?
Вообще, главная проблема всех таких БД — абсолютная неформализуемость российского бизнеса и русских людей (а чую чем-то задним, что не только у нас такая беда). Посему нужно просто искать другой подход к построению таких приложений, классический — выявили условия, написали алгоритм, реализовали в коде — падает на третьей итерации изменения условий, которые пришлось добавлять.
Все предположения в топку — только тесты покажут, кто прав.
И это не шутка. Многие гуру говорят против «оптимизации ради оптимизации», требуя только реального, подтвержденного результата.
2. Собрать полноценный компьютерный класс для информатики.
3. Собрать второй полноценный компьютерный класс для факультативов по остальным предметам.
Таким образом, мы получим огромное количество ИТ и интерактива, но на нормальных экранах, с нормальными клавиатурами, с мышками (или даже сенсорными экранами). Те, кому интересно, смогут смоделировать разные опыты с разными параметрами на компьютере.
Проблема в том, что подобные инициативы несут больше прибыли лоббистам ИТ-компаний, нежели школьникам или школам, в том, что это делается не для них, а для бизнесменов.
Карта на уроке географии должна висеть на стене и быть формата А0 как минимум.
На химии нужны лабораторные работы. Никакая модель на компьютере не передаст даже лабу по фильтрации воды, когда у всех разные результаты, которые можно и потрогать(мокро) и понюхать(зря) и посмотреть(не очистилось...).
На физике тоже нужны лабы. Мы, помнится, перевзвешивали все, что было в портфелях, едва нам дали весы =)
Даже на биологии. Мы смотрели в микроскоп, собирали гербарии вокруг школы.
История. Опять же карты — большого размера, одновременно охватывающие необходимую площадь и дающие нужную точность.
Математика и русский язык — тем более. Нужно одновременно смотреть в учебник, листать его, писать, рисовать (графики на алгебре, фигуры на геометрии) руками.
Компьютер не способен заменить жизнь, он может ее лишь смоделировать, причем плохо. А детей нужно учить жизни, нужно учить общаться с реальным миром, нужно давать потрогать все руками.
Кстати, если бы в статье было про шумоподавители, которые ставят производители на матрицы, было бы интереснее.
Ценности в статье — 0.
Те, кого волнует эта проблема обзавелись нормальными фотоаппаратами. Тем же, кто не обзавелся по барабану шумы и прочая хрень — они видят из косяков лишь «красные глаза».
Для программистов ценности тем более — 0.
«Есть такие методы! Замечательные методы!» Картинки — результаты работы? Ссылки на коды и тексты? Хабровчане в комментах пишут больше, чем вы в посте!
Если вы также стараетесь над проектами, как над постами, то я к вам никогда не обращусь.
При отладке можно повесить точки останова на всех точках выхода из функции и точно знать, где произошел возврат значения.
Фаулер: www.refactoring.com/catalog/replaceNestedConditionalWithGuardClauses.html
Кент Бек, разработчик Eclipse: habrahabr.ru/blogs/complete_code/40841/#comment_993411
Макконнелл, ссылку не дам (он у меня бумажный), рекомендует использовать второй вариант в ряде случаев «если они улучшают читабельность»
1. объект com.sun.java.swing.plaf.gtk.GTKLookAndFeel возвращается сразу же.
2. Объект com.sun.java.swing.plaf.gtk.GTKLookAndFeel может быть перекрыт объектом com.sun.java.swing.plaf.motif.MotifLookAndFeel.
Звукозапись использовать можно но ее должны проверить эксперты-криминалисты и дать свое заключение.
USB — цифровой разъем, так что неважно из чего контакты, в отличие от разъемов на аналоговые устройства. Так что это просто стилизация под серьезные звуковые системы.
А компилятор (или даже несколько) отработал уровнем выше — преобразовав файлы кода в *.obj файлы
Были сущности (e.g. class Entity), был специальный класс для массива сущностей (class EntitiesList), и был фабричный метод, который проверял, есть ли унаследованный класс массива для конкретной сущности. Если нет, то без всяких eval() с созданием нового класса возвращался базовый класс, в котором устанавливалась внутренняя переменная $_type.