PHP に関する投稿を表示しています

算術平均を逐次計算したい。

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

数式をこねくりまわす知識や技術はないので自分で求められないのですが、平均値って逐次計算できるのかな?を調べたメモ。

x = [...] // 元の数列
z = ...   // 追加したい数

// 平均値
Average(x) = Sum(x) / Count(x)

// 数を追加した平均値
Average(x + z) = Average(x) + ((z - Average(x)) / Count(x))

調べていたらこういう式も。平均に個数をかけて数を足し、そこから新しい個数で割れば、新しい平均だよね、というもの。そりゃそうだわ。

Average(x + z) = (Average(x) * Count(x) + z) / Count(x + z)

どちらにしても個数と平均値だけ持っておけば逐次計算できますね。後者は掛け算するので、個数や平均値が大きすぎると扱えなさそうなので、前者のほうがよさそう。

試しに実装してみるとこういう形。

class MeanStream
{
    private $mean = 0;
    private $dataCount = 0;

    public function __construct() {
    }

    public function add($num) {
        $this->dataCount++;
        $this->mean = $this->mean + (($num - $this->mean) / $this->dataCount);
        return $this;
    }

    public function get() {
        return $this->mean;
    }
}

echo new MeanStream()
    ->add(1)
    ->add(7)
    ->add(8)
    ->add(6)
    ->add(2)
    ->add(5)
    ->add(1)
    ->add(8)
    ->add(9)
    ->add(4)
    ->get();

echo (1+7+8+6+2+5+1+8+9+4) / 10;
// 5.1

あってますねー

 
ちなみに、当然のことながら上記の例だと浮動小数点数を使うので、使う値によっては表現の都合で微妙に数値が変わるのでその点だけ注意ですね。

$values = [];
for($i = 0; $i < 10; $i++) {
    $values[] = mt_rand();
}

$mean = new MeanStream();
foreach ($values as $value) {
    $mean->add($value);
}

echo sprintf('%.30f', array_sum($values) / count($values));
// 995988838.500000000000000000000000000000

echo sprintf('%.30f', $mean->get());
// 995988838.499999880790710449218750000000

PHP じゃない言語で実装するとして、もし Decimal のような、よろしく精度をもってくれる機能があればそれを使ってあげるほうがよさそうです。PHP は言語として標準に Decimal がないのでどうするんだろう、 bcmath とか gmp というのがありそうだけど extension に左右されるなー。まあ composer.json で extension について依存あるよーと記載すればいいのか。
PHP: 数学 - Manual

Packagist みると幾つかありそうなので、このあたりを使ったほうがいいのかなー。

 
と、話がそれてきたあたりでおしまい。ライブラリの話はまた今度。

CSV ファイルで文字化けするんだけど!!!を調べた

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちは、ごみばこです。

CSV ファイルってデフォルトでエクセルを使って開けるんですけど、どうにも文字コードを上手いことしてあげないとだめなんですよね。ということで幾つかの組み合わせについてぐぐったり、試したり、調べたのでメモ程度にー。
(ぐぐったらいろんな人が書いていて今更感もありますが・・・)

試したコードはこちら

<?php
// http://php.net/manual/ja/mbstring.supported-encodings.php
$encoding = [
	'UTF-8',
	'UTF-16BE',
	'UTF-16LE',
	'UTF-32BE',
	'UTF-32LE',
	'EUC-JP',
	'SJIS',
	'SJIS-win',
	'ISO-2022-JP',
	'CP932',
];

// https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E3%82%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%83%9E%E3%83%BC%E3%82%AF
$bom = [
	'UTF-8' => chr(0xEF) . chr(0xBB) . chr(0xBF),
	'UTF-16BE' => chr(0xFE) . chr(0xFF),
	'UTF-16LE' => chr(0xFF) . chr(0xFE),
	'UTF-32BE' => chr(0x00) . chr(0x00) . chr(0xFE) . chr(0xFF),
	'UTF-32LE' => chr(0xFF) . chr(0xFE) . chr(0x00) . chr(0x00),
];

$ary = ['abcdef', 'テスト', 'ほげほげ', '??'];
ob_start();
echo '"' . implode('","', $ary) . '"'; // とりあえず雑に...
$buf = ob_get_flush();

