はてなキーワード: MySqlとは
GitHubの謎生物が気になり、せっかくなのでIT界隈の動物(?)を用いた名前やロゴの由来など調べてみた。
※追記あり:Gopherファンに襲われそうなので。ごめんねGopher君
Q.どうしてタコなのに8本足じゃないの?
A.なにも考えずに描いたからね!
もともとデザイナーはoctopussと呼んでいたが、いくら訂正してもGitHubの社員がoctocatと呼ぶため、octocatで落ち着いた。
octocatはあの生物種の名称であり、monalisaという名前は社員の娘が学校の課題で名付けたもの。
種類:ニシキヘビ
名前: -
イギリスのコメディ番組『空飛ぶモンティ・パイソン』より。
またPythonという英単語はニシキヘビを意味するため、マスコットとしてヘビが用いられる。
オライリーの本とかすごい表紙だよね。
種類:ゾウ
種類:ゾウ
名前:slonik
「動物のロゴにしたいなら、象なんてどうだい?アガサ・クリスティの小説にもある『象は忘れない』だ」
― PostgreSQL発足時のメーリスより
種類:ゾウ
名前: -
象は記憶力が非常に優れた動物のため。PostgreSQLと同じで、象の優れた能力にあやかっている。
種類:ヌー
名前: -
種類:キツネ
名前: -
もともとPhoenixという名前だったが、商標権を侵害していたので、公募でFirebirdという名前に決定。
しかし今度はDBに同じ名前があったので、Firefox(レッサーパンダの別名)に改名。
みなさん命名は慎重に。
種類:クジラ
『白鯨(Moby-Dick)』より。クジラを採用した理由はデザイン見れば納得。
種類:ペンギン
名前はタキシード(Tuxedo)を着ているように見えるから。
ロゴコンテストで決定されたが、他の作品を見ればなぜ選ばれたのかよくわかる。デザインって大事。
https://www.cs.earlham.edu/~jeremiah/linux-pix/linux-logo.html
種類:鳥
名前:ラリー・バード
名前はNBAのラリー・バード選手より。社員がファンだったらしい
ちなみに初期のTwitterのデザインはGitHubのデザイナーが手掛けたもの。すごいっすね。
種類:シーサー
名前: -
種類:イルカ
名前:Sakila
種類:ネコ
名前: -
オライリーの本に載ることを考慮して動物をマスコットにしようと考え、「自立した強かさ」を持つという意味でTomcat(雄猫の愛称)を採用。
しかし、猫はオライリーのUML本で使われてしまい、念願のTomcat本にはユキヒョウが使われたという…。
種類:Dogcow(イヌ+ウシ)
名前:Clarus
昔々、Mac OSで用紙の向きや色を表示するために使用されていたらしい。
知らんわ。
種類:ウサギ
名前:Glenda
OSの名前である「Plan 9~」はエド・ウッドの『Plan 9 from Outer Space』に由来。
ウサギの名前であるGlendaはエド・ウッドの『グレンとグレンダ』に由来。
どんだけエド・ウッド好きなんだよ。
ニュージャージーのWFMUラジオで、Renee Frenchによって宣伝用のTシャツに描かれたのが、彼の初登場。
その後、Bell labsのメールシステムでアバターとして起用もされた。
(ちなみにReneeはBell labsのGlendaを描いた人。Glendaもアバターの一員だった)
そうして2009年、Goプロジェクトが発足し、ロゴを検討していたメンバーにReneeが無償で描いてあげたのが「Go gopher」である。
みんなGo Gopherと呼ぶので、特に固有の名前は無いらしい。
由来は下記サイトにありました。
http://anond.hatelabo.jp/20161017031727
老婆心ながら,おそらくSIer関係を目指しているだろう情報系?学生へのアドバイス
どの大学でも学生課は糞対応なので,カウンセラー通して学生課に学費免除なり,奨学金なり,対応を仰げ.
このままいくと研究室・ゼミ配属で積みそうなにおいするから,中退・途中就職(大学頼らない就職)の選択肢も考えておけ.
- http://dotinstall.com/ title: dotinstall]
- http://gacco.org/ title: gacco]
- https://schoo.jp/ title: schoo]
SIerに関係ないと思われるが,Web系への選択肢も拡がるしな.騙されたとおもってやっておけ.
最近だと技術文書をMarkdown で書く場合も多いし知っておいて損ないで.
ドットインストールにも授業がある.
基本情報持ってるなら知ってると思うが,
慣れておくといいで.ついでに言語はC++でもいいが,SIerならJava8勉強しておけ.
多分授業だけだと,実際のコード使わないと思うので,自分でインストールして使ってみるとええで.
MySQLインストールして使えるようにしておけ.基本コマンドだけええで.
後々データベースの資格(シルバー,ゴールド)にもつながるしな.
基本情報持ってるならある程度知ってると思うが,低レイヤのIP/TCP, UDPのソケット通信をCでもJavaでも書けるようにしておくとええで.
開発の話あるしね
ドットインストールにもある.
今までやったこと忘れるのもったいないし,他人に見せる意味でも技術ブログやっておけ.毎日更新とかいらんで.
Linuxインストールしたレベルで,やったことならなんでもええで.
技術者の就職面接で,(関係ない)バイトしてました,サークルやってましたじゃあんま意味ないからな.
録画して好きな時間観て見ておけ.
情報系の授業もある.
コード書くようになったら騙されたと思って読んどけ.
自分の中の名著にしておけ.
スカウト来たら,入らないにしても会ってみるとええで.
バイト大事なのはわかるが,大学の目的は,知識で選択肢拡げるというのもあるので,頑張って生きるんやで.
じゃあの.
3人くらいで集まってBtoBtoCアプリサービス作ってるんだけど
お金ないから一旦俺がアプリ・サーバー・デザインとサービスモデル化までやってる
それで一番苦戦するのがサーバー
Rails覚えりゃいいんだろ? と思ったら
Rails、Ruby、Nginx、Unicorn、Jbuilder、SQLite、AWS、その他いろいろ
とにかく多い
芋づる式にいろいろ必要になる
linux知識が薄いから更にアレだし、IDE入れたら更にアレだ
(いや、AptanaはEclipseベースだからあまり問題はなかったか)
しかも、そこまでに取捨選択が入るから、登場する「ナニコレ」はもっともっと多くなる
まあそこまではまだいいんだけど
一個一個のバージョン差とか、書き方の差でハマる
「まあこの書き方が主流だよね」があまりない
MySQLは書けるのにSQLiteでハマるしActiveRecordでドハマリする
皆自由すぎる
何でコンパイラ無いんだよ
おまけにググっても色々出てこない
完成しても「本当にこれでいいのか?」がよくわからない
色々蓄積してどっかで問題が起こるかもしれない
アプリならそんなこと滅多にないのに
難しいよサーバーサイド
俺やだよ
「サービスリリースしたらWebも必要だよね」って話もあるんだけど
たぶん無理だな、外注しないと
___
利点:設計とかあとで適当に変更してもコミュニケーションコストがかからないから楽
複雑な仕様を全部把握できる
まだサービス全体像がふわふわな場合は試行錯誤できるから非常に有効だと思う
頼れない
進みが遅くてイラつく
みんなもやってみて
IPAのやってるやつだけじゃなくて、ベンダーのやってる言語とかDBとかああいうのも。
PHPのプロジェクトはPHPの認定試験に受かってる奴しか使わないとか、MySQLの資格もってないとテーブル設計もやらせないしSQLも書かせないみたいな。
認定試験なんて実力とは関係ないって言う人いるけど、SIerではびこってる「経験年数=技術力」って基準より数段マシになると思うわ。
Javaの入門書も読んだこと無いレベルの人が、コードを書くどころかレビュワーをやっていて、しかも「経験年数=技術力」って世界観だから、自分は実力あるとナチュラルに信じこんでるし。
VBから来たベテランが「エラーハンドラを全サブルーチンで書くべし」みたいなルールをJavaに持ち込んで「全メソッドでcatch(Exception e)するべきだろ」とか自信たっぷりに言ってる世界。
ダメな技術者が、年をとってるってだけで評価されて上にたってダメな技術者を育成するって負のループに入り込んでるから、一定の客観的な基準で評価する仕組みをもちこんで負のループを断ち切るべき。
右も左も分からんかったのと、python勉強したかったんで、
「pythonによるウェブスクレイピング」っていう本読んでるんですよ
本に従ってbeautifulsoap使ってます。それから本の内容的にデータ分析のためにmysql使い始めました
将来的には、クロールしてデータかき集めて、自動取引なんぞに取り組みたいと思ってまして。
http://anond.hatelabo.jp/20160629121342
http://anond.hatelabo.jp/20160629121054
お二方反応して下さりありがとうございました.
まじで何も理解してないけど
http://qiita.com/YamKenta/items/a33499a7db7946a43381
と
http://www.goofoo.jp/2011/11/1457
読んでそのままやったらよく分からんけどできた.
どう勉強すればいいんだろう.まじで
企業が持っている開発タスク、チケット化してこれをこなしたら数万円もらえる、みたいなプラットホームがあればいいのに。
フルリモートで出社日決まっていない、ほぼバイトに近い働き方でベンチャー企業と関わったが、すごく良かった。
やったのはサイトのパフォーマンスチューニング。(基本MySQLのインデックス貼っただけだけど…)
・・とは言っても、スタートアップ時などは
作りながらいろいろ思うところや、気付きとかあったりすると思うので、
手触りの感覚でやらねばならぬところがあって(たぶん)
そういうところを重視するには内製化しないといけないのかなー。
すげー優秀なプロデューサーがいて、
開発はCTOが仕事をチケット化してフリーエンジニアに依頼する、
みたいな感じになればいいのになー。
与信があるエンジニアだけにするようにすれば、
品質も保ちつつ開発リソースも柔軟に担保できるみたいな感じにならないかなー。
会員制のクラウドワークスか。
エンジニアの単価はdayで2.5〜4万にしてほしす。
ある程度やってきたエンジニアを上手いこと活用するプラットホーム的なの作ればいいと思うんすよね。
26歳〜39歳ぐらいのイケイケのエンジニアをプールしているみたいな。
経験してきたハイスキル業務をこなす。一回やったから負荷は少ないだろうし。
慣れてきたらエンジニア個人ではなく、エンジニアチームで仕事をこなすようにするとか。
わしは、そういうのがほしい!!!
定職一個持ちつつday 2〜3万の案件をこなして正社員給与+月でフリー活動24万ぐらいの収入を安定してほしいなー。
社内の技術評価とかよくわからんものに振り回されず、実案件をこなす実力を求めるようになると思うので
いいと思うんだけどなー。
↓ここ!
ベーシックインカム >> 終身雇用 >> 正社員+兼業 >> フリーランス
↑ここ!
終身雇用はやめて正社員制度は生きるけど、稼ぎたい奴はフリーで活動して稼げば、的な。
安定して働きたいやつは正社員としての受け皿があるし、
まあ、もっと金ほしいんだが?ってやつは独立するのかな・・・。
・・・金がほしいある程度経験を積んだ専門職に最適化したく思っただけなので
技術のブレイクスルーを起こすようなそんな奴らに最適化された仕組みはまた別なのかな。
ポスドク的な奴を救う感じの何かもあればいいのにね。
javaを極めてもphpを極めてもmysqlを極めてもlinuxを極めてもどーせ、5年後にはもっと良いものが使われて主流になっているでしょう。
「手に職を付けたい」程度の薄っぺらい理由でIT系ブラック企業の正社員を志望するのは絶対にやめた方がいい
そんな程度の情熱しか持ち合わせないなら絶対に「手に職が付く」事は無い。
よっぽど優秀なら話は別ですが、ブラック企業にしか就職できなかった貴方ですよ?無理ですね。
システムは能力が低い人、脳みそがそっち系用に構築されていない人にとって最初は相当つらいです。
耐え切れなくて100%逃げるでしょう。「手に職を付ける」だけなら他の仕事でもいいはずです。
理由2 体力的に耐えられない
IT系ブラック企業の場合、マニュアルなんて無いから投入時間に成果が比例しないです。その場合、一定の能力以下の方は、9時出社の25時帰宅になります。
成果の方程式は「投入時間 × (能力ー最低限必要な能力) ≒ 成果」ですから、無能だと成果はマイナスになります。デスマーチの発生ですね。
そして、大抵の場合ブラックIT企業のプロジェクトはリーダーがこれに当てはまります。デスマーチ確定ですね。
技術の変遷速度が速いため、常に学び続けないと時代遅れになってしまうからシステム屋さんなら常に付きまとう問題です。これは、ブラック企業だけの話ではないですね。
javaを極めてもphpを極めてもmysqlを極めてもlinuxを極めてもどーせ、5年後にはもっと良いものが使われて主流になっているでしょう。
でも、考えてみてください。システムの業務なんて理数系の勉強と似たようなものです。
新しい技術が来たとしても論理的に考える事が得意な人ならば文型理系関係なくこなせると思いますが問題は、貴方は、学生時代そういう人でしたか?無理ですね。
理由4 金銭面の見返りはほぼ皆無
頑張って成果をあげたところでブラック企業なんて金銭面の見返りはほぼ皆無です経営者に搾取されるだけです。
適度に手を抜いてある程度の成果が出せる人にしかおススメしません。3でも書いたとおりである程度能力があって、手抜きできる人にとってはブラック企業はヘルプがない代わりに放任に近いので凄く楽だと思います。ネット閲覧規制などもないですし。
福利厚生もちゃんとしてないくせに、正社員だから引継ぎするのが義務とかなんとか言われます。辞める時にめんどくさいですよ。
まずはバイトで様子見を見ましょう。「あ~ブラックだな」って思ったら適当なところでフェイドアウトするのがおススメです。
ブラック企業なので人間的にどうかと思う人がたくさんいます。上司の失敗は部下の失敗です。
良心……社会常識…人を信頼する気持ち……プライベートの時間……心と体の健康など、失うものはあまりに大きいです。
管理体制や教育制度が整っている会社はブラック企業にはなりません。つまり自力で学ぶしかないんです。
貴方は学校の勉強は良く出来た方ですか? もしそうでないならこの業界は茨の道ですよ?
人材が不足しているだけで人手が不足している訳ではありません。
システム業界は、正直にいえば人材不足です。人材が不足しているだけで人手が不足している訳ではありません。あなたが求められているわけではないのです。
DELIMITER // CREATE PROCEDURE proc(IN s1 VARCHAR(32), IN s2 VARCHAR(32), OUT o INT) BEGIN DECLARE a INT; SELECT COUNT(*) INTO a FROM TBL WHERE COL1=s1 AND COL2=s2; IF a = 0 THEN SET o = 0; ELSE SET o = 1; END IF; END // DELIMITER ;
CALL proc('SUZUKI','ICHIRO',@a) SELECT @a
私の持てる知識を絞り出してなんとか完成しました。
**************************************************************************************
完成したサイトがこちらです。
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アカウントあるといつでも参加できますので、
http://webbingstudio.com/weblog/cms/entry-773.html
小規模の商用サイトでは、フォームを暗号化する際には、共有SSLを利用するのが当たり前となっています。独自ドメインのSSL証明書を取得すると、フォームを通して得られる収益よりも、維持費の方がはるかに高くなってしまうからです。
とこの記事では書かれていますが、一体どこで「当たり前」なんでしょうか?
SSL証明書の取得費用は、サーバーホスティングによって額がまちまちなのは確かですけれども、
安く独自SSL証明書を取得して利用できるサーバーホスティングは山ほどあります。
WEB制作者として「自分が良く知っているだけ」のサーバーのレンタルをクライアントに押し付けてはいませんか?
また、小規模商用サイトにしても、仮に年額35,000円のSSL証明書をつけ、かつ、月額3,000円のサーバーを借りていたとすると
月額でいえば6,000円くらいの負担ですが、
いくら小規模とはいえ、広報活動の中核をなすWEBサイトであるならば、
月額6,000円をペイできないとすると、
(というか、効果測定をしていないだけ?)
共用SSLのリスクに関して言えば、この記事が引用している、高木浩光氏の書かれている通りではあります。
cookieが取得できてしまう結果として、一番最初に狙われるのは、管理画面へのログイン。
いわゆるセッションハイジャックです。
ログイン状態を乗っ取られた時点で、どんなCMSでも、WEBサイトの改ざんは可能です。
なぜか。
そのコンテンツは多くの場合MySQLに代表されるDBに保存してあります。
したがって、ファイルの改ざんなどを行わずとも、WEBサイトの内容は書き換えることが可能なのです。
「なるほど」と思ってしまうかもしれないので、
早々に訂正していただきたい。
また、この記事にある a-blog cmsというCMSについてはよく知りませんが、
多くのモダンなCMSでは、ほとんどの管理画面ログインにおいて、
セッションハイジャックに対する防衛は行われていますので、
cookieの取得が、即WEBページの改ざんに繋がるような書き方も、
ここも早々に訂正していただきたい。
この筆者さんは、a-blog cmsというCMSを利用されているようだ。
このCMSはどうやら、PHP製ながらPHPのソースを暗号化しているようだ。
こう言ってはなんですが、攻撃者にしてみれば、a-blog cmsを攻略するくらいならMovable TypeやWordPressを攻めた方が楽というものです。
この記述はむちゃくちゃである。攻撃者にしてみれば、誰でも手に入れられるCMSであれば、
a-blog cmsの公式サイトを拝見すると、MySQLを利用しているようで、
ファイルの暗号化はなされていようとも、DBの中身の仕様は丸見えだ。
前提条件として「知っている」「知らない」の差はあれど、攻撃に関して「ラク」というのは
どう考えても楽観的に過ぎる考えだ。
どうも「SSLで確保される安全の領域」について、かなり認識が甘いようだ。
SSLはあくまで、TCP/IPネットワークにおいて通信経路を暗号化するための技術だ。
通信する際に、通信先のサーバーが正しく認証されているかどうか?に必要なのはSSL証明書。
で、ここに書いたとおり、SSLはあくまでサーバーと利用者の通信においての暗号化だ。
この記事に書かれていることは「メールフォームについて」のことのようだが、
サーバーに到達したあとのメールについては安全性をかんがえていますか?
メールは全く暗号化されず平文で送信されるとても脆弱な通信手段だ。
いくらSSLで通信を暗号化しようとも、問い合わせフォームの送信がメールだったとすると…
とこの記事ではかかれていますが、そもそもHTTPやHTTPSの通信を傍受するより遥かに
メールを傍受したほうがラクとも考えられるはず。
CMSの機能に甘んじて、こういったベーシックな問題に考えが及んでいないとすると、
とおもう。
記事に対するつっこみではないですが、
正しくは「TLS」でっせ。