やろーじだい

ブログです

lein-sass4clj のインストール

些細なことではまって時間がかかってしまったのでまとめておく。基本的に lein help sass4clj 読めという文を見逃がしていたことによる。

インストール

project.clj:plugins に以下を追加する。最新のバージョンについては https://github.com/Deraen/sass4clj

[deraen/lein-sass4clj "0.3.1"]

はまった点

まず For each .sass or .scss file not starting with _ in source-dirs creates equivalent .css file. という文を defproject 直下の :source を意味すると勘違いした。 sass4clj 用の設定は :sass の後に続ける。またこの時以下のようなエラーが出た。

$ lein sass4clj once
java.lang.IllegalArgumentException: No implementation of method: :as-file of protocol
...

:source-paths はベクタで定義をする必要があった。leiningen の設定ファイル共通の話で、キーの名前が複数系の場合はベクタになることに今更気が付いた。

;; 間違い
:sass {:source-paths "src/sass"
         :target-path "resources/public/css"
         :output-style :nested}
;; 正しい
:sass {:source-paths ["src/sass"]
       :target-path "resources/public/css"
       :output-style :nested}

最後に以下のようなエラーが出てしばらく悩んだ。

$ lein sass4clj once
Compiling ClojureScript...
Compiling {sass}... test.sass
Error: Invalid CSS after "body {": expected "}", was "{"
        on line 1 of src/sass/test.sass
>> body { {
   ------^

Subprocess failed

これは SCSS シンタックスを使う場合は拡張子を .scss にする必要があった。これは sass の仕様をよくわかってなかった。

The SICP Picuture Language を利用する際に発生した問題と解決方法

勉強会中に図形言語を導入しようとした際、参加者全体でいくつかつまずいてしまい時間がかかったのでまとめる。

https://planet.racket-lang.org/package-source/soegaard/sicp.plt/2/1/sicp-manual.html

ライブラリがロードできない

> (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))

上記関数を repl で実行するとエラーが出てしまう。 (エラー文の記録を忘れてしまった)

解決方法

以下のように scheme(racket) ファイルに記述して load する。

#lang racket

(require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))

(paint diagonal-shading)
> (load "filename")

画像を表示できない

コマンドライン上で起動した Racket で画像を表示しようとした場合や、上記のように scheme ファイルを利用しても表示がされない。または以下のようなエラーが出てしまう。

> (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1)))
> (paint diagonal-shading)
; paint: undefined;
;  cannot reference undefined identifier
; [,bt for context]

解決方法

一般

勉強会参加者は Racket の IDE である DrRacket を利用することにした。

Emacs ユーザーの場合

Emacs ユーザーの場合は racket-moderacket-repl を利用することで画像の表示ができることが確認できた。まず M-x racket-repl で repl を起動する。次に (require (planet "sicp.ss" ("soegaard" "sicp.plt" 2 1))) のコードを書いたバッファーを C-c C-kコンパイルし、(paint diagonal-shading) などを実行する。

#

全体的に名前空間による問題であるように思えたのだが、この図形言語を使う範囲はそこまで広くなかったので一時的な解決に留めた。ターミナル上の repl などでも表示する方法がわかり次第更新する。

金沢に引越した

本日から福島県会津若松市民から石川県金沢市民になることになりました。生まれが福島なので初めての県外になります。

 よくわからない会社で Clojure などのよくわからない言語を書きつつ生活をします。本を読んだりパンを焼いたりしながらなんとか生き残りたいです。