2023年6月27日 (火)

シナプスさんの新しいウェブスペースの cgi perl ファイルの注意点

シナプスのユーザーウェブサイトサービスが新しくなるということで
早速CGIを試してみて、少々苦戦したので、ブログに書いておこうと思います。

まず、公式からの情報として、perlとsendmailのパスが変更されています。
それぞれ /usr/bin/perl と /usr/sbin/sendmail になっています。

次に、設定で苦労した点を、あげて置こうと思います。

ひとつめは cgi ファイルを置くディレクトリの属性を 705 にしなければ、
いけないようです。
(「その他」の「書き込み」属性を、なしにしないといけないらしい。)
これは、シナプスサポート様に相談して知りました。

ふたつめは require 文ですが、ファイル名を指定するときに cgi ファイルと同じ
ディレクトリにおいた場合にパスを指定しておかないと探してくれないことです。
具体的には、例えば、init.cgi という名のファイル(設定などを書いておく)を
組み込む場合、

require 'init.cgi';

ではダメで

require './init.cgi';

としなければいけないようです。


以上が、私が苦労した点です。
cgi ファイルのサンプルを上げておきます。
---- (testhtml.cgi とでも名前をつけて使ってください。)
#!/usr/bin/perl

print "Content-type: text/html;\n\n";


print "<html>\n";
print " <header>\n";
print " <title>testof cgi of html</title>\n";
print " </header>\n\n";

print "<body>\n";
print "<p>test of cgi html</p>\n";
print "</body>\n";

print "</html>\n";
----
参考になれば。

2022年4月 2日 (土)

UBASIC PC9801版

UBASIC のPC9801 16BIT版が必要になったんだが、Vector にも古いバージョンしか置いてない。いろいろ調べてひょっとしたら Web arachive なら置いてあるかもと探したらあった。

https://web.archive.org/web/*/http://www.rkmath.rikkyo.ac.jp/~kida/ubasic.htm

例えば上のhttps://web.archive.org/web/20070209230943/http://www.rkmath.rikkyo.ac.jp/~kida/ub16n88f.lzh あたりが最新版らしい。(https://www.math.kyoto-u.ac.jp/~yamasaki/ubasic_bug.html

UBASICの整数論関係のプログラムは
http://www.wkbpic.com/wkbx/software/UBASIC/ にあるようだ。

ここで PC9801 のエミュレーターの Neko Project あたりで遊んでいる。

2020年7月 3日 (金)

knoppix 8.6.1 usbメモリ起動版&日本語化

knoppix 8.6.1 を USBメモリに、インストールしてみたけど、BIOS から起動できない。

USBメモリでKNOPPIX v5.01を起動
http://linuxcom.info/knoppix-on-usb.html

を参考に /boot/syslinux 以下のファイルをすべて USBメモリのルートディレクトリにコピーしたら起動できるようになった。

その前に

KNOPPIX の Cheat Codes = ブート・オプション (ver. 7.6.1 DVD)
https://www.palm84.com/entry/20160421/1461167259
を参考にboot 画面の時に F2 キーを押し
knoppix64 lang=ja xkeyboard=jp
と入力して日本語表示させておいたほうが便利だが、設定を変えておいたほうが
もっと便利なので

Knoppix8.1日本語表示&キーボード設定
https://www.achiachi.net/blog/knoppix_8_1_japanese

を参考に
syslinux.cfg syslnx32.cfg syslnx64.cfg
の、すべての lang=en を lang=ja に置換して、xkeyboard=jp を画面設定以外のところに付け加えたら、日本語表示されるようになった。

BIOS での UEFI表示される起動欄は、なんか Errl? とか言うメニューをいじってるうちにうまくいくようになった。逆に UEFI がつかないほうが起動しなくなった。

