「Webサーバー」を含む日記 RSS

はてなキーワード: Webサーバーとは

2017-09-11

https://anond.hatelabo.jp/20170910205249

まじな話をすると、N予備校プログラミング入門コースやるのがオススメ

https://www.nnn.ed.nico

一日8時間勉強時間があるなら、だいたい一ヶ月で終わる内容。

月額1000円だけどしっかり勉強すれば一ヶ月の無料間中に終わると思う。

もともとN高等学校のノンプログラマーの生徒をWebエンジニアとして就職させるために作られたカリキュラム講師曰く去年はこれで二人エンジニア就職を決めたらしい。

内容も相当親切に説明していて、プログラミングで何か作るだけじゃなくて、就職必要な環境構築やセキュリティまでみっちりやる。

http://qiita.com/sifue/items/7e7c7867b64ce9742aee#%E3%82%B3%E3%83%B3%E3%82%BB%E3%83%97%E3%83%88%E3%82%92%E3%82%82%E3%81%A8%E3%81%AB%E6%A7%8B%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%82%B3%E3%83%BC%E3%82%B9%E3%81%A8%E5%86%85%E5%AE%B9

講師が書いてる入門コースで習うことがまとめ。テキスト教材もあるけど授業も1項目を2時間で説明している。授業は週2の生放送とそのアーカイブがある。

↓みたいなことが学べる

----

Webプログラミング入門コース

Web ブラウザとは (Chrome, デベロッパーコンソール, alert)

はじめてのHTML (VSCode, HTML, Emmet)

さまざまなHTMLタグ (h, p, a, img, ul, tableタグ)

HTMLで作る自己紹介ページ (HTMLタグ組み合わせ, コンテンツ埋め込み)

はじめてのJavaScript (JS, ES6, エラー)

JavaScriptでの計算 (値, 算術演算子, 変数, 代入)

JavaScript論理を扱う (論理値, 論理積, 論理和, 否定, 比較演算子, if)

JavaScriptループ (ループ, for)

JavaScriptコレクション (コレクション, 配列, 添字, undefined)

JavaScript関数 (関数, 関数宣言, 引数, 戻り値, 関数呼び出し, 再帰)

JavaScriptオブジェクト (オブジェクト, モデリング, プロパティ, 要件定義)

はじめてのCSS (CSS, セレクタ, background-color, border)

CSSを使ったプログラミング (transform, id, class)

Webページの企画とデザイン (企画, 要件定義, モックアップ, 16進数カラーコード)

診断機能の開発 (const, let, JSDoc, インタフェース, 正規表現, テストコード)

診断機能組込み (div, 無名関数, アロー関数, ガード句, truthy, falsy)

ツイート機能の開発 (リバースエンジニアリング, URI, URL, URIエンコード)

Linux開発環境構築コース

LinuxというOS (VirtualBox, Vagrant, Ubuntuインストール, OS, CUIの大切さ)

コンピューター構成要素 (ノイマンコンピューター, プロセス, lshw, man, ps, dfの使い方)

ファイル操作 (pwd, ls, cd, mkdir, rm, cp, mv, find, ホストマシンとの共有ディレクトリ)

標準出力 (標準入力標準出力標準エラー出力パイプgrep)

vi (vimtutor)

シェルプログラミング (シバン, echo, read, 変数, if)

通信ネットワーク (パケット, tcpdump, IPアドレス, TCP, ルーター, ping)

サーバークライアント (tmux, nc, telnet)

HTTP通信 (http, https, DNS, hostsファイル, ポートフォワーディング)

通信をするボットの開発 (cron, ログ収集)

GitHubウェブサイトの公開 (GitHub, リポジトリ, fork, commit, 情報モラル)

イシュー管理とWikiによるドキュメント作成 (Issues, Wiki)

GitとGitHub連携 (git, ssh, clone, pull)

GitHubへのpush (init, add, status, インデックス, commit, push, tag)

Gitのブランチ (branch, checkout, merge, gh-pages)

ソーシャルコーディング (コンフリクト、プルリクエスト)

Webアプリ基礎コース

Node.js (Node.js, nodebrew, Linux, REPL, コマンドライン引数, プルリク課題)

集計処理を行うプログラム (集計, 人口動態CSV, Stream, for-of, 連想配列Map, map関数)

アルゴリズムの改善 (アルゴリズム, フィボナッチ数列, 再帰, time, プロファイル, nodegrind, O記法, メモ化)

ライブラリ (ライブラリ, パッケージマネージャー, npm)

Slackボット開発 (slack, mention, bot)

HubotとSlackアダプタ (hubot, yo)

モジュール化された処理 CRUD, オブジェクトライフサイクル, filter)

ボットインタフェースとの連携 (モジュールのつなぎ込み, trim, join)

同期I/Oと非同期I/O (同期I/O, 非同期I/O, ブロッキング)

例外処理 (try, catch, finally, throw)

HTTPサーバー (Web, TCPとUDP, Webサーバーの仕組み, Node.jsイベントループ, リスナー)

ログ (ログ, ログレベル)

HTTPのメソッド (メソッド, GET, POST, PUT, DELETE, CRUDとの対応)

HTMLフォーム (フォームの仕組み, form, input)

テンプレートエンジン (テンプレートエンジン, jade)

HerokuWebサービスを公開 (Webサービスの公開, heroku, dyno, toolbelt, login, create, logs)

認証利用者を制限する (認証, Basic認証, Authorizationヘッダ, ステータスコード)

Cookie を使った秘密匿名掲示板 (Cookie, Set-Cookie, expire)

UI、URI、モジュール設計 (モジュール設計, フォームメソッド制限, リダイレクト, 302)

フォームによる投稿機能の実装 (モジュール性, textarea, 303)

認証された投稿の一覧表示機能 (パスワードの平文管理の問題, 404, テンプレートのeach-in)

データベースへの保存機能の実装 (データベース, PostgreSQL, 主キー)

トラッキングCookieの実装 (トラッキング Cookie, IDの偽装, Cookie の削除)

削除機能の実装 (データベースを利用した削除処理, 認可, サーバーサイドでの認可)

管理者機能の実装 (Web サービス管理責任, 管理者機能の重要性)

デザインの改善 (Bootstrap, レスポンシブデザイン, セキュリティの問題があるサイトを公開しない)

脆弱性 (脆弱性, 脆弱性で生まれる損失, 個人情報保護法, OS コマンド・インジェクション)

XSS脆弱性対策 (XSS, 適切なエスケープ処理, リグレッション)

パスワード脆弱性対策(ハッシュ関数, メッセージダイジェスト, 不正アクセス禁止法, パスワードジェネレーター, 辞書攻撃)

セッション固定化攻撃脆弱性対策 (セッション, セッション固定化攻撃, ハッシュ値による正当性チェック)

より強固なセッション管理 (推測しづらいセッション識別子, 秘密鍵)

CSRF脆弱性対策 (CSRF, ワンタイムトークン)

安全なHerokuへの公開 (脆弱性に対する考え方, HTTPの廃止)

Webアプリ応用コース

Webフレームワーク (Express.js, フレームワーク導入, 簡単なAPI, セキュリティアップデート, Cookie パーサー, ミドルウェア, 外部認証, ロガー)

ExpressのAPI (app, Properties, Request, Response, Router)

GitHubを使った外部認証 (Passport, OAuth)

スティングフレームワーク (Mocha, レッド, グリーン, リファクタリング)

継続的インテグレーション (CircleCI)

クライアントフレームワーク (Webpack, Chrome 以外のブラウザでもES6)

DOM操作フレームワーク (jQuery, jQueryアニメーション, this)

AJAX (jQuery.ajax, クロスドメイン, 同一生成元ポリシー, x-requested-by, CORS)

WebSocket (WebSocket, WebSocketの状態遷移, Socket.io)

RDBとSQL (DDL, DCL, CREATE, DROP, INSERT, DELETE, UPDATE, WHERE)

データモデリング (リレーショナルモデル, 正規化)

テーブルの結合 (外部結合, 内部結合, 片側外部結合, JOIN ON)

インデックス (インデックス, 複合インデックス, Bツリー)

集計とソート (SUM, COUNT, ORDER BY, GROUP BY)

「予定調整くん」の設計 (要件定義、用語集、データモデル、URL設計モジュール設計、MVC)

認証とRouterモジュールの実装 (Mocha, supertest, passport-stub, モックテスト)

予定とユーザーの保存 (セキュリティ要件, UUID, 複合主キー)

予定とユーザーの一覧の表示 (非同期処理, Promise, then)

出欠とコメントの表示 (入れ子の連想配列, Promise.all, 子どもからデータを消す)

出欠とコメント更新 (Promiseチェイン, リファクタリング)

予定の編集と削除 (要件の衝突, 関数再利用)

デザインの改善 (this, グローバルオブジェクト)

セキュリティ対策と公開 (X-Frame-Options, Heroku環境変数)

新調する自宅サーバーのスペックを考えた

今はAtom 330+ION+SST-SG05B+SSD+HDD+TVチューナー構成

ケース新調&SATAポート追加&OS入れ替えの必要が出てきたので、新調することにした。

