PHPSpreadsheetでメモリ食いすぎておちるので、メモリ解放する方法

PHPSpreadsheetでメモリ食いすぎておちるので、メモリ解放する方法

デストラクトのメソッドがあるのでそのままCallするだけ。

$spreadsheet->__destruct();

Laravelで selectタグのオプションに使うリスト取得 (CakePHPの ->list()の様に)

Laravelで selectタグのオプションに使うリスト取得 (CakePHPの ->list()の様に)

laravelでは Model::pluck()をつかう。

//Groupモデルの場合
Group::pluck('name','id');
や。
Group::pluck('label','group_id');
など先にvalueになる内容 / 後にkeyになるフィールド

//例) 以下の様に取得
1 => 管理者
2 => 一般ユーザー
3 => ゲスト

Laravelで、CakePHPのHash::combineみたいに、ネストの配列を取得

Laravelで、CakePHPのHash::combineみたいに、ネストの配列を取得

CakePHPのHash::combineみたいに取得したかった。
CollectionクラスにmapWithKeysがありそれっぽくできる。

MyModel::get([$key,$label])->mapWithKeys(function($item) use($key,$label) {
        return [$item[$key] => $item[$label]];
})->toArray();

PHPStormで親クラスのメソッドをオーバーライドするショートカット

PHPStormで親クラスのメソッドをオーバーライドするショートカット

Command + O (Macの場合)

選択のダイアログ

選択のダイアログ

以下のようにparentの呼び出し+TODOコメントまでついてラクラク。

    public function getMiddleware()
    {
        return parent::getMiddleware(); // TODO: Change the autogenerated stub
    }

手打ちだと、1分くらいかかるとするとだいぶ早い。

Laravel 初期セットアップやることメモ

バージョンを決める。

基本PHPに合わせるが、PHP7以上でないとな感じ(Laravel5.5以上で使いたい)
PHP7.0だと最新は使えないが、現在最終のLTS(Long-term Support)の5.5が使えるのでそこを使う。

希望としてPHP7.1以上で最新を使っていきたい気もする。

PHP7.0 > 7.2であまり大きな変化は無いようだけど、HTMLメール作成でエラーがでて使えないことがあった(原因がプログラムなのかフレームワークなのかは調べてない)

Laravelのインストール

composerでサクッと対象バージョン入れる

デプロイ/サーバー環境セットアップ

  • ステージング/プロダクションのデプロイ設定(いつもはrsync)
  • パーミッションも
//グループの場合によって 770とか
$ chmod -R 777 ./storage
$ chmod -R 777 ./bootstrap/cache
  • .envの設定(ローカル/リモート)
    APP_NAMEとか、APP_ENVとか、DBの設定とか

  • config/app.php設定

//日本化
    'timezone' => 'Asia/Tokyo',
    'locale' => 'ja',
    'fallback_locale' => 'ja',
//ログ設定(config/app.php) ログをdailyに
    'log' => env('APP_LOG', 'daily'),
    'log_level' => env('APP_LOG_LEVEL', 'debug'),
    'log_max_files' => '90',
    
  • app/Providers/AppServiceProvider.php
//Slackへ流すエラーログなど
    public function boot()
    {
        //ログ設定 
        $token = env('SLACK_API_KEY');
        $channel = env('SLACK_API_CHANNEL');
        //Error以上はSlackに流す
        Log::listen(function ($event) use ($token) {
            $monolog = Log::getMonolog();
            $handlers = $monolog->getHandlers();
            $slackHandler = new SlackHandler(
                $token,
                $channel,
                env('APP_NAME'),
                'log',
                false,
                Logger::ERROR,
                false,
                true,
                true);
            array_push($handlers,$slackHandler);
            $monolog->setHandlers($handlers);
        });
    }
    
  • 一旦設定が終わったら簡単に動作するかを見る。

リポジトリ設定

リモートを置く/またはローカルのみ

モデル関連

artisanでモデル/コントローラーをすべて作成。

$ php artisan make:model  Client  -r --controller

カスタムバリデーション

カスタムバリデーションを準備

パッケージ類