KNOPPIX8.2の日本語化
https://linux-memo.net/knoppix/knoppix_customjp080200_cust.html
を参考に、端末から
sudo leafpad /usr/bin/flash-knoppix
と入力して 「5-6. flash-knoppix日本語化」のところをコピぺしたら、わかりやすくなった。(余談だが overlay? は大きいほうがいいみたい。パッケージはインストールしても次回起動時には反映されないことがあるので。私は 8GB と 16GB で交互にインストールして作っていった。)

日本語入力ですが、私は mozc が好きらしいので
apt-get install uim-mozc uim im-switch
と端末に入れて、
im-config -c
で設定して、画面最下最左のアイコンをクリックして
「設定」-(下から二段目の)「入力メソッド」で uim を選択して
一番下の「入力メソッド」で、もし mozc が「標準の入力方式」になっていなかったら
「使用可能にする入力方式」の「編集」をクリックして、右欄の mozc をクリックして左矢印ボタンをクリックして
左側に移動させ、「標準の入力方式」をクリックして mozc を標準にしておいたほうが良いかも。
(そしてその状態をまた別のUSBメモリに書き込んでおく。)

まあ、もうすぐ knoppix 9.0 が登場するというのになんですが…

2020年3月 2日 (月)

Blender 2.8 のタイムラインの長さのマウスによる変更について

今 Blender (2.82) という 3DCG 作成ソフトを使い始めたのだが、参考にした #09 悪魔のBlender入門 アニメーションの基本!! Blender2.8の最初のタイムラインの長さのマウスによる変更について、つまづいてしまったので備忘録代わりに書いておく。

結論から言うとドープシート右下の「終了」をマウスで左ボタンを押したまま、左右に移動したらよかったみたい。わかってみれば簡単なことだが、押しっぱなしで移動するのに気づくまで、だいぶ時間がかかってしまった。

2018年11月14日 (水)

OpenGL 最初の一歩

前回の続きです。

まず、新しいプロジェクトを作ります。テスト版の作業です。
メニューから「ファイル」-「新しいプロジェクト」とクリックして、出てきたウィンドウの
場所を
..¥Visual Studio 2013¥OpenGL¥
名前を test0 とし
上部の選択肢から「インストール済み」-「テンプレート」-「visual C++」
-「CLR」と展開して「CLR コンソール アプリケーション」をクリックして
「OK」をクリックしてください。
(「コンソール アプリケーション」でなくする方法は、後述します。)

以下のソースを test0.cpp にコピペしてください。
----
#include "stdafx.h"
#include <gl/freeglut.h>

void display(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
  glFlush();
}

void initGL(void)
{
  glClearColor(0.0, 0.0, 1.0, 1.0);
}

int main(int argc, char *argv[])
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGBA);
  glutCreateWindow(argv[0]);
  glutDisplayFunc(display);
  initGL();
  glutMainLoop();
  return 0;
}
----

#include <gl/glut.h>
ではなく
#include <gl/freeglut.h>
でなくてはならないといけません。
「include ファイルを開けません。'gl/glut.h':No such file or directory」という
エラーメッセージに、私はこれで2日悩みました。

また #include "stdafx.h" というのはすべてのインクルードファイルの
前に記述しなければならないそうです。

そしてビルドしてみてください。 win32 か x64 にどちらか
環境にあった方にしてください。
Releases/Debug はどちらでも構いません。両方ビルドしても構いません。

そして問題なくビルドされたら、メニューから「デバッグ」-「デバッグなしで開始」
してみてください。青い四角いウィンドウが表示されたら成功です。

しかしコンソール画面も表示されるのはじゃまです。
これを表示しないようにしてみたいと思います。まず
int	main(int argc, char *argv[]) を
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
	LPSTR lpszCmdLine, int nShowCmd) に書き換えます。
そして argc, argv を __argc, __argv に書き換えます。
(元の main 関数を /* */ でコメントして、コピペで書き直すと
いいかもしれません。)

