はてなキーワード: Smartyとは
あの文脈では「コード管理」としてのGitへの言及だと思うんだよなぁ
わざわざグラウドが別枠だし
まぁ、その後の増田もDockerをVMwareとかとの対比でなく
smartyと対比してる辺り、わかってないようだがな
GitHubでソース管理して、サーバーはクラウドで運営、フレームワークにDockerを使い言語はGo、Backlogで連携するITベンチャーがクソのようなサービス作って来るのはざらにある
GitHubで管理してるのに「もう戻せません」とか、アホかと思うし
フレームワークに縛られてサービスの改悪提案とかするなやと、むしろサービスにあったフレームワークをお前らが捜せと
Backlogで連携してるのに、全然見当違いのことして「聞いてません」と言い、連絡したIDを指摘すると、「〇〇だと思ってました」とか言いだす
使えるのなんてほんの一握りで
そういうのは大抵自社サービスを立ち上げてる
逆に言えば、新技術なんてな、基礎がしっかりしてればそれなりに使いこなせるし
プラグインの中のPHPファイルをincludeして書いてある関数呼べばいいんじゃないの?
https://stackoverflow.com/questions/3253713/call-smarty-plugin-function-directly-from-php
追記:ありまぁす
手動で直接プラグインファイルをincludeなりrequire なりしろってことだよ
Smarty使ってるようなやつはどうせ、requireとかですでにコードがぐちゃぐちゃになってるだろうし、問題ないだろう。
例えばゴミみたいなプロジェクトのコード環境だと(2020年にSmarty使って時点でお察し) 出力するHTMLの全体ではなく一部(記事領域)だけがSmartyのテンプレート機能で出力されていて
それ以外の部分はPHPで出力される。などといった狂った設計実装はよくあることです。ほんとに狂ってるけど実在するんだよな〜。
しかもなぜかページ全体に影響する超重要な機能(アカウント情報)がSmartyのプラグインとしてしか実装されていなかったりします。ゴミですね。
そのSmartyプラグイン(アカウント情報)に応じて記事以外の部分を書き換える必要(サイトのタイトル表示切り替え)があるんだけど。
SEOの処理だからJS使わないでってさ。SEOのこと考えるんだったら最初からもっと軽くて単純な実装のまともなサイト作ることをおすすめするけど、作っちゃったものは仕方がないんすかね。お客さん可愛そうですね。
とまぁ、SmartyのプラグインをPHP側から呼び出したことってあるんだけど、Smartyに登録したプラグインをPHPから実行する方法はこの世に存在しないっぽいので、本当にこのテンプレートエンジンは腐ってるなあという沈んだ気持ちです。
もともと今の会社ではVB.NETによるWindowsFormの案件が主流だった。
本当はASP.NET MVCかJavaでやりたいけど、上の事情によりPHPでやってる。
本来のオーバーロードがないこと、LINQに代わるものがない(仕方無くGINQ使ってるけど
それでもまぁ、サーバーサイドのロジックをゴリゴリするのは楽しい。
問題はView(HTML)だ。Smartyのテンプレート飛んだり、CSSに飛んだり、JavaScriptファイルに飛んだり
しないといけない。IDE上で新たなエディタタブが増えるたびに嫌になる。それはNetBeans使おうが、
PHPStorm使おうが同じ。
自分が集中したいドキュメントと、デバッグの過程で開いちゃうどーでも良いドキュメントが、
とにかくごっちゃになって開かれているのがつらい。
俺が集中したいソースファイルのタブだけ、特定の場所で開いてくれたら良いのに。
最近はPHPファイル開くのはOKだがその次の流れでViewのテンプレート開かないといけないときに
Web制作において持論がある。CSSの設計云々で議論できるのはまともな営業が居てまともなクライアントをつかまえてきてまともに意見を言えるからだ、そうでなければCSSの設計云々は話にならない、お話にならない。
OOCSSにBEMにSMACCS、そんなもんできるかよ。クソみたいな、デザインを破壊する修正が大量に来て統一性もなにもあったもんじゃないし、セマンティック? 知るかくたばれ。アニメーションすらバラバラに指定されてっからAnimate.cssすら使えねえ。そもそも統一させてもらえないからクラスの意味がほとんどねえ、全部IDでも変わんねーよ。
頑張ったよ。SASSで綺麗に書こうとしたし、Smartyみてーなテンプレートエンジンが効率良いってのも分かってるよ。でもヘッダーすら変えろとか言われたらどこを共通化すればいいんだよ。
俺は確信した。Bootstrapの"mt-2"とか"display-inline-block"みたいにクラスを付けてってそれにスタイルを適用してくのが正解だって。ってかBootstrapのクラスばっかりでスタイル作ってる。だってクラス見るだけでスタイルが分かるし、共通化は一切されてねーからな。
あいつら、グラフィックデザインと同じだと考えてやがる、くたばれ。ポスターじゃねーんだよ。
俺はもう闇のWeb製作者になり客にはバキバキに嘘をつくようになった。SEOがだとかデバイスの保有率のデータだかなんかを持ち出して出来るだけ頑張らなくて良いサイトを作る。だって頑張ったってそれはカオスを作るだけの技術が上がるだけでコーディングの技術が上がる訳じゃ無いからな。
かと言って外注に出したらクソみたいに思いCSSフレームワーク使ったサイトが上がってくる、くたばれ。しかもグリッドシステムぐらいしか使ってねーじゃねーか、skeletonでも使っとけ、ふざけんな。
おかげで俺は毎日Web2.0的なデザインとレスポンシブ対応が混合した、パラレルワールドみたいなサイトを作ってる、スチームパンクだろ、お前営業やめろよ。単価安いんだよ。俺が営業行くから。元営業だからお前より喋れるから。
とにかくモジュール化だとかクラス命名手法だとか議論出来るお前らは幸運だ。全部の国がそれぞれ違う大陸にいるようなもんだ、クラスいらないからな。誰かWebpackであいつらの前頭葉をパッキングしてくれよ。
広告のクリック率考えるとPCの方がおまけになってしまうかもしれない。
詳細ページに回遊率を上げる仕組みを作って、逆にTOPページとかアクセスないしどうでもいいっぽい。
Rails3 とTwitter Bootstrapで、オシャレなエロサイトをつくってみました。
http://anond.hatelabo.jp/20120708161051
bootstrap使ってもカッコよくできないよ?
プログラマー向けじゃないの?
CSS,Components,Javascript のタグにあるサンプルを全部作ってみた。
あまりの面倒臭さに一度諦めた。
その後色々調べたら「simple_html_dom.php」の存在を知る。
スクレイピング作業が一瞬にして終わった。
メールの設定がどうしてもできない。
エラーも出ていない。
一度諦めた。
info@xxxx.com
危ない名前は使わないのは基本だよね。
MyIsamだとインデックスに容量制限があるのでInnoDB使用
表示
出来あがったサイト
数1000件のデータなのでキャッシュやインデックスいらなかったかも。
デザイナーがプログラムやるのって後者の方が敷居は高いとは思う。
でもプログラムは勉強できるけどデザインってセンスがなきゃどうしようもない。
おわり
もう少しデザイン頑張ってみる。
デザインの教本読んでみると
世の中にはマニアがあふれている。
これに尽きます。
「僕は世の中を知っている大人だ。」なんて
こんな身近に知らない世界はありました。
中でも僕を驚かせたのは
嘔吐好きとか、
ゲロはいてる女性見て、なんで興奮するんですか!? Σ(゚∀゚ノ)ノ
そのゲロかぶって、なんで興奮するんですか!? Σ(゚∀゚ノ)ノ
キワモノ好きなんて、
裸の女性がミミズや昆虫にまみれて、それを食ってんですよ! Σ(゚∀゚ノ)ノ
さすがに気持ち悪くなりました。。。
男は半分の7千万人でしょ?
エロに情熱がある若者から中年層だとその半分強で4千万人として
その4千万のうち
ってどのくらいいるんでしょうね。。。
作る人がいて見る人がいるんだから、まあソコソコな人数いるんだろうなあ。。
【らぶらぶAVさーち】
AVの検索サイトです。
ちなみに、ワンクリックで検索できるピックアップ検索は私の趣味です。w
最近は、つぼみ、紗倉まな、ほしのあすか、臼井あいみがオススメです。www ぐう可愛い!(゜∀゜
Nginx + php-fpm + MySQL で動いています。
言語はPHP + Smarty + Javascript(jQuery) で書いています。
あと、スクレイピング用に .NET で windowsアプリを作りました。
すぐ誤動作してしまうのですよね。。。
PHPだと対応し直しが面倒なので .NET に逃げました。。。。ヽ(°▽、°)ノエヘヘヘヘ
データは、アフィリをやっている
動画サイトのduga さんと、MGS動画さんから持ってきています。
DUGA
データを常に最新にしておくために
個人的には
待ち合わせで暇なときに
てな感じで使っています。
bootstrap使ってもカッコよくできないよ?
プログラマー向けじゃないの?
bootstrap3 の公式サイトを見ながら
CSS,Components,Javascript のタグにあるサンプルを全部作ってみた。
あまりの面倒臭さに一度諦めた。
その後色々調べたら「simple_html_dom.php」の存在を知る。
スクレイピング作業が一瞬にして終わった。
メールの設定がどうしてもできない。
エラーも出ていない。
一度諦めた。
info@xxxx.com
危ない名前は使わないのは基本だよね。
MyIsamだとインデックスに容量制限があるのでInnoDB使用
数1000件のデータなのでキャッシュやインデックスいらなかったかも。
デザイナーがプログラムやるのって後者の方が敷居は高いとは思う。
でもプログラムは勉強できるけどデザインってセンスがなきゃどうしようもない。
もう少しデザイン頑張ってみる。
デザインの教本読んでみると
まったくの素人がNginx+Bootstrap+WordPressでWebサービスを作成しました。
オシャレエロサイト「h300」をリリースして、10万PV/日を捌くためにやったこと
http://d.hatena.ne.jp/inouetakuya/20120410/1334058296
http://anond.hatelabo.jp/20120914214121
http://anond.hatelabo.jp/20120930171125
--------------------------------------------------------------------------------------------------------
35歳 今は事務系の仕事をしてます。たまに運転。限りなくパートに近い労働条件ですが、
仕事がないよりはマシですので、続けているわけです。
前(5年ぐらい前)からWebサービスみたいなものを自分自身で作ることができたら楽しいだろうなぁと。
TwitterとかFacebookとか数回利用したことはあるけど、詳しいことはさっぱり。
朝6:00から夜18:00まで車を走らせてゴミ回収をしていた者です。
パッカー車って知ってますか。街でよく見かけるゴミ収集車のことです。
ドラッグストアとか回るんですよ。休憩時間は15分ぐらいなんですよ。一日。馬車馬のように働いていました。
そのパッカー車で物損事故を起こしてしまい、会社に居続けることはできなくなり仕事をやめました。
エロはもともと好きだったのですが、車を運転する以外の技術は持っていません。
何か手に技術を身につけたいと考えるようになりました。ただ30歳も過ぎたおっさんにあまり時間はないので、
資源の集中を意識し時代の流れはパソコンだということで、始めたわけです。
はじめはHTML,CSSの本で基本的なホームページ制作を学ぶ。
-----------------------------------------------------------
Bootstrap
-----------------------------------------------------------
Webサービスを作るにはプログラミングが必要なことは知っていたけど、初めてみて暗号のように思える。
プログラミングの中でもPHPは簡単なのでしょうか?最近の流れからすると、Rubyなのでしょうけど、
PHPは自分の実現したいサービスが組み立てやすい気がします。
http://www.amazon.co.jp/gp/product/toc/479733245X/
foreachやif,forなどの基本的な使い方を身につける。
プログラムは結局小さいプログラムの集まりだとどこかに書いてあった。ことを思い出す。
PHPはベタのプログラムだどセキュリティ的に弱いということでPEARを使うように。
ほかのプログラミング言語は知りませんが、PHPerというらしい。
プログラムに慣れてくるとPEARライブラリなどのクラスに抵抗がなくなってきた。
それでも、オブジェクト指向という考え方を体で理解するまで時間がかかる。
----------------------------------------------------------
http://php.xenophy.com/index.html
http://kumicyou.sakura.ne.jp/php/index.html
http://www.amazon.co.jp/gp/product/toc/479733245X/
http://www.amazon.co.jp/gp/product/toc/4797367571/
----------------------------------------------------------
----------------------------------------------------------
Simple HTML DOMParser メモリーオーバー?が発生するので頻繁には使えない。
正規表現って便利ですよね。(preg_match("/ab/", $string);など)
Webサイトのどんな情報でも切り取ったり、貼りつけることができるので。
Web上で特定の情報を好きなように集めてきて、加工することができるスクレイピングを発見。
PHPでスクレイピングするにはどうしたらいいか考えるようになり、かなり時間を使いました。
該当URLのサイトマップからリンクページ(aタグ)をすべて取得する。
ページの中にあるエロ動画URLやサムネイル画像などをファイルへ出力。
$fp = fopen("/var/www/html/sample.txt", "a"); fwrite($fp, $title."\n"); fclose($fp); }
出力したファイルの中で重複データなどないように一つにまとめて使えるように加工する。
あらかじめCronで時間を指定してファイルの情報をデータベースへ投入。
これから欲しい情報は、著作権に気をつけながらスクレイピングして集めてくると楽しいなぁと思ってます。
自分でホームページを公開するためにはサーバーが必要なことは以前から知っていたのですが、具体的には手探り状態からで
サーバはレンタルサーバとか専用サーバなどいろいろあるのですね。
全部自分で管理しないといけないため、めんどくさい気がした。結局VPSサーバに。
スピードアップのためにやったこと。データベースとアプリケーションサーバを分ける。
データベース最適化、query_cache_sizeを設定したりなど。
http://anond.hatelabo.jp/20101203150748
ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編)
http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html
定番のPHP MYSQL Apacheから調べていくとNginxというWebサーバが高速だという
記事が多いので、使ってみることに。
NginxだけではPHPは動かない。php-fpmをインストール。
------------------------------------------------------------------------------------
http://d.hatena.ne.jp/yoshi-ken/20120205
http://kray.jp/blog/wordpress-tuning/
http://server-setting.info/centos/apache-nginx-2-php-fpm-install.html
http://hara19.jp/archives/5817
http://tech.aainc.co.jp/archives/3022
------------------------------------------------------------------------------------
以上の記事でNginxのproxyを設定することができ、とても参考になりました。
どうにか既存のサイトをWordPressで作れないかと考えていたら、
WordPressは固定ページとブログ用のページを分けるテンプレート構造だと知る。
WordPressはindex.phpファイル一枚あれば動くらしく、ページを表示する優先順位があるらしい。
メインページ front-page.php → home.php → index.php
そのため、fromt-page.phpに自分で作ったSmartyをそのままコピペして,なんとか既存のサイトとWordPressをミックスさせることに。
詳しくは以下の本が参考になりました。
http://www.amazon.co.jp/gp/product/toc/479736758X/
WordPress奥が深いです。
途方にくれていたところ、CSSフレームワークのTwitter Bootstrapを知る。
HTMLに少し手を加えるだけで今っぽいデザインにできる。その分、余った時間をweb構築に集中することができる。
http://panpanwatch.net/douga.php
http://panpanwatch.net/newdmm.php
DMM動画の当日配信が開始されたコンテンツをDMMのapiから収集。
http://panpanwatch.net/?page_id=5382
ネット上のエロ更新情報を収集して表示。メインはWordPressで構築。
--------------------------------------------------------------------
常日頃からネットのエロにはお世話になっていたので、なんか恩返しではないですけど、
Webサービス作るまで、ずっとパソコンの前ばかりにいたので、
こんにちは。みなさまからのブクマとコメントを多数いただき、ありがとうございます。
いろいろご意見あると思いますが、大げさな嘘などは書いていないです。
PHPを理解するのも、こちらの本を一冊やれば、それなりに理解できるようになりました。
http://www.amazon.co.jp/gp/product/toc/479733245X/
次のサービスを作成するときは本格的なアプリケーションやソーシャルゲームなどやりたいなぁと
野望だけは持っています。ですけど、ずっとこのサイトだけに集中してきたので、今はパソコンから少しだけ距離を置くつもりです。
なのに、なぜかいちいちプロジェクトが火を噴いたりする。その原因を考えてたんだけども。
欧米では、まず「技術」があり、「さあこれらの技術を組み合わせて、どんなサービスを展開しよう?」と考える。
日本では、まず「こんなサービスがいい、画面はこんなデザインがいい」という具体的・絶対的な要求があり、技術屋がそれに応える──プロジェクト開始直後に想定していた部品でどうにもならない問題は、自力でなんとかする必要がある。たとえば PHP や Smarty や jQuery やそのプラグインなどは、肝心なところで何も手助けしてくれない(・・ばかりか、我々の努力を邪魔する事もある。例えばもうメンテされていない「thickbox.js」は、いや、もういいや以下略)
・・とかって妄想してみた。
もちろん欧米のプロジェクトの全部がそうってわけでも、日本のプロジェクトの全部がそうってわけでも無いんだろうけど、割合としてはどんなもんだろうね?
完全に一致を作るための勉強法
コメントもたくさん頂いてまして、それにお答えするのに「ブログでもつくろうかいな」とのぼせましたが、そんなテーマで続くわけもないので、やはりアノニマスダイアリーにしました。
【製作期間について】
まず、皆さん仕事しながらたった4ヶ月で!と褒めて頂いてますが、たったじゃないですよ。4ヶ月って。
仕事が終わって、毎日2~3時間。土日関係無くやると、多分300時間くらいになります。
専門学校の2年間の授業時間がこのくらいだったりするんじゃないですかね。結構長いです。
【モチベーションの維持について】
モチベーションを保つのがすごいというのも褒めてもらいましたが、私は一回やり始めると、意外に長く続きます。
コツがあるんです。
毎年、日々の単純作業が続かない新入社員が入ってきますが、そんな新人に言います。
「息をするように続けるんだよ。」
毎日やるんです。土日関係無く。毎日。
前回の日記で「勉強した」と何度も使ってしまった為、誤解をされている方が多くいらっしゃいます。
正確には、「調べ」ました。
職業柄「調べる」という事が多い為、WEBサービスを作るという事に関してはそれが訳に立ちました。
追記でも書いているのですが今回のシステムはほとんどが、先人達が作った既存のシステムがベースになっています。
ぱくりと言われてしまえばそれまでなんですけど、丸ごとはやってないですよ。というか、丸ごと合うモノがなくて、いろんな所からソースコードを拝借させてもらいました。
なので、中身はぐちゃぐちゃです。けど、検索システムはそれでも200行くらいしかありません。クローラーは80行くらいでしょうか。
【HTMLについて】
というか、それすら途中で挫折してAdobe社のDreamWeaverというソフトを使いました。
適当に書けばソースは綺麗にしてくれるし、CSSの体裁はプロパティを設定しながら見た目のまま調整すれば良いし、一番助かったのはテンプレート機能でした。
最初は全部のHTMLファイルをコピーしながら作っていたのですが、ヘルプを見るとテンプレートとライブラリという機能があるのをしってライブラリがいまいち分らなかったのでテンプレートを使いました。
■Dreamweaver便利
■テンプレート便利
【Javascriptとの出会い】
最初に本やで立ち読みした本に、「プログラムをやってみよう」ということでJavascriptの事が書いてありました。
なので、自然とプログラムの最初のさわりがコレになっただけなんですね。
でも、アラートを出したりとかばっかりで、面白くありませんでした。
インターネット黎明期からのネットユーザーなのですが、「最近よく見るページが移動しないのにページの中身が切り替わるやつかっこいいよな」と思って「ページ遷移しない 読み込み」で検索をすると、Ajaxという文字を見つけ、「ajax 入門」で検索してトップに出たサイトでAjaxの概要だけ調べて、「ajax 簡単」でprototype.jsとjQueryの文字を見つけて「ああ、jQueryってよく見るな」というのがjQueryとの出会いでした。
「最近よく見るページが移動しないのにページの中身が切り替わるやつ」は、非同期通信という名前でした。
jQueryを使うと、下記のように1行コピペするだけで外部のHTMLを読み込む事ができました。
--------------------------------------------------------------------------
var http = $.get("abc.html",null, function(data) {$("#main").html(data);});
--------------------------------------------------------------------------
すごい簡単。最初は意味は分りませんでしたが、目的の事ができればそれで良いので次に進みました。
■jQueryすごい
■非同期通信かっこいい
【Perlとの出会い】
jQueryがちょこっと書くとダイナミックに色々変わってくれるので、日々いろんなプラグインを探して遊んでいました。
でも、作りたかったのは検索システムだったのを思い出し、また近くの大きな本屋に。
検索するパソコンで”プログラム 検索”で探しだした棚に行くと、「CGI/Perl」の本棚でした。
大量にありすぎてどれをかって良いか分らなかったので、いくつか立ち読みして家に帰り、「CGI/Perl 入門」で検索すると
このページにたどり着きました。
Windowsだった為、ActivePerlを入れていくつかプログラムをやりましたが、これがまた面白くないんですね。
すごい地味で。このPerlをさわった最初の1日は正直かなり苦痛でした。
その後、”AV女優の検索システムって不動産の検索システムに似てるな”って思って「CGI/Perl 不動産検索 無料」で検索したら、http://www.yumemaboroshi.net/ってサイトが引っかかって、ここのおかげでかなり進みました。
先人が作った大量のプログラムがダウンロード出来るサイトなんですね。
【PHPとの出会い】
いくつもダウンロードしては、サンプルと中身を見てを繰り返してたら、Perl/CGI以外にPHPがたくさんありました。
どう違うのかと思い検索したら、PHPはすごい叩かれてて、Perlがえらいみたいに書いてあったのですが、叩かれてる理由がいまいち理解できませんでした。
結果PHPを使う事になったのですが、その大きな理由は、DreamweaverでPHPが開ける。なおかつHTMLファイルをそのまま使うテンプレート機能のプラグインがあったという事でした。
PHPでテンプレートを使うには、Smartyというプラグインを使えば良いということが分って、「Smarty 入門」で調べて、いくつかのタグを覚えました。
実際にSmartyで使ったタグは、{$変数}と{if}{/if}と{foreach}{/foreach}の3つだけだと思います。
色々高機能らしいのですが、まあ目的は達成できたのでいいか。と。
PHPの検索プログラムは、HTMLファイルでボタンを押すと、テキストファイルに書いてある内容を、表示してくれる簡単なものを作って、そこに肉付けしました。
(最終的にテキストファイルがSQLサーバーになりましたが。)
■PHPはDreamweaverと相性がいい
■Smartyでやると見た目が壊れない
【Rubyとの出会い】
簡単にPHPで動くプログラムが出来たので、実際に女優のデータを登録しようと思い、DMMに行きました。
DMMのサイトを見ていると、いったい何人いるんだってくらいAV女優が登録されています。
数人集めてみて「こりゃぁ。無理だな。」と途方にくれて1日を過ごしました(笑)
次の日、「ホームページ 自動 巡回 プログラム」とかで検索して、ボットとクローラーという存在を知りました。
自動巡回で拾ってくるのは、どちらかというとクローラーと呼ばれるそうで、「クローラー 作り方」で調べたホームページに、Perl+LWPモジュールで似たことができるということで、とりあえずペタペタとソースを貼ってうごかしてみたら、まあなんと簡単に取れました。
しかし、取ってきた後に気がついたのが、HTMLファイルをそのまま取ってきても結局手動でコピペの必要があり、あんまり意味がない。と。
で、もう少し調べると、「WWW::Mechanize」を使うといいよって書いてあって、Mechanizeで調べたサイトをみるとrubyを使ったサイトが出てきました。
rubyのサンプルがすっごい短くてわかりやすかったので、Perlは苦痛だったのでRubyにしようと、このときRubyを始めました。
■Rubyきれい
■Mechanize簡単
【デザインは・・・】
はてなブックマークのコメントで、DoCoMoのサイトが元ネタと書いてありましたが、ハズレです。
デザイナーの友人が居て世間話でどうやって作るの?って聞いたら、「まあ、パk、じゃない。参考にするよ。他社のを。」っていうもんでどうやって見つけるか聞いたら、あるんですね、綺麗なデザイン集めたサイトが。http://www.ikesai.com/ここでたくさん見ました。
それから、スライダーのインターフェースは、「selectToUISlider」jQueryのプラグインそのまま使ってます。
■世の中のデザイン全てぱk(略
■selectToUISliderかっこいい
という感じで、ほんとにちょっとずつ進みました。
楽しかったですね。Perl以外は。なんであんなに読みづらいんでしょう。
と、またもや長くなりすぎたのでこの辺で。
DMMのクリックが10万クリックほどあり、その結果、購入された金額が、なんと!
報酬額が245円。
----------------------
今回のサーバーダウンは結構深刻でなかなか復旧が出来ていません。。。
申し訳ないです。
----------------------
http://twitter.com/#!/kanzen21_com
----------------------
もう、いいおっさんの年齢なんですが、先日、とあるWEBサービスを公開しました。
5年ほど前からぼーっと考えていたんですが、如何せん、事務職の自分には”創る技術”が無かった。
優れた若い技術者(id:amachangとかうらやましい)や、チャレンジ精神あふれる経営者(id:hiroyukiegamiとか)が出てくる中うつうつとしている自分に嫌気がさし、4か月前の7月頃からHTMLやプログラムの勉強を始めた。
本屋で立ち読みしたら、まずはHTMLを勉強する必要があると、書いてあった。同時にCSSを学んだ。
プログラムを作りたかったので、次にJavascriptをやった。
jQueryがすごい。「プログラムって誰でもできるんだ。」この時そう思った。
検索システムを作りたかったので、本屋に行ったらCGI/Perlの本がいっぱいあったので、Perlを勉強した。
しかし、HTMLテンプレートが使いたかったのでPHP+Smartyを勉強した。
作りたかったWEBサービスは大手サイトのデータの検索サイトだったので、自動でデータを集める必要があった。
PerlのLWPを勉強したが、データを集めた後に加工する必要があった。簡単そうだったRubyとMechanizeを勉強した。
Rubyはものすごくきれいにプログラムがかけることを知った。話し言葉に近い気がする。
プログラムを作っている時、最初は自分のパソコンの中でやっていて気付かなかったが、実際に公開するときはレンタルサーバーを使うというのを知って調べると、Linuxのサーバーが多いということを知った。
だから、今度は自宅のあいているパソコンにLinuxを入れた。
Linuxを入れたはいいものの、全く使い方が分からず四苦八苦してRubyのインストールをした。
世界中でメインで動いているWEBサーバーがApacheということも3か月前に知った。
Apacheの設定がテキストファイルなのも驚いた。cd,ls,vi,mv,cp,chmod等、基本的なUNIXコマンドを覚えた。
例の図書館の事件があったので、クローラーを動かすのをためらったが定期的にちょっとずつなら怒られないんじゃないかと、Crontabを勉強した。
自宅のサーバーが壊れてしまい、構築が大変だったので今度はVPSサーバーを借りた。
同じように構築はしたがかなり苦労した。このとき、始めてmakeというコマンドを使った。コンパイルというらしい。
クローラーが自動的にデータを集めていたが、動かし始めて2カ月目でデータファイルが1GBを超えていることに気がついた。
このとき、テキストファイルでデータを扱おうと思っていたが大きすぎて動かない。
最終的にデータ量は5GBを超えた。
11月も後半、本稼働用のサーバーを探していたら、丁度カゴヤがVPSサーバーのベータ版を募集していた。
すごく、快適です。まだベータ版ですが、本番稼動でも、50GBで900円という激安プランです。
http://www.kagoya.jp/cloud/vps/
ベータ版では、3つまでOSのインストールができます。もちろんそれぞれにIPアドレスが振られます。
このVPSにサーバー管理システムをインストールし、もろもろの環境も作って、11月末についに、公開。
AV女優をスリーサイズから検索できるシステム、「完全に一致」です。
類似検索機能付きで、2次元と3次元をつなげる夢のシステムです。はい。
真剣に作ったんだ。仕事をしながらよく頑張ったと自分をほめてあげたい。
----------------------------------------------
インターフェース:jQuery+selectToUISlider
-----------------------------------------------
サーバー上にある静的なHTMLは1ページもなく、mod_rewriteですべてPHPが処理しています。
一番大変だった事は、、、
このサイトのデータはDMM社のデータを使わせてもらったのですが、AV女優の顔写真をそのまま使うのは、肖像権的にNGらしく、AV女優の作品の中からその女優の顔が一番大きく写っているパッケージを使うことにしました。
しかし、女優データは約5万件。作品データは12万件。とても手作業でやるわけにもいきませんでした。
結局どうしたかというと、Face.com(http://face.com/)という、画像の顔認識ができるAPIを無料で提供しているサービスを利用しました。
同様のことができる、OpenCVというソフトがあるのですが、最初から付いているパターンデータでは人の正面の写真しか顔として認識しませんでした。
それに比べて、Face.comの認識精度は驚くほど高く、横だろうが斜めだろうがかなりの精度で顔を認識してくれました。
データをJSON形式で返してくれる(JSONもこのとき初めて知った)為、取得したデータを後で加工しやすかったです。
1.このAPIを使い12万件の作品データをすべてスキャンするプログラムを書く※1
2.顔の縦の長さと横の長さを取得
3.縦×横で顔の面積を計算
6.その女優の作品の中で顔面積が一番大きなパッケージ写真をその女優の顔写真として代用しました。※2
※1 APIの制限が1時間1000リクエスト迄だったので、これまたCronで・・・
※2 実際には女優テーブルと作品テーブルを繋ぐ中間テーブルのフラグをONにした。若干の間違いはあるものの、かなり正確に出ました。
長々と書きましたが、ズブの素人から約4ヵ月でここまで出来ました。
勉強する前、SEをやっている友人に話したら、「3年はかかるんじゃないか?」と言われましたが、できたものを見せたら褒めてくれました。
WEBサービスを作りたいと思っていて、技術がないからとあきらめている人は、とりあえずやってみてください。意外に簡単にできますよ。
あと、クローラーが動いていると、全能感を味わえるので楽しいです。
-----------------------------------------
19:30追記
サーバーソフトからアラートが上がって、見てみてたらなんかすごいアクセス貰ってまして。
>カゴヤの中の人乙wwww VPSといったらさくらかServersManくらいしか選択肢が無いのは現状当然の認識であるはずなのに!
カゴヤの人間じゃないですよー。広告してるつもりもないんですが、ベータ版だからかもしれませんけど、すごい快適ですよ。今は。
何よりタダなので。
本当に月額900円のまま本公開になったら、環境構築もめんどくさいのでそのまま契約しちゃうかもです。
>カゴヤはOpenVZだからなあ。俺としてはより自由度の高いさくらのVPSをお薦めしたい。
そうなんですか。2週間のお試し期間はつかったのですが、正直どっちがいいとかわかりません。
どんな風に自由度が高いんですかね?あと、アダルトOKなんですっけ?
>組み立てるプログラミングは本当に簡単だよ。 みんなで入り口を隠しているだけだよ。 #組み立てるだけじゃなくて、アルゴリズムを練ることが真のプログラミングかもしれない
サンプルプログラムの組み合わせで作ったようなサービスですので、プログラムのソースとかぐっちゃぐちゃです。
もともと、作ろうと思ったきっかけなんですけど、
椎名舞さんがですね、すでに引退しちゃってるんですよ。ずいぶん前に。
それで、検索エンジンで検索したんです。でも、なかなか出ないんですね。
欲望のままにやってたら、次から次に壁にぶち当たって、そしたらいつの間にかできました。
結果、このシステム使って椎名舞さんのプロポーションに似たAV女優を探すと、
雛乃つばめさんとか、果梨さんとか、佐伯さきさんとか既にDVD持っている女優さんばっかりヒットしちゃうんですね。確かに似てるんです。スタイル。
とくに最近の細い子は。
あ。デザインは、某企業をパk、じゃないリスペクトさせてもらいました。
-------------------------------------
23:55追記
寝てたらサーバーからアラートメールが携帯に飛んできておこされました!
こんな瞬発的なアクセスを考えていなかったので、とりあえず再起動しました。
-------------------------------------
12/4 01:45追記
何度再起動してもサーバーが反応しなくなるので、うぎゃーってなってたのですが、
親切な方が「MySQLサーバーが原因じゃね?デフォルトだろ?query_cache_sizeを設定したらいいよ。」とわざわざお問い合わせからアドバイスくれました。
設定してみたら驚くほどつながりやすくなりました!
同じSQLクエリーを保持してくれるらしく、実際にデータ検索を行わないので高速になるそうです。こんなの知らなかった。ありがとうございました!
プログラムはサンプルがあるからどうにかなるんですが、サーバー周りの事が全然わかりません。。。。ぐうぅぅ。。。。
おやすみなさい。
-------------------------------------
ブックマークコメントもらっていた事を別の日記で説明しました。
http://anond.hatelabo.jp/20101206224349
-------------------------------------
5年以上ぐらい前にPerlのレガシーコードで書かれたcgiって駄目なプログラムのお手本だな。
1ファイル何千行もあるcgiで、一生懸命条件分岐や関数呼び出ししながらprintしてHTML作っていくやつ。
後から他人がレイアウト変更とか不可能に近い。
同じような処理(例えば掲示板だと新規書き込み、書き込み確認、書き込み修正など)があちこちに分散してて、全部探し出さないと変更できないとか。
俺が今作ってるWebアプリではSmartyなどのテンプレ使ってロジックとデザインの分離が当たり前なのに(ちなみにSmartyは分離がイマイチ、最近は他のを使ってる)、この時代にはそんな考え毛頭なかったんだね。
拡張子もcgiだったりplだったり。*.cgiでgrepしても出てこない処理のせいで半日つぶした。
今月末で数人辞める人間がいるので、新たな人員を確保した。その新人がどんなスキルを持っているか知らないがとにかく入れた。入れてみて判断すればいいんだ。会社の状態がどうなろうと知ったことではない。
新たな人員はやはり女に限るな、俺の言うことに反論なんかさせない!俺はいつだって正しいんだ。男だとたまに論破されたりするからな、やはり女だ。
クライアントの要件はざっとでしか聞いて帰らないぞ!聞き漏らしても後で聞けばいいんだ。あ、聞く役目はお前等頼むな。
無事、納品できたな。ん、お礼の電話か?俺がするから!お前等は別の業務に集中してろ!
あのな、見た目だけ見えりゃ問題ないんだよ!スタイルシート!?そんなのフォント変えたり、色変えたりするだけだろ!?世の中未だにテーブルレイアウトだよ!
おい、smartyってなんだ?
ブログツールも色々あるな、ワードエクスプレスってのがあるらしいな。
おい、お前等納期前だからな!しっかり気合入れろよ!じゃ、俺は帰るから。
休憩時間だからってペラペラ喋るなよ!俺は、女子社員と食事行ってくるから。
おい、こんな簡単なスクリプトも組めないのか?え、俺か・・うんと、だからその変数と関数をいじればいいんだろ?どうなんだ!?えぇ!?
あのな、ブラウザの確認なんてIE6で十分なんだよ!?Macだぁ?誰もいねぇーよ!
文書型宣言?そりゃ・・なんだ!?どこに記述するもんなんだ?
おい、Flashでメニュー作ったぞ!何、SEO的に不利?カッコいいからいいだろうが!!
まずは、スケジュールが大事なんだよ!お前等ちゃんとスケジュール立てろよ!?俺のスケジュール?俺はいいんだよ。
お前等ちゃんとチェックしろよ!客に迷惑かけるなよ!!あぁ、俺はチェックする時間ないからな・・色々とやる事あんだよ!
SEOなんてキーワード埋め込みゃいいんだろ!?それで順位があがるだろ?
自前のブログをもっておらず、したらばに長文を書き込むのは不便なので、こちらをお借りします。
2月1日ころ、バリュー・ドメイン カスタマーサポート様よりサイトが高負荷であるとのご指摘がありました。
ご指摘のスクリプトには、利用者が表示する項目を選べる機能がついており、その機能を利用する→選択項目に一致するキャッシュが無いのでDBアクセスを行います。この機能の利用者が増えたことより、DBアクセスが多く発生し、その結果高負荷に繋がったと考えられます。
対処としてこの機能を凍結し、またサイト全体のDBアクセスの見直し等を行いました。
関係各位にご迷惑をおかけしましたことを、お詫び申し上げます。
現在はサポート様よりメッセージがあり、対処の確認待ちとのことです(通常:48時間??1ヶ月以内とのことです)。
http://pc11.2ch.net/test/read.cgi/hosting/1201260968/339-
339以降、私であるかのように振舞い、酷いレスをしている者がおりますが、私ではありません。私は1度もこのスレッドに書き込みをしておりません。
なりすまし者が事実と違うデータをあげておりますので、その点を訂正します。
339 名前:名無しさん@お腹いっぱい。[sage] 投稿日:2008/02/03(日) 01:31:35 0
s4で規制中
よくみとけよ
転送量は全然範囲内
負荷は0PT
モジュール版PHPだけでなく、CGIPHPやPerlも使用しており、0ptではありません。 → http://wwwwwwww.ws/image/huka0.jpg
344 名前:339[sage] 投稿日:2008/02/03(日) 02:23:03 0
DBを使用しております。
369 名前:339[sage] 投稿日:2008/02/03(日) 21:08:34 0
まぁいいけど、負荷は0PTです。
アクセスは日/20万??ですが。
ほんとここって馬鹿が多いね
負荷は0ptではありません(上記参照)。アクセスは10万/日前後です。 → http://wwwwwwww.ws/image/day.jpg
384 名前:339 ◆2OeQZyA6dg [sage] 投稿日:2008/02/03(日) 22:37:44 0
1回も書いたことないってのは嘘と認めます。
なぜあのように書いたかと言いますと、偽者が湧いたからです。
339と344の書き込みは自分です。
キャッシュは60分で取得しています。
ご迷惑をおかけしました。
鳥だけつけて以後ROMに戻ります。
coreサーバーは最悪です。
392 名前:名無しさん@お腹いっぱい。[] 投稿日:2008/02/03(日) 23:04:03 0
>キャッシュは60分で取得しています。
これ本当だし本物だろうなw
キャッシュ保持間隔は60分ではありません。おそらくxrea等の仕様でcronが1時間に1回程度のため、60分という数字が出たのだと思いますが、更新にcronは使っておりませんので、60分ではありません。
395 名前:339 ◆2Ow5YRidyI [sage] 投稿日:2008/02/03(日) 23:26:47 0
>>384を認めるなら、したらばのレスが滑稽に見えるな
名前欄の消し忘れでしょうか?
またブラウザでアクセスすると、Smarty→CacheLite→DBの順にアクセスする仕様です。
以上と、執拗ななりすましと自演による叩き、またなりすまし者が自分のサイトの仕様をのべているという仮定で、xreaかcoreserverで運営している類似アンテナサイトさんなのではないかなぁと、個人的には考えています(xrea等でのアンテナサイトの仕様もわかっておられるようですし)。
またDBを使っておらず(DBじゃなくてもデータとしてRSS記載のURLを保持しない)、現状取得できるRSSに記載されてる内容だけを表示している所、負荷0ptからモジュールPHPのみを使用している所となれば、もう少し絞り込めそうですね。
(上記はあくまでも個人的な推察であり、事実とは異なる可能性があります)
前の60行テンプレートエンジンを改良して、レイアウトテンプレート機能を追加してみた(それでも全部で90行)。
レイアウトテンプレート機能とは、例えば個別のテンプレートが<table>...</table>を出力して、それをレイアウトテンプレートが<html><body>...</body></html>で囲って出力するとかそんなの。
詳しくは終わりの方のサンプルをみてくれ。
これは Ruby on Rails(とその仲間たち)にある便利機能のひとつ。
ついでにいうとSmartyにはない機能のひとつ。
今まで知らなかった人はぜひ試してくれ。チョー便利だから。
前回はたくさんのブックマークありがと。
コメントで「男前テンプレート」と名前がついてたので、勝手に採用。
あと、これ以上の機能追加はしないので、各自勝手に改造して使ってくれ(そのためにコメントをつけてるから)。何でも人任せにするな。
コード:
<?php /* * OtokomaeTemplate.php -- レイアウトテンプレートに対応した90行のテンプレートエンジン * * - レイアウトテンプレート中で echo $_content; とすると中身が表示される。 * - テンプレート中で設定した変数をレイアウトテンプレートで使うことが可能。 * - レイアウトテンプレート名をテンプレート側で指定することも可能。 * - 使い方: * require_once('OtokomaeTemplate.php'); * $TEMPLATE_DIR = 'templates'; // 省略可、パーミッションに注意 * $LAYOUT_TEMPLATE = 'layout.php'; // 省略可 * $context = array('title'=>'Example', * 'list'=>array(10,'<A&B>',NULL)); * include_template('template.php', $context); * - 要 PHP 5.1 or later * - ライセンス: public domain (自由に改造してね) */ /* * 設定用のグローバル変数 */ $TEMPLATE_DIR = NULL; /* テンプレートを探すディレクトリ */ $LAYOUT_TEMPLATE = NULL; /* レイアウトテンプレートのファイル名 */ /* * テンプレートを読み込んで実行する。 * $_context は変数名をキー、値を要素とする連想配列。 * $_layout はレイアウトテンプレートのファイル名。 * - NULL または省略した場合は $LAYOUT_TEMPLATE を使う。 * - FALSE ならレイアウトテンプレートを使わない。 * - $_context['_layout'] = '...'; とすればテンプレート側でも指定可能。 */ function include_template($_filename, $_context, $_layout=NULL) { global $LAYOUT_TEMPLATE; $_content = render_template($_filename, $_context); if (@$_context['_layout'] !== NULL) // テンプレート側で指定された場合は $_layout = $_context['_layout']; // それを使う。 elseif ($_layout === NULL) // 引数で指定されなかった場合は $_layout = $LAYOUT_TEMPLATE; // デフォルトのファイル名を使う。 if ($_layout) { $_context['_content'] = $_content; // レイアウトテンプレート中で使う変数 $_content = render_template($_layout, $_context); } echo $_content; // or return $_content; } /* * テンプレートを読み込んで実行し、その結果を文字列で返す。 * include_template() の実体。 */ function render_template($_filename, &$_context) { $_cachename = convert_template($_filename); extract($_context); // 連想配列をローカル変数に展開 ob_start(); include($_cachename); // テンプレートを読み込んで実行 return ob_get_clean(); } /* * テンプレートファイルを読み込み、convert_string() で置換してから * キャッシュファイルに書き込む。読み込み時のロックは省略。 * (file_get_contents() もファイルロックできるようにしてほしいなあ。) */ function convert_template($filename) { global $TEMPLATE_DIR; if (! file_exists($filename) && $TEMPLATE_DIR) $filename = "$TEMPLATE_DIR/$filename"; $cachename = $filename . '.cache'; if (! file_exists($cachename) || filemtime($cachename) < filemtime($filename)) { $s = file_get_contents($filename); $s = convert_string($s); file_put_contents($cachename, $s, LOCK_EX); // LOCK_EX サポートは 5.1.0 から } return $cachename; } /* * テンプレートの中身を置換する。 * - '#{...}' を 'echo ...;' に置換 * - '%{...}' を 'echo htmlspecialchars(...);' に置換 * - ついでにXML宣言も置換 */ function convert_string($s) { $s = preg_replace('/^<\?xml/', '<<?php ?>?xml', $s); $s = preg_replace('/#\{(.*?)\}/', '<?php echo $1; ?>', $s); $s = preg_replace('/%\{(.*?)\}/', '<?php echo htmlspecialchars($1); ?>', $s); return $s; } ?>
<?php require_once('OtokomaeTemplate.php'); $TEMPLATE_DIR = 'templates'; $LAYOUT_TEMPLATE = 'layout.php'; $context = array('list'=>array(10,'<A&B>',NULL)); include_template('template.php', $context); ?>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <body> <h1>%{$title}</h1> <div id="maincontent"> <!-- テンプレートの内容 --> <?php echo $_content; ?> <!-- /テンプレートの内容 --> </div> </body> </html>
<?php // レイアウトテンプレート名をテンプレート中で指定する場合 ?> <?php //$_context['_layout'] = 'mylayout.php'; ?> <?php // レイアウトで使用する変数をテンプレート中で指定する場合 ?> <?php $_context['title'] = 'レイアウトのサンプル'; ?> <table> <?php foreach ($list as $i=>$item): ?> <tr bgcolor="#{$i % 2 ? '#FFCCCC' : '#CCCCFF'}"> <td>#{$i}</td> <td>%{$item}</td> </tr> <?php endforeach ?> </table>
出力例:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <body> <h1>レイアウトのサンプル</h1> <div id="maincontent"> <!-- テンプレートの内容 --> <table> <tr bgcolor="#CCCCFF"> <td>0</td> <td>10</td> </tr> <tr bgcolor="#FFCCCC"> <td>1</td> <td><A&B></td> </tr> <tr bgcolor="#CCCCFF"> <td>2</td> <td></td> </tr> </table> <!-- /テンプレートの内容 --> </div> </body> </html>
いくつか補足: