PollDaddy.comを完成させます。 4つのアクションでのiPadバトル

iPad

1.先史時代



しばらくの間、私はfriendsaround.meスタートアップの開発を見てきました。 スタートアップのアイデアは、場所を参照するモバイルデバイスの所有者向けのソーシャルネットワークを立ち上げることです。 今、私が理解しているように、彼らはまだ開発プロセスにあります-まあ、それはポイントではありません。 私はそれをかなり受動的に観察し、したがって3月7日にのみ、彼らはiPadの形でメインの唯一の賞(またはむしろその購入に必要な量のiTunesギフトカード)で製品の最高のキャッチフレーズのコンテストを開催していることがわかりました。 競争は3月7日に終了し、私は以前に送信された現在のオプションを見て(そして私が気に入ったものを見つけられなかった)、いわば幸福を試みることにしました。 数分間の創造的な思考の後、いくつかのオプションが頭の中で回転し、その中で「Locate Friendship!」というスローガンに落ち着きました(しかし、簡単に、明確に、そしてビジネスで何をしたか。素晴らしいスローガン!)。 彼は彼を参加に送りました...





2.歴史



翌日、私のスローガンは私を失望させず、決勝で終わったことが判明しました-これは成功です:)!

決勝戦では、10人のファイナリストから最も人気のあるスローガンを選択するよう全員が招待されました。 投票はpolldaddy.comサービスを通じて行われましたが、その主なタスクは実際にはさまざまなタイプのヘッドを実施することでした。 そのため、公正な戦いを望んでいましたが、友人にキャンペーンメッセージを積極的に送信し始めました。 「デューズ」がサポートされた(読んでくれればありがとう)と私のバージョンの横にある声の列が徐々にrawい上がり、シリーズ「うーん、すでに私の頭の中に登場し始めているのに、なぜ別のiPhoneが必要なのですか?! お金を追加して、すぐにMacBookを購入した方がいいです!!! うーん、MacBookが必要なのはなぜですか?!)。 しかし、ここで最初の失望が私を待っていました...



まったく考え直さずに、彼は現在の状態の結果を見ることにもう一度決めました。 その後、再投票するだけで結果を見ることができました(「結果を表示」ボタンがすぐに表示されなかったため)。ページに移動して、再投票が不可能であると丁寧に報告されましたが、現在の結果が表示されました このページをもう一度訪れたときに、「投票してくれてありがとう!」という碑文を見たとき、私は驚きました。 「ああ、これはおそらくブラウザが異なるという事実によるものです...しかし、彼らは本当にIPによってブロックしないのですか?」-私の頭の中にフラッシュ-「まあ、どうですか?!」 3番目のブラウザから試してみました-別の音声-これはおそらく、Cookieによる再投票をブロックしていることを意味します... Chromeをingognitoモードで開きました(Cookieを保存していないようです)。 さらに、他の参加者からの目標の追加の性質から判断すると、この発見は私だけのものではないことが明らかになりました。

私は絶対に座ってブラウザを開いたり閉じたりして愚かな声を上げたくなかったので、コンテスト管理者に私の発見について正直に書いて、私は友達を興奮させ続けました。 同時に、私の参加を続けるための私の主な論点は、主催者、ウェブ/モバイル開発に携わっている(そしてスタートアップを間もなく立ち上げようとしている)人々すべてが、今のようにこの形式では、投票が開始する前に理にかなっていることを理解することです。 「おそらく彼らはまだIPを記録していて、ただちにすべての不正行為者を認識し、コンテストをごまかすためのより難しい追跡方法を思い付くのを止めたいだけです」-再び、私は単純に考えました...



その間、大会の決勝の2日目(3月9日)の終わりまでに、私のスローガンは2位になり、最初のスローガンにゆっくりと近づいていました(これは私の気持ちによると(正しいと判明したため)、ちょうど巻き上げられ、手動で巻き上げられました(120票あります) 3時間後に139を持っていますが、彼はまだ140を持っていますが、5分後には160)です。 コンテストの条件によると、3月10日に最も多く投票した参加者が勝者として宣言されました。 「3月10日」は実際には3月11日00時00分であると疑っていましたが、これは2つの方法で理解でき、今夜はスクリーンショットを撮った場合に備えて異常な動きが可能です。







