奨学金延滞率と大学入試難易度

最近、朝日新聞の記事などで、日本学生支援機構(JASSO)の「奨学金」を返済できない元大学生の話が頻繁に取り上げられるようになりました。JASSO の「奨学金」は、返還義務のある教育ローンが多くを占めるため、卒業後に十分な収入がないと返済することができなくなる場合があるためです。

日本学生支援機構(JASSO)は、2017 年に大学別の奨学金延滞率等の情報を開示しました。機構や国の狙う真意は分かりませんが、少なくとも彼らは回収率を上げたいのは間違いありません。情報を出すことによって「駄目な大学」を世に知らしめたいとか、借り手自体の数を抑制したいとか、そういうことでしょう。

この公開情報は https://www.sas.jasso.go.jp/ac/HenkanJohoServlet から大学ごとに取得することができます。何百もある大学ごとに一つずつ見るのは大変なため、Python で自動化して全部落としてきました。必要な人は Google Spreadsheet から閲覧してください。
https://docs.google.com/spreadsheets/d/1YrBLC5du_S1lMDIAbTTRed_YPFqKPFSUsSUM3j3qTGI/edit?usp=sharing

奨学金 借りるとき返すときに読む本

奨学金 借りるとき返すときに読む本

ブラック奨学金 (文春新書)

ブラック奨学金 (文春新書)

以前に東洋経済がこのデータを独自集計し、延滞率のランキングなるものを記事にしていました。その上位校は僕の知らない大学が多く占めており、また有名大学(=難関大学)は比較的下位に見られたため、奨学金の延滞率と大学入学時点での学力には相関があるのだろうという推測ができました。

ただし、これはあくまで相関であり、学力が低いと返済能力や収入が低くなるという因果関係を必ずしも示しません。例えば次のようなことも考えられます。

  • 難関大学に進学する学生は家庭が相対的に高所得な場合が多く、親に頼れば返済に困らないのかもしれない
  • 上位校は国公立大学の占める割合が高く、授業料が低いために借金の額が少なくて済んでいるのかもしれない
  • 大学入学時点で制度の仕組みを把握しておらず、卒業後の返済能力を超えて借りすぎたのかもしれない
  • 督促状などの文書に対する読解能力の違い、またその深刻さの受け止め具合が、学力に関係するのかもしれない

ここではこのような交絡の議論には踏み込まず、公開されている延滞率([C]/[A])と、ベネッセの公開している各大学の入試偏差値の相関のみを見てみましょう。偏差値が 55 を下回るあたりで、綺麗に奨学金の延滞率(過去 5 年間の貸与終了者数のうち、延滞が 3 ヶ月以上の者の割合)が上昇して行くのが分かります。ちなみに、偏差値 69 のところで延滞率の高い大学は、国際教養大学です。

f:id:oxon:20180218010019p:plain

縦軸の誤差棒は二項分布の誤差(標準偏差)、横軸は最も高い偏差値の学部・学科と、最も低いものの範囲を表しています。

奨学金 借りるとき返すときに読む本

奨学金 借りるとき返すときに読む本

(2018/02/19 追記)
こちらの 2/17 の記事に、ちょうど至誠館大学の学長の声が掲載されていました。
www.news-postseven.com

「本学は児童養護施設出身の学生を積極的に受け入れており、延滞率が高いのは、卒業後も実家から通勤できない、奨学金の返済に困っても親に一時的な支援も頼めないというケースが多いのではないかと考えている。しかし、日本学生支援機構に延滞者の内訳を尋ねても回答を拒否されるため、対策を立てるのが難しい」

との説明があり、そのような社会的、経済的な困窮者に対して進学の道を開くこと、経済的な支援をすることは、国としても、僕のような大学教員としても守り続けなくてはいけません。

大学入試時点で学力が低いものに金を貸すなという意見もあるでしょうが、18 歳の時点で学力が高いということは、それまでに十分な教育を受けられる環境にあったということです。それは本人のやる気や潜在能力を必ずしも反映しません。大学に限らず、より教育機会を均等に受けられるような努力が継続的に必要だと思います。

