φ(..)メモとして残しておこう… -6ページ目

「Mobile Bookmark Bubble」と「jQueryMobile」の併用について。



iPhoneは、ブックマークを「ホーム画面に登録」することで、まるでネイティブアプリのようにフルサイズでWEBアプリケーションを実行できる。

そうじゃなくても、ブックマークとしてホーム画面に登録してもらうのは結構有難いことです。

で、Google-codeにある「mobile-bookmark-bubble」を使うことにしたんだけど、これがjQueryMobileと併用すると挙動がおかしくなって大変。

ってことで、コードを変更しなくちゃならない。

とりあえず、必要なファイルを入手するところからスタート。

「Source」→「Browse」で「bookmark_bubble.js」をクリックでソースを表示してコピペ。
この「bookmark_bubble.js」が今回のコアプログラムになる。

「Source」→「Browse」→「example」→「example.js」をクリックでソース表示してコピペ。
この「example.js」が、設定ファイルになる。

ZipファイルとかでDLとか出来ないので、ちゃんとコピペで持ってきましょう。



バルーンを表示する際のテキストは、bookmark_bubble.jsの560行目付近を変更。
「bubbleInner.innerHTML」の中身がそれなので、書き換えちゃう。


// The "Add to Home Screen" text is intended to be the exact same text
// that is displayed in the menu of Mobile Safari.
if (this.getIosVersion_() >= this.getVersion_(4, 2)) {
bubbleInner.innerHTML = 'Install this web app on your phone: ' +
'tap on the arrow and then <b>\'Add to Home Screen\'</b>';
} else {
bubbleInner.innerHTML = 'Install this web app on your phone: ' +
'tap <b style="font-size:15px">+</b> and then ' +
'<b>\'Add to Home Screen\'</b>';
}
▼▼▼こんな感じにしちゃう。▼▼▼

// The "Add to Home Screen" text is intended to be the exact same text
// that is displayed in the menu of Mobile Safari.
if (this.getIosVersion_() >= this.getVersion_(4, 2)) {
bubbleInner.innerHTML = 'DOKIPOKE.NETを<b>\'ホーム画面に追加\'</b>すると、次からのアクセスが簡単です。';
}
else {
bubbleInner.innerHTML = 'DOKIPOKE.NETを<b>\'ホーム画面に登録\'</b>すると、次からのアクセスが簡単です。';
}


DOKIPOKE.NETは上記のように修正しました。

そのほか、弄るところといえば…

180行目
「google.bookmarkbubble.Bubble.prototype.TIME_UNTIL_AUTO_DESTRUCT = 15000;」
バブルの表示時間を数値(ms)でセット


228行目
「google.bookmarkbubble.Bubble.prototype.REL_ICON_ = 'apple-touch-icon-precomposed';」
登録アイコンを光沢の有るアイコンにしたい場合は、
<link rel="apple-touch-icon" href="アイコン画像" />
をページのヘッダに指定して
「google.bookmarkbubble.Bubble.prototype.REL_ICON_ = 'apple-touch-icon';」
に書き換え。

バルーン内に表示するアイコンは

<link rel="apple-touch-icon-precomposed" href="アイコン画像">

<link rel="apple-touch-icon" href="アイコン画像">
のどちらかで指定された画像を読み込んでくるので、それに合わせて記述を変える。



で、「example.js」のほうは…というと、こいつが厄介。


window.addEventListener('load', function() {
window.setTimeout(function() {
var bubble = new google.bookmarkbubble.Bubble();

var parameter = 'bmb=1';

bubble.hasHashParameter = function() {
return window.location.hash.indexOf(parameter) != -1;
};

bubble.setHashParameter = function() {
if (!this.hasHashParameter()) {
window.location.hash += parameter;
}
};

bubble.getViewportHeight = function() {
window.console.log('Example of how to override getViewportHeight.');
return window.innerHeight;
};

bubble.getViewportScrollY = function() {
window.console.log('Example of how to override getViewportScrollY.');
return window.pageYOffset;
};

bubble.registerScrollHandler = function(handler) {
window.console.log('Example of how to override registerScrollHandler.');
window.addEventListener('scroll', handler, false);
};

bubble.deregisterScrollHandler = function(handler) {
window.console.log('Example of how to override deregisterScrollHandler.');
window.removeEventListener('scroll', handler, false);
};

bubble.showIfAllowed();
}, 1000);
}, false);

