空白一つにこだわりたい(2)

平成22年9月3日(金) 16時59分32秒
区分
Emacs
報告者:
chiba

こんにちは、chibaです!
完全にネタ切れなのですが、毎週1つのエントリーペースは守って行きたいので連投です。
質より量でまいります。
以前、空白一つにこだわりたいというエントリーを書きましたが、割と日々便利に使っています。
最近はちょっと違ったところで、空白を一つにしたい状況に遭遇しています。

- [ ]  こんにちは   あいうえお    かきくけこ
- [ ]   こんばんは  あいうえお   かきくけこ
- [ ]  おはよう  あいうえお   かきくけこ
という感じなのですが、何かから行をコピペしてくると発生することが多いです。
これをちまちま直しているのが非常に手間ということで、適当に、elispを書いてみました。
(defun just-one-space-each ()
  (interactive)
  (save-excursion
    (let* ((begin (progn (beginning-of-line) (point)))
           (end (progn (end-of-line) (point)))
           (begin (min begin end))
           (end (max begin end)))
      (goto-char begin)
      (while (and (re-search-forward " +" nil t) (<= (point) end))
        (replace-match " ")))))
各行で実行すると
- [ ] こんにちは あいうえお かきくけこ
- [ ] こんばんは あいうえお かきくけこ
- [ ] おはよう あいうえお かきくけこ
という風に空白1つに統一できます。快適!
ちなみに、Twitterのつぶやきで最近 delete-indentation (M-^)というのを教えてもらいました。
行の連結に使えるのですが、just-one-spaceの使いどころと似ています。 ■

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

マニュアル/ソースを良く読もう!

平成22年9月3日(金) 16時09分06秒
区分
Emacs
報告者:
chiba

こんにちは、chibaです!
完全にネタ切れなので、中途半端に失敗談を書きます。
skype.elは非常に便利なのですが、自分のEmacsの操作が鈍い所為かチャットの切り換えにいつも、もたもたしておりました。
このままではいけないと思った私は、便利elispを書いて対応することに。
社内のSkypeの利用形態としては、グループチャットが主で使われる部屋も2つ位と少ないので、このチャットをキー一発で開ければOKであろうと思われました。
ということで、skype.elをちらちら見つつ、

