iOS環境のブラウザをSafariからGoogle Chromeに乗り換えた

iOS環境のブラウザをSafariからGoogle Chromeに乗り換えた。乗り換えのモチベーションは大きく3つある。

複数デバイス間の閲覧履歴の同期

SafariよりもGoogle Chromeの方が、複数のデバイスでWebページの閲覧をした時の閲覧履歴の同期のユーザー体験が良い。具体的にだが、履歴が同期されるスピードがChromeはSafariよりもずっと早い。iPhone、iPad pro、iPad miniの3台を運用しておりこの機能のニーズが高いため、このあたりの使い勝手が良くなるのはとても嬉しい。

Webページを閲覧した時刻が確認できる

Safariの閲覧履歴機能では、各ページを閲覧した時刻を確認する機能がないが、Google Chromeだと確認できる。

英→日の翻訳機能の品質

SafariよりもGoogle Chromeの方が、英語のページを翻訳した時のユーザー体験が良い。具体的にだが、図が含まれたWeb記事を翻訳する時の体験がChromeは優れている。こちらの記事を例に挙げると、Safariで翻訳をすると以下の図が

図の中の表記も日本語化されてしまう。これは見づらい。

が、Chromeだと本文のみ和訳、図の中の表記は日本語化しない形で翻訳してくれる。

終わりに

そんなこんなで、しばらくChrome主力で行ってみる。この辺りの使い勝手は時間と共にどんどん変わっていくので、定期的に見返すのがいいと思う。

ripgrepの実行結果のファイルのパスの色が見にくい

問題

ripgrep -l の実行結果の色が見にくい

解決方法

  • HOME 配下に .ripgreprc を作成し、 --colors=path:fg:cyan を書き込む
$ /usr/bin/cat ~/.ripgreprc
--colors=path:fg:cyan
  • .bashrc に .ripgreprc を読み込む設定を追加
$ head -2 ~/.bashrc
# rip grepのファイルのPATH
export RIPGREP_CONFIG_PATH=$HOME/.ripgreprc

参考にしたサイト

zenn.dev

不確実性があることを前提に作業計画を考える

複数のタスクの作業計画を検討する際は、想定工数だけでなく技術的不確実性の大きさに着目してプランニングを考えると、良さそうに思った。ここでいう「技術的不確実性」とは、取り組んでみないとそこにどんな課題があるのかわからない未知の領域の広さ、みたいなイメージだ。この不確実性について、下図のような見通しを持ったうえで、不確実性の大きいものから順番につぶしていく進め方がよいと思った。このやり方でやると、時間が進むにつれて不確実性が効率的に減っていく。不確実性コーンにおける不確実性減少のスピードが速い。

WSL2 : ディレクトリ名の表示色が見にくい場合のカスタマイズ

主要な色コード

30: é»’
31: 赤
32: ç·‘
33: 黄
34: 青
35: マゼンタ
36: シアン
37: 白

メモ : 方法論について説明する文章を書きたい時に、書き出しで何を書くといいか?

thoughtworksのOKRの解説記事を読んでいて、一定の文章の型があるなと感じたのでメモ。

PHP : 連想配列のvalueにオブジェクトを格納するパターン

<?php

class Person {
    public $name;
    public $age;
    
    public function __construct($name, $age){
        $this->name = $name;
        $this->age = $age;
    }
    
    public function introduce(){
        echo "Hi my name is " . $this->name . "\n";
    }
}

$people = [
              "person1" => new Person("Bob", 22),
              "person2" => new Person("mary", 30)
];

// Hi my name is Bob
// Hi my name is mary
foreach ($people as $person) {
    $person->introduce();
}

PHP : 2次元配列の値を、別の2次元配列に詰め替える

イテレーターの中で、空インデックス(添え字の指定なし)の方式で、新しい配列への代入処理を書けばOK。

<?php

$fruits = [
             ['name'=>'banana'], 
             ['name'=>'apple'], 
             ['name'=>'mango']
          ];

$new_frtuis = [];

foreach($fruits as $key => $value ){
    $new_frtuis[] = [$key, $value];
}

print_r($new_frtuis);

実行結果

