Heppoko Binbo Yarou no Newbie Nikki

旧題: へっぽこびんぼう野郎のnewbie日記 #vZkt8fc6J

たわむれにC言語のポインタで遊んでみた

はじめに

C言語のポインタって、違う意味の操作なのに * を使いまわしてるからわかりにくくなっているんだと思う。

あと「ポインタ」っていう名称もよくない気がする。ポインタっていうと普通矢印を思い浮かべるので、「ポインタに代入」っていうと「矢印に代入」という意味っぽくなって混乱する。メモリアドレス型って呼んでおけば「このメモリアドレス型変数xの指し示す先(ポインタ)は2」みたいに言えたのに…って思う。

なので、人に教えるときに無理に「ポインタ」という言葉と結びつけて教えると矢印地獄にハマる。

↓こう書ければいいのにって思った。(たぶん世界一わかりやすい)

#include <stdio.h>

int main() {
    int k = 1;
    int{pointer} m = (address)k;
    int{pointer}{pointer} e = (address)m;
    printf("%d\n", (value)m);
    (value)m = 4;
    printf("%d\n", (value)m);
    return 0;
}

ちなみに↓と等価

#include <stdio.h>

int main() {
    int k = 1;
    int* m = &k;
    int** e = &m;
    printf("%d", *m);
    *m = 4;
    printf("%d", *m);
    return 0;
}

個人的に int *x = 4 みたいに、xのすぐ左にアスタリスクつけてる慣習も嫌だなーって思う。

int* x の方がいいと思う。だって int *x だと *x っていう変数っぽく見える。 int* の方が重要視されるべきだから、 int* x のほうがよくない?

ポインタとして使うときも x = &y みたいに使うじゃん。まあ今更変えようがないだろうしどっちでもいいけど……

あそんでみた

#include <stdio.h>

void change(int* b, int v) {
    *b = v;
}

int main () {
    // 普通に変数代入
    int a = 1;

    // ポインタを宣言するアスタリスク
    int* x;
    // アスタリスクは↓こうつけてもかまわない。意味はおなじ。こちらの方が慣習的に多いイメージ
    int *c;
    // ポインタとして使うときはアスタリスクをつけない
    c = x;

    int* y = &a;  // &によって、変数aのアドレスを取得する
    x = y;

    printf("-------------- ポインタを表示してみる ------------\n");
    printf("&aの値: %p\n", &a);
    printf("yの値: %p\n", y);
    printf("xの値: %p\n", x);
    printf("cの値: %p\n", c);  // ポインタ変数xを宣言したときの初期化してない値が入ったままなのでここだけ値が違う。

    printf("-------------- ポインタが指す変数の値を取得してみる。このアスタリスクとポインタ宣言するときのアスタリスクは意味が異なるので混同しないように注意。 ------------\n");
    printf("*yの値: %d\n", *y);

    printf("-------------- ポインタのポインタ ------------\n");
    // ポインタへのポインタを宣言する
    int** z = &y;  // yはすでにポインタなので、&yはこのポインタのアドレスとなる。なのでポインタのポインタに代入できる。
    printf("zの値: %p\n", z);
    printf("*zの値: %p\n", *z);
    printf("**zの値: %d\n", **z);

    printf("-------------- 左の式と右の式の両方でアスタリスクを使ってみた。[再掲] *zのアスタリスクによって「ポインタのポインタ」が指す変数の値(=つまり単なるポインタ)を取得しているからpに代入できていることに注意。左式の*と右式の*を同じ意味で捉えると詰む ------------\n");
    // &aであるようなポインタ*zを、pに保存する
    int* p = *z;
    printf("*pの値: %d\n", *p);

    printf("-------------- 実際の値を変更するためのアスタリスク。ポインタ宣言じゃないよ! --------------\n");
    *y = 4;
    printf("yの値: %p\n", y);
    printf("*yの値: %d\n", *y);
    printf("**zの値: %d\n", **z);

    printf("-------------- ポインタのポインタの、実際の値の実際の値に3を代入した -------\n");
    **z = 3;
    printf("*pの値: %d\n", *p);
    printf("**zの値: %d\n", **z);
    printf("aの値: %d\n", a);

    printf("-------------- 関数の場合もそれはかわらない -------\n");
    // 以下はすべてアドレスを渡している
    change(&a, 0);
    printf("aの値: %d\n", a);
    change(y, 5);
    printf("aの値: %d\n", a);
    change(*z, 9);
    printf("aの値: %d\n", a);

    printf("-------------- もっと遊んでみる -------\n");
    int* *r = &*&y;
    **&*r = 10;
    printf("rの値: %p\n", r);
    printf("**rの値: %d\n", *&**r);
}

