2019年08月24日

名古屋の地下鉄:問題は駅名なのか?

 先日、所用で名古屋市の中区役所に向かっている途中、ネットでこんなニュースを見かけた:「聞いてみたらツッコミ続出! 名古屋の地下鉄の駅名は「長い」「読めない」「分かりづらい」」(東海テレビニュース)。御器所とか新瑞橋とか、確かに難読だけど、地名なんだからしょうがないでしょ。他の地域の駅名と比べて、特別に難しいとは思わんけどなあ。

 私が名古屋市営地下鉄の駅名で「これはいかがなものか」と思ったのは2点。一つは、「徳重」(桜通線)と「徳重・名古屋芸大」(名鉄犬山線=鶴舞線が乗り入れ)が重複していること。桜通線の徳重駅の方がだいぶ後にできたのに、同じ名前にするってめちゃくちゃケンカ売ってませんか。もう一つは、「総合リハビリセンター」のローマ字表記が "Sogo Rihabiri Center" になっていること。"Sogo" はいいとして、"Rihabiri"(英語でも日本語でもない)、"Center"(ここだけ英語表記)というバラバラ感がなんとも気持ち悪い。この駅看板を見るたびに、恥ずかしくて目を伏せたくなる。(あおなみ線の「ささしまライブ」Sasashima Raibu も同様。)

 それよりも、名古屋の地下鉄の大きな問題点は、通路の案内表示がわかりにくいことだと思う。地下鉄駅に限らず、名古屋の地下街は全般的にそう。「道をよく知らない人が、案内表示を頼りに歩く」ことが、全く想定されていない。

 例えば、中区役所は栄駅の12番出口が最寄りなので、名城線の南改札口から12番出口に向かう。途中に「1〜16番出口」と書かれた階段があるので、そこを昇っていくと、表示がこうなるわけですよ。

20190824-1.jpg

 え、12〜16番はどこいった? と思いますよね。左右を見回しても、どこにも案内がない。実は、この地点で「回れ右」をすると、そちらに「12〜16」という案内があるんです。でも、ここで回れ右するって、かなりのトラップじゃないですか? 大昔のアドベンチャーゲームみたいだ。

 中区役所からの帰りも、なかなかのトラップです。地下鉄の入り口はすぐわかるんだよ。

20190824-2.jpg

 ところが、階段を降りるとこうなる。案内板なし! どちらに行けと?

20190824-3.jpg

 きょろきょろ見回すと、右の遠くの方に案内板を発見。でも、「東山線」としか書いてない。名城線に乗りたいんですけど。

20190824-4.jpg

 …とまあ、万事がこういう具合なわけですよ。駅名を変えるのも結構だけど、こういうところを地道に改善していってもらいたいところです。

タグ:社会
posted by toshinagata at 21:38| 日記

2019年08月22日

「紋切型社会」(武田砂鉄著、新潮文庫)

 ちょっと気分を変えて、久々の読書ネタ。「紋切型社会」(武田砂鉄著、新潮文庫)です。

20190822-1.jpg

 読み進めるのに、とても骨が折れる本だった。もちろん、良い意味で。

 武田砂鉄さんは、今の時代を覆っている「それは言わない約束だよね」というぼんやりした霧を、言葉を使って切り裂こうとしている。だから、どのような言葉も、手垢のついたやり方では使わない。そういう制約を自分に課しながら、文章を書いているように見える。どの文をとっても、「自分の言いたいことは本当にこれなのか?」と何度も自問しながら書いているようだ。書かれている内容の身近さに比べて意外なほど取っつきづらい文章を読み進めているとき、次の一文に出会って、「ああ、この感覚がこの人の文を読むときのカギだな」と感じた。

言葉の迫力を感じるのは、自分に負荷をかけてきていると実感する文章に出会った時だと、それなりの本読みを自負するこちらは切に訴え始める。(「10. なるほど。わかりやすいです。」)

 やさしい(優しい and/or 易しい)言葉がもてはやされ、少しでも骨のある言葉は忌避される。武田さんは、その風潮に抵抗している。抵抗しても、編集者から返ってくるのはこんなリアクションだ。