// bom なし
foreach($encoding as $e) {
	file_put_contents("{$e}.csv", mb_convert_encoding($buf, $e));
}

// bomあり版
foreach($encoding as $e) {
	if (empty($bom[$e])) {
		continue;
	}

	file_put_contents("{$e}_bom.csv", $bom[$e] . mb_convert_encoding($buf, $e));
}

寿司ビールが正しく出れば Unicode も適切に処理されているはずなので安心安全ですね!

では結果を順番に見ていきましょう。















まとめるとこんな感じですね!

・CP932 や SJIS, EUC-JP などでは案の定、寿司ビールは出ません。
・UTF では BOM ありでないと文字化けしてしまいました。
・UTF-16 では LE にする必要がありました。
・UTF-16 では他のものと異なり、自動でカンマ部分の解釈がされないようでした。
・UTF-32 はダメです。

というわけで、とりあえず UTF-8 BOM あり にしておけば、色々と安心安全に動くんじゃないかなーと思います。

または、どうしても表でほしいなら xlsx を直にいじくりまわす、ですかねー。
PHP なら phpexcel 。Java なら POI 。Python なら xlrd + pandas 。
などと様々な言語から xlsx を利用する手立てがあります(あたまの良い人ありがとう)ので、これらを使っていくことも検討すべきかと思います。まあ、つらいところもあるので、難しいものなら、そもそもいる?、なんて話にした方がいいよいかもしれませんね!

Regexp::Trie を PHP に移植した

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちは。ごみばこです。

packagist に公開してあるので composer require regexp-trie:dev-master とでもしたらすぐに使うことができます。

sters/regexp-trie - Packagist

 

use RegexpTrie\RegexpTrie;

$regexpTrie = RegexpTrie::union([
    'C','C#','C++','Clojure','CoffeeScript','CommonLisp',
    'Java','JavaScript','JScript','J#','JSX',
    'Perl','PHP','PostScript','PowerShell','Python',
]);

var_dump($regexpTrie->toRegexp());
// =>
//     /(?:C(?:(?:\+\+|lojure|o(?:ffeeScript|mmonLisp)|#))?|J(?:ava(?:Script)?|S(?:cript|X)|#)|P(?:erl|HP|o(?:stScript|werShell)|ython))/

これは正規表現において Wikipedia や はてなキーワード のような、多数のキーワードを同時に処理しようとすると、選択が多数になるものができあがり、非常にパフォーマンスが悪いものを、トライ木を使って解決するためのものです。

元ネタはこのあたり。

このトライ木による正規表現の生成ですが、ご覧のとおり Perl や Ruby ではすでに作られているようで PHP には特に見当たらなかったので Ruby のものから翻訳してみました。( Perl のソースはちょっと分からないところだらけ過ぎてつらかったので… )

追)PHP には特に見当たらなかったと思っていたのですが packagist を見たらそれっぽいものがありました。。

s9e/regexp-builder - Packagist

ちゃんと実装を追っていないのですが Regexp::Asemble っぽい挙動をしているような…?

Web Audio API と IBM Bluemix のワトソン君で音声認識(追記あり)

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちはごみばこです。

この記事はteratailの「Bluemixアドベントカレンダー」の参加記事として書かれました。

昨日は yutori_828 さんによる「クラウドx IoT女子会で推し(二次元)の話をしてきた」でした。
クラウドx IoT女子会で推し(二次元)の話をしてきた – ユニバーサルIoT女子文明

やりたいこと

最近いろいろな人と話すことが多く、手書きなりPCなりスマホなりでメモしているものの、すべてメモしているわけではありませんし、覚えていないことも多くあります。じゃあお手軽にメモするソリューションないかなあというところで、パッと思い浮かんだのが録音×音声認識です。

スマホで録音しつつ、音声認識しつつ、クラウド上にメモすることができれば最高なのでは…?

こんなところから始まっています。

できたもの

こんなかんじのやつ。

watson_audio

※編集していません。クリックしてからしゃべっています。
※5秒録音→文字起こし→5秒録音→文字起こし→... という処理になっています。

使ったもの

IBM Bluemix

アドベントカレンダーのテーマにもなっている、IBMが提供するAPIやPaaSといったサービスの総称です。

簡単に登録手順をおさらいしておきます。