//インストール
$ composer require "laravelcollective/html":"^5.5.0" // 今回はlaravel5.5に合わせて5.5.0を指定
$ composer require monolog/monolog
$ composer require spatie/laravel-backup
$ composer require intervention/image
// config/app.phpに追記
    //providers
        Intervention\Image\ImageServiceProvider::class,
        Collective\Html\HtmlServiceProvider::class,
        Spatie\Backup\BackupServiceProvider::class,
    //alias
        'Image' => Intervention\Image\Facades\Image::class,  
        'Form' => Collective\Html\FormFacade::class,
        'Html' => Collective\Html\HtmlFacade::class,
バックアップの設定

//バックアップ設定ファイルを生成
$ php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
→コピーしてと言われるのコピー
$ cp ./vendor/spatie/laravel-backup/config/backup.php ./config/backup.php 

// バックアップ設定ファイル(config/backup.php)を編集→こちらは必要に応じて
'to' => env('MAIL_SYSTEM_ADMIN') とか。

//バックアップのテスト
$ php artisan backup:run --only-db  //DBのみ
→storage/app/Ryunavi/に保存される。
→通知メール設定していたら送信される(.envのメールの設定をたまに忘れる)

ミドルウェア関連

//ミドルウェア作成
$ php artisan make:middleware MyApp
// app/Http/Kernal.phpに追加
    protected $routeMiddleware = [
        'myapp' => \App\Http\Middleware\MyApp::class,
    ];

Auth関連

たとえば user,admin,clientがある場合。

//config/auth.phpに追記、guardsとproviders
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    
        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'client' => [
            'driver' => 'session',
            'provider' => 'clients',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],
------------------------    
   'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'clients' => [
            'driver' => 'eloquent',
            'model' => App\Client::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],    

Helper設定

独自ヘルパ関数などをまとめたファイル読み込み

//composer.jsonのautoloadにfiles追記読み込むファイルHelper.phpを追加して
"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Helper.php"
        ]
    },

//autoloadをダンプ →読み込まれるようになる
$ composer dumpautoload


//app/Helper.phpに独自ヘルパ関数などを定義していく。
if (!function_exists('mb_trim')) {
    function mb_trim($str)
    {
        return trim(mb_convert_kana($str, "s"));
    }
}
if (!function_exists('h')) {
    function h($str)
    {
        return htmlspecialchars($str, ENT_COMPAT);
    }
}
if (!function_exists('h_attr')) {
    function h_attr($str)
    {
        return htmlspecialchars($str, ENT_QUOTES);
    }
}



Route設定

prefixなど設定

PHPStormで、配列の記述フォーマットをarray()から[]ショート表記にする

PHPStormで、配列の記述フォーマットをarray()から[]ショート表記にする

環境設定で 強制的にショート表記に変更するにチェック

環境設定 > Editor > Code Style > PHP の Other タブで Array Declaration Style の Force showr declaration style にチェックする。

その後エディターで、ショートカット 「Cmd + Opt + L 」で変換されます。

環境設定パネル

環境設定パネル

CakePHP3のHasManyに動的にソートを適用する。

CakePHP3のHasManyに動的にソートを適用する。

注文(Orders) > 発注書(PurchaseOrders) > 業者(Supplier)がありました。
select条件2のみであればOrdersのHasManyで設定すればよいがselect条件1でエラーとなる。

select条件1:業者まで繋げない

Orders>PurchaseOrders

select条件2:業者まで繋げる。

Orders>PurchaseOrders>Suppliers

HasManyクラスのsetSort()を使う。

$this->Orders->PurchaseOrders->setSort(['Suppliers.name'=>'asc']);

で動的に設定できます。

すでに既存のSortが設定されている場合。

(バージョン 3.5.17にて確認)
ソースコードをみると、$this->_sortを上書きしているだけのセッターなので、そのまま上書きな感じでした。

/**
 * Sets the sort order in which target records should be returned.
 *
 * @param mixed $sort A find() compatible order clause
 * @return $this
 */
public function setSort($sort)
{
    $this->_sort = $sort;

    return $this;
}

沖縄からMacBookPro 2015 15インチをバッテリー交換に出した。

沖縄からMacBookPro 2015 15インチをバッテリー交換に出した。