(require 'cl)

(defun *skype-find-ai-chat (name)
  (let ((chat (find-if (lambda (x) 
                         (search name
                                 (aref x 2)))
                       (skype--chat-get-recent-objects))))
    (when chat
      (switch-to-buffer
       (skype--open-chat-buffer chat)))))

(defun skype-open-konnichiwa-chat ()
  (interactive)
  (*skype-find-ai-chat "こんにちは"))

(defun skype-open-kombanwa-chat ()
  (interactive)
  (*skype-find-ai-chat "こんばんは"))

(defun skype-open-oyasuminasai-chat ()
  (interactive)
  (*skype-find-ai-chat "おやすみなさい"))

(define-key global-map [(super ?1)] 'skype-open-konnichiwa-chat)
(define-key global-map [(super ?2)] 'skype-open-kombanwa-chat)
(define-key global-map [(super ?3)] 'skype-open-oyasuminasai-chat)
のような物を書いてみました。
これで、Super-1〜2で目的の部屋を一発で開くことができます。
これは割と便利だなーと思いつつ、改めて、skype.elを眺めたところ、
(global-set-key (kbd "M-9") 'skype--anything-command)
とするとanything.elと連携できて良いよ!との解説が。
試してみたところ、断然こっちの方が便利でした。
やはりREADME的なものはちゃんと読もう、と思った次第です。

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

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

平成22年8月27日(金) 14時18分06秒
区分
WordPress
報告者:
chiba

こんにちは、chibaです!
完全にネタ切れなので、中途半端にWordPressのことを書きます。
続きものだった筈の低価格レンタルサーバーの共有SSLとWordPress (1)を書いてから半年程放置してしまいましたが、WordPressも3系が出たということでこのテーマについて少しまとめてゆくことにしてみました。
前回は1つのWordPress+低価格レンタルサーバーでSSLサイトと通常のサイトをどう切り盛りするかというのがテーマでしたが、色々試してみた結果、1つのWordPressでがんばらずにフォーム専用のWordPressを別個にインストールして使うことにするのが一番手間がかからないようです。
ちょっとした問題としては、SSL専用でWordPressを利用する場合、WordPress2系ではどういう訳かSSLの状態では管理画面にまともにログインできませんでした。
大抵のところでは、URLがhttpでもhttpsでも使えるので管理画面のログインはhttpでサイトの利用はhttpsという謎な運用をすることにより回避できていましたが、WordPress3系では解決しているようです。これは嬉しいところですね。
非常に中途半端ですが、次回に続きます…

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

隙があればlispを詰め込んで行きたい (9)

平成22年8月23日(月) 12時36分04秒
区分
LISP
報告者:
chiba

こんにちは、chibaです!
隙があればlispを詰め込んで行く日々ですが、古めのウェブページの累計カウンター的な物を月に一回更新するという作業が発生しました。
sedで一発かなと思いましたが、sedで一発と思ったらCLで書くことにしているので、CLで書いてみます。
具体的な内容ですが、index.htmlの中に、カウンター的なものがあり、数字はそれぞれ1枚のGIF画像になっているのを、毎月集計された数字に更新というところです。
サーバーとは、SSHで通信できます。
折角なので、リモートのファイルをローカルのファイルと同じ感覚で編集できるようなマクロを作成してみました。
といってもリモートからscpしてきて編集するだけのものです。
これと、以前に定義したオレオレsedを組み合わせて任務は完了です。

(exec:define-executable scp)

(defmacro with-output-to-remote-file ((stream path) &body body)
  (let ((temp-file-name (string (gensym "/tmp/with-output-to-remote-file-"))))
    `(unwind-protect (progn
                       (with-open-file (,stream ,temp-file-name :direction :output)
                         ,@body)
                       (scp ,temp-file-name ,path)
                       nil)
       (when (cl-fad:file-exists-p ,temp-file-name)
         (delete-file ,temp-file-name)))))

(defmacro with-input-from-remote-file ((stream path) &body body)
  (let ((temp-file-name (string (gensym "/tmp/with-input-from-remote-file-"))))
    `(unwind-protect (progn
                       (scp ,path ,temp-file-name)
                       (with-open-file (,stream ,temp-file-name)
                         ,@body)
                       nil)
       (when (cl-fad:file-exists-p ,temp-file-name)
         (delete-file ,temp-file-name)))))

(defun カウンター (num)
  (fare-utils:join-strings
   (list
    "<!-- カウンター -->" 
    "<div id=\"count\">" 
    "<table id=\"counter\">" 
    "<tr>" 
    "<td>" 
    (format nil
            "~{<img src=\"./images/count_~a.gif\" alt=\"\" />~%~}"
            (map 'list #'values (write-to-string num)))
    "</td>" 
    "<td> <img src=\"./images/count_ken.gif\" alt=\"\" width=\"18\" height=\"17\" /></td>" 
    "</tr>" 
    "</table>" 
    "</div>"
    "<!-- /カウンター -->")
   :separator #\Newline))
;; 実行例
(with-output-to-remote-file (out "example:public_html/index.html")
  (with-input-from-remote-file (in "example:public_html/index.html")
    (sed "<!-- カウンター -->"
         "<!-- /カウンター -->" 
         (カウンター 12345)
         :IN IN
         :OUT OUT)))

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

隙があればlispを詰め込んで行きたい (8)

平成22年8月6日(金) 15時13分23秒
区分
StumpWM
報告者:
chiba

こんにちは、chibaです!
隙があればlispを詰め込んで行く毎日を連投です。
このシリーズの6回目で本日が祝日であるかどうかを判定したい、というネタを投稿しましたが、そもそも何がしたかったかというと、業務時間かどうかによってFirefoxや、Skypeのプロファイルを切り替えられるようにしてみたら便利かな、というのが動機でした。
ということで、この前のHOLIDAY-Pを拡張して、IN-WORKING-HOURS-Pというのを作成し、就業時間中は、仕事用のプロファイルでアプリを起動することにしてみました。
そういえば今迄説明なしで来てしまいましたが、もちろんウィンドウマネージャーはStumpWMです!

(DEFUN IN-WORKING-HOURS-P ()
  (AND (NOT (HOLIDAY-P))
       (< 6
          (NTH-VALUE 2 (DECODE-UNIVERSAL-TIME (GET-UNIVERSAL-TIME)))
          17)))

;; firefox
(DEFCOMMAND FIREFOX () ()
  "Run or switch to firefox."
  (IF (IN-WORKING-HOURS-P)
      (run-or-raise "/usr/bin/firefox -P \"work\" " '(:class "Firefox"))
      (run-or-raise "/usr/bin/firefox -P \"home\"" '(:class "Firefox"))))
これで、会社で同僚にFirefoxを使って説明をしているときに、アッー!なURLの履歴などが出てきてしまいアッー!っとなることを防げますね。 ■

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

隙があればlispを詰め込んで行きたい (7)

平成22年8月6日(金) 12時15分52秒
区分
LISP
報告者:
chiba

こんにちは、chibaです!
隙があればlispを詰め込んで行く毎日ですが、今日の課題は、

  "8/24(火)、
8/25(水)、
8/26(木)、
8/27(金)
8/31(火)、
9/1(水) 、
9/2(木) 、
9/3(金)
9/7(火) 、
9/8(水) 、
9/9(木) 、
9/10(金)
9/14(火)、
9/15(水)、
9/16(木)、
9/17(日)"
のような、曜日付き日付の文字列が与えられた場合に、日付に対応している曜日が正しいかの判定です。
日付はそれほどでもないですが、曜日は結構間違ってたりすることも多いですよね。
(SET' FOO
  "8/24(火)、
8/25(水)、
8/26(木)、
8/27(金)
8/31(火)、
9/1(水) 、
9/2(木) 、
9/3(金)
9/7(火) 、
9/8(水) 、
9/9(木) 、
9/10(金)
9/14(火)、
9/15(水)、
9/16(木)、
9/17(日)")

(PPCRE:DO-REGISTER-GROUPS ((#'PARSE-INTEGER MON) (#'PARSE-INTEGER DATE) DOW)
    ("(\\d+)/(\\d+)\\((.+)\\).*" FOO)
  (LET* ((CDOW (NTH-VALUE 6 (DECODE-UNIVERSAL-TIME (ENCODE-UNIVERSAL-TIME 0 0 0 DATE MON 2010))))
         (X (FORMAT NIL "~D/~D (~A)" MON DATE (ELT "月火水木金土日" CDOW)))
         (Y (FORMAT NIL "~D/~D (~A)" MON DATE DOW)))
    (FORMAT T "~A => ~A~%" X Y)
    (UNLESS (STRING= X Y)
      (ERROR "曜日が間違っています! (正)~A => (誤)~A~%" X Y))))
動作:
8/24 (火) => 8/24 (火)
8/25 (水) => 8/25 (水)
8/26 (木) => 8/26 (木)
8/27 (金) => 8/27 (金)
8/31 (火) => 8/31 (火)
9/1 (水) => 9/1 (水)
9/2 (木) => 9/2 (木)
9/3 (金) => 9/3 (金)
9/7 (火) => 9/7 (火)
9/8 (水) => 9/8 (水)
9/9 (木) => 9/9 (木)
9/10 (金) => 9/10 (金)
9/14 (火) => 9/14 (火)
9/15 (水) => 9/15 (水)
9/16 (木) => 9/16 (木)
9/17 (金) => 9/17 (日)
;>>> 曜日が間違っています! (正)9/17 (金) => (誤)9/17 (日)
こんな感じのものを書いてしのいでみました。
大体の内容ですが、単純に正規表現で切り出してシステムから割り出したものと一致するかを見ているだけです。
Common Lispで適当に書き捨てましたが、どちらかというとelispで書いた方が役立つ機会は多いかもしれません。 ■

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

Emacsで複数のバッファのファイル名を控えておきたいとき

平成22年7月30日(金) 16時54分38秒
区分
Emacs
報告者:
chiba

こんにちは、chibaです!
Emacsで色々な場所にちらばっている複数のバッファを編集しつつ、編集したファイルだけ名前を控えておきたいとき、皆さんはどのように対処されてますでしょうか。
多分、本当にたまにしか必要に迫られることはないと思うのですが、
自分の考えた解決法は、
M-:して

Eval: (push (buffer-file-name) foo)
してfooにファイル名を蓄積して、*scratch*などで、fooを評価して一覧を得るというものです。
foo ;; C-u C-x C-eなど
("/home/mc/tmp/g13237.del" "/home/mc/work/log/log-2010-07-30.org" ...)
とりあえず、これでしのげましたが、なんとなくEmacs標準の方法がありそうですねー。

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

ERBでのコメントアウトについて

平成22年7月26日(月) 14時55分42秒
区分
ERB
報告者:
chiba

こんにちは!、千葉です!
RailsのViewでは、ERBが使われていますが、#や、=begin、=endの範囲コメントは入れ子になった場合に使い勝手が悪いことが多いですよね。
皆さんざっくりコメントアウトするときには、どういう方法を使っているのでしょうか。
自分は、とりあえず、

<%- if false -%>
コメントアウトしたいこと
<%- end -%>
と書いたり、
def comment(&body)
end
というのを定義して、
<%- comment { -%>
コメントアウトしたいこと
<%- } -%>
などとしてみたりでしのいでいますが、もっと楽な方法はある気がしてなりません。

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

隙があればlispを詰め込んで行きたい (6)

平成22年7月21日(水) 13時02分11秒
区分
LISP
報告者:
chiba

非常にどうでも良い理由で今日が祝日であるかどうかを判定したくなりました。
休日の判定は思ったより色々面倒そうですが、動機がどうでも良いことだけに簡単に済ませたいところ。
ということで、休日情報のAPIが公開されていないか調べたところ、いくつかみつかったのですが、Google Calendarからjsonで手軽に情報を取得できるようなので、これを使ってみることにしました。

(DEFUN GET-CALENDAR-JSON (UT)
  (LET ((REQUEST-URL 
         (KMRCL:MAKE-URL 
          "full"
          :BASE-DIR "http://www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/"
          :VARS `(("start-min" . ,(XYZZY:FORMAT-DATE-STRING "%Y-%m-%d" UT))
                  ("start-max" . ,(XYZZY:FORMAT-DATE-STRING 
                                   "%Y-%m-%d"
                                   (+ UT (* 24 60 60))))
                  ("max-results" . "1")
                  ("alt" . "json-in-script")
                  ("callback" . "handleJson")))))
    (STRING-TRIM "handleJson();"
                 (SB-EXT:OCTETS-TO-STRING
                  (DRAKMA:HTTP-REQUEST REQUEST-URL :FORCE-BINARY 'T)))))

(DEFUN -> (LIST &REST KEYS)
  (IF (ENDP KEYS)
      LIST
      (KMRCL:AWHEN (FIND (CAR KEYS) LIST :KEY #'ZL:CAR-SAFE)
        (APPLY #'-> KMRCL:IT (CDR KEYS)))))

(DEFUN HOLIDAY-P (&OPTIONAL (UT (GET-UNIVERSAL-TIME)))
  (LET ((DAY (NTH-VALUE 6 (DECODE-UNIVERSAL-TIME UT))))
    (OR (<= 5 DAY)
        (< 0
           (CDR
            (-> (JSON:DECODE-JSON-FROM-STRING (GET-CALENDAR-JSON UT))
                :FEED
                :OPEN-SEARCH$TOTAL-RESULTS
                :$T))))))
(HOLIDAY-P)
;⇒ 今日が休日ならT

(HOLIDAY-P (ENCODE-UNIVERSAL-TIME 0 0 0 21 7 2010))
;⇒ NIL

(HOLIDAY-P (ENCODE-UNIVERSAL-TIME 0 0 0 19 7 2010))
;⇒ T
どうやらGoogle Calendarだと今年分しか情報が取得できない様子なのですが、当日が休日なのかどうかを判定できさえすれば良いのでこれでOKとします。

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

WordPressとActiveRecord

平成22年7月14日(水) 16時48分40秒
区分
ActiveRecord
報告者:
chiba

WordPressのデータを一括でいろいろと変更する際には、SQLでいろいろすると思うのですが、もしかしてActiveRecordを使えたら割と便利だったりするのかな、ということでActiveRecordからWordPressのDBに接続してみたりしていました。
しかし、これは既に試してみている人が絶対いそうだなと思ったので軽くググってみたところ、やはり、そのものズバリがありました。
github: jystewart / wp_ar
こんな感じで使えます。

irb(main):254:0> WpUser.count
12
150行弱のコードですが、機械的に変換する作業には割と使えるかもしれないなと思いました。
自分も、CLSQLなどで同じようなものを組んでみたいです。 ■

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

技師部隊からの
お知らせ

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

本頁の来客数
五万三千百七十八名

メンバー一覧

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

アクトインディへ

投稿する

カテゴリー

アクトインディ

aaaa