マスト屋

投稿日:

 現実世界ではいろいろなことが同時進行で進んでおり、何かが100%達成されなければ次に行ってはならない、なんていうさながらウォーターフォール的進行はほとんど無理である。

 現実の仕事でPERT図などがあまり使われないのも、現場の怠慢とか怠惰とかいうわけではなく、使われないなりの理由がある、ということだと思う。

 ところが、そういうことのわからぬボンクラが人の上に立っていたりするから、本当にやりきれない。

「○×△は『マスト』だ!」

 この「マスト」という言い方も大嫌いだ。「必須要件」とか、ちゃんと日本語で言うのならまだしも、マスト(must)マスト言いやがって、お前の股間のその貧相なブツが帆柱(mast)だとでも言う気かボケッ。

 コッチも満たさなければならない、アッチも取り入れなければならない、コレも、ソレも、アレもだ。そういう現実的な仕事の話をしているときに、「『アレ』がないとすべてダメだ!!全てか、ゼロかだ!!!」みたいなことを怒鳴り散らす奴が、大嫌いだ。

 これからはそういう奴の事は、私の脳内では「勃起ちんぽ(mast(マスト))野郎」と呼ぶことにした。

カメラで遊んでみる

投稿日:

 秋月電子のサイトを見ていると、小さなカメラがあり、Arduinoに付きそうな感じだ。

 3850円。Arduino自体が2800円かそこらなので、それに比べるとちょっと高いが、早速行って購入。

 だが、あまり情報は多くない。まず、メーカーのサイトを見ていくと、チュートリアルがあり、「とりあえずテストするには、電源をくれてやって、一番端のピンをテレビにつなぎゃあ絵が出る」みたいなザックリ感満載の解説が。それで、テレビにつなぐためのRCAジャックなども買う。

 チュートリアルはこれを読んでおけばだいたいいいようだ。

 ほどいてみるとこんな感じで、かなり小さい。

IMG_3112

 ピンのピッチが2mmで、ブレッドボードで扱いにくい。それで、普通の2.54mmのピンヘッダを出して、その根元をこんなふうにムリヤリ(笑)2mmピッチにせばめる。

IMG_3116

 こいつをカメラの基盤にえいやっ、とねじ込み、半田付けする。

IMG_3118

 なかなか小さいので、ルーペと老眼鏡を併用しつつ、ICなんか壊しちゃってもナンだから、20Wのぬるくて細い半田鏝でさっさとつける。

IMG_3117

 我ながらなかなかスピーディな仕事だなあ(笑)。

 で、メーカーのサイトには「5V」と書いてあるが、これは互換品の別の製品のためのチュートリアルのようで、買ってきたものの基盤をよく見ると「3.3V」と印刷されている。壊してはもったいないから、3.3Vで試す。3.3Vの電源代わりにArduinoの3.3Vピンを使う。

 基盤の印刷通り、3.3V、GND、それから右端のピンをRCAジャックのセンターに、RCAジャックのアースを同じくGNDに入れて、テレビの前に持っていく。

IMG_3119

 テレビにつなぐと、おお、確かに、値段なりのフザけた画質(笑)で、自分の顔が映る。

IMG_3121

 上下が逆だが、まあ、いいや。

 で、今度はArduinoで画像を撮影してみよう。

 チュートリアルにしたがってArduino用のライブラリをダウンロードし、これをArduinoのインストールフォルダの「libraries」に配置する。

 そうしておいてArduinoのIDEを起動すると、「ファイル」→「スケッチの例」の中に「Adafruit VC0706 Serial Camera Library」が現れるから、この中から「Snapshot」を選ぶ。これは静止画をjpegで撮影するスケッチのサンプルだ。

// This is a basic snapshot sketch using the VC0706 library.
// On start, the Arduino will find the camera and SD card and
// then snap a photo, saving it to the SD card.
// Public domain.

