スタッフの日記

量子コンピュータ関連書籍を読んで(その5)

2025年4月7日(平石)

5.そもそも量子コンピュータって、何だっけ
 その後、何冊か読んだが、今回は、

   「スッキリ!がってん! 量子コンピュータの本(森 貴洋、ISBN978-4-485-60043-6)」

を読んで、知識を深めたことを中心に述べたいと思う。
 この本では、「量子コンピュータの基礎」を、「今のコンピュータ」から説き起こしている。
 そして、「量子ってなあに」との問いに答える形で、基礎の基礎を説いている。
 そこでは、「量子」の「子」についての説明もある。

 しかし、なぜ〝量〟子なのかの問いには答えていない。
 筆者は、その説明が、以前に読んだ本にあったのを思い出し、その本

   「りょうしりきがく for babies (作:クリス・フェリー/監訳者:村山 斉、ISBN978-4-7631-3766-1)」

を再度読みなおしてみた。

5.1 そもそも量子って、何だっけ
 「りょうしりきがく for babies」は、一冊丸々が、量子(りょうし、quantum)って、何だっけの説明である。
 要約すると、

   ● 物質は原子から構成される。
   ● 原子の中では中性子と陽子が核となり、その周りを電子が走りまわっている。
   ● 電子が走り回る複数の「レール」があって、電子はどれかのレール上にある。
   ● 核から遠いレールほど、電子のエネルギーが大きい
   ● 電子がエネルギーをもらうと、遠いレールに飛び上がる。
   ● 電子がエネルギーを失うと、近いレールに落っこちる。
   ● この、もらうエネルギー、失うエネルギーの量は、レール対が決まれば確定する。
   ● この、確定したエネルギー量のことを、「量子」と言う。

となる。
 ここでは、「量子」の実体が何であるかは分からない。
 また、原子とか電子とかが量子なのか否かも分からない。

 この本(りょうしりきがく for babies)の解説とネット情報などによると、上記の内容(前期量子論)は、1905年頃までのことで、その後、「なぜ電子はレールを外れないか」などについての理論の発展があり、「量子力学」として結実した。
 量子力学の特徴は、「量子は『波』である」ということである。
 「波」と聞くと、名画「神奈川沖浪裏」みたいなダイナミックな波を想像したくなるかもしれないが、ちょっと(かなり?)違う。何も波のようには動いてはいないが、「周波数」、「波長」、「位相(phase:topologyとは無関係)」と言うべきものがそれぞれあり、「重ね合わせ」ということができる点などが波と同じなので、「波」という言葉を使っている。

 「量子ってなあに」が一応分かったので、先に進む。
 「量子コンピュータ関連書籍を読んで(その1、その2)」において、「量子を使っているから量子コンピュータと言う訳ではない」ということを述べたが、「スッキリ!がってん! 量子コンピュータの本」でも、そう述べている。
 そして、「『量子』は今のコンピュータをつくるうえでも重要なのだが、『データ』には『量子』を使っていない。『データ』に『量子』を使ったコンピュータ、それが量子コンピュータだ。」と述べている。
 では、「『データ』に『量子』を使う」とは、どういう意味だろうか。

5.2 量子コンピュータでのデータ
 ここに書くことは、どこかの書物とかに書かれているものとは限らない。筆者が諸文献を読んで、理解した内容である。