スーパーグローバル大学 (笑) は「アクセス」が和製英語だと覚えてほしい

そもそも、文字数が同じ 4 文字で「交通案内」と書けるので、意味も知らんのにカタカナ語を得意げに使うな、馬鹿っ!ついでに「スーパーグローバル」を「top global」と翻訳するな、逃げるな、馬鹿っ!

日本人の英語 (岩波新書)

日本人の英語 (岩波新書)

間違ってる大学様一覧
雑感

驚くことに、全ての大学が「アクセス」や「access」を使っています。これっていつから市民権を得たんでしょうか。なんで「交通案内」じゃ駄目なんですかね。

先日、自分とこの研究所もウェブサイトが更新されたのですが、内部ページに行こうと思って「アクセス」を押したら地図が出てきて、一瞬意味が分かりませんでした。いい迷惑だからこういうカタカナ語はやめてほしいものです。

国際基督教大学とか国際大学とか東京外国語大学とか国際教養大学でも「アクセス」と「access」が使われているのは、いったいどうしたことでしょうか。指摘できる中の人が一切いないんでしょうか。

「アクセス」というカタカナ語を使う場合、本来の意味として使うのであれば、例えば以下の例文であれば問題ないと思います。

  • 「正面玄関に鍵がかかっていますが、先生の居室にはどのようにアクセスすれば良いでしょうか」
  • 「内部限定ページにアクセスできません」
  • 「海に面したホテルなので、砂浜へのアクセスが簡単だ」

試しに「access map」で Google の画像検索でもしてみてください。日本語ページばっかり出てきますので。

文科省が馬鹿みたいにカタカナ語を濫用するもんだから、大学まで馬鹿になっていくのは勘弁して欲しい。というか、業務委託されたウェブサイト作成業者がちゃんと日本語使ってくれ。

ハゲタカメディアのギズモード・ジャパン、ハゲタカ出版社を嗤う

他人が手間ひまかけて書いた記事に下手な翻訳や改変を加えてお金を稼いでいることで有名なギズモード・ジャパン。彼らが元ネタを尊重せず、どのように自分の手柄にしてしまうのか、良い例に巡りあったので記録しておきます。

今回の記事はこちら。彼らが「ハゲタカ出版社」と呼ぶ、質の低い論文の量産に加担する信用度の低い学術雑誌出版社と、そこに掲載された論文数の日本の大学別のデータに対する批判記事です。
www.gizmodo.jp

元ネタをちゃんと紹介して、誰が調査したものなのか、誰が先に紹介した話なのか、そのあたりを明らかにするのであれば、別にギズモード・ジャパンのようなメディアがあっても良いと思います。ただ、他人の作業を横取りして自分たちの金もうけにするのは、情報発信する媒体としてはまとめブログ並です。

このギズモードの記事の元ネタは Toshikazu Wada さんが Facebook 上に投稿されたデータ解析です。
www.facebook.com

この記事が srad.jp で取り上げられ、はてなブックマークでも 200 ブクマ以上集めました。
science.srad.jp

ただ、Wada さんの調査に一部不備があると srad.jp やはてなブックマークのコメントで指摘があり、それを再解析し直した記事を先日僕が書きました。
oxon.hatenablog.com

ギズモードの出しているグラフは恐らく彼らが自分で作ったものですが、元の数値は僕が集計したものです。しかし彼らは

じゃあ、日本国内の大学で一番寄稿数の多い所はどこだろう? とデータを抽出してランキングにした結果がこちら。

と書くのみで、「データを抽出してランキングにした」の主語がなんであるかは隠してしまいます。

この主語はもちろん僕で、また最初にそのアイデアを思いついたのは Wada さんで、僕がそれをやろうと思った動機は srad.jp の記事です。当然、僕の元記事にはちゃんとそのことが書いてあります。

しかしギズモードの記事には、↓こんなふうに一番最後にちょっとだけ僕の記事に触れるのみです。なんでしょうね、ギズモード・ジャパンというか高橋ミレイ氏はいったい。

