【apache】何もしてないのにページが表示されなくなった時の解決策!【Linux】

こんにちは!河条です!!

先日、急にテストサーバーのwebページが表示されなくなるという不具合発生・・・!

原因を探って見るとどうもサーバー内のキャッシュが増えていたのが原因だったようです

でもLinuxサーバーのキャッシュの確認とキャッシュクリアってどうやるんだろ・・・🤔🤔🤔🤔😨🤔

ということで本日は
Linuxサーバーのキャッシュの確認とキャッシュクリア
についてです!☺️

まずはキャッシュの確認です😌
サーバーに入り、freeと入力しましょう

赤く表示したところがキャッシュのところですね🤔

では次にキャッシュクリアのコマンドです😯

これでキャッシュクリアされたかみてみましょう😌

ご覧の通りbuff/cacheが減っていますね!

ただ完全に0になるわけではないようです。キャッシュにもページキャッシュとバッファキャッシュと種類があるようなのでそこらへんが関係しているのでしょうか🤔(調査中)

ともかく今回は、ページが突然表示されなくなって困ったサーバー運用者は一度キャッシュクリアを試してみては!という記事でしたー😂
それではー😀

MacとEclipseでJavaプロジェクトを作成しよう!①〜EclipseのDLから画面表示まで〜

こんにちは。tutinokoです。

前回はちょっとデザインぽい話だったので、今回はEclipseでJavaのプロジェクトを作ってローカル画面に表示させるところまでやりたいと思います。

今まで組織のシステムの機能の一部を作ったり、テストしたり、みたいなことしかしてなかったので、今いろいろ勉強しながらいろいろやってます。

初歩的なことなのですが、今この部屋にJavaを使える人は自分しかいないので、手順書がわりになればいいかなと・・・

今回Macでの作業ですが、大体のところはWinでも同じ操作になるので、そこは臨機応変に読み替えてくださいね!
長くなりますよ・・・

まず、Eclipseをインストールしましょう。
Eclipse本サイトからDLすると、最初は全て英語になっているので、後からプラグインを追加して日本語化するという手順になりますが
Pleiadesという日本語化プラグインを配布しているサイトのPleiades All in OneをDLすると、初めから便利にカスタマイズされた日本語化されているEclipseが使えるようになるので、オススメです!
http://mergedoc.osdn.jp

2018/3/23現在、最新のEclipseは4.7なので、特に理由がなければ最新をDLでよいと思います。

リンクをクリックするといっぱーいDownlordボタンが並んでいるので・・・

今回はJavaの環境が欲しいので、お使いのOSの(Winの方はbit数を調べてくださいね)今回はFull EditionをDLしましょう!

Full Editionはインストール後の環境変数の設定まで勝手にやってくれるらしいので、難しいこと考えなくて済みます!

DLが終わったら、ファイルを解凍して、案内に従ってアイコンをドラッグ&ドロップします。

できたらApplicationsのEclipseアイコンをクリックして立ち上げます。

どのワークスペースを使用するか聞かれます。このまま起動ボタンを押しましょう。

最初のワークスペースはこんな感じです。何もないです。
私はこの配置が使いづらいので、パースペクティブを変更しちゃいます。

 右上のこのアイコンをクリックします。

Java EEを選択します。

ワークスペースの見た目が変わりました。
それから私は、赤枠で囲ってあるタブや項目は使わないので閉じちゃいます。

ここまでは環境構築です。

次は実際にプロジェクト作ってみましょう!

左側のプロジェクトエクスプローラー内で右クリック→「新規」→「動的Webプロジェクト」を選択。

プロジェクト名を決めます。通常はこのプロジェクト名がローカルで表示させるためのURLの一部になります。コンテキストルートといいます。

それから、以下を設定します。
・ターゲットランタイム:Tomcat8
・動的webモジュールバージョン:3.1
・構成:Tomcat8

プロジェクトを動かすためのアプリケーションサーバは、今回はEclipseにデフォルトで入っているTomcat8を使用します。

次へ> ボタンをクリックします。

そのまま 次へ> をクリックします。

完了 をクリックします。

はい!プロジェクトの骨組みができあがりました!簡単です!

このままだと本当に何もないので、画面に表示させる何かを作りましょう。
今回はJSPファイル(Javaも書けるhtmlファイルと思えばいいです)を作ります。
プロジェクトを開いて、WebContentフォルダの上で右クリック→「新規」→「JSPファイル」をクリック。