5.2.1 「0」と「1」
 まずは、コンピュータのデータの基本、「0」と「1」。

 「りょうしりきがく for babies」において「レール上にある」と描かれていたことを拡張して、「状態」という言葉を使用することにする。重ね合わせがある状態は「重ね合わせ状態」、重ね合わせが無い状態は「純粋状態」と呼ぶ。
 「りょうしりきがく for babies」においては、レールは3本あったので、「原子核と1電子の組」の純粋状態は3つ、「レール対に対応したエネルギー」の純粋状態も3つある。
 このように、2つ以上の純粋状態があるとき、そのうちの1つをどれでもよいので決めて「|0>」と名づける。これは、今のコンピュータにおける「0」あるいは「false」に相当する。「スッキリ!がってん!」では「上向き矢印」とも言っている。
 さらに、|0>以外の純粋状態の1つをどれでもよいので決めて「|1>」と名づける。これは「1」あるいは「true」に相当する。「スッキリ!がってん!」では「下向き矢印」。
 「『どれでもよいので』って、そんないい加減なことで良いのか?。」と言われそうだが、筆者の理解では、良いのである。
 今のコンピュータでも、何を「0」とし、何を「1」とするかは、かなりいい加減だと思う。
 なお、「<…|」、「|…>」は、ブラ-ケット記法と呼ばれるもので、「<…|」をブラ、「|…>」をケットと読む。両方で「ブラケット」となる訳である。これらは、量子力学を記述するのに便利な記法として作られたが、量子コンピュータの理論においては、ケットのみを使用し、ブラは使用しない。

 さて、「上向き矢印」と「下向き矢印」があるなら、「右向き矢印」とか「斜め上向き矢印」があっても良い。「スッキリ!がってん!」には、そう言う意味のことが書かれている。
 実は、筆者は当初、「矢印」とあるのは「ベクトル」のことだろうと思って読んでいた。ベクトルとは、「大きさ」と「向き」を持つ量で、「平行四辺形の法則」によって、足し算(合成)と、足し算の逆演算である引き算が定義できるものであると認識している。
 しかし、「スッキリ!がってん!」に書かれた内容は、平行四辺形の法則とは似ても似つかない。
 「反対の向きを向いた矢印は、重なればなくなってしまう。」との記述があるが、これは明らかにウソである。
 たとえば、上向き(|0>)と下向き(|1>)は、反対の向きを向いているが、重ねても無くならない。
 その説明の中に「ブロッホ球」という言葉があったので、ネットを検索してみた。そして、「どうもこれは、私の知っている『ベクトル』ではないらしい。『矢印』という言葉はスッキリしない。」と考えるようになった。
 さらに、「この『矢印』を『ブロッホ・ベクトル』と呼ぶ人もいるらしいが、合点できない。」と思う。

5.2.2 「0」、「1」以外のデータを球面上の点として追加
 では、「矢印」、「ベクトル」でなく、なんという言葉を使ったらスッキリし、合点できるのだろうか。

 筆者は、「時計の針」、「計器の針」の「針(hand)」が良いと思う(「針」という言葉は、誰も使ってないようだ)。
 時計の針なら、|0>は「上向き」なので12時を指し、|1>は「下向き」なので6時を指す。「右向き」は3時、「左向き」は9時。
 しかし、「前向き」とか、「後ろ向き」とかもあるので、時計の針が指せるところ(=円周上)だけでは足りない。
 それで全体としては球になるので、「ブロッホ〝球〟」。「ブロッホ」は、これを考えた人の名前らしい。


 球面になるので、地球における緯度、経度に相当するものを考えることもできる。

 但し、緯度に相当するものは、赤道からの角度ではなく、北極(=|0>)からの角度を用いる。
 だから、北極点は90度でなく0度、赤道上の点は0度でなく90度、南極点は90度でなく180度である。
 北緯なのか、南緯なのかを考える必要は無いし、欧米人が不得手なマイナスの数を考える必要もない。

 また、経度に相当するものは、東経のみを用い、西経は用いない。
 日付変更線を越えても日付は変わらず、180度以上となり、さらに進んでいって、360度に達する。そこでやっと日付が変わる。
 東経なのか、西経なのかを考える必要は無いし、欧米人が不得手なマイナスの数を考える必要もない。
 経度は、位相を表すということになるようだ。

5.2.3 ブロッホ球面上の点に対する演算
 こんなに素晴らしいデータ表現ができても、実際にこれを使って計算ができなければ、意味がない。

 「『どれでもよいので』って、そんないい加減なことで良いのか?。」と上述したが、ブロッホ球面を作るにはそれでよいが、実際に計算に使用することができるためには、やはり、条件がある。
 どうも、ブロッホ球面上からブロッホ球面上への移動は、ブロッホ球面の中心を通る直線を軸として回転するということになる必要があるらしい。
 例えば、9時と3時を結ぶ直線を軸として回転すると、|0>と、|1>は、入れ替わる。これは、NOT演算に似ているが、前向きと後ろ向きが入れ替わるので、NOTとは、ちょっと違う。
 

 「● 電子がエネルギーをもらうと、遠いレールに飛び上がる。」は、「|0>→|1>」だから、ブロッホ球面上での移動だけど、…
 これは、「すべてを|1>にする」という演算になるように思えるが、「位相」を考えると、それはあり得ないらしい。
 

   「『量子コンピュータ』超並列計算のからくり(竹内 繁樹、ISBN978-4-06-257469-3)」

