Clojure Libraries Practical: An MP3 Database Copyright © 2003-2005, Peter Seibel In this chapter you'll revisit the idea first explored in Chapter 3 of building an in-memory database out of basic Lisp data structures. This time your goal is to hold information that you'll extract from a collection of MP3 files using the ID3v2 library from Chapter 25. You'll then use this database in Chapters 28 and 29 as part of a Web-based streaming MP3 server. Of course, this time around you can use some of the language features you've learned since Chapter 3 to build a more sophisticated version. The Database The main problem with the database in Chapter 3 is that there's only one table, the list stored in the variable *db* . This time you'll solve both problems by defining a class, table , to represent individual database tables. (defclass table () ((rows :accessor rows :initarg :rows :initform (make-rows)) (schema :accessor schema :initarg :schema))) Defining a Schema (defgeneric make-column (name type &optional default-value)) Inserting Values
Learn Clojure in 15 minutes, perhaps Moving on from pointless flamebait rants, here's something a bit more constructive. Inspired by Tyler Neylon's excellent Learn Lua in 15 minutes, I humbly present my original effort at an equivalent for Clojure (also available as a gist). Further Reading This is far from exhaustive, but hopefully it's enought o get you on your feet. Clojure.org has lots of articles: Clojuredocs.org has documentation with examples for most core functions: 4Clojure is a great way to build your clojure/FP skills: Clojure-doc.org (yeah, really) has a number of getting started articles:
Parallel SSH and system monitoring in Clojure During my 10% time, I created two simple clojure tools to aid in basic sysadmin tasks. Today I’m open sourcing them on github and clojars. parallel-ssh The first tool I built is a library for running commands in parallel on multiple servers. It takes a BASH command and a csv of server names to run the command on. Internally, one clojure agent is spawned per server and each agent is responsible for running the command and storing the result. This library also has a command line interface: I found it useful to wrap that in a BASH script that would run a command on all of our servers. server-stats The second tool is a micro-framework built on top of parallel-ssh. First we define the ssh username to be used and our server groupings: Now we can start adding commands. Note that the doc string is used in the auto-generated usage page, so you should never have to open the config file to figure out what a command does. conclusion resources
Learn Clojure Clojure Atlas – An experimental visualization of the Clojure language and its standard library 全部Clojureのターン(noir+noir-cljs) node.jsがサーバ、クライアントをJSだけで書けるのに対して、ClojureもClojureScriptを使えばサーバ、クライアントを1つの言語で書けます。 さらにClojureにはhiccupというS式を使ったテンプレートエンジンがあるのでサーバ(ビューも含め)+クライアントを全部Clojureで書けます。 まさに全部Clojureのターン! 今回は noir と noir-cljs を使って、単純にボタンを押してテキストを変更するだけのアプリ(?) noirのインストール† まずはnoirをインストールしましょう。 lein plugin install lein-noir 1.2.1 次にサンプルアプリを作成します。 lein noir new zenbu-clojure cd zenbu-clojure noir-cljsの設定† noir-cljsのREADMEに沿って project.clj を修正します。 project.clj† (defproject zenbu-clojure "0.1.0-SNAPSHOT" :description "FIXME: write this!" 次に src ディレクトリ配下の .cljs ファイルが変更された時に自動的にコンパイルが走るよう server.clj を変更します。 src/zenbu_clojure/server.clj† (ns zenbu-clojure.server (:require [noir.server :as server])) (server/load-views "src/zenbu_clojure/views/") (defn -main [& m] (let [mode (keyword (or (first m) :dev)) port (Integer. テンプレート修正† まずはコンパイルされた cljs を読み込むようレイアウトを修正します src/zenbu_clojure/views/common.clj† 次に welcome ページにちょっと手を入れます src/zenbu_clojure/views/welcome.clj† ClojureScript作成† 最後にClojureScriptを書きます。 (同作者の watchtower ここまできたらサーバを起動してみましょう。 lein run 追記
Clojure - home Clojure - Functional Programming for the JVM by R. Mark Volkmann, Partner Object Computing, Inc. (OCI) last updated on 6/2/13 Contents Introduction The goal of this article is to provide a fairly comprehensive introduction to the Clojure programming language. Please send feedback on errors and ways to improve explanations to mark@ociweb.com, or fork the repository and send a pull-request. You said X, but the correct thing to say is Y. Updates to this article that indicate the "last updated" date and provide a dated list of changes will be provided at Code examples in this article often show the return value of a function call or its output in a line comment (begins with a semicolon) followed by "->" and the result. (+ 1 2) ; showing return value -> 3 (println "Hello") ; return value is nil, showing output -> Hello Functional Programming Functional programming is a style of programming that emphasizes "first-class" functions that are "pure". In practice, applications need to have some side effects.
ClojureでJekyllライクなブログジェネレータ「misaki」を作ったった エイプリルフールに被ってしまいましたが、 ClojureでJekyllライクなブログジェネレータを作りました。 misaki / Jekyll inspired static site generator 当ブログはJekyllを使ってGitHub Pages上で運用しているのですが、 jekyll --server のファイル変更から反映までの遅さ(何か手があるのかもしれないですが) とClojurianで主にClojureのブログなのにrubyで運用してるのが納得いかなかったので(rubyは好きですが) 作ってみました。 "misaki" という名前は Jekyll が人名なので同じく人の名前にしたかったのと "美しく咲く" というがちょっと綺麗かなぁという軽いのりで付けてます。 あ、でも伊東美咲は好きです。綺麗なお姉さん好きです。 サンプルの実行† 以下のコマンドでGitHubからとってこれます。 $ git clone $ cd misaki $ lein run sample ローカルサーバが起動するので にアクセスしましょう。 なおサンプルと同じものをデモページとしてこちらにも公開しています。 自分のブログを作る† 1からファイルを用意しても良いのですが、面倒だと思うのでサンプルをコピーして ローカルサーバを起動させましょう。 $ cp -pir sample your_blog $ lein run your_blog ローカルサーバの起動中は watchtower でテンプレートファイルを監視しているので変更すれば自動的にHTMLへのコンパイルが走ります。 デフォルトではコピーしたディレクトリ配下の "_template" 内にテンプレート(.clj)、ポストファイル(_post)、レイアウトファイル(_layout)が 配置されているので、そのあたりを編集しつつブラウザで確認という流れで作っていくことになります。 $ vi your_blog/_template/index.html.clj なおテンプレートなどディレクトリ構成の詳細はドキュメントの Directory Structure を参照してください。 テンプレートサンプル† ; @key value 最後に†
robflaherty/jquery-annotated-source Where is Lisping headed? Where is Lisping headed? Lisping is in the App Store, initial sales and feedback are extremely encouraging, and the first update to fix an issue with unicode, add support for the retina display, and improve inline comments is on its way through the approval process. This begs the question - what comes next? where is Lisping headed? One of my first priorities is support for other Lisps, specifically Clojure. Lisping's appearance will become configurable in the next few updates. Soon after that I will experiment with iPhone/iPod Touch devices and make Lisping a universal application. Stepping back a bit, Slide To Code is heading towards a Python development environment.
highlight.js