HPの相互リンクをラクラクにするサービスが新しくなります

昔、某SEO会社からの依頼で作った相互リンクシステムをリニューアルしてます。

もうね、何ていうか、ほぼ全てのコードを書きなおしてます。
自分で書いたコードなんだけど、数年の月日が経って今見なおしてみると「よくこれで動いてんなー」って気持ちになります。
それと同時に、自分の成長も実感できたりして、ちょっと嬉しかったりw

古いシステム(現在動いてる)の構造はこんな感じ。

index.php ←全てのアクセスはここに(!)

module_***.php ←リクエストに応じて適当なモジュールを読み込み。

functions.php ←全ての関数群(!)ライブラリー的な何かw

当時はMVCが何だとか、いまいち分かってなく、PHPのClassの使い方もあやふやだったので、全てのリクエストをifとswitchで切り替えて動作してました。
そして、まるで根気の塊のようなfunctions.php。全ての動作がこの一つのファイルに詰まってます。

今、考えたらアリエン仕組みです。

新しく書きなおしたらグッとシンプルになったよ。

一度、システムを稼動させているので、どこにウェイトがかかり、どこに無駄があるのか分かってきます。
そういう意味では、プロトタイプとしての役割を現在のシステムは果たしてくれています。

さて、リニューアル手順ですが。
まず、functions.php 内の関数群から、View相当とModel相当の部分を徹底的に分離しました。そして、次に重複するコードを分離&結合して、シンプルに再構成。

さらに、リクエストごとに必要なClass、関数を洗い出し、不要なコードを読み込まないようにControl相当部分を再設計しました。

結果、システム全体を構成するファイル数は増えましたが、リクエストごとのリソースは少なくなりました。

本当はユーザー配布側のスクリプトも新しくしたかったんだけど、現在のユーザーも新システムに引き継ぐということなので、配布側のスクリプトは変更なし。ただし、ホスト側では、スピードアップが計られています。

近々、公開できると思います。
以上、ちょい出しリーク情報でしたw

あなたは、タブ派?スペース派? HTML&CSS

HTMLやCSS、PHPのコーディングをしている時、ソースコードのインデントどうしてます?

(多分、)標準的なソフトでコーディングしていれば、タブでインデントされてると思います。

みなさんはどうですか?
タブ(またはスペース)に統一してますか。それともそのままでしょうか。

問題にしたいは、ネットからソースコードをコピペした時、インデントがスペース4個になってることが多くあります。そして、そのままペーストすると、一つのファイル内に、タブインデントと、スペースインデントが共存しちゃうわけです。

ブラウザの「ソースを見る」とかメモ帳で見る分には、どっちも空白なので、見た目にもほとんど違和感なく見れるし、本当にどっちでもいいって言えばどっちでもいいことなんでしょうけど、エディタで見ると、なんか気持ち悪いんですよね。

あと、タブの方が、1文字で表示されるので、なんとなくタブの方が軽いのかなとか思ってますが、どうなんでしょう。

こんなこと、どっちでもいいよって気にしない人も結構多くいそうですが、気になる人は、もう何ていうか、ざわざわしちゃってしょうがないと思うんですよ。
オープンソースソフトウェアの中身も時々、タブとスペースが混在していることありますしね。
もう、どっちかに統一しようよっ!って思っちゃうんです。