// If using an Arduino Mega (1280, 2560 or ADK) in conjunction
// with an SD card shield designed for conventional Arduinos
// (Uno, etc.), it's necessary to edit the library file:
//   libraries/SD/utility/Sd2Card.h
// Look for this line:
//   #define MEGA_SOFT_SPI 0
// change to:
//   #define MEGA_SOFT_SPI 1
// This is NOT required if using an SD card breakout interfaced
// directly to the SPI bus of the Mega (pins 50-53), or if using
// a non-Mega, Uno-style board.

#include <Adafruit_VC0706.h>
#include <SPI.h>
#include <SD.h>

// comment out this line if using Arduino V23 or earlier
#include <SoftwareSerial.h>         

// uncomment this line if using Arduino V23 or earlier
// #include <NewSoftSerial.h>       

// SD card chip select line varies among boards/shields:
// Adafruit SD shields and modules: pin 10
// Arduino Ethernet shield: pin 4
// Sparkfun SD shield: pin 8
// Arduino Mega w/hardware SPI: pin 53
// Teensy 2.0: pin 0
// Teensy++ 2.0: pin 20
#define chipSelect 10

// Pins for camera connection are configurable.
// With the Arduino Uno, etc., most pins can be used, except for
// those already in use for the SD card (10 through 13 plus
// chipSelect, if other than pin 10).
// With the Arduino Mega, the choices are a bit more involved:
// 1) You can still use SoftwareSerial and connect the camera to
//    a variety of pins...BUT the selection is limited.  The TX
//    pin from the camera (RX on the Arduino, and the first
//    argument to SoftwareSerial()) MUST be one of: 62, 63, 64,
//    65, 66, 67, 68, or 69.  If MEGA_SOFT_SPI is set (and using
//    a conventional Arduino SD shield), pins 50, 51, 52 and 53
//    are also available.  The RX pin from the camera (TX on
//    Arduino, second argument to SoftwareSerial()) can be any
//    pin, again excepting those used by the SD card.
// 2) You can use any of the additional three hardware UARTs on
//    the Mega board (labeled as RX1/TX1, RX2/TX2, RX3,TX3),
//    but must specifically use the two pins defined by that
//    UART; they are not configurable.  In this case, pass the
//    desired Serial object (rather than a SoftwareSerial
//    object) to the VC0706 constructor.

// Using SoftwareSerial (Arduino 1.0+) or NewSoftSerial (Arduino 0023 & prior):
#if ARDUINO >= 100
// On Uno: camera TX connected to pin 2, camera RX to pin 3:
SoftwareSerial cameraconnection = SoftwareSerial(2, 3);
// On Mega: camera TX connected to pin 69 (A15), camera RX to pin 3:
//SoftwareSerial cameraconnection = SoftwareSerial(69, 3);
#else
NewSoftSerial cameraconnection = NewSoftSerial(2, 3);
#endif

Adafruit_VC0706 cam = Adafruit_VC0706(&cameraconnection);

// Using hardware serial on Mega: camera TX conn. to RX1,
// camera RX to TX1, no SoftwareSerial object is required:
//Adafruit_VC0706 cam = Adafruit_VC0706(&Serial1);