tmux開こうとしたら Reason: image not foundって言われた件について

➜  tmux
dyld: Library not loaded: /usr/local/opt/libevent/lib/libevent-2.1.6.dylib
  Referenced from: /usr/local/bin/tmux
  Reason: image not found
[1]    1773 abort      tmux

↑こんなかんじ。

見に行ったらなんかlibeventがアップグレードされてた。なにかのライブラリ入れたときにはずみで入ったのかね。しらんけど。

cd /usr/local/opt/libevent/lib/          
➜  ls
libevent-2.1.7.dylib          libevent_core.a               libevent_extra.dylib          libevent_pthreads-2.1.7.dylib
libevent.a                    libevent_core.dylib           libevent_openssl-2.1.7.dylib  libevent_pthreads.a
libevent.dylib                libevent_extra-2.1.7.dylib    libevent_openssl.a            libevent_pthreads.dylib
libevent_core-2.1.7.dylib     libevent_extra.a              libevent_openssl.dylib        pkgconfig

tmuxをupgradeしたら動くようになった。

➜ brew upgrade tmux 
==> Upgrading 1 outdated package:
tmux 2.9a -> 2.9a_1
==> Upgrading tmux 
==> Downloading https://homebrew.bintray.com/bottles/tmux-2.9a_1.mojave.bottle.tar.gz
==> Downloading from https://akamai.bintray.com/a6/a6c847ffc57c9e6d730b1dcfb3ca193588cfdb679a60f221a41690ac8ec202a7?__gda__
######################################################################## 100.0%
==> Pouring tmux-2.9a_1.mojave.bottle.tar.gz
==> Caveats
Example configuration has been installed to:
  /usr/local/opt/tmux/share/tmux

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
🍺  /usr/local/Cellar/tmux/2.9a_1: 10 files, 748.5KB
Removing: /usr/local/Cellar/tmux/2.9a... (10 files, 748.5KB)
➜ tmux

なおったけどなぞす

プログラマにとって直感ってけっこう大事なんじゃないかって思った話

脳の話

この前なんとなく脳の構造についての本を読んでいたら、半側空間無視という言葉を見かけた。大脳半球の一部にダメージがあると、片方の目で見えているものを認識できなくなるというものらしい。認識できないというのは「存在していないように感じられる」ということで、たとえば、時計の半分を見てそれが時計のすべてだと感じるようになるのだという。

また、てんかん治療の手術として、分離脳手術をおこない、左脳と右脳で情報交換する脳梁を切断すると、右目ではりんごが見えていて「これはりんごだ」と答えられるけど、左目でりんごを見たときは言葉にできないというものもあった。これはまず、延髄で交叉支配が起こることによる(右目で見たものは左脳へ情報が送られ、左目で見たものは右脳へ送られること)らしい。その後、ふつうは脳梁によって情報の移動が起こるはずなのだけど、脳梁が切断されていると情報の交換が起こらず、左目で見たときは左脳にある言語機能を活用できないために「りんごだ」と表現できないというものだ。ていうか脳梁切断しても人間って平気なのな。タフだな。

その他にも、前頭葉に損傷があると性格が野蛮になるということがあるようだ。クモ膜下出血(クモ膜とは脳と骨の間にある膜のひとつで、頭蓋骨と癒着した硬膜よりも内側にある、クモの巣状の繊維がついている膜のことをいうようだ。だから、このへんの血管がなんらかの原因で破裂したら脳の機能に異常が生じるというのはすごくありそうな話だ)が起こると意識障害が発生したり歩行困難になったりするようだ。まんまコンピュータの物理障害みたいな感じ。

また、パイロットがよく陥る空間識失調というものがあり、ふつう人間はリンパ液の流れを三半規管内の細胞が感知して「いまどういう向きか」というのを正しく知覚するらしいのに対して(要はジャイロセンサー)、大きな重力加速度がいろんな方向からくると三半規管が狂い、「空か海か」がわからなくなり、上昇しているつもりが墜落するという悲劇を引き起こすものがあることも知った。ちなみにこのとき、パイロットは自分の感覚よりも計器を信用しなければいけないらしい。