source: Beall’s List, 宇宙線実験の覚え書き

(高橋ミレイ)

twitter.com

www.amazon.co.jp

「まともではない論文誌」への投稿数が最多の日本の大学は?

srad.jp の記事で研究者としてもデータ解析としても気になるものがあったので、ちょっと久々に blog を書きます。science.srad.jp
これの元ネタは、Facebook にある Toshikazu Wada さんという方のデータ解析のようです。www.facebook.com
SCIRP という怪しい出版社の論文データベースを解析し、どの大学からの投稿が多いかを調べたものです。面白いことを思いつかれますね。

論点 1

「まともではない論文誌」への投稿数は、日本国内だと本当に東大が圧倒しているのか。記事中では、「東京大学所属の著者が投稿した論文数が二位の九州大学の利用数117件に大差をつけて364件という圧倒的な結果」とあったのですが、出身大学が悪く言われるのも嫌なので数えなおしてみましょう。

記事のコメントと、はてなブックマークのコメントでは、SCIRP の検索機能が駄目なせいで Tokyo にある他の University も "University of Tokyo" として引っかかっているようだとのこと。

結論 1

学名 論文数
東京大学 107
九州大学 99
東北大学 94
北海道大学 90
新潟大学 84
京都大学 78
金沢大学 77
日本大学 72
大阪大学 71
名古屋大学 69
広島大学 67
神戸大学 61
筑波大学 52
慶応大学 52
熊本大学 50
千葉大学 48
東京工業大学 40
東京理科大学 33
早稲田大学 33

※1 大学病院もその大学に含めた。
※2 数件の計数ミスはありうる。

「University of Tokyo」「The University of Tokyo」もしくはそれに類いする名称を東大として数えると、107 件で九州大学と同じくらいでした。総研究者数が東大のほうが 5 倍くらいは多いのではないかと思うので、そこは差っ引いて考える必要があります。むしろ日大とか日大とか日大とかが上位に食い込んでいるのが、あれですね。

僕はこっそり早稲田が上位に食い込むことを期待していたのですが、平凡な結果に終わりました。

論点 2

海外の有名大学に比べて、日本は圧倒的に SCIRP への投稿数が多いのではないか。でも、ちゃんと元記事は検索できてるの?

結論 2

学名 論文数
米 MIT 16
ケンブリッジ大学 23
英 オックスフォード 15
米 ハーバード 40
スタンフォード 28
中 精華大学 57

※3 これもうまく計数できていない可能性あり。

英米の研究者は東大の倍くらいはいると思うので (具体的に知りませんが、肌感覚)、それも考慮する必要があります。ハーバードが多めなのは、医系の研究者のせいと思われます。

論点 3

日本は他国と比べてどの程度なのか。これは元記事では触れられていない。

結論 3

国名 論文数 人口 (億人)
米国 5776 3.2
中国 5193 13.6
日本 3160 1.3
インド 3108 12.5
ブラジル 1583 2.0
ナイジェリア 1417 1.7
エジプト 1231 0.8
イラン 1139 0.8
カナダ 1093 0.4
イタリア 1095 0.6
イギリス 874 0.6
フランス 867 0.7
ドイツ 863 0.8
ロシア 853 1.4
韓国 655 0.5

※4 同じ国でも異なる表記方法で集計されたので計数ミスはありうるが、ほとんど大勢に影響なし。

これ、人口がおよそ研究者数に比例すると仮定すると、研究者数と論文数の比で、我が日本は圧倒的じゃないですか。アメリカの 1.3 倍、中国の 6.4 倍、インドの 9.8 倍、韓国の 1.9 倍。もちろん、中国やインドの研究者数は人口に対して少ないと思いますけど。

データ解析

通し番号を 1 から 61753 まで入れると SCIRP で発行された論文の情報が得られるので、HTML を全部落としてきて、そのうち 42755 個の有効な論文の著者情報を自動で調べました。1 つの論文で同じ所属機関の著者が複数人いる場合、その所属機関や国の出した論文は 1 つと見なして計算しています。www.scirp.org