すると以下のようになります。
----
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,
	LPSTR lpszCmdLine, int nShowCmd) {
	glutInit(&__argc, __argv);
	glutInitDisplayMode(GLUT_RGBA);
	glutCreateWindow(__argv[0]);
	glutDisplayFunc(display);
	initGL();
	glutMainLoop();
	return 0;
}
----
そして右側の ソリューション エクスプローラ の test0 (プロジェクト)を
右クリックして「プロパティ」-「構成プロパティ」-「リンカー」-「システム」
と開いて「サブシステム」の右端へマウスを持っていって、クリック、下向き記号が
あらわれたらそれをクリック、 Windows(/SUBSYSTEM:WINDOWS) を選択、

そしてビルドし直し、メニューから「デバッグ」-「デバッグなしで開始」を
実行、以上です。

OpenGL 準備編

ここでは OpenGL の Visual Studio 2013 での入門を、覚え書き程度に書いておきます。
なお私の環境では 64bit の windows10 なので、32bit のOSでは細かいところが
違うかもしれません。また Visuai Studio 2013 の基本的な設定は、
(Windows sdk 7.1、x64 環境など)済んでいるという前提です。

インストールの仕方は以下のページを参考にしました。
「GLUTによる「手抜き」OpenGL入門」
https://tokoik.github.io/opengl/libglut.html
(の「2.3 Windows 系 OS にインストールする」より)

まず以下のページから「freeglut-3.0.0.tar.gz」をダウンロードします。
http://freeglut.sourceforge.net/

これを展開するのに、例えば「lhaplus」などで展開することが出来ます。
https://forest.watch.impress.co.jp/library/software/lhaplus/
私はドキュメントフォルダに「 Visual Studio 2013 」があったので
そこに展開したフォルダ「freeglut-3.0.0」を「切り取り」「貼り付け」しました。


これだと sln ファイルが含まれてないので「CMake」を使いました。
https://cmake.org/download/
「Download Latest Release」をクリックし、64bitプログラミングがしたいのなら
cmake-3.13.0-rc3-win64-x64.msi をダウンロードし、
(32bit プログラミングなら cmake-3.13.0-rc3-win32-x86.msi を)ダブルクリックし、
インストール、デスクトップにある CMakeアイコンをダブルクリックして、起動します。
「Browse Source」に freeglut-3.0.0 フォルダを指定、
(C:¥Users¥(ユーザー名)¥Documents¥Visual Studio 2013¥freeglut-3.0.0 )の形になります。
なお、以下では C:¥Users¥(ユーザー名)¥Documents などのパスは ...¥ などと省略することにします。)
「Browse Build」にその下の build というフォルダを指定します。
(...¥freeglut-3.0.0¥build)
「Configure」をクリック Visual Studio 2013 を選択、
「Use default native compilers 」を選択、「Finish」をクリックします。
そして「Generate」をクリックすると、sln ファイルなどが生成されます。


freeglut.sln は「Browse Build」に指定したフォルダの中に生成されます。
これをダブルクリックして Visual Studio 2013 を起動してください。
そしてメニューの「Release/Debug」はデバックするかどうかで適当に決めてください。
64bit で、ビルドする場合は「win32」をクリックして x64 を選択してください。
もし x64 が出てこない場合は「新規作成」をクリックしてください。
(CMake で選択したものに合わせてください。)
そしてメニューから「ビルド」-「ソリューションのビルド」をクリックして
実行してください。

以下の4つのヘッダファイル
glut.h freeglut.h freeglut_std.h freeglut_ext.h
が「Browse Source」で指定したフォルダの include\GL にあるので
(例: ...¥Documents¥Visual Studio 2013¥freeglut-3.0.0¥include¥GL )
それを 32bit OS 版では
C:¥Program Files¥Windows Kits¥8.1¥Include¥um¥gl
( gl というフォルダがなければ作成してください。)
64 bit版では
C:¥Program Files (x86)¥Windows Kits¥8.1¥Include¥um¥gl
にコピーしてください。

「Browse Build」で指定したフォルダの中の lib フォルダの中の Release/Debug
フォルダの中の freeglutd.lib, freeglut_staticd.lib を
OSが 32bit 版なら
C:¥Program Files¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x86 に
OSが64bit版なら、CMake に合わせて
Win32 版は
C:¥Program Files (x86)¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x86
x64 版は
C:¥Program Files (x86)¥Windows Kits¥8.1¥Lib¥winv6.3¥um¥x64
にコピーします。

