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

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

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

LIST OF ARTICLES

記事一覧

  • テクログ

    Fusion-io ioDrive

    ioDrive 付きの検証機2週間提供(ID,パスワードのみの提供)頂いた時の確認結果を報告させて頂きます。さくらインターネットは ioDrive申込み多く、しばらく検証機提供難しいと返答ありました。検証機貸出でなくお申込みであれば、ioDriveが搭載したモデルでも即納が可能なプランもございます。▼エクスプレスG2シリーズhttp://server.sakura.ad.jp/dedicated/expressg2.html検証機貸出可能かどうか、速度(ベンチマークテスト結果)、値段などは日々変化していますので各担当営業の方にお問合わせお願いします。貸出頂いた「専用サーバ フレックスモデル」と他サービスとの違いは下記URLをご参照ください。http://server.sakura.ad.jp/plans.htmlさくら専用サーバには、あらかじめ ioDriveのセットアップに必要なパッケージ等がインストール済みです。管理画面の操作がとても分り易く、フォーマット+マウントするだけで、すぐに使い始める事ができました。スムーズに ioDriveマウントの方法など理解が深まり感謝しております。さくらインターネットの皆様ありがとうございました。これより下は実行したコマンドを記載します。(1) ioDriveの接続を確認# lspci | grep -i fusion05:00.0 Mass storage controller: Fusion-io ioDimm3 (rev 01)(2) ioDriveのRPMパッケージを確認# rpm -qa | grep "iomemory"# rpm -qa | grep "fio"(3) ioDrive 320GB のデバイス認識確認# fio-statusFound 1 ioDrive in this systemFusion-io driver version: 2.3.10 build 110Adapter: ioDrive        HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:32926        External Power: NOT connected        PCIE Power limit threshold: 24.75W        Sufficient power available: Unknown        Connected ioDimm module:          fct0: HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:32926fct0    Attached as 'fioa' (block device)        HP 320GB MLC PCIe ioDrive for ProLiant Servers, Product Number:600279-B21 SN:32926        Located in slot 0 Upper of ioDrive SN:32926        PCI:05:00.0        Firmware v5.0.7, rev 107053        322.55 GBytes block device size, 396 GBytes physical device size        Sufficient power available: Unknown        Internal temperature: 47.2 degC, max 47.7 degC        Media status: Healthy; Reserves: 100.00%, warn at 10.00%(4) ディスクのパーティションを確認# /sbin/fdisk -lDisk /dev/sda: 198.9 GB, 198910672896 bytes255 heads, 63 sectors/track, 24182 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x000010f9   Device Boot      Start         End      Blocks   Id  System/dev/sda1   *           1          32      256000   83  LinuxPartition 1 does not end on cylinder boundary./dev/sda2              32        1052     8192000   82  Linux swap / Solaris/dev/sda3            1052       24183   185799680   83  LinuxDisk /dev/sdc: 478.9 GB, 478888853504 bytes255 heads, 63 sectors/track, 58221 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/sdb: 1199.1 GB, 1199101181952 bytes255 heads, 63 sectors/track, 145782 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 512 bytesDisk identifier: 0x00000000Disk /dev/fioa: 322.6 GB, 322553184256 bytes255 heads, 63 sectors/track, 39214 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 32768 bytesDisk identifier: 0x00000000(5) ディスクのパーティション作成# fdisk /dev/fioaDevice contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabelBuilding a new DOS disklabel with disk identifier 0x70ee9e17.Changes will remain in memory only, until you decide to write them.After that, of course, the previous content won't be recoverable.Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)WARNING: DOS-compatible mode is deprecated. It's strongly recommended to         switch off the mode (command 'c') and change display units to         sectors (command 'u').Command (m for help): nCommand action   e   extended   p   primary partition (1-4)pPartition number (1-4): 1First cylinder (1-39214, default 1): 1Last cylinder, +cylinders or +size{K,M,G} (1-39214, default 39214):Using default value 39214Command (m for help): pDisk /dev/fioa: 322.6 GB, 322553184256 bytes255 heads, 63 sectors/track, 39214 cylindersUnits = cylinders of 16065 * 512 = 8225280 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 bytes / 32768 bytesDisk identifier: 0x70ee9e17    Device Boot      Start         End      Blocks   Id  System/dev/fioa1               1       39214   314986423+  83  LinuxCommand (m for help): wThe partition table has been altered!Calling ioctl() to re-read partition table.Syncing disks.(6) ディスクのパーティション確認# cat /proc/partitionsmajor minor  #blocks  name   8        0  194248704 sda   8        1     256000 sda1   8        2    8192000 sda2   8        3  185799680 sda3   8       32  467664896 sdc   8       16 1170997248 sdb 252        0  314993344 fioa 252        1  314986423 fioa1(7) ioDriveをフォーマット【 mkfs.ext4 】コマンド# /sbin/mkfs.ext4 /dev/fioa1(8) マウント実施(例)/home/www を ioDrive に割当の場合<マウントコマンド># mount /dev/fioa1 /home/www<マウント前確認># df -ThFilesystem    Type    Size  Used Avail Use% Mounted on/dev/sda3     ext4    175G  2.5G  164G   2% /tmpfs        tmpfs     32G     0   32G   0% /dev/shm/dev/sda1     ext4    243M   49M  181M  22% /boot<マウント後確認># df -ThFilesystem    Type    Size  Used Avail Use% Mounted on/dev/sda3     ext4    175G  2.5G  164G   2% /tmpfs        tmpfs     32G     0   32G   0% /dev/shm/dev/sda1     ext4    243M   49M  181M  22% /boot/dev/fioa1    ext4    296G  195M  281G   1% /home/www<マウント前確認># mount/dev/sda3 on / type ext4 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)tmpfs on /dev/shm type tmpfs (rw)/dev/sda1 on /boot type ext4 (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)<マウント後確認># mount/dev/sda3 on / type ext4 (rw)proc on /proc type proc (rw)sysfs on /sys type sysfs (rw)devpts on /dev/pts type devpts (rw,gid=5,mode=620)tmpfs on /dev/shm type tmpfs (rw)/dev/sda1 on /boot type ext4 (rw)none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)/dev/fioa1 on /home/www type ext4 (rw)
  • テクログ

    受信メールの解析について3

    こんにちわ。パグ(▼・(エ)・▼)です。最近眠くて、起きててもずっと眠くて なんかもう、あれだなって思ってます。 前回から数ヶ月空いちゃいました・・・。 受信メールの解析についての2では ファイル名の取り出し方、とシングル、マルチで判定しない解析について書きました。 今回はデコレーションメールについて書いてゆきたいと思います。 そもそもデコレーションメールって何かというと、ガラケーから始まったと思うんですけど、 背景の色を変えられたり、オリジナリティのある絵文字が送れたり、文字が 流れたり・・・。 そんな効果が付けられるメールですね。 本文にいくら、色々な効果がついていようと、メールの解析を行うと、 もちろん文字を文字として、プログラムで処理が可能なのですが、厄介なのは、 デコレーション絵文字です。 前回も記述致しましたが、デコレーション絵文字は、その他の添付ファイルと 異なり、他キャリアでも判別出来るようにIDがついています。 それが、content-idです。実際にメールデータを開いてみるとこんな感じ ------H512QGEWMMP2EIEQNFP3 Content-Type: IMAGE/GIF;  name="dp_01_01_001.gif" Content-Transfer-Encoding: base64 Content-ID: <01@121009.040620> Content-Disposition: inline;  filename="dp_01_01_001.gif" R0lGODlhPwAUAKIGAP9LS/8pKf9qpv9AjP+vz////////wAAACH/C05FVFNDQVBFMi4wAwEAAAAh <以下省略> これが、content-idです。 Content-ID: <01@121009.040620> 前回のブログのこの部分であるかどうかの判定を行っています。 foreach($decoder->headers as $key => $headers){ if ($key == "content-id") { $content_id = $headers; break; } } content-idがあるってことは、デコレーション絵文字なんだなと判別できるからです。 ですが、勿論例外というものがあります。(メールの企画統一してよ(・。・)ぼそ・・・) --URVP4gBk Content-Type: application/x-shockwave-flash;  name="fdecoflash019.swf" Content-Transfer-Encoding: base64 RldTCE0ZAABoABhgAAYYAAAPcgBEEQAAAABDAv///z8DHQAAAJYXAABoaWdoAABTZXRRdWFsaXR5 <以下省略> 上記のパターンです!!みるからにheader部にcontent-idが存在しません。 でも、これはれっきとしたデコレーション絵文字なんです。 DoXXmo様そろそろ規格をご統一いただけると・・・・。そう、DoXXmo様から出ているガラケーの とある機種だとこのように、デコレーション絵文字(動くもの)に関してcontent-idが入りません。 動くもの、だからではなく、とある機種のとある絵文字と考えてください。 こんなとき、どこからデコレーション絵文字かどうかを判別するかというと・・・ --gSmSufMk Content-Type: text/html; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable =   --gSmSufMk-- この部分です!! これはtext/htmlなので、メール本文、ということになります。 メール本文をhtml形式で送った場合にtext/htmlという箇所にこのように、 画像の配置などが記述されます、ここで、cid:を見つけられるかどうかで、 デコレーション絵文字の判別ができます。 いくら、デコレーション絵文字を送っても、ちっともその処理に行き着かなかったため、 さぐっていくと、content-idがないデコレーション絵文字があるということを発見しました。 メールも色々なキャリアやPC、モバイルで変わるので受信処理というのは非常に 頭を悩ませます・・・。 はい、では今回はこれ位で~次回はデコレーション絵文字の落とし穴について書きました~。 次回は、文字化けしちゃうメールについて書きます☆。 次回ブログアップはいつになることやら~。 ではでは、パグでしたぁ~ヽ(・∀・)ノばいばいぷぅ☆ミ
  • テクログ

    iOS6でサイト見るとアレ?

    どうも!ぶーちゃんです。 ちょっとネタが古くなるんですが・・・・。 iphone5が発売されて、iOS6がリリースされて、ある問題が起きました。 まあ新しい地図アプリがクソすぎると、巷で有名になっちゃったので、 速攻でOSあげる人は、なかなか居なかったと思いますが、 iphone5は既存ですからね。 LTEでサクっとサイト閲覧!!って入ったら、「アレ?なんか堅いなー。」 ・・・・あれ?フォント明朝じゃね? えーー!!!なんで? ちょっとお前のiphone4S貸してー。あれ?普通だ、、、 え、、、iphone5だけ? なんてことになったと思います。そうです。 APPLEが勝手にやってくれたんですよ。 今までは標準フォントとして『ゴシック体』を使ってたんですが、 なぜかiOS6からは『明朝体』に変更されてしまったことで、CSS等で厳密に指定されていないwebページは 明朝による表示になってしまったんですね。 これはビビリましたね。ウチでもスマホサイト作ってますからね。 案の定「明朝」ですよ、、、 このままでイカンとCSS変更、試行錯誤の上、対応方法発見! 管理してるサイトに反映!チェック!ふぅー。って一連の流れを踏みました。 まあ対応をしては下記ですね。 『font-familyの最後に「sans-serif」をプラスする』 このままAPPLEさん対応してくれないんでしょか? 前の方がよかったと思うんですけど・・・・。 お粗末ですが、以上でーーす。
  • テクログ

    Expiresヘッダーを追加しよう

    お久しぶりです。 らめぇです。 今回はExpiresについて書きたいと思います。   弊社コーポレートサイトを生贄 対象にしています。   計測にはGTmetrixを使います。 では早速計測してみましょう。     「C」かぁ・・・悪くないっすね。 が、頑張ります。   Expiresヘッダーを追加してみましょう。   Expiresヘッダーとは Web page designs are getting richer and richer, which means more scripts, stylesheets, images, and Flash in the page. A first-time visitor to your page may have to make several HTTP requests, but by using the Expires header you make those components cacheable. This avoids unnecessary HTTP requests on subsequent page views. Expires headers are most often used with images, but they should be used on all components including scripts, stylesheets, and Flash components. 引用:Yahoo! developer netowork   Expiresヘッダーを使えばjs、CSS、image、Flashなどをキャッシュさせて、 無駄なhttpリクエストを無くすことができますよー的なことです。   apacheのhttpd.confに以下の行があるか確認してください。 LoadModule expires_module modules/mod_expires.so 以下のような構文を使いExpiresを設定していきます   構文 ExpiresByType MIME-type seconds または代替構文を使い、読みやすい構文で指定することもできます。 ExpiresByType type/encoding " [plus] { }*"  は以下のどれかです access now ('access' と等価) modification コアテックコーポレートに設定した値も載せておきます。 今回はapacheの再起動が必要無いように.htaccessを使用しています。     ExpiresActive On     ExpiresByType image/jpeg "access plus 14 days"     ExpiresByType image/gif "access plus 14 days"     ExpiresByType image/png "access plus 14 days"     ExpiresByType video/x-flv "access plus 14 days"     ExpiresByType text/css "access 14 day"     ExpiresByType application/javascript "access 14 day" Yslowなどで画像ファイルのレスポンスヘッダを見てみましょう。 画像やjsのExpiresに指定した日付が入っていたら成功です。   もう一度、GTmetrixを使い計測してみましょう。     「B」になった☆ やったね(*´∀`)   皆さん、良いお年を~♪ らめぇでした。
  • テクログ

    cURL

    cURLは、さまざまなプラットフォームで使用可能ですが、私はPHP以外での使用経験が無いため、PHPでのcURL使用のみについて書いていきます。 使用方法としては別のシステムとのインターフェースに使ったり、 file_get_contentsが使用できない環境で代わりに使用したりなどといった形で使用してきました。 という事でそれに沿って説明していきます。   cURLは以下の4つのコマンドのみで実行できます。 ・curl_init ・curl_setopt ・curl_exec ・curl_close curl_initで初期化して curl_setoptでオプションにより動作を設定し、 curl_execで実行して、 curl_closeで終了という流れです。 以下はfile_get_contents的に使用する場合の例になります。 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://core-tech.jp/"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $contents = curl_exec($ch); curl_close($ch); $contentsにhttps://core-tech.jp/のページソースが入ってきます。 レンタルサーバーなどfile_get_contentsが使用できない環境で代用できるかも。  さらにはログインが必要なページの取得も可能です。 もちろん、IDとパスワードがわかっているページが限定です。 Basic認証 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://core-tech.jp/target.html"); // 実際にはありません curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERPWD, "$id:$pass"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); $contents= curl_exec($ch); curl_close($ch);   cookie認証 これは少し面倒で2回呼ばないといけなくて、 最初にログインページからcookie情報をtmpというファイルに保存し、 次にcookie情報を引き継いで取得したいページから取ってくるといった感じになります。 $fp = fopen("tmp", "w"); $params = array('id' => 'id', 'pass' => 'pass'); $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, "https://core-tech.jp/login.html"); // 実際にはありません curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  curl_setopt($ch, CURLOPT_POST, TRUE);  curl_setopt($ch, CURLOPT_POSTFIELDS, $params);  curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($ch, CURLOPT_WRITEHEADER, $fp);  $output = curl_exec($ch);  curl_close($ch);  fclose($fp); $ch = curl_init();  curl_setopt($ch, CURLOPT_URL, "https://core-tech.jp/target.html"); // 実際にはありません curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp"); $results[$pageid] = curl_exec($ch); curl_close($ch);   インターフェースとして使用する場合 通信相手にもよりますが、POSTで値を渡して結果を得るという流れの例になります。 今回はpostでdata1とdata2を渡すと結果が得られるという仕様だとします。 $post = "data1=".urlencode("data1")."&data2;=".urlencode("data2"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://core-tech.jp/target.html"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); $contents= curl_exec($ch); curl_close($ch);   オプションについては以下のサイトに資料があります http://php.net/manual/ja/function.curl-setopt.php ちなみに全ての例で使用しているCURLOPT_RETURNTRANSFERについては 「結果を文字列で返す」という設定になります。 それ以外のオプションも多数あるので使用するケースによって使い分けしてください。   複数のサイトに対して一括取得する場合はcurl_multi_initを使用します。 // 対象サイト $url_list = array("https://core-tech.jp/", ); // マルチハンドルの用意 $mh = curl_multi_init(); // cURLハンドルの用意と、マルチハンドルへの登録 $ch_list = array(); foreach( $url_list as $url ) {  $ch_list[$url] = curl_init($url);  curl_setopt($ch_list[$url], CURLOPT_RETURNTRANSFER, TRUE);  curl_multi_add_handle($mh, $ch_list[$url]); } // 一括で通信実行、全て終わるのを待つ $running = null; do {  curl_multi_exec($mh, $running); } while ( $running ); // 実行結果の取得 foreach( $url_list as $url ) {  // ステータスとコンテンツ内容の取得  $results[$url] = curl_getinfo($ch_list[$url]);  $results[$url]["content"] = curl_multi_getcontent($ch_list[$url]);  // Curlハンドルの後始末  curl_multi_remove_handle($mh, $ch_list[$url]);  curl_close($ch_list[$url]); } // マルチハンドルの後始末 curl_multi_close($mh); これは取得するサイトの数が多すぎると取得自体ができなかったり、 動作が安定しませんでした。 やり方が悪かったのかな? と、この辺りが私が知っているcURLの全てになります。
  • テクログ

    jQueryとJavaScript4

    前回では、入力した文字を精査して、 数字3桁が入力されていれば終了していました。 今回はそこから先の処理を考えたいと思います。 処理の内容としましては、 ・入力した文字を別の要素に表示 ・ランダムで3桁の数字を生成 ・入力した文字を配列化 ・ランダム数字と入力文字の比較 になります。 【履歴】 function testMethod(Number) { // 入力値を配列化 ArrNumber = Number.split(''); for(i=0; i<3; i++) { // ランダム数字の配列に入力文字がある場合 if($.inArray(ArrNumber[i], ArrAnswer) != -1) { } } // 履歴に追加 $('#history').append(Number+''); // 入力値をリセット $('#number').val(''); } function testMethod2() { ArrAnswer = new Array(); for(i=0; i<3; i++) { // 0~9の数字を生成して、文字に変換 ArrAnswer[i] = Math.floor(Math.random()*10)+""; // 同じ数字を使用している場合、再設定 if(ArrAnswer[i] == ArrAnswer[i-1] || ArrAnswer[i] == ArrAnswer[i-2]) { i--; } } } $(function(){ // ランダムで3桁の数字を生成 testMethod2(); $('#number').keypress(function(e) { // 省略 }).keyup(function(e) { // 省略 // 下記追加 testMethod(Number); }); }); 「入力した文字を別の要素に表示」は、 jQueryのappend()メソッドを使用してします。 指定したセレクタの末尾に引数で指定した文字列を追加します。 $("セレクタ").append("文字列"); 「ランダムで3桁の数字を生成」は、 JavaScriptでMath.random()とMath.floor()メソッドを使用しています。 Math.random()は、0.0以上1.0未満の乱数を生成します。 Math.floor()は、小数点以下の値を切り捨てます。 0~9までの数字を生成する場合は、 Math.floor(Math.random()*10); 「入力した文字を配列化」は、 JavaScriptでsplit()メソッドを使用しています。 今回は区切り文字を「''」として、桁ごとに配列に入れています。 文字列.split("区切り文字"); 「ランダム数字と入力文字の比較」は、 jQueryのinArray()メソッドを使用しています。 配列に値があれば、その位置を返し、 配列に値がなければ、「-1」を返します。 $.inArray(比較する値, 比較する配列) 次回は、ゲームのHTMLとJavascriptを記載します。 では、また来月お会いしましょう。。。