を読んで、筆者の拙い頭で考えたのは、
 遠いレールに飛び上がった電子は、すぐにエネルギーを放出して、元のレールに戻る。
 元のレールには、はじめからあった電子と、戻ってきた電子とが「混在」する。
 結果として、はじめからあった電子とは、異なった位相となる。
ということである。

一覧表示 ▶︎ スタッフの日記

量子コンピュータ関連書籍を読んで(その3、その4)

2024年10月6日(平石)

3.量子コンピューター・シミュレーター
 なんだか、たくさんの本を読んだみたいなタイトルだが、実は、読了したと言えるのは、

   「先読み!IT×ビジネス講座 量子コンピューター(湊雄一郎、酒井麻里子、ISBN978-4-295-01737-0)」

一冊だけである。他には、読みかけの本が何冊かあるが、それ等については、またの機会に。

 この本には、量子コンピューター・シミュレーターが紹介されている。
 そのURLは、

http://qplat-education.devel-q.com/

である。このリンクを開くと、下図のような量子コンピューター・シミュレーター画面が表示される。この画面の表示は、ブラウザ等によって微妙に異なるが、内容としては同じである。

画面は、3つの領域に分かれている。  

  • 左は、「ゲート」の一覧である。
  • 中央は、「キュービット」に「ゲート」を配置した図である。
  • 右は、「計算」結果などを表示する。

 「キュービット」(「量子ビット」とも呼ばれる)は、左端に各キュービットの初期値である|0〉を持つ水平の線で表示される。
 キュービット上では、時間は左から右へ進む。
 量子コンピュータでも、繰り返し処理は可能であるが、これはシミュレータなので、時間は一方にしか進まない。
 値|0〉は、古典コンピュータにおける0(false、yes/noのno、偽)に当たる。
 1(true、yes/noのyes、真)に当たるのは、|1〉である。
 単に0、1と書かないのは、これらが「ベクトル量」とでも言うべきものだからである。

 「ゲート」を、ドラッグ&ドロップにより中央部に配置し、中央部右上の「EXECUTION」をクリックすると、「計算」が行われ、その結果が右部に表示される。
 だだし、ゲート種別名に「two」あるいは「three」と付いているものは、複数の「キュービット」にまたがって配置しなければいけないので、後述する調整操作が必要になることがある。
 「ゲート」は、古典コンピュータにおける「ゲート」との機能的な類似性からそう呼ばれる。
 しかし、古典コンピュータとは違って、「ゲート」は、いわば「『量子』の照射のしかた」である。
 「量子」を照射することによって、そろばん珠を指で弾いたのと同様に、キュービットが「値」を変える。

 「ゲート」一覧の一番下にある、measurement「M」ゲートは重要である。これは、「計算」をするゲートではなく、計算結果を「観測」する。だから、各「キュービット」の一番右に、一つずつ置かれることになる。

 この本に説明のある、他のゲートについて説明しておく。
   pauli gate「X」。これは、キュービットの値を反転させる(コインをひっくり返す)。
   one qubit gate「H」。「コインを回す」と表現されている。
      表が出るか裏が出るか、「観測」されるまで分からないということ。
   two qubit gate「CX」。2つのキュービットの値により、計算結果が決まる。
      配置すると、黒丸と四角に「X」が縦線で結んだ表示となる。
      1つ目のキュービット(control bit)の値は不変。
      2つ目(target bit)は1つ目が偽のときはそのまま、1つ目が真のときは反転。
      つまり、2つ目は両者の排他的論理和となる。
   tree qubit gate「CCX」。3つのキュービットの値により、計算結果が決まる。
      配置すると、黒丸2つと四角に「X」が縦線で結んだ表示となる。
      1つ目、2つ目のキュービット(control bit)の値は不変。
      3つ目(target bit)は、1つ目、2つ目がともに真のときにのみ反転する。

 ここで、「CX」や「CCX」のような、複数のキュービットにまたがるゲートのキュービットの指定方法について述べておく。
 「画面右の[Result]を[Detail]に切り替えたうえでブロックをダブルクリックすると云々」とある。
 例えば「CX」と「CCX」をドラッグ&ドロップにより配置し、[Detail]をクリック。下図のようになる。

 「CCX」をダブルクリックすると、下図のようになる。
 このとき表示される数値は、黒丸2つと四角に「X」の位置であるが、先頭のキュービットの番号は0、つまり「ゼロオリジン」となっている。

 実は、筆者がマウスでダブルクリックしたら、[Detail]は空白のままだった。
 しかし、パソコンに内蔵のポインティングデバイス(タッチパッド)でダブルクリックしたら、見事に表示された。
 この発見に至るまで、数か月にわたり、この本の著者、コンピュータ・ユニオンのソフトウェア・セクションの特に技術部の方々にご迷惑をおかけしたことをお詫び申し上げます。

 [Detail]に表示された、[control bit1]、[control bit2]、[target bit]の数値を書き換える。
 すると、対応する黒丸2つと四角に「X」が、指定されたキュービット上に移動する。
 これで、当該の「CCX」は、配置したいところに配置された。

 

 中央部左上の「Qubits:5」とあるのは、使用する「キュービット」の個数。この数値を変更すると、表示される「キュービット」の個数が変わる。
 その隣の「Shots:1000」は、計算回数。古典計算機上では、同じ計算を多数回行うことで、確率が求められるので。

 中央部右にあるポリバケツは、配置されているゲートをすべて捨てる。「ご破算で願いましては」ということ。

 ポリバケツの下に並んでいるのは、中央部の表示倍率の調整用。

 

 シミュレータの操作法が分かった(と思えた)ので、やってみる。
 上2ビットの足し算で、3ビット目が10の位、4ビット目が1の位。下図が、その結果。

 最下行に、[ [ “0101”, 264 ], [ “1001”, 254 ], [ “1110”, 248 ], [ “0000”, 234 ] ]とあるが、