また「Browse Build」で指定したフォルダの中の bin フォルダの中の Release/Debug
フォルダの中の freeglutd.dll を同様に OSが 32bit 版なら
C:¥Windows¥System32 に
OSが 64bit版なら、
Win32 版は
C:¥Windows¥SysWOW64
x64 版は
C:¥Windows¥System32
にコピーします。

これで準備は完了です。 なお OSが 64bit のとき、 win32 版と x64 版と共存させる
ことも可能です。私はCMake x64 版を先にインストールしていたので
それのアンインストール、CMake win32 版のインストール、
freeglut-3.0.0.tar.gz の解凍をし直して、
freeglut-3.0.0 を freeglut-3.0.0-86 に変更して
...¥Documents¥Visual Studio 2013 にコピペして
CMake し直し等しました。

次回は簡単なプログラムを作って見たいと思います。

2018年6月 6日 (水)

マウスクリック無効化(前回の続き)

タイマーを止めたあと、マウスクリックイベントを停止するサンプルです。
onclick に null を代入しています。

----

<!DOCTYPE html>
<html>
<head>
	<title>global test timer</title>
	<meta charset="UTF-8">
	<script>
		"use strict";

	// 広域変数
		var testValue=0,timer;
		var message,addCount;	//

		// 初期化関数
		function init() {
//			alert("init");
			message = document.getElementById("message");
			message.textContent=testValue;

			addCount = document.getElementById("addCount");
//			alert(document.getElementById("addCount"));
//			alert(addCount);
//			alert("init2");


			addCount.onclick=click;

//			alert("start");

			timer = setInterval(tick, 100);
		}

		function tick(){

			if(testValue < 5){
				message.textContent=testValue;
				}else{

				message.textContent="end";
				addCount.onclick=null;

				clearInterval(timer);
			}

		}

		function click(e){
			testValue++;
			alert(testValue);	//debug
		}


	</script>
</head>
<body onload="init()">
	<button id="addCount">click test</button>
		<p id="message"></p>
</body>
</html>

--
http://www3.synapse.ne.jp/wtz/programming/html5/globalTestTimer2.html
----

2018年6月 4日 (月)

javascript はシングルスレッドだそうです。タイマーを使えば一応解決。

javascript はシングルスレッドだそうです。マルチスレッドではありません。
例えば下記のプログラムは期待通りの動きをしません。

----

<!DOCTYPE html>
<html>
<head>
	<title>global test</title>
	<meta charset="UTF-8">
	<script>
		"use strict";

		// 広域変数
		var testValue=0;
		var message;

		// 初期化関数
		function init() {
			message = document.getElementById("message");


			message.textContent=testValue;
//			alert("start");

			while(testValue < 5){
				sleep(1000);
				message.textContent=testValue;
			}

			message.textContent="end";
		}
	</script>
</head>
<body onload="init()">
	<button onclick="testValue++">click test</button>
	<p id="message"></p>
</body>
</html>

--

http://www3.synapse.ne.jp/wtz/programming/html5/globalTest.html

----

body の button 要素の中身を
<button onclick="testValue++;alert(testValue)">click test</button> に
書き換えてみれば、大域変数 testValue の値は変化していってるのがわかると思います。

これを解決するにはタイマーを使えばよいようです。 script の中を以下のように書き換えます。

----

	<script>
		"use strict";

		// 広域変数
		var testValue=0,timer;
		var message;

		// 初期化関数
		function init() {
			message = document.getElementById("message");


			message.textContent=testValue;
//			alert("start");

			timer = setInterval(tick, 100);
		}

		function tick(){

			if(testValue < 5){
//				sleep(1000);
				message.textContent=testValue;	//debug
			}else{

				message.textContent="end";
				clearInterval(timer);
			}

		}


	</script>

--

