情弱エンジニアのなかのblog

一人前のエンジニアになる為のブログです

PHPの関数 date,strtotimeについて

先日dateとstrtotimeについて調べたので使い方など記載いたします。

1.date関数

第一引数にフォーマットを入れて、現在の時刻を出力します。 この記事を書いているのが2018年の1月18日でした

PHP

echo date('Y/m/d');

出力結果

2018/01/18

 strtotime関数

先ほどのdate関数の第二引数に入れて現在の日時からの指定日時を出力することが出来ます。 改めてこの記事を書いているのが2018年の1月18日(木)です。

PHP

echo date('Y/m/d', strtotime('10 day'));
echo "\n";
echo date('Y/m/d', strtotime('-10 day'));
echo "\n";
echo date('Y/m/d', strtotime('last Saturday'));
echo "\n";
echo date('Y/m/d', strtotime('next Saturday'));
echo "\n";

出力結果

2018/01/28
2018/01/08
2018/01/13
2018/01/20

「10 day」で十日後を出力して 「-10 day」で十日前を出力します。 「last Saturday」は現在からみて過去の直近の土曜日を出力して 「next Saturday」は次に来る土曜日を出力します。

といった形になります。

文字コードについて基礎からの勉強1

最近文字コードに関して開発を行うことがあり曖昧だった部分など改めて調べました。

UTF-8Shift_JISについて

文字コードの中でも目にする機会が多い「UTF-8」と「Shift_JIS」これらの違いについて調べてみました

UTF-8

Unicode文字集合体とする

・文字範囲が広く、どの言語の文字にも対応している

・文字によって割り振られたバイト数が違い、日本語の場合3バイト

・文字化けを起こす可能性が低い

使うメリット

文字範囲が広いので、国内国外に関係なく広く利用することができる。文字化けなどが起こりにくいため、思わぬ動作が起こってしまうリスクが低い。

Shift_JIS

今までShift-JISとハイフンで書いてました、、、 Shift_JISなんですね~

JIS X 0208文字集合体とする

・日本語について文字範囲として十分である

・一文字2バイト

・環境によって文字化けが起こったりする

・日本国内の携帯で主に読めるコード

メリット

日本語を使用するならば、UTF-8と比較して容量を少なくすることができる。

デメリット

文字化けが起こる可能性がある。UTF-8と比較して文字範囲が狭いため、使用できない文字が多い。

とりあえずこんなところで、今後も調べていきたいと思います。

csvエディタとして「gPad」を使ってみる

csvファイルを使うことが多くて普段はcsvを開くのにエクセルを利用していました、ですが 実はちょこちょこと問題があったりするのでcsvを開くためのエディタを調べてみました。

ちなみにエクセルでcsvを開く際の問題点は以下のようになります。

・エクセル でファイルを開いた場合、勝手にゼロサプレスされてしまう。

・エクセル でファイルを編集して保存した場合、CSVのフォーマットが崩れてしまう。

今回使ってみたのが「gPad」というツールになります。 この「gPad」はテキストエディタになっているので内容が変更されることはありません。さらに エクセルのように値をセルごとに表示できるのでただのテキストエディタと違って確認しやすくなっております。

実際に使ってみました。 以下のリンクからダウンロードページに飛ぶことが出来ます。

mfactory.me

こちらのページからダウンロードを押して最新版をインストールしましょう

f:id:nonaka-katuma-hal:20180111123237j:plain

セットアップを行いgPadを起動します。

f:id:nonaka-katuma-hal:20180111124213j:plain

csvファイルの開き方ですが 左上の「ファイル」→「開く」でcsvファイルを選択してもいいですし直接ドラッグアンドドロップで表示することもできます 実際に開いてみます

f:id:nonaka-katuma-hal:20180111124739j:plain

このようにセルで区切られているので見やすいです、また上部の「a,」「a^」と書いてあるアイコンを押すと 区切り文字をカンマかタブで切り替えることが出来ます。

別々のcsvファイルの違いを確認するときなどエクセルで開くと別窓で開いてしまうので管理が面倒なのですが タブで別々のcsvを表示させることが出来ます。

