MacOSX上でMacPortsを使わずにRails開発環境を作る

平成22年3月4日(木) 23時49分51秒
区分
MacPortsよりfink
報告者:
chiba

こんにちは、chibaです。
MacOSX上などにRails開発環境を複数作らなくてはいけなくて色々試行錯誤しています。
環境は、

  • デザイナーさん制作ツール: Coda
  • Ruby on Rails
  • Apache2
  • MacOSXだったり
  • Linuxだったり
  • 貧乏
という感じで、OS環境を2〜3種跨ぎ、かつ、MacOSXとWindowsは主にデザイナーさんが利用するプラットフォームです。
  1. Linuxなら直にRoR環境を構築してしまえば良いし、デザイナーさん達がLinuxは使うことはない
  2. MacOSXも直にMacPortsなどを利用してRoR環境を構築すれば良いけれど、デザイナーさん達はMacOSXをメインに使うらしいので、勝手に各自RoR環境を構築してみて下さいとも言いがたい
  3. 何か問題が起きた場合に、各自で環境を構築してもらうと、何がどうなってエラーになっているのか探るのが面倒臭い
という状況でした。
適当に考えた末、VirturlBox上にRoRの環境を構築し、そのVMイメージを皆で共有すれば楽チンで良いに違いない!ということで試しに、MacOSXの上にVirturlBoxを導入してみました。
ホスト<=>VM間のファイル共有はNFS。
本当は、VirturlBoxの共有ファイル機能を利用したかったのですが、なんだか上手く動かせなかったのでNFSに。
ローカルのファイルをCodaで編集して、Apache/VirturlBoxがホストするページをローカルのブラウザで眺める、という感じで作業してもらうことになりました。
MacOSXは、NFSなどの上で作業すると、._unkoや、.DS〜というファイルを大量にばらまきますが、この構成の場合、作業ディレクトリはホスト側なのでそういうこともありません。
とりあえず、LinuxとMacOSXをホストにして実際に使ってみていますが、可もなく不可もないような、微妙な環境ができあがりました。
もっと他にナイスな組み合わせを教えてください…。■

>View Comments          このページの上へ戻る

C-s/C-rを使おう

平成22年2月26日(金) 00時19分21秒
区分
Emacs
報告者:
chiba

chibaです。依然としてネタ切れです。
WordPressのことを調べようと思って前フリしてましたが、これまた全然進んでません。

ということなので、最近知ったEmacsの知ってる人には、当たり前な機能を紹介したいと思います。
Emacs使いの方は、C-sはもちろん良く利用すると思いますが、C-sで検索モードに入ってからの、C-w、M-yが便利であることを最近知りました。
C-wで単語単位で検索ワードを漸増しつつ検索できたりしますし、M-yは最新のキルリングの内容で検索できます。

また、C-sの応用として、カーソル移動に積極的にC-s/C-rを利用するのも非常に便利であることを再認識しています。
viだとf〜などが便利なのでfを良く使うのですが、EmacsでもC-sで似たようなことはできるんだなあと。
10年位使っていますが、この10年間だいぶ損をしていたなあと思った次第です。

>View Comments          このページの上へ戻る

真の豊かさとは何か

平成22年2月18日(木) 23時29分16秒
区分
生き甲斐
報告者:
chiba

こんにちは、chibaです。
今回は、WordPressのフォームネタの続きの筈なのですが、準備が全く間に合ってないので全然関係ない話を。
当社は、社内のコミュニケーションにskypeが活用されているのですが、Emacs派の私とtaharaさんは、もちろんskype.elを愛用しています。
複数人で会話しているので会話が埋もれがちになるのですが、これまでみんなに見ておいて欲しい作業の報告等には、目立つように絵文字をちりばめて派手にしていました。
しかし、それもだんだんスルーされるようになって来たことに危機感を抱いた私は、報告メッセージをAA化し出力することにし、それのためのelispをやっつけで書いてみました。

(defun omatase (arg title name mesg)
  (interactive "p\nstitle: \nsname: \nsmesg: ")
  (let* ((title-chars (append title nil))
         (last-1~3 (last title-chars 3))
         (butlast3 (butlast title-chars 3))
         (last3 (first last-1~3))
         (last2 (second last-1~3))
         (last1 (or (third last-1~3) 12288)))
    (insert (format "
.
┌○┐%s
│%c|ハハ  お待たせしました、%sさん
│%c|゚ω゚)
│%c| //
└○┘ (⌒)
  し⌒ 

%s

  ハハ  以上、よろしくお願いします
 (゚ω゚)
_(_つ/ ̄ ̄ ̄/_
  \/___/
"
                    (if (null butlast3)
                        ""
                      (apply 
                       #'concat 
                       (mapcar (lambda (c) 
                                 (format "\n│%c|" c))
                               butlast3)))
                    last3
                    name
                    last2
                    last1
                    mesg))))
