macOS Safari: 訪問済みサイトの色が変わらない

2-3 日前からどうにも Safari の使い勝手が悪く、Google で検索して一覧が表示されますが、訪問済みサイトの色が変わらないという現象に遭遇。これ、地味に不便で、あー、ここ昨日見たサイトだーというようなことが頻発。これは困った。

困った時は検索だ、ということで Safari 訪問済み 色変わらない などで検索してようやく解決。

まず試したのが、履歴を消去した後 Safari を再起動。改善が見られません。次に、環境設定、詳細でスタイルシートを指定してやる方法。指定するのは次のような内容:

a:link { color: red; }
a:visited { color: green; }

テキトーにファイルを作って、指定したら治った。

もともと何が指定してあったのか気になるところですが、治ったのでよしとしよう。

 

・・・と思ったら治っていない。治ったように見えて、いつの間にか訪問先の色が変化しないようになる。Safari を再起動すると治る。でもしばらく使うと再発。うーん、これは Apple のアップデートに期待ですかね・・・あー不便。

ヴェポライザーでシャグ :Drum

いつものタバコ屋にアムステルダマーを買いに行ったら売切れ・・・似たのでジャンゴを勧められたんだけど、あれはちょっと違う。具体的には香ばしい香りが足りない。そう言えば以前から気になっていた Drum を買ってみた。Drum は世界で一番有名なシャグ らしく、シャグ を扱っている所ならどこにでも置いてあるらしい(でも、神保町の店にはなかったような・・・)。

以前から気になっていたのに買っていなかった理由は、値段が高いことと、50g なので合わなかった時に消費できず困っちゃったら嫌だなと思ってたから。実は、グラム単価で考えると、高い訳ではない。味について調べてみると、黒タバコ系でハーフスワレよりもマイルドらしく、それなら合わなかったとしても、ま、我慢できる味かなと思い買うことに。

試した感想ですが、巻いて火をつけて吸う分には美味くて、ハーフスワれほど黒タバコ感がなく、はっきりと味がわかるのでよかった。シャグ は湿っているので、巻いた後乾燥させると味が一層出てくるのでいいかなと。ヴェポライザー での味は好みではなく、黒タバコ系はヴェポに合わないと思う。

しばらく続けて、アムダマと代わる代わる買ってもいいかなと思った。

 

PayPay Go Green: 巻紙

YouTube で PayPay の巻紙を使っている人がいて、珍しいので使ってみたくなり、丁度アムダマがなくなりそうなのでいつものタバコ屋に買いに行ったついでに買ってみた。

PayPay と書いてパイパイと読むようで、なんかちょっと・・・ま、それは置いておくとして、見た目は薄いグリーン、無漂白、極薄と、とても良いものに思える。吸った感じは、どうだろう。少し辛い感じかなぁ。悪くないけど慣れないとちょっと独特。

原料は、アルファルファという、マメ科の植物だそうで、検索してみたら、もやし?に似てなくもないような。

 

ヴェポライザーでシャグ :Amber leaf blonde

C Vapor 3 を使ってて、シャグ を色々試した結果、アンバーリーフブロンドに落ち着く。買いやすい値段と、添加物か多いんでしょうね、吸った気がする感が良い。

アンバーリーフのもう一つの楽しみは、巻紙に書かれた Tips。結構面白くて。今日のはこんなのだった;

In Tokyo, a bicycle is faster than a car for most trips of less than 50 minutes.

なるほど、それだけ車も信号も多いということなんですかね。

で、Tips は読むけど、この紙使わないの。

UITableView の右端と左端

UITableView で、template で普通に作成していると、右端は+(add)、左端は Edit になっている。add はまだいいとして、Edit は曲者。このボタンを record を削除できのだけど、削除は swipe で実装しているので Edit ボタンはなくても構わない。ってか、意味的に Edit なのに削除?みたいな感じでない方がいいかも。

