LINUX.ORG.RU

UnCommon Web = Common Lisp + Web


0

0

Вот уже с октября заболел я болезнью... имя того неуга - Common Lisp =)

На скрине мы видим: слева-сверху - Emacs с открытым исходником "сайта", который вы можете увидеть справа-сверху в окне Epiphany... на самом деле этот "сайт" я склепал в рамках зачёта по "веб-технологиям" в универе, сдавал как лабу.. надо сказать препод лицом в грязь не ударил (он явно ничё не понял в коде, ибо лисп не знает), он сделал вид что ему всё понято, задал пару вопросов и поставил зачёт :))

если кому-то интересно, что же такое UnCommon Web, то он может начать со списка фич данного проекта: http://common-lisp.net/project/ucw/features.html

скажу лишь что я использовал наверное десятую долю возможностей данного "фреймворка": во-первых, я ещё недостаточно знаком с языком, чтобы использовать всю его силу и красоту, ну а во-вторых, у меня не было больших требований, поэтому реализовал то что требовалось первым пришедшим в голову способом :) например я не использовал базу данных (до cl-sql я ещё не добрался в изучении :)), поэтому всё берётся из текстовых файлов (из-за этого пришлось реализовать велосипедные функции извлечения нужных данных :)))

все кому интересно, могут слить исходник сайта вот тут: http://lisp-mania.nnov.ru/cocktail.tar.bz2

сайт проекта UnCommon Web: http://common-lisp.net/project/ucw/index.html

взять последню версию сего творения можно тут: http://common-lisp.net/project/ucw/download.html

для начала могу посоветовать вот это: http://common-lisp.net/project/ucw/ucw-boxset.tar.gz

что это? это что-то типа "всё в одном", то есть тут сам ucw и все необходимые зависимости в одном архиве, вам будет достаточно набрать что-то типа sbcl --load start.lisp и всё, всё работает и можно начинать познавать дзен ункоммон веба :)

собственно всё что я хотел рассказать :) всем удачи, всех с наступающими рождественскими праздниками! Учите лисп, в жизни пригодится!!!

>>> Просмотр (1680x1050, 160 Kb)

★★★

Проверено: JB ()
Ответ на: комментарий от sv75

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

специализация.. а хз.. специальность у меня Прикладная Информатика... куда её прикладывать я не знаю... %) к слову, данную лабу надо было выполнять совсем не на лиспе :) выбор был: php или asp... ну я как-то последнее время не обращаю внимание на задание, делаю на том, на чём мне самому интересно :) (предыдущий мой эксперимент вот тут: http://www.linux.org.ru/view-message.jsp?msgid=1212944) вот и в этот раз я выбрал lisp, потому что мне так было интереснее :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Zubok

так, по порядку:

запуск ucw отдельно в терминале - это не моя прихоть, просто так действительно удобнее, это же "сервер" в конце концов :) не, во время разработки можно и так как ты сказал, но когда это уже крутиться на сервере, то запускать через емакс это как-то не так :)... просто у ucw есть "админка", в которой есть возможность через веб интерфейс запустить сванк сервер в уже запущенном ucw... тоесть у тебя есть запущенный сервер ucw... сайт работает себе... ты заходишь через админку, запускаешь сванк, цепляешься емаксом и в реалтайме что-то подправляешь :) а так, когда я что-то "девелоплю" я ессесно запускаю лисп в самом емаксе %)

теперь вопрос...

> Просмотр hyperspec прямо в Emacs по нажатию на функцию уже прикрутил. Но это было легко.

а можно инструкцию по этому "легко"? было бы интересно прикрутить и себе :) заранее спасибо!

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Cy6erBr4in

>а можно инструкцию по этому "легко"? было бы интересно прикрутить и 
>себе :) заранее спасибо!

>а можно инструкцию по этому "легко"? было бы интересно прикрутить и 
>себе :) заранее спасибо!

Скачиваешь Hyperspec, который в html. И кладешь куда-нибудь в каталог 
hyperspec, например. Также надо установить w3m-el. Это интерфейс Emacs
 к w3m. Сначала конфигурируем w3m. Указываем, что странички надо 