ファイル名を決めます。最初の入り口になるので、index.jspでよいでしょう。

ファイル名を入力したら「次へ>」をクリック。

ファイルのテンプレートを選びます。今回はただのhtmlファイルでよいでしょう。

「完了」を押します。

ファイルが作られました!

<body>〜</body>の中に何か適当に入力しましょう。

今回私は

と書きました。<title>〜</title>も適当に変更してます。

ファイルを保存したら、いよいよ画面に表示させましょう!

プロジェクトエクスプローラのプロジェクトの上で右クリック→「実行」→「1 サーバーで実行」をクリック。

初回なので、サーバーを選択します。

プロジェクトを作成した時に、Tomcat8を選択したので「Tomcat v8.0 サーバー」を選択しましょう。

「このプロジェクトを実行するときは常にこのサーバーを使用」にチェックを入れると、以降はこの操作がなくなります。

「次へ>」をクリックします。

プロジェクトを選択して「追加>」して「構成済み」に移動させます。

終わったら「完了」ボタンを押します。

サーバータブ(右下)が [始動済み、同期済み] の表示になってれば、サーバーが起動しています。

http://localhost:8080/〇〇〇〇(プロジェクト名)にアクセスしてみましょう。

無事に表示されました!お疲れ様です!!

ざっと駆け足で、それでもこんなに長い記事になってしまいましたが、これでJavaの入り口に立つことができました。

次は実際にJavaのプログラムファイルを作って表示させるところを説明できればよいかなと思います。

お粗末様でした。

 

【PHP】関数を使った値渡し、参照渡し٩( ᐛ )و

以前の記事の続きだよ!

前は値渡し、参照渡しについて書いたけど、今回は関数を使った値渡し、参照渡しについてだよ!٩( ᐛ )و

// 値渡し
function func_atai_watashi($value) {
    $value = "値渡しされた";
}
// 参照渡し
function func_sansyo_watashi(&$value) {
    $value = "参照渡しされた";
}

$value = "٩( ᐛ )و";
echo "関数に入れる前の値: {$value}";

func_atai_watashi($value);
echo "func_atai_watashiに渡した後の値 : {$value}";
func_sansyo_watashi($value);
echo "func_sansyo_watashiに渡した後の値 : {$value}";

一見すると、$value変数を関数に渡して代入しているから

func_atai_watashiに渡した後の値 : 値渡しされた
func_sansyo_watashiに渡した後の値 : 参照渡しされた

となりそうですね🤔

実行結果
関数に入れる前の値: ٩( ᐛ )و
func_atai_watashiに渡した後の値 : ٩( ᐛ )و
func_sansyo_watashiに渡した後の値 : 参照渡しされた

 
結果はご覧の通りです!
参照渡しした関数は変わってますが、値渡しされたところは値が変わってませんね!
これは別の変数として扱われているからなのですが、もうちょっと深掘りしましょう!

// 値渡し
function func_atai_watashi($value) {
    $value = "値渡しされた";
    echo "func_atai_watashiの関数の中のvalue : {$value}<br/>";
}
// 参照渡し
function func_sansyo_watashi(&$value) {
    $value = "参照渡しされた";
    echo "func_sansyo_watashiの関数の中のvalue : {$value}<br/>";
}

$value = "٩( ᐛ )و";
echo "関数に入れる前の値: {$value}<br/>";

func_atai_watashi($value);
echo "func_atai_watashiに渡した後の値 : {$value}<br/>";
func_sansyo_watashi($value);
echo "func_sansyo_watashiに渡した後の値 : {$value}<br/>";

はい!関数の中の変数はどうなっているか見てみましょう!

٩( ᐛ )و実行結果٩( ᐛ )و
関数に入れる前の値: ٩( ᐛ )و
func_atai_watashiの関数の中のvalue : 値渡しされた
func_atai_watashiに渡した後の値 : ٩( ᐛ )و
func_sansyo_watashiの関数の中のvalue : 参照渡しされた
func_sansyo_watashiに渡した後の値 : 参照渡しされた

 
func_atai_watashiの関数の中のvalue変数は”値渡しされた”にちゃんとなっていますね🤔

