2016年07月02日

2016年04月14日

MSYS2のGTK+関連その他諸々のパッケージがアップデート

 されてる。GTKが3.20になってたりした。

 WebKitGTK+なんかもアップデートされてたが、適用直後はViewをウィンドウに貼り付けて表示するだけならHSPからでも動いたのに、PCを再起動したりした後に再度試したらなぜか動かなくなってた。

 思い当たることと言えば、Windows Updateくらいしかないが、そんなんで動かなくなったりするんだろうか。復元ポイントで戻すとしてもアンチウィルスソフトを一時的に止めなきゃいけないようで、面倒なので諦めた。
posted by chrono at 14:25| Comment(0) | TrackBack(0) | 日記、雑文

2016年04月12日

GTK関連ライブラリ(DLL)用HSPヘッダファイル 更新

 WebKitGTK+用のヘッダファイルを削除。

 パッケージからインストールしたライブラリが、最低限のサンプルコードでもまったく動いてくれなかったので。

 GTK関連ライブラリ(DLL)用HSPヘッダファイル - プログラミング工房 ver.2016.02.10

2016年04月09日

圧縮

 最近週刊プレイボーイで、JTB時刻表編集裏話みたいな記事を読んだ。時刻表と言えば、コンパクトなサイズのページにみっちりと細かく列車運行スケジュールが書き込まれているあれ。時刻表はページ数を制限内に収めるために、毎号苦労して情報の詰め込み方を工夫してスペースを節約しているらしい。

 プログラミングでも例えば、動作環境に制限があるもしくは単にリソースを節約したい性能にこだわりたいなどの理由で、ソースコードやバイナリのサイズ、実行中のメモリ使用量、生成するデータファイルのサイズ、などを圧縮する仕組みや工夫をプログラムに組み込むのはよくある話だし、圧縮の仕組みそのものがメインの機能だったりすることさえある。
posted by chrono at 19:28| Comment(0) | TrackBack(0) | 日記、雑文

2016年02月07日

Meryのアウトライン機能で複数の項目を(ツリー構造ではなく)並列に表示する

mery_outline.gif テキストエディタのMeryといえば、多くの言語のソースコード色分けなど、プログラマーにとってうれしい機能が充実した非常に便利なツールですが、その機能の一つが、デフォルトのプラグインとして用意されているアウトラインです。

 アウトラインは、編集中のソースコードの全体的な構成をいわば要約として、俯瞰しやすいツリー形式で別ペインに表示し、ツリー内の項目をクリックすると該当の行にジャンプすることができる機能です。

 デフォルトでは、ある程度ソースコードのインデントの状態を基準に項目の作成・表示を行っているようですが、どのような行をツリーの項目として拾うかを、ユーザ指定のテキストあるいは正規表現で定義することもできます。

 ただ、このユーザ定義で指定する場合に、個々の条件を一つずつ入力していくと、上にあるものが下のものの「親」になるようにツリーが構成されてしまうため(アウトライン機能なので仕方ないですが)、ソースコードや言語の文法の意味を反映したツリー構造になってくれないこともあります。また、アウトラインのペインを開いた直後はツリーが閉じた状態になっていることが、私にとってはちょっと不便だったりします。

 この不満は、私の機能の使い方が下手なことが原因である可能性もありますし、ソースコードの意味をちゃんと読み取ってくれというのも無理な話です(アウトラインルールをユーザ定義している場合は特に)。

mery_outline_setting.png 今日はこれの解決(回避)方法を一つ思いついたので書いておきます。それは、すべての項目定義を一つにまとめて書いてしまうというやり方です。正規表現には「複数のマッチング条件の中でどれかがヒットすればOK」という書式があるのでそれを使うのです。

 具体的には、例えばHSPの場合であれば、以下のような正規表現を一番目の定義として入力してそれで終わりです。