パーツ名称価格備考
マザーボードASRock H270M-ITX/ac¥13,760H270M, Mini-ITX, SATA最多
CPUCeleron G3930T¥4,220最小TDPで最安のもの
CPUクーラーサイズ 風神スリム¥3,674ロープロファイル, 汎用12cmファン
メモリTeam TED48GM2400C16DC01¥6,980DDR4-2400 4GB×2
システムドライブX25-M 80GB¥0SSD, 余り
データドライブWD40EFRX¥0WD Red 4TB, 流用
バックアップドライブWD80EFZX¥32,617WD Red 8TB
余りHDDWD1003FZEX¥0WD Black 1TB。ファイル履歴シャドウコピー用。壊れたら他のドライブから間借りする。
余りSSDX25-V 40GB¥0用途未定。キャッシュに使うにも書き込みが遅い。余りHDDが壊れた時のシャドウコピーとか。
電源Corsair RM650x 650x¥12,917260Wまでファンレスで動くATX電源
ケースLian-Li PC-Q25B¥19,830ファイルサーバーに適したケース
ファンコントローラGRID+ V2¥4,280Windowsから制御できるファンコン
TVチューナーPX-W3PE Rev1.3¥0地上波2ch, 流用
合計¥98,278

候補から外れたもの

ケース
PC-Q28B
SS-DS380B
マザーボード
J4205-ITX
A68N-5600

2017-06-12

一般的エンジニアレベルが分からない

俺の会社技術力低いらしいのは薄々分かるんだが、世の中のエンジニアレベルが分からない

入社して3年以内のエンジニアの人で、今具体的にどんなことをやっているのか教えて欲しい

ちなみに俺のレベルサーバOS設計書見ながら建てられるとか、bashperl簡単スクリプト組めるとか、webサーバー立てられるとか、まあそんなもん

2年目でこれっぽっちである

2017-04-19

流行ってるOrarioと大学側について思うこと

Orarioについて思うこと

Orarioについて

現在大学の中でOrarioのアクセスがどうこうという問題が起きているようだが、

ひとまずこの記事については、下記URLにある、京都大学専門家であらせられる記事について、一人歩きしてる感があるので、

もう少し彼のような上流側(という表現で良いかどうかは不明だが)の専門家ではなく、

下流プログラムガッツリ書いているほうの専門家として私(匿名で失礼)が纏めたいと思う。

  

https://srad.jp/~yasuoka/journal/611343/

  

  

不正アクセスという言葉曖昧

Orarioの芳本大樹が書いた『時間割アプリの「Orario」の特性安全性について』(2017年4月17日)という文書を読んだ。このOrarioは、京都大学のKULASISにずっと不正アクセスを繰り返していて、正直なところ私(安岡孝一)としてはアタマに来ていたのだ。

  

Orarioの特性安全性について、本当にスクレイピング技術クライアント端末側で行っているのであれば、

この部分は間違いではないと私(匿名で失礼)は考えている。

  

この部分の書き方、実に大学教授らしい逃げ道を多く用意していて。

  

KULASISにずっと不正アクセスを繰り返していて

  

上記発言、これは本来「開発時の検証段階」の話をしているのであれば「正解」、である

逆に今のOrarioの通信についてを不正アクセスとしているのであれば「正解ではない」、である

  

何せ、開発者勝手アカウントを使って入り込んで様々な検証を行う必要があるため、

学生からIDパスワードを借りたはずだ。

借りてログインするのが不正かというと微妙ラインだと思う。

  

この辺りにもやっぱり大学教授のいやらしさがあって

KULASISサーバに対してクラッキング/ハッキングを行って根こそぎどうこうしたなどという大がかりな不正アクセスではなく、

あくま大学側が定める規約規則から若干外れた使われ方がされているという意味不正アクセスである

  

法律的には、正直不正かどうか微妙ラインになる。

(そもそもスクレイピングなんて技術を使う連中はID/PASSWORDがない状態でのサーバへの不正アクセスなどできない

  

開発時は「京大のKULASISアカウントをもったユーザが開発に携わっていないのであれば」押し出してきている京大規約によれば、不正アクセスにあたるのかもしれない。

個人的には当たらないと感じるが。

  

  

現在動いているアプリ不正アクセスと断言できない

現在動いているもの不正アクセスではなく、

京大規定に定められたユーザが「特定ブラウジングツール(Orario)」により、

KULASISにアクセスしているのだからアクセスとしては不正ではない。

本当にスマートWebスクレイピングで行われているのであれば、Webブラウザと全く同じ動きをするはずで、

それを不正アクセス断罪してOrarioは不正というのは表現が汚いと考える。

  

  

これはコメント欄にもあるが、

https://srad.jp/comment/3196554

また、ChromeSafari(及びその他マイナーWebブラウザ)なども御校のWebサーバーよりコンテンツデータを取得し、HTML構文解析し画面表示を行っていますが、これらはセキュリティポリシーには適合しているのでしょうか?

  

ご大層にはっておられるリンクを流し読みをする限り、そんな厳格に何かを定めているわけではないように思われる。

それ故、実際にOrarioがスマートフォンによるスクレイピングを行っているのであれば、

Webブラウザ一種とも言えなくはない為、これを不正と断ずるのは、「正しくない」だろう

京大ユーザが開発に携わったか証明できない以上、彼にとっては不正なのかもしれないが、

ここでそれをOrarioは不正アクセスと断ずる論理性が私(匿名で失礼)にはわからない。

  

  

アクセスパターンを公開できない理由とは?

他にもこの部分

Orarioアプリでは「Webオートメーション(Webスクレイピング)」と呼ばれる技術を用いています。この技術により、利用者様のスマートフォン(にインストールされているOrarioアプリ)に学生アカウント大学IDパスワード)を入力すると、自動で当該利用者様の教務用ページから時間割の生成に必要情報のみを取得し、Orarioアプリ時間割テーブルに当該利用者様の時間割を生成・表示することができるという仕組みとなっています

全く信用できない。少なくとも先月以前、OrarioからKULASISへのアクセスパターンを解析した限りでは、そんな風なアクセスパターンには見えなかった。嘘を書くのもいい加減にしろ

  

この部分も怪しいものである

Webスクレイピング技術に関して、なぜアクセスパターン問題になるかが一つ疑問である

