LAMPエンジニアってこういうもんでしょ

こういうもんでしょって話をつらつらと

さくらVPSの安いプランでWordPress動かしていたら重かったからApacheの設定をいじくってみた

会社のコーポレートサイトにWPを入れて、社員ブログの運用とかをしているのですが
さくらVPSにWPって相性が悪いのかお金をケチり過ぎなのか
とにかく重たかったのです。
なのでhttpd.confの設定をちょっといじりました。

変えたのは以下の部分です。

<IfModule prefork.c>
StartServers      10
MinSpareServers   10
MaxSpareServers   10
ServerLimit       64
MaxClients        64
MaxRequestsPerChild  1000
</IfModule>

phpを動かしているApacheだとworkerにしたら危ないって記述があったりしたので
デフォルト通りのpreforkのプロセス数を調整しました。
Apacheのメモリがサーバーの物理メモリを食いつぶしている感じだったので
forkを押さえるためにMinもStartもMaxも同数にしつつ全体的に数を減らして
かつMaxRequestsPerChildも4000から1000に減らしてみました。
同時接続数に関しては多くて日に150pv程度なので
静的ファイルとか諸々考えても、もう少し減らせるかなと思っています。

調整をしてみると、それまで読み込みに1分近くかかっていたページが
2秒ほどで描画されるようになりましたw
まだI/Oの調査やDB接続の問題などありますが
それはまた今後やっていければと思っています。

とりあえず言えることは お金がある人は是非メモリを増やしましょう!w

PHOのちっぱい幼馴染ルート回答をPHPで書いてみた

paizaのオンラインハッカソンで書いたコードを是非公開してね!
みたいな記事が上がっていました。

paiza.hatenablog.com

頭のおかしな優秀なエンジニア諸兄に負けじと 僕も頑張ってみたのでコードを晒してみます。

<?php
$area = explode(' ',fgets(STDIN));
$x = intval($area[0]);
$y = intval($area[1]);
$map = array_pad(array(), $x, 0);

for($i = 0; $i < $y; $i++) {
        $map = arraySuMerge($map, explode(' ',str_replace('2', '0', fgets(STDIN))));
}

$result = '';
for($yi = $y - 1; 0 <= $yi; $yi--) {
        for($xi = 0; $xi < $x; $xi++) {
                $result = ($map[$xi] <= $yi) ? $result.'0 ': $result.'1 ';
        }
        $result = trim($result).PHP_EOL;
}

echo $result;

function arraySuMerge($arr1, $arr2) {
        $tmp = array();
        foreach($arr1 as $key => $val) {
                $tmp[] = $arr1[$key] + $arr2[$key];
        }
        return $tmp;
}

いわゆく落ちゲーの画面描画を計算するためのコードを書いてくれ!みたいな課題でしたが
0は空白、1はブロック、2は消えるブロックという感じだったので
2を片っ端から0に置き換えた上で、1の下にあるものが0だったら詰める!
みたいな感じで書きました。
コメントぐらい書けよって話ですが競技プログラミングにコメントなんて不要です。
(メンテナンスしないしこの場限りのものだから)

正直製品としてこんなコード出てきたらグーパンチものですが、まあお遊びなのでこんなもんで勘弁願いたいです。

ちなみに個人的には野田さん推しです。

paiza.jp

なかなかみんな言わないけどiOS搭載のモバイルSafariは滅びて良いと思う

IEに関しては様々な人が怒りをあらわにするわけですが
なぜかモバイルSafariに関してはそういう話をする人が少ないように思えます。
林檎信者を批判するわけではないですが
みんなW3C勧告の範囲はちゃんと実装してほしいものです。


今日話題にしたいのは
iOSの超苦手な「position: fixed;」問題です。
そもそも最近まで「position: fixed;」は使えなかったわけで
実装されたと思ったら、描画領域とイベント領域がずれるバグが今でも続いています。
どうも内部挙動としてscrollイベントに前後してイベント領域の再設定をしているような気がします(感覚です)

結果何が起こるかというと
position: fixed;でフローティングさせて画面下部に書き出した要素がある場合
画面中央部を細かくタップしてスクロールさせていくと
突然画面下部のフローティングさせた奴のタッチイベントが発生します。
タッチイベントにエキスパンドアニメーションとか画面遷移とか付けていたらもう絶望ですよね。
残念で仕方ありません。


仕方がないので
touchstart、touchmoveイベントの度に
「本当に該当領域がタップされたのか」を取得しようと思いました。
touchstartイベントの時の座標から計算しようと思ったわけです。
今度はscreenYの値が想定と違うとな・・・?
どうもpageYと同じ値が取れているっぽいぞ・・・?

というわけで以下のような検証ページをつくりました。

<!DOCTYPE html>
<html lang="ja">
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<title></title>
<style>
body {
  height: 1200px;
}
#orverlay {
  position: fixed;
  width: 100%;
  left: 0;
  bottom: 0;
  height: 100px;
  background-color: rgba(0,0,0,.5);
  color: #fff;
  text-align: center;
}
</style>
</head>
<body>
<div id='orverlay'>
  <p>screenY:<span id='screenY'></span></p>
  <p>pageY:<span id='pageY'></span></p>
</div>
<script>
$(function(){
  // タッチイベント検証
  $(document).on('touchmove', function(ev){
    var touche = ev.originalEvent.targetTouches[0];
    $('#screenY').text(touche.screenY);
    $('#pageY').text(touche.pageY);
  });
});
</script>
</body>
</html>

iPhoneユーザーの方は是非ためしてみて下さい。
見事に数値が一致しますwwww


仕方ないのでpageYを取得している想定で色々ごにょごにょ計算して
該当領域がタップされたかを取得する事に成功しました。
本当にもうありがとうございます(白目


べ、別にみんなで一緒にgoogle信者になろうとか言っていないんだからねっ!////
個人的には火狐が好きとか絶対みんなにはヒミツなんだからぁぁあああ!!!!