走りながら休む

このエントリーをはてなブックマークに追加

ごくまれにですが、自転車で100kmとか200kmとか走ることがあります。

そんな中で一つの教訓として心にとどめていることがひとつ。「走りながら休む」ということです。

走りながら休む

長距離をより短い時間で走るために色々試した結果、「走りながら休む」のが一番効率が良かったです。

これは自転車に限らず、ある目標に向かって行動する時全般に当てはまるんじゃないかなと思います。

止まらなければ前に進む。

当たり前なんですが、止まらなければ前に進みます。疲れてくると休みたくなりますが、止まって休んでいる間は一切前には進みません。

どんなに遅いスピードでも、走り続けていれば、時間経過と共に確実に前に進むことができます。

頑張りには限度がある。

「しっかり休んだ後に集中して頑張る」という手もありますが、いくら頑張ると言ってもある程度のところに限界があって、それ以上スピードが上がらなくなります。

余談ですが、自転車で受ける空気抵抗は速度の2乗に比例するので、4倍がんばっても2倍くらいのパフォーマンスしか出ずロスが多いです。(詳しくは、空気抵抗を。)

走りながらでも休める。

30km/h超を維持して走り続けるのは体力を消費しますが、10km/hとか15km/hくらいの惰性で走り続けるのは難しくありません。そして、15km/hくらいなら走りながらでもストレッチできたりするので、体を休めることができます。

休むのに止まる必要は、実はないかもしれません。

そういうわけで

何が言いたいのか分からなくなりましたが、僕は生活の全時間をかけて、My365を前に進めようと思います。

※ スポーツバイクでスーッと走って信号待ちしていると、信号無視のママチャリにいとも簡単に抜かされることからも、「速く走る→止まる」はロスが多いことが分かります。

株式会社シロクでは、My365を一緒に作る仲間を募集しています!
ご興味のある方は、@katty0324またはrecruit@sirok.co.jpまでご連絡ください。

PHPでちょっとした処理をしたいなら対話シェルが便利。

このエントリーをはてなブックマークに追加

「PHPでちょっとした処理をさせたいなー」という時に、今までいちいちテキストファイルにソースコードを書いて保存して実行する・・・みたいなことをしていました。

$ vim somescript.php
$ php somescript.php
$ rm somescript.php

ところが最近PHPのドキュメントを読んでいてある発見をしました。

対話シェルがあった

PHP: 対話シェル – Manual

普通にPHPを解釈してくれるシェルがありました。

$ php -a

起動方法はターミナルで、-aオプション付きでphpを実行するだけ。

Interactive shell
 
php >

シェルが立ち上がって、入力待ちの状態になります。

ちょっとした計算なら十分使える

実際に使ってみると、ちょっとした処理なら十分に使えるなー、という感じ。

php > echo sqrt(1+2+3+4+5);
3.8729833462074

ちょっと計算したいなー、とか。

php > echo htmlspecialchars('<>');
&lt;&gt;

ちょっとした文字列変換したいなー、とか。

php > echo json_encode(array('user'=>'katty0324'));
{"user":"katty0324"}

データをJSON化したいなー、とか。

使い道は色々ありそうです。

株式会社シロクでは、My365を一緒に作る仲間を募集しています!
ご興味のある方は、@katty0324またはrecruit@sirok.co.jpまでご連絡ください。

PHPでHTMLをパースして解析する簡単な方法

このエントリーをはてなブックマークに追加

今、個人的に管理しているサイトのHTMLが正しく出力されているかを確認するためのスクリプトを書いています。そのために、出力されたHTMLを解析して、中に適切な情報が含まれているかを知る必要が出てきました。

そういうわけで、いわゆるスクレイピングのようなことをしたくなってきました。

HTMLの解析はなかなか大変

これがJSONデータを解析するとかなら良いのですが、HTMLを細かく解析するのはなかなか大変です。

なぜなら、HTMLというのは結構みんな自由に書かれてしまっているからです。それでいて、そんな自由に書かれたHTMLもブラウザ上は動いてしまうため、それで良しとされてしまっている。時に中身は最悪だったりします。コンピュータが処理するには、厳密性に欠けるデータなんですね。

simplexml_load_stringでは解析できない。

「PHPに便利な関数ないかなー」と探していると、simplexml_load_stringという関数がありました。これは、XML文書をパースしてオブジェクト化する関数です。これで、HTMLも解析してくれないかな・・・と試してみます。

