Skip to content
Dmitry Grebeniuk edited this page Dec 10, 2013 · 42 revisions

Дрезина -- это такой велосипед, который ездит по рельсам. Нуфф сказал.

Описанное

To do / Plans

  • Подумать, как быть с роутами и контролерами. Что нужно:

    • url_of_path (Route.Controller.Action.path ~args) и автоматическая подстановка хоста при redirect_to, если там хоста не было.
    • Комар заблевал от кодогенерации и грозится придумать роуты с биндами.
    • Сделать так, чтобы не-блевотное легко подключалось в нужное место обработки роутов.
    • Обработка параметров запроса ("?k=v") в роутах (брать Uri.parse_params)
    • Обработка не только get-роутов
  • Продумать, как будут дела с окружением (dev/prod).

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

    • Для этого, наверное, описать тут, чем плохо спиздить формы с тех же рельсов.
  • Параметры форм, куки и заливка файлов (посмотреть в amall, iterateees, либо в коде с прошлого рабства). Для декодирования ебанутого js-escaped utf16 есть код в iteratees точно.

  • БД

    • собственно соединение с БД
    • почесать dbi.pg на предмет человеческого dbi-подобного интерфейса; сделать интерфейс мономорфным относительно вида БД (пусть через coercions)
    • научиться применять простые миграции и следить за текущей схемой БД
    • (в мечтах) Заставить PGOcaml выдавать объекты или рекорды.
  • Шаблоны html. Брать ecaml. Текущие вопросы:

    • как оно будет использоваться для генерации .ml из .eml так, чтобы вписалось в общую схему
    • описать и отладить соображения по поводу @x.y.z в шаблонах, таких, чтобы @x.y.z заменялось на реальные, заранее полученные в контроллере данные из базы данных, согласно описаниям моделей и ручным данным (для хитрых случаев нужно иметь возможность вносить руками данные, которые будут доступны в шаблонах).
  • Кеширование на сервере.

    • брать последнюю дату создания/изменения объектов, протаскивать её везде, сделать комбинатор типа respond_cached сущности ответ, который по сущностям будет определять, нужно ли отдавать ответ? Тут именно с технической стороны надо сделать пиздато, так как концепции ясны.
  • Попробовать присунуть ADT в роуты и в БД. Насчёт БД будет сложно, а с роутами вроде и просто, и заебись.

  • Мелочёвка:

    • Скопипастить себе Buffer и сделать там вывод содержимого буфера через lwt, чтобы не копировать из Buffer.t в отдельную строку
    • Всё, выполняющееся от роутов, будет завёрнуто в IO-монаду. Поэтому для обработки тел запросов итератами нужно будет написать функцию вида run_iteratee : iteratee char 'a -> ('a -> IO.m 'b) -> IO.m 'b, которая будет брать итерат и продолжение, кидать заданное исключение, выходить из IO-монады, обрабатывать итератом тело запроса, передавать результат в продолжение, и дальше выполняться в рамках IO.
    • ocamldep можно запускать только на изменённых файлах, но подумать ещё.
    • Поставить таймаут на вызов действия контроллера, сделать конфигурабельным.
Clone this wiki locally