雑多なブログ

音楽や語学、プログラム関連の話題について書いています

スイスポのクラッチペダルストッパー交換について

結論を先に言うと、自分で車を調整できる人ならやってみても良いけど、公道走行するなら注意が必要な改造だと思われる。

Youtubeで、スイスポ(ZC33S)に標準で付いているクラッチペダルストッパーを少し厚みのある、スズキ純正の「09321-06033」に交換するちょっとした改造について紹介されていた。これによりクラッチのフィーリングが改善して運転しやすくなるという話。

自分も好奇心で試してみたけど、公道走行では危険だと感じた。 一見してクラッチストロークが浅くなってクラッチ操作が楽になるように見えるけど、遊びが減る分通常のクラッチ操作自体も無意識に浅くなるように感じた。そもそも、クラッチが切れるポイントまで踏めば良いのだからベタ踏みする必要はなく、ストロークの深さはあまり関係ないとは思う。

あと、他の方も言及されていたけどクラッチの切れ方が中途半端になり機構への負荷がかかるのではないかとの指摘もあった。

以上のことから、ある程度自分で車を調整できる人以外は手を出さないほうが良い系統の改造と思われる。クラッチペダルストッパーは誰でも簡単に交換できるものの、なんとなく交換するとトラブルの原因になるものと思われる。自分はその辺疎いので変なトラブルを起こしたくないので、試走してみて危ないと感じてすぐに元に戻した。

Youtuberの意見はほどほどに・・・

swiftを触ってみた。

swiftを使ってちょっとしたプログラムを書いてみたので、単一ファイルのビルド方法についてメモ。ソースから直接実行することもできるので、小さいコードの確認はビルドせずに実行すれば良さそう。

実行環境

  • macOS 12.7.4 (Monterey)
  • Xcode14.2 (14C18)
  • Apple Swift 5.7.2

ビルドと実行

即時実行

swift filename.swift

実行ファイル作成

# 実行ファイル作成
swiftc filename.swift
# 実行
./filename

PHPのサポート期間2024年編

2024年8月1日時点でのPHPの各バージョンのサポート期間について確認しました。

なお、PHP公式のサポート期間が終了している場合でもOSディストリビューション毎にバックポートは適用されている事がありますので、そちらも併せて確認されることをお勧めします。

バージョン サポート期限
PHP8.1 2025/12/31
PHP8.2 2026/12/31
PHP8.3 2027/12/31

古いバージョンのPHPサポート終了日

バージョン サポート期限 最新バージョン
PHP7.0 2019/01/10 7.0.33
PHP7.1 2019/12/01 7.1.33
PHP7.2 2020/11/30 7.2.34
PHP7.3 2021/12/06 7.3.33
PHP7.4 2022/11/28 7.4.33
PHP8.0 2023/11/26 8.0.30

公式の情報はこちらから
PHP: Supported Versions

しまむらの子ども服のコラボ商品がSNSで炎上

衣料品チェーンのしまむらグループが展開する、子ども関連の専門店「バースデイ」が販売開始した商品で騒動が起きているようです。

男性(パパさん)差別的なメッセージが服に書かれていてそれが大炎上したようです。

SNSに投稿された写真を見たところ、「パパは全然面倒見てくれない」、「パパはいつも寝てる」、「ママがいい」など、家事育児に非協力的な男性を揶揄するようなメッセージのように感じました。実際には家事育児に積極的に参加して頑張る男性もいることでしょう・・・

もちろん、同じシリーズすべての商品でネガティブなメッセージばかりが使われているわけではなくて面白くてくすっとするメッセージのものもあるとは思いますが、ネガティブなものが悪目立ちしてしまいましたね。

PHPでファイル一覧を取得する方法

PHPでファイル一覧は下記の方法で取得できます。 改めて調べてみると色々な方法がありますね。

  • opendir, readdir
  • scandir
  • DirectoryIterator
  • glob

opendir, readdir

opendirディレクトリハンドルを取得し、readdirディレクトリ内のディレクトリとファイルを取得します。取得するファイルの順番は、ファイルシステムに格納されている順序に依存します。

