変数名に全角スペースは使えるのかという話

意外といろんな言語で日本語(というかUnicode全般)を変数名とかに使えるけど、全角スペースとか使えちゃうの?クールじゃね?配列の添え字に使ったらやばくね? という話をしていて、気になってぐぐったが見当たらなかったので試した。 $ perl 日本語.pl Unrecognized character \x{3000}; marked by チッつかえねえーな $ go run utf8.go # command-line-arguments .\utf8.go:7: invalid identifier character U+3000 .\utf8.go:9: invalid identifier character U+3000 どっちも普通の変数名は使えるのに、スペースは使えないとのこと。いや安全でいいんだけど。 どういうことかと思って調べてみる。 The Go Programming Language Specification In The Unicode Standard 6.3, Section 4.5 “General Category” defines a set of character categories. Go treats those characters in category Lu, Ll, Lt, Lm, or Lo as Unicode letters, and those in category Nd as Unicode digits. Goの場合はUnicodeのGeneral categoryというプロパティに従って文字として使えるかが決まっており、Lu, Ll, Lt, Lm, LoならUnicode characterとして使えると。へぇ。たぶんPerlも同じようなことになってるんだろう。 Unicodeの規格書? http://www.unicode.org/versions/Unicode7.0.0/ の4.5 General Category を読むと意味がわかる。文字ごとにgeneral categoryというのがあって、それぞれの文字の使い道が示してあるとのこと。 そこで全角スペース(U+3000)を調べると、 http://unicode.org/cldr/utility/character.jsp?a=3000 と出てきて、Space Separator (Zs)であることがわかる。SeparatorなのでGoでは(そしておそらくだいたいの言語でも)変数名に使えないようになっているんですね。へぇ。ちなみに、Separatorとされているからといって言語上の区切り文字として使えるというわけでもないらしい。不憫である。 ちなみにすべてのUnicodeのプロパティ一覧は扱いやすい感じのテキストで提供されている。便利そうだけど可能なら死ぬまで使いたくないですね?

Read more

WindowsPhone8からWindows8.1 universalにコードをコピペしたらクソはまった話

愚痴です。 UserControlを作ってそのプロパティにデータをbindすることはたくさんあると思いますが、WindowsPhone8用に書いてたプロジェクトからWindows 8.1 Universal (Phone/Windows)のプロジェクトにコードをコピペしたらドはまりした愚痴です。 PropertyMetadataのコンストラクタのオーバーロードが、PhoneとUniversalで違っているっぽいです。MSDNのページには記載が見当たりませんが、PropertyChangedCallback 1引数のみのコンストラクタがUniversalには無くなっています。 Windows Phone 8 project (VS2012)   Windows 8.1 universal project (VS2013)     なんやこれ。 もともとWP8アプリで2 of 3のコンストラクタを使っていたぼくは思いっきりコードをコピペして2時間くらい悩んでいたのですが、1引数で渡していたCallbackがいつのまにかデフォルト値になっていただけだったのでした。せめてPropertyChangedCallbackをintにキャストした段階でException投げてくれよ。。。。 つらかった。 真に型安全な世界を探して生きていきたいです。

Read more

RedmineからGmailを使ってメール通知をしようとして死ぬほどはまった

はい。 環境はUbuntu 14.04 + nginx + unicorn, Redmine 2.5.1、さくらのVPS。 とりあえず普通にconfig/configuration.ymlに設定を書いて管理画面からテストメールを送信してみるのだが、Execution expiredとエラーが出る。時間がかかるのでタイムアウトっぽい。sendmail代替のssmtpを入れて、そこからメールを送ってみるがダメ。 結論から言うと問題が2つあった。 hostnameを後から変えていたので、IPアドレスから逆引きできるものと違っていた うちのプロバイダのDNSサーバでsmtp.gmail.com をIPv6で解決できなかった サーバからsmtp.gmail.comへv6で繋がらなかった (2014/11/09 訂正) つらい。

Read more

天体写真・星景写真をいかにして撮るか [準備編]

天体写真、星景写真、むずかしい問題である。言うまでもないことであるが僕はど素人であるので、「適当な一眼レフを持って写真を撮るためのざっくりとした方法」を書いてみることにする。赤道儀とかそういうのは突然大金が手に入ったら手を出してみたいなどと書いていたが結局赤道儀を買ってしまった。読者諸兄におかれましてはうっかり天体撮影にはまって私の轍を踏むことのないようお気を付けいただきたい。 ともかく赤道儀を使った撮影については僕の中でもまだまとまっていないので、本稿では主に赤道儀を使わないカジュアルな天体撮影について述べる。赤道儀を用いた撮影およびスカイメモSのレビューなどはこちらを参照されたし。

Read more