批評性が比較的強い原稿を出した際に、「面白いんですが、この原稿を読んで、誰がハッピーになるのですか?」と問われたことがある。メールで送られた文面を見ながら目を疑った次に相手を疑い、「原稿とは、ひとまず人をハッピーにしなければならないのでしょうか?」と返すと、「まぁでも、わざわざdisる必要はないですよね〜」と再度返されてしまう。(「20. 誰がハッピーになるのですか?」)

 こういう書き手がウェブメディアで文章を書くのは、さぞかし気苦労の多いことだろう。ウェブメディアでは、読者の反応がダイレクトに返って来やすい。でも、返ってくるのは、一読して即座に返された反応ばかりだ。中身のない「イイネ」や罵詈雑言(しかもそれこそ「紋切型」)にさらされては消耗するばかりだ。

 この本がデビュー作ということだが、武田さんはすでにあちこちのメディアでお見かけするようになっている。ぜひ、「物を考えさせる文章」を世に問い続けて、今の時代を豊かにしてほしいと思う。

posted by toshinagata at 21:32| 日記

2019年08月19日

Mac OS 10.14 で wxWidgets 開発(その2)

 「Mac OS 10.14 で wxWidgets 開発(その1)」のつづき。

4. wxWidgets のビルド (Mac OS 10.6 対応)

 wxWidgets は 3.0.3 を使う。現時点での最新は 3.1.2 だけど、これには Mac OS 10.7 以上が必要なので、10.6 サポートを切らないのなら 3.0 系列が必須となる。

$ cd path/to/wxWidgets-3.0.3
$ mkdir build-osx; cd build-osx
$ ../configure --with-osx_cocoa --with-macosx-version-min=10.6 --with-macosx-sdk=/Developer/SDKs/MacOSX10.6.sdk --disable-shared --enable-monolithic | tee configure.log
$ (date 2>&1; make -j 4 2>&1; date 2>&1) | tee make.log

 本当は --prefix を指定して make install までやっておいた方がいいような気もするんだけど、今のところこれでも動いている。あまり行儀のいい使い方ではないかも。

5. wxWidgets のビルド (mingw-w64, クロスコンパイル)

 --host を指定するだけで、クロスコンパイルできる。

  #  32 bit 版
$ cd path/to/wxWidgets-3.0.3
$ mkdir build-win32; cd build-win32
$ ../configure --host=i686-w64-mingw32 --disable-shared --enable-monolithic | tee configure.log
$ (date 2>&1; make -j 4 2>&1; date 2>&1) | tee make.log
  #  64 bit 版
$ cd path/to/wxWidgets-3.0.3
$ mkdir build-win; cd build-win
$ ../configure --host=x86_64-w64-mingw32 --disable-shared --enable-monolithic | tee configure.log
$ (date 2>&1; make -j 4 2>&1; date 2>&1) | tee make.log

 wxWidgets のコンパイルはすごく時間がかかる、というイメージがあったんだけど、実際には5分ぐらいで終わった。クロスコンパイルだと、サンプルをビルドしないからかな。

 実はこのままだと、libwinpthread-1.dll という dll に依存する実行プログラムができてしまう。これは既知の問題で、基本的にはリンカオプションで回避するのだが、たまにどうしてもうまくいかないことがあるので、dll の名前を変えて強制的に静的リンクさせるようにする。(Cf. [MinGW] Link pthread statically [Ubuntu])

$ for i in i686 x86_64; do 
  cd /usr/local/homebrew/Cellar/mingw-w64/6.0.0_2/toolchain-${i}/${i}-w64-mingw32/lib
  for j in libpthread.dll.a libwinpthread.dll.a; do
    mv $j _${j}
  done
done
6. Xcode のプロジェクトを作る

 wxWidgets のサンプルプログラム "Life" をビルドする Xcode プロジェクトを作ってみる。

 Xcode で新規プロジェクトを作成する。"Cocoa App" を選択する。

20190819-1.png

 Storyboards, Document-Based, Core Data, Unit TEST, UI Tests は全部オフにしておく。

20190819-2.png

 Info.plist 以外のファイルは不要なので、削除してゴミ箱に入れる。

20190819-3.png

 wxWidgets の "demos" の中にある "Life" のファイルを、"wxLife" フォルダ(どこでもよいが)にコピーする。

20190819-4.png

 ビルドに必要なファイルを Xcode のファイルリストに加える。

20190819-5.png

 ビルド設定を変更する。やり方をすぐ忘れてしまうのでメモ:ファイルリストの一番上のプロジェクト名を選択して、"Build Settings" を選ぶと、その下にビルド設定が表示される。