これは、
  計算結果="0101"となったのが、264件
  計算結果="1001"となったのが、254件
  計算結果="1110"となったのが、248件
  計算結果="0000"となったのが、234件
という意味である。計算結果は「観測」されたものなので、ベクトル量ではなく、スカラー量である。
 ちゃんと計算できているもののみであることが確認できる。

 

4.量子コンピューターはピアノ?
 筆者は、以前、「量子コンピュータはそろばん」と書いた(量子コンピュータ関連書籍を読んで(その1、その2))。
 しかし、この本には、「ピアノの鍵盤のようなものが並んでいて、それを演奏するようなイメージ」とある。

 ピアノとそろばんとでは、かなり違う。
 どちらが正しいのか、あるいはどちらも正しいのか。

 そろばんは、指ではじくことによって、たまを動かして計算する。
 ピアノは、指でくことによって音を出し、人間のたまに働きかける。
 やはり、ピアノとそろばんとでは、一見、違うように見えて、よく似ている。
 だから、きっと、どちらも正しい。

一覧表示 ▶︎ スタッフの日記

OracleからPostgreSQLへの移行について

2024年8月27日(staff)

IT資産にかけるコストを少なくするようになってきている為でしょうか。
OracleからオープンソースのPostgreSQLに変えたいというニーズは昔からあるものの、最近は以前に比べ急増してきているように感じます。
Oracleのソフトウェア費用が高いことに加え、仮想化環境におけるライセンスの考え方により、必要以上に費用が掛かってしまうことが理由とされています。
ところがPostgreSQLに変えたくとも、変えられない場合が多く見受けられます。
PostgreSQLへの移行に関する問題点をいくつか列挙しますので、PostgreSQLへの移行を検討する際の一助となればと思います。


(1) SQL
アプリケーションにて自前のSQL文を使用している場合、Oracle固有のSQL文があった場合、SQL文の修正または新規のSQL文の作成が必要になります。
SQL文の修正または新規のSQL文の作成が多いほど、PostgreSQLへの移行は困難になります。
アプリケーションにおけるすべてのSQL文が対象となるため、対象の把握が困難な場合があります。プログラムで動的にSQLを生成している場合は特に注意が必要です。


