読者です 読者をやめる 読者になる 読者になる
20代 / 独身 / 会社員

膀胱炎になっている

雑談

日曜日から、下腹部が少し痛いな?と思っていたら、 今日の昼休み以降、会社のトイレに頻繁に行くようになり、 ついに今日の定時後、トイレに行っても行っても尿意が収まらなくなった。

そして次第に血しか出なくなり(いまここ)痛い。


なので、腎仙散という、腎臓の病を仙人が散らしてくれそうな名前の漢方薬をマツキヨで入手し、飲んでみた。

たいそうまずいことを覚悟して飲んだが、意外とそんなことはなく、シナモンみたいな味さえ感じられた。 (味音痴が幸いした)

効くといいなぁ
と思う反面、
菌を放出するために利尿作用もあるらしく、トイレ行くたびに膀胱が痛いからあまり行きたくないんだけどなぁ
とも、思っている。

果たして効くのか。

テーブル結合で同じテーブルを2度参照する

プログラミング MySQL

問題

商品テーブル

商品名 生産地ID 販売地ID
りんご 1 2
ぶどう 3 3
みかん 10 12

都道府県テーブル

都道府県ID 都道府県名
1 北海道
2 青森県
3 岩手県

例えば上記のようなテーブルがある。 この2つのテーブルを結合して下記のように出力したいとき、

期待値

商品名 生産地 販売地
りんご 北海道 青森県
ぶどう 岩手県 岩手県
みかん 群馬県 千葉県

“生産地"列と"販売地"列でそれぞれ同じ"都道府県名テーブル"を参照する必要がある。

しかし、下記のように普通に結合する時の書き方をすると、生産地の都道府県と販売地の都道府県の区別ができず、 #1066 - Not unique table/alias :'都道府県'(生産地IDと結合した都道府県テーブルと、販売地IDと結合した都道府県テーブル、どっちを参照したらよいかわからないよエラー)になってしまう。

SELECT 商品テーブル.商品名,
        都道府県テーブル.都道府県名,
        都道府県テーブル.都道府県名
FROM    商品テーブル
    LEFT JOIN 都道府県テーブル
        ON 商品テーブル.生産地ID = 都道府県テーブル.都道府県ID
    LEFT JOIN 都道府県テーブル
        ON 商品テーブル.販売地ID = 都道府県テーブル.都道府県ID

解決策

複数回参照するテーブル名を、ASを用いて別名にする

SELECT 商品テーブル.商品名,
        生産地テーブル.生産地,
        販売地テーブル.販売地
FROM    商品テーブル
    LEFT JOIN 都道府県テーブル AS 生産地テーブル
        ON 商品テーブル.生産地ID = 生産地テーブル.都道府県ID
    LEFT JOIN 都道府県テーブル AS 販売地テーブル
        ON 商品テーブル.販売地ID = 販売地テーブル.都道府県ID

都道府県テーブルをJOINするときにそれぞれ別名をつけ、新たにつけた名前を用いて表記することで、期待の結果が得られる。

参考

デリゲートにselfを指定するときにエラー

プログラミング Objective-C

現象

デリゲートにselfを代入したときにwarningが出る

コード

self.hoge.delegate = self;

エラーメッセージ

Assigning to 'id<HogeDelegate>' from incompatible type 'ViewController'

原因

デリゲート先のクラスで<HogeDelegate>プロトコルを採用していなかった

@interface ViewController () // ここに <HogeDelegate> が不足している
@property (nonatomic, strong) Hoge* hoge;
@end

詳細

デリゲートを使用する際には、デリゲート先(実際に処理を実装する方)で</*デリゲート名*/>の形式で、使用するデリゲートを指定し、「このデリゲートを使いますよ〜」ということを表す必要がある。
そうすることで、デリゲート先でデリゲート元のプロトコルが準拠され、selfHogeDelegate型として利用できるようになり、デリゲート元のメソッドを実装して使用することができる。
(というふうに解釈したのだけれど、果たしてこれはあってるのかしら)

今回は、プロトコルの準拠を明示することを怠っていたため、selfViewController型でしかなく、HogeDelegate型のdelegateとは型が一致せず、warningが出た。

解決策

@interface ViewController () <HogeDelegate>
@property (nonatomic, strong) Hoge* hoge;
@end

参考

複数の変数に同じ値を代入する(同時代入)

プログラミング PHP Python C C++ C# objective-C javascript

背景

複数の値に同時に代入したいことがたまにある。
(その行為が妥当かどうなのかは置いておいて)

普通に

a = 0;
b = 0;

とすればよいのだけれど、 どうせならもっとスマートな書き方を知っておこうということで調べてみた結果をまとめる。


結論

a = b = 0;

どの言語もだいたい上記のような書き方で宣言できる。

「代入」はそもそも「式」なので、一文で記入した場合、右から評価される。 それゆえ、このような書き方ですべての変数に代入することが可能となる。


言語ごとの違い

C / C++ / C# / Objective-C

int a,b;
a = b = 0;
int a = 0, b = 0;

※ 以下のようにすると、bにのみ0が代入される

int a, b = 0;

JavaScript

var a = b = 0;

※ 上記の場合、aはローカル変数、bはグローバル変数となる

PHP

<? php
$a = $b = 0;

Python

// マルチターゲット代入
a = b = 0;

// アンパック代入
a, b = 0, 0;
a, b = 1, 2;  // ※

※アンパック代入では一括で違う値も代入可能(さすが)

VBA

無理


他にもわかったら追記します

数独にはまった

雑談

毎日、通勤の電車内と、昼休みまでも、ずっと数独ばかりやっている。 昼休み、今までブランケットと枕を持ち込んで会社で堂々と昼寝をしていたのに、その私が、最近は起きて数独をやっている。


思えば私は熱しやすく冷めやすい性質がある。 数独も、今までの人生で何度かはまって熱中していた時期があったが、そういえば今思えばいつの間にかやらなくなっていた。 他にも、スパイダーソリティアマインスイーパもすごくはまっていた時期があった。

おそらく今回の数独ブームもあっという間に過ぎ去るだろう。 それはそれで、たかが一つの暇つぶしゲームに対する小さなブームだから、問題ない。

ただ、この熱しやすく冷めやすい性格、それ自体は見直さなければならないと思う。 一度冷めてしまうとしばらく冷めっぱなしなことも多々あるため、このままだと、物事も深くは追求できない私の悪い部分がなかなか直らない。 それに何より、人付き合いにおいても、熱されて近づき、冷めて離れてしまうようだと、良い付き合いにはならない。 思い当たる節がたくさんある。


気をつけなければ。 と、数独一つとって、深く反省した。

しかし、すぐ冷めてしまう性格はどうしたら直せるのかなぁ…

黒ごまとかるがも

雑談

タイトルには全く意味がありません。 KUROGOMAとKARUGAMOって子音が一緒だな、と思って(KRGM)。

このご時世に、この中途半端な時期に、ブログを始めてみることにしました。 1月1日にも同じことを考え、しかしどうせ3日坊主になるだろうしやめよう、と結論づけたばかりなのですが…

始めるも自由、辞めるも自由ということで、(炎上しない程度に(炎上するネタもない))自由にやってみようと思います。

思ったことを人に伝えること、そもそも物事についての考えをめぐらすことが苦手なので、 すこしでも練習になれば、始めた意味もあるのかな、と思います。

とりあえずは、思ったこと、感じたこと、学んだこと、やったこと、雑多に記録してみます。