Bluemix への登録

bluemix_register

以下の URL から Bluemix への登録ができます。

https://console.ng.bluemix.net/registration/

僕の場合は IBM ID を登録してから Bluemix をしましたが、Bluemix だけの登録もできるようです。

登録するとメール認証が求められます。メールからリンクを踏むと登録完了です。ここから30日間はトライアルということで無料で Bluemix のすべて(?)の機能を使うことができます。思う存分に楽しみましょう!

アプリケーションの登録

Bluemix では Cloud Foundry アプリ と呼ばれる、heroku のような、環境が整っていてコードを自由に設置することができる、PaaS を利用することで、Web サイトを制作することができます。

Cloud Foundry アプリは以下のような手順で登録していきます。

アプリケーションの画面を開いて新規追加。

bluemix_app

テンプレートが選べるので使いたいものを選びます。僕はPHPを選択しています。

bluemix_app_template

あとは勝手に環境が作られ、アプリケーションが動き始めます。すごい。

bluemix_app_run

この画面上で「アプリの表示」を押すと、ブラウザでその Cloud Foundry アプリの URL が開かれます。この URL で確認をしていくことになります。

IBM Bluemix Watson

IBM Bluemix には Watson という人工知能なAPI群があります。この中に Speech to Text という音声認識を行うことのできるAPIがあります。ここに対して、音声データを送ることで、Watsonが解析し、最適な文章を取得することができます。

Watson のすごいポイントは、英語だけでなく、日本語にも対応し、さらに漢字変換もされているところです。

中身に詳しいわけではありませんが、いくつか結果を見ての推測ですが、音声をある程度区切り区切りにし、それぞれに対する適切な文章を機械学習なもので割り出しているようです。その文章はすでに漢字変換されているものなので、変換されている文章が取得できるのでは?と思っています。さらに出来上がった文章の前後関係を見て、補正し、最終的により整合性の高そうな文章を提供している……のかなあ、なんて。

Watsonを利用するには、まず、Bluemix上でWatsonを接続する必要があります。

アプリケーションを開いたとき、サイドメニューに「接続」があります。これを開くと次のような画面が開き、接続したサービスの一覧が表示されます。

bluemix_app_connect

新規接続を選び、画面をよしなに進めていくと、Watson を選べる画面になります。ここでは Speech to Text を選択しました。
ほかにもたくさんサービスがあって面白そうですね;)

bluemix_app_connect2

そうすると、先ほどの接続したサービス一覧に出てくるようになり、認証情報を得ることができます。

bluemix_app_connect3

認証情報に書かれている情報をもって以下のようなAPIを実行することになります。


※Speech to Text の例

■HTTP リクエスト
○URL
https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true&model=ja-JP_BroadbandModel

○HTTP ヘッダ
Authorization: Basic {base64_encode("username:password")}
Content-Type: {audio content type}

※ HTTP ヘッダの例
Authorization: Basic dGVzdDp0ZXN0
Content-Type: audio/wav

○HTTP メソッド
POST


■HTTP レスポンスの例
{
  "results": [
    {
      "alternatives": [
        {
          "confidence": 0.106,
          "transcript": "うん "
        }
      ],
      "final": true
    },
    {
      "alternatives": [
        {
          "confidence": 0.32,
          "transcript": "看板 見る "
        }
      ],
      "final": true
    }
  ],
  "result_index": 0
}

API詳細な説明については公式ドキュメントを見るとよいでしょう。

Speech to Text - API | IBM Watson Developer Cloud

Web Audio API と MediaStream Processing API

録音の部分では、スマホで、という想定ではありますが、やはり世界はWebに集約されるよう動いている(?)ので、ここはWebの資産を利用しましょう。

Web Audio APIを利用すると、音声に関する取り扱いを行うことができます。
そこに合わせて MediaStream Processing API を利用することで、ブラウザのみで動画や音声の記録ができます。

組み合わせることで、録音したデータをバイナリとして取得することができます。

作業していて、ちょっとだけ詰まったのですが、Chrome ではいつからか https な URL でないと Web Audio API を利用することができませんでした。音も隠さないといけない情報なので、というところだと思います。録音して外に送るってときに、パスワードとか個人情報とか社内機密をしゃべっているようなデータを http で送るとかめっちゃ怖いですよね…笑

