2018年01月08日

make + guile を使うメモ 2018

make + guile を使うメモ 2018
はじまり
だいぶ前にmake 4.0がリリースされてguile言語がバインドされた。
Makefileの中にguile言語が記述できるというもの。
(ただし、guile機能はオプション扱いでmake 4.x系でも非バインド(使えない)のものもある)

guile言語はインタプリタ型の汎用言語なので、makeの標準関数だけではできなかった
いろいろな処理が自由に書けることになる。
今までも $(shell ...) 関数で外部コマンドを呼び出せばそこそのことはできていたが、
Windows(32bit)(DOS窓,PowerShell)とLinux系(msys2/cygwin)で共用しようと思うと
Windows側に追加ツールが必要で、かつ、互換性やコマンド同士の干渉に留意が必要だった。

make 4.x系でguile言語を使えばどのプラットフォームでも使えるMakefileが作成できる
ことになるのだった。

make 4.x + guile機能はデフォルトで Onなのか?
今は2018年初頭。 デフォルトの対応状況をしらべてみた。
guile機能有効化
msys2 なし 後述
cygwin あり 不要
[Lu|U]buntu 16.04(Linux)なし $sudo apt-get install make-guile
guile機能が有効化どうか確認する方法: Makefile内に以下を記述し、
all:
    @echo $(.FEATURES)
makeしてみると、
target-specific order-only second-expansion else-if shortest-stem
undefine oneshell archives jobserver output-sync guile load
上記の様にguileが含まれていれば有効になっている。 Windows DOS窓/PowerShell/msys2上でguile機能を使う (1) まず既存のmake.exeがある場合はそれが呼ばれないようにする。 やり方は色々あるが、make.exeをmake.exe.orgにリネームするのが簡単か。 (2) make with guile をダウンロード https://sourceforge.net/projects/ezwinports/files/ から make-4.2.1-with-guile-w32-bin.zip をダウンロードし、解凍する。 (3) 出てきたファイル群を D:\usr以下にコピーする。 Windowsの環境変数PATHに D:\usr\binを追加。 Windows DOS窓/PowerShell上からはこれで使える。 msys2: $ pacman -R make で既存のmakeを削除。 ~/.bashrc 内に export PATH=$PATH:/d/usr/bin を追加し、 $source ~/.bashrc で使用可能になる。 ドライブDがない場合: ドライブCしかない場合、或いは、ドライブD以外にインストールしたい場合は、 (a) 適当なドライブ(仮にC:)・フォルダ(仮にmakegとする)に上記解凍したファイル群をコピーする。 (b) Winodws環境変数に以下の2つを新規追加。 (i) 変数名: GUILE_LOAD_COMPILED_PATH 変数値: c:\makeg\lib\guile\2.0\ccache (ii)変数名: GUILE_LOAD_PATH 変数値: c:\makeg\share\guile\2.0 (c) Windowsの環境変数PATHに c:\makeg\binを追加。 msys2で使いたい時は、 ~/.bashrcに上記同様に追加。 以上で make + guile機能が使える様になる。 guile関数を実際に使ってみた GUILE_SCRIPT: 関数群の適当な名前。 define 名前 .... endef で関数群を定義。 $(guile $(GUILE_SCRIPT) ) で関数群をロード。 緑の部分で、定義した関数を使用した。 関数 genTargetName は引数文字列の先頭から3文字をカットした文字列を返す関数。 (やりたかったのは、Makefileを実行したフォルダの名前から先頭の3文字をカットしたものを、 TARGET名にしたかった。)(注1) Makefile
# guile関数定義
define GUILE_SCRIPT
	(define (genTargetName dirName)\
		(substring dirName 3 (string-length dirName)))
endef
# guile関数ロード
$(guile $(GUILE_SCRIPT) )

ARC        = thumbv7em-none-eabihf
FLASH_EXE  = d:/STM32-ST-LINK-Utility/ST-LINK\ Utility/ST-LINK_CLI.exe

DIRNAME    = $(notdir $(CURDIR))
# guile関数呼び出し
TARGET     = $(guile (genTargetName "$(DIRNAME)" ) )
TARGET_DBG = $(TARGET)_debug
TARGET_REL = $(TARGET)_release
... 
関数定義をやめれば同じ内容をもっと短くも書ける。 Makefile
ARC        = thumbv7em-none-eabihf
FLASH_EXE  = d:/STM32-ST-LINK-Utility/ST-LINK\ Utility/ST-LINK_CLI.exe