(2) ストアドプロシージャ
OracleとPostgreSQLでは、構文、エラーハンドリング、トランザクションの管理などが大きく違うため、大規模な修正や新規ストアドプロシージャの作成が必要になることが度々発生します。
アプリケーションがストアドプロシージャに多く依存している場合は、PostgreSQLへの移行へのハードルが極めて高くなります。
なお、ストアドプロシージャの修正の難易度や修正に要する工数は、ora2pgというプログラムにてある程度は確認できます。


(3) データベース構成
大規模データベースでは、性能や耐障害性を考慮して、Oracle RAC構成を採用しているケースが多いかと思います。
PostgreSQLに移行する場合、どんなクラスタ構成を採用しても、更新処理ができるノードが1つしか存在しない点に留意するがあります。(Oracle RACではどのノードでも更新処理が可能)
また、更新結果が更新ログの転送により他のノードに伝播されるため、タイムラグが発生することにより、別のトランザクションで更新結果が反映されていないデータを読み取ってしまうリスクもあります。
更新処理が多い場合はネックとなるかもしれません。


(4) データベース運用
データベース監視や運用については、Oracleの考え方がほぼ援用できませんし、データディクショナリも全く違うので、運用設計からやり直しとなります。
自前のスクリプトで情報採取を行い監視していた場合ですと、すべて新規作成となります。


(5) コスト
今後のOracleソフトウェア費用よりも、PostgreSQLのソフトウェア費用にPostgreSQLへの移行費用を加えた金額が小さくなることを見込んで、PostgreSQLへの移行を検討するものと思います。
(PostgreSQLへの移行費用は、コンサルティング費用、データ移行とアプリケーションの改修の合計とします)
多くの場合、アプリケーションの改修費用がかさみ、PostgreSQLへの移行費用が大きくなりがちです。
ソフトウェア費用を節約するため、サポート契約なしで素のPostgreSQLを利用することを考えるかもしれませんが、バグデータベースへのアクセスやPostgreSQLのノウハウの提供がサポート契約により得られることを考えると、ある程度の規模以上の企業ではサポート契約なしにPostgreSQLを使用することは必須ではないでしょうか。
そのため、ソフトウェアの利用期間などを考慮すると、Oracleのままでも問題ない、多額のコストをかけてPostgreSQLに移行する利点はないと判断するケースもあります。


以上

一覧表示 ▶︎ スタッフの日記

量子コンピュータ関連書籍を読んで(その1、その2)

2023年8月4日(平石)

1.電卓型とそろばん型
 量子コンピュータに関する文献を読んで、もしかして、情報処理システムには「電卓型」と「そろ ばん型」があるのではなかろうかと思うようになった。
 電卓型は、たとえば下図。

 「ここから上は出力」、「ここから下は入力」で示したように、入力場所と出力場所とが、きっちり と分かれている。

 人間の脳の細胞(ニューロン)も電卓型。入力場所と出力場所は分かれている(下図)。

 「そろばん型」は、適切な画像が無いが、要するに、入力と出力が分かれていない。

上図は、筆者が小学生の時に買ってもらったもの。


 そして、古典コンピュータ(従来のコンピュータ、現在のコンピュータ)は概ね電卓型、量子コン ピュータは必ずそろばん型となるらしい。


 それは、量子コンピュータが、「波の重ね合わせ」を計算するものだからだと思われる。
 例えば、少量の放射性物質と、それが放射性崩壊したときにそれを検知する検知器と、検知器に連動して瓶を叩き割るハンマーとを箱に入れて蓋をする。放射性崩壊は量子現象なので、ふたを開ける前は、瓶が「割れている状態」と「割れていない状態」との、波としての重ね合わせになっている。