открывать браузером по умолчанию.

(setq browse-url-browser-function
      '(("." . browse-url-default-browser)))

Потом следом указываем, что если просят открыть ссылку в каталоге 
hyperspec, то не надо лезть во внешний браузер по умолчанию, а открыть
 прямо в w3m в буфере Emacs.

(add-to-list 'browse-url-browser-function
             '("/path/to/hyperspec/*" . w3m-browse-url))

А это чтобы w3m-el поставил кодировку по умолчанию. Иначе там, где 
линия графическая в html, консольный w3m показывает ее псевдографикой,
 а мой Emacs 21.4 псевдографику не умеет. Может быть, что в новых 
Emacs 22+, 23+ это и не надо.

(setq w3m-symbol 'w3m-default-symbol)

Следующую строчку надо вставить перед (slime-setup), чтобы SLIME знал,
где искать документацию.

(setq common-lisp-hyperspec-root "/path/to/hyperspec/")

Вот, собственно, и все. Теперь ты наводишь на функцию курсор и жмешь 
C-c C-d h. Закрытие буфера помощи (но не килляние) -- кнопка <q>. Если
 под курсором нет функции, то он просто спросит, какую искать тогда.

Наверное, можно вместо w3m-el поставить emacs-w3. Это браузер 
текстовый, написанный на elisp. Но у меня сделано так, как выше. Надеюсь, ничего не попутал, так как у меня все настройки тематически 
разбросаны initsplit'ом.

Zubok ★★★★★
()
Ответ на: комментарий от CMEPTb_C_KOCOiiii

> Это не поравдание, того что ты не смог осилить шаблоны.

дурак вы, батенька. про метапрограммирование слышали? нет? параллели: xml <-> templates <-> lisp не видим? не понимаем что это одно и то же?

asgard
()
Ответ на: комментарий от anonymous

>а браузер под названием "closure" туда можно прикрутить?

По идее, да. Вызов closure:visit имеет опциональный аргумент url. Для Emacs надо только написать простейший враппер для emacs (defun closure-browse-url url &rest args), чтобы он вызвал, скажем, 'sbcl --core closure.core --noinform --eval "(closure:visit а-вот-сюда-подставить-url-из-аргументов)" '. в настройках slime сделать (add-to-list 'browse-url-browser-function '("/path/to/hyperspec/*" . closure-browse-url))

Разумеется, надо перед этим создать ядро closure.core. Но по идее можно и в текущем ядре вызвать, но обязательно там должен быть уже в ядре этот браузер. Ну и надо разобраться, как автоматически в swank передать из slime команду на выполнение функции (closure:visit). Все, что выше, написано без какой-либо проверки. То есть какие-то мелочи не учитывались.

А что, пользуешься closure? :) :)

Zubok ★★★★★
()
Ответ на: комментарий от Zubok

Спасибо за подробную инструкцию! Обязательно попробую.

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Zubok

И кстати, такой вопрос... где можно почитать про настройку init "скриптов" в емаксе? вот ты писал что у тебя они "тематические", тоесть не всё в одном .emacs а раскиданы по разным файлам. Можно ссылку где это описано? а то у меня все настройки в одном файле, не очень удобно :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Zubok

Спасибо, попробую

> А что, пользуешься closure? :) :)

ага. Оно вроде больше стандартам соответствует чем W3M :) + есть интересные мысли по кешированию (если конвертировать HTML в Sexpr'ы, которые сами себя рисуют, получается какой-то "компилированный HTML+DOM", то есть кешируется уже откомпилированное в Lisp представление :))

anonymous
()
Ответ на: комментарий от Cy6erBr4in

> математику тут в тебя кувалдой вобьют, а вот всё остальное, если действительно хочешь чему-то научиться, учи разбирайся сам)...

> выбор был: php или asp...

