Clojure

CSS Nite in NIIGATA, Vol.4 w/新潟グラムでこんなことを話してきた

6月6日に、新潟にてCSS Nite in NIIGATA, Vol.4 w/新潟グラムというイベントが行われました。登壇者としての参加です。

新潟の地にちゃんと降り立つのは今回が初です。

内容は、Webデザイントレンド。年末には、Shift 9というイベントがあり、9という数字が意味する通り、今年でこのセッションを受け持って9年目となります。

毎年大量にリサーチしたものを自分なりに分析して傾向を紹介しています。セッション時間は長いですが、難しい内容ではなく、制作者でなくても楽しめるものを目指しています。

今回のスライド数は、作成当時500枚。冗長な部分を削除して400枚となったうち、ボツネタを除外して300枚が実際に講演で使われました。

ボツネタは、「おまけ」と称してスライドの最後に100枚ほどつけています。

つまり、イベントに参加していただいた方は、400枚近い資料が手に入ったことになります。お得ですね!

今回は75分くらいお時間をいただいて話してきました。

ここで全部を紹介するわけにはいかないのですが、雰囲気だけちょっと抜粋してみます。

毎回、セッションの冒頭に一つ、その年に気になったリニューアルを紹介することを「まくら」としているのですが、今回はモルガン・スタンレーのリニューアル。

このリニューアルのアートディレクションなどをしている人や会社SapientNitroを紹介し、そのSapientNitroとなるSapientという会社がNitroという会社を買収した当時のキャプチャも紹介(もちろんリアルタイムにキャプチャしてました)

したあと、このセッションの副テーマでもある「キャプチャを通して世界がみえてくる」を掲げました。

セッションのメイン構成

メイン構成は例年通り、

  • 海外デザインの演出面の表現
  • 海外デザインの機能面の表現
  • グローバル企業、上場企業、自治体の傾向

です。

このメインの部分がだいたい250ページくらいあり、特に自治体とかは普段見る人が少ないせいか人気があります。

例えば、昨年1年間でどれくらいリニューアルしたのかなどの情報は定番の構成となっています。

加えて、以前のブログ記事で紹介した通りに、グローバル企業、上場企業、地方自治体の使われている色の変化についてのサブセッションを途中でいれての構成となりました。

そのなかの一つ、上場企業の2014年に使われた主な色はこんな分散になりますが、これと2012年の震災後との比較などを行っています。

色の解析は、ClojureというJava環境上でうごくLisp系プログラミング言語でおこなっています。今後も持っている膨大なビッグデータにアクセスしていろいろな分析をしていこうと思っています。

Webデザイントレンドというのは、とてつもなく巨大なテーマです。僕自身、まだまだ見えてこないところはあるし、今後もやりがいを感じているテーマです。

一見どうでもいいと思えるようなトピックが、時代を象徴していたりします。僕は、Webデザイントレンドは生物学で言うところの収斂進化の一つととらえているところがあって、この世界観はWebデザイントレンドのメインテーマとして毎年冒頭で話しています。

After Darkでも講演が決定しました

こちら、まだ席に余裕がありますので、本記事を読んで、もっと聞きたいなと思ったらぜひ。

今がよくわからなくなってきた企業、団体さまへ

企業・団体向けに出張デザイントレンドみたいなことをやっています。

特に、新規サイト開設やリニューアル時における現状把握などに効果を発揮します。加えてじゃあそこから今後どうしていこうみたいな話をしたりすると一層効果的です。

詳しくはお問い合わせください。

Read More

Clojureのドキュメント生成にmarginaliaを使う

Doccoというツール

Doccoというツールがあります。

これは、CoffeeScriptで書かれたツールで、JavaScriptで書かれているソースコードとそのコメントを整形して非常に見やすいHTMLとしてドキュメント化してくれるものです。

Clojureにはmarginaliaがある

Doccoはいろいろな言語用に移植されたりしていますが、Clojure用のものもmarginaliaという名前で存在します。