蓋を取らなければ、割れているのか割れていないのか決まらない。蓋を取って箱の中の情報を外部に出力すると、割れているか否かが確定してしまう。つまり「割れていない」と「割れている」の両方があったものが、一方だけになってしまう。
 「量子コンピュータは、このような箱をたくさん並べたようなもの」という意味のことが、「でたらめの科学 サイコロから量子コンピューターまで(ISBN:978-4-02-295104-5)」に書かれている。なので、計算の途中で「波の重ね合わせ」でなくなってしまい、瓶が割れているか否かが確定しては、まずいのである。

 「ゼロからわかる量子コンピュータ(ISBN:978-4-06-528299-1)」に、下図がある。

 この図で水平線は同一の〝もの〟である。〝もの〟としては一つであるが、〝状態〟は、複数の状態の重ね合わせである。
 量子コンピュータのプログラミングは、上図のなどの「ゲート」を、どこに配置するかを考えることになる訳である。
 量子コンピュータにおける「ゲート」は、「偏光を当てる」とか「磁場をかける」などの操作である。そろばんにおける、指の動かし方に相当するものだと思う。
 そして、ややこしいことに、「一番上の瓶が割れていない状態と、二番目の瓶が割れている状態の重ね 合わせ」などというのもありうる。上図で縦につながった「ゲート」は、このような、複数の瓶の状態の 重ね合わせに対する操作であろう。
 ということは、古典コンピュータのプログラムが、基本的に1次元であるのに対し、量子コンピュー タのプログラムは、ほとんどの場合、2次元以上となるのではなかろうか。
 ちなみに、は、状態を表現するもので、左側に縦線、右側に閉じ括弧(〉)を書く。

 

余談:
 テレビの時代劇を見ていたら、五珠が2つ、一珠が5つのそろばんが使われていました。
 ネットを検索すると、「もともと13世紀ころ中国で発明された算盤は、重量の単位で1斤=16両、面積の単位で1市頃=16市畝など、16進数が計算できるように、五珠が2つ、一珠が5つだった。」ということのようです。


2.量子を使っているから量子コンピュータと言う訳ではないということ
 今日使われている、いわゆるノイマン型コンピュータは、「電子計算機」とも呼ばれている。「電気 計算機」とか「電動計算機」とか言うと、別のものになってしまう。つまり、電気を使用していることが 本質なのではなく、電子を使用していることが本質なのである。
 そして、電子は、量子の一種である。
 今日のコンピュータには、半導体が使われている。半導体にはn型半導体とp型半導体があって、それらの薄片を何層にも貼り合わせたものを使う。
 そして、電流は、p型半導体からn型半導体へは流れるが、n型半導体からp型半導体へは流れ ない。
しかし、そのn型半導体のところにもう一つp型半導体をくっつけて、そのp型半導体からn型半導体に電流を流すと、流れなかったn型半導体からp型半導体への電流が流れる。
 この不思議な現象は、量子論によらなければ説明できない。そもそも、なぜn型半導体とp型半導体とが存在するのかが、量子論によらなければ説明できない。
 今日のコンピュータは、これらの量子現象を演算処理等に使っている。
 量子を使っているにもかかわらず、今日普通に使われているパソコンやスーパー・コンピュータ は、量子コンピュータではない。
 たとえば、「量子コンピュータの衝撃(ISBN:978-4-299-00338-6)」には、「古典コンピュータは電 子を使っているのに、何故量子コンピュータと呼ばないのか」という疑問が表明され、それなりの回 答を示している。しかし、「粒子の数が多くなると波のように見える」などと的外れなことを言ってい る。
 筆者は、この回答も含めた諸々の考察の末、「電子を個別処理するのが量子コンピュータ、 電子を集団で処理するのが古典コンピュータ」という結論に達した。

 

【参考にした文献】(量子コンピュータ関連書籍+平石の一言.pdf)

一覧表示 ▶︎ スタッフの日記

標準SQL update操作で必要になるselect権限の付与について

2022年7月3日(staff)

      table 全件update       -> tableのselect権限は不要
      table 条件付きupdate -> tableのselect権限が必要
    
 updateやdeleteの対象となる特定の行や列を指定するには、そのテーブルのselect権限が必要になります。select権限がないユーザが、table条件付きupdateを行うと、例えば“権限不足でエラー”になります。
  
 個人的な思い込みで、レコードのupdateができるのであれば、当然select権限が付与されているだろう、update権限を付与すると自動的にselect権限の付与が補完されるだろうぐらいの認識がありました。
  
[以下が注意したい例]
  
① oracleの"SQL92_SECURITY"パラメータをfalse ー> True に変更した時。 select権限を付与していないテーブルのupdateがエラーになる。
  
② プログラムで動的にSQL文を作成している時、where句がある場合はselect権限が必要になる事に注意。select権限のないテーブルのupdateは、where句が無いときは成功しますが、where句がある時に失敗します。
 

 以上

 

一覧表示 ▶︎ スタッフの日記

ACCESS VBA 複合機(コピー機)のグレースケール印刷指定方法