void setup() {

  // When using hardware SPI, the SS pin MUST be set to an
  // output (even if not connected or used).  If left as a
  // floating input w/SPI on, this can cause lockuppage.
#if !defined(SOFTWARE_SPI)
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
  if(chipSelect != 53) pinMode(53, OUTPUT); // SS on Mega
#else
  if(chipSelect != 10) pinMode(10, OUTPUT); // SS on Uno, etc.
#endif
#endif

  Serial.begin(9600);
  Serial.println("VC0706 Camera snapshot test");
  
  // see if the card is present and can be initialized:
  if (!SD.begin(chipSelect)) {
    Serial.println("Card failed, or not present");
    // don't do anything more:
    return;
  }  
  
  // Try to locate the camera
  if (cam.begin()) {
    Serial.println("Camera Found:");
  } else {
    Serial.println("No camera found?");
    return;
  }
  // Print out the camera version information (optional)
  char *reply = cam.getVersion();
  if (reply == 0) {
    Serial.print("Failed to get version");
  } else {
    Serial.println("-----------------");
    Serial.print(reply);
    Serial.println("-----------------");
  }

  // Set the picture size - you can choose one of 640x480, 320x240 or 160x120 
  // Remember that bigger pictures take longer to transmit!
  
  cam.setImageSize(VC0706_640x480);        // biggest
  //cam.setImageSize(VC0706_320x240);        // medium
  //cam.setImageSize(VC0706_160x120);          // small

  // You can read the size back from the camera (optional, but maybe useful?)
  uint8_t imgsize = cam.getImageSize();
  Serial.print("Image size: ");
  if (imgsize == VC0706_640x480) Serial.println("640x480");
  if (imgsize == VC0706_320x240) Serial.println("320x240");
  if (imgsize == VC0706_160x120) Serial.println("160x120");

  Serial.println("Snap in 3 secs...");
  delay(3000);

  if (! cam.takePicture()) 
    Serial.println("Failed to snap!");
  else 
    Serial.println("Picture taken!");
  
  // Create an image with the name IMAGExx.JPG
  char filename[13];
  strcpy(filename, "IMAGE00.JPG");
  for (int i = 0; i < 100; i++) {
    filename[5] = '0' + i/10;
    filename[6] = '0' + i%10;
    // create if does not exist, do not open existing, write, sync after write
    if (! SD.exists(filename)) {
      break;
    }
  }
  
  // Open the file for writing
  File imgFile = SD.open(filename, FILE_WRITE);

  // Get the size of the image (frame) taken  
  uint16_t jpglen = cam.frameLength();
  Serial.print("Storing ");
  Serial.print(jpglen, DEC);
  Serial.print(" byte image.");

  int32_t time = millis();
  pinMode(8, OUTPUT);
  // Read all the data up to # bytes!
  byte wCount = 0; // For counting # of writes
  while (jpglen > 0) {
    // read 32 bytes at a time;
    uint8_t *buffer;
    uint8_t bytesToRead = min(32, jpglen); // change 32 to 64 for a speedup but may not work with all setups!
    buffer = cam.readPicture(bytesToRead);
    imgFile.write(buffer, bytesToRead);
    if(++wCount >= 64) { // Every 2K, give a little feedback so it doesn't appear locked up
      Serial.print('.');
      wCount = 0;
    }
    //Serial.print("Read ");  Serial.print(bytesToRead, DEC); Serial.println(" bytes");
    jpglen -= bytesToRead;
  }
  imgFile.close();

  time = millis() - time;
  Serial.println("done!");
  Serial.print(time); Serial.println(" ms elapsed");
}

void loop() {
}

 で、これはSDカードに書き込むようになっている。

 私の手持ちの、ArduinoにSDカードをつなぐ手段は、先日から愛用中の「ETHERNET SHIELD 2」に搭載されているSDカードスロットだけだから、とりあえずこれを使う。

 手持ちのSDカードをETHERNET SHIELD 2に挿し、Adafruitのサイトのチュートリアルを参考に回路をブレッドボードに組む。

IMG_3122

 注意する点は2つだ。

  1.  サンプルスケッチをよく読むと、普通のSDカードは10番ピンを使うが、ETHERNET SHIELD 2を使う場合は4番ピンにつながる。なので、サンプルスケッチの中の「#define chipSelect 10」というところを「#define chipSelect 4」に書き換えなければならない。
  2.  メーカーサイトのチュートリアルでは、カメラに添付の10kΩの抵抗をTXの次に直列に二つ入れて、1本目と2本目の間からTXをとり、それをアースしているが、どうもこれだとうまく行かなかった。多分、このチュートリアルは給電が5Vだからだと思う。そこで、アースはそのままに、1本目の手前でTXをとるとうまくいった。
    IMG_3127

 そうやってArduinoをスタートさせると、写真が1枚だけ撮れる。

 下は、そうやって撮った私の顔である。