適当に複数の論文で HTML を読んでいただくと分かるのですが、所属機関の名称や住所、国名の記載方法が統一されていないため、うまく解析できない論文は全て飛ばしています。基本的には「所属, 都市名, 国名」の順でカンマ区切りを期待しているのですが、それに則っていない記載方法の論文は誤って処理している可能性があります。

得られたデータはここに置いてあります。
https://docs.google.com/spreadsheets/d/1lW4cNAuuw-58bDtXhDabAamNPQQ4onBl7jAhX2lKq8o/edit?usp=sharing

感想

うちの分野 (宇宙、天文、素粒子物理学系) でこんな出版社見たことないし、日本の大学でも医療系の研究者に SCIRP は人気なように見えます。聞いたことない雑誌の研究業績が書かれていても、うちの分野では突っ込みが入るはずです。

海外学振を含む、研究者の長期海外出張中の納税義務

素人情報ですが、素人なりにイギリスとドイツの税理士に相談した内容に基づいています。2015 年 2 月時点での情報です。税に関する決めごとは更新頻度が高いので、最新情報は各自で調べて下さい。また「研究者」と言っても、国家公務員の場合は扱いが異なります。間違いのご指摘大歓迎です。

理科系の作文技術 (中公新書 (624))

理科系の作文技術 (中公新書 (624))

レポートの組み立て方 (ちくま学芸文庫)

レポートの組み立て方 (ちくま学芸文庫)

日本から支払われる出張手当が所得税の課税対象外と勘違いしていませんか?

日本の所得税法上、出張手当は所得税の課税対象外です。従って日本の研究機関に在席する研究者が国内もしくは海外出張を行う場合、支払われる宿泊費や日当に所得税はかかりません。これは出張経験者であれば経験的に知っていると思いますが、大学から振り込まれる日当に源泉徴収はありませんし、確定申告をする必要もありません。

ただし、これは税法上、日本の居住者扱いである場合に限ります。日本の居住者であるかどうかは年間 1 年以上引き続き日本国内に住むかどうか、住所を有するかによって判定されます。したがって、出張期間が 1 年間を超える場合は住民票を残していたとしても日本で非居住者扱いとなり、滞在国での納税義務が生じると言えます。

ただし、居住者の判定方法は国によって異なり、例えばイギリスやドイツでは183 日以上 (365 日の半分) をどこで生活の拠点にしているかによって居住者かどうかが決定されます。したがって、滞在国によっては日本と滞在国の双方で居住者扱いされる場合が存在し、このような時にどちらの国で課税されるかは以下に述べる租税条約内の取り決めによります。

例えばもし日本の家を引き払ったり住民票を抜いた状態でイギリスの研究機関へ海外出張で年間半年以上滞在する場合や、海外学振の特別研究員として海外の研究機関に 2 年間丸々在席する場合などは、その人は滞在国で税法上の居住者 (英語だと resident であり、citizen とは異なる) になり、滞在国での所得税納税義務が発生します。厳密には滞在国によって法律が異なるのですが、日本人研究者が研究目的で滞在する多くの国と日本政府は条約を結んでいます。日米租税条約、日英租税条約、日独租税条約といったものがそれです。これら租税条約は二国間の両方で課税されるという憂き目に遭うのを回避するのがひとつの目的であり、またより重要なのは両国ともに納税を回避され「課税の空白」が生じるのを防ぐことです。

この居住国の決定ですが、「恒久的住居」、「利害関係の中心的場所」、「常用の住居」そして「国籍」の順に考えて、どちらの国の「居住者」となるかを決めます。したがって日本に持ち家や借家があって住民票もそのままであれば、1 年以内の出張の場合は日本で納税義務が発生すると思われます。

さて、出張手当は日本の税制上課税対象外と書きましたが、租税条約の締結相手国では課税対象となる場合がほとんどです。少なくとも英独では課税対象となっています (ただし、ホテル代など出張にかかる費用として支払った額は控除される)。したがって日本以外の国の居住者となる場合は、日本の大学や日本学術振興会から出張手当を受け取っていても、それは滞在国で課税対象になります。またもちろん、滞在国で納税義務がある場合は日本での給与にも課税されます。

