PHPのarray_keys()で配列のキーを配列で返す

keys()を使えば連想配列のキーを配列で受けとることができる。な…何を言っているのかわからねーと思うがとりあえず見てくれ

<?php
$list = [
'test1' => 'jpge',
'test2' => 'jpge2',
'test3' => 'jpge3'
];
$result = array_keys($list);
print_r($result);

こういうこと

$ php test.php
Array
(
[0] => test1
[1] => test2
[2] => test3
)

連想配列の先頭のキーを受け取るってこともできると思う

echo key(array_keys($list));

こうかね

PHPでstrtotime()を使った6ヶ月後は180日後ではない事を知っているか

たぶん6ヶ月後ってのはより人間的な6ヶ月後の今のことを指しているのであって180日後ではないっぽいことを知っているか

<?php
date_default_timezone_set('Asia/Tokyo');
echo  24 * 3600 * 180;
echo "\n";
echo strtotime('+6 month') - time();

素晴らしい!ホラ、見て御覧なさい!

$ php test.php
15552000
15811200

180日後に退会と、半年後に退会では意味が実は違うっていう。どっちでも大した違いないんだけどさ、細かいお金の計算とかする時こういうの大変なんだろうな。

JavaScriptでloopの処理をcontinueを使わないでスキップする

JavaScriptでLoopをスキップするにはcontinueを使うだけ

var loop = function (record) {
for (var index = 0; record.length > index; index++) {
if (record[index] % 2 === 0) {
continue;
}
console.log('100億万秒かかる長い処理' + record[index]);
}
};
loop([1, 2, 3, 4, 5]);

結果こうなる

$ node test.js
100億万秒かかる長い処理1
100億万秒かかる長い処理3
100億万秒かかる長い処理5

ただcontinueを使わずにスキップする方法もあって、ループ内の処理を即時関数で囲って、スキップしたい時にreturnしてその関数の処理そのものを停止させる。

もう一つは処理全体をifで囲ってマッチする時だけ実行すれば事実上そのループ内の処理はなくなるというただそれだけw

JavaScriptでループ中に定義した関数の中身の変数が変わってしまう

このようにループの中で変数を定義し、その中で定義した関数の中でその変数を使った状態だと結果的にあとからその関数を実行すると中身は最後のループのものになってしまう。

var hash = {'りんご':'赤い', 'カラス':'黒い', '空': '青い'}
var box = {};
for (var key in hash) {
var value = hash[key];
box[key] = function() {
return value;
}
}
for (var key in hash) {
console.log(key + 'は' + box[key]());
}

結果こうなる

$ node test.js
りんごは青い
カラスは青い
空は青い

こんな時にクロージャを使って変数を定義するところからスコープを切り分けるっていうんか?難しい言葉はよくわからんが、関数として定義してやればその部分のスコープは別になるから関数ごとに分けられる

var hash = {'りんご':'赤い', 'カラス':'黒い', '空': '青い'}
var box = {};
for (var key in hash) {
(function() {
var value = hash[key];
box[key] = function() {
return value;
}
})();
}
for (var key in hash) {
console.log(key + 'は' + box[key]());
}

即時無名関数を使っているので特に何か起動しなくても実行されている

$ node test.js
りんごは赤い
カラスは黒い
空は青い

こうして変数のスコープが違うのであとから実行してもそれぞれ期待通りの結果となる

Pythonで画像URLを指定した場所に単純に保存

Pythonで画像URLを保存する

import sys
import urllib2
import re
def download(url, path):
fp = urllib2.urlopen(url)
local = open(path + re.sub(r'[:\\\/]', '_', url), 'wb');
local.write(fp.read());
local.close()
fp.close()
download(sys.argv[1], sys.argv[2]);

このようにして実行すると画像がダウンロードされる

python example.py http://k.yimg.jp/images/top/sp2/cmn/logo-ns-131205.png ./

あとはPythonでWebページの画像URLを取得してきてこの関数に渡せば指定したページの画像をすべて自動保存できる。何に使うかは言うまでもなかろう!

開発環境のLinuxで時間のずれを修正する

Linuxで時間のずれを修正したいときはこうする

[vagrant@localhost ~]$ sudo date -s "2015/03/29 19:05:00"
2015年  3月 29日 日曜日 19:05:00 EDT
[vagrant@localhost ~]$ date
2015年  3月 29日 日曜日 19:05:04 EDT

設定した通りになるので、例えば未来の値、過去の値、それぞれの検証結果を知りたいときはこれを利用して好きな時間を設定できる。開発環境では現在の時刻に自動的に合わさる必要性は私の中では特にない。

Pythonで外部URLを取得する

Pythonなら簡単に習得できる

import urllib2
fp = urllib2.urlopen('http://example.com')
print fp.read()
fp.close()

実行するとこうなる

$ python test.py
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<meta charset="utf-8" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<style type="text/css">
body {
background-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
}
div {
width: 600px;
margin: 5em auto;
padding: 50px;
background-color: #fff;
border-radius: 1em;
}
a:link, a:visited {
color: #38488f;
text-decoration: none;
}
@media (max-width: 700px) {
body {
background-color: #fff;
}
div {
width: auto;
margin: 0 auto;
border-radius: 0;
padding: 1em;
}
}
</style>
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is established to be used for illustrative examples in documents. You may use this
domain in examples without prior coordination or asking for permission.</p>
<p><a href="http://www.iana.org/domains/example">More information...</a></p>
</div>
</body>
</html>