Winidows 11

遅ればせながら,私も Windows 11が使えるようになりました。早速,tbasic 1.5の動作確認をしました。1.5はWindows 11 を認識できませんから,起動画面は,Windows 10 と同じで,

Windows 11 上でのtbasic1.5の起動画面

となります。samplesにあるプログラムも動作確認をしました。Fontサイズの微調整が必要なものもありましたが,これ以外は,特に問題なく,動作しました。画面表示は,Windows 10 と11では余り差異は無いようです。

期待通りと言うか,予想通り,問題なく動作するようです。取り敢えず一安心です。

Shift_JIS から UTF-8へ

少し前の話になりますが,昨年の秋から,今年の春にかけて,このホームページを運用しているサーバーのOSを更新しました。昨年の暮れまで動いていたOSは CentOS6.4でした。CentOS6はこのサイトを立ち上げた2013年から稼働していたOSです。随分長く利用していましたが,昨年暮れでセキュリティーアップデートが期限切れになるのを機に最新OSに更新することにしました。

当時2020年秋のCentOSの最新版はCentOS8でした。そこで,2020年11月 CentOS8 に更新しました。実はその直後,CentOSのサポートが2021年暮れに終了になることが公表されました。同じOSを長期に使い続けたいとのことから,CentOSでの運用を諦め,CentOS以外のOSを検討しました。検討やテストを行った結果,Oracle Linux を利用することにしました。今年の3月末には Oracle Linux 8.3をインストールし,運用を始めました。現在は Oracle Linux 8.4にアップデートしています。 Oracle Linux 8 は2029年5月まで,サポートされるようなので,長期にわたって利用できそうです。

今回のOSの更新はすべて新規インストールする必要があったので,サーバーを交換するなどの手順が必要になりました。その結果,かなり手間がかかり,約半年間かかりました。その間,旧OSから10年近い期間があったので,ソフトウエアの進歩を色々とかなり感じました。

その中で特に変化を感じたのが,http からhttpsへの移行でした。前回もそのような動きはありましたが,「それも可能」と言ったものでした。今回は,httpsでなければ,まともな運用ができないような状況で,ほぼ強制的にhttps化が迫られました。幸い,https化に必要な認証局登録が無料で可能な方法があったので,それを利用させてもらいました。セキュリティ強化の社会的方向からすれば自然な流れなのでしょう。

もう一つ感じたのが,Unicode化の流れでした。Unicodeは1990年代に始まるもう随分と昔からある流れですが,一般ユーザーが余り意識しないうちに徐々に浸透してきたようです。tbasicも,2010年にUnicode対応になっていますから,tbasicも Unicode化の流れ に乗っていました。しかし今までのtbasic でのUnicode化の実際の恩恵は,半角全角の区別なく,文字列処理が可能となることくらいでした。しかし,現在のUnicode化の流れは,文字コードを積極的にUnicode化するというものです。

サーバー関係の種々のファイルがデフォルトでUTF-8となり,それを標準とする流れです。勿論,UTF-8化の傾向は以前からありました。しかし,今回はさらに進んでサーバー設定のいくつかのところで半ば強制的にUTF-8とさせられた感じがします。Windows上では,現在でもShift_JISが多く使われていますが,UTF-8への流れはWindows上でも確実に進んでいます。実際,Windowの標準エディターであるメモ帳でのデフォルトEncodingがBOM無し,UTF-8になったことが,少し前ですが話題になりました。

他方,近年web等で,日本語の文章の中に,外国語や外国語から派生する用語をよく目にするようになりました。例えば,翻訳サイトでは,日本語と外国語が並列して表示されています。しかし,元々初期のコンピュータではアルファベットと数字しか扱えませんでした。その後,日本では,日本で使用するコンピュータのハード的な改良と,ソフト的な工夫がされ,1980年代には,日本用のコンピュータで日本語,特に漢字が使えるようになりました。
世界的にも同様な状況があり,各国で自国向けのコンピュータの改良が行われ,そのコンピュータで自国向けの自国語文字が使えるようになりました。1991年には,Unicode制定のための非営利国際的組織Unicode Consortium が発足しました。そして,1991年10月にその仕様書”The Unicode Standard Version 1.0″が発表されました。その後更新が続けられ,2021年現在最新版はversion13です。

Unicode を使うと,一つの文書に多国語が混在して使用できるようになります。Shift_JISコードで書かれた日本語の文章にtrès bienと言う言葉を含めることはできませんが,Unicodを使えば混在が可能です。このブログでは,今見ているように,日本語の文書の中にフランス語 très bien を同時に表示できていますが,これは,ブログソフトwordpressがUnicodeの一つであるUTF8でで書かれていることに依ります。

このようにUnicodeが作られてから30年,種々のところで,その利用が顕在化してきました。tbasicも既にUnicode対応ですが,その効用の,より活用を考える時期かも知れません。次期のバージョンアップでは,その辺りの強化を考えてみることにします。

画像の切り貼り

最近,バスの時刻表の一部分を切り貼りして,印刷する必要がありました。
その時刻表は,利用する路線の一日のすべてのバス停の時刻が掲載された,JRの時刻表のような形式のもので,バス会社のホームページにありました。それはその路線の一日すべての時刻表ですから,かなり大きなものです。でも実際に必要なのは,その一部分です。つまり,その中から,乗車するバス停の発車時刻と,降車するバス停の到着時刻の部分が必要です。すぐに思いつくのは,全体を印刷して,必要な部分をハサミで切り抜いて,それらをテープ等で張り付けて一枚の紙にして使うことです。

