Регистрация | Войти
Lisp — программируемый язык программирования
RSS
Попытка запустить rulisp
Hedin - 18.03.2016 16:02, Сообщений - 39
Попробовал собрать и запустить rulisp. При сборке системы возникает ошибка в файле "src\dokuwiki\render-pdf.lisp" - Symbol "LOAD-TTF-FILE" not found in the PDF package. У меня загружена вот эта система - https://github.com/mbattyani/cl-pdf. Это правильная система или есть какая-то еще?
[#]
https://github.com/archimag/cl-pdf - это мой форк (с поддержкой ttf, в частности), нужно брать его.
archimag - 18.03.2016 16:16
[#] Ответ на комментарий от archimag 18.03.2016 16:16
Спасибо! Теперь споткнулся на "\src\rulisp.lisp" - "Symbol "TTABLE-SYNC-PACKAGE" not found in the CLOSURE-TEMPLATE package.". Скачивал https://github.com/archimag/cl-closure-template.
Hedin - 18.03.2016 16:47
[#] Ответ на комментарий от Hedin 18.03.2016 16:47
Хм, я давно не запускал код rulisp на своей машине, может быть просто старый код.

Забей. Этот код работает на сервере, но развиваться он не будет. Надо как-нибудь собраться и переделать всё. Тогда можно будет людей в код пускать.
archimag - 18.03.2016 17:25
[#] Ответ на комментарий от archimag 18.03.2016 17:25
Привет, archimag.
Есть еще желание "как-нибудь собраться и переделать всё"?:)
Hedin - 18.03.2018 10:48
[#] Ответ на комментарий от Hedin 18.03.2018 10:48
> Есть еще желание "как-нибудь собраться и переделать всё"?:)

Теоретическое :) В обозримом будущем не ясно, как я могу выделить на это время.
archimag - 18.03.2018 11:48
[#] Ответ на комментарий от archimag 18.03.2018 11:48
У меня есть немного времени свободного, которое я могу посвятить переработке сайта. Может быть, ты поработаешь project-manager'ом?:) Расскажешь в какую сторону планируешь переделывать, создашь отдельный бранч для новой версии сайта. Я буду туда присылать pull request'ы. Возможно, кто-нибудь еще подключится.:) Сайт не обновлялся с 2013?
Hedin - 18.03.2018 12:07
[#] Ответ на комментарий от Hedin 18.03.2018 12:07
В ближайшее время попробую еще раз запустить сайт локально.:)
Hedin - 18.03.2018 12:15
[#] Ответ на комментарий от Hedin 18.03.2018 12:07
> Может быть, ты поработаешь project-manager'ом?:)

Вряд ли :) У меня есть техническое виденье, что:

1) Надо объединить все пакеты в один (никаких отдельных restas-forum и т.п.)
2) Перейти на mongo вместо postgres (для упрощения)
3) ...
4) Профит!

Только в чём профит? У меня нет концепции развития проекта. Когда-то давно, мне виделось, что это должен быть некий аналог ЛОРа, но про лисп. Но больше эта мысль мне не кажется удачной. А другой нет.

