LINUX.ORG.RU

Сообщения RusNekromant

 

Не могу разобратся с CL-GTK2+

Здравствуйте, сейчас нужен виджет table и что бы вставить в ячейки другие виджеты есть замечательная функция table-attach но вот только она вставляет виджеты и выравнивает их по центру а мне нужно по левой стороне.

Вот сама функция (надеюсь верно определил):

(defcfun gtk-table-attach :void
  (table (g-object table))
  (child (g-object widget))
  (left-attach :uint)
  (right-attach :uint)
  (top-attach :uint)
  (bottom-attach :uint)
  (x-options attach-options)
  (y-options attach-options)
  (x-padding :uint)
  (y-padding :uint))

(defun table-attach (table widget left right top bottom &key (x-options '(:expand :fill)) (y-options '(:expand :fill)) (x-padding 0) (y-padding 0))
  (gtk-table-attach table widget left right top bottom x-options y-options x-padding y-padding))
RusNekromant
()

Как работать с postgreSQL в SBCL

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

SBCl работает с postgreSQL только через postmodern. Но ввиду довольно распространённого названия библиотеки, всё никак не найду мануала(на русском, на аглицком есть на оф сайте библы но там ток quickstart)

Ну вот собственно вопрос есть ли какая нибудь книга статья или что то подобное по библиотеке postmodern ну и по postgreSQL, желательно на русском.

RusNekromant
()

Нужно просто отформатировать дату и кодировку в Cl

Здравствуйте, я долго думал писать или нет всё таки предыдущая дискусия на тему почему лисп плох ещё не закончилась, но вопрос появился в другом. 1. Мне нужно вставить в текст, который выводится в файл, дату в формате YYYY-MM-dd HH:mm просмотрел нигму не нашел. На hiperspec нашел только эмммммм если не ошибаюсь get-encoding-date(писал с памяти) но она просто возвращает последовательно полную дату. Что в принципе неплохо но нужно писать велосипед(ну то есть надеюсь уже написано) что бы вывести нормально. 2.Нужно сохранить текст в определённой кодировке, сейчас это «UTF-8», по умолчанию сохраняется «CP:1251».

RusNekromant
()

Удалить символ конца строки в CL

Здравствуйте, всё никак не могу при считывании CSV файла в Хэш-таблицу, символ перевода строки.

вот код:

(defun парсер-CSV (file Хэш-таблица)
;Обнуление строк и столбцов
  (setf Строка 0
		Столбец 0)
;Открытие файла
  (with-open-file (Поток file :direction :input)
;итерирование по потоку из файла
    (loop
       for Строка-потока = (read-line Поток nil)
	   ;если строка не равна nil
       while Строка-потока
	   do(progn(incf Строка);увеличение строки на одну еденицу
	   (setf Столбец 0);Сброс значения столбца до нуля
	   (loop for var in (cl-ppcre:split ";" Строка-потока);итерирование строки по столбцам
	   do(progn (incf Столбец);увеличение строки на еденицу
	   (setf(gethash (Format nil "~a,~a" Строка Столбец) Хэш-таблица)var)))))))

Просто записывается в хэш вместе с символом и потом если эта ячейка вставляется в середину строки то каретка переводится на следующую строку. Как я пробовал решить проблему могу написать если нужно. В емаксе этот символ непечатаемый отображается как «^M» но в инспекторе «Return». Простое сравнение на eql не работает....

RusNekromant
()

Преобразование типов в lisp

Здравствуйте. Не могу найти как преобразовать строку в число. Вот число в строку нашел write-to-string а наоборот всё никак не найду. type-of пишет что формат (SIMPLE-ARRAY CHARACTER (1)) а мне нужен real. Вообще суть в том что в хеш таблице полно данных как чисел так и строк, мне нужно обработать числа и строки отдельно. Что бы определить число или строка передо мной хочу просто использовать вот такую штуку