20190819-6.png

  • Architectures : Base SDK : Mac OS X 10.6
  • Deployment : macOS Deployment Target : macOS 10.6
  • Linking : Other Linker Flags : -L$(PROJECT_DIR)/../wxWidgets-3.0.3/build-osx/lib -lwx_osx_cocoau-3.0 -lwx_osx_cocoau_gl-3.0 -lwxregexu-3.0 -lwxtiff-3.0 -lwxjpeg-3.0 -lwxpng-3.0 -lz -lpthread -liconv
    # wxWidgets-3.0.3 への相対パスが正しくなるように注意。
  • Search Paths : Header Search Paths : $(PROJECT_DIR)/../wxWidgets-3.0.3/include $(PROJECT_DIR)/../wxWidgets-3.0.3/build-osx/lib/wx/include/osx_cocoa-unicode-static-3.0
  • Search Paths : Library Search Paths : $(PROJECT_DIR)/../wxWidgets-3.0.3/build-osx/lib
  • Apple Clang - Custom Compiler Flags : Other C Flags : -D__WXMAC__ -D__WXOSX__ -D__WXOSX_COCOA__
  • Apple Clang - Language - C++ : C++ Language Dialect : GNU++98 [-std=gnu++98]
  • Apple Clang - Language - C++ : C++ Standard Library : libstdc++ (GNU C++ standard)
    # C++11, libc++ のままだと Mac OS 10.6 SDK ではビルドできない

 "Build Phase" を選び、"Link Binary with Libraries" を開いて、次の5つのフレームワークを加える:Carbon, Cocoa, AudioToolbox, OpenGL, IOKit

20190819-7.png

 これでビルドに成功する。おー動くやん。

20190819-8.png

 実はこのサンプルには Mac 上で画面が正しく更新されない不具合があります。life.cppLifeCanvas::DrawChanged() の終了直前に下の3行を追加する。

#if __WXMAC__
       Refresh();
#endif

 "Puffer Train" を 1500 世代まで進めたところ。

20190819-9.png

7. MinGW 用の Makefile を作る

 makefile.unx をコピーして makefile.mingw とし、次のように修正。


CXX = $(shell wx-config --cxx)

PROGRAM = life.exe       # .exe を追加

OBJECTS = life.o dialogs.o game.o reader.o liferc.o    # $(PROGRAM).o を life.o とする。liferc.o を追加。

# implementation

.SUFFIXES:	.o .cpp

.cpp.o :
	$(CXX) -c `wx-config --cxxflags` -o $@ $<

all:    $(PROGRAM)

$(PROGRAM):	$(OBJECTS)
	$(CXX) -o $(PROGRAM) -static-libgcc -static-libstdc++ $(OBJECTS) `wx-config --libs`
  #  -static-libgcc -static-libstdc++ を追加

#  次の2行を追加
liferc.o : life.rc
	`wx-config --rescomp` -o $@ $<

clean: 
	rm -f *.o $(PROGRAM)

 wxLife のディレクトリに移動する。次のコマンドで life.exe がビルドできる。PATH を指定しているのは、wx-config を呼び出すため。これは、32 bit 版/64 bit 版の wxWidgets をビルドしたディレクトリを指定する。

$ PATH="../../wxWidgets-3.0.0/build-win32:$PATH" make -f makefile.mingw  # 32 bit
$ PATH="../../wxWidgets-3.0.0/build-win:$PATH" make -f makefile.mingw  # 64 bit

 ちゃんと動いております。

20190819-10.png

8. MinGW 上のビルドを Xcode から実行する

 上の Makefile を Xcode から呼び出すには、「ターゲット」を作ればよい。これもすぐ忘れてしまうのでメモ。ターゲットは下の四角のところに表示されているので、ここのポップアップメニューを開いて、"Add Target..." を選ぶ。

20190819-11.png

 ターゲットのタイプは、"Cross Platform" で "External Build System" を選ぶ。

20190819-12.png

 ターゲットの名前を wxLife_win32 などとする。

20190819-13.png

 "Info" で作業ディレクトリとコマンドラインを指定する。コマンドは /usr/bin/env として、PATH を設定してから /usr/bin/make を呼び出すようにする。

  • Build Tool: /usr/bin/env
  • Arguments: PATH=$(PROJECT_DIR)/../wxWidgets-3.0.3/build-win32 /usr/bin/make \-f makefile.mingw
  • Directory: $(PROJECT_DIR)/wxLife

20190819-14.png

 command-B (Build) で 32 bit 版がビルドされます。64 bit 版をビルドするには、もう1つ別のターゲットを作って、PATH の設定を build-win にすればよい。

タグ:Mac wxWidgets
posted by toshinagata at 00:35| 日記
email.png
Powered by さくらのブログ