なお、... がリストに含まれるため、これらを除外する必要があります。

$dh = opendir('.');

if ($dh) {
    while (($file = readdir($dh)) !== false) {
        // `.` や `..` を除外します
        if (in_array($file, ['.', '..'])) continue;

        // ファイル以外は除外します
        if (!is_file($file)) continue;

        $files[] = $file;
    }
    closedir($dh);
}

print_r($files);

scandir

対象パスのファイルとディレクトリのリストを取得します。 リストに ... が含まれるため、これらを除外する必要があります。

$result = scandir('.');
print_r($result);

デフォルトでは、リストはアルファベット順に昇順で並べられます。 異なる並び順にしたい場合は、第二引数に以下のオプションを指定します。

SCANDIR_SORT_DESCENDING ... アルファベットの降順
SCANDIR_SORT_NONE ... ソートせずに出力する

glob

指定したパターンにマッチするファイルやディレクトリのパスを返します。 以下の例では、カレントディレクトリ内の.txtもしくは.pdfに該当するファイルを取得しています。

print_r(glob('*.{txt,pdf}', GLOB_BRACE));

一定のルールで命名されたファイルやフォルダのリストを取得する場合に便利な関数です。なお、マッチしたパスのリストを一度にまとめて取得するため、ファイルやフォルダの数が多い場合は、 DirectoryIterator を使うと良いでしょう。

DirectoryIterator

対象パス内のファイルとフォルダのリストをイテレーターを使って取得します。一件ずつ展開するためメモリの消費が抑えられます。

$itr = new DirectoryIterator('.');
$files = [];

foreach ($itr as $fileinfo) {
    if (!$fileinfo->isFile()) continue;
    $files[] = $fileinfo->getFilename();
} 
print_r($files);

PHPで配列を結合する方法まとめ

今回はPHPで配列を結合する方法をまとめました。

目次

配列を結合する方法

PHPでは下記の方法で配列の結合ができます。

  • array_merge を使う
  • array_merge_recursive を使う
  • + 演算子を使う
  • 配列のアンパックを使う

array_merge を使う

複数の配列を結合する場合に array_merge が使えます。

結合する配列に重複するキーがある場合は、後に指定した配列の要素が優先されます。

$arr1 = ['a' => 11, 'b' => 22, 'c' => 33];
$arr2 = ['c' => 333, 'd' => 44];
$arr3 = array_merge($arr1, $arr2);
var_dump($arr3);

実行結果

array(4) {
  ["a"]=>
  int(11)
  ["b"]=>
  int(22)
  ["c"]=>
  int(333)
  ["d"]=>
  int(44)
}

数値がキーの要素
数値がキーの要素は全て別物として取り扱われ、新しい配列では数値キーが 0 から始まる連番に置き換えられます。

なお、数値キーの内容に意味がある場合は、array_mergeの使用は避けましょう。

$arr1 = [1, 2, 3];
$arr2 = [1, 2, 5];
$arr3 = array_merge($arr1, $arr2);

var_dump($arr3);

実行結果

array(6) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(1)
  [4]=>
  int(2)
  [5]=>
  int(5)
}

array_merge_recursive を使う

複数の配列を再起的に結合する場合に array_merge_recursive が使えます。

キーが重複していた場合は、値は無視されずにキーの値は配列にまとめられます。

$arr1 = [
    'a' => 'orange',
    'b' => 'red',
];

$arr2 = [
    'b' => 'green',
    'c' => 'white',
];

実行結果

array(3) {
  ["a"]=>
  string(6) "orange"
  ["b"]=>
  array(2) {
    [0]=>
    string(3) "red"
    [1]=>
    string(5) "green"
  }
  ["c"]=>
  string(5) "white"
}

ネストした配列の場合もこの通り結合できます。

$arr1 = [
    'a' => 'orange',
    'b' => 'red',
    'c' => [
        'x' => 'blue',
        'y' => 'gold',
    ],
];