「日本学術振興会 海外特別研究員 遵守事項及び諸手続の手引」という冊子には実際、以下の注意書きがあります。

(3)滞在費・研究活動費への課税について
海外特別研究員は,派遣期間中は日本国内の非居住者となること,ならびに滞在費・研究活動費は旅費として支給されることから,日本国内では課税の対象外となります。ただし,派遣国に おいて課税される場合があるため,各自において確認し、必要な手続を行うようにしてください。

「各自において確認し」と簡単に書かれていますが、これは結構骨の折れる作業です。民間企業の駐在員と違い、滞在先での確定申告まで大学や日本学術振興会は面倒を見てくれません。現地で税法をちゃんと自己調査するか、現地の税理士に相談する必要があります。

日本の給料で源泉徴収されている場合

日本の研究機関から長期出張で海外に滞在する場合、相手国の居住者扱いなっているにも関わらず、日本の給料から所得税源泉徴収されている場合があると思います。この日本の所得税は、支払う必要のない税金です。代わりに滞在国で税金を納めて下さい。「日本で所得税が天引きされているから滞在国では払わなくていいんじゃないの?」と思うかもしれませんが、支払い義務のない日本の税金を納め、さらに滞在国で脱税をしているだけです。

日本の居住者扱いでないのに所得税が天引きされた場合、税務署に後日還付申請をすることができます。もし天引きされないようにしたい場合は、源泉徴収義務を免除することができるので、日本の所属研究機関に相談しましょう。日本学術振興会の特別研究員 PD が長期出張する場合も同様です。

二年間の滞在であれば、所得税の支払い義務がないって本当?

嘘です。恐らく、古い租税条約に基づいた古い情報がネットに残っているだけです。日米租税条約や日英租税条約では、「教授条項」と呼ばれる特別な規定がありました。この規定では、二年間を超えない期間、研究や教育を目的とした滞在者は租税が免除されるという我々には嬉しいものでした。しかしこの「教授条項」は現在の多くの租税条約で消滅しており、日英、日独、日瑞などの租税条約から取り除かれ、日米租税条約では条件が厳しくなりました (さらに近日中には教授条項の完全削除された新条約が批准される予定です) ので、相手国の居住者となるような滞在をする人は課税対象です。「教授条項」なる研究者のみが喜ぶ仕組みはもう存在しないと思ってください。我々は通常の労働者と税法上も区別ありません。詳しくは、「租税条約 教授条項」などで検索してください。

欧米の税金は高い?

海外に住むと日本人が感じることのひとつに、所得税や消費税 (もしくは付加価値税) が高いというのが挙げられます。しかしイギリスでは所得税の中に保険料などが含まれています。一方、ドイツのように国によっては日本の住民税に相当するものが存在しなかったりする場合もあるので、所得税率だけでは日本の税額と比較できません。そのため、納税額がどれくらいなのかを出国前にちゃんと把握しておかないと、可処分所得の計算が色々と狂うことになります。

例えば海外学振でイギリスに派遣される場合、年間の出張手当は 525 万 6000 円 (約 £28,500、2015/2/24 現在)です。これを勘違いして所得税がかからないと思っていると、学振 PD よりは給料が良いように感じますが、決してそうではありません。日本であれば控除が約 100 万円、年金や保険で年間 40 万円程度がさらに控除だとして、年間所得税は 35 万円くらいです。

一方で、イギリスだと £10,000 のみが控除で、いきなり税率が 20% かかるので、68 万円くらいが税金になります。ただし、保険や年金はここに含まれるので、実質日本と同じ程度の額でしょうか。ただ日本と変わらないと言っても、海外学振採用時にこの税額もちゃんと計算に入れておかないと、大幅に計算が狂うでしょう。現地での家財道具の調達、引越しにかかる自己負担費用など考えると、海外学振の給与は決して高くはないのです。

社会保障協定