IMAGE02

 ……むっちゃむさくるしいなあw。

「風立ちぬ」の文語文法

投稿日:

 一昨日、宮崎駿のアニメ「風立ちぬ」を見た。そこから連なって、堀辰雄の同題の代表作「風立ちぬ」を読みつつある。

 宮崎アニメ「風立ちぬ」は、この堀辰雄の代表作の主人公を、零式艦上戦闘機の設計者として知られる堀越二郎氏に差し替え、叙情高く描き上げた傑作である。

 全編をつらぬいて、フランスの詩人、ポール・ヴァレリーの詩の一節が通奏低音のように潜んでいる。「風立ちぬ」のテーマだ。

Le vent se lève, il faut tenter de vivre.
(Paul Valéry – Le Cimetière Marin (The Graveyard by the Sea))

 英語で語を()って書けば

The wind is rising, we must endeavor to live.

…となる。

 堀辰雄はこれを

「風立ちぬ いざ生きめやも」

と訳した。

 名訳である。

 だが、堀辰雄が用いた「風立ち いざ生きめやも」という文語の表現は、読んでもわからない人がほとんどだと思う。まして、こういう言い方・書き方で自分の言いたいことが言え、書ける、という人は今の世の中にほとんどいないだろう。

 私は多少、文語や旧仮名遣いを用いて創作をする。俳句をよく()むのだが、作品はほとんど文語・旧仮名遣いで詠む。口語で作るものは百句読んで一句あるかないかだ。だから、ごく一般の方に比べれば、少しはこの詩句を文語文法の面から評論できる資格もあると自負する。

 そこで僭越ながら、この「」「めやも」について記しておきたい。


○ 風立ちぬ

 まず、「風立ちぬ」の「ぬ」から書いてみよう。

 「風立ちぬ」を装飾なく書けば、普通に動詞の終止形は「風立つ」であり、口語文法とあまり変わらない。では、なぜわざわざ「風立ちぬ」などと書くのか。

 「ぬ」というのは、文法で言うと、「完了および強意の助動詞」である。助動詞というからには、文字通りこれは動詞を助けるものだ。

 助動詞は動詞とくっつかなければ役に立たないから、付属語というものに分類されるが、そのうちでも「活用」、すなわち場合によって形が変わる語を助動詞という。

 「完了の助動詞」という面から見ると、「向こうのほうで勝手に動いてしまっている、自然な動詞(自動詞)につなげて、それが完全に終わったことを言いたいとき」に使う。

 「強意の助動詞」という面から見ると、「非常に強くそれが完了したことを言いたいとき」に使う。口語にはこれがない。もし口語で言うと「非常に」とか「かならず」とか、若者言葉なら「ゼッタイ」とか、そういう言葉で文章を彩りたい場合に、文語ではこれを使うと見ればいいだろう。

 一例を挙げてみよう。

卯の花の匂ふ垣根に
不如帰(ほととぎす)早も()鳴きて
忍音(しのびね)もらす 夏は()