私の場合、Dreamweaverの「ソースフォーマットの適用」を使って、全部タブインデントに変換しちゃうんですけど、場合によっては、ページの半分位までインデントされちゃってさらに難解なコードになっちゃうこともしばしば(笑

さくらのVPS借りてみたので使ってみる【一日目】

さくらインターネットのVPSを借りてみた。

第一回目の今回は、初期状態からウェブサーバーを立ち上げるまで。

久しぶりに、(ほぼ)空のLinuxサーバーをいじるので悪戦苦闘です(笑)
VPSのいいところは、コンパネから簡単にOSの再インストールが出来るところですね。コンパネからrootパスワードを設定したら、ものの数分で初期状態のサーバーが立ち上がります。これは、便利!

ではでは私がやってみた手順をババッと

SSHにrootでアクセスしない

SSHにrootでログインできるようにしておくとセキュリティ上、マズイのでSSHログイン用のユーザーをつくります。

ここから、しばらくは「VPSコントロールパネル」のリモートコンソールから作業します。

# useradd –m USERNAME
# passwd USERNAME

※USERNAME…新しく作るユーザー名に置き換えてください。

そしたら、今作ったユーザー名でSSHログインできるか確認します。問題なくログインが出来れば、次にrootのSSHログインを停止する作業です。

/etc/ssh/sshd_config ファイルを編集します。

PermitRootLogin no

既にコメントアウトされた PermitRootLogin yes の行があると思いますので、その近くに記述しておけばいいでしょう。

さらにSSHで使用するポートの変更もすれば、セキュリティ的には少し安心かもしれません。

Port 10022

例)SSHポートを 10022 にする設定(初期値は 22 )

SSHを再起動!

/etc/init.d/sshd restart

SSHを再起動したら、設定が反映されているか確認します。rootでSSHログインできなくなっているか?(ポートを変更した場合)変更したポートでSSHログインできるか?などなど。

パケットフィルタの設定

さくらのVPSは初期状態で、「全開」状態になってます。
まあ、公開用サーバーとして使うので、そんなに気にしなくてもいいのかもしれませんが、気持ち悪い感じがするかもなので必要なパケット以外はフィルタしちゃいます。

今回は、WWW(80)、FTP(20)、SSH(22)、それとDNS(53)を許可する設定にします。

適当なところに、iptables 設定用のスクリプトを書いておきます。
コマンドラインから、1行ずつ実行しちゃダメですよ。コマンドでやってると最初の INPUT DROP の後から、何もできなくなっちゃいます!

vi /home/USERNAME/IPTABLES_SH

#!/bin/sh
iptables -F
iptables -X

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -p tcp –dport 20 -j ACCEPT

iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -p udp -m udp –sport 53 -j ACCEPT
iptables -A INPUT -p udp -m tcp –sport 53 -j ACCEPT

service iptables save
service iptables restart

ip6tables -F
ip6tables -P INPUT DROP
ip6tables -P OUTPUT ACCEPT
ip6tables -P FORWARD DROP

service ip6tables save
service ip6tables restart

スクリプトの説明をブロックごとに簡単に…

  1. 最初のブロックで iptables に関する設定をクリア(初期化)します。
  2. 出力(OUTPUT)を許可(ACCEPT)し、入力(INPUT)とパケット転送(FORWARD)を破棄(DROP)する。
  3. ローカルの出力と入力をともに許可します。
  4. 宛先ポート(–dport)ごとに許可するパケットを指定します。
  5. セッション確立したパケットは許可します。
  6. DNS(53)はudpを使うので、5の許可では通信できないので別途指定します。
  7. ここまでの設定を保存(save)し、iptables を再起動(restart)します。
  8. 8,9番目のブロックは、IPv6に関する設定ですが、今回は特に使用しないで、出力以外は破棄(DROP)にしておきます。

スクリプトの記述ができましたら、パーミッションを変更して実行します。

# chmod 744 /home/USERNAME/IPTABLES_SH

# /home/USERNAME/IPTABLES_SH

ウェブサーバーパッケージのインストール

ウェブサーバーに必要なパッケージは、とりあえず、httpd、php、mysqlくらいでしょうか、必要になったらあとで追加しましょう。

ちゃちゃっとやってしまいたいので yum で簡単にインストールしちゃいます。

# yum install httpd http-devel
# yum install php php-mbstring php-mysql php-gd php-pear
# yum install mysql mysql-devel mysql-server

それぞれ、実行するとインストールするパッケージの一覧と(y/n)表示されますので、 y を押してインストールを完了します。(-y オプションをつけてやっちゃっていいかも)

自動起動スクリプトをつくる

