PG WORKS

PHPやLinux(サーバー)などのノウハウや、便利なツールを紹介していきます。

【ヒストリー】プログラムができないのにプログラマーになった人生

私自身、プログラムの理解が遅く、うまく作ることができない時期が長かったので、そのときの思い出と、出来るようになったきっかけをブログに書き留めたいと思います。

専門学校でプログラムを学び、プログラムの世界に飛び込んでいったのですが、何を学んでも理解ができなくて、嫌になった時期がありました。

先輩に頼るしかなかった時期

先輩に「どこがわからないの?」と聞かれるのですが、何をどう説明したらいいのかわからない。。。わからなさすぎて「いや・・・・すいません。」の言葉しかでませんでした。

このときの技量は、サンプルを少し改良する程度のことはできるものの、サンプルを応用したり、自分で考えて作ることができませんでした。

期限に間に合わせるために必死になる

納期に間に合わせるために、先輩に迷惑かけながらもやっていくのですが、できない自分に対してのストレスを感じてました。

なんのためにこの仕事をやろうと思ったのかな・・・もっとまじめに勉強してしていれば・・・などマイナス思考なことしか思い浮かばず、どん底まで落ち込みました。

なんでだろう・・・なんでできないの・・・

あるとき、その時勤めていた会社の社長から、きつい一言を言われました。(今だとパワハラ



「君ね。問題外だから、このままだと辞めてもらうことになるよ」



もうね。「ハハ・・・」って感じでしたよ・・・

ダメかなと思ったときに・・・

f:id:zen6a:20150826235217j:plain

とあるゲームを作ることになったときに、どうしてもうまく組めなくて悩んでました。

いつも帰り道に、一から仕組みを見直し、どうやったらうまく動かせるのか、頭の中で想像していたその時。

たくさんの花が一斉に咲くように、悩みが解消していく考えができるようになりました。
(ランチの帰りに、ひらめいた記憶がいまだに覚えてる。。。)

徐々にプログラムが理解できるようになった

それ以降は、他のプログラムでも組めるようになり、今の自分があるわけですが、あのひらめきがなければ、プログラマーという道は諦めてたかと思います。

苦しもがきながらも、続けきったからこそ、ひらめいた出来事だったのかもしれません。

【PHP】JpCarbonで祝日判定

前にCarbonを使った日付処理を公開しました。

zen6a.hateblo.jp

仕事で祝日を判定する処理が必要なり調べたところ、Composerで「JpCarbon」という祝日を判定できる記事を見つけました。

enomotodev.hatenablog.com

祝日を判定し祝日であれば、何の祝日なのか表示する

require 'home/○○○/bin/vendor/autoload.php';

use Carbon\Carbon;
use JpCarbon\JpCarbon;

$dt = new Carbon('2018-12-23');
$st = JpCarbon::createFromDate($dt->year, $dt->month, $dt->day)->holiday;

echo $st;

祝日でなければ結果は何も表示されません。

【CentOS7】firewallでポート制御しよう

Apacheサーバーをロードバランサーを使って負荷分散をした際に「memcached」利用することになりました。

memcachedはセキュリティの関係上、IP制限を設定しないといけないためその設定方法をメモ。

memcached のアクセス制御に関する注意喚起

ポートの許可

firewall-cmd --add-service=http --zone=public --permanent
firewall-cmd --add-service=https --zone=public --permanent
firewall-cmd --add-service=mysql --zone=public --permanent

特定のIPだけを許可

firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="許可するIPアドレス" port protocol="tcp" port="11211" accept"

↑「11211」はmemcachedのポートです。

設定完了後、下記の反映コマンドを実行することでポート制限が有効になります。

firewallの設定を反映

firewall-cmd --reload

firewallの設定を確認

firewall-cmd --list-all-zones

firewallの起動/停止/確認

service firewalld start
service firewalld stop
service firewalld status

firewall自動起動の有効・無効設定

#有効
systemctl enable firewalld

#無効
systemctl disable firewalld

memcachedがIP制限が複数できないため、firewallを使うことになりました。

設定が難しいイメージがあったので避けていましたが、想像してたよりも簡単にできたので、これを機に覚えていきたいと思います。

Apache2.4でのWebアクセス制御

とある事情で国内のみのアクセス制限することになり、下記のサイトからIPリストを取得

www.cgis.biz

早速「.htaccess」で設定したら、サイトが落ちかけました。。。

.htaccess」はアクセスがあるたびに設定内容を読み込むため、国内のIPリストを4000行書くと、サーバーが応答不能になるほど重くなります。

CentOS7標準の「firewall」で設定しようと思いましたが、検索エンジンを回避方法がわからず。。。
※ユーザーエージェントで回避するみたいですが、設定がよくわからなひ(汗

vhost.conf

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot /example
    ServerName example.com
    <Directory "/example">
       Options FollowSymLinks
       AllowOverride All
       Include /etc/httpd/conf.d/iplist
    </Directory>
</VirtualHost>

バーチャルホストの設定を「/etc/httpd/conf.d/vhost.conf」に書いています。

「example」というフォルダが対象(サンプルなので各自の設定に書き換えてください。

4000行もipを書くため別ファイルに分けました。

iplist

SetEnvIf User-Agent "Googlebot" bok
SetEnvIf User-Agent "Slurp" bok
SetEnvIf User-Agent "msnbot" bok
SetEnvIf User-Agent "bingbot" bok
<RequireAny>
Require all denied
Require env bok
Require ip 1.0.16.0/20
Require ip 1.0.64.0/18
Require ip 1.1.64.0/18
#
#続きのipをここに記載
#
</RequireAny>

設定エラーがでないか「configtest」で確認

service httpd configtest


Syntax OK

と表示されれば問題ないので、Apacheを再起動させます。

service httpd restart

サイトが落とせないのであれば、下記のコマンドで反映できます。

service httpd graceful