$html = file_get_contents('http://blog.katty.in/');
$xmlObject = simplexml_load_string($html);
var_dump($xmlObject);

結果としては惨敗。

bool(false)

失敗コードが返ってきました。HTMLで書かれているものって閉じカッコが無かったり、入れ子構造がおかしくなっていたりするので、仕方ないといえば仕方ない・・・。

HTMLを整形できるメソッドがあった

もう少し調べてみると、PHP5から追加されたクラスですが、 DOMDocument::loadHTML を使えば、HTMLをXMLとして適切に整形できるらしいことを知りました。

$domDocument = new DOMDocument();
$domDocument->loadHTML($html);
$xmlString = $domDocument->saveXML();

こんな感じで、HTMLを整形できます。

整形前

<!DOCTYPE html>
<html dir="ltr" lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>三度の飯とエレクトロン</title>
<link rel="profile" href="http://gmpg.org/xfn/11" />
<link rel="stylesheet" type="text/css" media="all" href="http://blog.katty.in/wp-content/themes/twentyeleven/style.css" />
<link rel="pingback" href="http://blog.katty.in/xmlrpc.php" />
<!--[if lt IE 9]>
<script src="http://blog.katty.in/wp-content/themes/twentyeleven/js/html5.js" type="text/javascript"></script>
<![endif]-->
<link rel="alternate" type="application/rss+xml" title="三度の飯とエレクトロン &raquo; フィード" href="http://blog.katty.in/feed" />
<link rel="alternate" type="application/rss+xml" title="三度の飯とエレクトロン &raquo; コメントフィード" href="http://blog.katty.in/comments/feed" />

整形後

<!DOCTYPE html>
<html dir="ltr" lang="ja"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width"/><title>&#xE4;&#xB8;&#x89;&#xE5;&#xBA;&#xA6;&#xE3;&#x81;&#xAE;&#xE9;&#xA3;&#xAF;&#xE3;&#x81;&#xA8;&#xE3;&#x82;&#xA8;&#xE3;&#x83;&#xAC;&#xE3;&#x82;&#xAF;&#xE3;&#x83;&#x88;&#xE3;&#x83;&#xAD;&#xE3;&#x83;&#xB3;</title><link rel="profile" href="http://gmpg.org/xfn/11"/><link rel="stylesheet" type="text/css" media="all" href="http://blog.katty.in/wp-content/themes/twentyeleven/style.css"/><link rel="pingback" href="http://blog.katty.in/xmlrpc.php"/><!--[if lt IE 9]>
<script src="http://blog.katty.in/wp-content/themes/twentyeleven/js/html5.js" type="text/javascript"></script>
<![endif]--><link rel="alternate" type="application/rss+xml" title="&#xE4;&#xB8;&#x89;&#xE5;&#xBA;&#xA6;&#xE3;&#x81;&#xAE;&#xE9;&#xA3;&#xAF;&#xE3;&#x81;&#xA8;&#xE3;&#x82;&#xA8;&#xE3;&#x83;&#xAC;&#xE3;&#x82;&#xAF;&#xE3;&#x83;&#x88;&#xE3;&#x83;&#xAD;&#xE3;&#x83;&#xB3; &#xBB; &#xE3;&#x83;&#x95;&#xE3;&#x82;&#xA3;&#xE3;&#x83;&#xBC;&#xE3;&#x83;&#x89;" href="http://blog.katty.in/feed"/><link rel="alternate" type="application/rss+xml" title="&#xE4;&#xB8;&#x89;&#xE5;&#xBA;&#xA6;&#xE3;&#x81;&#xAE;&#xE9;&#xA3;&#xAF;&#xE3;&#x81;&#xA8;&#xE3;&#x82;&#xA8;&#xE3;&#x83;&#xAC;&#xE3;&#x82;&#xAF;&#xE3;&#x83;&#x88;&#xE3;&#x83;&#xAD;&#xE3;&#x83;&#xB3; &#xBB; &#xE3;&#x82;&#xB3;&#xE3;&#x83;&#xA1;&#xE3;&#x83;&#xB3;&#xE3;&#x83;&#x88;&#xE3;&#x83;&#x95;&#xE3;&#x82;&#xA3;&#xE3;&#x83;&#xBC;&#xE3;&#x83;&#x89;" href="http://blog.katty.in/comments/feed"/>

整形してからsimplexml_load_stringを使えば解析できる

そういうわけで、整形してからsimplexml_load_stringを使えば無事に解析することができました。