詳しい仕様や実装などは僕もあまり詳しくないので、詳細はこちらの記事を参考にしました。

Media Capture and Streams と Web Audio API で実現する録画・録音・ WAVファイルの生成 | CYOKODOG

IBM Bluemix DevOps Services

Bluemix に初めて登録して、アプリケーションを登録したところで、いろいろ眺めていたのですが、 heroku のような、PaaSの触感がありました。

コードをデプロイするにはCLIを入れてね!なんて書いてあったのですが、ちょっとローカルPCにあれこれ入れるのは避けたいなあと思い、ひとまずなるべく手をかけずに…。

と思っていたら、Git からデプロイできるそうなので、そちらを試してみました。リモートリポジトリが提供されて、ローカルのコードを Push したらデプロイされる、といったものを想像していたのですが、それだけの機能ではありませんでした。

アプリケーションの Git を有効化すると「コードの編集」というボタンが現れます。

まさか、と思い押してみると、そこにはかっこいいオンラインエディタが…!

bluemix_web_editor

この中では、コードの編集はもちろんのこと、Gitの操作も行うことができます。そして何より、編集して、そのままデプロイができます。これにより、とりあえずBluemixを試す、という動きをサクサク行っていくことができました。

bluemix_web_editor2

まとめ

結果として出来上がったものは、微妙な精度ではあるものの、IBM Bluemix を初めて触ってみて、便利そうなところを体感するには十分でした。

ばーーーっと書いてみた程度のものですが、gistに貼ってあります。試してみたい方はどうぞ!

https://gist.github.com/sters/46e042e5976b6244119baaf26b096e82

登録してから30日間は無料で使えるので、もうしばらく無料枠の間に遊んでみようと思います。Speech to Text 以外の Watson API も、画像認識を始め言語に関するものなど、楽しそうなものが多いので、あんなものやこんなものが作れるんじゃないだろうか、なんて思っています。

追記:ドキュメントを眺めていたら WebSocket をつなげるそうなので、それを使えるとさらに良いかも…!

明日以降もお楽しみに! -> Bluemixアドベントカレンダー

今度はチームでISUCONに参戦したものの予選敗退でした

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

詳しくはこちら > ISUCON6 開催&日程決定! #isucon : ISUCON公式Blog

今回はぼっちーむを回避して、会社の人と合わせて3人(+おまけ)でやっていました。
5、6人いれば2チームで競う感じの参戦方法もありだったのですが、ちょっと都合が合わず。。なので1チームでした。

今回は初のチーム参戦ということもあって、意外と勝手がわからないことが多く、苦戦しました。

結果としては予選敗退でした・・・次はもうちょっと上位へ・・・!

ちなみに前回の参加レポはこちら > ISUCON5 オンライン予選に参加していました

やったことをまとめていきますねー

==============================

■初Azure!!

初というとちょっと語弊がありますが、触ったことがあるのはかなり昔のAzureなので初Azureでもいいでしょう。
当時と比べてかなり進化したUIになっていて、とても使いやすかったです。
ガッツリインフラマンじゃないのでなんとも言えないところもありますが、まあまあいい感じなのではないでしょうか。

ちょっぴり残念ポイントとしては、無料枠をなぜか使いきっており(もしかして:MSのAPI的なやつで登録した?)、
仕方なく従量課金になったところでしょうか。数百円くらいの請求が来ると思います。まあまあ。

■とりあえずシステムをPHPに切り替えた

まっさきにPHPへ切り替えました。
切り替えたとき、nginxのMIME読み込みがなかったためか、Chromeで正しく画面が表示されておらず、この解決にも時間がかかってしまいました。
ただまあ、静的ファイルはちゃんと出ていたのでベンチは通っていましたw

3000点くらいですかね。

ちなみにPHP7が入っていました。
5.6.xxxだったら7入れてようと思っていたのですが、さすがにそこでの利点はないようです;;

■とりあえずgit pullで更新できるようにした

とりあえず社内のリポジトリにぶっこんで、git pullしてコードを更新できるようにしました。
capistranoなど仕込んでもよかったのですが、おてがるに、最速に、安定に。

■isudaの文字列長を別カラムに保存してインデックスを張った