租税条約と別に、社会保障 (医療保険や年金) に関する二国間の取り決めというのもあります。例えば日英社会保障協定であったり、日独社会保障協定だったりです。これは社会保険料の二重払いを回避するための仕組みで、基本的には納税者を守るためのものだと思います。

例えば日本の国立大学で雇用されているのに長期海外出張する場合、出張者は日本の給料から文科省共済にかかる金額を天引きされているはずです。これは医療保険 (短期共済) と年金 (長期共済) に分かれますが、このうち後者の支払いを滞在国で免除することができます。これを現地での確定申告のときに適用するには、原則として出張開始前に、「日独社会保障協定の適用証明書」などを共済組合から発行してもらう必要があります。

半年以上の長期出張をする人へ

もし滞在国の居住者扱いとなり納税義務が相手国で発生する可能性がある場合、まずは所属する日本の研究機関の事務や、日本の税務署の担当者に相談してみましょう。この時点では相談費用が発生しませんし、日本の税務署は非常に丁寧に答えてくれます。ただし、税務署が滞在国との租税条約や滞在国の税制をちゃんと理解しているとは限りません。

もし滞在国で納税義務が発生する (可能性が高い) ようであれば、現地の税理士にちゃんと相談して納税をちゃんとしましょう。イギリスの某税理士事務所は、個人の確定申告の費用は税込 £480 でした。ドイツの某事務所は税抜き €400 でした。ただしこれは確定申告にかかる費用であり、初回相談は無料でした (納税義務があるかどうかの判定は、この初回相談で解決できると思います)。まともに確定申告 (tax return) をやろうと思うと、それだけで丸一週間は時間を潰します。そして時間を潰しても素人では自分の結論に確信が持てません。税理士に相談したほうが、時間的にも精神的にも得だと思います。

控除

一口に税金がかかると言っても、税率が国ごとで異なるのはもちろんのこと、控除対象がどれだけ存在するか、特に出張中は何が経費として認定されるのかというのは国ごとによって違います。例えばイギリスの場合、日本と違って扶養控除はありません。また海外出張で必要となった引越し代金などは控除の対象となるので、例えば税率 20% で引越し代金が 10 万円かかったとしたら、2 万円の所得税は支払う必要がないことになります。

これら計算は複雑です。具体的にイギリスやドイツへの出張でどう計算したかは、そのうち書こうと思います。

Eclipse CDT から clang-format を使って書式整形をしよう

そろそろ物理屋さんも vim とか Emacs でソフト開発するのやめませんか? Eclipse とかにしませんか? ということで、ソフトをバリバリ書いてる人は Eclipse CDT (宇宙・素粒子系の物理屋Java 使わない) をご使用中のことと思います。

LLVM/Clang実践活用ハンドブック

LLVM/Clang実践活用ハンドブック

Eclipse4.4 完全攻略 (完全攻略シリーズ)

Eclipse4.4 完全攻略 (完全攻略シリーズ)

さて、Eclipse CDT など IDE の便利な機能にコードの自動整形 (formatter) があります。自分も最近は複数人でソフトの共同開発をすることが多くなってきたので、Google の coding style で統一しようという話になったのですが、意図的に特殊な整形を自分でしていた箇所まで整形し直してくれちゃうものだから、これは不便でしょうがない。

例えば、以下のコードは意図的にスペースを多用しています。

CI[ 5] = D[13] ^ D[12] ^ D[11] ^ D[ 9] ^ D[ 8] ^ D[ 5] ^ D[ 4] ^ D[ 0] ^
         C[ 0] ^ C[ 4] ^ C[ 5] ^ C[ 8] ^ C[ 9] ^ C[11] ^ C[12] ^ C[13];
CI[ 6] = D[14] ^ D[13] ^ D[12] ^ D[10] ^ D[ 9] ^ D[ 6] ^ D[ 5] ^ D[ 1] ^
         C[ 1] ^ C[ 5] ^ C[ 6] ^ C[ 9] ^ C[10] ^ C[12] ^ C[13] ^ C[14];