Т.е. прежде, чем что-то делать, надо понять а что вообще должно получиться.
archimag - 18.03.2018 12:29
[#] Ответ на комментарий от archimag 18.03.2018 12:29
Если я не вижу в какую сторону двигаться, то двигаюсь хоть в какую-нибудь. Начать можно с упрощения разработки, с одного монорепозитория. Сделал git clone. Запустил repl и начал разрабатывать. А в чем простота mongo? 
Hedin - 18.03.2018 13:01
[#] Ответ на комментарий от Hedin 18.03.2018 13:01
Потом попросить активных участников форума накидать идей. 
Hedin - 18.03.2018 13:01
[#] Ответ на комментарий от Hedin 18.03.2018 13:01
Ещё можно сделать приложение на react-native с помощью parenscript под мобильники. Но это жёстко. :-) 
Hedin - 18.03.2018 13:07
[#] Ответ на комментарий от Hedin 18.03.2018 13:07
> Ещё можно сделать приложение на react-native с помощью parenscript под мобильники

ЛОЛ, но зачем?

> parenscript

ES2017 настолько мощный, что я не вижу никакого смысла использовать какой-либо другой язык для генерации JavaScript
archimag - 18.03.2018 13:38
[#] Ответ на комментарий от Hedin 18.03.2018 13:07
Приложения не нужны. А вот вёрстку сайта подправить и сделать более дружелюбной к мобилкам очень даже нужно.
andy128k - 18.03.2018 13:53
[#] Ответ на комментарий от archimag 18.03.2018 13:38
>ЛОЛ, но зачем?
Многие пользуются смартфонами. Например  я сейчас пишу со смартфона и это очень не удобно. 
>ES2017 настолько мощный, что я не вижу никакого смысла использовать какой-либо другой язык для генерации JavaScript
А это для единообразия. Возможно и макросы пригодятся. :-) 
Hedin - 18.03.2018 14:01
[#] Ответ на комментарий от andy128k 18.03.2018 13:53
Почему так категорично насчёт приложений  :-) 
Hedin - 18.03.2018 14:14
[#] Ответ на комментарий от Hedin 18.03.2018 14:14
Потому что приложения тяжело поддерживать в актуальном состоянии. Тут всего лишь сайт не обновлялся 5 лет. Кто будет приложение поддерживать? Особенно с нестандартным parenscript.

Кстати, CSS для мелких экранов

@media screen and (max-device-width: 800px) {
html, body {
  font-size: 16px;
}

body {
  padding: 0;
}

#mainmenu ul {
  font-size: 100%;
  line-height: 1.5em;
}

#content {
  padding: 0 1em;
}

body[data-page^="/forum/thread/"] #content {
  padding: 0;
}

.article {
  text-align: left;
}

#planet-info-panel {
  position: static;
  padding: 0;
  border: none;
  border-bottom: 1px solid #d0d0d0;
  width: auto;
}

#planet-content {
  margin: 0;
}

#planet-content img {
  max-width: 100%;
}

#planet-content .entry-title,
#planet-content .entry-content {
  padding-left: 0;
}

}

и немного JS к нему

(function(fn) {
  if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading"){
    fn();
  } else {
    document.addEventListener('DOMContentLoaded', fn);
  }
})(function(){
  document.body.setAttribute('data-page', window.location.pathname);
});
andy128k - 18.03.2018 14:44
[#] Ответ на комментарий от andy128k 18.03.2018 14:44
Я и буду поддерживать. :-) Когда перестану, можно сделать вид, что его и не было. Помню статью архимага  где он хотел продвигать common lisp в массы. Если показать, что на common lisp'е можно писать и под мобилки, на мой взгляд, хуже от этого не станет. Пока мобильные приложения писать на cl очень тяжело. Я не осилил. 
Hedin - 18.03.2018 15:23
[#] Ответ на комментарий от archimag 18.03.2016 16:16
В cl-pdf появилась поддержка ttf. Кусок кода идентичный тому, который находится у тебя в форке.:)
Hedin - 19.03.2018 09:34
[#] Ответ на комментарий от Hedin 19.03.2018 09:34
> Кусок кода идентичный тому, который находится у тебя в форке.:)