(佐々木信綱「夏は来ぬ」、下線筆者)

 「ああ、本当に、本当に、夏が来たなあ」という、詠み手の感激が、しみじみと伝わってくるではないか。

 つまり、「風立ちぬ」を口語訳する際、「風が吹いた」と普通に終止形にしてしまうと、原文に含まれる、この一文の作り手が感じ取った促されるような風の意思、決然とした、それでいて静かな、しみじみとした感じが出てこないのである。大げさに訳せば、「ああ、なんと、風が吹いた…!」ぐらいの感じが、この簡潔な文語体の一文「風立ちぬ」には含まれている。だからこそ、堀辰雄は「強意の助動詞『ぬ』」を用いたのである。

 さて、この「ぬ」を使うときは、接続する動詞は連用形につなげることになっている。

 連用形につなぐ、ということを述べる前に、活用形について思い出してみよう。文語の活用形を考えるときには、注意すべき点が一つある。

 文語の文法は口語と違って「仮定形」がない。そのかわり、「()然形」という、「既にものごとが終わり決まった形」がある。ここだけが変わる他は、学校で暗記させられた「未然・連用・終止…」というのとほぼ同じだ。

 私の場合は、「ズ・テ・コト・バ」なぞと文語動詞の活用を覚えている。すなわち、「未然・連用・終止・連体・()然・命令」の活用語尾の接続の形だ。この「立つ」でいうと、

活用形 接続
未然 「ズ」に続く 立たズ
連用 「テ」に続く 立ちテ
終止 何にも続かない 立つ
連体 「コト」に続く 立つコト
已然 「バ」に続く 立てバ
命令 命令する 立て


…などとなる。したがって、「ぬ」という助動詞を使うときは、連用形の「立ち」にくっつけて「立ちぬ」、「風立ちぬ」になるのである。

○ 生きめやも

 次に「生きめやも」だ。

 これは、最初に書いておくが、大変難しい。堀辰雄の屈折がこめられて文学的反語が二重にかかり、原文を更に高く翻案したとも言いうる、アンニュイな詩性を持つ超訳だからだ。

 「めやも」は、「め」と「やも」を組み合わせてある。

 「め」は推量の助動詞である。推量の助動詞は、非常に意味の幅が広い。なぜかというと、日本語には動詞の「過去形」や「未来形」があまり強く決められていないからである。そこで、それらのことは助動詞をもって助ける。ところがこうなると、助動詞には過去や未来がごちゃまぜに入り、意味が広くなる。今、教科書どおり推量の助動詞「め」について挙げれば、「推量・意思・適当・勧誘・仮定・婉曲」の意味がある、となる。

 これは蛇足だが、文語体でよく使われるものに「係り受け」というのがある。一種の定型文だ。この「め」は、「~こそ」にかかって受けることが多い。誰でも知っている使い方に「蛍の光」の一節「今こそ別れ」や、「海ゆかば」の一節「大君の 辺にこそ死な」などがある。

 この「め」は、活用形だ。何の活用形かと言うと、基本形「む」を、「已然形」に活用したものだ。この助動詞「む」は、活用は3種類しかなく、終止・連体・已然のみであり、それぞれ「む・む・め」である。

 先に少し記したが、文語体の活用形には「仮定形」の代わりに「已然形」が入る。これは、「ミゼンケイ」でも「キゼンケイ」でもない。「イゼンケイ」と()む。よく見ると漢字が違うことに気づかれるだろう。「己」とも「巳」とも違う、左側のところが、少し突き抜け、なおかつ上にくっつかないところのある「已」という漢字であり、意味も訓みもまったく違う。これは「已(ヤ)む」「已(オワ)る」と訓む。つまり「已然形」は、「しかり、やむ」と言う意味で、ものごとがしかるべく終わった形をあらわす。形は口語の「仮定形」に似ているが、意味が全然異なる。

 已然形のわかりやすい例に、正岡子規の「柿食へば鐘が鳴るなり法隆寺」という俳句の「食へば」がある。口語なら「もし柿をたべたなら…」という仮定形と言うことになるだろうが、柿を食べたことによって鐘が鳴らされるなどという、イタリアン・バールじゃあるまいし、そんなことはありえない。これは、「柿を食べおわった。そうしたら、やおら鐘が鳴った」というような、しかるべくものごとが終わった形、「已然形」なのである。

 つまり、「俺は、生きるのであーる!」という、「すでにしかるべく決まった意志」が、この「生きめ」までのところに入っている、と言ってよい。

 推量の助動詞の役割の幅について考えてみる。普通、推量の助動詞の意味は人称で見分ける。この「生きめ」には主語が省略されているが、もし、言っている本人「私」が主語なら、これは「意志」となり、「いざ」に着目して、誰かに呼びかけているならこれは「適当」「勧誘」になる。

 「適当」というのは、ズサンにテキトーにやる、というテキトー、ではもちろんない。「…するのがもっとも良い!」という意味だ。つまり、「生きるのが一番いい!」という意味にもなる。

 この「生きめ」は、一緒にいる人への呼びかけ、すなわち、「勧誘」にもとれる。

 実際に味わうためには、この三つの意味「意志・適当・勧誘」を同時に文意に認めても面白いのではないか。

 さて、最後に「やも」だ。ここが一番難しい。注意深く検討しなければならない。