こんな感じの書物を読んでいると、自分の脳があんまり確かなものではないように感じてくる。というか相当不確実なものとして感じ始められる。なんか全力で生きて全力で考えているように思っていても、その実、自分が思っているより自分の頭の中で考えてないんじゃないかというふうに思う。

そのままその本を読みふけっていると、小脳でも神経がどーのこーので体を動かしていて…と出てきて、自分が思っている以上に勝手に脳が自分の体を動かしているような感じさえ受ける。たとえば「なんかイライラする」というとき、人間関係のイライラだったり具合が悪かったり寝不足だったり悩み事だったりいろいろあるけれど、結局はなんらかの刺激によって不快を感じているだけだというところに焦点を合わせると、少しおもしろい。

そういうわけで、脳の使い方の限界を自分で規定せずに、はっきりと顕在化している思考以外の部分を積極的に活用しようと思い始めた(じゃっかんオカルトっぽいけど、Fast&Slowみたいなタイトルの本に書いてあったシステム1とかシステム2みたいな考え方を導入したみたいな感じ)

こんな感じで、よくわかんないけど最近脳に興味ある。もっと他にやることあるだろうに。

雰囲気でコードを書くようにしてみた

コードを書くとき、ぶっちゃけあんまり思考したくなかったのでちょうどよかった。というかコードをあまり書こうという気持ちにすらならない。そもそもできるだけ書きたくない。いっぱい書くといっぱいバグるのでいっぱい書きたくないというのが根底にある(基本的にめんどくさがり屋だし)

例えるなら、ゾンビがコード書いてるみたいな感じでコード書いてる。

なるべく書かなくていい方法を探すことにして、なんとなく良さそうなライブラリだのを使うようにしてみた。Advancedコピペとでも言うべきか。コピペ最高。先駆者が血みどろの戦いで残してくれた資産を活用できるのはありがたい。

でも、それでも書かなくてはいけない場合もあって、そういう場合はしかたなく書く。これが相当めんどくさい。めんどくさいものはわりと原理的にめんどくさいことが多くて、めんどくささと戦わなければいけないのがすごくめんどくさい。でも基本的にめんどくさいと感じるときは、やらなきゃいけないことの量が予想外に多そうという判断のことだと思うので、大事なことが多いなと感じている(パワーか知識で殴るしかない)

それからコードを書いていると、ときどき「ん?」と感じることがある。

自分の実感として「ん?」と感じたときは考慮不足な箇所だったりすることが多くて、たいていそこがバグる。今までは割とこういうのをスルーしてきたけれど、スルーして悲惨な目に何度もあったので、なるべく心の声に耳を傾けるようにし始めた(ものすごくオカルトっぽい)

まぁでも「ん…? まぁいいか……ここめんどくさいし…大丈夫でしょ!」と感じたところは結構大丈夫じゃないことが多いような気がする。しいていうなら「ん?」は、かなりめんどくささのレベルが高いやつって感じ。

こんな感じで雰囲気でコードを書いていると、罠とかに気づきやすくていいんじゃないかとおもった。雰囲気でって言うとなんかちょっと違う気もするけどまぁいいや←

結論

文章にまとまりがなくて、なんで直感が大事かという部分にあんまり言及できてない気がするけど、プログラマにとって直感はだいじだとおもった(たぶん)

つたわれ

TikTokを「ティクトク」と発音すると笑われる風潮をなんとかしたい

公式でTikTokをティックトックと書いているからか、ティクトクと発音すると「ティックトックだよ」と言われる。

だがちょっとまってほしい。

TikTok という言葉はおそらく Tick-Tock からきてるのだと思う。発音も同じだし。

ejje.weblio.jp

これは日本語で「チクタク」「カチカチ」などという。

おじいさんといっしょにチク・タク チク・タク♪

のように言う。なので別に「ティクトク」とか「ティクタク」と言ってもかまわないはずだ。ティクタクだと通じないから言わないけど。

「でも公式で言及されてるからwww」に対して

公式名としてティックトックなのは理解できる。別にティックトックって読んでる人がおかしいと言いたいわけではない。

でもティックトックって言うのめんどくさくない?「ティ・ッ・ク、ト・ッ・ク」って言うのつらくない?長いと思う。「6モーラ+数瞬の区切り」って超長い。