$arr2 = [
    'b' => 'green',
    'c' => [
        'y' => 'pink',
        'z' => 'white',
    ],
];

$arr3 = array_merge_recursive($arr1, $arr2);
var_dump($arr3);

実行結果

array(3) {
  ["a"]=>
  string(6) "orange"
  ["b"]=>
  array(2) {
    [0]=>
    string(3) "red"
    [1]=>
    string(5) "green"
  }
  ["c"]=>
  array(3) {
    ["x"]=>
    string(4) "blue"
    ["y"]=>
    array(2) {
      [0]=>
      string(4) "gold"
      [1]=>
      string(4) "pink"
    }
    ["z"]=>
    string(5) "white"
  }
}

ネストした配列を結合処理は複雑になり見通しが悪くなりがちです。こういったケースでは事前に配列の構造を明確に定義しておくことが大切です。

+ 演算子を使う

+ 演算子を使って配列を結合することもできます。
両方の配列に存在するキーは左側の配列要素が優先され、右側の配列にあった同じキーは無視されます。

キーを省略して定義した配列の結合
$arr1と同じインデックスを持つ、$arr2の要素は無視されています。要素番号を数えれば分かるものの、少し分かりづらいですね。

$arr1 = [1, 2];
$arr2 = [3, 4, 5, 6];

$arr3 = $arr1 + $arr2;

実行結果

array(4) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(5)
  [3]=>
  int(6)
}

キーを指定して定義した配列の結合
このように明確にキーを指定した配列であれば、どの要素が結合されるのか明白ですね。

$arr1 = ['a' => 1, 'b' => 2, 'c' => 3];
$arr2 = ['c' => 333, 'd' => '99'];
$arr3 = $arr1 + $arr2;

var_dump($arr3);

実行結果

array(4) {
  ["a"]=>
  int(1)
  ["b"]=>
  int(2)
  ["c"]=>
  int(3)
  ["d"]=>
  string(2) "99"
}

配列のアンパックを使う

配列の前に ... を付けると、配列の値を展開(アンパック)させることができます。PHP7.4以降で利用可能です。

$arr1 = [1, 2, 3];
$arr2 = [3, 4];
$arr3 = [...$arr1, ...$arr2];

var_dump($arr3);

実行結果

array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(3)
  [4]=>
  int(4)
}

まとめ

PHPの配列結合の方法についてまとめてみました。
こうしてまとめてみると、PHPには色々なやり方がありますね。それぞれの特徴を覚えて、活用していきましょう。

PHPのアロー関数のポイントまとめ

最近PHPの言語仕様について改めて勉強しています。
今回はPHPのアロー関数についてまとめてみました。

目次

アロー関数とは

アロー関数は無名関数を簡潔に書ける文法です。
PHP7.4で追加されました。

アロー関数の記述方法

アロー関数の記述方法は次のとおりです。

  • function の代わりに fn という記述を使う
  • 波括弧 {} は使用できない
  • return は使用できない

記述例

// アロー関数
$a = fn($x) => $x + 10; 

// 無名関数
$b = function($x) {
   return $x + 10;
};

無名関数では値を返す際、returnを使用しますが、アロー関数の場合は右辺の式の計算結果が使用されます。

アロー関数の仕様

アロー関数の仕様としては次の通りです。

  • 変数を値でバインドする
  • "use" を使わずに親スコープの変数が使える

スコープ外の変数のバインドがポイントになっていますね。
下記の例では、アロー関数の親スコープで定義されている変数 $x は、無名関数で use($x) を実行している状況とほぼ同じことになります。

$x = 10;
fn($a) => $a + $x;

なお、アロー関数では値でバインドしているため、アロー関数の外のスコープの変数の値は変更できません。アロー関数の外のスコープの値を変更したい場合は無名関数を使うと良いでしょう、。

アロー関数の使いどころ

アロー関数の使いどころとしては、array_mapなどのように引数に関数を受け取って処理を行うような場合に簡潔に表記したい場合などが挙げられます。 ただし、ロジックが複雑な場合は別途関数を定義して使用す流のが良いでしょう。