misc.log

日常茶飯事とお仕事と

スペースシャトルの写真集、初めて触れた航空宇宙技術

1981年に打上と運用が始まったスペースシャトルアメリカの再利用可能、地球帰還型の往復用宇宙船。当時小学4年生くらいだった自分にとっては生まれて初めてみる派手な「宇宙計画の成果」で、当時のわくわく、小学校のクラスでの話題など未だに記憶としてぼんやりのこっているくらいです。その始めから終わりまでを記録した写真集が出たようです。


SPACE SHUTTLE 美しき宇宙を旅するスペースシャトル写真集

幼い頃からロボットアニメを見て、少し前の1979年からはドラえもんのテレビ放送が朝の8:30から行われるように。また、同じ頃にガンダムの再放送が始まることで周囲で「リアルなロボット」を認識するようになってきた頃にちょうど目の当たりにした「リアルな技術」。また、同じ頃に親戚のお兄さんがNECのパソコン、PC-8001を買ったというのをみせてもらい……自分にとっては科学技術が一気に押し寄せてきた時期でした。今の自分の仕事やコースに大きな影響を与えたのもこれらの様々な「新しいもの」です。

当時、タミヤから出ていたオービター(スペースシャトルの、実際に乗員が乗って帰還してくる本体)のプラモデルを買ってもらい、組み立てたのも記憶に強烈にスペースシャトルが残る理由の1つです。2011年ですが、寝かしていたプラモを組み立てた方が綺麗な写真を添えて記録されていました。

www.webmodelers.com

タミヤ 1/100 スペースシャトルシリーズ No.01 オービター プラモデル 60401

タミヤ 1/100 スペースシャトルシリーズ No.01 オービター プラモデル 60401

まだ英語の知識もほとんどなく、カタカナで書かれた意味も分からなかった頃ですが、「ペイロードって?」「カーゴって?」「ブースター?」「マニピュレーター?」説明書きを見ても逐一意味や用途を考える必要がありました。自分がすきだったのはカーゴベイの内側にあるマニピュレーター。正式名称は「シャトル・リモート・マニピュレーター・システム」。これですね。関節から動くようになっていたプラモのアーム。壊れないように組み立てて、くねくねして遊んでいたのを覚えています。

iss.jaxa.jp

また、カーゴベイのハッチが大きくバカッと開くのもものすごく感動しました。なんだこれは?と。こんなところに荷物(ってももう国際宇宙ステーションのモジュール1個分くらい)を入れて運ぶという発想。仕事が終わったら大気圏に入って滑空して降りてくる、その間「滑空以外のコントロールがきかない(まじで?どうやってねらった場所に降りてくるの!?)」とか「熱に耐えるため大量の耐熱タイルが下面にびっしり貼り付けられている(剥がれないの?なかったらどうなるの?)」とか。もう、ディテール知識だけでお腹いっぱいになったのを覚えています。

こういう知識やわくわくを自分の子供に与えられているだろうか……ってのが今の一番の悩みですね。若い人には夢のある話に一杯触れて欲しいと思います。自分がそうだったように。そうすれば、将来少々辛いことがあっても溜めておいた夢を使って切り抜けられるとおもうのです。

SPACE SHUTTLE 美しき宇宙を旅するスペースシャトル写真集

SPACE SHUTTLE 美しき宇宙を旅するスペースシャトル写真集

自分の行動の理由を説明できるかどうか

社内掲示版に書きかけてやめたシリーズ。推敲前段階でやーめた、ってなったもの。 こんなん書いたらまるで社内で不満を蓄積していると勘違いされちゃうじゃないですかー。


1年目、2年目には研修で話したと思うけれど、自分の採るあらゆる行動にきちんとした理由を述べられるかどうか。 たとえば設計の場合、数ある方法からなぜその方法を採用したのかを述べられるようにしておく。これができていればたいていの場合大きな問題になることは無いと思います。これは何かをレビューする場合も、人に何かを教える、指摘する場合も同様。

理由があれば反論も同意もできますが、理由がなく何かをする人は、助けることもただすこともできません。それを狙ってわざと理由を伏せたり得体が知れない風を醸し出す人は策士だけど、反面、助けも得られない。

で、特定ジャンルについて理由をきちんと説明出来る人が専門家。もちろん、専門家同士でその理由に得心がいくレベルの理由をつけられて一人前。何でも良いから理由があればいいわけじゃなく、その理由に妥当性が無いとだめ。

「なんとなく」とか「直感」は、専門家が大量の決定や判断を積み重ねた結果、無意識に最良の選択を行うような場合にのみ真価を発揮するもので、素人の「なんとなく」はただのサイコロ振りと同じ。

ほんと、設計や実装に関しては特に、「なんで?自分なんでこれやったんだろう?」を常に意識して仕事して欲しいと常々思う。なんで?を持った人が作るものは、その意図を読めるので継承できるけれど、それがない成果物はほんと、手を出せない。引き継げない。棄てて作り直すしかないことが多々ある。