2022年5月29日(staff)

■複合機側でグレースケール印刷を標準設定しているのに、ACCESSでレポート印刷する際、初期設定のカラー印刷に戻っている。そのたびに設定操作が面倒だ。
 
 [ACCESS VBAによる指定方法]
 
  該当レポートのページフォーマットイベントに以下のコードを追加。

  Private Sub Report_Page()
        Me.Printer.ColorMode = acPRCMMonochrome
  End Sub

 
 [説明]
 
  最近はカラーインクの経費削減で、黒インクのみの印刷が多くなりました。複合機ドライバーのプロパティ設定でグレースケール印刷を標準設定にしています。Word文書、Excel文書等の印刷では、グレースケール印刷出来ていますが、ACCESSのレポート印刷では、カラー印刷になってしまいます。ACCESSでは、なぜか複合機の標準設定は反映されないようです。そこで、上記のようなコードを追加すると、グレースケール印刷のコントロールができるようになりました。
  
  以上、ご参考まで。
 

一覧表示 ▶︎ Webノウハウ

canvasについて続編2―ミウラ折りのデモ

2021年12月18日(平石)

 何年か前、「スマホを2本指でスワイプすると、文字と画像が大きくできる。だけど、画面全体は元のサイズなので、端の方が途切れてしまう。画面も大きくなるようにできないものか。」というような会話をしました。

 ややあって、その会話と、何かで見た宇宙ステーションの発電パネルが宇宙空間で広がっていく映像とが私の頭の中で混ざってしまいました。宇宙ステーションの発電パネルは、打ち上げ時には小さく折りたたまれており、宇宙に飛び出て、ほとんど一瞬の間に、いっぱいに広がります。この折り方は、発案者三浦公亮氏の名前を採って「ミウラ折り」と呼ばれています。

 ミウラ折りは、下図の各辺で折り曲げる折り方です。各辺では折り曲げるけれど、各平行四辺形の内部では折り曲げません。そして、谷折りと山折りをうまく組み合わせることで、ほとんど瞬時に閉じたり開いたりできるのです。

     
   

 

 上図は、広げた状態の図ですが、右下の小さな赤丸の近くをクリックすると、少しだけ折った状態の図になります。そのまま、左ボタンを押したままマウスカーソルを動かすと、閉じたり開いたりできます。

 また、右側にある「軌跡の表示」ボタンをクリックすると、赤丸マークの動く軌跡が表示できます。これは、直線でも円でもありません(双曲線の一部ではなかろうかと思いますが、未確認です)。

 右下の「手動⇒自動」ボタンをクリックすると、閉じたり開いたりの動作を自動的に繰り返し表示するようになります。

 上図には、3×3=9枚のパネルが表示されています。左側に表示した縮小図の当該位置をクリックすることで、表示するパネルを2×3、3×2、あるいは2×2にすることができます。枚数が多すぎて複雑になって見づらい場合などに活用してください。

 もし動かない場合は、タイトル「canvasについて続編2―ミウラ折りのデモ」をクリックして単独表示にしてみてください。

(これは、「canvasについて」の続編です。)

一覧表示 ▶︎ Webノウハウ

canvasについて続編―詰将棋をちゃんと動くようにしてみた

2021年9月17日(平石)

canvasについて」に描いた詰将棋を、実際に動くようにしてみました。

おかげでHTMLとJavascriptについて、大変勉強になりました。canvasを3枚重ねて使っているのですが、下手をすると、下にある「一覧表示 ▶︎ Webノウハウ, スタッフの日記, ブログ」とある箱まで重なってしまって、何やらわからないことになってしまうのに苦労しました。

 

上図の駒をマウスでドラッグすると、将棋のルールに則って、動かすことができます。ぜひ、やってみてください。

もし動かない場合は、タイトル「canvasについて続編―詰将棋をちゃんと動くようにしてみた」をクリックして単独表示にしてみてください。