M-x omataseで
title: 死んでもいやです
name: 名無し
mesg: そんなことできません
と入力すると、
.
┌○┐
│死|
│ん|
│で|
│も|
│い|
│や|ハハ  お待たせしました、名無しさん
│で|゚ω゚)
│す| //
└○┘ (⌒)
  し⌒ 

そんなことできません

  ハハ  以上、よろしくお願いします
 (゚ω゚)
_(_つ/ ̄ ̄ ̄/_
  \/___/
という風に出力されます。ただバッファにAAが出力されるだけですが、Emacsって良いですね。
メッセージは依然適当にスルーされています。 ■

>View Comments          このページの上へ戻る

低価格レンタルサーバーの共有SSLとWordPress (1)

平成22年2月12日(金) 00時53分51秒
区分
やすさ爆発
報告者:
chiba

こんにちは、chibaです。
完全にネタが切れてしまいましたので、普段に遭遇する困ったことを書いて行きたいと思います。
月額500円位からの低価格レンタルサーバーと、WordPressの組み合わせは、個人〜中小企業の強い味方なのではないかと思うのですが、SSLのフォームの設置で一癖あるらしい、と風の噂で聞きました。 具体的には、低価格レンタルサーバーでも共有SSLが追加オプションなしで無料で使えることが多いのですが、共有SSLなので、SSLでないURLとはだいぶ違ったURLになります。 例えば、さくらインターネットならば、

http://www.example.com
に対応する共有SSLのURLは、
https://securexxxx.sakura.ne.jp/example.com
になったり、Joe'sウェブホスティングならば、
https://serverxx.instantssl.co.jp/~example
であったり色々です。
どうやら、この辺りの事情とWordPressのデフォルトの挙動の相性が良くないらしいのですが、この辺りをだらだら探っていきたいと思います。
フォーム作成用のWordPressのプラグインは、Contact Form 7を利用することにし、
  • 1. 何が問題の原因なのかを理解する
  • 2. 先達の解決策を探る
  • 3. WordPressをいじれる位はPHPを勉強する
  • 4. WordPressが設置できる位の人なら簡単に設置/設定できるようなプラグインを作る
  • 位の流れで何回かに分けて書いてゆきたいと思います。
    果してPHPも知らない私にプラグインは作れるのでしょうか。■

    >View Comments          このページの上へ戻る

括り出したい

平成22年2月5日(金) 00時43分42秒
区分
エコロジー
報告者:
chiba

こんにちは、千葉です! 完全なるネタ切れです。 以前のエントリーにも書きましたが、私は返り値をできるだけ使いたくなってしまう派です。 値を返すところは積極的に拾ってゆきたい。 そういう質なので、

if pred
  method(100)
else
  method(200)
end
のようなものを見ると
method(if pred
         100
       else
         200
       end)
と書きたくなってしまいます。ifは分岐が2つですが、Rubyのcase等の複数への分岐も同じくそうです。 LISPだと
(method (if pred 100 200))
という感じですが、このifの纏め方は、LISPではすんなり流れるものの、Rubyだとif〜endが重たくみえるので、なんとなく書いてはいけないようにさえ感じます。
条件演算子なら
method(pred ? 100 : 200)
という風にすっきりなのですが、なんとなく読みづらいですね。

>View Comments          このページの上へ戻る

PerlとC++にしかできないような気がした十五の夜

平成22年1月28日(木) 22時44分00秒
区分
Common LISP愛
報告者:
chiba

こんにちは!、chibaです。 早くも書くネタが無いのですが、どうしたら良いんでしょうか。
今年の私のテーマは「挑戦」。 先日、そんな私にぴったりな、盗んだバイクで走り出したくなる挑戦をみつけました。

  • PerlとC++にしかできないような気がするアノ機能(挑戦者募集中)
  • #!/usr/bin/perl
    # PerlとC++は世界一。
    
    srand(time);
    
    my $a = 0;
    my $b = 0;
    for(my $i = 0; $i < 1000; $i++) {
        (rand(2)<1 ? $a : $b) += 1;
    }
    print "$a, $b\n"
    
    これをPerlや、C++以外の言語で書けるのか、と。
    私は、LISP野郎なのでLISPで回答するとして考えましたが「実行時に変数の名前によって任意の変数にアクセスし、その変数に値を代入できるか」という風にお題を解釈しました。 PerlやC++の場合は、?:にそういう機能があるのでしょう。 Common Lispだとどうなるかというと、「実行時に変数の名前によって任意の変数にアクセス」というのは、シンボル名による変数へのアクセスで可能なので、上をCommon Lispに訳すと
    (let ((a 0) (b 0))
      (declare (special a b))
      (dotimes (i 1000)
        (incf (symbol-value
               (if (< (random 2) 1) 'a 'b))))
      (format t "~A, ~A~%" a b))
    ;⇒ NIL
    ----------
    499, 501
    
    こんな感じに書くことになるのかなあと思いました。
    …というようなことをtaharaさんと昼食時に話していたのですが、taharaさん曰くifにsetfが付いてれば可能なんじゃないかとのこと。 なるほど、確かにそうです。
    setfというのは代入する構文のマクロなのですが、ユーザーが色々カスタマイズできます。 実行時に変数名でアクセス→代入というのではなく、そういう構文をマクロで定義するわけですね。
    ユーザーがifにsetfを書けば良いのですが、これが標準で付いている処理系をどっかでみたなーと思ったので調べてみるとCLISPがそうでした。 CLISPだと標準で
    (let ((a 0) (b 0))
      (dotimes (i 1000)
        (incf (if (< (random 2) 1) a b)))
      (format t "~A, ~A~%" a b))
    ;⇒ NIL
    ----------
    513, 487
    
    と書けます。自分はPerlは書けないのですが、+=をカスタマイズすることによって
    for(my $i = 0; $i < 1000; $i++) {
        if (rand(2) < 1) { 
          $a 
        } else {
          $b
        } += 1;
    }
    
    のようにも書けるようにユーザーが勝手に定義できる、という感じでしょうか。
    こんなことをしているとすぐカオスになりそうですが、LISPに構文は無いようなものなので特に混乱もなかったりします。LISPは単純で良いですね■

    >View Comments          このページの上へ戻る

    Rubyの好きなところ

    平成22年1月21日(木) 23時27分47秒
    区分
    Common LISP 愛
    報告者:
    chiba

    こんにちは、chibaです! 私はCommon Lispからプログラミングを始めたせいか返り値を使ったプログラミングスタイルが好きなのですが、Rubyは多値と配列と可変長引数が統合されたようになっていて、なかなか使い勝手が良く、Rubyの好きなところの一つです。いまのところ一つです。

    x = 3
    [0, *if x.even?
           [1, 2, 3]
         else
           [:a, :b, :c]
         end]
    
    ;⇒ [0, :a, :b, :c]
    
    def iota(n)
      if n.zero?
        0
      else
        [n, *iota(n - 1)]
      end
    end
    
    iota(10)
    ;⇒ [10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    
    Proc.new do |x, y| x * y;end [100,2]
    ;⇒ 200
    
    LISP/Schemeでも、書けるといえば書けるのですが、
    ;; Common LISP
    (let ((x 3))
      `#(0 ,@(if (evenp x)
                 '(1 2 3)
                 '(:a :b :c))))
    ;⇒ #(0 :A :B :C)
    
    (defun iota (n)
      (if (zerop n)
          (list 0)
          `(,n ,@(iota (1- n)))))
    
    ;⇒ (10 9 8 7 6 5 4 3 2 1 0)
    
    (multiple-value-call #'* (values-list '(100 2)))
    ;⇒ 200
    
    ;; もしくは
    (apply #'* '(100 2))
    ;⇒ 200
    
    Rubyの方が統一感があって良いですね。

    >View Comments          このページの上へ戻る

    Geohash

    平成22年1月14日(木) 22時26分25秒
    区分
    疎外感
    報告者:
    chiba

    こんにちは、chibaです。 昨晩は、弊社技師同僚間のTwitterで、Geohashの話題が盛り上っておりました。 話に混ざれずに疎外感を感じつつ就寝しようとしたのですが、ふと、会話中で示されていたGeohashの説明のページを眺めたところ、仕組みが分かるようで、分からないような、微妙にもどかしい感じだったので、だらだらと説明のとおりに上から順にコードを書いてみることにしました。

  • Geohash - Wikipedia, the free encyclopedia
  • そんな感じで、説明の順番のとおりに書いてできたコードが下記です。 なんとなく仕組みは分かったけど、そういえば、エンコード手順の説明は書いてないんだなあ…、と自分勝手なことを考えながら就寝しました。
    (defpackage :geohash
      (:use :cl)
      (:import-from :shibuya.lisp
                    :$ :$*))
    
    (in-package :geohash)
    
    (defun tr (from to string)
      (map 'string 
           (lambda (c)
             (or (some (lambda (x y) 
                         (and (char-equal x c) y))
                       from to)
                 (char-upcase c)))
           string))
    
    (defun 5bits (string)
      (map 'list
           ($ format nil "~5,'0,B" 
              $ read-from-string 
              $ format nil "#32R~A" 
              $ tr "0123456789BCDEFGHJKMNPQRSTUVWXYZ" 
                   "0123456789ABCDEFGHKJKLMNOPQRSTUV" 
              $ string $)
           string))
    
    (defun longitude-latitude (strings)
      (let ((bit-c-list ($* concatenate 'list strings)))
        (loop :for c :in bit-c-list
              :for i :from (if (char= #\0 (car bit-c-list)) 0 1)
              :if (evenp i) :collect c :into even
              :else :collect c :into odd
              :finally (return 
                         (list :longitude
                               (coerce even 'string) 
                               :latitude
                               (coerce odd 'string))))))
    
    (defun bitlist (string)
      (map 'list ($ parse-integer $ string $) 
           string))
    
    (defun decode (bits min mid max)
      (if (endp bits)
          mid
          ($* decode 
              (cdr bits)
              (if (zerop (car bits))
                  (list min (/ (+ mid min) 2) mid)
                  (list mid (/ (+ mid max) 2) max)))))
    
    (defun decode-geohash (string)
      (let* ((u ($ longitude-latitude $ 5bits string))
             (lon (getf u :longitude))
             (lat (getf u :latitude)))
        (list 
         :longitude 
         ($ float $ decode (bitlist lon) -90 0 90)
         :latitude
         ($ float $ decode (bitlist lat) -180 0 180))))
    
    (decode-geohash "u4pruydqqvj")
    ;⇒ (:LONGITUDE 57.64911 :LATITUDE 10.407439)
    

    >View Comments          このページの上へ戻る

    StumpWMは便利です

    平成21年11月6日(金) 18時13分59秒
    区分
    プログラムプレゼンテーション
    報告者:
    chiba

    今回のプログラム・プレゼンテーションのネタはStumpWMです。 StumpWMはタイル型ウィンドウマネージャーなのですが、Common LISPで色々と拡張することができるのが特長です。

    今回は、このちょっとしたカスタマイズネタや使い方です。

    Actindi社内では現在全面的にRedmineで仕事を管理していて、仕事の確認/依頼もチケット番号ですることが非常に多いです。
    いつもチケットの番号でやりとりするのですが、伝えられた番号をぱっと開きたいことが多いので、これをStumpWMで便利にしてみようということで工夫してみました

      
    (DEFPARAMETER *LAST-TICKET* NIL)
    
    (DEFCOMMAND SHOW-TICKET (TICKET-NUMBER) ((:STRING "Ticket#: "))
      (WHEN (RUN-SHELL-COMMAND 
             (FORMAT NIL 
                    "/usr/bin/firefox "https://redmine.example.com/issues/show/~A\""
                     TICKET-NUMBER))
       (SETQ *LAST-TICKET* TICKET-NUMBER)))
    
    (DEFCOMMAND EDIT-IT () ()
      (RUN-SHELL-COMMAND
        (FORMAT NIL
                "/usr/bin/firefox "https://redmine.example.com/issues/edit/~A\""
                *LAST-TICKET*)))
    

    非常にでっちあげ感の漂う適当なコードですが、show-ticket 1234という風に実行すると、Redmineの1234番のチケットがfirefoxで表示されます。
    edit-itコマンドは保存していた直前のチケット番号を編集状態で開くという単純なものです。 ちょっとした工夫ですが、割と便利で愛用しています。
    といった具合で、その他、StumpWMの機能の説明をして1時間をしのぎました。
    みなさんもご興味あれば、StumpWMをお試しあれ。

    >View Comments          このページの上へ戻る

    さようならsed、こんにちはCommon Lisp

    平成21年10月8日(木) 17時18分22秒
    区分
    プログラムプレゼンテーション
    報告者:
    chiba

    chibaです。

    今回のプログラム・プレゼンテーションのネタは日常で使うちょっとしたスクリプトをCommon Lispでやってみようというものです。

    ネタ切れなので自分の ブログに書いたネタ を再演しつつ、ブログでは紹介してなかったwgetも併せて動かしてみました

  • 適当なwget
  • Software ToolsのごとくCommon Lisp上にユーティリティを作成して行けば、Common Lispだけでこういう細かい仕事はできるようになるやもしれません。

    >View Comments          このページの上へ戻る

    技師部隊からの
    お知らせ

    インフルエンザに気をつけて頑張っています

    本頁の来客数
    一万七千二百六十五名

    メンバー一覧

    アクトインディ技師部隊員名簿

    アクトインディへ

    投稿する

    カテゴリー

    アクトインディ

    aaaa