http://www3.synapse.ne.jp/wtz/programming/html5/globalTestTimer.html

----

実際のところ、上に書いたような alert 関数を今回も使ってみれば
testValue の値自体は増加し続けているのがわかると思います。
これを避けるには onClick を使用せず getElementById 関数を使って
onclick に関数を設定し、終わったら null を代入しなおせばいいのですが、
それは次回に。(端折って書いてるのでわかりにくくてすいません。)

2017年5月15日 (月)

ubunntu 16.04 で chrome でパスワードを聞かれないようにしたい

ubuntu 16,04 で google chrome を起動すると、毎回パスワードを聞かれるので、それをやめさせたい。
左上のボタンから pass と入力し「パスワードと鍵」を起動する。
「ログイン」を右クリックして「パスワードの変更」を選択、
元のパスワードを入力、新しいパスワードを空行のまま入力し、「続ける」をクリック、で、パスワードを聞かれずに chrome を起動するようになるようです。

「ubuntu16.04 chrome キーリング」で検索するとよいようです。

ubuntu 16.04 windows10 を Grub Customizer で前回起動したエントリーを有効化

ubuntu 16.04 と windows 10(Windows Boot Manager) を Grub Customizer でデュアルブートしています。
しかし、Grub Customizer の「一般」タブの「デフォルト エントリー」を「前回起動したエントリー」を選んでも、なぜか機能しませんでした。
それで色々調べたら /etc/default/grub の頭の方に GRUB_DEFAULT="saved" という一行があり、さらに GRUB_SAVEDEFAULT="true" を指定し、update-grub すると「前回起動したエントリー」が機能するようになりました。
(なお引用符は必要ないようです。)

「ubuntu GRUB_DEFAULT 」などで検索すると色々出てくるようです。

(注:windowsを選ぶと 次回からGRUB メニューが表示されず windows に乗っ取られるようです。)

2016年7月 3日 (日)

起動時の音楽が鳴らない。

windows 10 での起動時の音楽が鳴らないようなので、いろいろ検索した結果、
「高速スタートアップを有効にする」状態では、
「Windows スタートアップのサウンドを再生する」にチェックをいれても
「再起動」時には再生され、その後(の次?)までは音楽が鳴るが
それ以降では再生しないようで、これは「仕様」だそうです。
しかたがないので高速スタートアップは使用しないようにすることにしました。

なお、「高速スタートアップを有効にする」はカーソルをデスクトップ画面の最左下に
持って行って、右クリックして「コントロールパネル」をクリック、
「大きいアイコン」を指定して「電源オプション」をクリック、
「電源ボタンの動作を選択する」をクリック、
「現在利用可能ではない設定を変更します」をクリックするとウィンドウの下部にある
シャットダウン設定を変更できます。

「Windows スタートアップのサウンドを再生する」は、タスクトレイの
「音量」アイコンを右クリックして「サウンド」をクリックすると真ん中あたりに
出てきます。音量アイコンがない場合は、タスクバーを右クリックして
「タスクマネージャー」をクリックして、(「プロセス」タブをクリックして)、
ずーっと下に移動して「エクスプローラー」を見つけて右クリックして
「再起動」をクリックすると表示されるようです。

この辺、いろいろとやりかたはあるのでいろいろ検索してみてください。

2016年6月 3日 (金)

Cortana入門

いろいろあって windows 7 のインストールディスクが読めなくなって、
windows 10 に乗り換えることになった。
なんとか使い慣れたところ、Cortana(コルタナ)を使いたくなった。
でもどうやって使ったらいいのかわからない。

結論から言うと左下の入力欄の右端のマイクボタンをクリックしてから
マイクに向かって質問をいうとよいようである。
「好きな食べ物はなんですか?」とか聞くと回答を読み上げてくれるのが嬉しい。
「好きな本はなんですか?」と聞くとマニアックな本を取り上げてくれるが
siri の二番煎じという気もしないでもない。

また意味がわからないと Edge の Bing に投げ飛ばすのもちょっと不親切な気もする。