「つくる」とか言っちゃってますが、シンボリックリンクを作成するだけです。

yumでインストールしたパッケージの起動スクリプトが /etc/rc.d/init.d 以下に保存されていますので、そこから必要なパッケージをランレベル3( /etc/rc.d/rc3.d )にシンボリックリンクを作成します。

# cd /etc/rc.d/rc3.d
# ln –s ../init.d/httpd S40httpd
# ln –s ../init.d/mysqld S41mysqld

できたら、おもむろに reboot してみましょう。

そして起動したらブラウザでサーバーにアクセスしてみます。
Apacheのテストページが表示されれば、セットアップ完了です。

とりあえず、今日はここまで。

【次回予告】FTP、バーチャルホストの設定 の予定

XMLの出力コストはどのくらいなんだろう?

ホストサイトでDB管理しておいて、パートナーサイトに情報を提供するカタチのシステムを組んでて、今回ホストからの情報渡しにXMLを使ってみた。

従来のシステムなら、phpにreadfile関数とかで、ホストのphpページを読み込んで、ホスト側で何ちゃらやってたんだけど。

あとは、パートナーサイト側で、受信したXMLをキャッシュさせて、トラフィックの軽減を図ってみたりするけど、システム全体でのパフォーマンスはどうかなあ。

いまだに、どのphp関数がどのくらい負荷かかってるのか、よく分かってないし。
とにかく、コードを短くシンプルにしようとはしてるけど。

ああ!年末がー今年がーー

なんやかんやで、もう11月。

前回のエントリーから1カ月以上も空けてしまった・・

取引先企業様方のおかげさまで、忙しくしてました。

今回は、暴露ネタ。
年内の予定について

  • ケータイポイントラリー企画
    加盟店に掲示されているQRコードを読み取って、ポイントラリーしちゃう企画
    モバイル向けだけど、willcomにもちゃっかり対応。
    QRコード生成、iモードIDの利用、携帯端末情報の利用、とかとか。
    完全スクラッチ開発。12月リリース予定。
  • アクセスカウンター、アクセスランキングASPサービス企画
    忍者ツールズとか、ゼロツールズみたいな企画。
    統合的なサービスを提供する上で、フレームワークはとても大切って感じた。
    時すでに遅し、こちらもフルスクラッチ開発。(一部、旧ソースの使いまわしあり)
  • ウェブサイトリニューアル
    現在改装中であるクライアント様店舗のホームページリニューアル。
    12月1日オープンなのに、いまだ全く情報なし。あせる・・・
  • ウェブサイトリニューアルその2
    以前にWordPressで作ったクライアント企業様のホームページリニューアル。
    特に不満を言われてるわけではないですが、これといって成果が出ていないようなので、システムも合わせてリニューアルする予定。
    着手は、上の開発リリース後の12月中旬ごろからかな?クリスマス前くらいに納品できたらOK。
  • 自社ウェブサイト制作
    ええ、自社ホームページの制作です。
    IT企業でありながら、自社のホームページがindex.htmlの1枚だけなんです。
    過去には、Zen Cart でホームページを作ったり、WordPressにしてみたり、MODxを使ったりして何度かのリニューアルを行っていたのですが、今は、このような有様。
    キチンとつくろう。

一人会社って、気軽だけど、プレッシャーもあって大変。
特に手数の多い作業が詰まってくると、息抜きのタイミングを失う・・

しかし、社員を雇うには、もうちょっと資金繰りに余裕が無いとできないな。

やっぱ、なにかB2Cビジネスを立ち上げないと、今の不安定なキャッシュフローから抜け出せない気がする。

チケットドリブン開発をしてみるよ(準備中)

あるクライアントから
作業の進行状況、納期などのタスクを随時分かるようにしてほしいって要望があった。

まあ、報告・連絡・相談は、キチンとやってるんだけど、言われるだけで「見える化」がされてなかったのが原因なのかなと。

そんで何故、チケットドリブン開発なのかっていうと。