翌朝目が覚めたとき、私は男たちの神経がまだ耐えられないことに気づきました、そして、絵はすでにこのように見えました:







結局のところ、約3万5千人(当時投票した4,100人のうち)は、お気に入りのスローガンに投票せずにその夜平和を見つけることができませんでした。

面白いのは、状況が不条理であるにも関わらず、参加者は「正直な」勝利を固く信じており、誰も何も疑わなかったということです(!)



その瞬間、私はPollDaddy.comサービスが「反対側から」であるものを見てそれに登録することに決めました(登録の利点は無料でした)。 そして彼は有料で無料のバージョンでした。 有料では、コンテストの結果をさまざまな方法で追跡でき、無料では何も許可されず、すべての参加者にすでに表示されていたほぼ同じ情報が表示されていました。 また、無料版では、PollDaddy.com自体のサイトへの小さなリンクが追加されました。 これは、私が添付したスクリーンショットに表示されるリンクです。

夜に起こった出来事に対して少なくとも何らかの反応を期待していた競技会の運営は、Twitterで「Guys! お気に入りのスローガンに投票してください! 今日は投票する最後のチャンスです!」(英語からの少し自由な翻訳)。 チートアカウントでの立場を何らかの形で明確にするために、私は再び政権を書き込もうとしました。もし彼らが何とか「最大」の投票数で参加者に賞を与えるつもりなら、私は自分の台本を書くこともできます。 数時間後、答えが出ないのを待った。どうやら、悪名高いiPadを誰が正確に手に入れたかは気にしていないようだ。



実際、その瞬間、私は私のリクエストに応えて投票した友人たちに最も不快でした(そして、その瞬間、彼らは私に腹を立てないように、そして結果がおそらく不正であるように私にも書いた)。 さらに、投票にチートする必要がなかったため、スポーツへの関心が浮かび始めました。Web開発者として最終的に試してみるのは面白かったです(さらに10人中2人がすでにこれを行っているためです。手:))。

もちろん、別の方法もありました。つまり、競争が終わるまで待って、賞がその「正当な」勝者を見つけてから、真実のために戦っている人々の群れに立ち、「私たちは欺かれました! iPadを正当な所有者に返却してください!!! 私は190の正直な票を獲得しました!!!!「だから、「誰かが私を非難するかもしれませんが、私はそのような人々の中にいないでしょう」というモットーの下で、彼は切望されたボタン「ページのソースを見る」を押しました...



3.チート







すべてが思ったより簡単になりました。 ボタン投票! 次のマークアップでした:



< input type ="button" onclick ="javascript:vote(2813361,0,1,0,10);" class ="button-blue-big" value ="Vote!" />



* This source code was highlighted with Source Code Highlighter .








投票()関数自体は次のようになりました。