こんな感じでdescjopのコードもHTMLになりました。

marginaliaのコード自体、このツールでHTML化しているので見てみると面白いです。

ポイントは、ソースコードにシンタックスハイライトがされ、コードとコメントが1対1で左右に並ぶところでしょうか。一枚のHTMLとして生成されるので、扱いも楽です。

marginaliaの利用方法

利用方法はいたって単純で、ホームディレクトリにある.leinディレクトリ(このディレクトリにprofiles.cljなどとプロジェクトファイルに書くようにプラグインとして指定すると、全プロジェクト共通で使えるようになる)にて設定したら、あとは

[lein-marginalia "0.8.0"]

などと設定します。

ちなみに僕のprofiles.cljは今のところこんな感じです。

{:user {:plugins [[lein-idea "1.0.1"]
                  [lein-typed "0.3.5"]
          [lein-marginalia "0.8.0"]
                  [lein-kibit "RELEASE"]
                  [cider/cider-nrepl "0.8.2"]
                  ]
        :aliases {"slamhound" ["run" "-m" "slam.hound"]}
        :dependencies [[slamhound "RELEASE"]
                       [org.clojure/tools.trace "RELEASE"]]}}

設定を終えたら、ドキュメントを生成したいプロジェクトのディレクトリに移動し、下記コマンドを実行します。

$ lein marg

すると、プロジェクト内の直下に、docsディレクトリというものが出来、その中にuberdoc.html というHTMLファイルが生成されるので、これをブラウザで開きます。

という感じで設定とかもほぼいらず、ワンコマンドのみでドキュメントを生成できるので、おすすめです!

Read More

Clojureで変数名とかに使える文字は実際なところ何なのか

とるに足らぬコネタを。

Clojure – reader

や書籍「プログラミングClojure」の24ページを読むと、英数字および

  • +
  • _
  • *
  • /
  • !
  • ?
  • .

が、シンボルとして今後も使える文字だということが書かれている。また、/と.は名前空間用に特別扱いされるとのこと。

そのおかげで「nil?」みたいな関数名が実現できるわけだ。

が、世の中のClojureのプログラムを見渡すともっといろいろな記号が使われている。

ClojureからJavaScriptのオブジェクトに変換できる「clj->js」というメソッド名では、>が使われている。

こんな風にClojure公式なメソッドとしても上記以外の記号が使われているところをみると、もっと多くありそうだということになる。

Clojureのjvm/clojure/lang/Compiler.javaには下記のように書かれていて、いろいろな記号は置き換えられて処理されているようだ(このあたり詳しい人つっこみください)

static final public IPersistentMap CHAR_MAP =
        PersistentHashMap.create('-', "_",
//                               '.', "_DOT_",
':', "_COLON_",
'+', "_PLUS_",
'>', "_GT_",
'<', "_LT_",
'=', "_EQ_",
'~', "_TILDE_",
'!', "_BANG_",
'@', "_CIRCA_",
'#', "_SHARP_",
'\'', "_SINGLEQUOTE_",
'"', "_DOUBLEQUOTE_",
'%', "_PERCENT_",
'^', "_CARET_",
'&', "_AMPERSAND_",
'*', "_STAR_",
'|', "_BAR_",
'{', "_LBRACE_",
'}', "_RBRACE_",
'[', "_LBRACK_",
']', "_RBRACK_",
'/', "_SLASH_",
'\', "_BSLASH_",
'
?', "_QMARK_");

ただし、上記の記号すべてを使えるわけじゃなくて、REPLで試してみたところ「{」「}」「[」「]」「\」「”」「~」「^」は使えなかった。

また、先頭にあるとNGなケースもある。

まあ、将来的に使えなくなる可能性もあるので、積極的利用は避けたほうがいいのかもしれないが、例えばこんな書き方をしているケースを見かけたことがある

(def a:List<String> ["A" "B"])

実際、評価ができる

=> a:List<String>
["A" "B"]

こんな名前のつけ方ができる言語はあまりなさそうだ。

Read More