MacbookProを約2年ちょっと使っていた頃、机の上で少しガタガタするようになった。よく見ると底面の中央が少し膨らんでいました。これは俗にいう妊娠(バッテリー膨張)で底面のアルミボディーが膨らんでしまっているみたい。

Apple 正規サービスプロバイダのカメラのキタムラ那覇新都心へ連絡。

問い合わせて機種を伝えたところ、預かっていったんリペアセンターへ郵送する必要があり、1周間ほどかかるとのこと。費用などについてもそこで調べてからとのことでした。

ちょっといろいろ時間もかかるし、大変だなぁと

Apple TELサポートへ連絡

もしてみる。AppleStoreの問い合わせから「起動または電源」を選んでTELを待つ。

Apple サポートへのお問い合わせ

しばらくして折返しの連絡があり、状況を説明する。(底面が膨らんできおり、ガタついている、キーボード、トラックパッド部分はいまのところ大丈夫) 購入日などを調べたところ、3年以内であり無償でバッテリーの交換が行えるということ。 また、

  • 正規プロバイダにもちこんでもリペアセンター送りになるのでこちらから修理を申し込んだほうが早く対応できるとのこと。

(うーん。。3年過ぎたら有償なの?? バッテリー寿命はともかく、アルミボディーの膨らみはせめて5年位は無償で対応してほしい。)

でも業務も止められないしいったん保留

メインマシンがないと業務的に厳しいので、いったん無償で期間もあと1年ほどは大丈夫なのでいったん修理は保留しました。

県内の修理業者や、個人での交換

さて、無償ではありますが、どうしても郵送などの時間がかかるとのこと。
で、自分でどうにかできないか、地元の修理業者さんではどうだろうと調べてみました。

  • 県内修理業者さんは2万ちょいで2–3日で対応できるとのこと。
  • バッテリーの交換キットは海外から取り寄せで1万少しはかかる。

といった感じでした。県内修理業者さんが早そうなのですが、無償でできるのに数万払うのでなんだか悔しい感じ、自分での交換はトラブルがあった場合が怖いなどから今回は基本Appleのサポートで行くことに。

なかなか合間もなく新しいマシンの購入を決意。

業務の合間で修理と考えてましたがなかなか合間がなく新しいマシン購入を検討。古い方のマシンが不用になるので、メルカリ/ヤフオクの相場を確認する。
まだ結構いい値段で売却できそうなので、6月のWWDCで新しい機種が出るかを確認して購入するタイミングを決めることとする。

2018.06のWWDCでの新しいMacbookPro発表はなし

事前情報で可能性が薄いと言われていたとおり、新しいものはなし。
発表直後にAppleStoreの整備済製品を漁っていたところ目当てのスペックのものが残っていたので、その場で発注。以下希望のスペックでしたら、USキーボードだけ断念。

  • ○15インチ
  • ○Corei7
  • ○SSD : 512GB
  • ○メモリ : 16GB
  • ○GPU : Radeon Pro 560
  • ☓キーボード : US

キーボードはほとんど外付け利用が多く、7万円近く安いので断念。
4Kディスプレイのマルチやクラムシェルモードがほとんどなので、GPUが希望通り4GBのRadeon Pro 560があってよかった。カラーはこだわらなかったがスペースグレイでした。

合計で27マソ近く、結構な出費。。。

旧マシンを修理に発送

ということで、再度Appleサポートへ問い合わせ。(土曜の早い時間で申込み後即TEL来ました。)
以前問い合わせていることと、聞いていることをざっくり説明し、本人確認etcの確認時効のみをすませて発送の依頼の話へで翌日の日曜のAMに受け取り依頼。

翌日(日曜)のAMのヤマトさんが受け取りに

やまとさんが宅急便PC用の箱を持ってきてくれるので、なにも準備せず筐体の電源だけを切って準備してお渡しするのみ。

翌々日(月曜) リペアセンターに到着、検査、部品発注中

翌日のAMにはリペアセンターに到着した旨のメールが着弾、お昼ごろに部品を発注したとの連絡がありました。(修理状況はAppleStoreのマイサポートで随時確認可能)

到着2日後修理状況(水曜)

Webで確認すると「修理状況を確認できません。」の表示、この前の状況が部品発注だったので対応中?なのかな。