csvを開いている状態で別のcsvを開くとタブが増えて表示されます。 これがなかなかに便利です。

f:id:nonaka-katuma-hal:20180111125445j:plain

csvをよく開く型はぜひ使ってみてはいかがでしょうか?

バックアップのシステムイメージ作成で「0x80070005」というエラーが出た

バックアップが必要になり外付けハードディスクを使って、以下の手順でシステムイメージの作成を行いました。

  1. コントロールパネルを開く

  2. システムとセキュリティ

  3. バックアップと復元(Windows 7)

  4. システムイメージの作成

  5. ハードディスク上

  6. 次へ

  7. バックアップ開始

通常ですとこのままシステムイメージの作成を行うことが出来るのですが以下のようなエラーが起こりました

f:id:nonaka-katuma-hal:20180109171019j:plain

???

「0x80070005」 「システムイメージ」で検索するとウイルス対策ソフトを止めて実行すると解決したとの記事があったので ネットを止めてからセキュリティソフトを停止してもう一度実行して見ると 同じエラー、、、

セキュリティソフトが複数常駐していることが原因ではないかとも記事にあったので一応確認しました。

とはいえ普段使ってるセキュリティソフト以外にあるわけないと思いつつ 使用しているHPのアプリケーションを見ていたら「HP Client Security Manager」なるものが こちらがどうやらウイルス対策アプリらしいです、ずっと使ってて気づきませんでした 「HP Client Security Manager」をPCから削除すると先ほどのエラーは起こりませんでした。

その代わり以下のエラーが

f:id:nonaka-katuma-hal:20180109174456j:plain

こちらはハードディスク内に中途半端に保存されたバックアップフォルダを削除することで解決して 無事にバックアップを完了できました。

ということで「0x80070005」というエラーが出たらウイルス対策ソフトが複数ないか入念にチェックしてみましょう。

セキュリティソフトを入れるときにチェックしたはずだったんですが、、、McAfeeとかならすぐ気がつくんですけど完全に見落としていました。。

今年使ったサイト、ツール、アプリケーション

2017年ももう終わりですね、、今回は今年使ったサイトやツールやアプリケーションを一挙に紹介して ブログを締めくくりたいと思います。

ドットインストール

プログラムやデベロッパーツールについてなど動画で解説してくれるサイトです。 環境構築やphp cakephp など分からないことだらけだったので大分お世話になりました。 無料でも使えますし、月額500円のプレミアム会員になるとより多くのレッスンやサポートを受けられます。

https://dotinstall.com/

Trello

タスク管理ツールや目標設定ツールとしてなど様々な使い方が出来ます ボードに付箋を貼るがごとくメモが出来て無料で使えます、とにかく便利です 複数人で同じボードを共有できるのでチームでの共有事項をまとめるのにも使えます

Trello

paiza

こちらは言語の勉強から実戦形式の問題やちょっとしたコードの実行など様々な使い方が出来ます

ITプログラマ・エンジニア向け転職・就活・学習サービスのpaiza

winmerge

こちらは業務で使っているのですが、2つのファイルを比較して差異を表示してくれるツールです 用途は比較だけですがよく使ってます

「WinMerge」テキストファイルの差分表示・マージ - 窓の杜ライブラリ

Clock it!

こちらもタスク管理ツールなのですがどの作業にどのくらい時間を使ったのかが把握できます 時間をグラフで見ることも出来るので便利です

Clock It! - タスク管理&タイムマネジメントサービス

といったところになります、まだまだ便利なものはいくらでもあると思うので機会があればガンガン使っていきたいと思います。

今年一年ブログを読んでくださった方々、大変お世話になりました。来年もよろしくお願いいたします。

良いお年をお迎えください!

cherry-pickの使い方について

この間gitでブランチAにブランチBのコミットを反映したいと思ったときに便利なコマンドがあったので使い方など記載いたします。

例えばBというブランチを編集して、いざリモートリポジトリにpushしようとしたときに 実はブランチAを編集しなくてはいけなかったということに気づいたとき、、、編集内容が多く今からブランチAを変えるのはめんどくさいが コミット自体は一回だけでどうにか編集内容をブランチAに反映させたいときや