function vote(id, poll_other, rand, poll_type, u) {

var answerString = '' ;

var otherText = '' ;



for (i = 0; i < document .formPoll.elements.length; i++) {

if ( document .formPoll.elements[i].type == "checkbox" || document .formPoll.elements[i].type == "radio" ) {

if ( document .formPoll.elements[i]. checked ) {

answerString += document .formPoll.elements[i].value + ',' ;

}

}

}



if (poll_other == 1) {

otherText = _$( 'PDI_OtherText' ).value;

}



if (answerString.length > 0 || otherText.length > 0) {

location.href = '/vote.php?va=' + u + '&pt=' + poll_type + '&r=' + rand + '&p=' + id + '&a=' + answerString + '&o=' + otherText;

} else {

alert( alert_no_answer );

}




* This source code was highlighted with Source Code Highlighter .








さて、すべてが明確なようです-マークされたラジオボタンの値(id)を取得し、残りのパラメーターとともに目的のアドレスに送信します。 変数randだけで混乱しましたが、これは何らかのランダム値を暗示しているようですが、同時に、ページをリロードしなかった量は常に0でした。

その後、HTTP GETリクエストを生成して同じアドレスに送信する小さなコンソールアプリケーション(私はC#を使用しました)を記述するだけでした。



static void Main( string [] args)

{

int repeat = (args.Length > 0) ? int .Parse(args[0]) : 1;

int sleepTime = 2000; //2 sec

int rand = 0;

string userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.2 (KHTML, like Gecko) Chrome/5.0.342.3 Safari/533.2" ;

int pollid = 2812840;

int voting_id = 13304535;



for ( int i = 0; i < repeat; i++)

{

Console .Write(i + " - " );

string query = "http://polldaddy.com/vote.php?va=10&pt=0&r=" + rand + "&p=" + pollid + "&a=" + voting_id + ",&o=" ;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query);

request.UserAgent = userAgent;

HttpWebResponse response;

response = (HttpWebResponse)request.GetResponse();

Console .Write(response.StatusCode);

Console .WriteLine( ". Waiting " + sleepTime/1000 + " seconds" );

Thread.Sleep(sleepTime);

}

Console .WriteLine( "Done" );

Console .ReadKey();

}




* This source code was highlighted with Source Code Highlighter .








書いた。 念のため、リクエスト間で2秒間一時停止しました。 起動:最初の要求はOK、2番目の要求はOK、3番目の要求は操作がタイムアウトしました。 なんてこった! もう一度始めます-同じこと-3番目の要求はパスしません。 リクエスト間の一時停止を10秒に増やしました。 助けにはなりません。 私はフィドラーに何が問題なのか見てみることにしました:







Fiddlerは、最初のページがHTTP結果302を返し、別のページにリダイレクトすることを示しましたが、リクエスト間のその他の違いに気付きませんでした。 request.AllowAutoRedirect = trueをコードに追加して、リクエストが自動的にリダイレクトされるようにします(ただし、原則としてこれはデフォルトでデフォルトである必要があります)-再び同じ結果。 幸運なことに、偶然、Fiddlerがオンになっていると、3番目のリクエストが(写真でわかるように)強烈に鳴り響き、4番目と5番目のパスなども偶然に判明した Fiddlerプロキシを通過するリクエストと通常の時間との違いを理解するために、主なことは、原則として詐欺師の準備ができていることです。 実行できました。



それにもかかわらず、私はそのような単純なソリューションにとどまりたくありませんでした。特にpolldaddy.comに登録してテスト投票を作成したとき、「CookieとIPでブロックする」オプションが表示されたので、 、何らかの奇妙な理由で、投票の主催者によって無視されました。 いつでも彼らはまだこのオプションを「発見」してチートを切り捨てることができることに気付いて、私は事前に準備することに決めました...当然、1万人に私の.NETアプリケーションを起動させることはできなかったので、私はjavascriptに傾倒し始めましたあるページを読み込むときにajax GETリクエストを送信し、より興味深いコンテンツを含む別のページにリダイレクトします。 したがって、一般的なリソースで同様のリンクを提供し、IPブロッキングの問題を解決できます。 ここではjQueryを使用してこのようなページを作成しましたが、最終的には役に立ちませんでした。



4.物語の終わり



私はそれをラップする準備ができていました、競争の終わりまでまだ約7時間残っていました。 競技会で開発されたゲームをプレイし、10票の優位性でトップに出るのはばかげているように見えました。 一度巻くので、巻く! 思って、最高速度でオンにしました。 しばらくして、別のIPを持つ別のマシンからラップを開始しました。 約30分後、「リーダー」の結果に追いつきました。 それでもこの時点で、政権は目を覚まし、この物語の最初の正しい決定を下しました。つまり、結果を表示する機能をオフにしました。 さらに3時間後、計算によると約5〜6千票を投じるべきだったのに、投票はまだ中止されていました。 彼らが後に彼らのツイッターを通じて表明した公式の理由は、投票の実践における矛盾です。



翌日、彼らは実際に新しいコンペを発表しました。それは単に愚かなことにTwitterで特定のメッセージを書くことから成り、勝者は書いた人からランダムに選ばれます。 もちろん、私はメッセージを書きましたが、このコンテストにはほとんど興味がありません。 ちなみに、必要に応じて参加することもできます-http://friendsaround.me/contest (勝つ場合は、賞品を届けるアメリカの住所が必要です-何かを書く場合、私はこれを手伝うことができます)。



最後に、主催者の1人が、マークアップに対する保護を事前に考えるのがなぜ難しいのかという私の質問に答えて、競争の準備のためにまったく分岐しなかったとツイートしました...まあ、少なくとも彼らはスタートアップをもっと真剣に立ち上げることを願っています...



UPD:ちなみに、折り返しの3回目以降のリクエストがFiddlerがオンのときにのみ行われた理由をまだ理解できていません。誰かが理由を教えてくれるとありがたいです...



All Articles