なお、canvasを重ねて使う方法については、けーちゃんのプログラム開発ノート【JavaScript】 Canvasでレイヤーを表現する(https://note.affi-sapo-sv.com/js-canvas-layer.php)を参考にさせていただきました。

 

 

一覧表示 ▶︎ Webノウハウ

canvasについて

2021年8月3日(平石)

HTML5のcanvasについて調べてみました。

それで、やあっとこんなことができるようになりました。

上の枠内で、マウスのボタンを押しながら、マウスを動かしてみてください。 をクリックしてからやると、色が付きます。

次に、詰将棋とかをやってみようと思い、絵は描くことができました。しかし、今回は、動作は断念しました。だから下図で「金」をドラッグしても、何も出ません。

いろいろ研究してみれば、もっといろんなことができそうです。

ただ、いちいち script を書かないといけないのが、ちょっと煩わしいです。

 

一覧表示 ▶︎ Webノウハウ

「ャtト」って、こういうことだったんだ

2020年11月7日(平石)

 ネット上で時々見る意味不明の言葉「ャtト」について、ひょんなことから判明したので、ここに記しておくことにします。

 まず、その「ひょんなこと」について。
 現在開発中のシステムで、「予算実績管理表」というものをpdf出力するテストを行いました。ファイル名は、“予算実績管理表_~.pdf”としたつもりでした(「~」の部分は補足情報)。ところが、“落Z実績管理廟~.pdf”なるファイルができてしまいました。“予”が“落”、“算”が“Z”、“表_”が“廟”に文字化けしてしまった形です。
 ネットを探しても、対処方法が分からず、文字の順序を変えたり、前後に他の文字を入れたりすると、ということをいろいろ試してみて、ついに、“予”の後ろと“表”の後ろに“\”を入れると、期待した正しいファイル名になることが判明しました。

 「文字“表”の後ろに“\”」で、思い出したことがあります。
 かなり昔、ソースプログラムの“表”という文字の後ろには“\”を付けないと、文字化けしたり、コンパイルエラーになってしまったりというコンパイラがありました。
 これは、“表”という文字のShift-JISでのコードが「955c(16進表示)」で、2バイト目が「5c」つまり“\”と同じなので、エスケープ文字(“\n”(改行)などとして使われるもの)と判断されてしまうからです。そこで、“\”+「文字」の機能の一つである、「“\\”が“\”という文字1文字を表す」ということを利用します。つまり、“表”という文字の2バイト目がエスケープ文字の“\”、その後ろにさらに“\”を付けることによって、“\\”となり、「“\”という文字1文字」となって、最終的に“表\”は“表”となり、また、後続の文字もちゃんと正しく処理される訳です。

 そこで、“予”についても、2バイト目が「5c」なのではないかと調べました。その通りでした。
 さらに、2バイト目が「5c」のものを探してみると、“ソ”(835c)がありました。
 もし、“ソ”についても同様の文字化けが起き、“\”を付けると文字化けしないなら、文字化けの原因はこれであり、他の文字も、2バイト目が“\”だったらその後ろに“\”を追加することで、文字化けを防ぐことができると考えられます。
 そして、“ソ”を含む文字列として、“ソフトウェア”を用いることにして、実験。

 その実験結果のファイル名を見て、声を上げてしまいました。
 実験が成功したからでも、失敗したからでもありません。
 “ャtトウェア”となったからです(“ャ”は小さいカタカナ、拗音)。
 この、あちこちのサイトで見かける意味不明な文字列。ファイルをダウンロードするとファイル名中に見られることのある意味不明な文字列。ついに、その意味が、分かったからです。

 “ソ”は「835c」、“フ”は「8374」、「5c」がエスケープ文字“\”とみなされると、次の文字「83」あるいは「8374」は“\n”とかの“\”と組み合わせて特別な意味になる文字でないので、この“\”は無視されてしまい、「83 83 74」となります。「8383」は“ャ”、「74」は“t”なので、結果として、“ャtトウェア”となる訳です。

 おまけ。
 今回のきっかけとなった“予算”と“表_”については、
   予=975c、算=8e5a、結果として「97 8e 5a」=落Z
   表=955c、_=5f、結果として「95 5f」=廟
となってしまっていました。
 対処としては、

  $fileName = mb_convert_encoding($fileName, "SJIS-WIN");

  header('Content-Disposition: attachment;filename="'.$fileName.'"');

の間に、

  $fileName = str_replace('\\', '\\\\', $fileName);

を入れました。“'\\'”とあるのは、“\”1つの意味。“'\'”としてしまうと“'”の意味になってしまいます。

一覧表示 ▶︎ Webノウハウ