理由を意識して、きちんと説明していれば「あの人だったらどうするか」というシミュレーションをやってもらえるようになる。そうなると、迷ったときの判断が迅速になったり、方向性が揃う。結果、チームの向きが揃う。パフォーマンスが出る。

なので、人の上に立つ人は、考え方を真似してもらえるような状況を目指すべきだだとおもいます。真似させる、じゃなくて「真似してもらえる」ってところがポイント。選ぶのは自分じゃない。


「一緒にいたい」と思われるリーダーになる。 人を奮い立たせる50の言葉

「一緒にいたい」と思われるリーダーになる。 人を奮い立たせる50の言葉

「ついていきたい」と思われるリーダーになる51の考え方

「ついていきたい」と思われるリーダーになる51の考え方

Access 2016でテーブル内容を固定長テキストで出力する

できない……。散々悩んだのですが今日時点までの状況をメモっておきます。

やりたいこと

  • 文字列や数値を含んだテーブルの内容をテキスト形式で出力したい(CSVではなく)
  • できれば、クエリーやテーブルを指定すると、決まった名前のテキストファイルに出力するような共通機能としてまとめたい。

できなかったこと

  • DoCmd.TransferTextでacExportFixedを指定してのテキスト出力ができなかった。
    • Specificationを指定しろと言われるので、エクスポートウィザードの操作を保存したものを指定しても「定義名が見つからない」でダメだった。
    • Schema.ini とやらを指定せよとのことだったので作って指定してみても「Schema.iniが見つからない」でダメだった。
    • 定義を指定する機能がインポートウィザードにはあったので、それで定義したインポート定義をacExportFixedで指定してみたけれど、インポートしようとしてだめだった。

できたこと / わかったこと

  • 海外のフォーラムで、ADODBのオブジェクトを使ってSQLから直接ファイルにエクスポートする方法が提案されていたので、試して見たらSchema.iniも使えてエクスポートもできた。
  • エクスポートウィザードの過程で操作ではなく定義を指定する機能はAccess 2010から消えてしまっているらしいことが判った。

つくってみたもの

テスト用テーブル

簡単なものを用意しました。

f:id:frontline:20191031171006p:plain
サンプルテーブル「test」の内容
f:id:frontline:20191031171043p:plain
サンプルテーブル「test」の定義

テスト用ロジック

これに、ボタンを1つだけ持つフォームを用意し、VBAで下記のコードを実行するようにしました。ロジックはクラスのメソッドとして配置しています。

Public Function ExportBySQL() As Boolean

    Set con = CreateObject("ADODB.Connection")
    
    ' 改めてAccessファイルのDBに接続する
    con.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=C:\Work\DB\TestDB.accdb"
    
    Dim sql As String
    ' CSV形式だとこれ。一度これで出力すると、Schema.iniが自動生成されるので改変すればFixed用の定義ができる
    'sql = "select * into [text;database=c:\work\;FMT=Delimited;HDR=Yes].[csvfile.csv] from test"

    ' 固定長テキストの出力SQL
    sql = "select * into [text;database=c:\work\;FMT=Fixed;HDR=Yes].[sample.txt] from test"
    
    ' エクスポートSQL実行
    con.Execute sql

End Function

Schema.ini

下記のようなものを作りました。作ったと言ってもゼロからではなく、上記の処理で FMT=Fixed の代わりに「Delimited」を指定すると、出力先フォルダに自動的にSchema.iniが生成されたので、それを少し書き換えただけです。

[sample.txt]
ColNameHeader=True
CharacterSet=932
Format=FixedLength
Col1=ID Integer Width 10
Col2=UsereName Char Width 255
Col3=Company Char Width 255

できたこと

下記のようなファイルが出てきました。とりあえず直近の目的は達成。

f:id:frontline:20191031171555p:plain
生成されたファイル


参考にしたサイト

いろいろ見た結果、ストレートに「Access 2016で定義を作るAdvancedというボタンの所在を検索しよう」と思って見つけたのがこちら。

social.msdn.microsoft.com

ここの下記の文章が決定打でした。

In current design, it seems that we can't create an export-definition with custom filed separators. <

要するに、その機能は無い、と。ただ、職場でもAccessに詳しい人はその方法で出来たといっていたので、Access 2010から機能が消えてしまったのか……。でも、TransferTextでSchema.iniは指定できる、と書いてあったので、その利用法を調べる過程で行き着いたのが下記。ここでSQLによるアプローチを知ります。

stackoverflow.com

サンプルを改変しながら適用し、まずはCSVで出してみて、次は固定長文字列にトライしました。FMT=によるフォーマット指定方法は下記サイトで確認しました。

www.connectionstrings.com

Schema.iniの書き方

公式はこちらのようです。

docs.microsoft.com

列ごとの型名を指定する必要がありますが、今のAccessは日本語名です。今回サンプルは「短いテキスト」があったので、それが何に相当するかは下記で知りました。

support.office.com

とりあえずここまで。

Excel & Access連携 実践ガイド ~仕事の現場で即使える

Excel & Access連携 実践ガイド ~仕事の現場で即使える