全体を一枚の紙に印刷すると,字が小さすぎて見にくくなるので,その部分を拡大コピーする必要があります。往路,復路,平日,休日とあるので,この方法だと,全部で8枚の紙に印刷して,それらを切り貼りすることになります。手間は大したことはありませんが,紙の無駄にもなりますし,出来上がりもスマートではありません。何か工夫をして,1枚の紙に印刷するだけで,目的を達することはできないでしょうか。

私は,tbasicを使って必要な画像を何枚か切り抜いて,それらを一枚の画像にまとめて印刷することにしました。いくつかの作業の結果,1枚の用紙に必要な情報をすべて印刷することができました。

これらの作業は,単に画像を切り取り,張り付けただけで,特に難しいことではありません。画像処理用のツールを使えば可能でしょう。そのようなツールが身近にあり,使い慣れていれば,それを使うのが良いでしょう。私はtbasicを使い慣れているので,それを使って処理することにしました。
以下ではそこで使ったtbasicの技法・プログラムについて紹介します。処理は,画像の切り取りと,それらの貼り付けです。処理としては独立なので,分けて説明します。
例は時刻表ではなく,スナップ写真を使うことにします。

画像の切り取り

大きな画像から,特定の部分を切り抜くには,LoadPictureとSavePictureを使えば簡単にできます。ここでは私がデジカメで撮影した2048×1568の画像を例にして説明します。(以下の画像は画面に合わせて縮小されて表示されています。)この画像から2羽の鳥の部分を切り抜くことを考えます。

full.jpg(大きな画像のため縮小されています。)

一つの方法として,tbasicのsamplesにある,Trimming.tbtを使う方法があります。このプログラムを起動すれば,必要な部分を切り抜くことが簡単にできます。しかし,ここではそれほど大げさなことをせずに,次のプログラムを書いて切り抜きました。

ChDir GetProgramDir
GScreen(2048,1536,2048/2,1536/2)
GStretch On 
LoadPicture("full.jpg")
GLocate(750,650)
SavePicture("part1.png",500,400)

1行目の ChDir GetProgramDir は,ファイル読み込み系のプログラムでの定型的文です。このプログラム自体と,ここで読み込むfull.jpgを同じフォルダーに保存して実行することを指定します。これによりファイルのパスを気にすることなく,LoadPictureやSavePictureを実行することができます。
2行目のGScreenは,画像の大きさのグラフ画面を開きますが,2048×1536と大きく,ディスプレイに収まらないので,グラフ画面は幅,高さをそれぞれ半分にして開きます。
このままでLoadPictureを行うと,画像全体は画面に収まらず,スクロールモードになり,一部分しか表示されません。これを避けるため,画像を縮小して画面全体に収めるようにする命令が,3行目の GStretch です。この命令は画像を表示するとき縮小するだけで,元の画像の変更は行いません。
4行目で,画像をLoadします。 GStretch On としてあるので,元の画像の1/4が表示されています。この表示されたが像の必要な部分を切り取ります。
5行目のGLocateは切り取る左上の座標を指定しています。
6行目は,上の位置から500×400の部分を切り取り,part1.pngとして保存します。このプログラムで作成したpart1.pngは次です。

part1.png

同様にして,上のプログラムの最後の2行を以下に変更して,実行しpart2.pngを作成します。

Glocate(1340,550)
SavePicture("part2.png",500,400)

このプログラムで作成したpart2.pngは次です。

part2.png

上のプログラムで,GLocateの数値を決めるために,少し試行錯誤をする必要があるかもしれません。適当に数値を変えて,実行するだけですが,切り抜いた部分をグラフ画面で確認できると分かり易いです。そのために,実際に私は上のプログラムを少し変更たものを試行錯誤用に使いました。それは次です。

XP = 750 : YP = 650
ChDir GetProgramDir
GScreen(2048,1536,2048/2,1536/2)
GStretch On 
LoadPicture("full.jpg")
GLocate(XP,YP)
SavePicture("part1.png",500,400)
GDrawWidth = 2
Line (XP,YP)-(XP+500,YP+400),,B

追加部分は,GLocate の位置をXP,YPとして,切り抜いた部分を矩形で囲んだものです。GDrawWidthは見やすさのため,少し太い線を指定しています。このプログラムで,XP,YPの部分を色々変更して,実行すれば目的に合った部分を切り抜くことができます。

画像の貼り付け

part1.pngとpart2.pngを一つの画像に纏めます。縦に並べることもできますが,ここでは横に並べてみます。プログラムはとても簡単です。以下のプログラムで貼り付けができます。

ChDir GetProgramDir
GScreen(1000,400)
LoadPicture("part2.png")
GLocate(500,0)
LoadPicture("part1.png")
SavePicture("paste.png")

このようにして出来上がった,paste.pngは次です。

まとめ

画像の切り貼りは,よく使われる一般的な処理ですから,tbasicを使わなくても勿論可能です。画像処理用のソフト,ワープロ等で可能でしょう。身近に使い慣れたそれらのツールがあれば,そちらを使うのが良いかもしれません。一方tbasicは汎用的なプログラミング言語ですから,これを使って色々なことが可能です。簡単な処理であれば,実行速度も全く問題ありません。tbasicを使い慣れることで,色々な処理が簡単に行えるようになります。

BASIC (beginners’ all-purpose symbolic instruction code)

1 2 3 4 5 11