はてなキーワード: cakePHPとは
身バレするかな…😟
ちょっと前までLaravelで自分用の蔵書管理するアプリ書いてた
ブラウザ側のJavaScriptでバーコード読んで、サーバー側からAmazonごにょごにょして、中古の価格とか取得できるようにして、
片っ端から本を読み込んでみて、十数年前に1万円した技術書が今は数百円だよwみたいなの眺めてた
他には、全国の医療機関、歯科、薬局の情報が厚労省から手に入るので、それをDBに入れて、
Leafletで地図を表示して、ここの病院はちょっと怪しいことやってそうだなぁ、とか眺められるようにした
あと、複数の自動車のタコメーターとかGPSのトラッキングデータが入手できたので、それで各自動車の挙動を観察できるようにしたりもした
別にすべてLaravelである必要ないんだけど、あまり考えないで自分が書けるのがLaravelだから使ってる
他のPHPフレームワークはもう死んでると思うし…、CodeIgniterとかCakePHPとかFuelPHP?だったか、色々あったね…、色々仕事でもあったね…😥
ITにおけるフリーランスというのは、基本的には企業から仕事を請ける、受託開発の仕事だ。稀に、発注主が個人事業主ということはあるかもしれないが。だから、仕事を獲得するためには、企業と契約に至らなければならない。言い換えれば、企業から信頼を獲得しなければならない、それ以前に「知ってもらわないといけない」のだ。
案件紹介サイトみたいなのはあるけれども、そういうところを経由すると費用がかかったり、契約内容に制限がかかったりすることがあるので、できるなら案件紹介サイトのお世話にはならずに仕事を獲得したいものだ。
多くの場合は、フリーランスになる前の会社員勤めなどを通して、同じ職種の人間と仲良くなるだろう。同じ職種の人を経由して入ってくる仕事というのは、以下のケースが考えられる。
仕事してお金が入って生活できればそれで良いんだって話もあるけど、同業者から回ってくるお仕事って、多少の例外はあるけれども基本的に「おこぼれ」なんだ。
一方で、「企業の偉い人たち」という人脈があると、以下のような話が舞い込んでくる。
こういうお仕事を良い案件にするのもクソ案件にするのも自分の実力次第なのではあるが、私にとっては絶対にこっちの方が楽しい仕事だ。
私は、いわゆる旧帝大に入ったものの家庭の事情(主に経済的事情)で中退してしまい、派遣会社(今は亡き「特定派遣」の会社)に就職した。それでも3年間は大学にいたので、サークルなどを通して多くの人と知り合うことができた。体育会系ではないものの活動量の多いところだったので、それぞれの人となりは十分にわかるところだ。
30代前半のときに独立してフリーランスになり、仕事に困る時期も時々あったが、今は40手前。同世代の仲間たちの多くは大企業で偉くなっていたり、士業として開業していたりする。人によっては自ら起業している者もいる。彼らから仕事の相談が沢山あるので、最近では仕事に困ることは無くなった。仕事をくれる皆さんに本当に感謝だ。
以下の点が重要だと思っている。
これらの人脈があったら、フリーランスでなくて会社員をやっていたとしても、いろいろ有利に働くだろうし、フリーランスを目指していなかったとしても人脈は大事にするのぢゃ。
を見つけてしまった。
https://ikasamak503.hatenablog.com/entry/2019-06-retire-from-mrso-inc
内状はお察しだった。
よく「プログラマは勉強し続けなければいけない」といいますが、嘘です。
それは、レベルの低いプログラマの話です。そういう人たちが想定しているのは、たとえば流行りのフレームワークが出てきたらそれを勉強するとか、仕事で特定のプラットフォームの知識が必要になったのでそれを勉強するとかです。
こういうことを一所懸命勉強している内は、プログラマとしての実質的な成長は見込めません。それらを勉強しても、特定のフレームワークなどの使い方が分かる人になるだけです。ほとんどの場合、5年も経てばその知識は役に立たなくなります。
実は、ソフトウェアの技術などは、コンピュータの黎明期から本質的な進歩はほとんどありません。だから、本質部分が分かっている人は、流行り廃りのある技術の習得に余計な労力を割く必要がありません。
プログラマが勉強すべきはこの本質部分、つまりコンピュータサイエンスの基礎です。フレームワークの使い方は知らなくてもリファレンスを見れば良いのに対し、コンピュータサイエンスの基礎はググっても決して身に付きません。
プログラマが身につけるべきコンピュータサイエンスの基礎は、多くの大学の計算機科学・情報工学の2〜3年生で学ぶような内容、
などです。逆に、こういう素養がないのにプログラミングスクールでRailsとかCakePHPみたいなのを触って、プログラミングできる気になっている人に5年後10年後の市場価値はありません。
実際、フリーランスなんて金がかかるだけで技術力もなければ人望もない、それに謙虚じゃない、つまり性格もアレなわけで。
とあるフリーランス紹介会社(渋谷にいくつかあるよね)から来たフリーランスの使えなさが異常。
とくに最近思うのは、経験不足なのにフリーランスやってるやつ多すぎ。
AWS経験者で取ったのに、ECS、EKSやったことないとか、CodeBuild系とか、ACM、CloudFront、S3などの連携も知らないとか、本当になんちゃってが多い。本当にこういうやつゴミ。
デベロッパー系でいったら、フレームワーク知らない言語経験者もゴミだからな。
例えば、Javaで言ってもStruts1とか、RubyでSinatra、PHPでCakePHPしかやったことないとか産業廃棄物もいいとこ。
面接の時だけすっごいアピって有能っぽくさせるの本当に辞めて。
本当にフリーランスつかえねー
買う目的以外にも、いま何が流行ってるのかを本の出版の流れから推測してるわけですよ
いやgoogleの検索とかQiitaとかgitHubとかほかにもいろんなところから流行りを推測するなんてあるけど
やっぱり本で勉強するのが一番だと思ってるおじさんからすると、本が出版される=流行ってるってことだと思ってるからねいまだにw
それでみると今は明らかにpythonがキテるわけですよ
こりゃ本当にデータサイエンスが盛り上がってるんだろうなって感じ
そんで相変わらずのSwiftね。これはもうiPhone開発の必須だもんね。とくに日本じゃiPhoneだ
同じくらいunityがもりあがってるなってのは感じる
地味に本が出版されつづけてるJavascriptやPHPも存在感あるなって思いながら見てたんだけど
本が出版されないんだよね
4のときはすさまじい速さでキャッチアップして本が出版されたのにさ
もうみんな分かり切ってるから出版されないの?ネットで十分じゃい!みたいな
Rails界隈の人だれか知りませんかね
それとlaravelとか出版されないね。海外では人気です!っていうけど
ネットでやたらうるさかったフロントエンド界隈は全く本が出版されないね
ReactとかAngularとか
でもそれでいうならRails4のときの盛り上がりは何だったんだろうってくらいみんな一生懸命だったよね
だから5の無風感が怖いんだよね
江添○
キャラクターの名前がプログラミング言語だなけのコマ割りされた絵にどれほどの価値があるというのか。
このままエバンジェリストという肩書きの価値が毀損され続けていって、最終的に「エバンジェリストという呼び方はダサいから皆さんやめましょう」みたいなところまで行ったらちょ○どエバンジェリストを評価できる
みす○
最悪なことにエバンジェリストという単語を某氏を表すために使うことが可能になってしまった
みす○
そういえばエバンジェリストにブロックされてるし、ブロックされてる人たくさんいるっぽいけど大丈夫なのか?
あづ○
nakfi○ a.k.a. nori○
nakfiv a.k.a. noriPさんがはっち○@イカ勢をリツイートしました
M○のエバンジェリストについては全体的にそれほどステータスではないという印象。むしろイメージとしてはマイナス(火に油を注ぐ
そけ○
yado○arielectric
新卒でたった2年でエバンジェリストか、顔が可愛い女性は人生で得するんだね。
顔が落第のブスがC#腐女子と名乗っていたら、果たしてM○は入社させたり、エバンジェリストを名乗らせたのかね?
やぷら○
エバンジェリストっていうか日本人にはよく分からないから"プリンセス"とかどうですか?
matt○
人権尊重され太○
エバンジェリストを名乗るには製品の利点と欠点を正しく説明できる必要があると思うんですけど、例の人があるポイントが利点である欠点である理由をちゃんと説明できる人材かと言われると絶対違うよね
おっさんエバンジェリストは多すぎて、エバンジェリストの価値がない模様
みす○
これはぼくの妄想なんですけど、インターネットで姫活動して影響力もっただけでエバンジェリストになれるんですね…
にん○
件の人がエバンジェリストになっても、リーチ出来るのは若者じゃなくて囲いのおっさんなのではって気が
r.tamur○
ここ最近のM○の素晴らしさを説いて身にはエバンジェリストの件は残念、ただただ残念です。
ちゅー○
ちゅー○さんHaskellの野良エバンジェリストって言われた事があるけど喜んで良いのか良くわからなかった。
エバンジェリストってなんだっけ感は有る
My C○
M○KKに雇われた姫「(M○の宣伝)なんですよ~」Micr○softエバンジェリストより給与の低いエンジニア「なるほど~」
め○
うーん、あのM○のエバンジェリストの件、こけそうな気がするけどなぁ。
これ普通にMicr○softのエバンジェリスト各位の信用にかかわるのでは……
道仂○@Sシャープマーカー使い
ぶっちゃけ M○ のエバンジェリストってほとんど知らない。布教する以前に布教するマンの知名度がないの、全然仕事にならんだろうし、もっとコンテンツ力の高い芸人さんを増やして欲しい。
牛ま○
A○
絵が描けるTwitter芸人で、ある程度プログラミングをしていればエバンジェリストがワンチャンということか
ウカヤ○
こりゃ来年あたりにはyoutuberからM○エバンジェリストが出てきてもおかしくないな
ウカヤ○
M○のエバンジェリストってTwitterで使ってます〜アピールしとけばなれる程度のやつだったのか
少なくともこのルックスと能力でエバンジェリストでしょ、マスコットみたいなもんだし月300時間激詰めとかされることはないでしょ。給料はいいだろうし。
にゃはは○
でもエバンジェリストが宣伝して、じゃぁこういうのはできるんですかって言われた時に、いやわかんないですって返ってくると、それ大丈夫なん、、、って採用見送るとかあるのでは
Kohei YOSHID○
テック企業のエバンジェリストが技術に明るくなくてよいのなら堀北真希を採用してくれ
ぱんた○
わかるか、真摯に技術と向き合わないエンジニアでも女で顔が良ければチンポ騎士団に囲まれてM○KKに入社できるのだ
ミァハちゃ○
こう、M○KKエバンジェリストの話題が出て炎上すれすれの呟きを行うプレイヤーの出現を、
ドロシーさんチ○チン無くないですか(笑
ぼくもM○KKに「あの人よりちんぽ舐めるの上手いですよ!!!!」ってアピールして雇ってもらうか
Taro ○atsuzawa(組長)
M○KKは世界に線を引いたのだ。姫のいる世界とそうでない世界を...
Taro ○atsuzawa(組長)
M○KKは身辺調査したって姫本人が書いてるんだけど、さすがに交友関係とかは特殊な所以外は見つけてもスルーするだろう。それこそ差別とかの対象になる。ただ、それ以上に近づかないようにしようって思わせるチカラが強いことに気づかない、むしろチンポナイトを取り込むという姿勢は評価できる。
文殊○
M○KKもソーシャルブックマークサービス(ちょ○どの彼氏はブックマーク出来ない)を始めよう
なんちゃらようへ○
ちょ○ど氏M○KK入社おめでとうございます!!となりのブスもきっと喜んでると思います!!!!
ちょ██女史がM○KKの姫に成り上がった日に北条かやの没落。対比は文学の基本だよね!
たっくま○
chmod氏M○KKにエヴェンジェリストで入社ですかそうですか。M○エヴェンジェリストの肩書がストップ安しませんかねこれ、要はアイドルの肩書だってことでしょ
♥○
♥
M○KK には姫を雇える余裕があるのか
どらい○
俺もM○KKの人事になって姫の枕営業受けてぇなぁ
弱い○
台湾にならってM○KKも姫を擁するようになった?
た○ゆら ~食行写真~
えっMSKKなんかやらかしたののと思って事情を見たらなるほどこれはw
A○
M○KK本当に最悪。
M○KKのイメージみんな良かったんですか??????信じられないです
cocoonう○
みんなちょ○ど某がM○KKに入ったことを基本的に批判的に見ていて、意外とこの業界でもあのひと嫌われてたんだなあと思いました。ITギョーカイとやらの知能は幼稚園児並みではなかったのですね。
誠○
M○KK、エヴァンジェリストを中途採用するだけの会社というイメージができつつある。
ぷりんた○
M○KKの姫になったことで格が上がったと書きそうになったけど、M○KKの名が落ちた感があるのでそんなこともなくなった
文殊○
M○KK何やってんの
蟹の赤ちゃ○
ちょ○どさんM○KK入社おめでとうございます.ところで痴話喧嘩の末に死に追いやり,その後しれっとFacebookのフレンドから削除していた元カレの南山まさかず君の遺品の『型システム入門』はちゃんと読みましたか? エバンジェリストのみならずエンジニアとしての成功も祈念しております.
unagi○
M○ のやるべきことについて M○KK は梯子を外されてるからああなってるんだと思う。
マ○
起きたらM○KKが最悪の会社になっていた
めびなんと○
M○KKの技術に対する姿勢が可視化されて結果的に良かったのでは
almost 100 % correc○
M○KK が姫チーム作って姫を必要とするイベントにガンガン M○ の宣伝しに行くの本当にディストピアって感じがする
ssig3○
リクルートみたいな会社がちょ○ど使ってゴミを集めるのはまあ理解できるけど、マイク○ソフトがそれやるのはマイク○ソフトの不利益でしかないし本当に M○KK はゴミだめだと分かる
502b○
社会の歯○
M○KKには失望した
きみとぼ○@研究室決まった
@nanTosaka2 まぁ、M○KKとしてはMVPとかにして広報に使いたい所だけど、MVPの審査はM○本社がやってるので、なかなか出来ない、それならもう雇えばいいじゃんって感じですかね
almost 100 % correc○
すごい話だなーとは思うけど、M○KKには関わらないようにしよう
豊○
ちょ○どみたいな姫気質のある人間は外ヅラばかり気にしているから本質的な能力ツリーを疎かにしたまま業種をただのファッションとして利用することばかり考えるし絵を描いても顔以外はドヘタクソのまま成長しないし彼氏を自殺に追い込んでも以後の立ち回りが上手いからのうのうと生きることが出来る。
みす○
まだ南山まさかず氏の元カノのツイート反応あるので一応明言しておくと、世の中おかしいよなっていう風に思うだけであって個人を批判する意味やそれの是非については一切の評価はしてないです。しているように見えたとしたらそれはぼくの妄想の上での評価です
やぷら○
でもまあ南山まさかず氏のことについて触れただけでブロックされたのは事実だよね
伊東瑞○
そういえばちょ○ど姫様は南山まさかずを追い詰めた時の様な式神の使い方を覚えたようですね。式神を使い他人を追い込むことになんの抵抗も無いようで
それがし○
オタサーの姫的ポジションの人が出世した場合のオタクの反応を見ている。>ちょ○ど
しかしまあフォロワー数5000のアルファーとTwitter痴話喧嘩したら絶対に勝てないというのが新しい知見として得られた
私の持てる知識を絞り出してなんとか完成しました。
**************************************************************************************
完成したサイトがこちらです。
LapyNetニュース
**************************************************************************************
私は普段webとは関係ない仕事してます。なんとか休日を利用して、
メインのコードはこんな感じ
----------------------------------------------------------------------------------------------------------------------
App::uses('Sanitize', 'Utility'); class RssfeedsController extends AppController { public $helpers = array('Html','Form','Session','Number','Cache'); public $uses = array( 'Rssfeed', 'Tweet', 'Wadai', 'Rank', 'Oracle' ); ************************************************************************************** public function index() { $title_for_layout = "LapyNetニュース"; $content = "Hello World!!"; $this->set(compact('title_for_layout','content')); if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' = > array( 'and' = > array( 'Rssfeed.time' = > $today, )), 'order' = > 'tweets desc', 'limit' = > '50' ); $this- >set('posts',$this- >Rssfeed- >find('all',$params)); $paramz = array( 'order' = > 'Rssfeed.id desc', 'limit' = > '10' ); $this->set('posts2',$this->Rssfeed->find('all',$paramz)); $paramz = $this- >Rssfeed- >query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('posts2', $paramz); $parapara = $this- >Oracle- >query('SELECT id,title FROM oracles order by id desc limit 10'); $this- >set('postx', $parapara); $funking = $this- >Rank- >query('SELECT id,frank FROM ranks where creation=(select max(creation) from ranks)'); $this- >set('funking', $funking); } ************************************************************************************** public function mizuno() { $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $recent_posts = $this->Oracle->find('all',$parapara); return $recent_posts; } ************************************************************************************** public function wadai() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 4 )), 'order' => 'tweets desc', 'limit' => '100' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $this->set("title_for_layout","2CHニュース-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postyy',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postyx',$this->Oracle->find('all',$parapara)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function hot() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 3 )), 'order' => 'tweets desc', 'limit' => '20' ); $title_for_layout = "LapyNetニュース"; $this->set("title_for_layout","ニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '10' ); $this->set('postxx',$this->Oracle->find('all',$parapara)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postsxxx',$this->Rssfeed->find('all',$paramz)); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function newnew() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 2 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set("title_for_layout","エンタメニュース-LapyNetニュース"); $this->set('posts',$this->Rssfeed->find('all',$params)); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '10' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $paramz = $this->Oracle->query('SELECT id,title FROM rssfeeds order by id desc limit 10'); $this->set('postszz', $paramz); $parapara = $this->Oracle->query('SELECT id,title FROM oracles order by id desc limit 10'); $this->set('postzy', $parapara); $funking = $this->Rank->query('SELECT * FROM ranks where creation=(select max(creation) from ranks)'); $this->set('funking', $funking); } ************************************************************************************** public function top() { if(date("G")>0 and date("G") < 7){ $today = date("Y-m-d", strtotime('-1 day')); }else{ $today = date("Y-m-d"); } $params = array( 'conditions' => array( 'and' => array( 'Rssfeed.time' => $today, 'Rssfeed.kubetu' => 1 )), 'order' => 'tweets desc', 'limit' => '20' ); $this->set('posts',$this->Rssfeed->find('all',$params)); $param = array( 'conditions' => array('times > current_timestamp + interval -600 minute and Kubetu = 4'), 'order' => 'tweets desc', 'limit' => '30' ); $this->set('posts2',$this->Rssfeed->find('all',$param)); } ************************************************************************************** public function view($id = null ) { $this->Rssfeed->id = $id; //驥崎ヲ√↑荳譁・i縺励> $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $statuses = $TwimStatus->tweet(); $rairai = $this->Rssfeed->read(title,$id); $alcol = $this->Rssfeed->read(); $this->set('post', $alcol); $this->set('post2', $user); $this->set('post3', $statuses); $this->set("title_for_layout",$rairai[Rssfeed][title]."-LapyNetニュース"); $paramz = array( 'order' => 'Rssfeed.id desc', 'limit' => '20' ); $this->set('postszz',$this->Rssfeed->find('all',$paramz)); $parapara = array( 'order' => 'Oracle.id desc', 'limit' => '30' ); $this->set('postzy',$this->Oracle->find('all',$parapara)); } ************************************************************************************** public function add() { if($this->request->isPost()){ if($this->Tweet->save($this->data)) { $this->Session->setFlash('seikou'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); }else{ $this->Session->setFlash('sipai'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); } } } ************************************************************************************** public function delete($id = null) { $this->Rssfeed->id = $id; $this->set('set', $this->Rssfeed->read()); $this->redirect(array('controller'=>'tweets','action'=>'delete',$this->data['tweet']['rssfeed_id'])); } ************************************************************************************** public function oracle() { if($this->request->is('post')) { $user = AuthComponent::user(); $TwimStatus = ClassRegistry::init('Twim.TwimStatus'); $TwimStatus->getDataSource()->setToken(AuthComponent::user()); $contents1 = $this->request->data['Rssfeed']['contents']; $contents2 = $this->request->data; $statuses = $TwimStatus->tweet($contents1); if($this->Rssfeed->save($contents2)) { $this->Session->setFlash('成功です。'); $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->redirect($this->referer()); }else{ $this->redirect(array('controller'=>'rssfeeds','action'=>'view',$contents11)); $this->Session->setFlash('失敗です。'); } } } ************************************************************************************** public function makelist() { $rssfeeds = $this->paginate(); if ($this->request->is('requested')) { return $rssfeeds; } else { $this->set('rssfeeds', $rssfeeds); } } } ---------------------------------------------------------------------------------------------------------------------- rssフィードはこんな感じです。 ---------------------------------------------------------------------------------------------------------------------- #!/usr/bin/php <?php header('Content-type: text/html; charset=UTF-8'); require_once ('/var/www/html/s/magpierss/rss_fetch.inc'); define('MAGPIE_CACHE_AGE', 60*5); define('MAGPIE_CACHE_DIR', '/var/www/html/s/cache/'); define('MAGPIE_OUTPUT_ENCODING','UTF-8'); $urls = array( '*********************************'); $items = getRssList($urls); echo '<ul>'; foreach ($items as $item) { $href = mb_convert_encoding($item['link'], "UTF-8", "auto"); $title = mb_convert_encoding($item['title'], "UTF-8", "auto"); $description = mb_convert_encoding($item['description'], "UTF-8", "auto"); $megami = mb_convert_encoding($description, "UTF-8", "auto"); ************************************************************************************** $all = 'http://urls.api.twitter.com/1/urls/count.json?url='.$href; $Rits = file_get_contents($all); $Olfe = mb_convert_encoding($Rits, 'UTF-8', 'auto'); $data = json_decode($Olfe); $tweets = $data->count; ************************************************************************************** $checkman = db_check_urls($href); $checkman2 = db_check_pr($title); $nowtimes = date('Ymd'); if($checkman == 0 &amp;&amp; $checkman2 == 0){ #$hrefs = urlencode($href); db_put_urls($nowtimes,$href,$title,$description,$tweets); echo "<li><a href=$href>$title</a><br>$megami<p>$tweets</p><p>$checkman</p></li>"; }else{ } } echo '</ul>'; ************************************************************************************** function getRssList($urls) { $rssitems = array(); foreach ($urls as $url) { $obj = fetch_rss($url); $rssitems = array_merge($rssitems, $obj->items); } return $rssitems; } ************************************************************************************** function db_check_pr($japanese){ $moji = mb_substr($japanese,0,2); if($moji == 'PR'){ return 1; }else{ return 0; } } ************************************************************************************** function db_check_urls($href){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT count(*) AS count FROM rssfeeds WHERE urls = :language'; $prepare = $db->prepare($sql); $languages = array($href); foreach ($languages as $language) { $prepare->bindValue(':language', $language, PDO::PARAM_STR); $prepare->execute(); $result = $prepare->fetchColumn(); if ($result > 0) { return true; }else{ return false; } } } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } function h($var) { return htmlspecialchars($var, ENT_QUOTES, 'UTF-8'); } } ************************************************************************************** function db_put_urls($nowtimes,$href,$title,$description,$tweets){ require '/var/www/html/s/database_conf.php'; try { $db = new PDO($dsn, $dbUser, $dbPass); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sikibetu = 5; $moto = "アニゲー速報VIP"; $sql = 'insert into rssfeeds (id, time,urls,title,contents,tweets,times,kubetu,teikyo) values (?, ?, ?, ?, ?, ?, ?, ?, ?)'; $prepare = $db->prepare($sql); $prepare->bindValue(1, 0, PDO::PARAM_STR); $prepare->bindValue(2, $nowtimes, PDO::PARAM_STR); $prepare->bindValue(3, $href, PDO::PARAM_STR); $prepare->bindValue(4, $title, PDO::PARAM_STR); $prepare->bindValue(5, $description, PDO::PARAM_STR); $prepare->bindValue(6, $tweets, PDO::PARAM_STR); $prepare->bindValue(7, 'cast( now() as datetime)', PDO::PARAM_STR); $prepare->bindValue(8, $sikibetu, PDO::PARAM_STR); $prepare->bindValue(9, $moto, PDO::PARAM_STR); $prepare->execute(); } catch (PDOException $e) { echo 'エラーが発生しました。内容: ' . h($e->getMessage()); } } ?>
---------------------------------------------------------------------------------------------------------------------
**************************************************************************************
参考にした書籍
CakePHP2 実践入門 (WEB+DB PRESS plus)
CakePHP2 実践入門 (WEB+DB PRESS plus)
作者: 安藤祐介,岸田健一郎,新原雅司,市川快,渡辺一宏,鈴木則夫
発売日: 2012/09/29
購入: 5人 クリック: 165回
Webアプリ開発を加速する CakePHP2定番レシピ119
Webアプリ開発を加速する CakePHP2定番レシピ119
**************************************************************************************
一番難しいところはtwitterログインとwebサイト連結でした。
ツイート数でランキングしてます、ネットの話題を見つけられます。
ホームページビルダーを使用しています。
今のホームページビルダーは昔と違って高機能ですね。
テンプレートも何種類もあって今はすごいです。
に分かれています。
今更cakephpを使っている人は少ないかもしれませんが、
twitterアカウントあるといつでも参加できますので、
かつて好きだった人の写真や好きな芸能人の写真から顔が最も似ているAV女優を検索するサービス。
既に好きなAV女優から新たなAV女優を発掘するという利用もできます。
僕はAV女優を顔重視で選ぶのですが、いろんなエロ動画サイトを見ていると、有名ではないが、自分の好みな顔のAV女優を見付けることがよくあります。
既存のエロ動画サイトはテキストで検索することは可能ですが、もしかしたら、まだ自分の知らない自分好みなAV女優がたくさん存在するかもしれないと
もし顔で検索できれば自分のAVライフももっと楽しくなるだろうと一念発起して開発しました(開発期間は半年くらい)。
レンタルサーバー | GMOクラウド Public |
---|---|
WEB | Apache |
DB | MySQL |
プログラミング言語 | PHP |
フレームワーク | Cakephp |
UI | Bootstrap |
顔認識 | Face++ |
簡単に仕組みを説明すると、
①DMMのサイトをスクレイピングしてAV女優の基本情報(名前やスリーサイズなど)を登録
②DMMのAPIを利用して、それぞれの女優の作品を取得して、パッケージ写真中の顔面積を測り、最も面積が大きいパッケージ写真を登録
③ユーザーがアップロードした画像からFace++のAPIを利用することで顔検索して、最も似ているAV女優を8人表示
今はまだ、顔認識を他のサービスに頼っているので、いずれ内製化して全て自分で開発したいと考えています。