PHPSpreadsheetでメモリ食いすぎておちるので、メモリ解放する方法
デストラクトのメソッドがあるのでそのままCallするだけ。
$spreadsheet->__destruct();
デストラクトのメソッドがあるのでそのままCallするだけ。
$spreadsheet->__destruct();
laravelでは Model::pluck()をつかう。
//Groupモデルの場合
Group::pluck('name','id');
や。
Group::pluck('label','group_id');
など先にvalueになる内容 / 後にkeyになるフィールド
//例) 以下の様に取得
1 => 管理者
2 => 一般ユーザー
3 => ゲスト
CakePHPのHash::combineみたいに取得したかった。
CollectionクラスにmapWithKeysがありそれっぽくできる。
MyModel::get([$key,$label])->mapWithKeys(function($item) use($key,$label) {
return [$item[$key] => $item[$label]];
})->toArray();
Command + O (Macの場合)
以下のようにparentの呼び出し+TODOコメントまでついてラクラク。
public function getMiddleware()
{
return parent::getMiddleware(); // TODO: Change the autogenerated stub
}
手打ちだと、1分くらいかかるとするとだいぶ早い。
基本PHPに合わせるが、PHP7以上でないとな感じ(Laravel5.5以上で使いたい)
PHP7.0だと最新は使えないが、現在最終のLTS(Long-term Support)の5.5が使えるのでそこを使う。
希望としてPHP7.1以上で最新を使っていきたい気もする。
PHP7.0 > 7.2であまり大きな変化は無いようだけど、HTMLメール作成でエラーがでて使えないことがあった(原因がプログラムなのかフレームワークなのかは調べてない)
composerでサクッと対象バージョン入れる
//グループの場合によって 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',
//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,
];
たとえば 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,
],
独自ヘルパ関数などをまとめたファイル読み込み
//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);
}
}
prefixなど設定
環境設定で 強制的にショート表記に変更するにチェック
環境設定 > Editor > Code Style > PHP の Other タブで Array Declaration Style の Force showr declaration style にチェックする。
その後エディターで、ショートカット 「Cmd + Opt + L 」で変換されます。
注文(Orders) > 発注書(PurchaseOrders) > 業者(Supplier)がありました。
select条件2のみであればOrdersのHasManyで設定すればよいがselect条件1でエラーとなる。
Orders>PurchaseOrders
Orders>PurchaseOrders>Suppliers
$this->Orders->PurchaseOrders->setSort(['Suppliers.name'=>'asc']);
で動的に設定できます。
(バージョン 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を約2年ちょっと使っていた頃、机の上で少しガタガタするようになった。よく見ると底面の中央が少し膨らんでいました。これは俗にいう妊娠(バッテリー膨張)で底面のアルミボディーが膨らんでしまっているみたい。
問い合わせて機種を伝えたところ、預かっていったんリペアセンターへ郵送する必要があり、1周間ほどかかるとのこと。費用などについてもそこで調べてからとのことでした。
ちょっといろいろ時間もかかるし、大変だなぁと
もしてみる。AppleStoreの問い合わせから「起動または電源」を選んでTELを待つ。
しばらくして折返しの連絡があり、状況を説明する。(底面が膨らんできおり、ガタついている、キーボード、トラックパッド部分はいまのところ大丈夫) 購入日などを調べたところ、3年以内であり無償でバッテリーの交換が行えるということ。 また、
(うーん。。3年過ぎたら有償なの?? バッテリー寿命はともかく、アルミボディーの膨らみはせめて5年位は無償で対応してほしい。)
メインマシンがないと業務的に厳しいので、いったん無償で期間もあと1年ほどは大丈夫なのでいったん修理は保留しました。
さて、無償ではありますが、どうしても郵送などの時間がかかるとのこと。
で、自分でどうにかできないか、地元の修理業者さんではどうだろうと調べてみました。
といった感じでした。県内修理業者さんが早そうなのですが、無償でできるのに数万払うのでなんだか悔しい感じ、自分での交換はトラブルがあった場合が怖いなどから今回は基本Appleのサポートで行くことに。
業務の合間で修理と考えてましたがなかなか合間がなく新しいマシン購入を検討。古い方のマシンが不用になるので、メルカリ/ヤフオクの相場を確認する。
まだ結構いい値段で売却できそうなので、6月のWWDCで新しい機種が出るかを確認して購入するタイミングを決めることとする。
事前情報で可能性が薄いと言われていたとおり、新しいものはなし。
発表直後にAppleStoreの整備済製品を漁っていたところ目当てのスペックのものが残っていたので、その場で発注。以下希望のスペックでしたら、USキーボードだけ断念。
キーボードはほとんど外付け利用が多く、7万円近く安いので断念。
4Kディスプレイのマルチやクラムシェルモードがほとんどなので、GPUが希望通り4GBのRadeon Pro 560があってよかった。カラーはこだわらなかったがスペースグレイでした。
合計で27マソ近く、結構な出費。。。
ということで、再度Appleサポートへ問い合わせ。(土曜の早い時間で申込み後即TEL来ました。)
以前問い合わせていることと、聞いていることをざっくり説明し、本人確認etcの確認時効のみをすませて発送の依頼の話へで翌日の日曜のAMに受け取り依頼。
やまとさんが宅急便PC用の箱を持ってきてくれるので、なにも準備せず筐体の電源だけを切って準備してお渡しするのみ。
翌日のAMにはリペアセンターに到着した旨のメールが着弾、お昼ごろに部品を発注したとの連絡がありました。(修理状況はAppleStoreのマイサポートで随時確認可能)
Webで確認すると「修理状況を確認できません。」の表示、この前の状況が部品発注だったので対応中?なのかな。
お昼頃に修理負えて発送しましたのメール着弾マイサポートページを確認すると発送済。になっておりました。
配送状況を確認すると、夕方にYAMATOへ荷物受付/発送/厚木ゲートウェイベース通過
リペアセンター到着の4日後自宅に配送到着しました。
TELでの予約してから、6日目で届きました。
土(問い合わせ),日(ヤマト集荷),月(到着/検査/部品発注中),火(部品発注中),水(発送),木(空輸中),金(到着)
で、一緒に修理報告書がついてました。
個人PCとかだと割と早い対応で問題ないのですが業務だと約1週間メインPCがない状態はちょっと厳しい感じですね。地元の修理屋さんの技術が良い所があればすこし費用がかさんでもお願いしても良いかもしれません。
今回はこのタイミングで買い替えいたしましたが、約2.5年利用してますので元の値段の半額程度でオークションなどで販売できればまぁそんなにマイナスではないと考えています。
東京とかだと3–4日でいけるのかなぁ。
設定でなんだかドハマリしてしまっていたので、いったんすべてリセットする方向で進めてできたので。
※あくまでうまく行ったケースとしてもメモ。不要な手順や不適切な部分ありましたらご了承ください。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. 設定完了
ハマったときの現象や陥ったことなど
以上、自分用のメモ or なにかしら役に立てばです。
検証のためParallels Desktopを起動しようとすると、アップデートきた、OK,OKアップデートしたらセキュリティー許可しろーと
※他の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を起動
Powered by WordPress & Theme by Anders Norén