if (asic == 0) {
  WriteRegisterPartially(0x4D, channel,      channel,      enable ? 0x1 : 0x0);
} else if (asic == 1) {
  WriteRegisterPartially(0x4D, channel + 16, channel + 16, enable ? 0x1 : 0x0);
} else if (asic == 2) {
  WriteRegisterPartially(0x4E, channel,      channel,      enable ? 0x1 : 0x0);
} else if (asic == 3) {
  WriteRegisterPartially(0x4E, channel + 16, channel + 16, enable ? 0x1 : 0x0);
}

これに Eclipse CDT で自動整形をかけるとどうなるかというと、Google スタイルの場合はそれぞれ次のようになります。読めやしませんね。

CI[5] = D[13] ^ D[12] ^ D[11] ^ D[9] ^ D[8] ^ D[5] ^ D[4] ^ D[0] ^ C[0]
    ^ C[4] ^ C[5] ^ C[8] ^ C[9] ^ C[11] ^ C[12] ^ C[13];
CI[6] = D[14] ^ D[13] ^ D[12] ^ D[10] ^ D[9] ^ D[6] ^ D[5] ^ D[1] ^ C[1]
    ^ C[5] ^ C[6] ^ C[9] ^ C[10] ^ C[12] ^ C[13] ^ C[14];
if (asic == 0) {
  WriteRegisterPartially(0x4D, channel, channel, enable ? 0x1 : 0x0);
} else if (asic == 1) {
  WriteRegisterPartially(0x4D, channel + 16, channel + 16,
      enable ? 0x1 : 0x0);
} else if (asic == 2) {
  WriteRegisterPartially(0x4E, channel, channel, enable ? 0x1 : 0x0);
} else if (asic == 3) {
  WriteRegisterPartially(0x4E, channel + 16, channel + 16,
      enable ? 0x1 : 0x0);
}

実は EclipseJava を書く場合には次の記法でコードを「保護」することができます。off/on で囲まれた箇所は、自動整形が無視されます。

// @formatter:off
System.out.println("Hello World!");
// @formatter:on

しかし Eclipse CDT ではこの機能が実装されていないため (Java に比べて色々と貧弱)、Eclipse の標準機能だけでは C++ のコードに自動整形をかけると悲しいことになります。さて、じゃあどうやって自分の手動整形を保護するかというと、外部の formatter と Eclipse plugin を使って解決します。

clang-format を入れる

clang-format とは、その名の通り Clang に付属する formatter です。コマンドラインから動作し、C/C++/ObjC のファイルを整形することができます。ただし、OS XXcode を入れても付属してきません。以下の方法で自分で build します。ここでは、ver 3.7 以降 (近日公開される予定) を入れます (ここらへん参照)。バイナリの配布されている 3.5 では、以下の説明の機能は動作しません。

$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$ cd llvm/tools
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
$ cd ../..
$ cd llvm/projects
$ svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
$ cd ../..
$ ./configure  --enable-optimized
$ make -j 8
$ sudo mv Release+Asserts/bin/clang-format /usr/local/bin/

これで、/usr/local/bin に clang-format が入ります。他のものは一切必要ありません。OS X に入っている標準の Clang が 3.5 でも、clang-format は単体で動作するので、Clang 自体を汚す危険もありません。

CppStyle を入れる

次に、clang-format を Eclipse で使うための plugin を導入します。https://github.com/wangzw/cppstyle の説明の通りですが、以下のようにします。

$ sudo curl -L "http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py" -o /usr/local/bin/cpplint.py
$ sudo chmod a+x /usr/bin/cpplint.py

次に http://wangzw.github.io/CppStyle/updateEclipse の Help → Install New Software で追加したあと Eclipse を再起動し、Preference → C/C++ → Code Style → Formatter から Code Formatter を CppStyle (clang-format) にします。そのままにしておくと、Google スタイルが適用されます。

さて、clang-format では手動で整形した箇所を保護する機能があります。以下のようなコメントを追加することで、off/on の間に挟まれた領域は,clang-format の整形が適用されません。めでたしめでたし。繰り返しますが、Clang 3.5 の clang-format では動作しません。