この辺は値渡し、参照渡しというよりはローカル変数、グローバル変数、スコープ等々の問題なのですが、それも参照渡しを使えば上手くクリアできるよ!という話でした!

この辺の理解が足りないと、関数の中の値はちゃんと変わっているのに、関数の外いくと値が変わらない〜となってしまうので気をつけましょう!

それではさよなら〜٩( ᐛ )و

【PHP】参照渡しと値渡しについて!!!٩( ᐛ )و【ポインタ】

こんにちは!
今日は社内の子に参照渡しと値渡しって何だよ!と聞かれたので、せっかくなのでブログでまとめて書こうと思います!

よく言われている通り、参照渡しは値を共有するイメージで、ポインタと似ています!(参照渡し理解できればポインタも理解できるでしょう!)
値渡しは単に値だけを渡して共有はしないってイメージです。

とりあえず実際にコード書いてどう動くか確認してみましょう!
参照渡しと値渡しはどんなプログラミング言語にもあると思うけど、いつも通りPHPで書きます!٩( ᐛ )و٩( ᐛ )و

まずは値渡しのコード

$atai_A = 'atai_Aの値を渡すよ';
$atai_B = null;

echo "値渡し前のatai_Aの値: $atai_A
";
echo "値渡し前のatai_Bの値: $atai_B
";

// $atai_Aの値渡し
$atai_B = $atai_A;

$atai_B = 'atai_Aの値を渡されたよ';

echo "値渡し後のatai_Aの値: $atai_A
";
echo "値渡し後のatai_Bの値: $atai_B
";

実行結果
値渡し前のatai_Aの値: atai_Aの値を渡すよ
値渡し前のatai_Bの値:
値渡し後のatai_Aの値: atai_Aの値を渡すよ
値渡し後のatai_Bの値: atai_Aの値を渡されたよ

ここはプログラムちょっとでもやった人なら納得だと思います!
atai_Aの中を「atai_Aの値を渡すよ」にして、その値を「atai_B」に入れた後に「atai_Aの値を渡されたよ」で上書きしています。

では本題の参照渡し!٩( ᐛ )و

$sansyo_A = 'sansyo_Aの参照を渡すよ';
$sansyo_B = null;

echo "参照渡し前のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し前のsansyo_Bの値: $sansyo_B<br/>";

// $sansyo_Aの参照渡し
$sansyo_B =& $sansyo_A;

$sansyo_B = 'sansyo_Aの参照を渡されたよ';

echo "参照渡し後のsansyo_Aの値: $sansyo_A<br/>";
echo "参照渡し後のsansyo_Bの値: $sansyo_B<br/>";

実行結果
参照渡し前のsansyo_Aの値: sansyo_Aの参照を渡すよ
参照渡し前のsansyo_Bの値:
参照渡し後のsansyo_Aの値: sansyo_Aの参照を渡されたよ
参照渡し後のsansyo_Bの値: sansyo_Aの参照を渡されたよ

はい!さっきと違うのは参照渡し後のsansyo_Aの値ですね!
先ほどと同じように、sansyo_Aの中を「sansyo_Aの参照を渡すよ」にして、その値を「sansyo_B」に入れた後に「sansyo_Aの参照を渡されたよ」で上書きしています!

が!なんとsansyo_Aの値も変わっています!
冒頭で説明した通り、値が共有されていますね!
sansyo_Bはsansyo_Aの実態を持っているイメージです!

参照渡しと値渡しどうでしょうか!とりあえず初めのうちは、こう書いたらこう動くと割り切って進めていくのもありです!
次は関数を使った参照渡しを書こうと思います!

それでは٩( ᐛ )و

【中級者向け】ゲーム設計で学ぶobserverパターン!

こんにちは!
今日はプログラムの設計でよく見るobserverパターンについてだよ!

「こういう処理が走ったら、特定のオブジェクトにこういう処理をさせたい!」って時よくあるよね???ゲーム設計に限らずだと思うけど!

その時にif文case文地獄にならないように設計できるのがobserverパターン!

用意するのはざっくり2つ!

1、「こういう処理が走ったら」を感知するsubject

2、その感知に対してどういう処理を行うかのObserver

subjectがObserverを管理して登録したり削除したり感知するメソッドを用意!
Observerは感知された時に呼び出される処理を書く!