このボタンを削除するにはどうするか。viewDidLoad method に、Edit について言及があり、これをコメントにしたら表示されなくなった。よかった、よかった。

 

UITableView で custom cell

またはまった。UITableView で custom cell をしようとした話。

detail に tableView を配置して、内容は custom cell ってのはうまくいっているんだけど、テンプレートになる Master の cell を custom cell にするのがうまくいかなくて。こっちの方がネットに書いてあること多いんで、楽勝だろうと思ったらはまった。

UITableViewCell の custom class を作って、XIB ファイルも作ると。そこまではオッケー。次に、xib ファイルの identifier を Cell と命名。storyboard で、prototype cell があるので、そこに作成した class を指定し、ここでも identifier を Cell と命名。名前がかぶるのでおかしくならないのか心配だけど、うまくいっているのでよしとしよう。

MasterViewController の viewDidLoad で、次のように cell を定義。

    UINib *nib = [UINib nibWithNibName:@"STMasterCustomCell" bundle:nil];

    [self.tableView registerNib:nib forCellReuseIdentifier:@"Cell"];

次に、必須の method で、cell をカスタムすることを記述。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{

    STMasterCustomCell* cell = (STMasterCustomCell*)[tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

 

cell の内容は、次の method で定義。

- (void)configureCell:(STMasterCustomCell *)cell withEvent:(Event *)event

 

ここまで出来て、ほゥほぅ、うまくいった、うはっと思ったら、セルをタップしても detail に遷移しない。う、なんでなんで?やり方わからない。調べたら、セルをタップしたときに呼ばれる method があったので、segue を呼ぶようにわざわざ指定してやるとうまくいった。

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

    [self performSegueWithIdentifier:@"showDetail" sender:indexPath];

}

 

ってか、なんで今までは指定する必要がなかったのに、custom cell にしたら指定しないとならなくなるわけ?あとね、わかりにくいのが、sender として指定する引数なんだけど、指定しようがないので、テキトーに indexPath としたらうまくいったのね。

custom cell を使う方法って色々書いてるところがあるけど、セルをタップしたら detail に遷移しなくなったという事例はあまり見かけないので、きっとやり方を間違えているんだろうと思うけれども、正しい方法がわからないのと、うまくいっているのでよしとしよう。

カメラの使用を許可の設定が有効になるタイミングは・・・

うーん、またハマってしまった・・・

カメラの機能を使って QR を読み込もうとしてて、利用者に許可取らないとならないんだよね、info.plit に、以下の propety を追加:

Privecy - Camera Usage Description

そうすると、設定、プライバシー、カメラを選ぶとアプリ名が表示されるようになり、許可する・しないが設定できる・・・はず、と思ったらうまくいかない。

この設定ができるようになるのは、初回、カメラを使用しようとしたタイミングのため、アプリを build して起動しただけでユーザーに許可を得るような作りにはならない、もっと言うと、設定にも項目は追加されないのだ。

アプリで通知を伴う機能を実装すると、初回起動時にユーザーに許可を得るので、てっきりカメラもそうなんだと思ったら違う。カメラは起動時ではなく、カメラ機能を使おうとしたタイミングで許可を得る画面が出て、設定も追加されるのだ。

なんでそんなにタイミングにこだわるのかと言うと、カメラを起動する、しないの判定で、許可している場合はカメラ起動、許可していない場合は許可してくださいのメッセージを出す、という風に書いていたら、初回起動時は常に許可されていないので、許可してくださいのメッセージが出るものの、設定を見ても許可できない、ということになってしまい、結局カメラを起動できなくなるのです。

こういったことを回避するには、AVAuthorizationStatusNotDetermined (許可する、しないが未定義)という状態を検知したら、

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {...}];

という面倒な処理を加える必要があると。

アプリを消して、もう一回 build したら、カメラを起動できなくなって、なんでなんでになり焦ったけど、こういうことかと。