下記のOrarioが出しているPDF(http://www.orario.jp/wp-content/uploads/2017/04/Orario%E3%81%AE%E5%AE%89%E5%85%A8%E6%80%A7%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E8%A6%8B%E8%A7%A3.pdf)にあるように、簡単にいうならばID/Passwordを利用したPOST通信を行い、その返答値をスクレイピング切り貼り)している。

  

それをアクセスパターンを解析で一体何が取れるのか?という部分が、この辺りが分かる自称専門家の私(匿名で失礼)にもさっぱりわからない。

  

もっというと、「そんな風なアクセスパターンには見えない」、というならば、セキュリティ観点上公開すべきではないだろうか、

逆に一体アクセスパターンを見て私(匿名で失礼)も何を行っているのかが気になるところである

  

ただでさえ、不正アクセスという言葉をつかって攻撃しているわけだから

アクセスパターンを公開して断罪すべきだし、セキュリティ観点からみても他大学との共有はすべきで、

学生に対してもその証拠を出して止めさせるべきだろう、というのが個人的見解である

学生の求める「単位」をつかって脅しをかけている時点で、お察しだが……。

  

そもそも上記で述べた開発時のほぼ不正アクセスと考えられる通信についてを「アクセスパターン解析で見つけた」というのであれば理解ができるが、

現在すでにスクレイピング確立している通信に関して、アクセスパターンでOrarioかどうかを判別するのが可能かというと何とも言えないと思う。

(ご丁寧にOrarioが通信用のUserAgentにOrarioの文字を含めているなら別だが……

(もちろん、アクセスログを見て、ログインページからWebスクレイピングしたいページへ遷移するまでの時間を取るとあまりに短すぎる、という話ならやれるかもしれないが……。

  

たとえKULASISが京都大学オリジナルで開発した大学教務事務パッケージだとしてもそうだろうと考えている。

同様に日立富士通も同じような大学教務事務パッケージがあるが、

基本ログ処理がザルでろくにuser-agentの確認もできない大学も多く存在したりすることを知ってる自分としては、

本当だろうか?嘘を書くのもいい加減にしろ? と思う。

大学側について思うこと

なぜOrarioが学生に人気か

UIが糞(システムスマートフォン対応がノロい)だからアプリ流行るということに気づくべき。

  

富士通日立にしてもそうだが、API提供したほうがいいのではなかろうか。

とくにKULASISだったか何だったは、京都大学謹製と聞いている(違ったら失礼

少なくとも他の大学教務事務パッケージではなかったと記憶している。

であれば、京都大学API提供大学側で専門家を集めてOrarioを超えるものを作ってはどうか?

  

大学予算確保の問題

実際大学でこういうことをやろうにも、問題になってくるのは予算で。

大学は、縦割り構造で、横とのつながりが極端に薄く。

教務、事務、学務、図書館、など様々な縦割りが存在し、それぞれがそれぞれの予算でそれぞれのシステムを入れている。

これが実に糞で。

つの大きなシステムを入れ替えるとなると、横との連携をとって全ての組織の号令をとらなければならない。

  

その辺りが難しいのは知っているので文句は言えないものの、

ここまで問題になってくるとやはりその辺りの対応の遅さが問題なのではないかと考えている。


まとめ

学生がアホ → 仕方が無い若いんだし

大学がアホ → 学生に良い物を提供したいという思いがあるならもっとフットワーク軽くしろ

教授がアホ → 曖昧表現で、素人を先導しようとするのが見え見えで気に入らない

Orarioアホ → コメントにもあるけどやり方が汚いのは確かだから甘んじて受け入れろ


以上です

2017-02-24

anond:20160529110102

使っていますよ。

たまにやるマイクラサーバーファイルサーバーwebサーバー、あとは録画サーバー運用してます

動画エンコとかはもちろんできないけど、壊れても良い前提で運用した方がいいです。

*nixの環境があれば技術習得もやりやすいし良いんじゃないですか?

自宅サーバーは火事が怖いのでファンレスにして、ホコリ貯めないでネ。

2016-12-29

はてブで「Amazon」と検索してみると

昨今話題になってるヤマト佐川関連のブックマークが上位を占めるかと思いきや、まったく違った。

2016年12月29日10:54時点、本文、新着順で検索

Amazon検索結果 (絞り込み: 3 users 以上) 約 3,423 件中 1 - 40 件目 (0.26 秒)

以下略

ECサイト連想させるトピックほとんどなくて、AmazonB2B向けサービスを充実させていることに驚いた。

Amazonって表向きは物流業界革命問題を起こしている要因に挙げられているけど、EC以外のインパクトがどれだけ大きいのか門外漢なので分からない。

↑でブクマ付けた人、何が起きるのか教えて

2016-12-27

Web企業のくせに自社Webサーバーセキュリティ無頓着って何なん?

某社のサーバーの問い合わせページをSSL LabsにかけてみたらランクC。TLS1.2が使えないばかりかSSL3.0がまだ有効のままだし、ApacheバージョンHTTPレスポンスに丸見えだし、そのバージョン脆弱性抱えた2.0.64だし、なんかもうお察しくださいなレベルだな。ひでえ。

ホームページの「大型新人入社!」とかわけのわからんこと言ってる前にやることあるのにいったいいつ気づくのだろうか。

2016-04-09

パソコンが汚れるのでインストール型のソフト提供をいい加減やめてくれ、日本メーカー

何かあるとすぐに「設定ツール]をインストールして… 云々。

Web対応させるには別のエンジニアグループ必要だろうからライン違うし気持ちもわかるのだが。

かのバファロ先生無線LAN親機でも同じ始末である。で、設定ツールというから何かと思えば、結局デフォルトゲートウェイWebサーバーに遷移させるだけだった。

そして遷移した先には偉そうに バファロ独自機能です!

みたいな。

いらん!ちゅーねん。

元々海外にいたのだが別にたまたまファロを例に出したけど、日本メーカーの作るIT機器プリンタとかも)は、無用ものが多すぎる。

ただこれと同時にマジョリティのそれほどパソコン詳しくない人たちにはここまでしてあげないと、使ってくれない、買ってくれないんだろうなーとも思ってる。

いやはや。

2015-08-25

IT関係ないサラリーマンコミュニティサイト作っちゃいました。

私ごとですが、この度コミュニティサイト作成いたしました。

私の持てる知識を絞り出してなんとか完成しました。

**************************************************************************************

完成したサイトがこちらです。

LapyNetニュース

http://lapynetz.net/

**************************************************************************************

私は普段webとは関係ない仕事してます。なんとか休日を利用して、

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 && $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回

この商品を含むブログ (9件) を見る

Webアプリ開発を加速する CakePHP2定番レシピ119

Webアプリ開発を加速する CakePHP2定番レシピ119

作者: 長谷川智希,デジタルサーカス

出版社/メーカー: 秀和システム

発売日: 2013/09/28

メディア: 単行本

この商品を含むブログ (1件) を見る

**************************************************************************************

一番難しいところはtwitterログインwebサイト連結でした。

cakephp直感できに操作できていいです。

素人のわたしでも操作できましたので。

cakephpを使用しています

webからニュース収集してきます

ツイート数でランキングしてますネット話題を見つけられます

twitterアカウントログインできます

ニュースに対するコメントもできるし、

自分記事投稿できます。(画像も可)

デザインはよくわからないので、

ホームページビルダーを使用しています

今のホームページビルダーは昔と違って高機能ですね。

テンプレートも何種類もあって今はすごいです。

アマゾンawsを使用してます

サーバーWebサーバーデータベースサーバmysql)

に分かれています

今更cakephpを使っている人は少ないかもしれませんが、

データベースとの接続などは楽でした。

twitterアカウントあるといつでも参加できますので、

ニュースを通してコミュニケーション目的としたサイトを目指します。

2015-08-06

とうとう人類幸せに導くpgbouncer1.6が公開された

みんな大好きPostgreSQL

複数DBマルチテナントシステムを構築するなら忘れてはいけないコネクションプーリング

大量コネクションを扱うなら都度forkやpre-fork式ではちょっと辛い、イベントベースが好ましい。

もうお分かりですね。pgbouncer1.6の話題です。

PostgreSQL界隈では有名なコネクションプーリング実装が2つあります。 pgpool-II と pgbouncer。

ざっくり言うと高機能の pgpool-II に対して、軽量・大規模向けの pgbouncer という棲み分けがあると言えるでしょう。

pgpool-II は最近日本トレジャーデータ社の Prestogres ( https://github.com/treasure-data/prestogres ) という痺れるようなプロジェクトベースとして採用されていることで名前を聞いたことのある方もいるのではないでしょうか。

pgbouncer は少し古いですが LastFM( http://www.lastfm.jp/user/Russ/journal/2008/02/21/zd_postgres_connection_pools:_pgpool_vs._pgbouncer )の事例が有名でしょう。Instagram も使ってますネ。

pgbouncerは現行のバージョンは1.5系で、最新は1.5.5です。1.6系は8月1日リリースされ、複数DBマルチテナントシステムに向けた大規模な機能強化が行われています

この1.6系では複数DBマルチテナントシステム開発者にとって嬉しい機能がたくさん搭載される予定です。本番運用に投入する前に一足お先にリリースノートを読んで夢を感じましょう。

バージョン2013年ぐらいからリリースノートは準備されているのにさっぱりリリースされなくて関係者をやきもきさせていました。(想像

記事では以下のリリースノートをもとにザックリ読み解いたものです。

http://pgbouncer.github.io/2015/08/pgbouncer-1-6/

主要新機能

接続ユーザーパスワードハッシュDBからロードできるようになった

プーリングモードの設定をデータベース毎、ユーザー毎に設定できるようになった

データベース毎、ユーザー毎にコネクションの最大接続数を制御できるようになった

・新しいコネクション確立を避けるための DISABLE/ENABLE コマンドが追加された

・新しい推奨のDNSバックエンド c-ares が追加された

設定ファイルに include ディレクティブを追加した

ではリリースノートをそれぞれ細かく見ていきましょう。

接続ユーザーパスワードハッシュDBからロードできるようになった

新しく以下のパラメータが追加された

1.5までのpgbouncerは userlist.txt というテキストに静的に接続ユーザを書かなければいけませんでした。

これは動的に接続ユーザーが増えるようなマルチテナントシステムを構築するのに不向きという事です。

この機能はその悩みを解消するための機能と言えるでしょう。

プールモードデータベース毎、ユーザー毎に設定することができる。

タイトルがすべてを物語ってます。柔軟にできますねぇ('∀`)

ただ、私にはちょっと有用な利用シーンが思いつかなかったです。

たとえば分析ユーザーではトランザクションなんて使わないので statement モードにしてコネクションの消費を抑えたりできるという事でしょうか。

データベース毎、ユーザー毎にコネクションの上限を設定できる。

max_db_connections と max_user_connections という設定が追加されます

テナント毎にユーザーを分けているような複数DBマルチテナントシステムにとって必須といえる機能です。

特定ユーザーリクエストコネクションをすべて占有されてしまい、他のユーザーサービスできないという事態を避けることができるようになるでしょう。

新しいコネクション生成を防止する DISABLE/ENABLE コマンドを追加。

特定データベースの新しいコネクション確立を抑止・再開することができます

新しいDNSバックエンドとして c-ares を導入した。

c-ares名前解決の非同期化を行うためのライブラリです。c-ares名前解決をブロックしないし、いろいろな方式名前解決に対応している唯一のプロダクトとのこと。

名前解決をブロッキングしてしまうようではpgbouncerのような大規模向けシステムでは役に立たないのだというpgbouncerの強い意志を感じる。

というか、ドキュメントを見る限り pgbouncer は名前解決にかなりこだわりを持っているらしい。それだけそこが重要ということでしょう

個人的には困ったことがないのでそこまでだわる理由はよくわからない。)。

SHOW CLIENTS, SHOW SERVERS で remote_pid を出すようになった。

UNIXドメインソケットで接続しているクライアントと、TCPまたはUNIXドメインソケットで接続しているサーバーでremote_pidを取得できるようになりました。

tcp serverの場合、pid はキャンセルキーから取得できる。(?ドキュメントから意味が読み取れず)

キャンセルキーとは何でしょうね。ちょっとリリースノートから判断できませんでした。

pg_cancel_backend とかに使えるPIDだよという事なのでしょうか。

ネガティブDNSキャッシュのために dns_nxdomain_ttl を分割した。

DBの数なんてもはや何台あるかわからない。ホスト名の解決はもはやDNSで行っておるよという皆様にとって必須機能

…なのでしょうがちょっとこの機能必要となるようなシステムとはどんなものなのか、私も未経験なのでよくわからないです。

クライアントIPアドレスポートapplicationネームに追加する

この設定は application_name_add_host=on にすることで有効となる。

今や接続アプリケーション名がWebだとかBatchだとか区別できるだけで問題が解決するような時代ではない。

どのホスト(ポート)レベル区別しないと。という事なんだろう。

「おお、Webサーバーから死ぬほど重いクエリが飛んでる、今すぐ調べないと!で、どのWebサーバーよ?100台あるんだぜ」みたいなときに助かりますね。

設定ファイルに外部ファイル読み込みディレクティブを追加することができるようになります

設定ファイル大規模化してくると、切り出して整理したいという要望はどうしてもでてくるもの

データベース毎、ユーザー毎に設定できる項目が増えてきたので必要になったという事でしょう。

以上。

以降はバグフィックスとかクリーンアップだとかで自分はあまり興味がないので各自読むように。

本番運用突撃するPostgreSQL界の猛者の報告待ってます

2015-05-08

AWS入門書籍おしえてください

中小企業勤務のど素人です。平均年齢40歳くらいの昭和からある非IT企業です。

前任者が退職して、他に出来る人がいないという理由で、自社HPインフラ担当することになりました

個人でレンタルサーバーVPS契約してLAMP環境構築して、ごく単純なWEBサービスを公開していますが、

ググってでてきた手順を見よう見まねでやったので、基本を理解できてないので、怖いです。

UNIXの基本コマンドもおぼつかない感じです。

WEBサーバーDBサーバーファイルサーバーも一緒の1つのサーバーです。

DBレプリケーションもしていません。

会社サービスは、今までは会社サーバーを置いてやってました。

リプレースが大変なのと、AWSWEBサービス業界標準のようなので、迷うことなAWSにしていきたいです。

一人でやるのは怖いので、無理ですといったのですが、押しつけられました。

2015-05-07

AWS入門書籍おしえてください

中小企業勤務のど素人です。平均年齢40歳くらいの昭和からある非IT企業です。

前任者が退職して、他に出来る人がいないという理由で、自社HPインフラ担当することになりました

個人でレンタルサーバーVPS契約してLAMP環境構築して、ごく単純なWEBサービスを公開していますが、

ググってでてきた手順を見よう見まねでやったので、基本を理解できてないので、怖いです。

UNIXの基本コマンドもおぼつかない感じです。

WEBサーバーDBサーバーファイルサーバーも一緒の1つのサーバーです。

DBレプリケーションもしていません。


会社サービスは、今までは会社サーバーを置いてやってました。

リプレースが大変なのと、AWSWEBサービス業界標準のようなので、迷うことなAWSにしていきたいです。

一人でやるのは怖いので、無理ですといったのですが、押しつけられました。

2014-11-07

11月7日から東進衛星予備校動画配信方式が新しくなったそうだが評判悪いらしい

いとこがブーブー文句言ってたので2ちゃんで見たけど確かに文句言ってるひとは多いな。ただ、便所の落書きである2ちゃん情報からどこまで信じていいのかわからない。

http://hayabusa6.2ch.net/test/read.cgi/juku/1411520273/

277 :名無しさんお腹いっぱい。:2014/10/13(月) 02:59:03.27 ID:DxUVXH3V0

突然だけど11月から講座は新配信方式に全移行して旧配信方式はなくなるっぽいね

新配信方式って1.5倍速からの1.4倍速出来ないし音質悪いしでホント糞だと思うんだけど…

マジで新配信システムになるから東進やめようかと思ってるレベルなんだが…そう思ってるのって俺だけ?

278 :名無しさんお腹いっぱい。:2014/10/13(月) 05:11:47.26 ID:KycZE0vL0

>>277

色々調べて見たけど旧配信の方はmmsプロトコルを使ったストリーミング方式で、mmsサーバーオリジナル動画データが保存されているか劣化なしで見れて綺麗。ただし動画データが大きい為低速回線には弱い

一方新配信の方はsilverlightを使ったプログレッシブ方式で、上記のような別の動画専用のサーバーを用いずwebサーバー動画アップするのでサーバー運用費を大幅に削減でき、さらタブレットスマートフォンにも対応。ただしプレグレッシブ方式使用者回線速度とCPUから自動的に画質を調節され、上述のスペックが低いほど画質が劣化する(YouTube

と同じ) さらタブレットスマートフォンにも対応させる為、サーバーにある元動画データ圧縮している(だから方式で画質を一番良い設定にしても、旧配信の方が綺麗なのはこのせい)

俺的にはクッソきたない画質で講座受講してもやる気萎えるだけでひとつメリットねえわ…。まあ百歩譲ってタブレットで受講は良いとしても、スマホなんか板書の字小さすぎて見る気もおきん。結局東進経営コスト削減と、スマホでも見れるようになったと宣伝してPC持ってないやつの受講スピードを上げてさらに講座をたくさん取らせるという戦略だと俺は予想

285 :名無しさんお腹いっぱい。:2014/10/13(月) 17:45:34.66 ID:Cq772BZS0

音質悪い新配信方式オンリーはやめてほしい

290 :名無しさんお腹いっぱい。:2014/10/13(月) 20:16:04.56 ID:8urZBTnC0

新配信フレームと音は劣化してるけど画質そのものは上がってない? 2つ見比べると旧の方がちょっとぼやけてて新の方がくっきりしてた

まあ賛否両論はあるだろうけど最近東進も人増えてるんだしサーバー負荷減らす方式に変えるのは仕方ないんじゃない?

308 :名無しさんお腹いっぱい。:2014/10/14(火) 20:42:26.88 ID:tJj0JKiJ0

POSにあるpdfに書いてあったけど10月中に新方式でも再生中の速度切り替え可能になる模様 これでいくらか使い勝手よくなるかな?

309 :名無しさんお腹いっぱい。:2014/10/14(火) 21:34:41.80 ID:7bV01vKz0

>>308 それが唯一の救いだな

331 :名無しさんお腹いっぱい。:2014/10/16(木) 12:04:18.91 ID:znrv2rc50

新配信方式に完全移行とか信じられん

みんなでクレーム入れようぜ

349 :名無しさんお腹いっぱい。:2014/10/17(金) 02:23:05.70 ID:nTZCBMo40

一講座75000円なのにあの新配信方式の画質音質はないわ

特にフレームレート下げすぎ…元動画エンコした奴、動画編集の知識がなかったのか?

受験サプリより映像品質悪いとかしゃれにならんぞ

とりあえず皆で声あげていかないとダメだと思う

せっかく2010年度以降の講座は新スタジオ収録で高画質高音質だったのに台無し


352 :名無しさんお腹いっぱい。:2014/10/17(金) 07:13:47.11 ID:I4CpyJIH0

本当に新配信方式ひどすぎる

あんなんだったら絶対東進入らなかった


353 :名無しさんお腹いっぱい。:2014/10/17(金) 08:29:11.02 ID:75ih+iZV0

ここ見てる東進の職員に言うが、お前らの金に執着する心にはもううんざりだ。少しは生徒のことを考えて行動しろ。せっかく講師が良い授業してもお前らのせいで全て無駄になる。そして新方式で配信するなら生徒の評判は最悪になり、生徒の数は減少していくことになるぞ。すへ


369 :名無しさんお腹いっぱい。:2014/10/18(土) 18:12:46.58 ID:xoEtdlq70

マジで新配信糞だからだれかchange.org署名開いてくれよ

397 :名無しさんお腹いっぱい。:2014/10/20(月) 16:20:09.26 ID:GlyN0HKgi

新配信方式クレーム入れたいから問い合わせ先教えて

398 :名無しさんお腹いっぱい。:2014/10/20(月) 16:40:57.81 ID:veDDvxmE0

http://www.toshin.com/toi/

407 :名無しさんお腹いっぱい。:2014/10/20(月) 22:41:08.59 ID:AFLwnX230

校舎の人に直接言ったほうがいいぞ

新配信方式過去問演習講座の映像が音ずれひどいっていったら本部システムエラー(?)用のところに連絡してくれた

508 :名無しさんお腹いっぱい。:2014/11/02(日) 17:35:48.34 ID:v014LHAN0

配信方式が完全に切り替えになったらwmpで受講できなくなる?

509 :名無しさんお腹いっぱい。:2014/11/02(日) 19:56:08.29 ID:mBrSs8fXO

>>508お前はそのような忌みのわからないことをいうかわりにもっと激しく勉強しならければらならない

580 :名無しさんお腹いっぱい。:2014/11/07(金) 00:18:28.69 ID:7BrFu3q60

ついに新配信方式だけになったな

2014-10-12

http://anond.hatelabo.jp/20141011212318

突っ込みどころはそこじゃねえだろ。

億稼ぐソーシャルゲームが、1台のwebサーバサービスホストしてるのなんかあり得なくて、

「一人のユーザの」課金ログが「access.logwebサーバアクセスログ)」を見りゃ分かるなんてのはありえねーの。

access.logは100台単位webサーバーに散乱してるし、access.logから検索するのは非合理。

そもそも、リアルタイム課金ログを見るのにwebログを追う必要は全くない。

普通運営ツールがあって、そこにユーザ情報をちゃんと追えるような機能を用意してる。

そこらへん踏まえれば、ちゃんと元増田釣りの一種だって分かるだろうに。

2014-09-09

クラブ好きな新米エンジニアが1週間でWebサービス作ってみた

こんにちは

文系出身だけど前々からWebサービスつくってみたくて勉強がてら一人でWebサービス作ってみました。

作りたいって思うなら実際に作ってみるのが一番いいってじっちゃんがいってた。

やってみて感じたこととか先輩エンジニアの人たちに教えて欲しいこととかを書いていきたいと思います

じっちゃん、僕にもできたよ!

作ったWebサービス

EDM JACK

http://edmjack.com/

簡単に説明するとクラブミュージック淡々と紹介していくサイト

作ってみた人のあれこれ

・26歳

フリーター(ほぼニート)→知人の会社で営業職→今年の4月Web業界転職

クラブミュージックが大好き。だけど人混みは嫌い。

・営業職だったころにあい時間ドットインストールとかでHTML/CSS勉強をしてた。

大学中退してからフリーターになって、その頃から自分Webサービスとかつくって運営してる人ってかっこいいな〜とか思ってた。

Facebook映画とか見たときは完全に感化されっぱなしだった。

でもいつか作れたらいいな〜って思ってただけでなにもしてなかった。

最近いろいろ環境が変わって少し休みをもらえたので奮起して勉強がてら作ってみることにしたのです。

なにを作るか

漠然と「Webサービス作りたい」って思ってたからまずどんなWebサービスを作るか考えました。

やっぱり好きなことじゃないと続かないと思ったので

自分が好きなクラブミュージックをまとめるサイトを作ることにしました。

ジャンルDJ KAO●Iとかミーハーな感じの曲じゃなくてEDMってやつ。

EDMといえば今月日本でもUltra Music Festivalが開催されるね!やったね!Hardwellに会えるね!

どうやって作るか

まずはプログラミングとやらを勉強することにしました。ドットインストールは偉大です。お世話になりました。

ドットインストール

http://dotinstall.com/

ここでHTML/CSSPHP勉強しました。でもPHPゼロからコードを書いて作ろうとすると重大な問題があることに気が付きました。

時間がかかりすぎる。

今回はとりあえず自分でなにかWebサービスを作ってみるということを経験たかったのでWordPressを使うことにしました。

サーバー環境の構築を勉強した

でもさすがにレンタルサーバーを借りてWordPress入れましたっていうんじゃ先輩エンジニアの人たちに怒られちゃうと思ったので、

WordPressを入れるサーバー環境構築は自分で頑張ってやってみることにしました。

なのでWeb業界ではアイドル存在AWSっていうやつで頑張ることにしました。

ここでもドットインストールにお世話になりました。ほんとなんでもチュートリアルがあってすごい。

最初WebサーバーApacheを入れていたんですが、なんか重たい感じがしていろいろ調べているとNginxナウい感じだったので

Nginxインスタンスを立て直すことしました。環境的にはこんな感じ。

AWS EC2 (t2.micro)

Nginx 1.4.7

php-fpm 5.3.28

MySQL 5.6.13

ドットインストールUnixコマンドとかを勉強したとはいってもNginxの設定周りをいじるのは結構大変でした。

でもNginx使うからにはチューニングしてから使わないとApache先生に怒られちゃうので、

この記事を見ながら頑張ってチューニングしました。

さくらVPS512で、Yahoo!砲食らっても WordPress平常運転させるための設定

http://dogmap.jp/2013/04/16/sakura-vps-performance-tuning/

チューニングテストをしたらTransfer Rate17[Kbytes/sec] くらいから15000 [Kbytes/sec]くらいになった。

Nginxやばい。はやすぎ。なにこのスピード

WordPressを入れていろいろ設定をしてみる

無事にサーバーが立てられたのでWordPressを突っ込んでテーマかいろいろいじりました。

使用したテーマPRONTO

http://www.wpexplorer.com/pronto-wordpress-theme/

基本的にはテーマをそのまま使ってるだけです。

シェアボタンをつけたりFacebookのLikeBoxを入れたりでちょっとテーマいじった程度。

あ、カテゴリタグにpickupってつけたら自動投稿が目立つようにした。これは自分テーマファイルいじって書いた。

入れたプラグインはこんな感じ。Jetpackモバイルテーマのみを有効化してる。

アイキャッチ画像が多いからPhotonも有効化してもいいかなって悩んでる。

Akismet

All In One SEO Pack

Batch Category Import

Favicon Rotator

Font Awesome Icons

Google Analytics

Jetpack by WordPress.com

Mobile Theme Featured images for Jetpack

Newpost Catch

NextScripts: Social Networks Auto-Poster

Nginx Cache Controller

Remote Images Grabber

Video Thumbnails

Wordpress Popular Posts

WordPress Related Posts

WP Multibyte Patch

サイト運用を開始

WordPressなのであとはたらたらと僕がオススメする曲を更新していくだけ。

EC2t2.microだけど、Nginxのおかげなのか特に問題はなし。

今はYoutubeSoundcloudURLをそのまま投稿に入れて、アーティスト名とかDJ名でカテゴリ分けしてる。

せっかくだからドメイン代とかAWS代だけでも回収できればいいなってことでAdSenseも入れてみたw

やってみて思ったこと。

実際に作り始めてから1週間程度でここまでつくることが出来ました。

AWSNginx環境構築→4日

WordPress環境構築→3日

ドットインストールがなかったらここまで速くつくれなかった。ありがとうございます田口さん。

元々非エンジニアでもやる気になればそれっぽいのが作れて感動しました。

でもなんかOGPの設定がうまくできず、Facebookとかでシェアしようとするとたまに全然関係ない画像が表示されてしまう。

テーマファイルに直接書いてもプラグインOGP設定してもよくわからなかった。

Facebookデバッガーつかってキャッシュクリアしてもできたりできなかったり。

これはNginxキャッシュが影響してるんかな。

今後やりたいこと。

将来的にはSoundcloudとMixcloudを足して2で割ったサイトになればいいな。

キュレーター制度とかも入れてみて、僕だけじゃなくていろんなEDM好きやDJおすすめの曲を投稿できるようにしていきたい。

WordPressで構築しちゃったけどできるだけプラグインに頼らずに自分PHP書いて実装できるように頑張らなきゃ。

本とかは一冊も読まずにここまで作れたけどPHPエンジニアならこれは読んどけよ若造ってのがあったら教えてください。

EDMは素晴らしいよ!クラブ好きな人もそうでない人もきっと好きになる曲が沢山あるから聞いてみてね!

EDM JACK

http://edmjack.com

2014-05-11

http://anond.hatelabo.jp/20140510231402

JavaまたはPHPでの開発経験があること」

まさかとは思うけど、「Java or PHP」の経験が1年か2年あるだけでこれだけの数の企業受けたの?(3年以上もしくは「Java and PHP」ならIT業界が人不足の現在こんなに書類で落とされるのは有り得ない)

それでこんなに落ちてるならIT業界で職を探すの辞めた方が良いよ。そっちの方が幸せだと思う。

コロプラとかUnityC#UnityScript)を使ってることで超有名な会社じゃん。

WebサーバーにはPHP使ってるっぽいけどZend Frameworkからやってない人多そう。

増田も「実績が無い」と言われるってことはPHPZend Frameworkをやったことが無い1人だったんだろ?

そんな人が面接に来たら俺が面接官でも「何が出来ると思ってウチを受けたんですか????」って素の好奇心で聞いちゃうわ。

社会人野球ボールボーイプロ球団プロテスト受けに行くようなもんだぞ。

2014-04-11

AV(エロのほう)なウェブサービスを作ったとき発見したこと。

 

世の中にはマニアがあふれている。

これに尽きます

「僕は世の中を知っている大人だ。」なんて

漠然と思っていたりもしましたけれど

こんな身近に知らない世界はありました。

中でも僕を驚かせたのは

嘔吐好き」と「キワモノ好き」の2つです。(´・_・`)

嘔吐好きとか、

ゲロはいてる女性見て、なんで興奮するんですか!? Σ(゚∀゚ノ)ノ

そのゲロかぶって、なんで興奮するんですか!? Σ(゚∀゚ノ)ノ

キワモノ好きなんて、

裸の女性ミミズ昆虫にまみれて、それを食ってんですよ! Σ(゚∀゚ノ)ノ

さすがに気持ち悪くなりました。。。

キワモノAVはサービスデータから除外しました。。)

今、日本人口が約1億4千万人として

男は半分の7千万人でしょ?

エロ情熱がある若者から中年層だとその半分強で4千万人として

その4千万のうち

嘔吐好きな変態さん。

キワモノ好きな変態さん。

ってどのくらいいるんでしょうね。。。

作る人がいて見る人がいるんだから、まあソコソコな人数いるんだろうなあ。。


作ったサービスについて


【らぶらぶAVさーち】

http://love2av.com/

AVの検索サイトです。

ちなみに、ワンクリック検索できるピックアップ検索は私の趣味です。w

最近は、つぼみ紗倉まなほしのあすか臼井あいみがオススメです。www ぐう可愛い!(゜∀゜


内部的な仕組み


Nginx + php-fpm + MySQL で動いています

言語PHP + Smarty + Javascript(jQuery) で書いています

あと、スクレイピング用に .NETwindowsアプリ作りました

え、スクレイピングPHP で作ればいいのにって?

スクレイピングってサイトデザインが変わったら

すぐ誤動作してしまうのですよね。。。

PHPだと対応し直しが面倒なので .NET に逃げました。。。。ヽ(°▽、°)ノエヘヘヘヘ

データ更新


データは、アフィリをやっている

動画サイトのduga さんと、MGS動画さんから持ってきています

アフィリじゃないリンクを置いておきますね。

DUGA

http://duga.jp/

MGS動画

http://www.mgstage.com/

データを常に最新にしておくために


という作業をcronで6時間ごとに実行しています

おすすめの使い方


個人的には

待ち合わせで暇なとき

スマホちょっとエロ画像見よう」 ( ・ω・)

てな感じで使っています

 

2014-02-11

文系プログラマ内定した人の愚痴

愚痴です。

中学校くらいの時にWebサイト作ってた。しょーもないサイトだったけど、それなりにアクセス数増えてカウンタが1000万超えた。

掲示板CGIとか設置する過程で、perlを覚えた。楽しくて、自作掲示板とかチャットとか色々作った。

暇さえあればperl情報集めてたし、Socketモジュールだけで簡単なWebサーバー作ったりしてたし、

自分でもperlに関しては自信があった。

でもプログラミングに対する周囲の印象は「オタク臭い」だった。中学ではよくいじめられてた。

から高校進学を期に高校デビューした。おかげで友達いっぱいできた。

でも模試の成績は偏差値30くらいだったし、perlはまったく触らなくなった。

大学受験はそれなりに頑張ってMARCH大学入学した。

でも文系だった。大学でもそれなりにウェイウェイした。

文系らしくテストだけ出席して単位を取り、あとはバイトサークル活動で大学生活を浪費した。

就職活動では金融を志望した。もう僕は文系人生を歩むんだと思ってた。

もともと人との会話なんて大嫌いだったのに、大学時代に頑張ったことなんてコミュニケーションくらいしかなかったか

コミュニケーションの話を面接でアピールしまくった。実は辛かった。

ほんのとあるきっかけで、ドワンゴ面接に行った。楽しかった。

もう僕がperlを辞めてから5年くらい経ってたし、今思い返せば稚拙なことしかアピールしてなかったけど、とにかく面接は楽しかった。

結局そこから志望を金融からITに変えた。

perlが好きだったかWeb系のベンチャー受けまくったけど、当然のように落ちまくった。

結局、中小企業SEだかPGだか職種がわからない開発系の会社内定もらった。

内定はもらったけど実は行きたくなかったし、転職してでもWeb系開発に行きたいから今めちゃくちゃに勉強してる。

僕がプログラミングをやっていた中学時代から、本当に世界は変わってしまっていた。

javascriptはただのオモチャみたいな存在からajaxだとかフレームワークだとか、今最も熱い言語になってしまってるし、

perlはいつの間にか没落してて、サーバーサイドは主にphpが主流らしい。

つの事を学べば、さらに三つくらい新しく学ぶべき分野が増える。時間がいくらあっても足りない。

おかげ様で、今まで付き合ってきた人間とまったく話が合わなくなってしまった。

大学の友人は、ウェイウェイしか言わないので連絡を取らなくなった。多分、陰口叩かれてる。

内定した会社の同期は、勉強してる様子がまったくうかがえない。

いまどきのSEらしく、技術より顧客との折衝能力の方が、大事だと思ってるんだろうか。

内定した会社の先輩社員からは、勉強意欲があまり見えてこない。

オブジェクト指向がわからない人間役職についている事には驚いた。

もしかして、今後私はずっと、こうした技術に対する意欲の低い人間たちにまみれながら、

一人勉強を続けなければいけないのだろうか。

それは、出る杭で在り続けるということであり、大変ツライことなのではないだろうか。

文系学部入学し、ウェイしか言わない友達を作ってきたのは自己責任から

仕方ないことだけれど、最近自分のやっている事が周囲に理解されない事があまりにも辛くなってきた。

環境のせいにするのは良くないことなのだけれど、なぜ中学の当時、誰も私がプログラミングをやっていたことを

応援してくれなかったのか。応援してくれてさえいれば、今頃、それなりに技術に関して積み重ねてこれたのではないか、

技術に興味を持つ友人を作れたのではないかと恨む言葉が出てくる。

油断をすれば、周囲の人間と歩幅をあわせて、勉強しなくなってしまいそうになる。

強い意思をもって、そうした誘惑を振り払いながら、一人で勉強し続けるのはとても辛い。

2013-09-24

文系大学生夏休みエロサイトを作った、そのまとめ(結構長文)

こんばんは、都内大学に通う文系大学生です。

夏休み彼女もおらず暇なので、わかりやすエロサイト自分用に作ってみることにしました。

なお作者はプログラムに関しては、一般教養の授業でC言語に軽く触れた程度の素人です。

最初iPhoneアプリを作ろう!と意気込んていたのですが、ふぇぇメモリ管理が難しいよう、となりやめました。やっぱりWebだよね。

作成サイト

Xvideos動画

http://av-sexvideos.com/

コンセプトとしては、AV女優リストからエロ動画自動収集し、掲載するサイトとなっております

開設してまだ1週間ほどしか経っておらず、まだほとんど人は来てません。

まぁ自分用だしいいかなと思っております

なお、リンク切れ自動で検出するようにできております

エロサイトを作るにあたってやらなきゃいけないこと

幸いにも作者の周りには、プロデザイナーSEがいたので助けていただきました。

動作環境の選定

まずは素人なんだし、言語を選ばなきゃ話にならんだろJK、ということで知人のSEから話を聞き、言語Ruby1.9.3、フレームワークRuby on Rails3.2.13を選定しました。

速度はそこまで速くないらしいのだけど、とてもサクサク開発できるとのことです。PHPコードが読みにくいからやめとけとの事でした。


OSwindowsがいいなーと思っていたのですが、「ライセンス料が高いよ。。。」とのことでしたので、Linuxを覚えることにしました。

今回はUbuntuを使っております。他にはCentOSやらFedoraやらがいいらしいのですが、yumよりもaptだなということでこちらは見送りました。


データベースにはMySQL5.5を使用しております無料で使えて速く、クラスタリングにも対応しているので今のところはベストチョイスですね。

内部ではInnoDBを使用していますトランザクションが使えないと困るのでMyISAMは使っていません。全文検索を使う場合には他にいろいろと方法があるのでも特に問題は無いと思っております


WebサーバーAPサーバーにはApache2とPassengerを使っております。今更Apacheを使っちゃう男ってどうなの?なんでNginxじゃないの?と思われるかもしれませんが、Apacheデフォルトのpreforkではなく、workerを使えばなかなか速いです。

workerはマルチスレッドなので、プロセス間でメモリを共有するため、安定性に関してはpreforkに劣るかもしれませんが、速度面では圧倒的に速いです。


これらを設定したサーバー海外VPSの老舗であるlinodeから2インスタンス借り、運用しております。(メモリ4G、8コア)


L4スイッチは設置しておらず、DNSラウンドロビンとマスタスレーブ方式で負荷分散を行っております

データの取得(スクレイピング

とにかく自分が好きな女優エロ動画を欲しかったので、データの取得から始めることにしました。

使用ライブラリはNokogiri、mechanizeです。この2つを用いて、以下の2つのクローラー作成しました。

gsub、scanmapにはお世話になりました。正規表現大事ですね。

デザイン作成

なるべく見やすく、シンプルサイトを心がけました。ふぇぇスマートフォンだと見難いよう、なんてことの無いようにモバイルファーストを心がけ、レスポンシブなサイト作成しました。

今回使用したのは、Twitter Bootstrapというフレームワークです。様々なパーツが最初から揃っているのでサクサクデザインを組み立てることができます

ただ標準だとちょっとダサい(失礼)ので、それなりにカスタマイズして使っています。今回はフラットで、ピンクデザインを目指しました。ポイントは下記。

なおレスポンシブに対応する際に、CSSMedia Queriesだけでは対応できない箇所はenquire.jsを使用しております。表示するwindowのサイズによってJQueryイベントを叩いたりできて便利です。

アプリケーション作成

前述したとおり、Ruby on Railsの3.2を使っておりますRails4でも良かったのですが、バグが起こった時に面倒そうだったので、安定してきている3.2を採択しました。

@amatsudaさんのkaminariが便利でした。

インフラ周りのチューニング

ここはじっくり時間をかけました。Railsは適切にチューニングをしてやらないと遅いです。特にルーティングが遅い。

abでベンチマークをした結果、チューニング前のページだと1サーバー100req/sほどしかさばけません。

Rails側のチューニング
MySQLチューニング

今回、Memcachedは一切使用しませんでした。というのもMySQL自体キャッシュ機能を持っているので、サブクエリなどを使わければあまり効果が無いと判断たからです。

しろMemcachedを使ったほうが、遅くなるケースも多々あるかと思います

my.cnfで以下の項目をいじりました。

今回はページ数もそこまで多くないため、これでなんとかなりましたが、ログイン機能を使ったものだと若干面倒かもしれません。

Apache2のチューニング

前述のとおり、preforkではなく、workerを使いました。DBAPも同じ筐体に入っているので、設定自体は控えめにしました。Apache遅いよーと言う前に、一度workerにしてチューニングをしてみるとApacheへの見方が変わるかと思います

  • StartServers 5
  • ServerLimit 10
  • ThreadLimit 100
  • MaxClients 1000
  • MinSpareThreads 25
  • MaxSpareThreads 75
  • ThreadsPerChild 100
  • MaxRequestsPerChild 0

これだけで、ページにもよりますが、平均して1サーバー1500req/sさばけるようになりました。2台なので3000req/sでしょうか。

SEO


初心者でも夏休みという1ヶ月半くらいで、ここまで作れるようになりました。

このAV女優もっと掲載してほしい!や、ここはダメだなというご意見、お待ちしております

9/25追記

今回読んだ本を抜粋して紹介します。

大規模サーバーチューニング技術が学べます

Amazon.co.jp: 実践 Web Standards Design ~Web標準の基本とCSSレイアウト&Tips~: 市瀬 裕哉, 福島 英児, 望月 真琴: 本

HTMLCSSはこれで

Amazon.co.jp: Ruby on Rails 3 アプリケーションプログラミング: 山田 祥寛: 本

Railsはこれ一冊である程度まかなえます

Railsで困ったときはこれで

MySQLチューニングはこれで

お前のようなシロウトいるか 化けるんならIT土方にでも化けるんだったな

ツッコミありがとうございます

最初はcotEditorを使っておりましたが、知人からemacsを使えよ」と駄目だしされたのでそれを使っております辛いですが頑張ってます

こんなサイトも作ってみました。知人と共同で作っている女性向けサイトです。

http://av-girls.me/

2013-06-26

エロ2ちゃんねるまとめサイトから画像を集約するサイト作成

作ったサイト概要

サイト名称
おなりん(正式名称おなぬらいんず)
サイト目的
おなぬをお手軽・お気軽にするためのサービスエロ2ちゃんねるまとめサイトから画像を収集して、お気に入り画像だけをスライドショーするだけのシンプルWEBサービスです。
サイトの特徴
1)準備をしなくてもすぐにはじめられる 2)毎日新鮮なおかずで 3)右手はいつもフリー、、、
サイトの説明
「おなりん」はおなぬが大好きだけど、おかずを準備するのが面倒というひとのために開発されました。本をおかずに使うと、利き手でページをめくる必要があるので、おなぬに大切なリズムが狂ってしまますインターネットエロサイトをおかずにすると、画像を切り替えるのにいちいちマウス操作せねばなりません。利き手マウス操作しないといけないので、これも大切なリズムを狂わせますもっと気軽におなぬが出来ないものか?そんなあなたの為に作られたWEBサービスです。厳選されたムフフサイト画像を表示し、気に入った画像お気に入り登録して、スライドショーで表示する。後は、右手の思うがままです。何にも集中を邪魔されることなくおなぬに集中することが可能です。

わたしの横顔

年齢
40代半ば
職業
システムエンジニア
プログラミング
25年以上
プログラミング実績
10数年前までフリーソフト作家的なことをしていました。窓の杜にも作成プログラムが掲載されていたことがあります
好きなプログラミング環境
PHPMySQL(だたし、「おなりん」はPython作成しています

作ったきっか

もともとは、2ちゃんねる系のまとめサイトを巡回して、Yahoo!ニュースのようなサイトを作っていました。(現在も鋭意開発中です。)

コンテンツの内容を解釈して自動的にジャンル分けをして・・・などと、出来るかわからない壮大なアイデアを実装しているので、いまだに完成時期が見えて来ません。

画像収集処理を作っている時に「これでエロ画像を集めたら面白そう」と思いついてしまいました。思い立ったら、すぐにやりたくなるのが人間の性というやつです。基本的な処理はほとんどできていたので、割に短期間で作成できました。エロ画像をどうせ集めるのなら、目的をもって役に立つサイトにしようと思い立ち、おなぬーをするためのWEBサービスにました。

作成したもう一つの目的として、月間10PV程度のサイト自分で運営したいという思いもありました。安直ですがエロ系のサイトであれば、それが可能なのではと考えた次第です。

なぜ匿名ダイアリーを書いているか

せっかくサイトを作ったのですが、エロ系のサイトは告知をするのが難しいとう事実を作り終わってから知りました。私自身もブログをやっているので、そこでお知らせをしても良いのですが、ブログ趣旨にあわないのと、PVがとてつもなく低いという理由で断念しました。

匿名ダイアリーは、かなりのPVがあるので、作ったサイトの告知ができるのではと思い匿名ダイアリーを書いています

せっかく作ったサイトですから、皆さんに利用してもらいたいし、役に立つサイトにしたいと思っています。ですので、サイトを見たらご意見をいただけたら嬉しいです。

おなりんの実行環境

「おなりん」は、Python/Djandoで作成しました。

もう、15年以上PHPPHP FIと言う名称の頃からユーザーです)でプログラムを作ってきました。PHPが持っている気軽さや気楽さは大好きなのですが、誰もが好き勝手コードが書けるというデメリットもありますプログラム言語にはある程度の厳しいルールがないと将来にわたってメンテナスしていけるプログラムを作るのは困難です。

せっかく新しプログラムを作るのだから、新しいプログラム言語で作ることにしました。

ある程度、厳しいルールがあって、誰もが同じようなプログラムが作れる言語はなんだろうと考えていくとPythonRubyが候補に上がりました。

Rubyはできるだけ手数を少なくプログラムを作ろうという基本思想があります。私の感覚では、熟練したプログラマが使う言語という印象が強いです。

Pythonは、プログラマレベルを問わず、熟練プログラマ新人プログラマも同じようなプログラムが書けるプログラム言語という印象でした。

私自身も将来誰かに教えられるようにと、今回はPythonを使用言語として選択しました。また、裸のPythonで書くのも面倒そうですので、フレームワークとしてDjangoを選択しています

「おなりん」は、そんな思いを乗せて以下の環境で構築しました。

サーバーさくらVPS(1G)
プログラミング言語Pytyhon 2.7.5 / Django 1.5.1
その他ツールBootstrap, jquery, wookmark, colorboxなど
WebサーバーApache 2.2
データベースMySQL 5.5

画像抽出について

「おなりん」は、登録されたまとめサイトを定期的に巡回して、各エントリーから記事内の画像URL抽出しています。取り出すのはURLだけで、画像の直接ダウンロードは行いません。ですので、リンク元画像がなくなれば、「おなりん」からの表示もなくなります

サイトエントリーRSSから取得しています。各記事のHTMLPythonライブラリurllib2を使って取り出し、HTMLから正規表現画像URL抽出しています

サイトによっては記事画像HTMLに決まった書き方がなされていないために、余計な画像抽出してしまうこともあります。おかず画像抽出精度は徐々に上げて行きたいと思ってます

さくらVPSについて

当初「おなりん」は、Amazon EC2(t1.micro)で構築する予定でした。構築までは完了したのですが、今ひとつ体感速度が上がらないのです。すでに利用しているさくらVPS比較したところ、3倍くらいの速度差(abコマンドの実行結果)があったので、Amazon EC2の利用を諦めました。

Amazon EC2は1年ほどの無料利用期間があります。これを過ぎると課金されていくのですが、Amazon EC2(t1.micro)を1ヶ月動かし続けると4000円近い料金が必要になりますさくらVPS(1G)は1年で1万円程度です。3倍早くて価格は4分の1なら、チープな私はさくらVPS以外選択余地がありません。

でも、拡張性を考えるとAmazon EC2も捨てがたいのです。

Python、初Django感想

Pythonはインデントプログラムブロックを表すます。他の言語のようにカッコを使いません。IFやFORを使ってインデントが深くなると、どんどん右寄りになってきて、全体的に斜めなプログラムが出来上がります最初は見慣れずに違和感を感じましたが、慣れればそうでもありません。

ただ、ネストしたIFでインデントが深くなりすぎると、インデントの位置で意図しない結果が出るので注意が必要です。慣れてしまえば、使いやす言語です。

Djangoは良いフレームワークだと思いますモデル定義してしまえば、モデルメンテナンスを行う、管理画面が一緒に生成されますテンプレートタグなどを自作すれば、かなり深いところまで手を加えることが可能です。慣れれば扱いも楽なので個人的には気に入っています

今後について

「おなりん」は、まだ作ったばっかりで、テストもまだ十分に行えていません。ですので皆様にも使っていただき、問題点があれば教えて頂きたいと思っています。開発しているマシンmacなのでIE系のテストは皆無です。IEの方、ぜひともレポートをください。

レポート感想などがありましたら、「おなりん」のサイトの下にある「お問い合わせ」リンクから送付をお願いします。また、巡回してほしいサイトも募集しています。ただし、日本国法律に準拠したサイトに限らさせて頂きます

機能的に今後は、画像の人気ランキング機能を組み込む予定です。また、サイト運営の足しにしたいのでひっそりと広告を入れます

また、リクエストがあれば、ソースコードGithubに公開したいと考えています

長文を読んでいただき、ありがとうございました。

2013-06-14

ちょっと前に話題になってたRaspberry Piムック本付き

追加販売されていたので買ってしまったでござるよ。

家にArduinoとPandaboardESとADKがあるが、

上記の代物はAndroidカーネルドライバーで開発したいことがあったので弄り回した後、

埃をかぶってるという。同じ運命になりそうな...

webサーバーの構築?

ロボットのMCC?

なんか長続きできるものを探してみよう。

http://itpro.nikkeibp.co.jp/linux/raspi/

2013-02-11

無職になって暇だからWebサービス作った

もうすぐ30歳になるのに、昨年末職場がなくなりハローワークに行っても求人が無いので

PHP ruby Nginx WordPress Bootstrap を使ってWebサービス作りました

作ったサイト

SKE48過去ブログ

http://skeblog.48matome.com/

名古屋栄を拠点に活動しているアイドルグループ

SKE48オフィシャルブログを保存して表示するサービス

なぜ作ったのか

今までバックエンドしか作ったことがなく、フロントエンドをやりたかった。

趣味でやっていて目標の物を作ったら満足し、継続してやらない。

なので今まで覚えてた事を忘れて一からやり直す事が多かった。

じゃあ。仕事決まるまで毎日触ってればいいんじゃね?

とゆう勢いで…

Rubyも覚えたかった…

構成

Bootswatch

PHP Simple HTML DOM Parser

Mechanize

スクレイピング

■対象ブログ仕様

  • 最新記事のみ無料で閲覧可能
  • RSSで全文を取得出来ない。

スクレイピングしなきゃ!

いつもスクレイピングSimple HTML DOM Parser

メモリとかエラー処理をしないと。

ここでRubyに同じようなのが無いか検索

http://t-taira.hatenablog.com/entry/20120429/1335658939

「なにこれRubyすごいこんな数行で」

ここからドットインストールRuby勉強しました。

Rubyの読みやすさと書きやすさに感動。

RubyスクレイピングしたデータMYSQLに保存までは完成。

どうやって表示しよう…

次はサイトをどうしようかと考え…

cakePHPかな…

Zend Frameworkかな…

いや!ブログ掲載するんだからCMSだ!

WordPressに決定。

デザイン

一番時間がかかった…

デザインは昔からまったく出来なかったので Bootstrap に。

そして検索して見つけたのがBootstrapのテーマ

  • Bootswatch

http://bootswatch.com/

デザインが出来ないから仕方ない!

http://dotinstall.com/

ドットインストールでBootstrapを勉強しました。

WordPressテーマ

デザインWordPressテーマに変換

http://webdesignrecipes.com/first-time-wordpress-origin-theme/

ここを見ながらテーマに落としていくのは簡単でした。

カテゴリでページングなどするために関数を追加

http://elearn.jp/wpman/

WordPress初めてなのですごく参考になりました。

Webサーバー

Apacheテスト環境テストすると表示が遅すぎる…

nginx高速化出来るみたい。

http://kray.jp/blog/wordpress-tuning/

http://tech.aainc.co.jp/archives/3022

nginxシンプルな設定ファイルに感動

まとめ

Webサービスを作って公開するのが、こんなに楽しいとは思わなかった。

特に今回作成したもの自分必要とするものだったので。

次はCakePHPとかフレームワークを覚えて新しいサービスを作りたい。

ruby on railsもいいな

でも、早く再就職したいです…

2013-01-28

実用的なエロサイト作りました

世界的ですもんね          

  乗るしかない

    このビッグウェーブに!(AA略

  

こんにちは

最近エロサイト作ってみた。みたいなエントリがすごい多いですよね。こんなエントリがあるくらい『最近流行の「エロサイト作ってみました」をいったん整理する http://anond.hatelabo.jp/20130124061507 』。

僕が知ってるだけで5個くらいそんなエントリを見た気がします。エロサイト作りのビッグウェーブが来ている!!エロサイトなら僕にも作れそう!そこで、このエロサイトビッグウェーブに乗るために僕も作ってみました!この手のエントリ食傷ぎみの方はすいません。。

http://www.xvideos-av.com/

『xvideos将軍

名前シンプルインパクトのあるものにしようと思い、時代物が好きなので『xvideos大臣』『xvideos関白』『xvideos将軍』の3つで悩んだのですが、この中で1番偉いのは将軍だろうということで、将軍しました(今考えたら関白のほうが偉い気がしてきました)。

まあとにかく、これで僕もアフィリエイト年収150万円を稼いで社畜脱出してイケダハヤト師のように生きれるはずです!やったね!年収150万円で僕らは自由に生きていくんだよ!

コンセプト

サイトのコンセプトはスバリ【実用性】です。

  

上記のまとめに登場するエロサイト技術的に高度なことをやっていたり、かなり綺麗なUIだったりします。それはそれで素晴らしいのですが、はたしてそんなものがこの真冬に下半身裸な状態で見るエロサイト必要でしょうか?

可愛い子・好きなAV女優で抜ける』これがエロサイトに1番大切なことだと僕は思います

xvideos将軍は「エロサイトは好きなAV女優動画で抜ければ良い」という設計思想になっております。なのでデザインはお世辞にも綺麗と言えないですが、AV女優から結構な数の動画を探せるようになっています(例えば僕の大好きな鮎川なおちゃんだと22本の動画が登録されています)。動画毎日50本づつぐらい追加されるようになっていますので、ぜひみなさん好きなAV女優で楽しんで下さい。

xvideos将軍がオシャレエロサイト原理主義警鐘を鳴らせれば、と考えております

技術

技術的には特に大したことをしてないのですが、誰かの参考になるかもと思い一応のせておきます

アプリケーション rails3.2

特筆すべきところもないですが、普通にrailsを使って作りました現在動画数は1万件近く入ってるのですが、サーバーが貧弱なせいかそれぐらい入れると結構クエリによっては重くなるので、New Relicを使って重いところを調べて、キャッシュしたり遅延ロードしたりするようにしています。New Relicは初めて使ったのですがheroku場合本当にすぐ簡単に使い始められて素晴らしかったです。スマホ対応jpmobileをつかってスマホからアクセス場合は別のviewを読み込みようにしていますが、、なんかbootstrapがうまくできなくて今はひどいことになっております

webサーバー heroku

サーバーアダルト大丈夫日本サーバーがよくわからかったので、とりあえず海外のは大丈夫なんだよね?ということでherokuを使いました。もしherokuアダルト駄目だった場合すぐに移転するので教えてください。GMOクラウドアダルト大丈夫らしいのですが、一瞬使ってみて、コンソールとかが非常に使いづらかったので、お試し期間でやめました。

DB mysql Xeround Cloud Database

無料プランですが、これは貧弱すぎてやばいです。お金がなくて上位プランに変更できないですが、xvideos将軍を出した今となってはすぐにアフィリエイトで秒速で1億円稼ぐ予定なので変更できるはずです。

スクレイピング nokogiri

スクレイピングには敬愛するbabyshark http://d.hatena.ne.jp/inouetakuya/20121117/1353145846 でも使われているnokogiriを使っています。とにかく女優名にこだわって動画を保存したかったので、まず始めにAV女優名を全部スクレイピングして保存しました。現在3500人のAV女優が保存されていますAV女優ってたくさんいるんですね。ありがとうございます

その後女優名がのっている動画サイトを定期的にスクレイピングするようにしています。まだまだ動画が保存されていないAV女優もたくさんいるので、その辺は今後の課題です。あとリンク切れをおこしている動画も多少あるので、それを定期的に削除するようなコードも今書き中です。

デザイン twitter bootstrap

デザインはbootstrapのデフォルトなんですが、ずるいデザインテクニック https://speakerdeck.com/ken_c_lo/zurui-design に登場するズルい背景を使いました。背景をちょっと替えるだけで、かなり高級感が出るのでオススメです!背景はこちらのサイトから探せます(http://subtlepatterns.com/)

広告アフィリエイトDMM

広告全然かわからないので、とりあえず一番有名そうでAPIもあるDMMのを貼ってみました。動画の下には同じ女優が出ている作品をAPIを叩いてレコメンドするようにしてますエロサイトは儲からないってなんかで読んだので、結構広告ベタベタ貼ってみて、herokuちょっと課金してる分くらい稼げたらなーと思ってます

今後の課題

ユーザー動画タグ、出演女優名を登録できたりするようにしたら面白いのかなーと思っているのでそういった機能をつけたいです。「みんなで作るエロサイト」みたいな感じです。

・bootstrapがツンデレ過ぎて結構萎えてるスマホ対応をなんとかしたいです。

・あと、スーパーフリーエージェントになって秒速で1億円稼ぐのも最近流行ってるみたいなので、そっちのビッグウェーブにも乗りたいところですがうまくいってません。

最後

宣伝乙とか言われてしまうと思いますが、その通りなので言い返せません。でもせっかく作ったから多くの人に使ってもらえたら嬉しいじゃないですか!

最後までお読みいただきありがとうございました!!

xvideos将軍をよろしくお願いします。 http://www.xvideos-av.com/

2013-01-22

京大画像処理を学んだ僕が本気でエロWEBサービス作ったった

日々の妄想が出発点

facebookってなんなの!?

リア充DQNの知り合いが

可愛い女の子集団BBQしている写真をのっけてたり

昔好きだった女の子ブサメンとのデート写真をのっけていたり

ごごごごごっ

湧き上がる嫉妬心


あー

あんな可愛いおにゃのこセクロス出来たらさぞ幸せだろうな

モフッモフッ どぴゅっ

と多くの紳士淑女が妄想していた事でしょう


そんなおまいらの為にWEBサービス作りましたよ。っと

おまいらの夢、叶えちゃいなよ。っと

作成したサイト

おまいらの夢

http://omaira.info/

アイコン写真アップロードすると

似ているAV女優検索出来るWEBサービスです。

影響を受けたサイト

計量学習を用いた画像検索エンジンアニメ顔類似検索v3について

http://ultraist.hatenablog.com/entry/2013/01/09/215045

【これはスゴイ】誰もが知ってる歴史上の人物肖像画カラーに加工!!やたらと身近に感じられるようになった件

http://irorio.jp/asteroid-b-612/20121221/40981/

ゴミ回収ドライバーが作るエロWebサービス

http://anond.hatelabo.jp/20130120190550

本職の僕が負ける訳にはいかないぜww

システム構成

サーバーAWS

WEBサーバーEC2

SQLサーバー:RDS

PHPフレームワークcakePHP2.2

CSSフレームワークtwitter bootstrap

データベース : MySQL

インターフェースjQuery

画像処理ライブラリ

libpuzzle

http://www.pureftpd.org/project/libpuzzle


本当はもっとしっかりとした face.com とかの

認識システム(Facial Recognition System)に特化したライブラリを使いたかったのですが

実験してみたところそれなりの精度で結果が返ってきたので

とりあえずはこれで良いかな。

って感じです。

参考にしたサイト

ドットインストール

http://dotinstall.com/

cakePHP, twitter bootstrap, jquery など今回使った開発環境ほとんどを網羅しています

本当、このサイトはこれからWEBサービスを作る方は要チェックです。

cakePHPについて

これ超いいよ。最初覚えるのは大変だけどフレームワークは絶対に覚えるべき。

最近Ruby流行っているみたいですが、PHPの方が環境構築が楽な気がします。

Twitter BootStrapについて

これも超いいよ。

だけど同じようなデザインサイトが出来あがっちゃうので

そろそろ卒業したいな と思ってます

これもドットインストールを見ればすぐに使えるようになります

最後

今は、某企業ソーシャルゲームを影から支えるお仕事をしているサラリーマンの僕ですが

学生時代監視カメラ画像から人間の動きを追跡する研究なんかをやっていました。


その時はC,C+ とか 画像処理ソフトHALCONなんかを使ってゴリゴリコード書いていたんですけど

最近になってふと調べてみたら

今はphpでも良いライブラリが出ている事が分かったので

やるっきゃない!と作ってみました。

時間出来たらもっと精度高く顔検出出来るように改善していきます

楽しみにしていてくださいね

『おまいらの夢』をよろしくおねがいしま

http://omaira.info/

※第三者の写真アップロードをする時には、必ず本人の許可を貰うようにして下さい

-------------------------

1/24追記

公開後に感じた事を別記事にまとめました

http://anond.hatelabo.jp/20130124122021

アーカイブ ヘルプ
ログイン ユーザー登録
ようこそ ゲスト さん