Ну, дык, он был в рассылке, но несколько лет игнорировался.
archimag - 19.03.2018 11:03
[#] Ответ на комментарий от archimag 19.03.2018 11:03
Кстати, у меня сегодня с утра получилось собрать проект. Запустить не успел ушел на работу.:)
Hedin - 19.03.2018 11:44
[#]
Что думаете по поводу SPA и react? Нужно ли переписывать lisper.ru в таком стиле?
Hedin - 19.03.2018 11:51
[#] Ответ на комментарий от Hedin 19.03.2018 11:51
> Что думаете по поводу SPA и react? 

SPA/SSR/Webpack/ES2017/etc и рядом код на CL? Типа наглядная демонстрация технологического разрыва?

Я бы предпочёл минимизировать использование JavaScript на данном сайте и даже избавиться от wysiwyg редактора в пользу markdown (и/или reStructuredText).

> react

И да, будущее за vue.js, лол.
archimag - 19.03.2018 13:32
[#] Ответ на комментарий от archimag 19.03.2018 13:32
У меня есть небольшая экспертиза в реакте, но могу попробовать вуе.:)

>SPA/SSR/Webpack/ES2017/etc и рядом код на CL? Типа наглядная демонстрация технологического разрыва?
У меня такое видение: убрать js, css, html и оставить только cl, в виде библиотек для генерации css, html, js. На текущей работе пишу на clojure/clojurescript и js/css/html практически нет, выглядит органично и унифицированно.

>Я бы предпочёл минимизировать использование JavaScript на данном сайте и даже избавиться от wysiwyg редактора в пользу markdown (и/или reStructuredText).
А что это такое? Есть ссылка?

>Надо объединить все пакеты в один (никаких отдельных restas-forum и т.п.)
Могу начать с этого, попробовать опубликовать в quicklisp в виде единого пакета - restas. Идея в том, чтобы вот эти пакеты объединить в один:
#:restas
#:restas-simple-auth
#:restas-planet
#:restas-wiki
#:restas-colorize
#:restas-directory-publisher
#:restas-forum
#:wiki-parser
Я прав?
Hedin - 19.03.2018 13:57
[#] Ответ на комментарий от Hedin 19.03.2018 13:57
> Могу начать с этого, попробовать опубликовать в quicklisp в виде единого пакета - restas

1) RESTAS это фреймворк, он и так в quicklisp, и он сам по себе
2) restas-directory-publisher модуль для restas, он тоже сам по себе
3) всё остальное относится к lisper.ru (как бы тоже модули, но в данный момент сами по себе ценности не представляют)
archimag - 19.03.2018 14:34
[#] Ответ на комментарий от Hedin 19.03.2018 13:57
> На текущей работе пишу на clojure/clojurescript и js/css/html практически нет

Лично мое мнение, что в данный момент писать таким образом коммерческий код просто нерационально (дорого).
archimag - 19.03.2018 14:36
[#] Ответ на комментарий от archimag 19.03.2018 14:34
Все остальные модули, кроме RESTAS и restas-directory-publisher запихнуть в rulisp?

>Лично мое мнение, что в данный момент писать таким образом коммерческий код просто нерационально (дорого).
Дорого по какой причине? Люди до этого писали на ruby, перешли на clojure и похоже не замечают, что это дорого.:)
Hedin - 19.03.2018 14:49
[#] Ответ на комментарий от Hedin 19.03.2018 14:49
> Люди до этого писали на ruby

Ну дык и ruby сейчас это "пережиток прошлого".  Ну да не суть.

> Все остальные модули, кроме RESTAS и restas-directory-publisher запихнуть в rulisp?

В принципе - да. Пожалуй мне надо как-нибудь собраться и самому это сделать. Но можешь попробовать :)
archimag - 19.03.2018 15:19
[#] Ответ на комментарий от archimag 19.03.2018 15:19
>В принципе - да. Пожалуй мне надо как-нибудь собраться и самому это сделать. Но можешь попробовать :)
Не надо.:) Не отнимай у меня хобби.:) Постараюсь на этой неделе сделать и отправить pull-request.
Hedin - 19.03.2018 16:12
[#] Ответ на комментарий от archimag 19.03.2018 15:19
>Ну дык и ruby сейчас это "пережиток прошлого".  Ну да не суть.
А что сейчас модно?:)
Hedin - 19.03.2018 16:17
[#] Ответ на комментарий от archimag 19.03.2018 13:32
> И да, будущее за vue.js, лол.

лол
andy128k - 19.03.2018 17:10
[#] Ответ на комментарий от andy128k 19.03.2018 17:10
Это согласие или несогласие?:)
Hedin - 19.03.2018 17:34
[#] Ответ на комментарий от Hedin 19.03.2018 17:34
Это скепсис.
andy128k - 19.03.2018 19:27
[#]
Сегодня смог запустить сайт. Пока без подключения к бд. Вот такие изменения пришлось внести в код, чтобы не скачивать еще одну библиотеку.

<code lisp>
index a7b914a..277e811 100644
--- a/src/dokuwiki/render-pdf.lisp
+++ b/src/dokuwiki/render-pdf.lisp
@@ -18,14 +18,14 @@

 (defmacro deffont (name string-name)
   `(defparameter ,name
-     (pdf:get-font (pdf:font-name (pdf:load-ttf-file (merge-pathnames (format nil
+     (pdf:get-font (pdf:font-name (pdf:load-ttf-font (merge-pathnames (format nil
                                                                               "~A.ttf"
                                                                               ,string-name)
                                                                       *cm-fonts-dir*))))))

 (defmacro defcorefont (name string-name)
   `(defparameter ,name
-     (pdf:get-font (pdf:font-name (pdf:load-ttf-file (merge-pathnames (format nil
+     (pdf:get-font (pdf:font-name (pdf:load-ttf-font (merge-pathnames (format nil
                                                                               "~A.ttf"
                                                                               ,string-name)
                                                                       *corefonts-dir*))))))
@@ -93,15 +93,24 @@
             (let ((res (find-outline-by-ref ref item)))
               (finding res such-that res)))))

+(defun append-child-outline (parent title ref-name)
+  (let ((child (make-instance 'outline
+                              :title title
+                              :reference (pdf:get-named-reference ref-name))))
+    (setf (pdf::sub-levels parent)
+          (nconc (pdf::sub-levels parent)
+                 (list child)))
+    child))
+
 (defmethod tt::stroke ((header chapter-header) x y)
   (let ((parent-ref (slot-value header 'parent)))
-    (pdf:append-child-outline (or (and parent-ref
-                                       (find-outline-by-ref (pdf::get-named-reference parent-ref)
-                                                            (pdf:outline-root pdf:*document*)))
-                                  (pdf:outline-root pdf:*document*))
-                              (slot-value header 'title)
-                              (pdf::register-named-reference (vector pdf:*page* "/FitH" y)
-                                                             (slot-value header 'title)))))
+    (append-child-outline (or (and parent-ref
+                                  (find-outline-by-ref (pdf::get-named-reference parent-ref)
+                                                       (pdf::outline-root pdf:*document*)))
+                             (pdf::outline-root pdf:*document*))
+                         (slot-value header 'title)
+                         (pdf::register-named-reference (vector pdf:*page* "/FitH" y)
+                                                        (slot-value header 'title)))))

 (define-wiki-pdf-render dokuwiki:chapter (items)
   (let ((name (second (first items))))
@@ -337,4 +346,4 @@

 (define-wiki-pdf-render dokuwiki:table-cell (items)
   (pdf-render-table-cell items nil))
-
\ No newline at end of file
+
diff --git a/src/pcl.lisp b/src/pcl.lisp
index 439b305..074209b 100644
--- a/src/pcl.lisp
+++ b/src/pcl.lisp
@@ -215,7 +215,7 @@
 (defun make-pcl-pdf (&optional (out #P"/tmp/pcl.pdf"))
   (let ((page-number 1))
     (tt:with-document (:mode :outlines)
-      (pdf:append-child-outline (pdf:outline-root pdf:*document*)
+      (rulisp::append-child-outline (pdf::outline-root pdf:*document*)
                                 "Practical Common Lisp"
                                 (let ((pdf:*page* (pcl-first-page)))
                                   (pdf:register-page-reference "Practical Common Lisp")))
(END)
</code>
Hedin - 19.03.2018 21:57
[#] Ответ на комментарий от Hedin 19.03.2018 21:57
Мне понадобилось два года и один день на это. :D
Hedin - 19.03.2018 22:04
[#] Ответ на комментарий от Hedin 19.03.2018 22:04
archimag, в папке install в rulisp лежат скрипты. Вот этот rulisp.schema-dump.sql создает полностью все таблицы? А остальные зачем? Если их пытаться накатить, то он выдают ошибки.
Hedin - 21.03.2018 07:37
[#] Ответ на комментарий от Hedin 21.03.2018 07:37
> Вот этот rulisp.schema-dump.sql создает полностью все таблицы? А остальные зачем?

1) Я не помню
2) Судя по "dump" данный скрипт получен на основе существующей базы, возможно его одного достаточно
3) По идее, в процессе разработки вначале был создан users.sql, потому были изменения users.update-01.sql и users.update-02.sql. Аналогично для forum и format.

В более развитых средах есть понятие "эволюций" или "миграций", которые предлагает схему обновления БД по мере развития проетка, но для CL я такого не видел.
archimag - 21.03.2018 12:17
[#] Ответ на комментарий от archimag 21.03.2018 12:17
Уже как минимум два пакета появились.:)
https://www.cliki.net/cl-migrations
https://www.cliki.net/database-migrations
Hedin - 21.03.2018 12:34
[#] Ответ на комментарий от Hedin 21.03.2018 12:34
Кто-нибудь сталкивался с такой ошибкой?

<code>
Couldn't write to #<SB-SYS:FD-STREAM for "socket 127.0.0.1:5000, peer: 127.0.0.1:57544" {100B7C8183}>:
  Отказано в доступе.
   [Condition of type SB-INT:SIMPLE-STREAM-ERROR]

Restarts:
 0: [ABORT] abort thread (#<THREAD "hunchentoot-worker-127.0.0.1:57544" RUNNING {100B7C91F3}>)

Backtrace:
  0: (SB-IMPL::FLUSH-OUTPUT-BUFFER #<SB-SYS:FD-STREAM for "socket 127.0.0.1:5000, peer: 127.0.0.1:57544" {100B7C8183}>)
  1: (SB-IMPL::FINISH-FD-STREAM-OUTPUT #<SB-SYS:FD-STREAM for "socket 127.0.0.1:5000, peer: 127.0.0.1:57544" {100B7C8183}>)
  2: (FINISH-OUTPUT #<SB-SYS:FD-STREAM for "socket 127.0.0.1:5000, peer: 127.0.0.1:57544" {100B7C8183}>)
  3: (HUNCHENTOOT:HANDLE-STATIC-FILE #P"d:/Dev/lisp/lispstick/projects/lisper.ru/rulisp/resources/static/image/gecko.png" "image/png")
      Locals:
        HUNCHENTOOT:CONTENT-TYPE = "image/png"
        HUNCHENTOOT::FILE = #<SB-SYS:FD-STREAM for "file d:\\Dev\\lisp\\lispstick\\projects\\lisper.ru\\rulisp\\resources\\static\\image\\gecko.png" {100B8595E3}>
        PATHNAME = #P"d:/Dev/lisp/lispstick/projects/lisper.ru/rulisp/resources/static/image/gecko.png"
  4: (RESTAS::RESTAS-DISPATCH-REQUEST #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<RESTAS::RESTAS-REQUEST {100B7D51E3}>)
      Locals:
        RESTAS::ACCEPTOR = #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)>
        RESTAS::REQUEST = #<RESTAS::RESTAS-REQUEST {100B7D51E3}>
  5: ((:METHOD HUNCHENTOOT:HANDLE-REQUEST (HUNCHENTOOT:ACCEPTOR HUNCHENTOOT:REQUEST)) #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<RESTAS::RESTAS-REQUEST {100B7D51E3}>) [fast-method]
  6: ((:METHOD HUNCHENTOOT:PROCESS-REQUEST (T)) #<RESTAS::RESTAS-REQUEST {100B7D51E3}>) [fast-method]
  7: ((:METHOD HUNCHENTOOT:PROCESS-REQUEST :AROUND (RESTAS::RESTAS-REQUEST)) #<RESTAS::RESTAS-REQUEST {100B7D51E3}>) [fast-method]
  8: (HUNCHENTOOT::DO-WITH-ACCEPTOR-REQUEST-COUNT-INCREMENTED #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<CLOSURE (LAMBDA NIL :IN HUNCHENTOOT:PROCESS-CONNECTION) {100B7D455B}>)
  9: ((:METHOD HUNCHENTOOT:PROCESS-CONNECTION (HUNCHENTOOT:ACCEPTOR T)) #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<USOCKET:STREAM-USOCKET {100B7C82D3}>) [fast-method]
 10: ((:METHOD HUNCHENTOOT:PROCESS-CONNECTION :AROUND (HUNCHENTOOT:ACCEPTOR T)) #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<USOCKET:STREAM-USOCKET {100B7C82D3}>) [fast-method]
 11: ((FLET HUNCHENTOOT::PROCESS-CONNECTION% :IN HUNCHENTOOT::HANDLE-INCOMING-CONNECTION%) #<RESTAS:RESTAS-ACCEPTOR (host *, port 5000)> #<USOCKET:STREAM-USOCKET {100B7C82D3}>)
 12: ((LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS))
 13: ((FLET #:WITHOUT-INTERRUPTS-BODY-1138 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
 14: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE))
 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-358 :IN SB-THREAD::CALL-WITH-MUTEX))
 16: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {312FFB4B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD ..
 17: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "hunchentoot-worker-127.0.0.1:57544" RUNNING {100B7C91F3}> NIL #<CLOSURE (LAMBDA NIL :IN BORDEAUX-THREADS::BINDING-DEFAULT-SPECIALS) {..
 18: ("foreign function: #x4338BC")
 19: ("foreign function: #x403751")
 20: ("foreign function: #x4501E0")
</code>

Периодически выпадает, выходишь из debugger'а и сайт дальше работает.
Hedin - 24.03.2018 23:14
[#] Ответ на комментарий от Hedin 24.03.2018 23:14
> Кто-нибудь сталкивался с такой ошибкой?

Я не сталкивался. 

archimag - 24.03.2018 23:20
@2009-2013 lisper.ru