Reflex: преемник Liveform

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

Генерация кода. 2-й уровень

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

Живые формы. На изнанке

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

Живые формы

Большинство форм в web-приложениях имеют довольно простую структуру. Несколько полей, сабмит, часть полей обязательна, часть — нет. Вроде как никаких проблем с ними возникать не может. Я вот тоже так думал, пока мне не пришлось реализовывать форму для CRM-системы. Сказать что форма была сложной — это ничего не сказать. Но мало того, что в ней было несколько десятков полей, они были обязательными/скрытыми в зависимости от выбранных значений в других полях. Я очень намучился, вешая обработчики на каждое из таких полей, и, чтобы обезопасить себя от подобного стресса в будущем, решил написать нечто, что упростило бы эту задачу. ... читать далее

Интерпретатор выражений за 10 минут

Сегодняшняя статья будет посвящена интерпретаторам выражений. Примерно год назад я уже поднимал эту тему в статье Интерпретатор выражений за 15 минут. Сегодня я расскажу о способе разбора лексем, который позволит нам сэкономить немного времени. Этот способ, я думаю, можно считать позаимствованным у утилиты lex, поскольку описание лексем задаются аналогичным способом. Оговорюсь сразу, что этот способ не претендует на оптимальность и высокое быстродействие. ... читать далее

Резиновая верстка на дивах

Это короткая памятка о том, как сделать резиновую верстку используя дивы. В данном варианте одна из колонок имеет фиксированную ширину, а вторая — плавающую. ... читать далее

Генерация кода

С чего должно начинаться создание среднестатистического веб-приложения? «С написания моделей, контроллеров CRUD-операций и видов!» — ответят некоторые. А те, кто опытнее, ответят — «С генерации моделей, контроллеров CRUD-операций и видов». И правильно! Зачем вручную писать то, что может за тебя написать программа? Конечно, есть нетривиальные проекты, где генератор кода помочь не сможет, но в основной своей массе веб-приложения похожи на цыплят: как вылупятся — все одинаково желтые, и лишь со временем у каждого появляется индивидуальный окрас (если они, конечно, не из инкубатора). ... читать далее

Призрак Чарли

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

EasyConfig - eще один формат конфигурации в PHP

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

Этот формат очень простой, но он позволяет описать практически любые массивы, которые можно создать в PHP (объекты и функции в качестве значений не в счет). Он содержит минимум разметки, удобочитаем, данные можно легко править вручную. ... читать далее

Just do it! 2.0

Недавно закончил доработку одного из своих проектов — Just Do It!. Собственно, изменения немногочисленные, но кардинальные:

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