2016年4月20日 (水)

Process Explorer 16.12

Process Explorer 16.12 の日本語化パッチは Process Explorer 日本語化 - さよならストレス などにあるが、かんじんの英語版はリンク切れになっている。

そこで「Process Explorer 16.12 technet」で google 検索したところ、Process Explorer 16.12をダウンロードする - 技術的情報 - FileHippo.com に見つかった。

2016年3月26日 (土)

mllink$ 「64bit アセンブラに挑戦」の続き

ところで mllink$ あるいは mllink$.lnk というファイルが出来てると思います。
これはショートカットではなく ml64.exe が link.exe へオプションを渡すための
レスポンスファイルです。
エディター(メモ帳など)で開いてみると
--
/OUT:test64.exe
test64.obj
/subsystem:windows
/entry:Start
--
などとなっているのがわかります。

(ml64.exe のパス)\link.exe @mllink$.lnk

でリンクしてくれます。

あと、環境変数 LIB にライブラリのパスを設定しておけば、拡張子Lib のファイルを
コピーしてくる必要はありません。

set LIB="C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64"

と書いたバッチファイル(例えば setlib.bat )を用意して
実行しておけばよいでしょう。

2016年3月23日 (水)

64bit アセンブラに挑戦

私の visual studio 2010 は、以下のページを参考に

http://d.hatena.ne.jp/torutk/20100927/p1

64bit 化されているので 64bit アセンブラ(ml64.exe)がインストールされています。
それで 64bit アセンブラプログラミングに挑戦してみたくなりました。

まず、「ドキュメント ライブラリ」にフォルダ '64asm' を作り
そこにソースファイル test64.asm を以下のように作ります。
----
; サンプル x64 アセンブリー・プログラム

; Chris Lomont 2009 www.lomont.org

extrn ExitProcess: PROC ; システム・ライブラリーの外部関数

extrn MessageBoxA: PROC

includelib "user32.lib"

includelib "kernel32.lib"

.data

caption db "64びっと", 0

message db "いやっほーい", 0

.code

Start PROC

sub rsp, 28h ; シャドウ領域、スタックをアライメントする

mov rcx, 0

lea rdx, message

lea r8, caption

mov r9, 0

call MessageBoxA

mov ecx, eax

call ExitProcess

Start ENDP

End



; /entry:Start



; fastcall(新しい関数呼び出し規約)

; 引数はrcx、rdx、r8、r9、r10、r11

; 戻り値はrax

; 浮動小数点数の戻り値はxmm0

----
上のソースは
http://mbdev.hateblo.jp/entry/2013/05/14/212139
からコピーしたものです。(以下も参考にしました。)

そして同じ場所に以下の内容の 'test.bat' を作ります。(場合によってパスが違うかもしれません。)

----
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\ml64.exe" test64.asm /link /subsystem:windows /entry:Start
----

そして「コマンドプロンプト」(windows のバージョンによって違うようなので検索してみてください。私のは windows 7 です)を立ち上げて

cd "C:\Users\[ユーザー名]\Documents\64asm"

と入力してみてください。エクスプローラーで直接辿っても構いません。
dir と入力してみて、先に作った2つのファイルがあればOKです。

そこでコマンドプロンプトから test と入力してみてください。
LINK : fatal error LNK1104: cannot open file 'user32.lib'
と user32.lib がないと怒られてしまいます。

そこで "C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib\x64" から user32.lib を
64asm フォルダにコピーします。
そこでもう一度コマンドプロンプトから test と打ち込んで見てください。
今度は kernel32.lib がないと怒られてしまいます。
それでもういちど同じ場所からコピーしてきます。
そして test と入力してみてください。今度はうまくいったようです。
ためしに test64 と入力してみてください。メッセージボックスがあらわれるなら成功です。
あるいは test64.exe をクリックしてみてください。

付記:現在実行するとエラーが出るようです。目下調査中。
どうやら休止状態から復帰するとおかしくなるようです。

続きを読む »