それに比べると「ティク・トク」は2音節なので超ラクラクラク

日本語ナイズしたとしてもティの次のクはほぼ脱落させて、最後のクだけ明示すればいいから「ティk・ト・ク」の3モーラぐらいに圧縮される。「ティ・ク・ト・ク」でも4モーラになる。

普段はぼくはこの3モーラの「ティkトク」を使う。超便利。

だいたい日本語って、3モーラか4モーラに言葉が略されるわけじゃん。なんでティックトックだけティックトックで許容されてるの。

カジュアルな会話でプレステのことわざわざ「プレイステーション」って言って会話しないじゃん。

「昨日プレイステーション2買ったんだよ」
「まじで!なんでいまさらプレイステーション2買ったの?」
「プレイステーション2で桃太郎電鉄遊びたかったからさ」
「桃太郎電鉄おもしろいよねー」

って言わないじゃん。絶対略すじゃん。「桃鉄」だってそう。

そういうわけでぼくはこれからも「ティクトク」と発音していきます。

てか「○ッ△☓ッ▲」っていう言葉は日本語で略せなくて長くせざるを得ないんだろうなと思う。「キットカット」とか「やってみっか」とか「ウッドデッキ」とか「おっきおっき」とか

なんでぼくが辞書を読んだのか書いてみる

ひとたび辞書読んでたということがバレると、結構驚かれてクレイジーみたいな扱いを受けることがある。

そうして「なぜ辞書を読んだのか」とか聞かれて「えーっと、どうせ全部人生で見ることになる言葉なら、先に全部見といたほうがお得かなと思って」というような、適当な返ししかできなくてもやもやしていたので記事にしてみた。

「辞書を読む」以前

もともとぼくは英語の勉強をしている中で、語彙増強するとあとあと楽だということを体感として知っていた。

それから、知らない言葉が出てきたとき、調べるという手間に対して非常にムカムカしていた。

そして、ぼくは別に英語が好きではなくて「仕方なく読んでる」勢なので、別に「外国人とコミュニケーション取りたい!」なんて気持ちはさらさらなく、なんとかしていかに楽に語彙を増強する方法はないものかと考えていた。

また、

  • 教養あるネイティブの場合、語彙を40,000語保持していてもおかしくない
  • 平均的なネイティブはおよそ30,000語ほど
  • 平均的なネイティブの8歳は10,000語
  • かなり流暢に話す非ネイティブは25,000語ほど
  • 平均的な非ネイティブの英語話者は10,000語
  • 英検1級に必要な語彙は10,000〜15,000語ほど
  • 平均的な日本人は5,000語あるかどうか

というような情報を↓みたいなサイトから掴んでいた。

そういうわけで、いろいろな英単語帳を買ったりAnkiというアプリをやったりmikanというアプリをやったりしていた。

ちなみに現在は英語勉強マイブームが過ぎ去り、特に英語に関する勉強はしてない。やばい。

「辞書を読む」と考えた日

「どうせ辛い思いして語彙増強するなら最初にガーッと読んだ方が楽じゃね」と考えた。

また、英語の語彙について調べていると、ブログに書いている人はみんな何かしら辞書っぽいものを読んでいたり、分厚い単語帳を覚えていたり、あと昔の人は辞書読んで「紙を食う」がごとく勉強してたという話もいろいろと見つけた。たぶんそれに感化されて「辞書を読むっていうのはそんなにおかしなことではないし、それなりに有用」と思った。インフレに麻痺したと言えるかもしれない。

それで、ぼくはよせばいいのにいきなり超分厚い辞書を買ってきて読もうとしてた。細かい字で2,000ページくらいあるやつ。

それでしばらく挫折して放置していた。わろた。

「子ども向け」という神ツールの発見

ものごとを学習する際に、「子ども向けの○○」というような教材が巷には数多く存在する。基本的にこういうものに大人は手を出さない。

しかし色んなものを見た結果、「子ども向け」というのは侮れるものでなく「子ども騙し」ではなく、単に平易な言葉で記述されていたり、重要な部分だけが抜き出されているということを知った。

「むしろ子ども向けほど至高」ぐらいに考えるようになった。