「やも」は「反語の終助詞」だ。学校で習う言い方なら「XXすることがあろうか、(いいや、ない!)」というような局面で使う。

 この「やも」を分解すると、「や」と「も」でできている。この、「や」の直前に已然形が来たときは、これは反語になる。「思はめや」で、「思うなんてことがあるだろうか(いいや、ない)」と言う意味になる。

 ここに、さらにそれを強める「詠嘆の助詞『も』」がつく。例えば「恋ひめやも」なら、「恋するだなんて、ああ、そんなことがあるだろうか(いいや、ない)」というぐらい、しみじみとした気持ちが「も」に入る。

 さて、大切なところだ。ここで我々は、細心に堀辰雄の訳を味わって見なければならない。

 なぜと言うに、私が挙げた

「XXすることがあろうか、(いいや、ない!)」

ではなく、

「XXしないことがあろうか、(いいや、ない!)」

の意味にするためには、

「生きざらめやも」

と、もう一度否定しないと、変になるのだ。「生きざらめやも」、つまり「生きないだなんて、そんなことがあるだろうか(いいや、ない)」として、はじめて「さあ、生きましょう」という意味になるからだ。

 「いざ生きめ」までだと、「め」の意味を「勧誘」の助動詞に取れば「さあ、生きましょう」となり、そこに「反語」の終助詞「やも」がつくと、

「さあ、生きましょうなんてことがあるでしょうか、(いいや、ない!)」

 これでは、そのままだと「一緒に死にましょう」ということになってしまう。

 ここが、難しいところだ。

 私たちは、これが「詩」だ、ということに注意を払って鑑賞しなければならない。そして、元の文章、

Le vent se lève, il faut tenter de vivre.
(英語逐語:The wind is rising, we must endeavor to live.)

を、もう一度、味わって見なければならない。

 堀辰雄は、ここに、言外の、さらなる否定を付け加えたのだ。

 この、二重の否定「やも」に、更に堀辰雄が強くつけくわえた言外の否定を補って、むりやり現代語にすれば、次のようになる。

 「(当然、生きるに決まっている僕たちが、あえて、)「さあ、生きましょう」なんてことを言う必要が、はたしてあるでしょうか(いいや、ない!)」

 これが、堀辰雄の採った、原詩の超・日本語訳なのである。

 堀辰雄の「超訳」である、と私が言うゆえんは、ここにある。堀辰雄のように、原文のフランス語をここまで超訳してこそ、やがて死することを予感しながら手に手を取る二人を描いた「風立ちぬ」の全体像にこれが合致する、と私は思う。

 これだけの意味を、この、たった一行のフランスの詩の引用と翻訳に含ませようとすると、これは、口語では不可能なのである。

 堀辰雄が、簡潔に

「風立ちぬ いざ生きめやも」

と以外に、書きようも表現のしようもなかった気持ちが、私にはよくわかる。


 堀辰雄の訳が正しい、ということを言うために、私は、自分の文語文法に関する素養を開陳する必要があった。それもあって、少し詳しく記した。