信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    SQL ServerとMySQL

    技術ブログが始まって2ヶ月弱・・・・みんなしっかりとした知識を披露してくれて・・・タジタジのなべっちです。最近は開発をガッツリやっているわけではないので、書かずに華麗にスルーしようと思っていたのですが・・・しかたない。次に繋がるように、簡単にわかる事を書いてハードルをさげてやろうと思っています。遠い過去の話ですが・・・VB6とSQL Serverを使ってとある保険のシステムを開発していました。ずっとSQL Serverを使っていたので、私の基本的なSQL文法=SQL Serverの文法という図式が成立してしまっています。最近のコアテックでは、MySQLを使うことが非常に多いのですが、SQL Serverとの違いなんてまったく意識せずSQL文を書く事が・・・すると・・・・何度確認してもあっているはずの文法が動かなくてはまるという事がありまして・・・非常に苦労しました。。。。調べていたらこんな違いが!と言う事が書いてあるHPを見つけてやっと解決。。。。非常に助かったので、そのHPから抜粋して違いを書いておきます。はまったのはこの部分↓・DELETE文等で自分自身をサブクエリで参照できない! DELETE FROM table1 WHERE id IN (SELECT id FROM table1 where key = 1 ) keyの値 が 1 のレコードを削除するという文です。※本来はサブクエリを使う必要がない文ですけど、わかりやすく簡単に書いてあります。その他にこんなのもありました。・SELECT INSERT INSERT INTO table1 (a1,a2) SELECT '値1','値2' FROM table1  WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = '値1' AND a2 ='値2') 既に値1、値2のレコードが存在している場合は登録しないという文です。My SQLではNOT EXISTSでもEXISTSでも行が取れない為 レコードは登録されないようです。解決方法は↓ INSERT INTO table1 (a1,a2) SELECT '値1','値2' FROM (SELECT '値1' AS b1,'値2' AS b2) tbl1 WHERE NOT EXISTS (SELECT * FROM table1 WHERE a1 = '値1' AND a2 ='値2') とサブクエリを挟むと行が作成されてレコードが登録されるようです。もう1つAUTO_INCREMENTは物理削除すると削除した番号を再利用する SQL ServerのIDENTITYとは違うので同じ感覚で使用するとはまる原因になりそうです。 主キーとして使用する際にはご注意を・・・・気付かなかった~知らなかった~とはまる事があるようなのでメモ書き程度に書いておきます。次回からは役立つ技術情報が続く・・・・はず。

  • テクログ

    KeepAliveTimeoutについて

    みなさん、こんにちわ。 らめぇです。 では、早速。。   KeepAliveの説明 1回のTCP接続で複数のHTTPリクエストを処理する機能。 HTTP/1.0 の Keep-Alive 拡張と HTTP/1.1 の持続的接続の機能は、 複数のリクエストが同じ TCP の接続で送られる、長時間持続する HTTP セッションを提供します。 apacheドキュメントより引用 簡単に説明するとKeepAliveとは、「three-way handshaking」の節約です。 画像やCSSが多いサイトではKeepAliveをonにすることによりその恩恵を受けることができるでしょう。   KeepAlive関連ディレクティブは、以下のとおりです。 下記のディレクティブを設定することでKeepAlive機能を制御します。 KeepAlive HTTP の持続的な接続を有効にします。(On/Offで設定します) KeepAliveTimeout  KeepAlive=On の時に有効で、持続的な接続で次のリクエストが来るまでサーバが待つ時間(秒)を設定します。 MaxKeepAliveRequests KeepAlive=On の時に有効で、持続的な接続上で許可されるリクエストの数を設定します。 KeepAliveTimeoutってなに? 以下の設定について考えてみましょう。 KeepAliveTimeout 15 KeepAliveとは「three-way handshaking」の節約と説明しました。 Webサーバとの間で確立した接続が転送終了後も維持され、2回目以降のリクエストではこの接続をそのまま使用できる。 一見、良いことだらけに見えるこのKeepAliveにも欠点があります。   その一つがKeepAliveTimeoutの設定時間   上の例では、KeepAliveTimeout 15としています。   ひとつの要求が完了してから、コネクションを切断しないで次の要求を受け入れるまでの時間。言い方を変えると「クライアントからのリクエストがなくてもKeepAliveを維持する秒数」ということになります。   「リクエストがなくてもKeepAliveを維持する秒数」ここがポイントです。処理がすぐに終わった場合でもKeepAliveTimeout 15のままだと、15秒間接続をキープしたままになり、このプロセスは無駄になってしまうということです。   短くするほど無駄な接続を減らせますが、短くしすぎると必要なコネクションまで閉じてしまいます。クライアントがコネクションを確立し直す場合が増えます。   結局は環境に合わせて適切な値を見つけてくださいってことです。   小規模のサイトではあまり気にしない(設定を変えても効果はないと思います)KeepAliveの設定。 アクセスが増え、パフォーマンスが低下してきたら一度見直してみると良いかもしれません。 らめぇでした。

  • テクログ

    正規表現

    正規表現が苦手という人をよく見かけます。そういう私も少し前までは苦手でなるべく避けて通っていたクチです。何が嫌だったのかと思い返すと、単に慣れていなかったのが原因だったような気がします。という事で、覚えることもそんなに多くないのでサクッと苦手意識を無くしてしまいましょう。文字指定.(ドット) 何でもいい一文字[abc] aかbかcの何れか[^abc] aかbかcの何れか以外[a-c] aかbかcの何れか()括弧 グループとして扱う(abc|def) abc、defのどちらか文字数指定? 直前の文字が0回か、1回マッチ* 直前の文字が0回以上マッチ+ 直前の文字が1回以上マッチ{3}直前の文字が3回マッチ[3,]直前の文字が3回以上マッチ[3,5]直前の文字が3回から5回マッチ位置^ 最初$ 最後その他 上記のメタ文字を文字として扱う? 最短マッチ+*と組み合わせれば次の文字が最初に現れるまでこの辺りが基本ではないかと思います。あとは習うより慣れろということで実戦で使っていけば苦手意識は無くなっていくはずです。一つだけ、気をつけるポイントは「.(ドット)」はなるべく使わないといったところでしょうか。何でもいい一文字は思わぬものをヒットさせて不具合の原因になります。正規表現は様々なプラットフォームで使えます。phpやjavascriptなどはもちろん、mod_rewriteやmysql、postgresなどのwhere句など。多少の文法は違いはありますが、基本を覚えておけばどんなプラットフォームでもいけます。覚えておいて損はない技術です。

  • テクログ

    Controllerからforgeを用いてViewへ値を渡す方法 by fuelPHP

    ControllerからView::forgeを用いてViewへ値を渡す方法を以下に記載しておきます。 ■例1) ・Controller.php $data['ymj'] = 'わたしはやまじゅんです';  $this->template->content = View::forge (指定url/index, $data); ・指定url/index.php 上記のように、 forge されたViewファイル内で値を参照する場合は、 問題なく参照することが出来ます。   ■例2) ・Controller.php $data['ymj'] = 'みんなのやまじゅんです'; $this->template->content = View::forge (xxx/index, $data);  ・xxx/index.php ・yyy/_form.php   上記のように、index.php内で_form.phpをrender している場合、renderの第2引数で、配列に入れなおすことで対応できます。   ただ、いちいちControllerから渡された値をまた配列に入れるのは 面倒くさいので、以下のように設定して対応します。   ・xxx/index.php ↓↓↓↓↓   $__dataにControllerで設定された値も入っているので ばっちり取得できます。   上記対応時、以下のエラーが発生する場合があります。   RuntimeException [ Error ]: Object class "OrmQuery" could not be converted to string or sanitized as ArrayAccess. Whitelist it in security.whitelisted_classes in app/config/config.php to allow it to be passed unchecked.   その場合、以下のファイルの指定場所を設定することで解決します。   docroot/fuel/app/config/config.php 'whitelisted_classes' => array( 'Fuel\Core\Response', 'Fuel\Core\View', 'Fuel\Core\ViewModel', 'Fuel\Core\Validation', 'Closure', 'Orm\Query',←追加 )   これでめでたし、めでたし♪ ではでは~!