「わかる!最近のは子ども向けにしてはすごいよね」とか「子ども向けなのに下手な大人向けのものよりいい」とかいう「まだちょっと侮ってる」ぐらいの気持ちじゃなくて「子ども向けは大人向けより全体的に良い」ぐらいになった。

クレヨンしんちゃんを見ていたら、中で出てくる語彙の難易度の高さに驚いたりしていた。子どものときは一切気付かなったけど、こういうのを見て「サラ金ってなに?」とか「居酒屋ってなに?」とか「ローンって何?」とか語彙が増えていくのだろうと思っていた。

↓こういうのも子ども向け

ふたたび辞書を読む

その後しばらく経ち、ある日ふと「やっぱり語彙は大事だ!!」と考えるマイブームが到来して、辞書を読もうと思った。

それでこういう英英辞典を買ってきた。比較的平易な英英辞典なのでいけるだろうと思って買った。

ロングマンワードワイズ英英辞典

ロングマンワードワイズ英英辞典

でも結果はあんまりよくなくて、確かに1ページ1ページ読んでいけるけど、進みが遅くて「う〜む。つらいな」というふうに感じていた。結局Eまで読んだところで投げ出して、もっと簡単なのにしよう!!と思った。

それで購入したのが↓の写真つきのものだ。辞書というより事典。

これは200ページしかなくて、1ページあたりの量もそれほど多くない。当時「とりあえずなんでもいいから辞書を通読して『読んだ』という結果をつくる!」という意識が強かったので、すらすら読めた。しかも知っている言葉の方が多くて「お〜!これはおもしろい!」というふうに通読することができた。

Longman Photo Dictionary (3E) Paperback with Audio CDs (3) (Longman Dictonaries)

Longman Photo Dictionary (3E) Paperback with Audio CDs (3) (Longman Dictonaries)

これに味をしめたぼくが読んだのが、↓の日本人中学生向けの英和・和英辞典。16,000語しか載っていないので「これはいいや」と考えて本屋で衝動買いした。

Challenge中学英和・和英辞典 第2版

Challenge中学英和・和英辞典 第2版

3週間ほどかけて英和辞典を読み終わった。600ページほどしかなく、また1ページ1分ほどで読んでいけたので、意外にもトータルで見るとそんなに時間はかかってない。変態なら1日で読み終えるのではないか。

それに読む前のぼくの語彙が10,000語はあったので、「あー、知ってる単語だ」「見たことある単語だ。なんて意味だったっけ」というような気持ちで読みすすめることができた。まあそれでも3週間かかるので、継続できないとなかなかつらいものがあると思う。

和英辞典の方は「つまんないな……」というふうに考えてしまって、「し」まで読んで投げ出した。

このへんでマイブームが去った。なのでぼくが「読んだ」といえる辞書はこの2冊だけで、個人的にはあまりクレイジーなことをしたという認識がなく「辞書を読んだ人」というイメージと実際のぼくとで乖離が半端ない。

辞書を読んだことによるメリット・デメリット

メリット

  • あまり馴染みのない言葉の存在を知覚できる

存在を知らないものは知覚できないので、そういう言葉を見て「おぉっ!」と思えておもしろい。特に英和辞典では「あ、あの日本語って英語でこう言うんだ」とか「日本語の単語って英語とかぶるやつ多いな」とか、ふだん意味なく使っていた日本語についても深い洞察が得られたと思っている。英語も「あ、なんか見たことある!!!」という単語が載っていてそういう箇所はウキウキする。

デメリット

  • 変な人だと思われる
  • 時間が取られる
  • そこまでおもしろくない。小説とかYouTubeとかの方がたぶんおもしろい。
  • 別に全てを完全に覚えられるわけではない

辞書を読んだと言うと「覚えたの?」と聞かれることが多いけど、はっきり言って辞書を1回読んだだけで全単語を記憶できたらバケモノだと思う。「こんなのあったっけ……見た記憶が一切ない」ぐらいの箇所も多くて、そういう意味では語彙の数がいきなり急上昇したという感覚はない。

ただ「見知らぬ単語」を「なんか見覚えのある単語」にしたり、「なんか見覚えのある単語」を「確かこんな感じの意味の単語」にしたり、「確かこんな感じの意味の単語」を「こういう意味!……だったはず」くらいに持っていけたりはする。それが数の暴力でたくさんあるので、そのへんはメリットかなと思う。個人的にこういう作業を「親近感を沸かせる」とか「絨毯爆撃」とかって呼んでる。