今回は花壇に水をやってそれを感知する花と花壇の水量を観察するクラスを作っていきましょう!
今回はC#で書くかphpで書くか迷ったけど最近phpばっかだからphp(言語は違っても考え方は同じだから!!!)

まずは花壇クラスを作成!上で言うsubjectの部分!
Flowerbed.php

<?php 
/**
 * Subjectクラス+ConcreteSubjectクラスに相当する
 */ 
class Flowerbed { 
  private $waterCnt; 
  private $listeners; 
  public function __construct() { 
    $this->listeners = array();
    $waterCnt = 0;
  }

  /**
  * 植物に水を与えたときに呼ぶメソッド
  */
  public function addWater()
  {
    $this->$waterCnt++;
    $this->notify();
  }

  /**
  * 水を与えた回数を取得
  */
  public function getWaterCnt()
  {
    return $this->$waterCnt;
  }

  /**
  * Observerを登録するメソッド
  */
  public function addListener(PlantListener $listener)
  {
    $this->listeners[get_class($listener)] = $listener;
  }

  /**
  * Observerを削除するメソッド
  */
  public function removeListener(PlantListener $listener)
  {
    unset($this->listeners[get_class($listener)]);
  }

  /**
  * Observerへ通知するメソッド
  */
  public function notify()
  {
    foreach ($this->listeners as $listener) {
      $listener->update($this);
    }
  }
}
?>

次はインターフェース部分!抽象メソッドを定義するよ!
PlantListener.php

<?php
interface PlantListener {
    public function update(Flowerbed $flowerbed);
}
?>

次は花壇の水量を観察するクラスを作っていこう!(上で言うObserverのとこ!)
AmountWater.class.php

<?php
  require_once 'PlantListener.php';
/** 
* Observerクラスに相当する 
*/
class AmountWater implements PlantListener { 
  public function __construct() { } 
  public function update(Flowerbed $flowerbed) {
   echo '現在の水量は'.$flowerbed->getWaterCnt().'です';
 }
}
?>

次は具体的な花のクラスを作るよ!今回はアサガオと向日葵!
Asagao.class.php

<?php
require_once 'PlantListener.php';

/**
 * Observerクラスに相当する
 */
class Asagao implements PlantListener
{
    public function __construct(){}
    public function update(Flowerbed $flowerbed)
    {
     echo 'アサガオが水をもらいました';
    }
}
?>

Himawari.class.php

<?php
require_once 'PlantListener.php';

/**
 * Observerクラスに相当する
 */
class Himawari implements PlantListener
{
    public function __construct(){}
    public function update(Flowerbed $flowerbed)
    {
      echo '向日葵が水をもらいました';
    }
}
?>

これで準備おK! あとは水をあげるボタンを用意してそれぞれのオブジェクトをよぼう!
observer_client.php

<?php
 require_once 'Flowerbed.php';
 require_once 'Himawari.class.php';
 require_once 'Asagao.class.php';
 require_once 'AmountWater.class.php'; 
//花壇と花を作成してSubjectに登録 
function createCart() { 
 $flowerbed = new Flowerbed(); 
 $flowerbed->addListener(new Himawari());
 $flowerbed->addListener(new Asagao());
 $flowerbed->addListener(new AmountWater());
 return $flowerbed;
}

session_start();
$flowerbed = isset($_SESSION['flowerbed']) ? $_SESSION['flowerbed'] : null;

if (is_null($flowerbed)) {
 $flowerbed = createCart();
 $_SESSION['flowerbed'] = $flowerbed;
}

$mode = (isset($_POST['mode']) ? $_POST['mode'] : '');

//水をあげた時にFlowerbedのaddWater関数を呼ぶ
if ($mode != '') {
 $flowerbed->addWater();
}

?>
<form method="post" action="">
 <input type="hidden" name="mode" value="add">
 <input type="submit" value="水をあげる">
</form>

これでobserver_client.phpを開いて水をあげれば下記のようになるよ!

今回は文字を表示させているだけだけど、実際に走らせたい処理を書いてあげるといいよ!
花が増えたり、観測者を増やしたいなら別途そのオブジェクトを管理するファイルを作って登録させるだけ!
これで条件分岐地獄にはならずにオブジェクトごとに管理もしやすくてバグも起こりにくいよ!

ちょっと長かったけどぜひこの設計やって見てね!
以上!河条でした^o^