iPhoneのAppleから届くダンボールのビニールの梱包方法
- 2020年11月22日 6:00 PM
- 未分類
中古のiPhoneをヤフオクで売ろうと思い、新しいiPhoneが届くときに使われていたダンボールを、梱包のためにそのまま使うおうとしたのだが、梱包方法がよくわからなかったのでメモ
どうやって、ビニールを固定していたのっていう・・・



【ロマサガRS】推しポイントとGrade変更について
- 2020年8月30日 4:40 PM
- ゲーム
推しポイントとは
ロマサガRSでは、2020年8月のアップデートで、「推しポイント」のシステムが新しく追加されました。
推しポイントとは、戦闘にキャラクターを参加させることで戦闘が終わるたびにキャラごとに溜まっていきます。
推しポイントを溜めることで、キャラのGradeを変更し、見た目が変化していきます。
Gradeの変更方法
Gradeの変更方法は、ホーム画面の右上のメニュー→キャラ一覧から、Gradeを変更したいキャラを選択し、「Grade変更」を選択することで、変更することができます。

Gradeは、500→2500→1万→3万→15万と、最大でGradeが6まであります。
一番上のGradeまでいくには15万というのはかなり大変ですね。
なお、デフォルトで、キャラごとに「最上位のGradeに設定」という設定になっているので、Gradeが一定ポイント貯まると自動的にGradeが上がるようになっています。
この設定はキャラごとに上記の画面で変更が可能なので、もし特定のGradeに戻したければ変更可能です。
AppleのHomepodでYoutubeが再生できないトラブルの対処法
- 2020年8月9日 5:56 PM
- apple
AppleのHomepodで、Youtubeから音楽を再生しようとしたときに、iPhoneからだとうまく再生できない問題がありました。
以前はできていて、Apple Musicは問題なく再生できるのに、Youtubeは何故?という。
解決方法
結論からいうと、Youtubeを再生しようとしているiPhoneが接続しているWi-Fiのネットワークと、Homepodが接続しているネットワークが異なるために発生している問題でした。
接続しているネットワークを同じに変更することで、問題なく再生できました。
ラストオブアス2(Last of Us2)のFEDRAの意味
- 5:47 PM
- ゲーム
ラストオブアス2では、ゲーム中に「WLF」と「FEDRA」という組織名が度々登場します。
WLFは「ワシントン解放戦線」ということで意味が分かるのですが「FEDRA」って何?と進めてもよく分からなかったので調べてみました。
下記の解説にもある通り、アウトブレイクが発生してからのアメリカを軍の力によって強制的に統治しようとしている政府組織に近いイメージです。
それに対して反抗しているのが本作で登場するWLFや、その他の様々な小反乱集団というかんじですね…。
FEDRAとは?
The Federal Disaster Response Agency(日本語的には連邦災害対応局)(FE.DRA)は、The Last of Usで取り上げられ、The Last of UsパートIIで言及されている敵対的な背景派閥です。FEDRAは、隔離地域の統治機関として軍隊と多かれ少なかれ合併しているようです。
実際のFEDRAの戦闘員はゲーム中に遭遇することはありませんが、兵士や起草された民間人労働者など、彼らの援助のもとで働いているさまざまな個人が見られます。FEDRA は、アウトブレイク前の残党、国防や、疾病コントロールセンターなどのアメリカ政府最後の残りの一つです。
歴史
アウトブレイク発生後
2013年9月に冬虫夏草の脳感染症(CBI)が発生した後、連邦災害対応局(FEDRA)が軍を統治し、戒厳令を宣言し、官僚を権力から排除しました。真菌を封じ込めるため、FEDRAボストンやピッツバーグなどの主要都市内の大規模な検疫ゾーンにすべての感染していない民間人を軍に移動させた。
FEDRAのもとでの米国は警察国家となり、ゾーンに対する絶対的な権力を行使して、民兵のファイアフライの誕生を促した。 ファイアフライは、FEDRAを倒し、発生前の政府を回復させ、病気の治療法を見つけることに専念するグループ。
「ラストオブアス」のイベントに至るまでの数年間、FEDRAと米軍は、食料不足の増加、Fireflyの攻撃、およびさらなるCBIの発生により、さまざまな隔離ゾーンの管理を維持するのに苦労しました。
ファイアフライは、より良い社会を確立するためにFEDRAからいくつかの隔離地域の制御に取り組みましたが、この結果はめったに達成されませんでした。たとえば、ピッツバーグでのファイアフライ主導の反乱は最初は成功しましたが、その住民は最終的にハンターになりました。もう1つの例はボストンで、ファイアフライは米軍によって単に打ち負かされ、最終的に強制退去させられました。都市戦争と時折のテロ攻撃に従事した反政府勢力のほとんどが小集団です。
発生から20年後の2033年までに、FEDRAと軍は検疫地帯のほとんどすべてを放棄し、彼らは鉄のグリップで握っていたボストンなど全国のほんの一握りに残った。
特にボストンは、あらゆるレベルの兵士と検問所、監視塔とサーチライトを備えた高さ30フィートのコンクリートの壁など、非常に高いレベルのセキュリティを備えていました。これは、鉄格子と一握りのコンクリートの壁だけが上にあるように見えるピッツバーグゾーンとは対照的です。 FEDRAによって制御されていない残りの無傷地帯は、ホタル、ハンター、および独立した民間人の混合物によって制御されました。
FEDRAは、隔年で、検疫地域の内部と外部の両方で職務を遂行するように民間人を起草します。おそらく、検疫ゾーン内に居住する民間人は、その数を強化するために軍に徴兵される可能性があります。FEDRAは、軍事搭乗も維持しています。幼い頃に子供たちが兵士になるように訓練されている学校。発生の早い段階で、住民によって書かれた手紙が隔離ゾーンの間に届けられる可能性がある。これが続くかどうかは不明。
ラスト・オブ・アスのイベント
ラストオブアスの時代までに、FEDRAはまだボストンを支配しており、ファイアフライとの戦いで優位に立っているようです。少数のゾーンしか支配していませんが、強力であり、残党を支配していますボストン検疫地帯を脱出し、国会議事堂に到着しようとするときに、ジョエル、エリー、テスを追跡するために後者を派遣します。FEDRAは、ジョエルが見ることができるさまざまなチラシと有益な文書を作成します。ボストンの多くの居住者はFEDRAのルールを嫌い、彼らを侮辱するグラフィティの量とそのポリシーから判断しています。
ラスト・オブ・アス:パートIIのイベント
2038年までに、FEDRAはシアトル検疫地帯を放棄して久しくなりました。第2作目ではFEDRAの生存メンバーに遭遇しませんでしたが、他の生存者が残した遺物で頻繁に参照されています。さらに、FEDRAと軍はニューメキシコ、「レイヴンズ」と呼ばれる反乱組織との戦い。
トリビア
- FEDRAという名前は、実際の連邦緊急事態管理局(FEMA)に似ています。
- FEDRA関係者についての情報はほとんどありません。ゲームのイントロでFEDRAのスポークスパーソンが「官僚は権力を失っていた」と語っています。米国連邦検事総長はFEDRAに所属している可能性もあり、新聞の切り抜きで言及されています。
- FEDRAは、ミリタリーパンフレットでの感染の4つの段階を特定し、他の情報とともに、感染者に関する詳細を軍に提供します。
- また、FEDRAはCEDAの左4死者とは正反対のように見えることも注目に値します。それぞれのゲームでは、両方とも、発生を阻止しようとしている政府機関の役割を果たします。左4死者では、CEDAの平和主義により政策は、アウトブレイクを封じ込めるのに非常に非効率的であることが示されています、それは軍が彼らの作戦を引き継ぐことにつながります。これは、FEDRAが非常に攻撃的で比較的効果的である組織(少なくとも最初は)であるThe Last of Usと対照的です。 20年後も、軍の全面的な支援を受けています。
[Cakephp3】validationとbuildRulesの違いや使い分けについて
Cakephp3のValidationとBuildRulesについての記事です。
Cakephp3ではフォームのバリデーション(エラーチェック)はモデルで行われますが、エラーチェックの方法に、validationと、BuildRulesの2パターンがあります。
この違いについて解説したいと思います。
まずvalidationについてですが、基本的にmodelのvalidationDefaultメソッドの定義していきます。一般的なエラーチェックはこちらに定義していくパターンが多いと思います。
BuildRulesは、validationメソッドとは別に定義していきます。
通常のvalidationとは記述方法が微妙に違うので、そこは公式サイトを見て確認してください。
それで、この2つの何が違うのかについてですが、バリデーションが実行されるタイミングです。
通常のvalidationは、Controller側でnewEntityやpatchEntityを実行するタイミングで行われます。
これに対して、BuildRulesは、モデルからsaveメソッドを実行するタイミングで行われます。
この2つのどう使い分けるかというと微妙なところがあって私も完全には理解してないのですが、例えば日付を比較するようなエラーチェックを入れる場合、Build Rulesのほうに追加すると便利です。
なぜなら、日付を比較するようなエラーチェックの場合、そもそも入力値が日付でなかったりする場合、エラーチェックの処理の途中で日付でないのでエラーになってしまったりして、データが「日付である」という前提を担保することが難しいわけです。
これを、Validationのほうに日付のエラーチェックを定義しておいて、日付データの比較はBuiled Rulesのほうに定義しておけば、日付でない場合はpatchEntityのタイミングでエラーになってsave時のBuild Rulesまで処理が進まないので、内部的な処理で日付がどうこうみたいな処理を書く必要がなくなります。
他にもあるかもしれませんが、私の理解ではそんなところです。
PostgresSQLのTriggerで、insertする値をINSERT BEFOREで計算する
- 2020年3月31日 12:26 PM
- PostgreSQL | 技術系
関わっていた案件で、PostgresSQLのTriggerを使って、Insertする特定のカラム値を、TriggerのInsert Beforeを使って計算して挿入するというケースがありました。
Qiitaの以下の記事がわかりやすかったです。
PostgreSQLでトリガを作成し、同一テーブル内に値を追加する
https://qiita.com/grassfield/items/60fad9c1d4a8d205bff3
CREATE OR REPLACE FUNCTION culc_totalworktime() RETURNS trigger AS $BODY$ BEGIN NEW.勤務時間 := NEW.終了時刻-NEW.開始時刻-NEW.休憩時間; -- 解説 RETURN NEW; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION culc_totalworktime() OWNER TO postgres;
上記のようなかんじで値を返すトリガを作成して
CREATE TRIGGER totalworktime_trg BEFORE INSERT OR UPDATE ON 勤務実績 FOR EACH ROW EXECUTE PROCEDURE culc_totalworktime();
上記のようにINSERT BEFOREでトリガを呼び出してやれば、カラムに計算された値が挿入されました。
kusanagi+nginxでall-in-one wp migrationのインポートが100%で止まる対処法
kusanagiのWordPress実行環境で、all-in-one wp migrationを使ってサイトのインポートをしていたところ、100%まで進んだところで止まってしまい、それ以上進まなくなるという状況になってしまいました。
原因について調べてみたのですが、まずはサーバのエラーログを見てみたところ、以下のようなエラーが出ていました
client intended to send too large body: 65213411 bytes, client
これは、postしたデータサイズが設定を超えていたのではじかれているという内容みたいです。
サーバはnginxを使っていたので、以下のように設定を変更しました
該当のサーバのnginxの設定ファイル〇〇.confを編集します
client_max_body_size 16M;
調べたところ、デフォルトでは自分が使っているサーバでは上記の設定だったので、ひっかかってエラーになっていたみたいです。
client_max_body_size 100M;
上記のように上限を変更し、nginxを再起動することで無事インポートできるようになりました。
2019年10月1日の消費税増税対応メモ
- 2019年10月1日 8:25 PM
- 雑記
2019年10月1日の消費税関連の対応で、今後また消費税増税になったときのためにメモしておく。(何年後になるか分からないけど・・・)
やった作業
item Robot、EC-CUBE、楽天、Yahooショップとして稼働しているECサイトの消費税対応。
当日の作業
Yahooは勝手に変わってくれるとのことだったので、item Robot、楽天、EC-CUBEのサイトの更新。
item Robotの更新は楽。一括更新というのがあったので、税込みで一括で対応が終わった。
EC-CUBEも楽。SQLを準備しておいて実行するだけ。5分で終わったが、SQLの失敗が怖かったので、事前に十分にテストしておきつつ、データベースのバックアップは重要。
問題は楽天だった・・。
まず、item Robotから価格更新用CSVというのをダウンロードしてアップしてみると・・・。
エラーがでまくり。ろくに更新できない。
これには焦った・・・。「価格更新用CSV」って何なのよ。エラーが出て更新できないじゃん。何のための価格更新用CSVなのよ。
そして、item Robotのほうで色々試行錯誤してみて、必要な形式のCSVをCSVダウンロード項目設定から設定して何とかダウンロードすることに成功。
アップロードして、これで勝つる・・・!!
やっぱりけっこうエラーが出て撃沈・・・。
何なのよ楽天。エラーチェックが面倒すぎるんだよ。価格更新するだけなのになんで関係ない変なところでエラーがかかるのよ。いや、8割方は変更できたけど、2割くらいいろんなエラーが出て失敗してるし。
そこで作戦を変更。
事前に楽天の価格更新用のCSVをバックアップとしてRMSからダウンロードしておいたので、それを編集して更新をかけにいくことに。
しかし、またエラーと格闘。
しかも、商品件数が多いのもあってか、CSVをアップして結果が帰ってくるのに1時間以上かかる。
エラーが出てリトライするのに1時間半かかるとは。
そうやって格闘しているうちに朝になる。すでに消費税対応作業開始から6時間以上が経過。
困った、、、このままでは会社行くまでに終わらないよ!!
しかし、神が手を差し伸べてくれたのか、家を出るぎりぎり直前で30件を除いてアップ完了。その30件だけはお客さんに報告し、作業完了。
楽天がこんなに苦労するとは思いませんでした。
しかし、後で気がついたこととしては、そもそもお客さんサイトではitem Robotと楽天の価格が違う商品もあったので、最初からitem Robotから楽天にアップする流れは間違えていた。最初から楽天からダウンロードした価格変更用CSVをダウンロードし、それを上書きする作戦でいけばよかった。
今回の反省
- 楽天のめんどくささをなめてた。
- CSVは楽天からダウンロードして楽天にアップ
- アップできるCSVフォーマットの検証はテスト商品で試してみて事前に要検証。
CakePHPのFlashComponentについて
CakePHPのFlashComponentについての解説です。
公式サイトでは以下のページに解説があります。
公式サイトの解説が分かりにくいので、自分流の解釈ですが、FlashComponentは、特定のメッセージをサイトで表示するのに使います。
Sessionに表示するデータを保存して、画面遷移後に表示することが可能です。
普通にエラーメッセージを表示する場合と比較すると、表示するメッセージを保存して、画面遷移後の表示に使う事ができる特徴があります。
使い方
Controllerで以下の定義
public function initialize() {
parent::initialize();
$this->loadComponent(‘Flash’); // Include the FlashComponent
}
表示したいデータを以下のように使う。
//成功した場合出力。リダイレクト後のページで表示される
successやerrorなどのテンプレートは、/sec/Template/Element/Flash以下にあるので追加や編集も可能。
$this->Flash->success(__(‘Your article has been saved.’));
$this->Flash->error(__(‘Unable to add your article.’));
テンプレートの以下の記述の場所にFlashメッセージが表示される
<?= $this->Flash->render() ?>
CakePHPのLoadComponentについて
CakePHPのLoadComponentについての解説です。
LoadComponentメソッドは、Controller内で実行することができ、あらかじめCakePHPの準備されているComponentを呼び出すことができます。
Componentとは、機能のようなもので、メソッドのかたまりのようなものです。
一般的なプログラムでのライブラリ読み込みのようなものと考えればよいでしょう。
Componentをコントローラで使用する場合は、initializeメソッドの中でLoadComponentを使って該当のComponentを呼び出します。
読み込むことができるComponentには以下の種類があるので、詳細は以下のそれぞれの記事を参照とのことです。
- AuthComponent (4.0.0で撤廃。プラグインに置き換えられる。)
- クッキー (3.5.0で撤廃。ServerRequestで利用できる)
- クロスサイトリクエストフォージェリ (3.5.0で撤廃。ミドルウェアに置き換えられる)
- フラッシュ
- セキュリティ (FormHelperを使う必要あり)
- ページネーション
- リクエストハンドリング
CakePHPのaddBehaviorについて
CakePHPのaddBehaviorメソッドについての解説です。
CakePHPのチュートリアルを進めていると、Tableクラスで以下のような記述があります。
class ArticlesTable extends Table { public function initialize(array $config) { $this->addBehavior('Timestamp'); } }
上記の意味がわからなかったのですが、調べてみると以下のような記述がありました。
デフォルトの設定は以下のようになっています:
- 新しく Entity を保存するとき、
created
とmodified
に現在の日時を設定します。 - Entity を更新したとき、
modified
に現在の日時を設定します。
上記のように宣言することで、対象のテーブルの項目「created」と「modified」が、データが作成されたときにタイムスタンプが更新されるようになる他、データが更新されたときにmodifiedの項目が自動で更新されるようになるということです。
AWSで何も使ってないのに課金される問題に対処
AWSの試用期間中で無料期間中にいろいろと試しているのですが、インスタンスを使用後に削除したのに、請求で料金がチャージされているのが謎でした。
ダッシュボードで利用状況を確認しても、利用しているEC2インスタンスは存在していないのに、EC2インスタンスに対して料金がチャージされていっているのです。
原因について調べていたところ、原因が判明しました。
AWSのダッシュボードの右上で、AWSのロケーション(米国東部とかいろいろある)を変更できますが、現在のロケーションでなく、別のロケーションに存在していました。
そのため、現在のダッシュボードに利用しているリソースが存在していないけど料金がチャージされているという場合、ロケーションを1つずつ変更しつつチェックして確認することで見つかる場合もあると思います。
Laravelとcakephpの違い
- 2019年6月5日 5:38 PM
- 未分類
phpのフレームワークであるLaravelとcakephpの違いについてのメモです。
共通点
MVCアーキテクチャ(Model-View-Controller)
違い
テンプレート記法
Laravelはbladeテンプレートで、cakephpは.ctpとなっていて、テンプレートの記法が異なっています。
Laravelのほうが独自な記法なかんじで、cakephpは普通のphpの構文に近い(htmlとphpのミックス)感じです。
コマンドラインインターフェース(CLI)
コマンドラインインターフェースが、Laravelはartisan、cakephpはbakeとなっていて、コマンドが違います。意味としてはほとんど同じです。
URL規則、ルーティング
Laravelは、サイトのURLとそれに対応して実行されるコントローラーはroute.phpで管理されますが、Cakephpは基本的には命名規則で決定され、ルーティングはおまけといったかんじです。
Vue.jsで、v-forディレクティブの:keyの意味
Vue.jsで、Vueオブジェクトのデータをループさせるときに、v-forディレクティブを使用します。
<li :v-for=”変数 in Vueオブジェクトのデータ名”>{{ 変数.データ名 }}</li>
上記のような感じで使いますが、いろいろなサイトでコードのサンプルを見ていて、上記のような書き方だけのときもあれば
<li :v-for=”変数 in Vueオブジェクトのデータ名” :key=”変数.id”>{{ 変数.データ名 }}</li>
のように、:keyがついている場合とついていない場合があります。
何のために :key がついているのか調べてみたのですが、Vueの機能でDOMを書き換えた時に、keyを指定していないと、順番が変わってしまうことがあるそうで、つけておくことで並び順を保持できるそうです。
ajaxについての勉強メモ
- 2019年5月27日 6:43 PM
- javascript | 技術系
ajaxについての勉強メモです。
ajaxとは
ajaxとは、javascritを使って、ページを非同期に更新する仕組みのことです。
とはいえ、ajaxという言葉を使わなくても、javascriptは、普通にスクリプトを実行することで、イベント発生時(マウスオーバーやクリック時など)、ページの内容を書き換えることは可能です。
では、ajaxとはその通常のjavascriptの仕組みと何が違うのでしょうか。
それは、ウェブページから、動的に現在のページでない他のページからのリソースを要求し、その結果をページに反映できるという点です。
たとえば特定の要素をマウスでクリックしたときに、ajaxの仕組みを使って、phpファイルを実行し、その帰ってきた結果を解析してページ内に反映させることができます。
この仕組みを実現するためにjavascirptに実装されているAPIの機能がajaxです。
そのことを、例えばフォームをサブミットしたりページをリロードしたりせずに実行できる仕組みと考えればよいでしょう。
javascriptの$(function(){})の意味について解説
- 2019年5月26日 1:26 PM
- javascript | 技術系
javascriptのソースコードを見ていると、よく以下のような記述があります。
$(function(){})
これを、javascript初心者の人が見ると
???
となりますが、この意味について解説したいと思います。
まず、javascriptでは、関数をオブジェクトとして定義することができ、そのまま関数名を定義せずに変数に代入してオブジェクトにすることができる。
この事は知っている人が多いと思います。
また、javascriptは、即時関数という機能があって、定義した関数をその場ですぐに実行することができます。
これは、
(function() { 実行内容 } ())
このような書き方をします。
上記のような書き方をすることで、実行内容をその場で実行することができるわけです。
しかし、 タイトルにある
$(function(){ 実行内容 })
は、上記の記述とも微妙に違います。
これは、jQueryを使用している場合の記述です。
ページのDOMツリーの読み込みが完了した後に、実行内容を実行するということで、javascirptの通常の即時関数と似ていますが、JQuery使用時固有のものです。
Airbnbのホストをしてみた感想
- 2019年5月25日 5:58 PM
- 雑記
最近、Airbnbのホストをやってみています。
開始して一ヶ月ほど経ったので、注意が必要な点や感想など、気がついた点について書いてみます。
これからAirbnbのホストをやってみようという方の参考になれば幸いです。
注意が必要な点
初期コストはかなりかかる
空き家があれば、すぐに誰でもAirbnbのホストができる・・・
軽く考えがちですが、初期投資としてのコストは思った以上に多くかかります。
まず、宿泊所としての条件を満たすために、防火、防犯など最低限の設備が整っていないといけません。
特に防火対策は、部屋ごとに火災検知器を設置したり、家屋の改修が必要となるので、工事費用として、家の規模にもよりますが、数十万必要になる場合があります。
場合によっては、50万から100万を超える場合もあるでしょう。
この初期投資で断念する方も多いのではないかと思います。
他にも、ただの空き家でなく宿泊所の条件を満たそうと思った場合にはいろいろなアメニティや電気製品、家具なども設置したり、壊れている場所を改修する必要があるので、諸々を入れると100万以上はかかる場合が多いのではないかと思います。
ちなみにうちの場合は250万ほど初期投資でかかりました・・・。
民泊が可能な場所かあらかじめ確認しておく
民泊を開始するには、必要な改修工事を行う必要がありますが、それらの準備を開始する前に、自治体に該当の家屋で民泊が可能かどうかを確認しておくとよいでしょう。
場所によっては、法律によって民泊ができなかったり、制限されている区域もあるので、まず最初に家屋のある自治体に確認しておくとよいでしょう。
民泊をしていてよかった点
国際交流ができる
民泊を利用する方には、旅行の宿泊先を求めている人が多いので、外国人観光客が多いです。
特にアジア系の中国人や台湾の観光客が多いので、グローバルな国際交流の体験をすることができます。
立地はそこまでよくないが、思ったより予約が多い
開始する前は、お客が来るかどうか不安も多かったのですが、いざ蓋を開けてみるとお客さんが非常に多かったです。
当方の民泊は、最寄り駅がローカル線の駅で、そこから徒歩で20分ほどかかる場所になります。
そのため、そんな場所にお客さんが来るかどうか不安もあったのですが、蓋を開けてみると結構なペースで予約が入っています。
駐車場があるので、車で運転する人は日本人であればそのままこれますし、外国人の観光客の場合、送迎すると言っておけば駅まで来てくれる人が多いです。
これは、ふたを開ける前は立地の面で不安があったのですが、開業してみると安心した点です。
Laravelでマスタデータ(key-valueデータ)をどう管理するか
Laravelで、フォームを作る時に、例えば選択ボックスがあって、そこから値を取り出したい場合があります。
例えば、性別[男、女]とか、都道府県[北海道〜沖縄]とか、カテゴリ[〜、〜]とか色々と考えられます。
それらのデータは、しょっちゅう変更があるもので、複雑なものであればデータベースにテーブルを作ってそこから引っ張ってくる方法もあるのですが、例えば男、女のような小さいデータセットであれば、わざわざそれをするほどでもないというか、いちいちテーブルを追加してデータをセットするというのが、Laravelの場合マイグレーションを通さないといけなかったりと色々と面倒です。
その場合に便利なやり方ですが、configに追加するのが楽です。
以下のページにやり方が書いてありました。
一応手順についてメモしておきます
1.config以下に好きなファイル名で作成
都道府県であれば、per.phpのようなファイル名をconfig以下に作成して保存します。
return array( '1' => '北海道', '2' => '青森県', 省略 '46' => '鹿児島県', '47' => '沖縄県' );
ちなみに、configのキャッシュが残っていると反映されないので、ファイルアップ後は以下のコマンドが実行必要です。
php artisan config:cache
上記の例では、pref.phpには一つしか配列が定義されていないですが、
複数定義したい場合は以下のように多次元配列でも設定が可能です。
return [ "sex" => [ "1" => "男", "2" => "女", ] ];
上記のように設定しても、後で問題なくアクセスできます。
コントローラーで取得→テンプレートに表示、または直接bladeに表示
作成したファイルは、config(ファイル名)で、いつでも参照して取得可能です。
コントローラーで取得してからテンプレートに表示する方法
public function sample() { $prefs = config('pref'); return view('sample')->with(['prefs' => $prefs]); }
直接テンプレートに記述する
以下のように直接取得することも可能です。
<select name="_pref"> @foreach(config('pref') as $index => $name) <option value="{{ $index }}" @if(old('_pref') == $index) selected @endif>$name</option> @endforeach </select>
多次元配列の場合は以下のようなかんじです。
例えば、config/common.phpに
return [ "sex" => [ "1" => "男", "2" => "女", ] ];
上記のような定義を例えばcommon.phpにした場合、以下のように記述できます。
<select name="sex"> @foreach(config('common.sex') as $index => $value) <option value='{{ $index }}' @if(old('sex') == $index) selected @endif >{{ $value }}</option> @endforeach </select>
Javascriptのクロージャについて解説
- 7:00 AM
- javascript | 技術系
Javascriptのクロージャについての解説です。
Javascirptのクロージャとは何か
Javascriptのクロージャとは何か。
私の理解では
関数の中で関数を定義したもの
という理解です。
(あくまで私の理解です)
まず、基本的なところで
・ 関数を定義すると、関数内で定義した変数は関数外部から参照できない
という性質があります。
これはほとんどの人が知っていると思います。
例えば
function func() { var value = 1; console.log(value); } func(); // 1 console.log(value); // undefined
上記のようなプログラムの場合、関数を実行した場合、実行結果は
1になりますが、関数内の変数を出力した場合、
参照できていません。
function func() { var value = 1; function innerFunc() { value++; } innerFunc(); console.log(value); // 2 } func();
上記のようなプログラムの場合、関数の内部でinnerFuncという関数を定義して関数内で実行しています。
このinnerFUncをクロージャといいます。
innerFunc内では、外側の関数(エンクロージャ)で定義している
変数valueを呼び出していますが、その値を参照できているだけでなく、
更新することができます。
つまり、javascriptでは、関数の中で定義された関数の仕様は通常の
関数と、その外側の領域と違い、その関数内部で変数を参照したり、更新
したりできるのです。
このような仕組みを利用して、関数を定義する際に使用することがありますので、
性質として覚えておくと良いでしょう。
どのようなときに使うのか?
上記のクロージャの仕組みを使うと、関数内の変数の値を維持したまま、
その関数内の値を更新するプログラムをかけたりします。
例えば、関数内で定義した変数を、その関数内の関数を定義して返すような
関数にすることで、関数の外で変数を定義して更新したりしなくても、
関数を実行する度に関数を実行できたりするわけです。
書き方によってはクロージャを使わなくても実装できる場合もありますが、
コードがよりシンプルになったり、便利なケースがあるようです。
(未だにそういう場面に遭遇したことがないので分からない・・・)
JavascriptのSymbolについて解説
- 2019年3月14日 4:35 PM
- javascript | 技術系
JavascrotのSymbol機能は、もともとJavascriptに存在していた機能ではありません。
ECMAScript6 (ES6, ES2015) で導入された機能です。
使い方
var a = Symbol();
このように使うことができます。
こうすることで、aには他の値を被らない値(具体的な数値ではない)が、自動生成されて代入されます。
例えば
var a = Symbol();
var b = Symbol();
上記のように定義しても、aとbの値は異なった値になります。
値の型はtypeofをすると「symbol」と表示される、独自の型となっています。
何のために存在しているのか
何故このような機能が追加されたのかというと、
自分でユニークな値を設定したつもりでも、他の値と予期しない形で衝突することが
あるため、そのような状況を防ぐためです。
PHPの無名関数(クロージャ)について
PHPの無名関数(クロージャ)についてのまとめです。
無名関数とは
無名関数とは、関数規則に沿って命名を必要とせず定義できる関数です。
function(引数) {
処理内容;
}
といった形で使用できます。
例えば
$func = function(引数) {
処理内容
}
といった形で定義した場合、この$funcは、ラムダ関数とも呼ばれます。
$a = $func(引数);
このような形式で、使用する場所で呼んで使用できます。
無名関数を使用するメリット
無名関数は概念的には関数と同じなので、無名関数にせず関数として定義して呼び出しても同じなのですが、
普通の関数を定義無名関数を使用することにより、その場限りで呼び出す処理の場合は、関数名を他の関数名と衝突しないで済む、プログラム全体が複雑にならないといったメリットがあります。
無名関数内の処理に外部の変数を使用したい場合
プログラムによっては、無名関数の中で使用するプログラムに、無名関数の外の変数を使用したい場合があります。
無名関数は関数なので、引数にしている変数以外の外部の変数は内部の処理には適用されません。
しかし、use文を使うことでその問題は解決できます。
$func = function(引数A) use(変数B) {
処理内容;
}
このように無名関数を使用することで、処理内容で引数Aだけでなく外部の変数Bも使用できます。
Laravelのbladeテンプレートで配列の要素の存在を判定する方法
Laravelのbladeテンプレートで、配列をforeachなどの構文でループで回すことはよくありますが、配列の要素が存在するかどうかをテンプレート上に記述したい場合があります。
その場合、以下のように記述できます。
@if(!$posts->isEmpty())
-
@foreach ($posts as $post)
- {{ $post->title }} @endforeach
検索条件に合致する内容がありませんでした
@endif上記の場合は、配列postsが空かどうかを判定し、空出ない場合はループ処理を記載しています。
配列にない場合はelse後の処理に記載しています。
ブラクラ中学生逮捕は何が問題なのかを分かりやすく解説
ブラクラサイトへのURLを掲示板サイトに書き込んだ罪で13歳中学生を含む3名が補導された事件を受けて、Twitterでも様々な議論がされました。
この事件について、自分も最初は何のことかよく分からなかったのですが、調べると警察の対応に問題があると感じたので、どういうことか分かりやすく解説してみます。
兵庫県警サイバー犯罪対策課は4日、不正指令電磁的記録供用未遂の疑いで、愛知県刈谷市の中学1年の女子生徒(13)ら男女3人の自宅を家宅捜索した。
< 家宅捜索の前にJavaScriptのコード見たんかい?こんなものブラクラでもない。 pic.twitter.com/xeoOOdbaiQ
— 北河拓士🔰 (@kitagawa_takuji) 2019年3月4日
まず、問題となったのは、そもそも逮捕された人がそのサイトを作ったわけではないようなのですが、掲示板サイトにそのサイトURLを書き込んだということだけらしいのですが、そのサイトのソースコードが上記のようです。
このスクリプトがどのような動作をするかの解説
このスクリプトについてですが、サイトに埋め込んで実際に動作させてみると分かるのですが、ほとんど迷惑な動作をするものでありません。
単に指定されたメッセージが表示されて「OK」を押すことで次のメッセージが表示される。そこで「OK」を押すと、次のメッセージが表示されます。
これがずっと続くわけです。
一見すると確かに迷惑そうに見えますが、処理としては「メッセージが表示される」というだけのものです。
しかも、昔よくあったブラクラのように、無限に出てきてコンピュータがクラッシュするというものでもなく、「OK」を押さないと次のメッセージが表示されないので、コンピュータに対してクラッシュさせたり、フリーズさせたりといったこともありません。
つまり、「OK」を押さずにそのページを閉じると処理は終了するので、処理を終了するのも極めて簡単です。
つまり、実際に掲示板に書き込まれたURLを踏んでそのページに誘導されても、実害はほとんどないわけです。
昔あったようなブラクラは、そもそも今回の件はメッセージを表示するだけなのでブラクラにも該当しませんが、仮に今同様のブラクラのようなプログラムが実装されていても、最近のブラウザではそういった無限ループのプログラムには対応されていて実行されることはないようです。
つまり、逮捕した警察側に、そういった今回のプログラムがどういった動作をするかの知識が欠如しているために逮捕や家宅捜索にまでつながっているという見方ができます。
どう考えても、今回の件はウイルスに感染するでもなく、コンピュータがクラッシュするわけでもなく、これで逮捕されるのであれば、ちょっとしたジョークで逮捕されてしまうような事態になってしまうでしょう。
ブラクラ中学生逮捕事件に、javascriptの産みの親が降臨して言及
ブラクラサイトへのURLを掲示板サイトに書き込んだ罪で13歳中学生を含む3名が補導された事件を受けて、Twitterでも様々な議論がされました。
この件は、海外でも言及されて話題になっています。
そのやり取りが興味深かったので書いておきます。
(翻訳は微妙な部分を結構含んでるのですいません・・・)
まず、Googleで働いている日本人の方の投稿。
Japanese police is charging people for _posting link to a site_ that run
`for(;;){window.alert('lol you can't get rid of this message even you keep closing modal')}`
because it's "unlawful program"
— Mariko Kosaka (@kosamari) 2019年3月4日
日本の警察は、たった数行のプログラムを実行するサイトへのリンクを投稿した人々を、「不正なプログラム」として逮捕しました。
I. can't. even.
There is SO MUCH to unpack here.With this kind of caliber, most website have to be investigated with joint taskforce with FBI or something🤷♀️
(joke aside, hey JP police, I'll be glad to give presentation on web browser/security, hit me up ☎️)
— Mariko Kosaka (@kosamari) 2019年3月4日
信じられません。
これだと、多くのウェブサイトはFBIの統合任務部隊かなにかによって調査を受ける必要があるでしょう。
(冗談はおいておいて、日本の警察に、私はウェブブラウザ/セキュリティーについて解説を差し上げますので、ご連絡ください)
Time to subpoena @BrendanEich
— Fake “Unicode.” ↙️ (@FakeUnicode) 2019年3月5日
ここは、BrendanEich(Javascriptを作った人)の出番でしょう。
ここで本当にBrendanEichが降臨。
Even Netscape 4 a decade before Chrome let the user kill a JS iloop.
— BrendanEich (@BrendanEich) 2019年3月5日
Netscape4ですら、Chromeの10年前にJSの無限ループの問題に対処していたよ。
Netscape 2 & 3 had a branch callback used to sample and enable kill too, but it was easier to game.
— BrendanEich (@BrendanEich) 2019年3月5日
Netscape2、3でも同じように対処するブランチコールバックがありましたが、しかし、それはいたって簡単です。
NN4 our JS (SpiderMonkey first release!) in its own thread, thanks to work @knobchouck and I did in fall 1996 when the JS team grew to two FTEs.
— BrendanEich (@BrendanEich) 2019年3月5日
私達のJSであるNN4(SpiderMonkeyの最初にリリース!)ではそのスレッドで、knobchouck氏の功績により、1996年の秋にJSチームは2倍の規模に成長しました。
Ya, Brendan. I know 😭
Broader issue here is Japanese police is somehow empowered to charge people based on their…feelings? I don't know what their criteria is.
There was charge to web devs installing Coinhive to own website last year. It's alarming.https://t.co/06dKpcsnsg— Mariko Kosaka (@kosamari) 2019年3月5日
そうですねBrendan、私は知っています(泣)
広範な問題として、日本の警察は何に基づいて彼らを逮捕したのでしょうか…?
私は彼らの基準が何なのか理解できません。
昨年CoinhiveをWeb開発環境にインストールしたのも逮捕されました。
これは警告です。
Ah, Coinhive => Monero mining, and Monero is not popular with Law Enforcement.
— BrendanEich (@BrendanEich) 2019年3月5日
ああ、CoinhiveからMoneoのマイニングですね、Moneroは法的処置としては有名ではありません。
Japanese police has no knowledge about what even is Monero. They arrested people because "it causes unexpected loads on the visitor's computers and caused harm". Some of them are at the court fighting with the government on this.
— Tatsuhiko Miyagawa (@miyagawa) 2019年3月5日
日本の警察はMoneroが何かについての知識を持っていません。
彼らは逮捕した人々を「コンピュータへの訪問者を予期しないことに誘導していて、害を及ぼしている」としています。彼らのうちの何人かは政府とこの問題について法定で争っています。
Yikes. May be in Japan this year, could be expert witness if it would help.
— BrendanEich (@BrendanEich) 2019年3月5日
わー。それが今年日本の日本ならば、専門家の助けが必要になるでしょうね。
the computer virus law they are basing the charge is same one, but iloop & coinhive are separate case… tho it's very alarming trend.
— Mariko Kosaka (@kosamari) 2019年3月5日
彼らはコンピュータウイルスの法律に基づいて逮捕しているのかもしれませんが、無限ループとコインハイブの問題は別問題ですね。
それは注意が必要な傾向です。
Bootstrap4で、table-responsiveで横スクロールが出ないのに対処
Bootstrap4で、横長のtableにtable-responsiveクラスを適用して、はみ出させずに横スクロールさせようと思っていたのですが、何故かtable-responsiveを適用してもtableが横に飛び出したままで横スクロールが出現しませんでした。
書いていたコードは以下のような内容です。
-----
これで行けるはずなのですが・・・・
そしていろいろ試してみたのですが、原因がわかりました。
← 親要素のこれが原因-----
原因としては、div class=”table-responsive”の親要素に、class=”row”が入っていました。
これを削除することで動作するようになりました。
修正後
← class="row"を削除-----
TinyMCEを特定のtextareaに対して無効にする方法
- 2019年3月3日 7:47 PM
- 技術系
TinyMCEを、特定のフォームに対して無効にする方法についての解説です。
TinyMCEは、簡単に入力欄にWYSIWYGを導入できるので便利ですが、
デフォルトの設定だと全てのtextareaにWYSIWYGが導入されてしまうため、WYSIWYGがついてほしくない
textareaはどうしたらいいのか分からず少し調べました。
TinyMCEのバージョンによって設定方法が異なると思うので、自分が使っているバージョン(4系)についてです。
TinyMCEを導入する際に、ヘッダの部分に以下のような記述があると思います。
tinymce.init({ selector: "textarea", branding: false,
この箇所を、以下のように書き換えます
tinymce.init({ selector: "textarea#mce", branding: false,
こうすることで、「textarea id=”mce”」となっているtextareaのみがTinyMCEの対象になります。
ちなみに、classでもいけます。
tinymce.init({ selector: "textarea.mce", branding: false,
idだと、1つのテキストエリアしか対象にできないので、複数のテキストエリアを対象にしたい場合は、クラスで定義するのが有効です。
Laravelで「composer require doctrine/dbal」を実行でエラー「Installation failed, reverting ./composer.json to its original content.」の対処法
Laravelのマイグレーションで、カラム変更の機能を使う場合に、以下のエラーが発生しました
Changing columns for table “table” requires Doctrine DBAL; install “doctrine/dbal”.
テーブルのカラム変更をするにはdoctrine/dbalをインストールしろということ
公式サイトを確認したところ
composer require doctrine/dbal
をしないとエラーになるということで、実行。
すると、ここでもエラー
Installation failed, reverting ./composer.json to its original content.
インストールに失敗したので、composer.jsonを元に戻しましたということ。
もうちょっとエラーの内容を詳細に見てみます。
Your requirements could not be resolved to an installable set of packages.
あなたの要求は、インストール可能なパッケージのセットに対して解決できません
Problem 1
– The requested package laravel/framework (locked at v5.8.2, required as 5.7.*) is satisfiable by laravel/framework[v5.8.2] but these conflict with your requirements or minimum-stability.
要求されたパッケージはLaravel5.8.2系を必要としているので、あなたのLaravelのバージョンに対しては対応できません
ということ。
というわけで、Laravelnバージョンを5.8系にアップすることで解決できました。
まずは、composer.jsonを編集します。
“require”: {
“php”: “^7.1.3”,
“doctrine/dbal”: “^2.9”,
“fideloper/proxy”: “^4.0”,
//ここを変更
“laravel/framework”: “5.7.*”,→”laravel/framework”: “5.8.*”,
“laravel/tinker”: “^1.0”
},
ここが5.7系になっていたので、5.8系に変更します。
その後、composer update
これで、Laravelのバージョンが5.8系に変更され、その後
composer require doctrine/dbal
これで無事インストールできました。
Laravel5でフォームにWYSIWYGエディタを利用する
Laravel5のフォームを作っていて、textareaの入力欄にWYSIWYGエディタを導入してWordPressっぽくするというのを
試していたのですが、以下の記事を参考にして実装することができました。
Laravel5にWYSIWYGエディタを実装する方法 | Qiita
詳しくは上記の記事を参考にしていただければ簡単に実装できます。
手順としては、
1・TinyMCE をダウンロードして、サーバへアップロード
2・jbimages をダウンロードして、TinyMCEのpluginsフォルダへアップロード
(configファイルの画像の保存パスの変更と、該当フォルダに書き込み権限をつける必要あり)
3・実装するサイトのヘッダにjsファイルのincludeと、javascriptのコードを追記する
これだけで、至って簡単に実装することができました。
ただ、上記のQiitaの記事が若干古くなっていました。
この記事執筆時点(2019年3月)では、TinyMCEの最新バージョンが5系となっていたのですが、jbimagesは4系にしか対応していないので、TinyMCEの4系をサイトからダウンロードして使用する必要があります。(5系では動作しませんでしたが、将来的には対応しているかもしれません)
4系での設定方法は、以下のページに解説がありました。
JustBoil.me TinyMCE Images Plugin — A simple solution for uploading images in TinyMCE
Bootstrap4で、テーブルのtdの横幅を設定する方法
Bootstrap4で、テーブルのtdの横幅を設定する方法についての解説です。
Bootstrap3までは、テーブルのtdに、グリッドのクラスをつけることで横幅がグリッドシステムを使って設定できていたのですが、Bootstrap4からはできなくなったみたいです。
bootstrap3でできていた
これが、bootstrap4ではできなくなっているので、スタイルで横幅を指定する必要があるようです。
参考
How to set up fixed width for td? | strackoverflow
何故Bootstrap4でできなくなってしまったのか分かりませんが、直書きで指定するっていうのも嫌ですが、仕方ないですね。
もっとシンプルに書けるいい方法がないもんなのでしょうか。
Laravelの認証機能(auth)で新規ユーザ登録をできなくする
Laravelの認証機能で、ユーザ登録をできなくする方法についての解説です。
Laravelには、標準でAuth(認証機能)がついているので、標準で入っている認証機能を導入するのは非常に簡単です。
しかし、この標準のAuth機能は、Authをかけているページをログインページにリダイレクトし、そこでメールアドレスとパスワードを入力すればログインすることがでできるのですが、新規登録への導線がついているので、管理者だけログインできればよくて、それ以外のユーザの新規登録を受け付けていない場合があると思います。
そのような場合でも、routesの設定を変更することで簡単に対応することが可能です。
php artisan:make auth
をすることで、routesのweb.phpに以下の2行が追加されていると思います。
Auth::routes(); Route::get('/home', '[email protected]')->name('home');
これを、以下のように変更すればOKです。
//ここを変更 Auth::routes(['register' => false]); Route::get('/home', '[email protected]')->name('home');
これをすることで、ログイン画面にRegisterと表示されている部分が消え、登録ができなくなる他、登録URLにアクセスしても404 not foundになります。
合わせてRegisterControllerを削除するように、Laravel公式サイトには書いてありますが、特にその対応をしなくても機能しなくなっていたので問題ありませんでしたが、一応削除しておくと良いと思います。