(if (not (typep (gethash key hash-table)'number))...)

RusNekromant
()

Сетевые игры на основе лиспа

Здравствуйте, вот сидел сегодня и задумался о том как сделать сетевую игру с помощью лиспа. Ничего сложно не охота так просто для начала крестики нолики. Да я понимаю что в сети всего этого полно и даже онлайн есть, но охота реализовать самому и посмотреть насколько легко справится лисп(вернее я справлюсь с помощью лиспа) сам по себе конечно код тривиальный если просто играть по очереди одной мышкой... Но охота связаться с человеком который в локальной сети сидит и который может сидеть на другом конце страны... как это реализовать? Ща вот полазил по нигме с запросом «Сетевые игры на лиспе» и подобные запросы. Мне ничего не выдало кроме того как создать сайт на лиспе. С чего начать, может кто то статью знает с примерами или книгу? А может на лиспе всё это дело слишком сложно и не стоит заморачиваться?

RusNekromant
()

Пояснить код с диалогом закрытия окна в CL-gtk2+

Здравствуйте, вот код:

		(g-signal-connect Окно2 "delete-event" (lambda (widget event)
                                                (declare (ignore widget event))
                                                (let ((dlg1 (make-instance 'message-dialog
																		  :title  "Вопрос вопросов"
                                                                          :text "Ты уверен, а вдруг из за этого погибнет ещё одна вселенная?"
                                                                          :buttons :yes-no)))
                                                  (let ((response (dialog-run dlg1)))
                                                    (object-destroy dlg1)
                                                    (not (eq :yes response))))))
Вернее часть кода, здесь вылетает диалоговое окно спрашивает закрыть или не закрыть программку. Всё работает вот только не пойму как оно работает... я хочу что бы при нажатии кнопки «ОК» кроме закрытия ещё и блок (setf ....) запускался. Прописать этот блок в сигнал окна «destroy» нельзя так как иногда нужно просто закрыть окно без запуска блока (setf.....). Одним словом объясните если не трудно как этот диалог работает.

RusNekromant
()

Я что то недопонимаю в setf в sbcl

Почему не работает на SBCL под виндой, вот этот кусок?

(setf (Gethаsh(format nil "~a~a" Строка Столбец)Начальные-х) (* Строка 50)
(Gethаsh(format nil "~a~a" Строка Столбец)Начальные-у) (* Столбец 25)
(Gethаsh(format nil "~a~a" Строка Столбец)Конечные-х) (* (+ Строка 1) 50)
(Gethаsh(format nil "~a~a" Строка Столбец)Конечные-у) (* (+ Столбец 1) 25))

он пытается присвоить толи Gethаsh <=(format nil «~a~a» Строка Столбец) толи говорит что типа (setf Gethаsh) такой функции нет.... не пойму что он хочет... и как это обойти? Мне нужно что бы жестко по ключам записывалось в хэш таблицу, ключи естественно уникальны... и тем более мне нужно такой же алгоритм использовать при вызове значений... тоесть gensim не покатит....

RusNekromant
()

Преобразовать число в строку на лиспе

Вопрос маленький но важный, у меня получается число в виде строки, после того как выдерну из текстового поля число. Как преобразовать эту строку в число? можно конечно парсер строки и всё такое, но я надеюсь до этого не дойдёт должна же быть стандартная функция. Кста пишу сюда потому как перелазил штук 20 страниц инета пролистал ПЦЛ но нет нигде ответа.

RusNekromant
()

Отослать е-mail через lisp а именно cl-smtp и cl-mime

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

(asdf:oos 'asdf:load-op :cl+ssl)
(asdf:oos 'asdf:load-op :cl-smtp)
(asdf:oos 'asdf:load-op :cl-mime)
(asdf:oos 'asdf:load-op :cl-BASE64)
(asdf:oos 'asdf:load-op :arnesi) 
(asdf:oos 'asdf:load-op :cl-prevalence)
(asdf:oos 'asdf:load-op :cl-gd)
  
(defun Отправить ()
	(with-open-file (поток-текста "C:/lisp/sbcl/Текст.txt")
		(setf Текст (read поток-текста)))
	(with-open-file (поток-рецепиентов "C:/lisp/sbcl/Рецепиенты.txt")
		(setf *Колличество-потоков* (read поток-рецепиентов))
		(loop for и from 1 upto *Колличество-потоков*
			do(send-email Текст(read поток-рецепиентов)))))

(defun send-email (text &rest reciepients)
  "Generic send SMTP mail with some TEXT to RECIEPIENTS"
  (cl-smtp:with-smtp-mail (out "хост"  "логин" reciepients :port 465 :authentication  (List "логин" "пароль") :local-hostname "логин")
    (cl-mime:print-mime out
	(make-instance
        'cl-mime:multipart-mime
        :subtype "mixed"
        :content (list
		(make-instance
                   'cl-mime:mime
                   :type "image"
                   :subtype (string-downcase (symbol-name (blob-type "E:\666.JPG")))
                   :encoding :base64
                   :content (flexi-streams:with-output-to-sequence (s)
                              (blob-to-stream "E:\666.JPG" s)))
		(make-instance 'cl-mime:mime
			:type "text"
            :encoding :base64
            :charset "UTF-8"
            :content (arnesi:string-to-octets text :utf-8))))
		#|(make-instance 'cl-mime:text-mime
            :encoding :base64
            :charset "UTF-8"
            :content (arnesi:string-to-octets text :utf-8))|#
      t t)))
и мне пишет ошибку что blob-type нет такого....тоесть не ошибка данных а именно типа нет такой функции или переменной.

вот статья по образу которой делал http://lisper.ru/articles/sendind-smtp-mail-with-utf-8-characters а это статья по образу которой пытался сделать приделать атач http://netzhansa.blogspot.com/2008/03/refactoring-cl-smtp.html

RusNekromant
()

BLOB-TYPE в SBCL

Какая библиотека в sbcl используется что бы перегонять файлы в Blob?

RusNekromant
()

Запуск SBCL и ввод строк автоматически

Создал отдельную тему так как в предыдущей ветке немного другая специфика. Мне нужно что бы при запуске SBCL вводилось две строки автоматически. Так как пользователь туп и глуп и заставить его после запуска ввести вручную (так как в SBCL не работает копи-паст)

(in-package :пакет.главный)
(Главное-окно)

тем более это не совсем «айс» для пользователя винды, привыкшего тыкать кнопочки)))) Пробовал батники, но как то плохо они с SBCL дружат. хотя может косяк во мне я только сегодня начитался статей про бат файлы и мог что то напутать. Может есть что то кроме батников?... А если только батники то в чём ошибка вот тут:

SBCL.exe < ECHO (in-package :пакет.главный)
SBCL.exe < ECHO (Главное-окно)
Pause
Естественно батник запускаю в директории SBCL. Пробовал в отдельный файл выносить команды и прописывать одной командой:
SBCL.exe < Файл.txt
Pause
Но всё равно ничего не выходит SBCL на что то ругается а я не могу понять на что именно.

RusNekromant
()

Дистрибутив

Здравствуйте. Дописал проект свой и задумался как перенести его на другой комп. Нашел статейки по этой теме но так особенно ничего не понял. Я вижу три варианта.

1. Самый тупой это поставить на новой машине SBCl,либы,прописать Path вручную поставить емакс, и тупо копипастом запускать. Естественно это не подходит так как это верх тупости. 2. Это перезаписать (если ошибся в термине то поправьте) ядро sbcl что бы сразу запускался SBCL с уже вшитым внутрь кодом (другими словами сделать образ лисп машины). (require 'ASDF)

(load «C:\\.....»)

(save-lisp-and-die «test.exe» :executable t)

есть косяк в этой схеме он почему то отказывается загружать мой файл. возможно из за того что у меня присутствует там кирилица. Понять что именно не так не могу. Либы он прогружает а вот определение пакета походу не хочет делать. 3. Я слышал что можно сделать всё как то с .bat файлом но я даже не представляю что там и как.

Платформа как вы уже наверное поняли Windows. Помогите сделать нормальный дистрибутив который смог бы установить «виндузятник». Заранее благодарен, но прозьба помочь а не посылать учить мануал SBCL.

RusNekromant
()

Реализовать на лиспе отправку E-mail-ов

Хочу разобраться в этом вопросе. И первым делом полез в гугл мне подошло только вот эта статья http://lisper.ru/articles/sendind-smtp-mail-with-utf-8-characters ну я тупо скопировал код, поставил библиотеки и.... и ошибка вываливается. Он пытается подключится и его сервак шлёт далеко... Вообще здесь на работе прокси сервер может быть из за этого, вообще не знаю с чего начать подскажите или пример приведите вот код

(asdf:oos 'asdf:load-op :cl-smtp)
(asdf:oos 'asdf:load-op :cl-mime)
(asdf:oos 'asdf:load-op :cl-BASE64)
(defun send-email (text &rest reciepients)
  "Generic send SMTP mail with some TEXT to RECIEPIENTS"
  (cl-smtp:with-smtp-mail (out "localhost" "noreply@fin-ack.com" reciepients)
    (cl-mime:print-mime out
                        (make-instance 'cl-mime:text-mime
                                       :encoding :base64
                                       :charset "UTF-8"
                                       :content (arnesi:string-to-octets text :utf-8))
                        t t)))
вот ошибка
Socket error in "connect": 0 (No error)
   [Condition of type SB-BSD-SOCKETS:SOCKET-ERROR]

Restarts:
 0: [RETRY] Retry SLIME REPL evaluation request.
 1: [ABORT] Return to SLIME's top level.
 2: [CLOSE-CONNECTION] Close SLIME connection.
 3: [ABORT] Exit debugger, returning to top level.

Backtrace:
  0: (USOCKET:SOCKET-CONNECT "localhost" 25)[:EXTERNAL]

RusNekromant
()

Типы данных в SBCL

The value 1232.0d0 is not of type (SIGNED-BYTE 32). [Condition of type TYPE-ERROR]

вот это мне пишет отладчик, я так понимаю тип числа не подходит для функции. Как привести это число к типу (Наверное SIGNED-BYTE 32) или просто не дробному. PCL не знает там написано что это не тема данной книги. По гуглу лазим но достаточно безуспешно, все говорят что типизация данных динамическая. Но я знаю что можно жестко задать тип переменной или число привести в определённый вид. Я не знаю как это сделать. Если что то не понятно пишите поясню, выложу код по возможности.

RusNekromant
()

Ощие вопросы о CL-GTK2+ и графике

интересуют вопросы некоторые:

1. Как таки изменить программно размер Drawing-area уже после его создания?

2. Как сделать кнопки скруглёнными, у меня они почему то квадратные(работаю в WindowsXP и 7 всё одинаково и там и там).

3. Можно ли кроме 4-х форматов (.png, .svg, .ps, .pdf), использовать что то ещё? Ну например jpeg.

4. Можно ли какое нибудь видео вставить?

Прошу помочь если не очень трудно.

RusNekromant
()

Насчёт размера пикселя в lisp и CL-GTK2+

Размер пикселя на экране с размером пикселя в файле может не совпадать (поэтому и искажения идут) но открывая файл в режиме «реального размера» (то есть по умолчанию) он скорее всего открывает файл так что делает размер пикселя на экране равным размеру на картинке, правильно? И тогда что бы узнать сколько миллиметров пиксель нужно просто узнать размер экрана рабочей станции и сколько дюймов сам экран. Правильно?

Всё это мне нужно что бы показать в графическом редакторе что допустим он провёл линию в 10см. Открываю картинку в Cairo2 вот так

(image-surface-create-from-png Имя-и-путь)

опять же мне нужно операции с масштабом делать а как я могу масштабировать не зная размера линии.

И собственно если всё вышесказанное правильно, то как мне узнать разрешение рабочей станции и dpi?

RusNekromant
()

file-chooser-dialog vs криллица в CL-GTK2+

defun Выбор-файла ()
  (let* ((dlg (make-instance 'file-chooser-dialog
							:action :open
							:title "Загрузить"
							:window-position :center-on-parent)))
    (dialog-add-button dlg "Отмена" :cancel)
    (dialog-add-button dlg "Открыть" :ok)
    (set-dialog-alternative-button-order dlg (list :ok :cancel))
    (setf (dialog-default-response dlg) :ok)
	(g-signal-connect dlg "response"(lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (if (= response-id '-5) (progn(Загрузка(file-chooser-filename dlg))
					  (object-destroy dlg))) (object-destroy dlg)))	
	(g-signal-connect dlg "ok" (lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (Загрузка (file-chooser-filename dlg))
					  (object-destroy dlg)))							  
    (widget-show dlg)))

Есть кусок кода всё супер работает пока не попадается файл на кириллице... вот что он пишет.

Illegal :UTF-8 character starting at position 13.
   [Condition of type BABEL-ENCODINGS:INVALID-UTF8-CONTINUATION-BYTE]

Restarts:
 0: [RETURN-FROM-G-CLOSURE] Return value from closure
 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {25237621}>)

Backtrace:
  0: ((LAMBDA (BABEL-ENCODINGS::SRC BABEL-ENCODINGS::START BABEL-ENCODINGS::END BABEL-ENCODINGS::DEST BABEL-ENCODINGS::D-START)) #.(SB-SYS:INT-SAP #X02A54260) 0 33 "c:\\Lisp\\SBCL\\ 
Как мне заставить GTK понимать кириллицу? Я так понимаю всё таки GTK не воспринимает кириллицу а не лисп, потому что если я макросу (with-open-file (поток «C:/lisp/sbcl/Пробнаясохранка.arts»)) то всё ок а вот если GTK то ... прошу помочь.

RusNekromant
()

scrolled-window в CL-GTK2+

(defun Главное-окно ()
  (within-main-loop
    (let* ((Окно(make-instance 'gtk-window 
			       :type
			       :toplevel
			       :window-position 
			       :center
			       :title "АртСмет представляет!"
			       :default-width 600
			       :default-height 480
			       :app-paintable t))
		(Скролл (make-instance 'scrolled-window :hscrollbar-policy :automatic :vscrollbar-policy :automatic))
	   (Строка-меню (make-instance 'menu-bar))
	   (Меню-закладок (make-instance 'notebook :enable-popup t))
	   (Холст (make-instance 'drawing-area))
	   (В-бокс (make-instance 'v-box))
	  (container-add Окно В-бокс)
	  (container-add Скролл Холст)
      (box-pack-start В-бокс Строка-меню :expand nil)
      (box-pack-start В-бокс меню-закладок :expand nil)
      (box-pack-start В-бокс Скролл)
      (widget-show Окно)

Не получается замутить Скролл для Холста, одним словом есть холст на котором я рисую ща та картинка есть прогружается стандартно Cairo так вот картинка больше чем окно. И хочу что бы скролом можно было просмотреть. Так же хочу реализовать спайку картинок, но из за того что нет скрола я не могу просмотреть результат... я надеюсь понятно обрисовал проблему.

p.s. Код на самом деле длинне но я его урзал, поэтому могут быть несостыковки некоторых частей.

RusNekromant
()

Cairo и его контекст в CL-GTK2+

;Эта функция воспринимает как аргумент - виджет, который будет перерисован. В нашем случае это холст.
(defun Художник (widget)
  ;в дальнейшем нам может потребоваться информация о размерах виджета. Размеры мы биндим к переменным w и h.
   (multiple-value-bind (w h) (drawable-get-size (widget-window widget))
    ;привяжем контекст cairo к виджету холст.
    (with-gdk-context (ctx (widget-window widget))
      (with-context (ctx)
      ;чтобы не нагромождать код, вынесу все рисование в функцию подмастерье. Этой функции я передаю и параметры w и h.
	(Подмастерье)  
nil))))

;Ну и наконец то ради чего все это писалось - функция Художник
(defun Подмастерье() 
  ;(set-source-rgb 1 1 1) ;выберем цвет заливки фона
  ;(paint) ;заливаем
(set-source-surface (image-surface-create-from-png "C:/999.png") 0 0)
  (paint)
  (loop for *и* from 1 upto *примитив* ;(- *примитив* 1) 
     do(when  (Gethash *и* х)
	 (when (> (Gethash *и* х) 0)
	   (when (> (Gethash *и* переменная-х) 0)
	 ;(unless (= (Gethash *и* х) (Gethash *и* Переменная-х))
	     (when (Gethash *и* у)
	       (when (> (Gethash *и* у) 0)
		 (when (> (Gethash *и* переменная-у) 0)
		   (progn(save)
			 (set-line-width (Gethash *и* Толщина-линии )) ;выбираем толщину линии
			 (set-source-rgba (Gethash *и* Красный) (Gethash *и* Зеленый) (Gethash *и* Синий) (Gethash *и* Прозрачность)) ;задаем цвет линии
			 (move-to (Gethash *и* х) (Gethash *и* у)) ;перемещаемся в точку 0 0
			 (line-to  (Gethash *и* Переменная-х) (Gethash *и* Переменная-у))			 
			 (stroke)
			 (restore))))))))))

Всё работает но вот только памяти жрёт немеренно, получается каждый раз вызывая функцию художник я увеличиваю расход оперативки на 20мб(примерно), естественно через время у меня вылетает ..._Access_violation... Я так понимаю что каждый раз создаётся новый контекст рисуя его поверх первого, в итоге конечно всё плачевно. в примерах везде только так и написано делать, а как сделать что бы он в одном контексте рисовал или хотя-бы как то манипулировать ими? Я вообще плохо себе представляю что такое контекст, думаю что это просто маска на любой объект, я прав?

RusNekromant
()

RSS подписка на новые темы