Hatena::ブログ(Diary)

Alone Like a Rhinoceros Horn

2012-01-15

非同期砂漠

プラギンが哭(な)いてる ユーザーに罵られて

 Vim はやさしさを どこに棄ててきたの

  だけどわたしは 好きよこのエディタ

   肩を寄せあえる vimproc・・・system_bg() がいる

    呼び出し側で あゝブロックしないならば

     つらくはないわ この非同期砂漠

      あなたがいれば あゝユーザー待たさないで

       コマンド実行できる この非同期砂漠


( ^ω^)・・・


なんか vimproc の使い方調べてたらいつの間にかサビの部分を口ずさんでいたw

昔テレビの CM(ビルの屋上でバスケしてるやつw)で流れていたサビの部分の歌詞とメロディしか知らないというのに、いつの間にかその部分で替え歌ができるというのですから、テレビの力というのは恐ろしいものですね!

ちなみに原曲は 内山田洋とクールファイブの「東京砂漠」で昭和51年の曲。なんと私が生まれる前の曲でした。(さりげなくオッサンじゃないアピール)

2011-09-13

日本語プログラミング言語探訪 〜プロデル〜

プロデル

概要

プロデルとは


プロデルは、日本語で簡単・気軽にソフトウェア

「造る」ことができるプログラミング言語と開発環境です。


フランス語で「造る」「生産する」といった意味がある動詞"Produire"を

呼びやすく「プロデル」と名付けました。


前シリーズであるTTSneoの良さを活かしつつ、

プロデルでは、より日本語らしい文法の導入やオブジェクト指向的概念の導入、

処理速度の改善など、さまざま点が一新しました。

サンプル

資料[2] より。

値段は、250
「消費税込みの値段は、[値段*1.05]円です。」を表示
内容は、「a,b,c,d,e,f,g」
配列は、(内容を「,」で区切ったもの)

配列を要素へそれぞれ繰り返す
: 要素を表示
繰り返し終わり
3回、繰り返す
 「ワン」を表示
 繰り返しを続ける
 ーーこれ以降は実行されません。
 「ニャン」を表示
繰り返し終わり
メモ
  • .NET Framework を用いて開発されている。
    • ということで、やっぱり Windows がプラットフォーム
    • 多くのウィンドウ部品がWindows 7/Vista/XPのテーマに対応
資料
  1. 日本語プログラミング言語『プロデル』が目指すもの
  2. プロデル - Wikipedia

2011-09-11

日本語プログラミング言語探訪 〜TTSneo〜

TTSneo

概要

TTSneo公式サイト


日本語プログラミング言語「TTSneo」は、日本語で気軽にプログラムを作ることができるスクリプト言語です。


* テキストエディタメーラー、イメージビューアなどソフト作りに最適

* プログラミング未経験の方でも分かりやすいマニュアルとサンプル

* ファイルの整理や圧縮、データ処理など操作を自動化

* マウスでウィンドウをデザインする機能など開発環境も充実

* プラグインを使って機能の拡張可能

サンプル

公式サイトより。

ウィンドウ1の作成
ウィンドウ1を表示する
待機する

手順は ウィンドウ1の作成
’<ウィンドウ1>
ウィンドウ1を使う
  その名前を「ウィンドウ1」へ変える
  その背景を&h8000000Fへ変える
’<メニュー>
  メニュー 「ウィンドウ(&W)」を作れ
  サブメニュー 「常に手前」を手前チェックとして作れ
’</メニュー>
  ウィンドウ1の中の大きさを(304,209)へ変える
’</ウィンドウ1>
終わり
手順は ウィンドウ1のウィンドウ(&W)の手前チェックをクリック
  状態は、メニューのウィンドウ(&W)の手前チェックのチェック
  状態は、1−状態
  メニューのウィンドウ(&W)の手前チェックのチェックは、状態
  ウィンドウ1の最前面を状態に変える
終わり
メモ
  • 個人が趣味で開発とのこと
    • しかし、公式サイトの充実度はすごい!

最後の資料より。

  • ウイルスの開発に使われたという実績(?)がある。
資料
  1. TTSneo - Wikipedia

2011-09-09

日本語プログラミング言語探訪 〜言霊(ことだま)〜