チームメイトがなんだこれはーーーって言いながら直していました。
これでスコアが6000点くらいでしたかね。

他にもインデックスがなさそうなところにもりもり張ってこのくらいだったかと。

■isutar→isudaにHTTP通信するのをやめた

ぼくがなんだこれはーーーーって言いながら書き直していました。
具体的にはDBも同居しているんだからそのまま直にSELECT掛けにいけばいいんじゃないかなあ、という実装に変更しました。
同居ではなく、サーバ台数が多いなら分けたほうが縦横に広げやすいと思うので、そっちのほうがいいですよねきっと。

この同タイミングで、nginxも1サーバだけにするように変更しました。

ちょこちょこバグが発生して時間がとられていくものの、無事完了してスコアが15000点くらいです。

■isuda→isutarにHTTP通信するのをやめた

逆も同じつくりになっていたので、こちらも同様にしてやめました。
また同タイミングで、nginxのfastcgicacheを入れました。

スコアが23000点ほど。

ただfastcgicacheはうまく設定できていなかったようで、スコアへの要因はあまりなかったようです。

■Redisキャッシュへ

ここまでですでにhtmlifyメソッドがヤバソウ、スターをキャッシュとかできないかなあ、といった話題が出ていました。
こつこつ裏で実装を進めており、夕方ころに完成、マージしていきます。

ここでスコアが25000点ほど。
うーん、キャッシュの作り方が悪かったのか、ちょっと微妙な結果でした。

■時間切れ。
といったあたりで終了の時間になりました。

2万点台に乗ったとき、ベンチのランキング上位に入ったので、このまま順調に対応していければ本選出場も行けそうな予感がチーム内にあったのですが、、
バグが出まくったりコンフリクトしたりと、課題が残る結果に終わってしまいました。

==============================

時系列的にはこんなところです。

やり残した部分や気になる部分を挙げると…

・htmlifyをちゃんと見れていなかった
 ここ改善する余地めっちゃありそう。

・スパムチェックも何かできそう
 バイナリがWebサーバになっていて、そこそこパフォーマンス高そうでしたが、HTTP通信はやっぱりコストが高いと思います。キャッシュできるといいなあ、とか。
 バイナリになっていて隠されていましたが、例えばベンチをガンガン回してチェックした内容をRedisとかnginxのリバースプロキシなどにとりあえず入れておくとか…。
 気合い入れてリバースエンジニアリング的なこととか…;;
 最初からちょっと様子をみていたのですが、パフォーマンス高そう、がわかったときに一気に後回しにしていました(この判断はただしい気がする)

・キャッシュをちゃんと作る
 もうちょっと気合い入れて作ったらもうちょっとスコア伸びてくれそう
 というか作ったキャッシュが当たっているか見てないのも問題→当たってないならそのキャッシュは作ってもダメなのではーーー

・最初にスコア計算の方法をちゃんと見ておくべき
 POST遅延がかなり減点されるので、そこで一部足を引っ張られていた可能性が高そう

・初期化処理生かせてない
 前回参加したISUCONでは初期化処理もそこそこコードを書いていたのですが、今回はまったく書いていませんでした。
 キャッシュを作ったり、下準備をしたりなどいろいろできるはず。。。

・個々人で開発できる環境整備してあげよう
 ケチって1サーバで動作確認しまくっていたのですが効率が悪すぎて。。。
 ローカルでも動くようにDBコピーするとかいろいろ手は打てたはず

・リブート検証してないよ
 結果としてはしなくてもよかった点数になりましたが、ここもちゃんと見てあげないと、でした。
 ルールにも再起動して大丈夫なこと、とかって書いてありましたね。

・git pullしてたけどコンフリクトしてやばい感じになってた
 雑にフリースタイルにコミット!プッシュ!マージ!していましたが、ぶつかって直すと壊れて、が後半に頻発してヤバイ感じになっていました。
 ある程度のルールを事前に決めるなりすり合わせするべきですねー

・個々人の役割があまり明確でなかった
 ある人はこれをやり、ある人も同じものをやり、が多くは無いですが少し発生していました。
 それぞれ得意スキルが異なっているはず(あまり詳しい得意スキルを把握していなかった)なので、最高のパフォーマンスを出せる場所へ誘導してもりもりやってもらう感じに~~~
 うぐぐぐ。。

