manywaypark's Blog
개발, 검색, 함수

초기화 파일을 응용하여 명령행에서 유닉스 스크립트처럼 lisp 파일을 실행하는 법에 대해 간단히 기술한다.

초기화 파일 위치:
  1. 시스템 수준: 기본값은 SBCL_HOME/sbclrc, 없으면, /etc/sbclrc이다. 명령행에서 --sysinit로 지정가능.
  2. 사용자 수준: 기본값은 HOME/.sbclrc이지만 명령행에서 --userinit로 지정가능.
상기 초기화 파일 중에 적절한 것을 선택해서 다음의 내용을 추가한다. 파일이 없으면 만든다.

shebang(#!) 형태의 lisp 프로그램 실행을 위한 초기화 파일 내용:
;;; If the first user-processable command-line argument is a filename,
;;; disable the debugger, load the file handling shebang-line and quit.
(let ((script (and (second *posix-argv*)
(probe-file (second *posix-argv*)))))
(when script
;; Handle shebang-line
(set-dispatch-macro-character #\# #\!
(lambda (stream char arg)
(declare (ignore char arg))
(read-line stream)))
;; Disable debugger
(setf *invoke-debugger-hook*
(lambda (condition hook)
(declare (ignore hook))
;; Uncomment to get backtraces on errors
;; (sb-debug:backtrace 20)
(format *error-output* "Error: ~A~%" condition)
(quit)))
(load script)
(quit)))

test program(hello.lisp):
#!/usr/bin/sbcl --noinform
(write-line "Hello, World!")

실행:
$ chmod +x hello.lisp
$ ./hello.lisp
Hello, World!
$ sbcl hello.lisp
This is SBCL 0.9.14, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.
Hello, World!

참고: http://www.sbcl.org/manual/Initialization-Files.html

2007-10-24
cl-launch를 사용하면 sbcl을 포함한 다른 CL implementation에서도 쓸 수 있는 좀 더 일반적인 방법으로 common lisp 프로그램을 명령행에서 실행할 수 있다.

happy hackin'
Lisp 구현체에 따라 적절한 전역 변수를 읽어서 반환하게 하는 것이 기본이 된다.

환경 변수를 얻는 함수:
(defun my-getenv (name &optional default)
#+CMU
(let ((x (assoc name ext:*environment-list*
:test #'string=)))
(if x (cdr x) default))
#-CMU
(or
#+Allegro (sys:getenv name)
#+CLISP (ext:getenv name)
#+ECL (si:getenv name)
#+SBCL (sb-unix::posix-getenv name)
#+LISPWORKS (lispworks:environment-variable name)
default))

명령행 인수를 얻는 함수:
(defun my-command-line ()
(or
#+SBCL *posix-argv*
#+LISPWORKS system:*line-arguments-list*
#+CMU extensions:*command-line-words*
nil))

출처: http://cl-cookbook.sourceforge.net/os.html (상기 두개 말고도 참고 자료가 좀 더 있다.)

happy hackin'

ASDF brief

함수형 언어/Lisp 2007. 3. 23. 01:14 by manywaypark
ASDF는 "Another System Definition Facility"의 약자로서 간편하게 package들을 관리할 수 있게 해준다. 여기서는 간단한 사용법을 살펴본다.

package 설치(install):
자동 다운로드 및 설치가 되는 경우
;;; imports asdf
(require 'asdf)
;;; imports asdf-install
(require 'asdf-install)
;;; install some package
(asdf-install:install 'some-package)
참고 및 다운로드/설치 가능한 패키지 리스트
설치시 선택한 위치(system-wide 또는 personal)에 파일들이 다운로드 되고 설치된다.
경로는 system-wide는 /usr/lib/sbcl, personal은 ~/.sbcl이다.
일단 한번 설치한 후에는 간단히 (require 'some-package)로 불러서 쓸 수 있다.

자동 설치가 지원되지 않는 것들은 수동 다운로드 후에 파일을 로드하는 조금 성가신 작업이 필요하다.
package 로드(load):
;;; imports asdf
(require 'asdf)
;;; loads some package from disk (current dir. has some-package-on-disk.asd file).
(asdf:operate 'asdf:load-op :some-package-on-disk)

load path 추가: 패키지를 load할 경로 추가하기. 참고
;;; adds asdf load path
(pushnew "/path/to/your/registry/" asdf:*central-registry* :test #'equal)

패키지 삭제하기:
;;; removes a package
(asdf-install:uninstall :package-name)

참고

happy hackin'

ps. 사용된 lisp 구현은 sbcl이다.

slime 설치, 한글 출력

함수형 언어/Lisp 2007. 3. 21. 14:53 by manywaypark
slime은 emacs를 환상적인 lisp IDE로 변신시켜준다.
cvs로 최신 소스를 받거나, 안정버전을 다운로드 한다(최신 개발 소스는 가끔 불안정한 경우도 있다).

~/.emacs에 추가할 내용(밑줄 부분은 자신의 설정에 맞게 변경):
;;; for slime
(setq inferior-lisp-program "/usr/bin/sbcl")
(add-to-list 'load-path "~/hacking/lisp/slime-2.0")
(require 'slime)
(slime-setup)
;;; for utf-8 coding system.
(set-language-environment "UTF-8")
(setq slime-net-coding-system 'utf-8-unix)
상단부는 slime 설정이고 하단부는 utf-8 관련 설정인데, utf-8 관련 설정을 하지 않으면 한글을 출력하려 할 때 다음과 같은 에러 메시지를 뿌리며 정상적인 실행이 안된다.
;;; (format t "한글")
Coding system iso-latin-1-unix not suitable for "00005a(:emacs-rex (swank:listener-eval \"(format t \\\"한글\\\")
\") \"COMMON-LISP-USER\" :repl-thread 8)

이제 남은 것은 M-x slime!!

happy hackin'

관련링크: slime home,cliki slime tips

trac plugin 설치 - TOC 예제

카테고리 없음 2007. 3. 19. 22:00 by manywaypark
trac을 사용해서 svn과 연동을 하면 제법 강력하고 편리한 형상/프로젝트 관리툴을 얻을 수 있다.
좋은 툴들이 언제나 그러하듯 plugin을 통해 확장이 가능하다.

이 문서에서 살펴볼 내용은 track-hacks에 있는 간단한 목차 plugin 하나를 설치하는 예제이다. trac은 이미 설치되어 있다고 가정한다.

먼저 python-setuptools 패키지가 설치되어 있지않다면 설치한다.
그리고, 플러그인이 설치될 디렉토리인 /var/trac/${PRJ_ENV}/plugins 디렉토리가 없으면 만든다.  물론 여기서 ${PRJ_ENV}는 trac이 설치된 환경이다. 한번도 플러그인을 설치하지 않았다면 아마 만들어야 할 것이다.

여기를 클릭해서 뜨는 페이지에서 플러그인을 다운로드 받는다.
다운로드 받은 디렉토리에서, 다음 명령어들을 입력한다.
~$ unzip tocmacro.zip
~$ cd tocmacro/0.9
~$ python setup.py bdist_egg
~$ cp dist/*.egg /var/trac/${PRJ_ENV}/plugins

아마도 압축을 풀고 python 빌드시스템 같은 것으로 배포가능한 바이너리를 빌드한 후에 trac 설치 디렉토리(프로젝트 디렉토리)에 설치하는 것같다(egg는 python 세계의 jar같은 것이다).

아래와 같이 하면 전체 시스템에 설치 된다고 하는데 내 경우엔 제대로 동작하지 않았다(그래서 그냥 위의 방법 대로, 프로젝트 수준에 설치했다).
~$ sudo python setup.py install   # global deployment

이제부턴 trac wiki에서 매크로 [[TOC]]를 아무 페이지에나 삽입하면, 멋진 목차를 볼 수 있을 것이다.

track-hacks에는 다양한 종류의 플러그인이 많이 있다. 이 예제를 바탕으로 하면 설치에 큰 무리가 없을 듯하다.

2009-07-16 세상은 날로 살기 좋아지고 있다 (tocmacro 홈페이지에 나오는 내용이다).
easy_install http://trac-hacks.org/svn/tocmacro/0.11

happy hackin'

update-alternatives

tips & tricks/Linux/Unix 2007. 3. 3. 18:32 by manywaypark
update-alternatives를 사용하면 기본 명령어의 symbolic link들을 손쉽게 관리할 수 있다. 기본 설정을 변경하지 않았다면, /etc/alternatives에 있는 symbolic link들을 사용할 것이다.
기본 편집기를 변경하는 예를 들어 간단히 설명하겠다.
~$ ls -xalh /etc/alternatives/editor
lrwxrwxrwx 1 root root 23 2007-03-02 14:28 /etc/alternatives/editor -> /bin/nano

~$ update-alternatives --list editor
/usr/bin/vim.tiny
/bin/ed
/bin/nano
/usr/bin/emacs-snapshot

~$ sudo update-alternatives --config editor

There are 4 alternatives which provide `editor'.

Selection Alternative
-----------------------------------------------
1 /usr/bin/vim.tiny
2 /bin/ed
*+ 3 /bin/nano
4 /usr/bin/emacs-snapshot

Press enter to keep the default[*], or type selection number: 4
Using `/usr/bin/emacs-snapshot' to provide `editor'.

~$ ls -xalh /etc/alternatives/editor
lrwxrwxrwx 1 root root 23 2007-03-03 18:02 /etc/alternatives/editor -> /usr/bin/emacs-snapshot

이제부터는 명령행에서 editor를 실행하면, 예전의 nano대신 emacs가 실행될 것이다.
(*는 현재 선택된 것을, +는 기본 값을 나타낸다.)

기본 편집기를 변경한다는 것의 의미는 각종 응용프로그램이 사용자 편집을 받을 경우에 기본편집기를 사용하게 된다는 것이다.
ex) svn commit 메시지 입력, crontab -e에서의 예약작업 편집 등.

happy hackin'

X Window 원격 접속

tips & tricks/Linux/Unix 2007. 2. 28. 16:20 by manywaypark
서버 측 설정:
Ubuntu에서 기본적으로 X 윈도우 원격접속이 금지되어 있는 것같다.
시스템 메뉴에서 System > Login Window Preferences 를 선택하거나, 루트권한으로 gdmsetup을 실행한 후에 remote tab에서 원격접속을 허용하게 한다.

클라이언트 설정:
Windows내에서 X window manager(cygwin에 포함된 것 등)를 띄운 상태로 putty를 이용해서 접속한다면, putty설정에서 "Connection > SSH > X11", Enable X11 forwarding을 선택해준다.
Unix 계열에서 ssh를 사용해서 접속한다면, "ssh -X" 또는 "ssh -Y"를 사용해서 접속한다.

ps. 6000번 부터 6063 까지의 TCP 포트를 열어서 X 윈도우에 직접 접속을 허용하는 방법도 있지만, 보안상 별로 좋지 않은 방법이다.

ps2. cygwin에서 X 관련 패키지들은 기본적으로는 깔리지 않는다. setup.exe 실행 후 X11 > xorg-x11-base를 설치한 후에 \usr\X11R6\bin\startxwin.bat를 실행하면 된다.

ps3. 참고: http://narnia.cs.ttu.edu/drupal/node/132

happy hackin'


OSD Lock - OSD 잠금/해제 - LG Flatron Slim

잡담 2007. 2. 27. 15:35 by manywaypark
LG의 FLATRON Slim을 쓰고 있는데 이놈의 OSD가 어느 날부터인가 OSD 버튼을 누르면 "OSD 잠금 상태"라면서 전원버튼 이외에는 아무 버튼도 눌러지지 않았다. 설명서를 뒤질까 하다가 대충 검색을 때려보니 제품발표때의 홍보자료에 관련 내용이 있었다.

결론은, "MENU + AUTO/SET"을 3초 정도 동시에 누르고 있으면 OSD 잠금상태가 설정/해제 된다.

happy hackin'


English:
OSD lock is somewhat annoying.
The conclusion is that just pressing and holding "MENU + AUTO/SET" for 3 second will toggle it.

Ubuntu edgy AMD64에서 eclipse사용하기

java 2007. 2. 3. 15:41 by manywaypark
https://launchpad.net/ubuntu/+source/eclipse/+bug/68053
상기 링크에 여러 해결법들 및 논의들이 나오지만, 현재 기준으로는 거의 맨 아래쪽의 Tobias가 말한 대로 하면 해결되는 듯하다.
내용을 요약하자면, apt source list에 edgy-proposed를 추가한 후에 eclipse 관련 package들을 upgrade한다.

/etc/apt/source.list에 다음 라인 추가:
deb http://archive.ubuntu.com/ubuntu/ edgy-proposed universe main multiverse restricted


upgrade할 패키지 리스트:
eclipse 3.2.1-0ubuntu2
eclipse-jdt 3.2.1-0ubuntu2
eclipse-pde 3.2.1-0ubuntu2
eclipse-platform 3.2.1-0ubuntu2
eclipse-rcp 3.2.1-0ubuntu2
eclipse-source 3.2.1-0ubuntu2

libswt3.2-gtk-java 3.2.1-0ubuntu2
libswt3.2-gtk-jni 3.2.1-0ubuntu2


현재 내 설정:
$ uname -a
Linux desktop 2.6.17-10-generic #2 SMP Tue Dec 5 21:16:35 UTC 2006 x86_64 GNU/Linux
$ java -version
java version "1.5.0_08"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_08-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_08-b03, mixed mode)


happy hackin'

maven 사용하기 - ejb3

java 2007. 1. 30. 16:55 by manywaypark
기본적으로 EJB3에서는 annotation을 사용할 경우 ejb-jar.xml 파일이 필요없는데, 현재 배포되는 maven-2.0.4에 포함된 maven-ejb-plugin은 ejb-jar.xml 파일이 없을 경우 에러를 내고 빌드되지 않는다. maven의 source repository에서 plugin들의 소스를 받아서 'mvn install'을 해주면 패치가 적용되어 ejb-jar.xml 파일이 없어도 ejb 프로젝트를 빌드할 수 있다.

happy hackin'
1 ··· 27 28 29 30 31 
분류 전체보기 (306)
잡담 (20)
함수형 언어 (65)
emacs (16)
java (18)
tips & tricks (154)
사랑 (1)
가사 (0)
독서 (4)
mobile (6)
비함수형 언어 (2)

공지사항

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

03-29 09:57