DIRNAME    = $(notdir $(CURDIR))
# guile関数呼び出し
TARGET     = $(guile (substring "$(DIRNAME)" 3 (string-length "$(DIRNAME)"))))
TARGET_DBG = $(TARGET)_debug
TARGET_REL = $(TARGET)_release
... 
guile関数の定義部分だけ別ファイルに書いてロードすることもできる。 $(guile (load "script_foo.scm")) makeのguile機能について makeの標準関数の一つとして「guile」という名前の関数が増えたことになる。 引数1つの関数なので、 $(guile 引数) と言う形になる。 guile関数は最初に、makeによって通常の方法で評価(展開)され、 次にguileインタプリタで評価される。 Makefile内は文字列しか扱えないので、guileの引数も文字列である必要がる。 guileインタプリタでの評価結果(返り値)は文字列としてMakefile内で使用できる。 guile返り値の型変換 guileインタプリタ内部で扱う型は、makeへの返り値となった時、 以下の様にすべて文字列に変換される。
guile内の型変換後のmake内の文字列
#f 空文字。 空文字はMakefile内ではfalseとして扱われる。
#t '#t'。 '#t'は文字なのでMakefile内ではtrueとなる。
シンボルと数値 シンボルと数値はそれらを表す文字列となる。
文字 表示可能な文字は、同じ文字になる。
文字列 表示可能な文字のみを含む文字列は、同じ文字列になる。
リスト リストは上記ルールに従って、再帰的に平坦化される。 例: (a b (c d) e) は、 Makefile内では'a b c d e' となる。
その他 上記以外の型はエラーとなる。(将来扱える型が増える可能性を否定しない)
従って、エラーを避けるなら上記の有効な型に置き換える工夫が必要。
make + guile 資料 このページをguileで検索 https://www.gnu.org/software/make/manual/make.html guile 資料 guile トップページ https://www.gnu.org/software/guile/ guile2.2.3 ドキュメント https://www.gnu.org/software/guile/manual/ (注) Macは非所有なのでAC。 (注1) ひょっとするとguileをつかわずmakeの標準関数でできるかどうかは未確認。 ざっとみたけど、 ?だった。
posted by Copyright (C) avrin All Rights Reserved. at 23:24| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2018年01月06日

Crystal言語 (Ruby系コンパイラ) 2018

Crystal言語はRubyの仕様を限定した、
ネイティブコードコンパイラらしい。

ちょっと試してみるか。

と思ったけど Windows非対応みたいなので放置することにした。
orz




posted by Copyright (C) avrin All Rights Reserved. at 20:56| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2017年12月29日

Visual studio codeのメモ 2018

Visual studio code 1.19.1 が現在のバージョン。
以下vscodeと書く。
一年ぶりくらいにアップデートして起動だけしてみた。 :-)
Pros:
* プラグインの検索、インストール、無効化、有効化、
オプション設定のしやすさは非常に簡単で好印象だった。
* Vimのキーバインドは結構使えそうな感じ。 (^^)/
* プラグインの数(各種言語サポート)が増えていて、なんかスゴ。
* コンパイル時のターミナル統合感が自然で良い。
* IDE風に使えそうなんだけど、IDEじゃなくてエディタ。
* DVCS統合もできる。
* マルチプラットフォームなのは良いかも。

Cons:
* vscodeのウインドウにファイルをD&Dできない orz orz
* デフォルトで画面分割が縦分割になる orz
一応 ALT+ shit + 1 で切り替わる。
縦横混在の分割は?
* 各ウインドウのタイトルバーやタブ部分の大きさががやたらでかい。

違和感がある点:
ファイルを修正変更して未保存でvscodeを終了できる。
再起動すると変更中状態から始まる。
オプションで挙動の変更は可能と思われるが、ちょっとじゃないくらいの
違和感があった。 orz

(1) vscodeで未保存終了する。
(2) そのファイルを他のエディタで変更保存する。
(3) vscodeを再起動すると、 (2)内容が反映されていない。
orz
orz
どうしてデフォルトでそんな風にしたくなったのか謎。
マルチコミット対応なのかも。
きっとそうだ。
そうに違いない。













posted by Copyright (C) avrin All Rights Reserved. at 22:44| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2015年01月10日

Youチューブから著作権系の通知か来た日 2015

Youチューブから著作権系の通知か来た日 2015
工作系で使っている動画をYoutubeにアップしている。
今日、見たら"著作権侵害の警告"が来ていた。