辞書を読むときに心がけていたこと

「完読する」という目標を第一にして、覚えることは2の次にした。

人はなぜか「辞書を読む=辞書の内容を隅々まで覚える」というふうに認識しがち。でも、辞書も本だと考えると「別に全部覚えなくてよくね???」と思う。

たぶん辞書は「引いて、自分の血肉とする」ことが大半だから「読む」という行為が「辞書の全項目について引き、そのすべてを我が血肉にする」というふうに捉えられるのだと思う。そうすると急におどろおどろしくなる。

なので、できるだけ投げ出さないで済むように「すべてを覚えなくてもいい。ただ、読むのだ」というふうに考えた。

ほとんどの人が辞書を読もうとする動機はたぶん「覚えたい」という気持ちが強いからだと思うけど、「覚えたい」が先行しすぎると「覚えられなかった…」という挫折感が強いので「将来覚えるにあたってまず1つ1つに対して親近感を沸かせる」ぐらいの気持ちで取り掛かった方がいいはず。

また、「引くためのレベル」と「読むためのレベル」は激しく異なるのでそのへんに気を配るようにした。

中学生向けの英和辞典を選んだのは「600ページしかない・パッと見て見知らぬ単語が少なかった・1ページにあまり時間を割かずに読める」というのが理由だった。ここの総量を予め算出しておかないと、つらすぎて全然続けられない。

「引くのではない。読むのだ」と考えて、なるべく最大限まで自分を甘やかさないとしんどい。

それから「ちょっとした辞典でも制作に10年かかってたりするからそれを一朝一夕で得ようとするのは強欲」と考えると冷静な気持ちになれた。

その他、途中まで読んで投げ出したりした辞書のレビュー(基本読んでないのでレビューと言えるかどうかわからない)

日英語表現辞典 (ちくま学芸文庫)

日英語表現辞典 (ちくま学芸文庫)

Twitterで話題になっていた最所ふみさんの本。まさに読むための辞典という感じを受けた。でも自分よりはるかに上の人をターゲットにしている本っぽくて、途中で「これは今の自分には早いな…」と考えて投げ出した。

語源中心英単語辞典

語源中心英単語辞典

置物のように鎮座している。例文が一切なくてノイローゼになりそうなやつ。1つ1つの言葉の精度が甘くてつらい。

NEW斎藤和英大辞典

NEW斎藤和英大辞典

斎藤秀三郎という人が書いた和英辞典。分厚すぎるし、詳しすぎる。これを1人で書いたというのがすごい。Aの最初の方で難しすぎて挫折した。高かったのに……

ジーニアス英和辞典 第5版

ジーニアス英和辞典 第5版

昔買った英和辞典。分厚い。これは普通にAで投げた。「辞書を通読する」というとだいたいの人はこういうのを思い浮かべると思う。2,200ページはあるので、1日20ページ読んでも4ヶ月かかると考えるとエグい。まじめに読むと20ページは少なくとも1時間かかるし、長期間継続して読める人用のやつ。こういうのに辞書通読初心者が手を出すと確実に爆散する。「100時間以上費やすことになるけど効果がいまいち感じられない」というのが一番精神にクる。

三省堂国語辞典 第七版

三省堂国語辞典 第七版

国語辞典。これも読むために買ったけど分厚くて投げた。そのうち子ども向けのものを買い直してそれを読むと思う。悪い本ではない。

Merriam-Websters Elementary Dictionary

Merriam-Websters Elementary Dictionary

「子ども向け最高!!」の時期に勢いで買った英英辞典。中身は良さげだけどマイブームが終了したので一切読んでない。

Picturepedia: An Encyclopedia on Every Page

Picturepedia: An Encyclopedia on Every Page

「子ども向け最高!!」の時期に勢いで買った百科事典。サイズがデカい。中身もまだ見ていない。でも次読むとしたらこれ。

漢検 漢字辞典 第二版

漢検 漢字辞典 第二版

漢検準1級の勉強のために買った辞書。その後準1級用にいい教材を見つけたのでこっちは放置してる。

Oxford Advance Learner's Dictionary

Oxford Advance Learner's Dictionary

英英辞典。分厚い。いつも分厚いの買ってて全然学習してないなって感じ。もちろんAで挫折。

Mac Chromeでやる夫関連のサイトを読む(MacでAAをきれいに表示する)