if (asic == 0) {  // clang-format off
  WriteRegisterPartially(0x4D, channel,      channel,      enable ? 0x1 : 0x0);
} else if (asic == 1) {
  WriteRegisterPartially(0x4D, channel + 16, channel + 16, enable ? 0x1 : 0x0);
} else if (asic == 2) {
  WriteRegisterPartially(0x4E, channel,      channel,      enable ? 0x1 : 0x0);
} else if (asic == 3) {
  WriteRegisterPartially(0x4E, channel + 16, channel + 16, enable ? 0x1 : 0x0);
} else { // clang-format on

SOCKS プロキシを使って学内 (社内) 限定ページに接続する

学内ネットワークに接続している場合にだけ閲覧可能な、学内限定ページというものが世の中には存在します。大学に限らず、民間企業でもそういうものが存在するでしょう。名古屋大学の場合は全学の事務連絡や給与明細の閲覧がこれに該当し、自宅で仕事しているとき、出張中のときに非常に不便です。また学外からだと論文の閲覧もできません。

解決方法は以下のようにいくつか存在しますが、今回は SOCKS プロキシを使う方法をまとめておきます。知っている人には当たり前の情報かもしれませんが、複数の同業者がこれを知りませんでした。

  1. VPN を使う。ただし、名古屋大学は全学の VPN を用意してくれていないので駄目。
  2. SSH で学内のサーバに接続し、Firefox などを X で飛ばす。ただし、海外出張中の場合 (=遅延時間が長い) や回線が細い場合には X を飛ばすのは速度面から現実的ではない。
  3. VNC で画面を飛ばす。海外出張中の場合は、X を飛ばすよりは体感速度が圧倒的に優れるが、それでもまだ遅く、firewall の設定等も必要。
  4. VNC と同様だけど、Mac の場合は Back to My Mac (どこでも My Mac) を使って学内の Mac に接続して画面を飛ばす。Firewall の設定を気にしなくて良い場合が多いものの、Back to My Mac を使えない外部環境があったり (例えばレスター大学の eduroam)、接続先が反応しない場合がある。
  5. SOCKS プロキシを使う。簡単で早い。

用意するもの。

  • OS X の動いている Mac (別に Windows でも Linux でも同様にやれるので、"SOCKS Linux" などでググってください)
  • 学内に存在する SSH サーバ

さて、やることは簡単で、学内サーバに外から SSH で入れるものに接続します。ただし、-D という option をつけてやることで、SOCKS を使った port forwarding が可能になります。

$ ssh -D 1080 MY_ACCOUNT@foo.bar.ac.jp

  このあと、Mac の System Preferences から Network → Advanced… → Proxies で SOCKS Proxy を入にし、SOCKS Proxy Server の欄を 127.0.0.1:1080 にしておきましょう。

以上の作業で、SSH の接続している間は学内からネット接続をしているように見えるはずです。

ただし、SSH の接続が切れたのに SOCKS Proxy が動作したままだと、ネット接続ができなくなります。また GlimmerBlocker を使って広告ブロックをしている場合は Web Proxy (HTTP) が入になっているため、SOCKS とぶつかってしまうようです。そのため、SOCKS Proxy を入にするときは Web Proxy (HTTP) を切に、またその逆のときは入にという作業を手でやらなくてはいけないため面倒です。

そこで、OS X の networksetup コマンド使って shell から操作しましょう。

Automatic SOCKS proxy setup through SSH connection ...

自分の場合は Web Proxy (HTTP) の切り替えも自動でやりたいので、少し改造した script を使っています。

gist16c55d8b451b431848c0

この networksetup コマンドは /usr/sbin にあって、sudo じゃないと走りません。いちいちパスワードを聞かれるのも面倒なので、必要な場合は visudo で /usr/sbin/networksetup に実行権限を与えておきましょう。

$ sudo visudo 

として、

# For SOCKS proxy

YOUR_ACCOUNT ALL=(root) NOPASSWD: /usr/sbin/networksetup

とでも追加しておきましょう。