Ясненько, спасибо. Я просто думаю, не попопробовать ли туда по совместительству устроится, чтобы прочувствовать, как ситуация с преподованием CS & SE, вот собираю разные отзывы. :(

Это кстати какой курс по счету и какая кафедра ведет предмет?

sv75 ★★★★★
()
Ответ на: комментарий от anonymous

>ага. Оно вроде больше стандартам соответствует чем W3M :) + есть интересные мысли по кешированию (если конвертировать HTML в Sexpr'ы, которые сами себя рисуют, получается какой-то "компилированный HTML+DOM", то есть кешируется уже откомпилированное в Lisp представление :))

Если честно, то я сначала подумал, что про closure -- это шутка :) Ну раз так все серьезно, то будет одна проблема -- это заставить отображать в том же окне браузера после повторного запроса. При таком раскладе, что я показал, каждый раз будет запускаться новый экземпляр. Как определить, что уже запущен один экзамляр, ума не приложу. Так как это как-то надо из sbcl получать информацию (если он вообще такое позволяет сделать) и интерпретировать в коде closure. Можно, например, дописать чуть-чуть closure, чтобы можно было через сокет ему закидывать новый адрес (если такой возможности уже нет). Ну и во враппере closure-browse-url надо будет это дело (передачу нового адреса) обеспечить. Какие аргументы должны быть у closure-browse-url, можно посмотреть по C-h f browse-url.

Zubok ★★★★★
()
Ответ на: комментарий от Cy6erBr4in

>Можно ссылку где это описано? а то у меня все настройки в одном файле, не очень удобно :)

А у меня стоит пакет initsplit. В репозитории Debian он находится в 
пакете emacs-goodies-el. Я все скрипты тематически раскидал в 
~/.emacs.d (ну типа gnus-init.el, slime-init.el, w3m-init.el и т. д. В
 основном ~/.emacs пишется порядок загрузки (он часто важен):

(load "~/.emacs.d/gnus-init")
(load "~/.emacs.d/w3m-init"))
(load "~/.emacs.d/slime-init")

Потом указываешь регэкспы, по которым идет раскидывание. Например, 
так:

(setq initsplit-customizations-alist 
      '(("^gnus-" "~/.emacs.d/gnus-init.el" t)
 	("^w3m-" "~/.emacs.d/w3m-init.el" nil)
	("^slime-" "~/.emacs.d/slime-init.el" t)))

(require 'initsplit)

В .emacs я оставляю только общего характера функции и настройки. А
остальные настройки по регэкспам автоматически раскидываются по 
соответсвующим файлам в ~/.emacs.d . Причем это работает из customize
в Emacs. то есть если поменяешь настройку в w3m, то она автоматом туда
и запишется. Мне показалось это удобным. Просто уже пакетов всяких 
много. Если ты обычно не пользуешься customize, а вручную пишешь 
все (setq ...) для каждого пакета, то тебе может хватить 
последовательности (load...), что выше.

Zubok ★★★★★
()
Ответ на: комментарий от sv75

Только это... не знаю, заметил ли ты, но я не в Москве ;) я в Нижнем Новгороде :) курс у меня третий, с какой кафедры преподаватель я что-то запамятовал :)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Zubok

Отлично, спасибо... и ещё... *шаркая ножкой* а можна твой ~/.emacs и ~/.emacs.d? можна а? хочу посмотреть как у кого-нить ещё настроен емакс :) я думаю много полезного для себя там найду. Заранее спасибо!

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от Cy6erBr4in

+1 Anonymous-ы тоже хотят посмотреть. :)

anonymous
()
Ответ на: комментарий от Cy6erBr4in

> Только это... не знаю, заметил ли ты, но я не в Москве ;)

Кхе-кхе, хорошо что сказали. ВМК без указания вуза - подразумевается тутошний. ;)

sv75 ★★★★★
()
Ответ на: комментарий от sv75

=))

на самом деле, ВУЗ был указан, просто не все это заметили...

> Re: UnCommon Web = Common Lisp + Web

> Лобач? ВМК? :-)

> vadv (*) (01.01.2008 21:24:54)

Лобач == Нижегородский Государственный Университет им. Лобачевского ;)

Cy6erBr4in ★★★
() автор топика
Ответ на: комментарий от rty65tt

Это и так работает через апач юзается mod_lisp2, в ucw boxset и так ucw_dev юзается :) спроси конкретнее, возможно я тебя не правильно понял.

Cy6erBr4in ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.