Array
(
    [0] => Array
        (
            [0] => 0
            [1] => Array
                (
                    [name] => banana
                )

        )

    [1] => Array
        (
            [0] => 1
            [1] => Array
                (
                    [name] => apple
                )

        )

    [2] => Array
        (
            [0] => 2
            [1] => Array
                (
                    [name] => mango
                )

        )

「わかったつもり」にならないことが大事

ITの勉強あるあるなんだけど、新しい概念に触れたときに「ぼんやりと意味がわかる」ぐらいの理解で学ぶのを止めてしまうと、解像度が上がらない・理解が深まらず、それであとで手痛いしっぺ返しを喰らうことが多い。だから、「多分まだ理解できていないのでもう少し掘り下げて、細かく一つ一つ考えてみよう」となることが大事に思う。

一つ一つの細かいことが正確に理解できていると、2つ目のTweetで言われているようにその後の応用も聞きやすいように思い。だからとにかく、出来るだけ細かい粒度で精度高く理解することが大事に思う。小さなちょっとしたことの理解に手を抜かないというか。

同様に、何かについて「わからない」と感じる時も、

  • 漠然とわからない、混乱していて何がわからないか、わからない

状態を

  • 既知のことと未知のことが整理されていて、どのスコープで何について未知なのかその輪郭が明瞭になっている

状態に変えていけるのかがすごく大事だと思う。

参考

※ルール10 : スキルを分離して個別に練習する

Windows11の再起動の原因を調べる

デスクトップPCが意図せず再起動することが時々あり、原因を調査した際のメモ。

イベントビューアー

  • Windowsのイベントログは イベントビューアー にて閲覧できる。イベントビューアーを起動する方法はいくつかあるが、例えば

    • (1) 画面、左下隅の Windows マークをクリック
    • (2)ポップアップするウィンドウ最上部の アプリ、設定、ドキュメントの検索 と書かれた検索フォームに イベント と入力
    • (3) イベントビューアーのアイコンが表示されるので左クリック

することで起動できる

「システム」イベント

  • イベントビューアー で確認できるイベントは5つのカテゴリに分かれる。再起動の原因を調べたいときは、 Windowsログ -> システム を選択すればOK

イベントID

  • イベントビューアー 上で出力される、イベントログ は イベントID という識別子によって分類される。
  • 現在のログをフィルタ で閲覧対象とするログを絞ることができる。再起動の原因を調べたいときは以下の2つを見るといい
    • 6006 システムのシャットダウン
    • 1074 シャットダウンの開始

理由コード

  • ID 1074 シャットダウンの開始 レコード内の 理由コード を確認することで、再起動の原因を調べることができる

CakePHP - Controller

About

CakePHP 2のControllerについてのメモ

AppController

CakePHPにおけるControllerは、AppControllerを継承して作る。

CakeRequest

Controllerに流入するHTTP Requestについては、CakePHP 2.0からはCakeRequestおよびCakeResponseクラスで管理される。

POSTされたデータへのアクセス

インスタンスプロパティ CakeRequest::$data または インスタンスメソッド CakeRequest::data() を使うことで、POSTされたデータへアクセスできる。

※以下、CakePHP2の公式ドキュメント より抜粋

インスタンスプロパティを使用の例 $this->request->data['Post']['title'];

インスタンスメソッドを使用の例 $foo = $this->request->data('Value.that.does.not.exist');

PHP : 2次元配列のイテレーション

sample data

添字あり配列(1次元目)×添字なし・連想配列(2次元目)

<?php

$persons = [
               [
                   'id'=>1, 
                   'name'=>'bob'
               ],
               [
                   'id'=>2, 
                   'name'=>'alice'
               ],
           ];

イテレーション方法

一般的な添字あり配列のイテレーションと同じ方法でイテレートできる。

sample dataの場合、以下となり、$key には 0 および 1 が、$value には連想配列が格納される。 ※配列名を persons に変更している

<?php

foreach ($persons as $key => $value){
    print_r($key) . "\n";
    print_r($value) . "\n";
}

注意点として、 $value の部分には任意の文字を入れることができるので、 $array[key]などセレクタ風の記法の変数を入れることもできるが、これにより $value に代入される値が変わることはない。従って、以下の2パターンのイテレーション文の実行結果は同じになる。

パターン1

<?php

foreach ($persons as $index => $person){
    print_r($person) . "\n";
}

パターン2

<?php

foreach ($persons as $index => $person['Person']){
    print_r($person['Person']) . "\n";
}

高速検索CLIツールripgrepを使い始めた

rust製でgrep likeに使えるCLIツール、ripgrepを使い始めました。細かいオプションがまだよくわかっていないので、本ブログ記事で少しずつメモしていこうと思います。

インストール方法

$ sudo apt install ripgrep

オプション

  • rg -l (える) でヒットしたファイル名のみを出力
  • rg -g '*.config' [検索ワード] で拡張子がconfigのファイルから検索
  • rg --after-context [整数値] でHITした行以降のX行を表示
  • rg --before-context [整数値] でHITした行以前のX行を表示

TIPS

  • - などの演算子を検索ワードに設定したいときは ' ' (シングルクオーテーション)で囲ってあげればOK

ref

関連する過去記事

daemon (Linux, UNIX)

Linux, Unixにおける daemon についてのメモ。

daemon processの定義と特徴

背景知識

フォアグラウンド、バックグラウンド処理

Linuxでは、processの実行形式として、バックグラウンド、フォアグラウンドの2つが存在する。 自分の実務的な感覚では、 フォアグラウンドプロセス == ターミナル(シェル)が終了すると、一緒に終了するプロセス みたいに捉えることが多い。つまり、フォアグラウンドプロセスとは 親プロセスがシェルのプロセス と考えるケースが多い。

※Calude3 Opusで生成

※参考:以下の記事では、ttyプロセスとシグナルの観点で解説がなされている

ゾンビプロセス、孤児プロセス

AWS CLI

AWS CLIの操作に関する備忘メモ。

AWS CLIとは

AWSを操作するための、CLIツール。

AWS CLIのインストール

以下のように curl(1) 経由で実施するのが公式手順の模様。

$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

docs.aws.amazon.com

認証情報の初期設定

AWS CLI のインストール完了後、 aws configure を実行することで、対話形式でAWS CLIの動作に必要な認証情報を設定することができる。
※以下のCLIの実行結果は公式ドキュメントより引用

$ aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json

この際に設定した アクセスキーID と シークレットアクセスキー は、 ~/.aws/credentials に永続化される。

cat ~/.aws/credentials
[default]
aws_access_key_id = xxx
aws_secret_access_key = xxx

またリージョンの情報は ~/.aws/config に永続化される。

cat ~/.aws/config
[default]
region = ap-northeast-1

これらの情報は、 aws configure list で確認することができる。

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
    region                <not set>             None    None

プロファイル

プロファイルとは

プロファイル は アクセスキーID と シークレットアクセスキー を持つコレクションのようだ。

プロファイルのイメージ

AWS CLIのユーザーは、複数のプロファイルを使い分けることで認証情報の切り替えを行うことができる。

$ aws s3 ls --profile my-profile

プロファイルの新規作成

プロファイルの新規作成に際しては、 aws configure --profile を使う。

$ aws configure --profile sample-profile
AWS Access Key ID [None]: ****************XXXXX
AWS Secret Access Key [None]: ****************XXXXX
Default region name [None]: ap-northeast-1
Default output format [None]:

作成されたプロファイルの設定値は、 ~/.aws/credentials ~/.aws/config それぞれに [profile プロファイル名] のセクションと共に追記される。

$ cat ~/.aws/credentials
[default]
aws_access_key_id = ****************XXXX
aws_secret_access_key = ****************XXXX

[sample-profile]
aws_access_key_id = ****************XXXX
aws_secret_access_key = ****************XXXX
$ cat config
[default]
region = ap-northeast-1

[profile sample-profile]
region =ap-northeast-1

参考記事

本文欄が横に広く取られるようはてなのテーマを変更し、CSSルールを追加した

シンタックスハイライトが見切れるのを防ぐため、テーマをデフォルトのものに変更した。

また、以下のCSS設定を追加した。

/* 本文の横幅を最大限広くとる */
#content-inner {
    width: 100%;
}

設定に際しては、以下を参考にさせていただいた。感謝。

/* https://sunrise033.com/entry/hatena-blog-how-to-hierarchicalize-categories */