▼▼こう変更しました。

window.addEventListener('load', function() {

window.setTimeout(function() {

var bubble = new google.bookmarkbubble.Bubble();

bubble.hasHashParameter = function() {};

bubble.setHashParameter = function() {};

bubble.getViewportHeight = function() {
window.console.log('Example of how to override getViewportHeight.');
return window.innerHeight;
};

bubble.getViewportScrollY = function() {
window.console.log('Example of how to override getViewportScrollY.');
return window.pageYOffset;
};

bubble.registerScrollHandler = function(handler) {
window.console.log('Example of how to override registerScrollHandler.');
window.addEventListener('scroll', handler, false);
};

bubble.deregisterScrollHandler = function(handler) {
window.console.log('Example of how to override deregisterScrollHandler.');
window.removeEventListener('scroll', handler, false);
};

bubble.showIfAllowed();
}, 1000);
}, false);



つまり、

「var parameter = 'bmb=1';」を削除。
「bubble.hasHashParameter = function() {};」の処理をしない。
「bubble.setHashParameter = function() {};」の処理をしない。

ということにしました。


この処理は、どんなことをしているかというと

http://example.com/ でアクセス

バルーンを表示

http://example.com/#bmb=1 に遷移。

ホームへ追加(遷移後の「http://example.com/#bmb=1」が登録される)

http://example.com/#bmb=1からのアクセスの場合はバルーンを出さない。

とゆー処理です。


なるほど、実によく出来てるんだけど、jQueryMobileでAjaxが有効になってると(デフォルトでは有効)、元々の「http://example.com/」に「#bmb=1」をAjaxで読み込もうとするので、なんか処理がおかしくなる。

ってわけで、その部分の処理をごっそりと削除。

試しにやってみたら、ホーム画面に登録したアイコンからのアクセス時にはバルーン表示はされなかった。


という訳で、jQueryMobile使用時には応急処置として「window.location」を変更する処理を飛ばすということにしました。






おまけ。

このバブルは、あくまでもブラウザからのアクセスの場合、ホーム画面への登録を促すものなので、「UI-WebView」なんかを使ったネイティブアプリの場合には表示させないほうがいい、と。

その辺りの解説は、このへんを読んで見ましょう。

should not display if in-app web viewer



この記事は公開停止中です

この記事は現在公開停止中です。詳細はヘルプページをご確認ください。

jQuery.flexslider.jsでLoad時のリスト幅が「100px」になってしまう問題



jQueryMobileで追加したDOMにFlexSliderを適用したときに、イメージの入っている<li>の幅が勝手に「100px」になっている件。

どうやら「100%(デバイスの幅)」にしておくと、勝手に「100px」になるようなのですが、どこにも解決策が出ていない。


実は、同じような問題を指摘した人がいたけど、それに対する作者の回答がひでえ。
▼▼
https://github.com/woothemes/FlexSlider/issues/20

内容はこんな感じ。



質問:

“I am noticing on first load the slides are -100px off (not the -100 on the UL):
any ideas on how I can fix this?
change the value to 0 in the web inspector fixes it...”

私がスライダーをロードすると(<li>タグが)初期状態で100pxになってます。
(もちろん<ul>タグに100pxは設定していないです)
なにかこの現象を解決する方法はありますか?


作者の回答:

“Sounds like a CSS issue, rather than something on the plugin end of things.”

むしろそれはプラグイン側の問題じゃなくてCSSの問題って感じ。

“Closing this issue because it is not related to the plugin itself.”

それはプラグイン自体には関係ないから、このスレを閉じるんで( ゚д゚)ノ ヨロ。



うーん…この作者ときたらwww

以前に、スライドショーがポーズ状態のままになってしまうという問題に対処した時もそうだけど(この記事のコメント欄)、この作者、親切設計だけどサポートはメンドクセェってタイプの人だね。


という訳で、「start: function(){}」オプションを使って自分で正しいサイズを適用することにしました。



$( '#page' ).live( 'pageinit',function(event){
//スライダー始動
$('.panels_slider').flexslider({
animation: "slide",
slideshow: true,
slideshowSpeed: 4000,
directionNav: false,
controlNav: true,
animationLoop: true,
slideToStart: 1,
animationDuration: 300,
});
$(".flex-control-nav").css({"top":"110px"});
});

▼▼修正後▼▼

$( '#page' ).live( 'pageshow',function(event){

var img_width = $('ul.slides').width();

//Slider始動
$('.panels_slider').flexslider({
animation: "slide",
slideshow: true,
slideshowSpeed: 4000,
directionNav: false,
controlNav: true,
animationLoop: true,
slideToStart: 1,
animationDuration: 300,
start: function(){
$('ul.slides li').css({"width":img_width});
$(".flex-control-nav").css({"top":"110px"});
}
});

});



要は、DOM取得とページ構築…さらにスライダーの始動のタイミングの問題だということです。

$( '#page' ).live( 'タイミング',function(event){}

の設定が悪かった…と。

「pageinit」(DOM読み込み完了)じゃなくて「pageshow」(追加DOM表示完了)のタイミングで「ul.slides」の幅(スライダーの表示幅)を取得して、「start: function(){}」オプションで適用するってコードに変更したわけです。

結果は…思ったとおり上手くいきました。

一応、これ覚えておいたほうがいいかもなので、メモ。


$( '#page' ).live( 'pagebeforehide',function(event){}
ページ遷移前に遷移元のページ上で発生

$( '#page' ).live( 'pagebeforeshow',function(event){}
ページ遷移前に遷移先のページ上で発生

$( '#page' ).live( 'ページ遷移の完了後に遷移元のページ上で発生',function(event){}
ページ遷移前に遷移元のページ上で発生

$( '#page' ).live( 'pageshow',function(event){}
ページ遷移の完了後に遷移先のページ上で発生



jQueryMobileを使ってAjaxでDOMを追加するとこういう問題にぶち当たるので、Ajaxを無効にする人が多いんだろうな…多分。


対処法は「そろそろjQuery Mobileでajaxを無効にしてるやつに一言いっておくか」あたりを読んでみるといいのかもです。

名刺に使おうと思った、秀逸なアイデア。(EPS素材アリ)



個人で、EC-CUBEのカスタマイズとかデザインとかWeb制作とかやってまして、名刺を作る必要があったので
「Business cards」でググッてみたら、こんなの発見。

googleロゴ


あ、これは秀逸だな~とか思ったので、早速作ってみました。

Googleトップ画面のEPSデータ

とりあえずCS4まで落としたんですが、開けますか?


ちょっと時間も無いので、立体的な(エンボス加工?)ロゴではなく、のっぺりとしたロゴですが…。



ネットで探したら落ちてるかもしれないので、探してきて差し替えちゃって下さい。

配布に関してはこちらのリンクをコピペでおながいします。


<a href="http://dokipoke.net/eps/google-search.eps">Googleトップ画面のEPSデータ</a>





某基金訓練の授業で画像からトレースする…ってのをやったので、生徒さんたちはこれくらい朝飯前ですよね?


ってか、こんなモン作ってる場合ではない…。

Which do you choose Android or iOS ?



iOSとAndroidの違い、iPhoneとAndroid端末の違い。


僕がAndroid端末ではなくiPhoneを選んだ理由。

それは僕がマカーだから…ということではなくて、
ソフトウェアメーカーとハードウェアメーカーが同じだったから、です。


実は、iPhoneを購入する前にTOSHIBAの端末を使っていたのですが、
これがもう酷い代物。

タッチパネルが反応せずに電話に出れない、
カメラを起動したらフリーズ、
電源が半日ともたない
…というホントに「使えない」ケータイでした。

動きもなんかもっさりしてるし、いつフリーズするか分からないので
(フリーズしたら電源を落としてリセット…立ち上がるまでが異常に遅い)、
結局使い物にならない最悪の端末でした。

TOSHIBAがWindows Mobileに合わせて端末を作ったのか、
あるいはTOSHIBAの端末に合わせてMSがカスタムアップをしたのか、
はたまたTOSHIBAがWindows Mobileを自社端末向けにカスタムアップしたのか…
は定かではありませんが(多分、一番後者だと思われ)、
やっぱり端末向けに最初から作られた専用OSを積んだ携帯がいいな…ということで
iPhoneをセレクト。

最初は「BlackBerry」を狙っていたけど、iPhone4のSIMフリー盤が結構簡単に
入手可能なことに気付いて、現在の「SIM free iPhone4」を購入したわけです。


…という、上記の流れから考えても、今後僕がAndroidを選ぶことはないでしょう。

Googleが自社で端末を開発しない限りは。



◆iOSとAndroidの違い◆



で、表題の「iOSとAndroidの違い」ですが、その大きな違いは

「そのソフトウェア(OS)は誰のために設計されたのか」

です。

端的に言うと
iOSは「ユーザーのため」
Androidは「キャリア、あるいはメーカーのため」
に設計されたOSです。

Appleは、そのソフトウェアを「個人」に売るために設計し、
Googleはそのソフトウェアを「企業」に売る(正確には売らないけど)ために設計しました。

iOSは「個人」に使ってもらってナンボ。
Androidは「企業」に採用されてナンボ。

同じ携帯端末用のOSなのに、設計思想がまるで違うのですね。



僕は単純なので「個人」ユーザーである僕のために設計してくれたAppleのiOSが
採用された端末…すなわち「iPhone」を選んだ、ただそれだけのことです。

結局、前出のTOSHIBAの端末ですが、ソフトウェアの不具合…ということで
ファームウェアのアップデートをしなければならなかったのですが、責任の所在は
今もって分かりません。

TOSHIBAが悪いのか、MSが悪いのか…が見えてこない。


というわけで、責任の所在が明確にわかるiPhoneを選ぶのは正しい選択だと思います。


これだけ世の中にオープンソースが溢れているのに、それを積極的に採用する企業は
なかなかありません。
エンタープライズ向けの業務用パッケージを企業が採用するのは、多分僕と同じように
「責任の所在」を明らかにしたいからなのだと思います。


結局、個人向けのソリューションは企業にも選ばれるんじゃないかな…と思ったり。
Appleのコンピュータを採用する企業が増えているのも、多分そこなんじゃないかなと思います。





◆iPhoneとAndroid端末の違い◆



この二つの大きな違いはこうだと思います。

「iPhoneはiOSを載せるために設計された」
「Androidは多数のメーカーの端末に載せるために設計された」

要するに、iPhoneはあくまでもiOSを動かすためのものでしかなく、
あくまでも主体は「iOS」。

後者の方はと言えば…

あくまでも主体は各メーカーの「端末」であって、それがどのような
スペックであろうと動くようにカスタマイズできるよう、Androidは
設計されているわけです。






でも、結局はその携帯(iPhoneだろうとAndroidだろうと)を使うのは
個人ユーザー。

Webサイトも同じかと。


確かに、ドキポケネットに比べて、シティヘブンは機能も充実している
のですが、それは「個人ユーザー」にとってのメリットではなく
「掲載店舗」にとってのメリットが重視された機能だ、と思います。


要は「企業」向けに設計されたAndroidと、その設計思想・方向性は同じ。
だったら僕は個人ユーザー向けの設計思想…そう、iOSのようなサイトを
目指すべきなんじゃないか。

-------------------------------------------------------------
そしてもしAppleと同じ、個人という最上最難客を取りに行くことに
決めたのであれば、長期戦を覚悟して欲しい。最初のApple Storeが
オープンしてからもうすぐ11年が経とうとしている。
それくらいかかって当然と心得るべきだろう。
Dan Kogai ~404 Blog Not Found より~
-------------------------------------------------------------

Which do you choose Android or iOS ?



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

上と全く同じ内容のエントリーを
「iOSとAndroidの違い、iPhoneとAndroid端末の違い。」
というタイトルで書いたのですが、

「この記事には一部、Amebaの健全なサイト運営にふさわしくない言葉・表現が含まれている可能性がある為アクセスすることができません。」

というメッセージとともに表示されなくなってます。


…で。

どの部分に「Amebaの健全なサイト運営にふさわしくない言葉・表現が含まれている」のか分からないんですけど。



コンプリートガチャ規制キタ━━━(゚∀゚)━━━!!


ようやく…というかなんというか。

小卑者…もとい消費者庁がコンプガチャについて違法性を確認、中止要請するとのこと。

違法性が確認できる他のサービスについても、順次中止要請を行なっていくということで、ようやく本腰上げてきたかな…という感じです。

今回は「景品表示法」についてでしたが、「風俗営業等の規制及び業務の適正化等に関する法律」(風適法)、「インターネット異性紹介事業を利用して児童を誘引する行為の規制等に関する法律」(いわゆる出会い系サイト規制法)についても、ガンガン行って欲しいなーと思います。

どうでもいいことなんですけど、「風俗営業等の規制及び業務の適正化等に関する法律」って風適法…?
周りでは「風営法」って言ってる人の方が多いです。


似たようなので、レベルアップガチャなるものもあるそうな。

途中でやめようとすると
「次は確率アップ!」
とか煽りが入るらしいです。

でも、レベルがリセットされることがある(と、見えないように書いてある)そうで。


詐欺じゃん…もはや。


で、レベルがリセットされると、残念賞でガチャを回すコインがもらえて、またガチャをするように仕向ける。
ガチャにしか使えないコインもっててもしょうがないので、またガチャを回す。
するとまた「次回すと確立アップ!」という煽りが入る。

コインを購入して、またガチャを回す。
レベルリセット。
オマケでコインが貰える。
上に戻る。


…無限ループでとにかく金を巻き上げる、と。


パチンコ・スロットでもこんなに煽ったりしないんですけどね。
射幸心を煽るだけ煽って、金を注ぎ込ませるわけです。

しかも、年齢制限なく。


手に入れたデータを交換(と言う名のRMTによる現金化)ができる当たりなんかは、パチンコの景品交換所と類似しているわけで、誰がどう見ても違法賭博だろ、と。


まあ、僕は一回もソーシャルゲームというものをやったことがないのでアレなんですが、周りに結構ハマってる人がいるんで。

一緒にメシ食いに行ったら、ずーっとゲームしてるんで、放置して帰ったこともあります。



ギャンブルの依存性は、タバコや麻薬よりもタチが悪いそうですよ。



中高生の射幸心を巧みに煽って、依存状態にして金を巻き上げる…なんてのは、ヤクザが中高生をシャブ漬けにして売春させてるのと対して変わらないなぁ…と思うわけでして。

そんな会社が球団持ったりとか、もう日本終わったな…とか考える次第です。



今、性風俗の情報誌なんかやってて、求人なんかも扱ってるので「17歳ですけどどこかお店紹介してください」って電話がかかってくるなんてこともあったりします。


これだけは言わせてください。

・ウチはただの「媒体」なんで、求人応募は各店舗に連絡してください。
・「17歳でもどうぞ」なんていう怪しい店舗は、ウチの媒体には載ってないのでどこに聞いても断られます。


こういう女の子とかいるのを考えると、ソーシャルゲームにつぎ込んでるのかな…とか考えちゃいますね。店に電話せず、直接編集部に電話してくるあたりが切羽詰ってるというかなんというか…。
本人もそれ(17歳という年齢で働くということ)を違法だと認識しているから、わざわざ編集部に電話してきたのかな。


媒体に一切広告は出さずに、SEOだけ頑張っちゃってるようなデリヘル店とかならいざしらず…。


あ、別に「媒体に広告を出さない=違法店」と言ってるわけじゃないです。

WebminでApacheのサブドメイン設定。



[サーバ]→[Apache Webサーバ]→[仮想ホストの作成]で仮想サーバを作成する。


【デフォルトのWebサーバー】
アドレス:任意(全てのアドレス)
ポート:80
ドキュメントのルート:/var/www/html/default
サーバ名:example.com
ファイルに仮想サーバを追加する:標準 httpd.conf ファイル


【ショップ(サブドメイン)】
アドレス:任意
ポート:80
ドキュメントのルート:/var/www/html/shop
サーバ名:shop.example.com
ファイルに仮想サーバを追加する:標準 httpd.conf ファイル




「/etc/httpd/conf/httpd.conf」の中身を直接編集するならこんな感じ。


NameVirtualHost *:80


ServerName example.com
DocumentRoot /var/www/html/default


ServerName shop.example.com
DocumentRoot /var/www/html/shop



他にも色々設定は必要ですが(ログの保存先など)、とりあえずサブドメインを使うだけならこれだけで( `д´)b オッケー!


http://dokipoke.net/
http://shop.dokipoke.net/

上記の二つは全然違うコンテンツが表示されると思います。


とはいえ、ショップページはSSL対応(ポート番号は443)する必要があります。
それはいずれまた。


iOSとAndroidの違い、iPhoneとAndroid端末の違い。



iOSとAndroidの違い、iPhoneとAndroid端末の違い。


僕がAndroid端末ではなくiPhoneを選んだ理由。

それは僕がマカーだから…ということではなくて、
ソフトウェアメーカーとハードウェアメーカーが同じだったから、です。


実は、iPhoneを購入する前にTOSHIBAの端末を使っていたのですが、
これがもう酷い代物。

タッチパネルが反応せずに電話に出れない、
カメラを起動したらフリーズ、
電源が半日ともたない
…というホントに「使えない」ケータイでした。

動きもなんかもっさりしてるし、いつフリーズするか分からないので
(フリーズしたら電源を落としてリセット…立ち上がるまでが異常に遅い)、
結局使い物にならない最悪の端末でした。

TOSHIBAがWindows Mobileに合わせて端末を作ったのか、
あるいはTOSHIBAの端末に合わせてMSがカスタムアップをしたのか、
はたまたTOSHIBAがWindows Mobileを自社端末向けにカスタムアップしたのか…
は定かではありませんが(多分、一番後者だと思われ)、
やっぱり端末向けに最初から作られた専用OSを積んだ携帯がいいな…ということで
iPhoneをセレクト。

最初は「BlackBerry」を狙っていたけど、iPhone4のSIMフリー盤が結構簡単に
入手可能なことに気付いて、現在の「SIM free iPhone4」を購入したわけです。


…という、上記の流れから考えても、今後僕がAndroidを選ぶことはないでしょう。

Googleが自社で端末を開発しない限りは。



◆iOSとAndroidの違い◆



で、表題の「iOSとAndroidの違い」ですが、その大きな違いは

「そのソフトウェア(OS)は誰のために設計されたのか」

です。

端的に言うと
iOSは「ユーザーのため」
Androidは「キャリア、あるいはメーカーのため」
に設計されたOSです。

Appleは、そのソフトウェアを「個人」に売るために設計し、
Googleはそのソフトウェアを「企業」に売る(正確には売らないけど)ために設計しました。

iOSは「個人」に使ってもらってナンボ。
Androidは「企業」に採用されてナンボ。

同じ携帯端末用のOSなのに、設計思想がまるで違うのですね。



僕は単純なので「個人」ユーザーである僕のために設計してくれたAppleのiOSが
採用された端末…すなわち「iPhone」を選んだ、ただそれだけのことです。

結局、前出のTOSHIBAの端末ですが、ソフトウェアの不具合…ということで
ファームウェアのアップデートをしなければならなかったのですが、責任の所在は
今もって分かりません。

TOSHIBAが悪いのか、MSが悪いのか…が見えてこない。


というわけで、責任の所在が明確にわかるiPhoneを選ぶのは正しい選択だと思います。


これだけ世の中にオープンソースが溢れているのに、それを積極的に採用する企業は
なかなかありません。
エンタープライズ向けの業務用パッケージを企業が採用するのは、多分僕と同じように
「責任の所在」を明らかにしたいからなのだと思います。


結局、個人向けのソリューションは企業にも選ばれるんじゃないかな…と思ったり。
Appleのコンピュータを採用する企業が増えているのも、多分そこなんじゃないかなと思います。





◆iPhoneとAndroid端末の違い◆



この二つの大きな違いはこうだと思います。

「iPhoneはiOSを載せるために設計された」
「Androidは多数のメーカーの端末に載せるために設計された」

要するに、iPhoneはあくまでもiOSを動かすためのものでしかなく、
あくまでも主体は「iOS」。

後者の方はと言えば…

あくまでも主体は各メーカーの「端末」であって、それがどのような
スペックであろうと動くようにカスタマイズできるよう、Androidは
設計されているわけです。






でも、結局はその携帯(iPhoneだろうとAndroidだろうと)を使うのは
個人ユーザー。

Webサイトも同じかと。


確かに、ドキポケネットに比べて、シティヘブンは機能も充実している
のですが、それは「個人ユーザー」にとってのメリットではなく
「掲載店舗」にとってのメリットが重視された機能だ、と思います。


要は「企業」向けに設計されたAndroidと、その設計思想・方向性は同じ。
だったら僕は個人ユーザー向けの設計思想…そう、iOSのようなサイトを
目指すべきなんじゃないか。

-------------------------------------------------------------
そしてもしAppleと同じ、個人という最上最難客を取りに行くことに
決めたのであれば、長期戦を覚悟して欲しい。最初のApple Storeが
オープンしてからもうすぐ11年が経とうとしている。
それくらいかかって当然と心得るべきだろう。

Dan Kogai ~404 Blog Not Found より~
-------------------------------------------------------------

Which do you choose Android or iOS ?



PHPを『使う』にあたって、どの本を選べばいいか…について。



僕が選んだのは、この本。



PHP 逆引きレシピ (PROGRAMMER’S RECiPE)


2年前、プログラミングを始めるにあたってPHPという言語を選んだ後、友人のSEに相談したらこれがいいんじゃないかということで。

僕は基本的に「プログラムを学びたい」わけではなく「PHPで動的に生成するWebサイトを作りた」かったので、こまけぇリファレンスはどうでもいいのでわ?

という事で勧めてもらった。


基本、僕はプログラマではないのだし、プログラムを学ぶ必要はまったくない。
それよりも、PHP(の関数群)を『使う』ことを優先させたほうが、やりたいことが手っ取り早くできるよ

…というのが友人のアドバイスだった。


しかもPHPの場合、やりたいことは呪文一発で出来ることも多い。他のプログラミング言語だったら小さな呪文を組み合わせてやるところが、PHPなら「一言で済む」。本書の構成は、まさに「こんな時のための一言」をすぐに探せるようになっていて、本書があれば「やりたいこと」を「深く考えず」にやることができる。

だからこそ、PHPはプログラミング言語を学ぶのに向かないのだ。考えることを求めず、逆に考えようとすると「なぜこうなっている」のかを知るのは絶望的。PHPは「動かす」報酬を最大化するために、「学ぶ」報酬をばっさり犠牲にしているのだ。

よって、PHPを「学ぼう」とするのは、時間の無駄だと弾言する。学ぼうとするから報われない。ただ必要な時、必要な呪文を、必要なだけ唱えればいいのだ。それ以上をPHPに期待するのは間違いだ。「なぜ」を問うてはならない。


と、404 Blog Not Foundにもあるように、「やりたいこと」を「深く考えず」にやるための最前(最善ではなく)策が、PHPを『使う』ことだった。

結局、Dan Kogai氏や僕の友人が勧めたこの本は、僕にとって最適の本だったと思う。


ただ、PHPを使うようになると必ずある「問題」にぶちあたる。


PHPを一言で言うと、「使えても作れない」言語だということになる。PHPのためにお膳立てした環境を使う事はできても、その環境をお膳立てしてあげるにはPHP以上のものが必ず必要になってくる。

そのことは別に悪くない。というより、他の言語がViewをあまりにおろそかにしてきたというのは事実だろう。HTML書きたちを、プログラマーたちが「下に見ていた」ということは否定できない。そのHTML書きたちの、「私たちにも少しはプログラムさせてよ」という声に他の言語屋たちが耳を充分傾けてこなかったことこそ、猛省すべき課題だろう。

しかし、PHPではプログラマーがプログラムを続けるための一番のご褒美がほとんどない。それは何かというと「新しい技を覚える」という喜びである。「新しい呪文」ではない。それならいくらでもある。しかし新しい呪文を覚えた所で、心理報酬は大したことがない。単に知識が増えただけだ。PHPを使っても、知識は増えても知恵が増える気がちっともしないのである。

そろそろPHPに関して一言いっとくか(404 Blog Not Found)より~



その問題というのが、PHPを動かすための環境だったりして…。

結局、PHPを使うことそのものよりもPHPを動かすための環境整備に時間を取られてしまったりと、世の中で言われているほど『PHPは開発が早い、コストが安い』言語でもないな~とか思う。

環境云々を考えるのがめんどくさいので、最近はさくらのVPSばっかり使ってて(共用サーバーでの使い心地の悪さといったら…。あれで何で『ほとんどのサーバーで使える』と評価されているんだろう?)、決して「初心者向け」の言語ではないと個人的には感じてます。

しかも、PHPを使うことで得たスキルは、他の言語でほぼ(全く?)使えないので潰しが効かない。

PHPでWebサイト構築している時より、JavaScriptでコード書いてる時の方がアタマも使うし(しかも、あってもなくてもよくね?…的なコードだったりする)。

PHPerとしては悔しいけれど、Dan Kogai氏の言う通りです。



それでも、無駄のない洗練された日本車より、手間のかかるアメ車の方が好きだったり。

言語としての仕様(中身)ではなく、外見で分かりやすく
「Σ(゚Д゚)スゲェ!!」
ってなれるPHPは個性的かも。


多様化、多様化…という流れの中で、やれ、あの言語はこうだ、この言語はどうだなんていう論争も、全くもって僕には関係ないわけで。


っつーわけで、PHPやるなら冒頭の一冊。

というより、他の本、読んだことないっす。

お前のブログの右側…ありゃ何だ?(JS版ヒアドキュメントでアフィリエイト読み込み)



違うんです!

決して僕の趣味なんかじゃないんです。

いや、この記事を見て、ほう…何が売れたか解るんかいな。じゃ、ちょっとやってみるか…

てな感じで効果を測定しようかと。

僕のブログにどんな方がいらっしゃっているのかは分かりませんが、とりあえず目立ちそうな(かなり目立ってるでしょ?)商品を掲載してみた次第です。

あとは…。

ヾ(〃゚∀゚)┏θペタンチョ…の人とか、読者申請とか、なうのフォローとか。

そういうことをやっていれば、自分のブログのアクセスが増えるとかレクチャーしてて、んでもって「アフィリエイトは稼げる」みたいなことをやってる人が結構いるんですが、アフィリエイトがいかに稼げないかというデータを取るため…ってのもあります。

http://www.landerblue.co.jp/blog/

▲▲
こことかみてて、アフィリエイトは儲からないって言ってるのでどんなもんかな…と。

一ヶ月30万訪問者数のこのブログだって月に2万円くらいの収入でしかない


って書いてあったので、月3万アクセスのこのブログなら2000円は稼げるのかな…とか考えてみたり。

まあ、稼げないんですけどね(笑)。


だって商品が→→→→→→→→→→→→→→→(笑)→→→→→→→→→→→→→→→→→

なわけですから(笑)。

最高で月210円でした。


あハハハハハハハハハハハハはハハハハハハはハハハハハハ…

サイドバーにアフィリエイトを貼るときは、外部にアフィリエイト表示のためのスクリプトを書いて、それを「サイドバーの設定 > プラグインの追加 > フリープラグイン」で読み込みます。

例えば、こんな感じ。

フリープラグインに記述

<script type="text/javascript" src="http://webmage.pro/plugin/affiliate.js"></script>



affiliate.js
document.write('\
<div id="adlist">\

<table … /table>\

</div>\
');


PHPで言うところのヒアドキュメントみたいな感じで、とりあえずアフィリエイトタグを表示させるスクリプトを書いて、それを読み込むだけ…と。
改行部分にはちゃんと「¥」を入れないとエラーになりますので、お気をつけて。


個人的には、ルカ姉さんのフィギュアなら買ってもいいかな…とか思ってます。