ぐぬぬ・・・・課題が山盛りじゃ・・・

PHPカンファレンス2015へ参加していました

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちは。ごみばこです。

先日行われていた、PHPカンファレンス2015へ当日スタッフとして参加していました。

http://phpcon.php.gr.jp/2015/

参加した背景

これでも私はぺちぱーなのです。
もとい、最近はnodejsもrubyもunity3dもさっぱりで、ずっとPHPおじさん…。

ということで、PHP7とかHHVMとか色々おもしろそうですよ!とキャッチしており、
いま行くしかねえ!

と思ったときに、ちょうど当日スタッフの募集が行われていたので、PHPお世話になってるし面白そうだしやってみよう!と思いたち、当日スタッフに名乗りあげました。

「当日スタッフ」

当日スタッフの応募とかしてるけど実際なにしとんねんとやる前は思っていたので、きっと他の誰かも同じだと思い、やったことでも書いておきましょう。

  • スタッフTシャツを着る
  • 配布物のまとめ
  • 会場設営(机を出したり椅子を出したり)
  • 受付(配布物の手渡し)
  • セッションの案内、ルームの様子見
  • 片づけ(机しまって椅子しまって、ゴミ捨てして、)

基調講演も含めて、全部ではないですが、多くのセッションを見れたのは非常にうれしいです。スタッフとしては、セッションに集中しすぎるのはNGだと思うのですが…、、そこはちょっと反省点、、

悪かったポイントもいくつか挙げておくと、人が多いからいっか、となってしまったり。受付はもうちょっとなんとかできたなーと思います。スポンサーこっち、スピーカーこっち、とA4に書くだけでもだいぶ変わったでしょう。
あ!受付については、アクセス過多になっていたので、横にインスタンス立ち上げたらいい感じに捌けていったので、そこは自分でもよくやったと思います!

また、今までがわからないのですが、当日スタッフ向けの話が本当に当日しかなく、どこまでが当日スタッフの範疇なのか、誰に回せばいいのか、等々、多くはないものの、ちょこちょこどうしようかなポイントがあったのも事実です。みなさん日々のお仕事にプラスなので、そりゃ忙しく。前日までバタバタしていたようですし仕方ないですね。。

あとはちょっとどうなのかわからないのですが、内輪盛り上がりみたいなやつはやっぱりどこでも。僕自身はまあいいんじゃないっスか、というくらいですが、知り合いだけでウェーイしてるのは、新規参入が難しそうだなあ、とよく思います。

セッションへの感想とか

PHP7期待しかねえ…!おしまい。

・・・ちょっと嘘が入ってますね。
完全に個人的な話ですが、PHP7については期待しかないものの、お仕事ですぐにつかえなさそうな気がしていてちょっと残念です…。
めっちゃパフォーマンス上がっているようですし新機能もあるし、使いたいよなあ。
色々ちょうどいいタイミングだと思うんですけどねえ…(意味深)

他は、徳丸先生のインジェクション事例と、Drupal8とSkyWayの裏側を見ていました。

インジェクション事例は怖いっすねー。デモされるとよくわからんけどID/PW抜かれてるやべー!みたいな気持ちが湧いてきて、ヤバさ実感という感じです。
や、よくわからないわけじゃないですよ、これでも一応セキュリティを勉強していた身ですし、Web世界に身を置いているので…。今後はマイナンバー云々などもありますし、スマホ盛り上がってますし、がんばりましょう、というところで。

Drupal8は…。うん、どうだろう。よさそうだけど使うタイミングないかなあ…という感じです。。
CTFとかで出てくるとちょっとだけ面白いかもしれない(適当)

SkyWayの件は、SkyWayの話なのですが、どのような開発の歴史を歩んできたかという話でした。
WebRTCが云々SkyWayが云々ではなく、普通に普通にアプリケーションで利用しているミドルウェア的なものやデプロイ回り、それらツール構成の話、人員の話で、かなり興味深かったです。
APIが用意されていたり、安いとか色々いい感じで、Cloudn結構よさそうだなあという気持ちも出てきました。どこか時間とお金の余裕があるときにでもお試しでアプリ乗っけてみたいですね。

「PHPカンファレンス」