あらかじめやる事(実装する機能や、修正案件)をチケットとしておけば、「あといくつのタスク(チケット)があるか」「納品まで何工程あるか」とかが、一目瞭然とするんじゃないかと思ったわけです。

チケット駆動開発 Wikipedia

チケット駆動開発 (ticket-driven development; TiDD) とは、プログラム開発手法の一種で、作業をタスクに分割しBTSのチケットに割り当てて管理を行う開発スタイル[1]。作業量や優先順位を正しく見積りながら仕事を進めることができる。 エクストリーム・プログラミングでの実装を想定している。

  • イテレーション計画を作る
  • 仕事を細かいタスクに分割し、タスクを書き出す(チケットの発行)
  • イテレーション単位でタスクをまとめる
  • タスクを一つ選び、実装する
  • 差分をコミットし、完了する(チケットのクローズ)
  • タスクがなくなるまで繰り返す
  •  

    で、使用するバグトラッキングシステムなんですが、LAMP環境で使える Mantis を採用。

    他のバグトラッキングシステムは、何故かRubyやらPythonで書かれたものが多いんですが、使い慣れたPHPを採用してるって事で。

    インストール時に迷ったところ

    よくあるCMSなんかと違って、インストール時には、DBの生成をしないので、インストール時に表示されるSQLをphpMyAdminなどで、実行する必要がある。

    開発者向けAPIツールを作ってみているよ

    週末を利用してAPIツールみたいなものを制作中。

    一応、簡単なユーザー登録制にして、簡単に利用できるようにしようと考えている。

    できる事(できるようにしたい事)

    • Yomi-Searchなどの相互リンク登録フォームに「リンク設置確認」機能
    • 任意の画像に任意のテキストを画像合成した「クーポン」などの発行機能
    • 任意のスクリプトにPageRank機能
    • etc…

    無料のスクリプトや、CGIに、「こんな機能があれば」というのを”3行以内の記述”で実装できるものを検討中。

    今週は、ユーザー登録ページを作成してみた。
    次回は、登録ユーザーに対して、使用するAPIの承認プロセスを作成予定。

    APIごとに使用の許可ができるようにする。
    イメージとしては、「NINJA TOOLS」みたいな感じになるかな。

    有料化するかどうかは、今後の検討案件。

    顧客からの相談、メールサポートを今から準備しておく

    ECサイトのみならず、さまざまな業種で使えると思うメールトラッキングシステム。

    メールトラッキングシステムとは

    問い合わせ内容をメールで送りつつ、ウェブにアーカイブしておき、全体の問い合わせ案件を一元管理できるシステム。

    これを入れると、従来のメールだけのシステムでありがちな「担当者によって対応が違う」「過去の応答を参考にしにくい」などと行った事がすくなるなる(と思う)

    ようは、メール送受信機能が付いた「プライベート掲示板」みたいなシステム。

    スタッフは、管理ページにログインして新しくきている案件や、担当している案件の返信をこなし、マネージャーは自分の部署の案件全体を管理し、対応状況の確認やノウハウを蓄積、整理していく。
    そしてまたスタッフは整理されたノウハウ情報を基に、さらに高度なサポートにも対応できるようになっていく。

    そんなシステム。

    osTicket が使いやすそうだったんだ・・

    PHP + MySQL 環境で簡単に利用できてカスタマイズしやすそうな osTicket を選んだんです。

    osTicket は、表示言語をソース(テンプレート)にハードコーディングしてあって、日本語環境にするには、全ソースの書き換え&メール送信関数の修正が必要。

    なもんで、どうせ全ファイルをいじるんだから言語パックみたいな仕様を組み込んじゃえー。
    って思い切って、japanese.lang.php なるファイルを作成して日本語環境にしてみたんですね。

    だいたい出来上がって(アドミンページを残すのみ)、ネットをブラリとしていたら、

    osTicket は eTicketになってたのね。知らなかった

    なんて記事を見つけてしまった・・・orz

    eTicket は lang.php がデフォでついてます

    やっちまった感がいっぱいです。

    eTicket のポイント

    • 投稿時に Captcha で画像認証できる
      (osTicket には実装されていない)
    • トップページが新規問い合わせフォーム+ログインフォームの構成になっている
      (osTicket は新規ページへボタンでリンク)
    • theme ディレクトリでテーマ変更も簡単(みたい)
      (osTicket は、テーマ変更の概念が無い)

    ん~。どっちで進めるべきか悩む。

    ま、とりあえず最初のサイトはせっかくなので osTicket でいっています。
    基本的なオペレーションは変わらないみたいなので。

    MOONGIFT: » 必見!怖くなるくらい優秀なCMS「concrete5」:オープンソースを 毎日紹介

    よさげなCMSツールの紹介。

    まだインストールもしてないので、公式デモをちょいいじってみただけ。

    日本語に関しては、問題なく通るみたいなので、そのまま使用可能のようです。

    ちょうど一緒にデモサイトにアクセスしている人がいるみたいで、テストページが追加されたりしていますが、デモサイトのコンテンツは毎時間リセットされるとのこと。

    CMSツールとしては、MODx をおすすめな私ですが、もしかしたらコッチに浮気してしまうかも。

    こんど、試してみよう。

    MOONGIFT: » 必見!怖くなるくらい優秀なCMS「concrete5」:オープンソースを毎日紹介

    一般価格と会員価格 Zen Cart [Group Pricing(per Item)]

    ゲストユーザーには、一般小売価格を表示しておき、会員登録すると「会員向けの価格」を表示。

    日本語フォーラムでも何度か取り上げられていた話題ですが、本家Zen Cart .comの方に、いい感じのモジュールがあったので、日本語ファイルをつくってみた。

    Group Pricing (per Item)

    モジュール概要

    • 割引グループを機能拡張
      Group Pricing用の割引グループを4つまで設定可能。
      デフォルトでは、グループごとに割引%での設定しかできなかったのが「グループごとの『会員価格』」を「商品ごと」に設定できるようになります。
    • 商品価格の項目拡張
      商品価格の設定をデフォルトの1個の他に、割引グループごとに4個の設定項目を追加。 「これがやりたかった」まさにそんな機能!商品に複数の価格を設定でき、割引グループに応じて表示価格を設定できます。

    インストール自体は、割と簡単。おまけにアンインストール用のSQLも付属しているので、安心感(信頼感)高いです。
    (国産リソースには、まだこの辺が足りなくて、アンインストールに四苦八苦する事が多い)

    ただし、今現在のバージョン(V.1.3.1)は、最近のMySQLインジェクション関係のパッチが当たってないので、その辺をZen Cart に導入済みの物と比較して編集が必要です。

    私の場合、ゲスト購入モジュールも導入しているので、ゲストには、「一般価格で販売」会員には、「会員価格で販売」ができるように、登録時のデフォルトグループを Group Pricing の割引グループになるように修正。

    登録時のデフォルト割引グループ設定

    includes/modules/YOUR_TEMPLATE/create_account.php

    zen_db_perform(TABLE_CUSTOMERS, $sql_data_array);

    という行の直前に、

    $sql_data_array[‘customers_group_pricing’] = 1;

    の行を追加。(1は、設定したい割引グループID)

    結果、サイトの表示は・・

    (ゲスト(未ログイン)の時)
    Ci081018194135 
    一般価格:29,800円
    会員価格:ログインして下さい。

    (会員ログインしている時)
    Ci081018194208 
    一般価格:29,800円
    会員価格:22,000円

    なんて感じの表現が可能になりました。
    (ログイン時の「一般価格」を表示するには、function_price.php をちょこっといじる必要があります)

    管理画面ではこんな感じ

    Ci081022155500

    一般価格の下に4種類の会員価格設定欄があるのが分かると思います。
    これが、それぞれの割引グループでログインした際の商品価格になります。

    インストールしたベースの Zen Cart は bigmouse さんとこの Zen Cart v.1.3.8a です。