注意

このノートは適当にググって見つかった資料を元に作成しているため、最新の研究成果、言語仕様を反映していない可能性があります。あしからず。

言霊(ことだま)

言霊コミュニティサイト - Tiny Content


言霊とは


言霊は、教育の現場を想定して開発されている日本語プログラミング言語です。


多くのプログラミング言語は、プログラマにとっての書きやすさが優先されています。プログラムを理解している人にとっては簡潔で余計な部分を省いた表現が好まれます。その為にソースコードは、分かる人にだけ読める表現になっています。普通の人にとってそのソースコードは、暗号のようなものです。


言霊は初心者がソースコードを読んだときに理解を助けるようなプログラミング言語を目指しています。自然な日本語の構造でプログラムを記述できることや、文章が名詞・動詞・形容詞・助詞などの品詞から構成されること、また動詞活用をサポートしていることが特徴です。

独立行政法人 情報処理推進機構(IPA)による 2009年度上期の「未踏IT人材発掘・育成事業」採択プロジェクト。

日本語でプログラムを書いたらそれが書いた通りに動く、まさに「言霊」だ! というわけで、素晴らしいネーミング。

サンプル

資料[1]より。(資料により文法に変遷が見られるので、このサンプルが最新の言語仕様上正しいかはわからない)

1: 10と15の最大公約数を出力する。
1: 「最大公約数」とは{
2: 整数型の名詞である。
3: Aは整数型の引数である。Aの助詞を「と」とする。
4: Bは整数型の引数である。Bの助詞を「を」とする。
5: Rは整数型の変数である。
6:
7: Rに、AをBで割った余りを書き込む。
8: R>0である限り{
9: AにBを書き込み、BにRを書き込む。
10: RにAをBで割った余りを書き込む。
11: }ことを繰り返す。
12:
13: Bを返す。
14: }ことである。
メモ
  • 教育用言語
    • 文系の学生がソースコードを読んだときの拒絶感を避ける。(資料[2])
    • 初心者のプログラム読解を容易にする。
  • Java の仮想マシン上で動作する。
  • 分かち書きの必要がない。(字句解析器+構文解析器が頑張っているらしい)
  • ブロックの範囲指定に記号{}を使う?(資料によって異なる。言語仕様の変遷によるものか)
  • 変数(または値?)に型がある。

以下は資料[1] より。

  • 助詞、助数詞で実引数を受ける。助詞、助数詞と仮引数の対応が Python におけるキーワード引数のように扱われるので、引数の順番は日本語として自然なように入れ替えが可能。
  • 動詞、形容詞の活用を許容する文法で、語尾が活用しても同じ述語と認識されるので日本語として自然な、柔軟な書き方ができる。
  • 動詞メソッド、形容詞メソッド、名詞メソッド、とメソッドの種類と呼び出し方法が豊富。メソッド呼び出しが日本語として自然な形になるように工夫されている。
  • メソッドの品詞変換(体言化)により、メソッドの返値を日本語として自然な形で利用できる。(「削除する」を「削除した値」と書けたり、「大きい」を「大きいかどうか」と書けたり)
  • 「文脈」という概念 → 「それ」*1
  • ソースコードを自然言語としての日本語に近付けることに強いこだわりが見られる。

元々、日本語の語順は後置記法だ → スタックと親和性高い → Java の仮想マシンはスタックマシン → Java の仮想マシン向けバイトコードのニモニックって自然と日本語化できるんじゃね? というところから研究/開発がスタートしているようだ。(資料[4])

  • プログラマにとって心地よい簡潔さ、略記法などは初学者にとってはわかりにくいもので排除したい、という思想があるようだ。

以下は資料[2] より。

資料
  1. 日本語プログラミング言語「言霊」におけるメソッドの記述方法
  2. 教育用プログラミング言語としての 「言霊」と「ことだま on Squeak」の試み
  3. 日本語プログラミング言語「言霊」〜日本語をスタック型言語として捉える〜
  4. プログラミング言語としての日本語

*1:これは「なでしこ」にもある。

2009-05-08

wxRubyノート -- StyledTextCtrl で Ruby用スクリプトエディタを作る (1) -- シンタックス・ハイライト

StyledTextCtrl を使って Ruby用のスクリプトエディタを作成中。なぜにそんなものを作る必要があるのかは秘密。

Wx::StyledTextCtrl

Wx::StyledTextCtrl


It is particularly suited for editing source code of a variety of programming languages. It has built-in support in the form of Lexers for many common languages, including Ruby, Python, HTML, C/C++ and SQL. As well as customisable syntax highlighting, it also supports code-folding, autocompletion and indentation.

とあるので、これを使えばシンタックス・ハイライトや code-folding、補完機能などを備えた、それなりにエディタと呼べそうなものが(そう苦労せずに)作れるはずだ。

The methods listed here are a complete listing of all the methods supported by StyledTextCtrl in wxRuby. However, at present only a stub description of each method is available. For much more thorough discussion of the capabilities of StyledTextCtrl, please consult the Scintilla documentation .

うぐうw そんなわけで、本家 Scintilla のドキュメントを参照しつつ、サンプル(scintilla.rb)を読む。*1

シンタックス・ハイライト

サンプル(scintilla.rb)において、シンタックス・ハイライトの色設定を行っているのが以下の箇所↓

@sci.set_lexer(STC_LEX_RUBY)
@sci.style_clear_all
@sci.style_set_foreground(2, RED)
@sci.style_set_foreground(3, GREEN)
@sci.style_set_foreground(5, BLUE)
@sci.style_set_foreground(6, BLUE)
@sci.style_set_foreground(7, BLUE)

2, 3, 5, 6, 7 がそれぞれ文法要素の指定であるらしいのはわかるのだが、これでは(実際に動かしてみても)その対応関係がよくわからない。なので、サンプルを修正して、0〜31 に順次(動的に)背景色を割り当てられるようにし、その結果を目視にて確認したものを表にまとめたみた↓