昨年は参加していなかった(はず)のでどんな雰囲気かわからなかったのですが、予想以上にたっぷりPHPだったと思います。近年のWeb界隈のいろんな話が飛び交うと思っていたのですが、見たセッションのせいか、そんなに多くはなかったと感じます。
それでいて、PHPの幅広い話題が出てきたり、LTや懇親会での深い話や、はたまた別方面に飛んでいくような話もおおく、非常に満足しています。

そんなセッションだけでなく、スタッフの皆さんだったり参加者だったりのさまざまな方と、PHPだけじゃなくて運用回りとか他の技術とかとか、なお話しをできたこともとてもよかったです。

素晴らしい出会いを用意してくれたカンファレンスに、PHPユーザ会に、スポンサーみなさまに、
圧倒的「感謝」!👏👏

私立プログラミングキャンプ2015 Tokyoに参加してました。

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

ピクシブさんにて、土日通しの泊まり込みハッカソンでした。

途中でちょこっと寝てしまったようですが、ほぼほぼ完走しました。

(ただし成果がついてきているとは言っていない)

ありがとうピクシブさん。
ありがとうゲヒルンさん。
ありがとうオプティムさん。

やったこと

・ごみばこいんのマルチプレイ対応(仮)
・誤字脱字検出っぽいなにか
・ごはんをたべる
・ツイッターを見る
・アニメを見る

ごみばこいんのマルチプレイ対応(仮)

作業時間の7割くらいをここに費やしました。

過去に一度やっていたのですが、ソースコードが消えてしまい…。

ということで、改めて作っていました。

サーバサイドでそれっぽい動きをするものを作り、ある程度の頻度で同期するようにしたら、
クライアント側の動きとサーバ側の動きが異なりすぎて、ひどいラグが起きているかのような同期性能になりました。

memo

ひどい…。

以前おこなっていた方が、WebSocketで高頻度で同期していたので、安定してくっついていましたが、
ちょっとこれではだめですね。

また出直してきます。

誤字脱字検出っぽいなにか

ちょっとした都合で、誤字脱字を判定したいなーという都合があり、
それっぽい実装でできるのでは?と思って試していました。

実装としては、機械学習のようななにかになっています。

よしなにわかち書きのようなことをしてからの、
前後の出てくる文字列を数えて、データとして持っています。

入力値に対しても同じように処理し、
もっているデータと付け合わせてレーベンシュタイン距離的なものを出し、
一番近いものを出す、だけです。

超簡単!!

が、たとえば、漢字が変換されてないとか誤変換とか、
「よしなにわかち書き」が雑すぎて、実用にはちょっと無理すぎるレベルでした。

その問題あたりをちゃんとしたら戦えそうな気がするので、
また試してみます。


tmp

ごはんをたべる

パンがメインでした!!!

あとエナドリ!!!

ビタミン不足しそうだったので、ウイダーインゼリー的なのも食べてました!!!

ツイッターを見る

ひと段落つくたびにツイッターみてました。

久々にまじまじ見てましたけど、結構おもしろいですよね。ツイッター。

アニメを見る

アニメを見ながらコード書いてました。

最近はやりの、友利奈緒さんを見ました。
非常に残念なことに、私には友利奈緒さんの良さがさっぱりわかりませんでした。
もうちょっと見るといいんですかね~。

あ、伊波まひるさんはかわいかったです。
良さがありました。

おわりに

ハックしてる感の高いハッカソンめっちゃ面白いのでまたやりたいです!!!!!!!

次はISUCONか~~!?!?!??

PHPの文字列結合がどうのこうの

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

どーもこんにちは。
PHPの文字列結合の話がちょっとでて、ほんとにそんなに時間差でるのかな?ということで簡単なテストコードをかきました。

string_concat.php
(DoSになりかねないのでほどほどでオナシャス...)

あれ・・・?
シングルクオート+ピリオドと、ダブルクオートの中に変数書くのと速度変わらなくね...??
それどころか後者の方が若干早いような気も....?????

.=じゃなくて、毎回代入だと、ダブルクオートの中の方が圧倒的に早いじゃないの....
うーーーーん????

最近?でもなさそうですけど、どこかのバージョンでなにか変わったんですかね。
詳しい方だれかおしえていただきたいです・・・

1 2 3