サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
災害への備え
taka512.hatenablog.com
現在担当している会社のシステムはPHPをSlimを利用している。そのシステムをSlim3からSlim4にバージョンアップした際に調べた事などを折角なのでブログに残しておく ドキュメント 下記は一通り目を通した slim4のドキュメント Slim 4 Documentation - Slim Framework Upgrade Guide - Slim Framework 3系からの変更点 Slim 4.0.0 released - Slim Framework slim4チートシート Slim 4 - Cheatsheet and FAQ | Daniel Opitz 3系から4系への変更点 index.phpの書き方 Slim4のスケルトンが公開されているのでこれを参考にすると良い Slim-Skeleton/index.php at master · slimphp/Slim-Skel
最近、仕事でpythonに触れる事が多いのでPyCon APAC 2013にいってきました。1日目に聞いたセッションの感想です。 パッケージングの今と未来 資料は以下です。 http://www.slideshare.net/aodag/ss-26183017 自分は7月から本格的にpythonを触り始めたのでpythonの歴史とか常識など抜けてる部分が結構あってその辺の知識の補完を期待して聞きました。 内容としてはわりと期待通りでパッケージングの基礎〜今〜未来とどんなツールが使われてきて、モダンと言われる構成の紹介と共に今後はこんなツールがあるよ的な内容でした。pythonに深く関わっている人の生の声的な事を聞けたのはよかったです。 sphinxと僕 資料は以下です https://dl.dropboxusercontent.com/u/540566/pyconapac2013/_bui
今回はphpunitをインストールした上で、ユニットテストを行う手順を記します。 ユニットテストはメソッド単体だったりの小さい粒度のテストで 今回はsrc/Taka512/Services/NameService.phpのgetNameメソッドをテストします。 サービスクラスは以下のような感じでコンテナに登録しているとします。 $container['app.services.name_service'] = $container->share(function ($c) { return new \Taka512\Services\NameService($c); });まずアプリケーション側をテストしやすい形に作り替えます。 具体的にはindex.phpで行っていたコンテナ作成処理等をbootstrap.phpに移動します。 web/index.php <?php define('EN
最近slimを使う機会がありそうなのでphpのマイクロフレームワークであるslimを基礎から触った。 まずはインストールしてslimとtwigで連携するところまで行う。 composerからのslimのインストール $ curl -s http://getcomposer.org/installer | php $ vi composer.json { "require": { "slim/slim": "2.*", "slim/extras": "2.0.*", "twig/twig": "1.*" } } $ php composer.phar installindex.phpの作成 $ mkdir web $ vi web/index.php <?php require '../vendor/autoload.php'; use Slim\Slim; use Slim\Extras\
去年は少し忙しくてブログの更新をさぼった一年でしたが、今年は更新頻度を上げていこうかなと思います(笑 awsでSymfony2.1の検証的な環境を構築する手順です。 Symfony2を触ってみたいけど、わざわざ設定するのはメンドクサイなーってな人向けです。awsな…
app/config/config.ymlに自分のバンドル設定を追加した際のメモ Taka512\GooglePlaceBundleみたいなバンドルを制作しましたが google placeはアクセスするのにapi keyが必要なため、app/configに 自分のバンドルの設定項目が欲しくなり追加してみました。 $ vi app/config/config.yml taka512_google_place: api_key: 'xxxxxxxxxx' $ php app/console cache:clear --env=prod [Symfony\Component\Config\Definition\Exception\InvalidConfigurationException] Unrecognized options "api_key" under "taka512_google
検索コマンド 検索を行うコマンド 戻値書式 VALUE []\r\n \r\n key 送信したキー flags ストレージコマンドで送信したflag bytes 取得データのデータ長 cas unique casコマンドで使用するキー(getsコマンドで取得) data block キーのデータ getコマンド 実行例 get hoge VALUE hoge 0 4 test END getsコマンド 実行例 gets hoge VALUE hoge 0 4 7 test END ストレージコマンド データ操作を行うコマンド 実行書式 [noreply]\r\n flags サーバがデータとともに格納して返送する値 exptime 有効期限(unix time)。もし0を指定した場合、項目が期限切れになることはありません byte データブロックのバイト数です。 noreply オプショ
自分がmonologについて社内のwikiにまとめた内容を公開してみます。 monologとは PythonのLogbookライブラリにインスパイヤを受けて作ったライブラリだそうです。 (みたいな事がreadmeの下の方に書いてありました) Symfony2ではこのライブラリをログ出力の標準ライブラリとして利用しております monologを使う上での理解すべき用語 Handler Handlerとはログの出力する機能です。 普通にファイルに出力したければ「StreamHandler」を指定し、 メールにログを出力したければ「SwiftMailerHandler」を指定します。 Formatter Handlerが出力する際のフォーマット設定機能です。 通常の行フォーマットで出力したい場合は「LineFormatter」を使いますが、 (パラメータで出力書式は変更可能) json形式で出力し
masterとcategoryのように複数テーブルに情報が分かれている場合でもDoctrine2はよろしくMAPしてくれます。 ただ、ORMを使っているとSQLが直接見えない分、残念なSQLになってしまう事があるので挙動を調べたメモです。 Doctirne2のテーブル間の関係性において「1対1」「1対多」「多対多」の3つがあります。 今回は「1対多」で参照の場合のメモとなります。 1. テーブル構成 hoge1が1でhoge_typeが多の関係性で初期データやデータ定義は下記とします。 # テーブル定義 mysql> desc hoge1; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-----
taka512です。Symfony Advent Calendar JP 2011の4日目の記事です。 Symfonyユーザ会の大御所から引き続いての4日目ということで緊張で手がプルプル震えつつ書いてます。 今回はSymfony2コマンドを実行した際の出力先を変更する方法を紹介します。 Symfony2にはコマンドという仕組みがあります。 例えばTestCommand.phpを下記のように作成したとします。 $ vi src/Taka512/TestBundle/Command/TestCommand.php 1 <?php 2 3 namespace Taka512\TestBundle\Command; 4 5 use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 6 use Symfony\Componen
Symfony2にはDoctrineFixturesBundleというデータを投入するバンドルが存在し、コマンドからデータを投入する方法はマニュアルに記載があります。 phpunitのsetUp処理でデータを「クリア→投入」したかったのですが、やり方が見当たらなかったので調べたメモとなります。 バンドルのインストールなどは「DoctrineFixturesBundle」を参照してください。 1.DoctrineFixturesBundleの簡単な使用例 1.1 Fixtureファイルの作成 Hoge/UserBundleにFixtureを作成する場合の例となります。 バンドルの「DataFixtures/ORM」の下にfixtureファイルを置きます # mkdir -p src/Hoge/UserBundle/DataFixtures/ORM/ # vi src/Hoge/UserBun
memcachedにつないだり、mongoにつないだり、複数のmysqlにつないだりとデータベースにつなぐ際の設定のメモとなります。 1. 通常の設定 $ vi app/config/parameters.ini [parameters] database_driver = pdo_mysql # myslを使うならこのまま database_host = localhost # 接続先ホスト database_port = # 接続先ポート database_name = symfony # データベース名 database_user = hoge # 接続ユーザ database_password = hage # 接続パスワード $ vi app/config/config.yml # Doctrine Configuration doctrine: dbal: driver: %d
Symfony2のデフォルトの設定を見ていきます デフォルトコンフィグ ログ出力例 loggerは「Symfony\Bridge\Monolog\Logger」で「Monolog/Logger」を継承しており そこでinfoやerrメソッドが定義されてます。 メイン処理は「vendor/monolog/src/Monolog/Logger.php」を見ると理解しやすいかなと思います 出力処理 $logger = $this->get('logger'); $logger->info('We just got the logger'); $logger->err('An error occurred'); 表示結果 [2011-10-23 16:17:07] app.INFO: We just got the logger [] [] [2011-10-23 16:17:07] app.ER
Symfony2ではある機能を利用する際にクラスをnewして呼び出すのではなく サービスとして呼び出すみたいな事を行います。 今回は仮登録メールを送信するサービスを実装する例として実装します (1)サービスクラスの作成 サービスの本体を作成します。 Symfony2本体のメール設定は設定済とし、呼び出し元で「UserTemporary」にemailとtokenを設定します。 $ mkdir src/Root/UserBundle/Mailer $ vi src/Root/UserBundle/Mailer/Mailer.php <?php namespace Root\UserBundle\Mailer; use Symfony\Bundle\FrameworkBundle\Templating\EngineInterface; use Symfony\Component\Routing\
データベースにテーブルを作成するまでとメタデータ回りのメモ mysqlに今回の接続に使用するアカウントとパスワードとデータベースを作成 $ mysql -u root -p create database symfony20 GRANT ALL PRIVILEGES ON symfony20.* TO symfony20@localhost IDENTIFIED BY 'hoge' WITH GRANT OPTION; FLUSH PRIVILEGES; データベースへの接続設定をSymfony2の設定ファイルに記載 $ vi app/config/parameters.ini [parameters] database_driver = pdo_mysql # myslを使うならこのまま database_host = localhost # 接続先ホスト database_port =
informationテーブルに対してアドミンジェネレータでCRUD処理を作成するメモ SonataAdminBundleを利用します。今回はエンティティは「src/Root/SiteBundle/Entity/Information.php」に作成済とします (1)インストール vendor下にインストールするが結構な数のバンドルのインストールが必要 $ vi deps [SonatajQueryBundle] git=http://github.com/sonata-project/SonatajQueryBundle.git target=/bundles/Sonata/jQueryBundle [SonataBluePrintBundle] git=http://github.com/sonata-project/SonataBluePrintBundle.git target=/
今回はSymfony2でpageを実装する際のやり方のメモとなります。 symfony1だとsfPager又はsfDoctrinePager オブジェクトが存在してpager機能を実装してたのですが Symfony2だとそんな機能はコア機能にはないようです。 そこでPagerBundleというバンドルを利用してpager機能を実装しました。 (1)インストール vender下にバンドルをインストールしてオートロードの設定をします。 # vender/bundles/MakerLabs下にインストールされます $ vi deps [PagerBundle] git=git://github.com/makerlabs/PagerBundle.git target=bundles/MakerLabs/PagerBundle # インストール $ php bin/vendors install
以前も調べた記憶がありつつも毎回忘れるのでメモ memcachedにはアクセスするための「memcached-tool」という便利ツールが存在する バージョンによって表示内容が少し異なりますが、新しいバージョンの「memcached-tool」でも 古いバージョンのmemcachedに対して利用可能 公式のソース https://github.com/memcached/memcached/blob/master/scripts/memcached-tool オプション display スラブの一覧と使用状況の表示 dump データのダンプ stats memcachedの統計データの表示 ※オプションを省略するとdisplayとなる displayオプション 「stats items」コマンドと「stats slabs」コマンドの結果を整形して表示 実行例(memcached 1.4.7
AWSを利用してSymfony2 スタンダード環境の構築メモ 既にCentOS6がリリースされてますが、AWSでCentOS6イメージが用意される気配が無いので 今回は「ubuntu-natty-11.04」の64bit版のイメージを利用 曖昧な記憶ですがAWSに↓の特典があり、無料で試せると思われます。 マイクロインスタンスはAWSアカウント作成してから1年間無料 データ転送(データ受信)は無料(記憶によると) AWSでubuntuのインスタンスを立ち上げるまでは割愛して接続してからの作業 必要モジュールをインストール sudo apt-get upgrade sudo apt-get install apache2 sudo apt-get install mysql-server sudo apt-get install php5 php5-mysql php-pear sudo a
perlbalとはperlで書かれたロードバランサ兼リバースプロキシ兼ウェブサーバ なソフトウェアで、delegateとかよりも設定とか簡単です(個人的には) 以前はapacheのリバースプロキシ機能を使ってバーチャルドメインで切っていたのだけど どうしても、同じサーバ内で別のウェブサーバにリバースプロキシするのが 上手く機能しなかったので、丁度YAPC2009で紹介されてたこいつを使ってみました。 まずはcpanでperlbalをインストール perl -MCPAN -e shell install IO::AIO install Net::Netmask install Perlbalでドキュメントを斜め読み confの下に設定例があるのでこれは見といた方が良い vi /root/.cpan/build/Perlbal-1.72/doc/config-guide.txt /root/.
mongoコマンドから接続した際にオールドタイプ(SQL脳)たる我々人類にも 調べやすい形でinsert、select、updateを行う方法を調べました。 定義参照 // use [データベース名] use [データベース名] // show databases show dbs // show tables show collections参照系 // select * from [コレクション名] db.[コレクション名].find() // select * from [コレクション名] where x=4 db.[コレクション名].find({x:4}) // select j from [コレクション名] where x=4 db.[コレクション名].find({x:4}, {j:1}) // select * from [コレクション名] limit 1 db.[コレクション
有効期限前のデータがmemcacheから追い出されていたのでその時のメモ 容量が怪しそうなのでstatsでデータを見てみると $ telnet localhost 11211 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. stats 結果を眺めると・・・・ 最初、「bytes」の項目が容量に近かったので容量一杯と判断したが 実はmemcacheは確保したメモリを開放するわけではないので この値で容量が一杯とは判断できないらしい。 (もしかしたら有効期限切れのデータが詰まっているかもしれないので) で、見るべきところは「evictions」の項目で有効期限に達してないデータが memcacheより追い出されたらここの値が増える。 で、原因はやはりmem
マニュアル: http://php-di.org/doc/getting-started.html インストール 現時点ではversion6がインストールされる composer require php-di/php-di DI対象のクラスの例 HogeクラスはFugaクラスを引数に取るように定義 class Fuga { public function hello() { echo "FUGA\n"; } } class Hoge { protected $fuga; public function __construct(Fuga $fuga) { $this->fuga = $fuga; } public function hello() { echo "HOGE\n"; $this->fuga->hello(); } } PHPによるコンテナ定義 ドキュメント: http://ph
このページを最初にブックマークしてみませんか?
『taka512's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く