^\s*(\*|#mod|#deffunc|#defcfunc|;|//|/\*)


mery_outline_2.png この設定でアウトラインを実行すると、ラベル・モジュールの先頭・ユーザ定義命令/関数の先頭・コメント、である行が列挙されます。アウトラインルールを一つしか設定していないので、アウトライン項目同士の親子関係は発生せず、表示もツリー形式にはならずにすべての項目がいわば展開された状態で羅列されます。

 すべての項目がびろーんと表示されるという動作は、一見うざいように思えますが、アウトラインはそもそもファイル全体を俯瞰するための要約なので、うざいと感じる時は、一つのファイルにソースを詰め込みすぎているか、もしくは表示項目を欲張りすぎているかのどちらかだと思います。

 表示がツリー形式でないので、項目同士の関係や意味を反映するもくそもなくなってしまいますが、少なくとも自分がソースコードを編集する時には、項目の字面を見れば一目瞭然なので問題は感じませんね。

2015年12月23日

MSYS2環境でVala言語でプログラミング

 この作業を行った後、MSYS2環境でValaコードをコンパイルできるようにしたくて、mingw32用のtoolchainとvalaをインストールしてvalacを動かしたが、プログラムが足りないぽいエラーが出て失敗。

 -vオプションをつけて、再度valacを実行すると、存在しないccコマンドを起動しようとしてコケてる模様。そこで、--cc=gccオプションを追加して再度実行。無事、最低限のValaソースから実行ファイルをビルド成功。これでValaでもGTK+プログラミングして遊べそうだ。

 ちなみに、和書でも洋書でも刊行数が少ないGTK+プログラミング本。唯一(?)GTK+3対応のタイトルがこれ(↓)。なぜかサンプルコードの対応言語がValaとJavaScriptという変わった一冊。


GNOME 3 Application Development Beginner's Guide

 最近Valaプログラミング入門的な動画をチラッと見てみたら、その中でしゃべってる人がValaをヴァラと発音していた。てっきりヴェイラだと思ってた。ヴェイラの方がかっこ良くない?
posted by chrono at 16:05| Comment(0) | TrackBack(0) | プログラミング全般

2015年12月20日

GTK+のWindows向けバイナリがアップデート

 久しぶりにGTK+プロジェクトのページを見に行ったら、Windows向けバイナリがアップデートされていた。これを書いている時点でのバージョンは3.18.3。MSYS2環境のパッケージとしてインストールする形になった。

 インストール方法は以下の通り。

●MSYS2のインストール

 http://msys2.github.io/のページからインストーラをダウンロードして実行。インストーラは、32bit Windowsの場合、msys2-i686-*.exeを選ぶ。

●MSYS2のアップデート

 インストール終わりにそのままMSYS2を起動し、まず以下のコマンドラインを実行。

pacman --needed -Sy bash pacman pacman-mirrors msys2-runtime


 MSYS2を再起動してから、以下のコマンドラインを実行。

pacman -Su


●GTK+関連パッケージのインストール

 上記手順で既に使ったpacmanという名前のパッケージ管理ツールでインストールする。

 32bit環境であれば、MSYS2上で以下のコマンドラインを実行。

pacman -S mingw-w64-i686-gtk3


 このパッケージに必要なパッケージやAPIドキュメントも自動でインストールされる。インストールされる場所は、例えば、バイナリ(DLL)が"C:\msys32\mingw32\bin"、ドキュメントが"C:\msys32\mingw32\share\gtk-doc"、などとなる。

 同時にはインストールされないgtksourceview3なども、名前だけ書き換えて同じコマンドラインでインストールする。パッケージの検索については以下を参照。

●パッケージの検索

 パッケージを検索したい場合は、

pacman -Ss (パッケージ名の一部)


などとする。ちなみにhttp://sourceforge.net/p/msys2/wiki/Packages/のページで、過去の時点のパッケージ一覧と、一覧の取得方法を見ることができる。

●環境変数の設定(Windows 7)

 HSPから使いたい場合など、必要に応じて、バイナリがあるフォルダ(例えば、"C:\msys32\mingw32\bin")にパスを通す。

 「システムのプロパティ」コントロールパネルの「詳細設定」タブを開き、「ユーザー」または「システム」どちらかのpath環境変数にバイナリがあるフォルダのパスを追加する。パスとパスの間には必ずセミコロンを入れるように注意する。

 普通にC言語から使う場合は、これ以外の作業が必要かもしれません。

 HSPから使う場合については、インストール関連など一部の情報が未更新ですが、HSPからGTK+を使うためのチュートリアルのページも参考にしてみてください。
posted by chrono at 13:56| Comment(0) | TrackBack(0) | プログラミング全般

2015年10月15日

AltHSPをMeryのマクロ内で動かす

(2016/04/23 追記)

 AltHSPの公開サイトがGitHubに変更されたのに合わせて記事を修正。

AltHSPとは

 AltHSPは、HSPよりも簡潔な独自の構文で書かれたスクリプトをHSPスクリプトに変換するコンバーターです。AltHSPの構文は、主にHSPのモジュール機能がらみのコードを簡潔に書くために作られていますが、その他にループを簡潔に書ける構文なども用意されています。独自の構文が用意されていない部分については、HSPの構文でそのまま書くことができます。

 AltHSP自体はJavaScriptで書かれていて、簡単にウェブページに組み込んで利用できる形で公開されており、動作確認のためのサンプルのhtmlファイルも本体と共にダウンロードできます。

AltHSPはデフォルトの利用方法ではMeryマクロ内で動かせない

 私が普段使っているMeryというテキストエディタが、JavaScript(JScript)でマクロを書いて機能を拡張できるようになっているので、このAltHSPを組み込んで、AltHSPスクリプトを一発で「コンバート→コンパイル→デバッグ実行」できるマクロを作りたいと思ったのですが、デフォルトで想定されているjQueryをインクルードする形では、(JavaScriptをよく知っている人からすれば当然のことなのだろうとは思いますが)Meryのマクロ内では動かすことができません。

AltHSPをMeryマクロに組み込む方法

 そこで、幸いAltHSPで使われているjQueryの機能が$.trim、$.grep、$.mapの3つのメソッドだけだったので、jQueryをインクルードする代わりに、これらのメソッドを自分で書いて、それをくっつける形でマクロに組み込むことにしました。以下がそのコードです(jQueryのマニュアルを参考にして書きましたが、完璧ではないかも)。

var $ = 
{
trim: function( t )
{
var newt = t.replace( /^(\s+|\s+|\u3000+)/g, '' );
return newt.replace( /(\s+|\s+|\u3000+)$/g, '' );
},
map: function( a, f )
{
var newa = [];
for( var i in a )
newa.push( f( a[i] ) );
return newa;
},
grep: function( a, f )
{
var newa = [];
for( var i in a )
{
if ( f( a[i] ) )
newa.push( a[i] );
}
return newa;
}
};


このコードを例えば、AltHSPのコードの前にくっつけて、さらにそれを自作のマクロのコードにコピペするなりインクルードするなりして使います。

AltHSPを組み込んで作った、AltHSPスクリプトを一発でデバッグ実行するMeryマクロのサンプル

#include "myalthsp-0.0.1.js" // 上に載せた独自コードをくっつけたAltHSP

var fs = new ActiveXObject('Scripting.FileSystemObject');
var shell = new ActiveXObject('WScript.Shell');
var doc = Document;

//althspスクリプト保存
doc.Save();

//hspスクリプト保存
var hspScr = convertAltHSP( doc.text );
var hspScrPath = doc.FullName + ".hsp";
var ts = fs.CreateTextFile( hspScrPath, true, false );
ts.Write( hspScr );
ts.Close();

//保存したhspスクリプトを実行
var cmd = "C:\\Users\\hoge\\hsp34\\chspcomp.exe /id"; // 自分の環境に合わせて書き換える
shell.Run( cmd + ' "' + hspScrPath + '"' );


 サンプルなので、単一ファイルのコンバートしかできません。マクロ自体と処理対象のAltHSPスクリプトをUTF-8の文字コードで書いたものを使って、Windows7で最低限の動作確認をしました。

 HSPスクリプトをコンパイル・実行するために使っているプログラムは、こちらで公開している自作のプログラムです。似たような別のプログラムでもいけるはずです。
posted by chrono at 13:45| Comment(0) | TrackBack(0) | HSP

2015年07月11日

Linux Journalの記事"The Usability of GNOME"

 電子書籍としても発行されている雑誌Linux Journalの2014年12月号に、"The Usability of GNOME"という記事が載っていた。

 記事には、筆者の考えに基づいた「ユーザビリティ・テストとは何か」、「オープンソース・ソフトウェアにおけるユーザビリティ・テストの特徴」といったことや、筆者が関わって実際に行われたGNOMEのユーザビリティ・テストの具体的な手順や、その結果および評価などが書かれている。


Linux Journal December 2014 (English Edition)
posted by chrono at 14:59| Comment(0) | TrackBack(0) | プログラミング全般

2015年06月15日