はじめに

技術者向けの解説はページ下部にあります。めんどくさくて全部読みたくない技術者の方は下部だけ読んでも大丈夫です。

読むのに必要な前提知識

読者は インストール・ダウンロード・Webサイト などの初歩の用語を知っていることを前提としています。

かなり専門用語を使わないように努力しているつもりですが、詳細に伝えるにあたって専門的な言葉がときどき出ています。ご了承ください。

なんでAAがずれて読めないの(´・ω・`)?

AAがきちんと表示されるためには、

MS Pゴシック

か、それに準ずるフォント(Textarなど)が使っているMacにインストールされている必要があります。

基本的には MS Pゴシック というフォントがインストールされていれば大丈夫だと思います。

フォントというのは、『文字をどのように表現するか』をまとめたルールのことで、いろんな種類のフォントがあります。たとえ同じ文字でもフォントが異なると文字の表現方法が変わるので、文字の見え方が異なります。

フォントが違うと、たとえば同じ (`・ω・´) というデータでも、

フォントの種類 見え方
デフォルト (`・ω・´)
MS Pゴシック (`・ω・´)
Quicksand (`・ω・´)
Bahianita (`・ω・´)

のように、見え方が変わります。

MS Pゴシック というフォントが正しくインストールされていない場合は、コンピュータが

「MS Pゴシックとかいうやつ無いから、無いときに使うやつ(デフォルト)使うわ」

と判定して、デフォルトを使います。

なので、正しくインストールされていない場合は、この表の『デフォルトの見え方』と『MS Pゴシックの見え方』は同じはずです。

なぜ他のフォントではなく MS Pゴシック にしなければいけないかというと、 MS Pゴシック というフォントは、遠い昔、Windowsで使われていたフォントであり、『このフォントを使ってみんな2chを見ている』という前提のもとAAが作られていたからです。

Macには、残念ながら MS Pゴシック がインストールされていません。そのため、別のフォントが使われて、ずれて見えます。

MacMS Pゴシック が入っていない様子

macOS Sierra に組み込まれているフォント - Apple サポート

MS Pゴシックの入手方法について

MS Pゴシックは、マイクロソフトMicroSoft)が作ったものなので、当然ながら著作権が発生しています(なのでMacに入ってないのですが)

MS Pゴシックのフォント自体はたくさんインターネット上に転がっているのですが、基本的に違法アップロードの類のものだと思うので、こちらから入手しないほうがいいと思います。

Windowsを持っていれば、MS Pゴシックのフォントファイルが入っているので、そのファイルをMacに持ってきてクリックするとインストールできます。

よくわからなかったらググってください。