Style文法要素
0空白文字(EOL含む)
1不明
2コメント(#)# comment
3コメント(=begin)=begin
comment
=end
4数値10
5キーワード予約語
begin, break, ..., rescue, undef など
6文字列(")"string"
7文字列(')'string'
8クラス名class の直後のみ、それ以外は識別子(11)扱い
9メソッド名def の直後のみ、それ以外は識別子(11)扱い
10演算子、記号
11識別子ローカル変数、メソッド引数、ブロックパラメータ、
定数など
12正規表現(//)/regex/
13グローバル変数$gvar
14シンボル:symbol
15モジュール名module の直後のみ、それ以外は識別子(11)扱い
16ローカル変数@ivar
17クラス変数@@cvar
18シェルコマンド(`)`echo hoge`
19不明
20ヒアドキュメント(識別子)<<識別子
21ヒアドキュメント(文字列)
22, 23不明
24文字列(%q)%q{string}
25文字列(%Q)%Q{string}
26シェルコマンド(%x)%x{echo hoge}
27正規表現(%r)%r{regex}
28配列(%w, %W)%w{ foo bar baz }
29〜31不明

ご覧の通り、かなり細かく指定できることがわかった。使途不明な 1, 19, 22, 23 が少し気になるが、これで網羅できているはず。というか、サンプル手抜き過ぎw 

気になるのは定数が識別子という大まかなくくりで認識されていること。そのせいで、クラス名、モジュール名を、ローカル変数、メソッド引数、ブロックパラメータなどと区別して色付けすることができない。これはよくない。大文字で始まる識別子は「定数」というくくりで扱ってくれないとコード中のクラス名、モジュール名が埋没してしまう。

Scintilla の組込み lexer ってひょっとして(以下略 それともカスタマイズが可能なんだろうか? その辺は調べないとわからないけど、スタイル自体は手動でも設定が可能なので、泥臭いやり方をすればどうにかクリアできそうではある。

今日はここまで。

参考

*1:本家のドキュメント読みにくい。ちょっと涙目w

2009-03-29

HyperCardノート -- Webブラウザとの類似性

HyperCard とは何か、という問いに対し、しばしば「ハイパーテキストを実装した最初の商用ソフトウェア」といった説明がなされる。

HyperCard - Wikipedia


HyperCardは、ハイパーテキストを実現した最初の商用ソフトウェア。1987年にアップルコンピュータ(当時・現アップル インコーポレイテッド)のビル・アトキンソンが開発した。Macintosh(Mac OS)で動作し、ゲームの制作、簡単なプログラムの開発等に利用される。

HyperCard、HyperTalk の hyper もそこからきてるわけだから、まあそれは至極妥当な説明だと思うんだけど……

しかし、当時 HyperCard と Internet Explorer を同時に使っていて、そこに hyper text という共通項があることに、自分はまったく気が付かなかった。というか、HyperCard と Webブラウザが似てるなんてことも(当時は)全然思いもしなかった。

HyperCardWebブラウザ
ノードカードページ
スキームスタック*1HTML
リンク主にボタン主にテキスト
スクリプト言語HyperTalkJavaScript

抽象化していけば、両者はかなり構造的に類似したものがあるのに、使ってみるとその使用感は全然違う。その感覚的相違はどこから生じるのだろうか。

自分なりに考えてみると、それは (1)プログラミングのための道具 と (2)閲覧のための道具 の違いだろうか。browse tool 選択時の HyperCard、あるいは HyperCard Player であれば、HyperCard はずっと (2) に近くなって、この違いはなくなる*2気がする。しかし、スタックを作るという行為と、Webページを閲覧するという行為は、全然違う。

ん? そもそも Webブラウザと比較するのが間違いか。Webサイトの開発環境と比較すべきなのかそもそも。

開発用閲覧用
HyperCardHyperCard Player
Webサイト開発環境*3Webブラウザ

ということか。

あの当時もし Webサイトの開発をやっていれば、そこに HyperCard との類似性を見出せたのかも知れないな。そして、自分は HyperCard の続きをやっているように、思えたのかも知れない。幸か不幸か、そうはならなかったが。しかし、あの当時もっと JavaScript や、サーバーサイドのことを知っていれば、自分は HyperCard の後継(互換環境)を求めるのではなくて、Webサービスの開発に新たなプログラミング環境を見出し得たのかも知れない。*4

*1:ファイルフォーマットとしてのスタック。

*2:といっても、ローカルに閉じた環境とインターネットっていう相違を抽象化したレベルでの話。

*3:自分の場合は要するにエディタ

*4:しかし、幸か不幸か、そうはならなかった。三つ子の魂百までというが、自分の場合、最初のプログラミング環境が完全にローカルに閉じた HyperCard だったこともあって、プログラミングで扱う領域がなかなかネットワークとか Web の方へは向いていかなかった気がする。そのローカル志向は実は今でも自分の中に根強い。

2009-03-14

Windowsのクリップボードを使ったコピペ

Cygwin で vim を使っていると Windows側のクリップボードとの連係で苦労させられる。端末エミュレータの選択範囲コピー機能で vim からテキストをコピーすれば改行がキャンセルされたりするわ、クリップボードの内容を vim に貼り付けようと思ったらいちいちペーストモードにしないといけないわで、どうしても手数を要求されてしまう。

そこで、

を参考に以下のように設定した。

vnoremap ,y :!putclip<CR>u
nnoremap ,p :r! getclip<CR>

putclip すると選択範囲がカットされてしまうがそこは即座にアンドゥでごまかすw 一瞬画面がちらつくけど、まあよしとする。

追記

コメント蘭にて id:ka-nacht 様より以下のプラグインの存在を教えてもらいました。

Cygwin の vim でも * レジスタが有効に機能するようになります。便利。上でやってるダサいキーマップは早速用済みです(笑)を早速以下のように修正しました。

vmap ,y "*y
nmap ,p "*p

2008-09-18

Vim使い(笑)のぼやき

いかんw

TeraPad 使ってるときにもつい CTRL-[ :w のコンボを打ってしまうww
うぜえwww

Emacs(Meadow)から vim へ宗旨替えしてはや半年、今や完全に vim厨(笑)と化した俺だけど、普通*1の(モードレスな)エディタ使ってる時にもつい vim のコマンドを繰り出す身体になってしまった。特に、上でも言ってる挿入モード脱出から保存にかけてのコンボ。ある程度まとまった量を打って、「よしいったんブレーク」という箇所でついつい出るw

コーディング以外も全部 vim でやればおkなのかも知れんが、なんか抵抗ある。日本語IME がオンだとコマンドも入力できないし。(日本語IMEオンのままでモード切替とコマンド打ちができる方法があったら誰か教えて下さい!)

XKeymacsvim版みたいなものがあれば万事解決なのかも知れんけど、かつての利用者の立場から言わしてもらうとそれも微妙。あれに慣れ過ぎると自分のマシン以外で作業できない悲しい身体になるしw 

それを思うと、うぜえと言いつつも vim と普通の(モードレスな)エディタ、用途によって使い分けて併用しとくのがいいのかも知れんね。

*1:こう書くと vim が普通じゃないみたいだが、vim と emacs は明らかに普通じゃないエディタです(笑)

2008-03-04

vimコマンドまとめ(自分用)[3] -- ウィンドウ、バッファ

gfファイルを開く
gFファイルを開く(ファイル名に続く行番号を認識、移動)
ウィンドウ、バッファ
:args:arファイル一覧を表示
:buffers:lsバッファ一覧を表示
:splitウィンドウ分割
:sviewウィンドウ分割
:newウィンドウ分割(新規ファイル)
:stag <func>ウィンドウ分割 → 関数定義へ移動
CTRL-w ]ウィンドウ分割 → 関数定義へ移動
C-w C-wウィンドウ切り替え
C-w jウィンドウ切り替え(下へ)
C-w kウィンドウ切り替え(上へ)
C-w cウィンドウを閉じる
C-w +ウィンドウサイズ +1行
C-w -ウィンドウサイズ -1行
C-w =ウィンドウサイズを等しく
:set filetype=<type>ファイルタイプを変更:set filetype=c
文字コード

vimエディタで「文字コード、改行コードを変更して保存する。」

:set fileencogind=<enc>:set fenc=<enc>文字コードを変更utf-8, euc-jp, shift_jis
:set fileformat=<fmt>:set ff=<fmt>改行コードを変更unix, dos, mac
modeline
# vim: set ts=2 sw=2 expandtabs:
# vim: ts=2: sw=2: expandtabs:
リファレンス
Kmanページ
ヘルプ
:help <x>ノーマルモードコマンド:help x
:help i_<x>挿入モードコマンド:help i_CTRL-d
:help v_<x>ビジュアルモードコマンド:help v_u
:help v_b_<x>ビジュアルブロックモードコマンド:help v_b_>
:help :<command>exモードコマンド:help :quit
:help CTRL-<x>コントロールキー:help CTRL-u
:help 'option'オプション:help 'textwidth'
:help c_<x>コマンドライン編集help c_CTRL-p
:help -<x>Vimコマンド引数:help -r
:syntax onカラーシンタックスON

2008-02-25

エディタ選び再考

半年前はかなり emacs にこだわっていた。設定ファイル(.emacs)はかなりの量(5k)になり、elisp パッケージもガンガン入れた。emacs で理想の開発環境を作ろうとしていた。

現場では emacs が使えないらしいと聞いた。「vim に乗り換えよう、これからは vim だ」と思った。

現場の vi は vim ですらなかった。アンドゥは1回しかできなかった。

エディタはあるものを使えばいいと思った。


こんな経緯で、エディタに対するこだわりみたいなものが薄れてきた。エディタは○○じゃなきゃ嫌だ! みたいな拘泥はもうない。emacs でも vi でも、IDE のエディタでも TeraPad でも、環境と用途(言語)に応じ、適当なものをそこそこに使えればいいんでない? が今のスタンス。

道具は道具として、もっとドライに接しようと思ふ。*1

後、前にも書いたような気がするが、emacs や vi の設定に凝り過ぎるのはやめよう。最低限必要な設定項目を洗い出して、設定ファイルの記述量を可能な限り少なくするように心がける。

現場によっては、ネット不可、記憶メディア持込禁止なところもある。そんなところで emacs や vi を使うことになった場合でも、普段の設定を手作業でぱぱっと再現できるようにしておくのだ。

そのためには、理想の環境を追求し過ぎないこと。そこそこに便利な設定に仕上げたものを、上手に使うようにすることだ。

*1:emacs vs vi の宗教戦争にはもはや参加できなくなった(笑)