到着2日後修理状況(水曜)

到着2日後修理状況(水曜)

到着2日後、修理完了して発送(水曜)

お昼頃に修理負えて発送しましたのメール着弾マイサポートページを確認すると発送済。になっておりました。

マイサポートページ

マイサポートページ

配送状況を確認すると、夕方にYAMATOへ荷物受付/発送/厚木ゲートウェイベース通過

配送状況

配送状況

修理/配送完了

リペアセンター到着の4日後自宅に配送到着しました。
TELでの予約してから、6日目で届きました。

土(問い合わせ),日(ヤマト集荷),月(到着/検査/部品発注中),火(部品発注中),水(発送),木(空輸中),金(到着)

修理報告書

で、一緒に修理報告書がついてました。

修理報告書

個人PCとかだと割と早い対応で問題ないのですが業務だと約1週間メインPCがない状態はちょっと厳しい感じですね。地元の修理屋さんの技術が良い所があればすこし費用がかさんでもお願いしても良いかもしれません。

今回はこのタイミングで買い替えいたしましたが、約2.5年利用してますので元の値段の半額程度でオークションなどで販売できればまぁそんなにマイナスではないと考えています。

東京とかだと3–4日でいけるのかなぁ。

QNAPのNASでTimeMachineがうまく設定できなかった(AFP)

QNAPのNASでTimeMachineがうまく設定できなかった(AFP)

設定でなんだかドハマリしてしまっていたので、いったんすべてリセットする方向で進めてできたので。
※あくまでうまく行ったケースとしてもメモ。不要な手順や不適切な部分ありましたらご了承ください。m(_ _)m

1. Mac側でQNAPとの接続を解除 
2. BackupStationのTime MachineのサポートをOFF
3. ControlPanel > Network & File Services > Win/Mac/NFS で、Apple NetworkingをOFF
4. ControlPanel > System > StrageManagerでディスクをフォーマット(EXT4)
5. ControlPanel > Network & File Services > Win/Mac/NFS で、Apple NetworkingをON
6. BackupStationのTime MachineのサポートをON (※たまにパスワードの設定がうまくいかない事があり、何度か設定したことがあった)
7. Mac側からQNAPに既存のユーザー("TimeMachine"でない)で、接続(smb::にてつなぎました。AFPでも良いのかも)
8. Mac側のシステム環境設定でディスクを選択、TimeMachineアカウントで接続(Connect)
9. 設定完了

ハマったときの現象や陥ったことなど

  • AFPでQNAPへ繋がらない
  • TimeMachineが見えない
  • SMBを使ってディレクトリごとでの設定と混同する
  • BackupStationのTimeMachineのパスワードがうまく反映されない

以上、自分用のメモ or なにかしら役に立てばです。

OSX High Sierraで、Parallels Desktop13 がアップデートできなかった。

検証のためParallels Desktopを起動しようとすると、アップデートきた、OK,OKアップデートしたらセキュリティー許可しろーと

ボタン押せないorz..

ボタン押せないorz..

※他のKarabinerとかQuickeyとかBetterTouchToolはセーフモードで起動してできたけど。Parallels自体がセーフモードで起動できなかったので。

で、FacebookからParallelsさんに問い合わせ、数分で反応具体的な方法をいただく。

Parallels desktopのinternational Gmbhの許可をMacからの権限所得失敗が発生してる問題となります。
■Parallels international Gmbhの許可に権限与えるための操作手順

※ご自身より難しいの場合は是非ともAppleのサポート窓口にご相談しながら、実施お願いいたします。
 Macのハイスキル操作となりますが、本窓口では情報詳しくお持ちではございませんが、ご理解いただければと存じます。

解決手順

1.リカバリモードで起動(Cmd+R)

2.言語選択を選ぶ > メニューからターミナル起動し以下のコマンド実行

//SIP(System Integrity Protecton) を有効
csrutil enable
//Parallelsに'kext-consent'を許可(4C6364ACXTはアプリケーションIDかな?)
spctl kext-consent add 4C6364ACXT

3.メニューから再起動して、Parallelsを起動

無事起動できました。

Parallels13

Parallels13

Page 10 of 46

Powered by WordPress & Theme by Anders Norén