ブランチBを編集していて本番へのリリースにあたり、リリース用のブランチAに変更をコミットしようとしたところ、 過去の改修が含まれていたことに気付き、ブランチBの特定のコミットだけ反映したいときなど

これらの状況で「cherry-pick」を使えば一発で解決できます。

・使い方

//ブランチBにチェックアウトする
git checkout ブランチB
git log

commit f77d749550d38df8b2a11cc3d5c16cd1f26fc025
    パラメーターの編集

commit 7c83ae675baf01ec71799c4cba7d06eb467a6bdd
    メソッドの追加

commit 0794374042d3def3b5824bdb0be2b215d443b73b
    コメントの編集

「commit f77d749550d38df8b2a11cc3d5c16cd1f26fc025  パラメーターの編集」 だけブランチAに反映したいとき

//ブランチAにチェックアウトする
git checkout ブランチA
//ブランチBの「パラメーターの編集」commitをブランチAに反映する
git cherry-pick 546de2cc727fcae02646c6af637f401e4238feef

ブランチAに「commit f77d749550d38df8b2a11cc3d5c16cd1f26fc025  パラメーターの編集」が反映されます。

phpの配列について4

phpの関数について使い方等を調べたので記載いたします。

array_merge

array_mergeについて基本的な説明は以前の記事をご覧ください。

phpの関数について2 - 情弱エンジニアのなかのblog

keyの指定があった場合の結果は以下になります。

php

$temp1 = array(
    "A" => "a", 
    "B" => "c",
    "C" => "c", 
    "D" => "d", 
    "E" => "a" 
    );
    
$temp2 = array(
    "F" => "green", 
    "G" => "red", 
    "H" => "green", 
    "I" => "blue", 
    "J" => "red"
    );

$temp3 = array_merge($temp1, $temp2);
print_r($temp3);

実行結果

Array
(
    [A] => a
    [B] => c
    [C] => c
    [D] => d
    [E] => a
    [F] => green
    [G] => red
    [H] => green
    [I] => blue
    [J] => red
)

2つの配列のkeyが重複していた場合は以下のようになります。

PHP

$temp1 = array(
    "A" => "a", 
    "B" => "c",
    "C" => "c", 
    "D" => "d", 
    "E" => "a" 
    );
    
$temp2 = array(
    "A" => "green", 
    "G" => "red", 
    "B" => "green", 
    "I" => "blue", 
    "C" => "red"
    );

$temp3 = array_merge($temp1, $temp2);
print_r($temp3);

実行結果

Array
(
    [A] => green
    [B] => green
    [C] => red
    [D] => d
    [E] => a
    [G] => red
    [I] => blue
)

重複している配列に関して第二引数の$temp2が上書きしています。

+演算子での結合

ちなみに+演算子で配列を結合した場合は以下のようになります。

PHP

$temp1 = array(
    "A" => "a", 
    "B" => "c",
    "C" => "c", 
    "D" => "d", 
    "E" => "a" 
    );
    
$temp2 = array(
    "F" => "green", 
    "G" => "red", 
    "H" => "green", 
    "I" => "blue", 
    "J" => "red"
    );

$temp3 = $temp1 + $temp2;

print_r($temp3);

実行結果

Array
(
    [A] => a
    [B] => c
    [C] => c
    [D] => d
    [E] => a
    [F] => green
    [G] => red
    [H] => green
    [I] => blue
    [J] => red
)

そしてkeyが重複している場合は以下のようになります。

PHP

$temp1 = array(
    "A" => "a", 
    "B" => "c",
    "C" => "c", 
    "D" => "d", 
    "E" => "a" 
    );
    
$temp2 = array(
    "A" => "green", 
    "G" => "red", 
    "B" => "green", 
    "I" => "blue", 
    "C" => "red"
    );

$temp3 = $temp1 + $temp2;

print_r($temp3);

実行結果

Array
(
    [A] => a
    [B] => c
    [C] => c
    [D] => d
    [E] => a
    [G] => red
    [I] => blue
)

$temp1 が優先されます。

以上になります。