MS Pゴシックをインストールしたのに、AAがずれるサイトがあるんだけど( ・`ω・´)?

ずれないサイト

ほとんどのAAを置いているサイトは「このサイトではMS Pゴシックを使ってね!」というように、サイト上で指定されています。

たとえば↓のサイトでは、サイト側でMS Pゴシック使ってねと指定してあります。こういうサイトはズレないはずです。

やる夫 Wiki | FANDOM powered by Wikia

f:id:haruharu1:20190704130744p:plain

↓こんな感じで指定されています。「フォントは、MonaがあればMona,なければIPAMonaPGothic, IPAMonaPGothicがなければ'MS Pゴシック'を使って」という意味で指定されているようです。(ちょっとなんか指定の仕方がおかしい部分がありますが…)

f:id:haruharu1:20190704130928p:plain

このフォントとかを指定するやつをCSSと言ったりします。

ずれるサイト

ただし↓のサイトでは、ずれます。

サイト上で特にフォントの指定がないので、お使いのブラウザのデフォルトのフォント(既定のフォント)を使用することになります。

f:id:haruharu1:20190704131252p:plain

そういうサイトは、サイト管理者がフォントを指定していないので、こちらでフォントを勝手に指定してあげることにします。

フォントなどを指定できるものを CSS と言ったりするのですが、この『フォントなどを指定できるCSSとかいうやつ』を外部から追加するChrome拡張機能があります。Stylishというやつです。

chrome.google.com

Stylishを使っていい感じに設定するとこんな感じになります。(これでもまだずれてる?シラネ)

f:id:haruharu1:20190704132158p:plain

Stylishの使い方

StylishChromeにインストールすると、Chromeの右上らへんに↓のような感じでインストールされた旨が表示されます。クリックしてください。

f:id:haruharu1:20190704132257p:plain

ここで Create New Style を選んで、新しくCSSを追加します。(↓参照)

f:id:haruharu1:20190704133211p:plain

するとこんな感じ(↓)の画面が出ます。

f:id:haruharu1:20190704133355p:plain

ここに↓のように記入していきます。

f:id:haruharu1:20190704141358p:plain

この緑丸の部分のところで、このStyleの名前をつけてください(別に名前はなんでもいいです)。Enable(利用可能)にチェックボックスが入っていないと利用可能にならないので注意してください。

赤丸の部分には

* {
    font-family: 'MS PGothic', 'MS Pゴシック','MSPゴシック','MSPゴシック','MS Pゴシック' !important;
    line-height:18px !important;
    font-size: 16px !important;
}

というふうに書きます。コピペで大丈夫です。

このページ全体の文字について、MS Pゴシックとか、フォントサイズとか文字の高さとかを指定しています。 !importantとつけているのは、サイト管理者がテキトーな指定をしていても強制的に変更させるためです。(ただし、サイト管理者がより強く強制的に指定している場合は、おそらくこれが効かないので、そういうサイトでは効きません。その際の変更はもうちょっと専門知識が必要になります。)

青丸の部分には「どこのサイトでこのCSSを影響させたいか」を記述していきます。「すべてのサイトでMS Pゴシックを使う」というのはMacユーザーなら嫌なはずなので、変えたほうがいいと思います。

AAを使っているサイトにだけ適用できるように、お好みに設定していきましょう。URLs starting with(訳: ~から始まるURL)http://bhdaa.sakura.ne.jp などと入力すると良いです。追加したい場合は Add を押します。

そんな感じで入力します。

入力が終わったら「Save」してください。

知らなくてもいいけど知っておくといいかも知識

Stylishは、専門的にはCSSをページの最後に追加してくれるツールです(DOMの最後にstyle[CSSを記述するためのHTMLのタグ]を追加しているだけ)

f:id:haruharu1:20190704132431p:plain

まとめ

  • 大前提として、すべての「AAズレ」は「フォントが違う」という部分に起因します。
  • フォントが違うのは「そもそもあなたのPCにフォントがインストールされてない」「サイト管理者がフォントを指定していない」「サイト管理者の設定がクレイジー」のどれかによって生じます。これはWindowsでもMacでも変わりません。
  • 基本的には「インストール+Stylishの変更」で90%以上のAAサイトが問題なく見れるようになるはずです。

厳密には、フォントの違いだけでなく↓のような設定も必要です。

font-size:16px;
line-height:18px;

技術者用

  • AAはMS Pゴシックを使うことを前提として作られてます。
  • なのでMacMS Pゴシックをインストールしてください。これでほぼ直ります。
  • サイト管理者が指定していないサイトにのみCSSを指定してください。指定にはStylishというChrome拡張機能がオススメです。

↓指定方法はこれです。テキトーなのでお好みでアレンジしてください。

* {
    font-family: 'MS PGothic', 'MS Pゴシック','MSPゴシック','MSPゴシック','MS Pゴシック' !important;
    line-height:18px !important;
    font-size: 16px !important;
}

  • おわり

RSpecの `expec(x).to eq y` の構文が謎かったので実装してみた

動機

RubyとかRuby on Railsとかの勉強をしてたらRSpecのところで少しハマったので調べてみた。

実装

class Expect
  def initialize(trying)
    @trying = trying
  end

  def to(wrapper)
    if wrapper.call @trying
      puts 'OK!!'
    else
      puts 'NG!!'
    end
  end
end

def eq expected
  lambda do |x|
    x == expected
  end
end

def expect trying
  Expect.new trying
end

expect(1 + 2).to eq 3
(expect 1 + 2).to(eq(3))

本来の実装方法はわからないけど、普通に高階関数を使っているだけのようだ。DSLだと実装者は大変だけど使う側は考えなくても使えるようになっていて便利だなとおもった。慣習的なイディオムが expect(1 + 2).to eq 3 となっているので、別に違う書き方でもいいのだなとおもった。

(調べたら実際の実装は割とちがうらしいので、そのうち暇ができたら調べてみる)

Pythonと似ているけど、根本的な思想が結構違うのでおもしろい