$html = file_get_contents('http://blog.katty.in/');
$domDocument = new DOMDocument();
$domDocument->loadHTML($html);
$xmlString = $domDocument->saveXML();
$xmlObject = simplexml_load_string($xmlString);
var_dump($xmlObject);
object(SimpleXMLElement)#2 (4) {
  ["@attributes"]=>
  array(2) {
    ["dir"]=>
    string(3) "ltr"
    ["lang"]=>
    string(2) "ja"
  }
  ["comment"]=>
  object(SimpleXMLElement)#3 (0) {
  }
...

連想配列にしてしまえばHTML内の要素を取り出すのも簡単

あとは煮るなり焼くなりですが、連想配列にしてしまえば更に簡単に扱えます。たとえば次のように、読み込んで解析したオブジェクトからheadタグ内のtitleタグ内の値を取り出せば、そのページのタイトルを取り出すなどできます。

$array = json_decode(json_encode($xmlObject), true);
echo $array['head']['title'];
三度の飯とエレクトロン

文字化け対策

XMLへの変換に関して文字化けが発生する場合があるようです。

DOMDocument::loadHTMLで文字化けする場合

一手間加えれば解決するので、それでも楽ですね。

株式会社シロクでは、My365を一緒に作る仲間を募集しています!
ご興味のある方は、@katty0324またはrecruit@sirok.co.jpまでご連絡ください。

Linuxシェルでファイルの中身の一部を書き換えるsed

このエントリーをはてなブックマークに追加

Linuxのシェル上でファイルの一部を書き換えたいときがあります。

たとえば、設定ファイルを書き換えるシェルスクリプトを作りたい、など。

テキスト変換コマンドsed

sedは、stream editorの略で、入力されたテキストに何かしらの変換をかけて出力するコマンドです。

テキトーにfruitsなどというテキストファイルを作っておきます。

$ cat << 'EOT' >> fruits
> apple
> banana
> orange
> grape
> EOT

中身を表示してみます。フルーツ盛り合わせです。

$ cat fruits
apple
banana
orange
grape

中身をsedに渡して、バナナをバナナジュースにします。

$ cat fruits | sed "s/banana/banana juice/" 
apple
banana juice
orange
grape

bananaの部分がbanana juiceになって表示されました!でも、まだ保存はされていません。

リダイレクトで保存

テキストの変換はできたので、あとは元のファイルに保存しなおせば完了です。

$ cat fruits | sed "s/banana/banana juice/" > fruits
$ cat fruits
apple
banana juice
orange
grape

バナナジュースができました!

もう少し短く書く

sedコマンドは標準入力から文字列を受け取ることもできますし、パラメータで指定されたファイルからテキストを呼んで処理することもできます。

sed -e "s/banana/banana juice/" fruits > fruits

これでも同じようにバナナジュースができます!

株式会社シロクでは、My365を一緒に作る仲間を募集しています!
ご興味のある方は、@katty0324またはrecruit@sirok.co.jpまでご連絡ください。

iPhoneが勝手に震えまくる事件とその教訓

このエントリーをはてなブックマークに追加

このところiPhoneが勝手に震えるようになりました。

「ブーン」と震えて、でも画面には特に何の表示もなく・・・。

それが最近ひどくなった

前は「ブーン」だったのが、最近「ブーンブブーンブーンブーン」くらいひどくなりました。

もうだめか、修理か買い替えか・・・と思ったところで犯人が分かりました。

犯人はGmailアプリ

この僕のiPhoneをやたら鳴らしていた原因はGmailアプリでした。

要するにメールが届くと、プッシュ通知で震えるんですね。

今まで複数のメールアドレスを使い分けていたんですが、それを最近gmail一箇所に集約したせいで「ブーンブブーンブーンブーン」になったようです。

プッシュ通知の使い方の教訓

iPhoneのプッシュ通知には3種類あります。

  • テキスト
  • サウンド(ピコピーンていう音とブーン)
  • バッジ(アプリアイコンにつく数字)

これらは組み合わせることができて、単体で使うこともできるし全部まとめて使うこともできます。

教訓としては、

サウンドを使う時はテキストも同時に使うべし

ですね。

音がなったり携帯が震えたりしているのに、誰が鳴らしているかわからない現象を避けるためには、サウンドを使う時に同時にテキストを添えるべきです。

株式会社シロクでは、My365を一緒に作る仲間を募集しています!
ご興味のある方は、@katty0324またはrecruit@sirok.co.jpまでご連絡ください。