で、そのメールによると「何分何秒からが同じ曲なのでだめだよ」とリンクがあった。
警告主側の音楽にはリンクがなかった(海外の作者と曲名だけ記載してあった)。

自分が使っている音楽素材(国内産)はそういうことが起きないように配慮してある。
はずだった。
そのはずなので、問答無用で「正当な使用許可があるので申し立てを拒否する処理」をした。
そのあと、一応、検索して「文句を言ってきたオリジナルと主張する曲」を探して聴いてみた。
すると、
(OoO)
(OoO)
(OoO)
(OoO)
(OoO)

えっ?!

同じ曲だ。
(OoO)

正確には曲の一部なんだけど、約1分弱くらいかな。

自分が使っている曲:
    Web上で無料配布されている曲。
    当然使用条件を守って使っている。
ポイント1:
あくまでも個人的な見解だけど、聴いた限りでは、

どちらかが、どちちらかをコピーしたと言われても
しかたない状況かと思われます。

「偶然一致しました」では多分済まない感じはする。

ひとまず、「申し立て拒否」を「撤回」した方がいいかと思って探してみると、
撤回は無理そうでした。(^^;

ポイント2:
いろいろややこしそうなので、
国内の作者に相談してみようかなと思ちゃいました。


つづく。。。かな

posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | その他 | このブログの読者になる | 更新情報をチェックする

2014年04月29日

ブログの行方(ゆくえ)

注意ポイント
このページは微妙といえば微妙 :D な内容が含まれているので、
今後の動向によっては削除します。

* はじまり
こっちのブログじゃないんだけど、
このところ某近所の大国から連日無意味な連続コメントでかなり迷惑してて、
orz orz orz
なのだった。

気にするときりがないのでアレなんだけど、ちょっとしつこい。

* そもそも
ずっと前から長期連休中、特に5月と8月は"無意味なコメント"が急増するのだった。
これは長期連休になるとサーバ管理者はお休み、ブログ主も旅行に出かけている :D ので、
"無意味なコメント"が消去されにくい期間であることを狙ったものと思われる。

去年のお盆休み中は特にヒドくて、2分間に300回もコメントが書き込まれ、
消すのが大変だった。 orz orz
書き込み内容に連番があったことから、スクリプトを使って書き込まれていたのは間違いない。
いやがらせか、スクリプトの動作テストに使われたみたい。(T_T)

* ほんとに大国からか
書き込み元は大国からのもので間違いない。
書込み元をググってみると「ハニーポット」にひっかかっているが正体不明らしい。
大国にあるPCを別の大国 :D が乗っ取っている可能性もなくはないが。 

* ちょっと怖い話
無意味なコメントがしつこいので、少し前にコメント書き込み禁止にした。
ところが、そんなこと関係なく同様にコメント書き込みがされていて、
ちょっとびっくりした。
さすがに気持ち悪いのでサーバ管理者に調査依頼を出した。
二つの可能性があって、
(1) 書き込み禁止設定を回避して書き込める方法がハックされ、それを使われている。
(2) もう一つの可能性はちょっとここには書けない。xD

* ちょっと怖い推測
休眠ブログでコメント許可したまま放置すると、餌食(えじき)になることが分った。
さらに、コメント拒否設定も効かないことも分った。xD
で、
"無意味なコメント"と書いたが、内容的には日本語、大国語、英語でいろいろあり一見すると商品の勧誘風だ。
本当にそういうものなら、まだましで、
そこに書かれた内容を特定の変換テーブルに通すと、全然別な内容になるなんてことがあるとすれば、
ちょっと怖い推測になる。

その書込みは都合のいいことに1週間から1ヶ月以内に、早ければ数日でブログ主が気付いて
消去してくれるので証拠が残らないのだった。

* 対策がとられた
サーバ管理者から早々に返事が来て、
こちらから出した情報にもとづいて対策を強化したのでしばらく様子を見ようという内容だった。
メールを出してから2日なのでかなり好印象。
今のところ不正書込みも止まった様だ。(^^)/
多分、書込み元のプロバイダをブロックしたものと思われる。
相手がプロバイダを変えてくるとイタチごっこになってしまうが、
その場合は、
「大国ごとブロックしちゃって下さい」
ってお願いしちゃおっと。
xD

posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(1) | TrackBack(0) | その他 | このブログの読者になる | 更新情報をチェックする