Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time. I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program
:move-here #P"/home/brandon/Programming/lisp/cl-i3/"
:prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
1. (RETRY) Retry ASDF operation. 2. (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
Thank you very much for any help you can offer,
Brandon Hale
Le 10/02/2023 à 00:20, Brandon Hale a écrit :
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time. I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program
:move-here #P"/home/brandon/Programming/lisp/cl-i3/"
:prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
Thank you very much for any help you can offer,
ecl produces elf binaries. You will want to compile, and link all your code into this executable file. So you don't need to load asdf or anything else at run-time (in the prologue-code). Instead, you load asdf, quicklisp, and your code, when you generate the executable with make-build.
Have a look at the hello-world project https://gitlab.com/informatimago/hw/ to see how to produce executables.
In particular, in the case of ecl:
https://gitlab.com/informatimago/hw/-/blob/master/generate.lisp#L216
ecl produces elf binaries. You will want to compile, and link all your code into this executable file. So you don't need to load asdf or anything else at run-time (in the prologue-code). Instead, you load asdf, quicklisp, and your code, when you generate the executable with make-build.
Have a look at the hello-world project https://gitlab.com/informatimago/hw/ to see how to produce executables.
In particular, in the case of ecl:
https://gitlab.com/informatimago/hw/-/blob/master/generate.lisp#L216
Thank you, I will look into this link. I must admit, I don't know much C at all, but it looks like the code I really need is all in Common Lisp. I will study all of this and try to make sense of what is happening here. It looks like there is a lot to it!
Brandon Hale
On 2/9/23 18:28, Pascal Bourguignon wrote:
Le 10/02/2023 à 00:20, Brandon Hale a écrit :
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time. I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program
:move-here #P"/home/brandon/Programming/lisp/cl-i3/"
:prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after
resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
Thank you very much for any help you can offer,
ecl produces elf binaries. You will want to compile, and link all your code into this executable file. So you don't need to load asdf or anything else at run-time (in the prologue-code). Instead, you load asdf, quicklisp, and your code, when you generate the executable with make-build.
Have a look at the hello-world project https://gitlab.com/informatimago/hw/ to see how to produce executables.
In particular, in the case of ecl:
https://gitlab.com/informatimago/hw/-/blob/master/generate.lisp#L216
Le 10/02/2023 à 01:07, Brandon Hale a écrit :
ecl produces elf binaries. You will want to compile, and link all your code into this executable file. So you don't need to load asdf or anything else at run-time (in the prologue-code). Instead, you load asdf, quicklisp, and your code, when you generate the executable with make-build.
Have a look at the hello-world project https://gitlab.com/informatimago/hw/ to see how to produce executables.
In particular, in the case of ecl:
https://gitlab.com/informatimago/hw/-/blob/master/generate.lisp#L216
Thank you, I will look into this link. I must admit, I don't know much C at all, but it looks like the code I really need is all in Common Lisp. I will study all of this and try to make sense of what is happening here. It looks like there is a lot to it!
Don't be confused by the various implementations of helloword in that project. Look at the Makefile, only the lisp files are used when compiling with ecl.
Don't be confused by the various implementations of helloword in that project. Look at the Makefile, only the lisp files are used when compiling with ecl.
One thing I am confused about with this are all of the #-(and) in generate.lisp. I know the #+ecl means only run this in ecl, but what do the #-(and)'s do?
Thank you very much for your help,
Brandon Hale
On 2/10/23 07:22, Pascal Bourguignon wrote:
Le 10/02/2023 à 01:07, Brandon Hale a écrit :
ecl produces elf binaries. You will want to compile, and link all your code into this executable file. So you don't need to load asdf or anything else at run-time (in the prologue-code). Instead, you load asdf, quicklisp, and your code, when you generate the executable with make-build.
Have a look at the hello-world project https://gitlab.com/informatimago/hw/ to see how to produce executables.
In particular, in the case of ecl:
https://gitlab.com/informatimago/hw/-/blob/master/generate.lisp#L216
Thank you, I will look into this link. I must admit, I don't know much C at all, but it looks like the code I really need is all in Common Lisp. I will study all of this and try to make sense of what is happening here. It looks like there is a lot to it!
Don't be confused by the various implementations of helloword in that project. Look at the Makefile, only the lisp files are used when compiling with ecl.
Le 10/02/2023 à 19:50, Brandon Hale a écrit :
Don't be confused by the various implementations of helloword in that project. Look at the Makefile, only the lisp files are used when compiling with ecl.
One thing I am confused about with this are all of the #-(and) in generate.lisp. I know the #+ecl means only run this in ecl, but what do the #-(and)'s do?
It's a way to comment out a form.
#+ and #- read a boolean feature expression, and then it reads a s-expr and either ignore it or return it, depending on the value of the boolean feature expression.
feature expression are either symbols (read in the keyword package or qualified symbols), that are then tested for membership in the *features* list; or AND, OR or NOT feature expressions. In the case of AND and OR, if no subexpressions are present, then they evaluate to the neutral element, ie, for AND, true, and for OR nil.
So #-(and) means read the following expression only if true is false. Which is obviously false, so the following expression is ignored.
An equivalent form would be #+(or), which would mean to read the following expression only of nil is true. Which is false too.
Some people could use #+nil ignored but the problem with #+nil, is that :NIL could be in *features*, and there was once upon a time a lisp implementation named New Lisp Implementation and abbreviated as NIL...
Hello Brandon,
------- Original Message ------- On Friday, February 10th, 2023 at 00:20, Brandon Hale bthaleproductions@gmail.com wrote:
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time.
this is the right place, don't worry :)
I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program :move-here #P"/home/brandon/Programming/lisp/cl-i3/" :prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
this error message seems to suggest that you use a system "str" without declaring it in dependencies. In your project file my-project.asd add
(defsystem "my-project" ... :depends-on (... "str") ...)
depending on what you want from your project you may not need (require 'asdf) in the prologue code. Also you may consider passing :monolithic t flag to make-build.
Make sure that you study well-commented example in ecl source repository under examples/asdf_with_dependence/.
Last but not least make sure that you use the latest release (currently it is 21.2.1) or a build from the branch "develop" if you are not afraid of cutting your self on the bleeding edge ;).
If none of these advises helps then please try to minimize the test case to the minimum (basically an asd system with a singly stub file and all dependencies you need) and make an issue ticket on gitlab
https://gitlab.com/embeddable-common-lisp/ecl/-/issues
mind that such action requires registration on the gitlab platform.
Thank you very much for any help you can offer,
Brandon Hale
Best regards, Daniel
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu
"Be the change that you wish to see in the world." - Mahatma Gandhi
Maybe I should get my project up in a repo, but it looks like I have the dependency listed. Here is my package's .asd named cl-i3.asd:
(asdf:defsystem #:cl-i3
:name "cl-i3"
:description "A replacement for i3status written in Common Lisp."
:author "Brandon Halebthaleproductions@gmail.com"
:license "GPLv3"
:version "1.0"
:depends-on (#:cl-ansi-text #:trivial-battery #:str)
:components ((:file "main")))
And the top portion of my main.lisp:
(ql:quickload :trivial-battery)
(ql:quickload :str)
;; allows for colors to be printed
(ql:quickload :cl-ansi-text)
(defpackage :cl-i3
(:use #:common-lisp))
I am definitely not an expert on Common Lisp packages, but this does load up in slime on my machine when I do a
(ql:quickload :cl-i3)
with ecl 21.2.1-3 from Arch Linux.
I need to look at the well-commented example again to see what I'm doing wrong methinks.
Brandon Hale
On 2/10/23 01:07, Daniel Kochmański wrote:
Hello Brandon,
------- Original Message ------- On Friday, February 10th, 2023 at 00:20, Brandon Halebthaleproductions@gmail.com wrote:
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time.
this is the right place, don't worry :)
I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program :move-here #P"/home/brandon/Programming/lisp/cl-i3/" :prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>. I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
this error message seems to suggest that you use a system "str" without declaring it in dependencies. In your project file my-project.asd add
(defsystem "my-project" ... :depends-on (... "str") ...)
depending on what you want from your project you may not need (require 'asdf) in the prologue code. Also you may consider passing :monolithic t flag to make-build.
Make sure that you study well-commented example in ecl source repository under examples/asdf_with_dependence/.
Last but not least make sure that you use the latest release (currently it is 21.2.1) or a build from the branch "develop" if you are not afraid of cutting your self on the bleeding edge ;).
If none of these advises helps then please try to minimize the test case to the minimum (basically an asd system with a singly stub file and all dependencies you need) and make an issue ticket on gitlab
https://gitlab.com/embeddable-common-lisp/ecl/-/issues
mind that such action requires registration on the gitlab platform.
Thank you very much for any help you can offer,
Brandon Hale
Best regards, Daniel
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański |www.turtleware.eu
"Be the change that you wish to see in the world." - Mahatma Gandhi
I think that you should not call quickload in the package file. ASDF should solve depenencies based on a sole (ql:quickload 'cl-i3).
I've tried to reproduce your issue and I've succeeded. After quick investigation it seems that the system cl-str expects that its source code will be available to asdf at any time (even after the compilation). The offensive line is this:
cl-str-20221106-git/str.lisp:144:(defvar +version+ (asdf:component-version (asdf:find-system "str")))
Basically it is as if you were expecting that both make and linux source code are both available at startup.
If you replace this line to maintain some reasonable sanity it will look like this: (defvar +version+ #.(asdf:component-version (asdf:find-system "str")))
Another issue with this system is that it does not declare dependencies on "uiop" and "asdf" despite using both. str.asd should have
:depends-on (:cl-ppcre :cl-ppcre-unicode :cl-change-case "asdf" "uiop")
note the last two lines. With that the following builds and runs without a hitch:
brandon.asd: (in-package #:asdf-user) (asdf:defsystem "brandon" :name "brandon" :depends-on ("str") :components ((:file "main")))
main.lisp: (defpackage #:brandon (:use #:cl)) (in-package #:brandon)
(defun main (str) (format t "Hello ~a!~%" str))
build.lisp (not part of the system): (in-package #:cl-user)
;;; Make the system recognizable by ASDF (asdf:load-asd "brandon.asd")
;;; Pull dependencies and load macros (asdf:load-system "brandon")
;;; Build the program (shared object) (asdf:make-build "brandon" :type :program :move-here "./brandon.out")
(asdf:make-build "brandon" :type :program :monolithic t :move-here ".")
----
note that if you don't want repl then probably you want to add (progn (main "HI") (ext:quit)) in the epilogue code.
Best regards, Daniel
p.s if you feel like it you may make issues in cl-str repository bugtracker.
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu
"Be the change that you wish to see in the world." - Mahatma Gandhi
------- Original Message ------- On Friday, February 10th, 2023 at 20:02, Brandon Hale bthaleproductions@gmail.com wrote:
Maybe I should get my project up in a repo, but it looks like I have the dependency listed. Here is my package's .asd named cl-i3.asd:
(asdf:defsystem #:cl-i3
:name "cl-i3"
:description "A replacement for i3status written in Common Lisp."
:author "Brandon Hale [bthaleproductions@gmail.com](mailto:bthaleproductions@gmail.com) "
:license "GPLv3"
:version "1.0"
:depends-on (#:cl-ansi-text #:trivial-battery #:str)
:components ((:file "main")))
And the top portion of my main.lisp:
(ql:quickload :trivial-battery)
(ql:quickload :str)
;; allows for colors to be printed
(ql:quickload :cl-ansi-text)
(defpackage :cl-i3
(:use #:common-lisp))
I am definitely not an expert on Common Lisp packages, but this does load up in slime on my machine when I do a
(ql:quickload :cl-i3)
with ecl 21.2.1-3 from Arch Linux.
I need to look at the well-commented example again to see what I'm doing wrong methinks.
Brandon Hale
On 2/10/23 01:07, Daniel Kochmański wrote:
Hello Brandon,
------- Original Message ------- On Friday, February 10th, 2023 at 00:20, Brandon Hale [bthaleproductions@gmail.com](mailto:bthaleproductions@gmail.com) wrote:
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time.
this is the right place, don't worry :)
I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program :move-here #P"/home/brandon/Programming/lisp/cl-i3/" :prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
this error message seems to suggest that you use a system "str" without declaring it in dependencies. In your project file my-project.asd add
(defsystem "my-project" ... :depends-on (... "str") ...)
depending on what you want from your project you may not need (require 'asdf) in the prologue code. Also you may consider passing :monolithic t flag to make-build.
Make sure that you study well-commented example in ecl source repository under examples/asdf_with_dependence/.
Last but not least make sure that you use the latest release (currently it is 21.2.1) or a build from the branch "develop" if you are not afraid of cutting your self on the bleeding edge ;).
If none of these advises helps then please try to minimize the test case to the minimum (basically an asd system with a singly stub file and all dependencies you need) and make an issue ticket on gitlab https://gitlab.com/embeddable-common-lisp/ecl/-/issues mind that such action requires registration on the gitlab platform.
Thank you very much for any help you can offer,
Brandon Hale
Best regards, Daniel
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu "Be the change that you wish to see in the world." - Mahatma Gandhi
Wow, thank you so much for figuring all of that out. I tried to make the changes you suggested, and I'm still running into errors, but I'm not sure I have the exact version of str that you do, so I imagine that is the reason. I was able to make a build with a different package ("vector") and it worked fine. Who would have guessed it was a package I was using?
I think I will talk to the str developers upstream and let them know ecl won't MAKE-BUILD with it. In the meantime, I may implement the functions I used from str myself, or embed a source code file from str with just the functions I need, depending on the license of str.
Thank you very much for your help, Brandon Hale
On 2/10/23 14:36, Daniel Kochmański wrote:
I think that you should not call quickload in the package file. ASDF should solve depenencies based on a sole (ql:quickload 'cl-i3).
I've tried to reproduce your issue and I've succeeded. After quick investigation it seems that the system cl-str expects that its source code will be available to asdf at any time (even after the compilation). The offensive line is this:
cl-str-20221106-git/str.lisp:144:(defvar +version+ (asdf:component-version (asdf:find-system "str")))
Basically it is as if you were expecting that both make and linux source code are both available at startup.
If you replace this line to maintain some reasonable sanity it will look like this: (defvar +version+ #.(asdf:component-version (asdf:find-system "str")))
Another issue with this system is that it does not declare dependencies on "uiop" and "asdf" despite using both. str.asd should have
:depends-on (:cl-ppcre :cl-ppcre-unicode :cl-change-case "asdf" "uiop")
note the last two lines. With that the following builds and runs without a hitch:
brandon.asd: (in-package #:asdf-user) (asdf:defsystem "brandon" :name "brandon" :depends-on ("str") :components ((:file "main")))
main.lisp: (defpackage #:brandon (:use #:cl)) (in-package #:brandon)
(defun main (str) (format t "Hello ~a!~%" str))
build.lisp (not part of the system): (in-package #:cl-user)
;;; Make the system recognizable by ASDF (asdf:load-asd "brandon.asd")
;;; Pull dependencies and load macros (asdf:load-system "brandon")
;;; Build the program (shared object) (asdf:make-build "brandon" :type :program :move-here "./brandon.out")
(asdf:make-build "brandon" :type :program :monolithic t :move-here ".")
note that if you don't want repl then probably you want to add (progn (main "HI") (ext:quit)) in the epilogue code.
Best regards, Daniel
p.s if you feel like it you may make issues in cl-str repository bugtracker.
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu[http://www.turtleware.eu]
"Be the change that you wish to see in the world." - Mahatma Gandhi
------- Original Message ------- On Friday, February 10th, 2023 at 20:02, Brandon Hale bthaleproductions@gmail.com wrote:
Maybe I should get my project up in a repo, but it looks like I have the dependency listed. Here is my package's .asd named cl-i3.asd:
(asdf:defsystem #:cl-i3 :name "cl-i3" :description "A replacement for i3status written in Common Lisp." :author "Brandon Hale bthaleproductions@gmail.com" :license "GPLv3" :version "1.0" :depends-on (#:cl-ansi-text #:trivial-battery #:str) :components ((:file "main")))
And the top portion of my main.lisp:
(ql:quickload :trivial-battery) (ql:quickload :str) ;; allows for colors to be printed (ql:quickload :cl-ansi-text) (defpackage :cl-i3 (:use #:common-lisp))
I am definitely not an expert on Common Lisp packages, but this does load up in slime on my machine when I do a
(ql:quickload :cl-i3)
with ecl 21.2.1-3 from Arch Linux.
I need to look at the well-commented example again to see what I'm doing wrong methinks.
Brandon Hale
On 2/10/23 01:07, Daniel Kochmański wrote:
Hello Brandon,
------- Original Message ------- On Friday, February 10th, 2023 at 00:20, Brandon Hale bthaleproductions@gmail.com wrote:
Hello all,
I apologize if this is either the wrong place to get help with ecl, or if this is asked all of the time.
this is the right place, don't worry :)
I've written a small replacement for i3status with common lisp and want to use ecl to make a binary so when i3wm loads, it just loads the cl-i3status binary. I've looked at the ecl documentation online and it suggests doing something like this:
(ql:quickload :cl-i3)
(asdf:make-build :cl-i3
:type :program
:move-here #P"/home/brandon/Programming/lisp/cl-i3/"
:prologue-code '(require 'asdf))
So, I run this and the binary appears. However, when I try to run it, I get this output:
;;; Loading #P"/usr/lib/ecl-21.2.1/asdf.fas" ;;; Computing Hangul syllable names Condition of type: MISSING-COMPONENT Component "str" not found
Available restarts:
- (RETRY) Retry ASDF operation.
- (CLEAR-CONFIGURATION-AND-RETRY) Retry ASDF operation after resetting the configuration.
Top level in: #<process TOP-LEVEL 0x557ade1c2f80>.
I imagine it is just because of my use of quicklisp packages, but how do I compile the packages into the binary?
this error message seems to suggest that you use a system "str" without declaring it in dependencies. In your project file my-project.asd add
(defsystem "my-project" ... :depends-on (... "str") ...)
depending on what you want from your project you may not need (require 'asdf) in the prologue code. Also you may consider passing :monolithic t flag to make-build.
Make sure that you study well-commented example in ecl source repository under examples/asdf_with_dependence/.
Last but not least make sure that you use the latest release (currently it is 21.2.1) or a build from the branch "develop" if you are not afraid of cutting your self on the bleeding edge ;).
If none of these advises helps then please try to minimize the test case to the minimum (basically an asd system with a singly stub file and all dependencies you need) and make an issue ticket on gitlab
https://gitlab.com/embeddable-common-lisp/ecl/-/issues
mind that such action requires registration on the gitlab platform.
Thank you very much for any help you can offer,
Brandon Hale
Best regards, Daniel
-- Daniel Kochmański ;; aka jackdaniel | Przemyśl, Poland TurtleWare - Daniel Kochmański | www.turtleware.eu[http://www.turtleware.eu]
"Be the change that you wish to see in the world." - Mahatma Gandhi