「Mozilla」を含む日記 RSS

はてなキーワード: Mozillaとは

2017-12-19

Mozilla炎上事件の補足情報

英語圏での出来事から日本では話題にならないのかな……、と思っていたら、CNET翻訳記事を出して若干燃えていたようだ。

https://japan.cnet.com/article/35112083/

http://b.hatena.ne.jp/entry/s/japan.cnet.com/article/35112083/


しかし、このCNET記事は原文記事(https://www.cnet.com/news/mozilla-backpedals-after-mr-robot-firefox-misstep/)の抄訳である。1つ重要情報が抜けている。

MozillaMr. Robotからお金をもらっていない」

少なくともMozilla側はそう主張している。

まり、この事件Mozillaお金に困ってやらかし事件というよりは、内輪ノリサプライズをしたらユーザーガチ切れされたと言う方が近い。

たこの後、Mozillaはこの炎上事件に関して公式謝罪をしている。

自身、このニュースを聞いた時はかなりショックを受けたし、無報酬だとしてもMozillaは明らかにやってはいけないことをしたと思う。

ただ不正確な情報で怒りを燃やすのは不毛なので若干出遅れしまったが補足情報を共有する。


Mozilla謝罪文クリエイティブ・コモンズライセンスっぽいしここに翻訳して置いておく。

なお、僕は英語が全くできない。よって以下に掲載するのはGoogle翻訳を少しだけ修正したものである

英語ができる方は原文を参照してほしい。

https://blog.mozilla.org/firefox/update-looking-glass-add/

更新:Looking Glass Add-on 2017年12月18日

私たちは自らの行動がコミュニティにどのような影響を与えるか十分に考えていませんでした。みなさんを失望させてしま申し訳ありません。

ここに至るまでの経緯

年間を通じて、FirefoxMr. Robotテレビ番組との関係が拡大させており、この関係の一環として、ユーザー番組視聴者を新しい方法で参加させるための無報酬の共同作業を開発しました。ファン番組に関連する代替リアリティゲームARG)の一環として、Firefoxを使ってパズルを解くことができます

どのように機能たか

環境設定で"Looking Glass"アドオンをオンにすることによって、番組ファンはこのゲームFirefox有効しました。有効してユーザーMr. RobotARGページに移動すると、パズルを進めるために必要な手がかりが明らかになります。 また有効時全てウェブサイトで、アドオン番組テーマに関連する単語リストに含まれテキストを数秒間反転させます

ユーザーにこのアドオンインストールする選択肢を与える代わりに、英語圏ユーザーに「Looking Glass」アドオンインストールしたFirefoxへとアップデートすることを押し付けました。 このアドオンは「OFF」に設定された状態インストールされ、明示的にユーザーがオンにしない限り、ユーザーエクスペリエンスに変更は加わりません。しかし追加されたのは事実です。とはいえオンにしても、ユーザーデータ収集されたり共有されたりすることはありませんでした。

この公開は、Firefoxコミュニティを通して浮上した懸念引き起こし私たち自身が抱く標準を満たしていませんでした。 我々は、導入の透明性やアドオン自動インストールする仕組みを支配するプロセスに関するフィードバックを受けました。 これに応じて、私たちはすぐに内部レビューを開始し、アドオンをより適切な説明更新し、Mr. Robot Looking Glassをアドオンサイトに通常のWebExtensionとして移行するプロセスを開始しました。 我々はまた、 パブリックリポジトリソースを共有しました。

私たちコミュニティ

コミュニティメンバーを混乱させたこと、失望させてしまたことを私たち謝罪します。みなさんのデータ個人情報収集または共有する意思や仕組みはなく、The Looking Glassがオプトイン式のユーザー有効化するプロモーションであったとはいえ、私たちはこのアドオンインストールユーザー選択させる必要がありました。

徹底的に

真の誓約フィードバックを聞くことだと私たち認識しています私たちはこれを直すために直ちに措置を講じ、技術的、法的および通信プロセス方針が将来的に更新されることを保証するために、正式な内部レビュー実施しています

みなさんのオンライン生活のために、信頼できる安全プラットフォーム提供する責任があることを、私たち真摯に受け止め常にユーザーの信頼を維持するよう努めます

私たちは原因究明のための分析をしており、プロセスに変更を加える予定です。 これらは公開され、おそらく1月中旬プロセス変更の公開リストリンクします。

Jascha Kaykas-Wolff、最高マーケティング責任者

2017-12-07

Firefox代替アドオンが見つからなくてつらい

自分Mozillaユーザの主導権を尊重する思想が好きでFirefoxを使っているので、他のブラウザをメインにするというのは解決にならない。

52ベースのESRは2018年6月までの命だし、Waterfoxは逆に新拡張が使えなくなるので難しい。

代替アドオンが見つからなくてかなりつらいアドオン

代替アドオンはあるが微妙

諦めたアドオン

感謝しか無いアドオン

早々にWebExtensionsに対応してくれて感謝しか無い。


アドオンサイト検索ってand検索できない?単語複数入れるとor検索になっているようでとても探しにくい。

アドオンとは関係ないが、爆速になったQuantumでも紀伊國屋書店サイトだけ異常に重い(特にショッピングカードなどログイン必要な部分)試しにChromeで開いたところ重くない。理由が分かる方がいたら教えてください。

激増している日本語ウィルスメール簡単対策

ここ最近楽天カードやらAppleやらを騙ったウィルスメールが急増しているのはご存知のことと思う。

今日などはAdobeを騙ったウィルスメールまで来ていた。

ところがこれらのメール対策はとっても簡単なのである

気づきであろうか、これらのメールメーラーは全て

Thunderbirdなのである、いやThunderbirdを騙っているだけかも知れぬ。

はい

Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0

で送られたメールを全て捨てるだけで対策完了である

今時Thunderbirdなど使っているような情弱メールなど、仮にウィルスでなくても捨ててokだ。

ぜひ振り分けルールに追加して欲しい。

2017-04-11

オライリーに出てくるフレンズ

参考:http://www.oreilly.com/animals.csp

2017-03-07

http://anond.hatelabo.jp/20170307075210

先日Mozillaが買収したとか言うPocketはどうだろう https://getpocket.com/

使い勝手Firefoxアドオン時代より悪化してきている気がするけど、対応プラットフォームは増えてる。

クリック一回で保存しておけるのとはてブに比べたら検索が速いのは美点。

EvernoteTumblrも工夫すればはてブと似たような用途で使えるかも。

ソーシャルブックマークサービスならはてなより老舗のhttps://del.icio.us/がまだサービスを続けているらしい。でもいま9年前に作ったアカウントを引っ張り出してきてログインを試みたけど入れてくれなかった。

そこから勢いを奪ったdiggがあって、更にそこから勢いを奪ったredditがあるけど、redditブックマーク用には使いづらい。

2017-02-20

[]補足)はてなブックマークホットエントリ入りしたドメイン2009年2012年

http://anond.hatelabo.jp/20170220005414 の1年間隔のデータ

はてなブックマークホットエントリ入りしたドメイン 2009年2012年

2009年3月2010年3月2011年3月2012年3月
291ドメイン319ドメイン383ドメイン372ドメイン
d.hatena.ne.jp(138)blog.livedoor.jp(103)blog.livedoor.jp(89)matome.naver.jp(102)
blog.livedoor.jp(67)d.hatena.ne.jp(75)d.hatena.ne.jp(73)blog.livedoor.jp(67)
anond.hatelabo.jp(50)hatenanews.com(27)togetter.com(40)d.hatena.ne.jp(53)
gigazine.net(39)www.lifehacker.jp(27)www.asahi.com(32)cookpad.com(47)
alfalfa.livedoor.biz(30)gigazine.net(26)gigazine.net(27)www.lifehacker.jp(32)
www.asahi.com(29)togetter.com(25)anond.hatelabo.jp(25)gigazine.net(24)
www.itmedia.co.jp(24)hamusoku.com(24)www.lifehacker.jp(23)togetter.com(22)
coliss.com(21)alfalfalfa.com(23)www.yomiuri.co.jp(19)coliss.com(15)
sankei.jp.msn.com(21)www.asahi.com(22)www.youtube.com(18)www.yomiuri.co.jp(15)
www.ideaxidea.com(19)anond.hatelabo.jp(19)jp.techcrunch.com(17)wol.nikkeibp.co.jp(12)
www.yomiuri.co.jp(17)business.nikkeibp.co.jp(16)sankei.jp.msn.com(15)photoshopvip.net(11)
news4vip.livedoor.biz(16)sankei.jp.msn.com(15)twitpic.com(15)anond.hatelabo.jp(9)
phpspot.org(16)www.itmedia.co.jp(15)ameblo.jp(14)jp.techcrunch.com(9)
www.lifehacker.jp(15)jp.techcrunch.com(14)hamusoku.com(14)www.gizmodo.jp(8)
japan.cnet.com(11)www.yomiuri.co.jp(12)alfalfalfa.com(12)www.moneyhuck.com(8)
itpro.nikkeibp.co.jp(10)news4vip.livedoor.biz(11)coliss.com(12)alfalfalfa.com(7)
urasoku.blog106.fc2.com(10)japanese.engadget.com(10)news020.blog13.fc2.com(12)bukupe.com(7)
ameblo.jp(9)kirik.tea-nifty.com(10)news4vip.livedoor.biz(11)hatenanews.com(7)
portal.nifty.com(9)phpspot.org(10)phpspot.org(11)kirik.tea-nifty.com(7)
www.atmarkit.co.jp(9)r.nanapi.jp(10)hatenanews.com(10)labaq.com(7)
business.nikkeibp.co.jp(8)www.ideaxidea.com(10)www.gizmodo.jp(9)news.mynavi.jp(7)
e0166.blog89.fc2.com(8)readingmonkey.blog45.fc2.com(9)www.itmedia.co.jp(9)w3q.jp(7)
headlines.yahoo.co.jp(8)coliss.com(8)e0166.blog89.fc2.com(8)www.asahi.com(7)
techblog.yahoo.co.jp(8)diamond.jp(7)matome.naver.jp(8)ameblo.jp(6)
himasoku123.blog61.fc2.com(7)e0166.blog89.fc2.com(7)www.publickey1.jp(8)kachibito.net(6)
japanese.engadget.com(7)kachibito.net(7)blog.goo.ne.jp(7)www.danshihack.com(6)
news23vip.blog109.fc2.com(7)photoshopvip.net(7)i.2chblog.jp(7)www.itmedia.co.jp(6)
wiredvision.jp(7)workingnews.blog117.fc2.com(7)mainichi.jp(7)www.publickey1.jp(6)
kanasoku.blog82.fc2.com(6)www.appbank.net(7)www.nikkei.com(7)www.slideshare.net(6)
www.100shiki.com(6)japan.cnet.com(6)www.jiji.com(6)business.nikkeibp.co.jp(5)
www.gizmodo.jp(6)journal.mycom.co.jp(6)yaraon.blog109.fc2.com(6)chaos2ch.com(5)
www.moongift.jp(6)mudainodqnment.blog35.fc2.com(6)japanese.engadget.com(5)hamusoku.com(5)
blog.goo.ne.jp(5)satoshi.blogs.com(6)kirik.tea-nifty.com(5)karapaia.livedoor.biz(5)
jp.techcrunch.com(5)www.gizmodo.jp(6)twitter.com(5)kyoko-np.net(5)
labaq.com(5)www.oshiete-kun.net(6)umashika-news.jp(5)mainichi.jp(5)
newsteam.blog95.fc2.com(5)blog.goo.ne.jp(5)agora-web.jp(4)mudainodqnment.ldblog.jp(5)
www.nicovideo.jp(5)blogs.itmedia.co.jp(5)dailynewsagency.com(4)www.lastday.jp(5)
ascii.jp(4)burusoku-vip.com(5)designaholic.cc(4)www.nikkei.com(5)
blog.creamu.com(4)headlines.yahoo.co.jp(5)imonoblog.com(4)yusukebe.com(5)
detail.chiebukuro.yahoo.co.jp(4)mainichi.jp(5)kachibito.net(4)ascii.jp(4)
diamond.jp(4)takagi-hiromitsu.jp(5)mamesoku.com(4)blog.goo.ne.jp(4)
finalvent.cocolog-nifty.com(4)waranote.blog76.fc2.com(5)photoshopvip.net(4)diamond.jp(4)
jibun.atmarkit.co.jp(4)www.atmarkit.co.jp(5)portal.nifty.com(4)itpro.nikkeibp.co.jp(4)
mozilla-remix.seesaa.net(4)www.publickey1.jp(5)rocketnews24.com(4)japanese.engadget.com(4)
mudainodqnment.blog35.fc2.com(4)digimaga.net(4)www.47news.jp(4)portal.nifty.com(4)
nippondanji.blogspot.com(4)ikedanobuo.livedoor.biz(4)www.atmarkit.co.jp(4)waiwaienglish.com(4)
workingnews.blog117.fc2.com(4)kanasoku.blog82.fc2.com(4)www.wakatta-blog.com(4)blog.omiyageya-san.com(3)
www.designwalker.com(4)labaq.com(4)20kaido.com(3)blogos.com(3)
www.j-cast.com(4)mojix.org(4)2r.ldblog.jp(3)blogs.bizmakoto.jp(3)
bb.watch.impress.co.jp(3)newsteam.livedoor.biz(4)atmc.jp(3)e0166.blog89.fc2.com(3)
blog.64p.org(3)portal.nifty.com(4)getnews.jp(3)fta7.jp(3)
cyblog.jp(3)twitpic.com(4)hatena.fut573.com(3)internet.watch.impress.co.jp(3)
guideline.livedoor.biz(3)twitter.com(4)ikedanobuo.livedoor.biz(3)japan.cnet.com(3)
it.nikkei.co.jp(3)www.publickey.jp(4)itpro.nikkeibp.co.jp(3)kanchigai.blog.shinobi.jp(3)
journal.mycom.co.jp(3) japan.cnet.com(3)kazoo1837.blog23.fc2.com(3)
lifehacking.jp(3) jbpress.ismedia.jp(3)kosstyle.blog16.fc2.com(3)
markezine.jp(3) kyoumoe.hatenablog.com(3)maka-veli.com(3)
mereco.hatenadiary.com(3) news.livedoor.com(3)michaelsan.livedoor.biz(3)
monojin.com(3) ottyanko.at.webry.info(3)neetetsu.com(3)
plusd.itmedia.co.jp(3) php6.jp(3)news020.blog13.fc2.com(3)
q.hatena.ne.jp(3) sadadad54.hateblo.jp(3)rootport.hateblo.jp(3)
slashdot.jp(3) sites.google.com(3)wired.jp(3)
tokuna.blog40.fc2.com(3) weboook.blog22.fc2.com(3)www.aoky.net(3)
twitter.g.hatena.ne.jp(3) www.earthinus.com(3)www.koibook.info(3)
www.akiyan.com(3) www.taro.org(3)www.landerblue.co.jp(3)
www.nikkei.co.jp(3) www.tokyo-np.co.jp(3)www.moongift.jp(3)
www.yukawanet.com(3) www.webcreatorbox.com(3)www.negisoku.com(3)
   www.youtube.com(3)
   youpouch.com(3)
   zasshi.news.yahoo.co.jp(3)

(※カッコ内は回数)

毎年3月の全ホットエントリhttp://b.hatena.ne.jp/hotentry/20050215 から取得。タイルレイアウトで取得したので1日49件×31日で月間合計1519件弱のデータを基にしている。重複はuniqで取り除いてある。

2017-01-09

最高の無料メールクライアント2017

GmailOutlookのようなウェブメールサービスを利用すれば、すべてのデバイス簡単メールアクセスモバイルアプリ提供できますが、それらのメールサービスあなたデスクトップでの動作保証するでしょうか? 

今は、多くの人が複数メールアカウントを持っている。これらのアカウントが異なるプロバイダ使用している場合は、一度に複数ブラウザタブを開く必要があります

便利な場所にすべてのメッセージを集約するだけでなく、優れた電子メールクライアントは、暗号化カレンダーRSSフィードVoIPアプリケーションとの統合などの機能を追加できます

デスクトップクライアントメールローカルに保存することもできるため、オフラインときアーカイブされたメッセージアクセスしたり、貴重なバックアップ提供することができます

eMクライアント

さまざまな電子メールプロバイダ統合されたチャットサポートする最高の電子メールクライアント

eM Client10年近く前から始まっています。その長い開発により、Windows用の最高の電子メールクライアントに発展することができたんや。

無料版は非営利目的使用と2つの電子メールアカウント限定されますが、それ以外の場合は有料版とおんなじ。

eM Clientには、GmailExchangeiCloudおよびOutlook.comタッチコントロール、高速検索統合カレンダーおよび連絡先のサポートが含まれてん。JabberGoogle Chatなどの一般的な標準をサポートする統合されたチャットアプリもあり、Outlookのような重量のあるアプリには良い選択肢ですわ。

Mailbird Lite

あなたメッセージを補う機能が満載されたすばらしいメールクライアント

Mailbird Liteは単なる電子メールアプリではなく、スケジューリングチャットファイル同期、チームワークのためのアプリケーションを追加できるコミュニケーションプラットフォーム全体です。

Mailbirdをダウンロードした後は、Proバージョンの30日間試用版に対処されます。このバージョンは、月末にアップグレードしないことを選択した場合限定Light Editionにダウングレードされますフリークライアントには時間制限はありません。

無料ユーザーは、速読電子メールスヌーズ添付ファイルのクイックプレビューなどの機能を忘れていますが、Mailbird Liteは依然として優れた選択肢です。最大3つの電子メールアカウントサポートし、スピードに合わせて最適化され、起動時に最適です。

セットアップ簡単です。電子メールの詳細を入力すると、Mailbird Lite必要POPまたはIMAPの設定を自動的に見つけ、メッセージインポートを開始します。あなたFacebookアカウント接続することができるので、あなたの連絡先のプロフィール写真あなたの受信トレイ活性化し、WhatsappGoogleカレンダー無料タスクマネージャMoo.do、teamworking app Asanaにリンクすることもできます

Claws Mail

Claws Mailのシンプルインターフェースは、より自信を持ったユーザーに適した強力な電子メールツールです

Claws Mailは使いにくくはありませんが、独自メールフィルタリングに耐え、無制限電子メールアカウントサポートしたい経験豊富ユーザーに最適です。

ここの他のクライアントとは異なり、ClawsはユーザーPOP3 / IMAP設定を手動で設定する必要がありますGmail使用している場合は、Googleアカウントの設定を調整して、安全性の低いアプリケーションアクセス許可する必要があります

古くは現代電子メールクライアントでは、HTMLメッセージ送信するオプションはありません.Clawはプレーンテキストのみですが、不要機能を省略することで、Clawは驚異的なスピード動作します。その検索機能特に優れており、プラグイン経由でも拡張できます

それは最も美しい電子メールアプリケーションではありませんが、Clawsはあなたスタイルを超えて物質評価するならば、素晴らしい自由選択です。定期的に更新されているため、バグはすぐに除かれます

Inky

すべてのデバイスメール管理するためのワンタイム設定の無料メールクライアント

Inkyの無料版はWindowsMac OS X、およびAndroidで利用でき、ワンタイム設定は3つのプラットフォームすべてで使用するのに最適なメールクライアントになります! 

電子メールクライアントダウンロードしてインストールしたら、Inkyアカウント作成するよう求められます。これにより、すべての電子メールアドレスリンクされ、POPおよびIMAP設定を設定することなく、Inkyがインストールされた任意デバイスからアクセスできるんです! 

一度登録すればセットアップ簡単カンタン♪ 各アカウントユーザー名とパスワード入力すると、残りの部分をInkyが処理してくれちゃう

日常的に使用されるInkyは優れた自動タグ機能メッセージタイプ個人定期購読ソーシャルノートなど)のインテリジェントなフィルタリングデバイス間の非常に高速な検索クラウド同期でわんだふるん♪。

Windows 7以降を使用していて、特定メッセージスレッドを見つけようと多くの時間を費やしている場合、Inkyは膨大な時間節約できちゃうの!

Opera Mail

優れたOperaウェブブラウザの背後にあるチームからの柔軟なオープンソース電子メールクライアント

Opera開発者は、電子メールを常に優れたブラウザ重要機能とみなし、無料電子メールクライアントであるOpera Mailの開発に多大な努力を払ってきました。

その機能には、メッセージテンプレート特に業務用に便利)、メッセージフィルタリングソートタイプ別メッセージソート、さまざまなカスタマイズオプションがあります

クライアントRSSフィードインポートするので、Feedlyや欠けているGoogleリーダーなどのWebアプリケーションの代わりになります

Thunderbird

Mozillaから期待されるように、たくさんの機能があり、無料拡張機能を利用することもできます

Firefoxと同様に、無料電子メールクライアントThunderbirdMozilla Foundationによって作成されました(しかし、2つの開発はそれ以来分離されています)。 ウェブブラウザと同様に、その機能は、サードパーティアドオンの膨大な範囲拡張され、強化されます

優れたビルトイン機能には、電子メールには大きすぎるファイルと、電子メールと一緒にRSSニュースフィードを読む機能があります

セットアップ簡単です。 ほとんどの現代電子メールクライアントと同じように、必要なのはあなたユーザー名とパスワードだけで、Thunderbirdは残りのものを処理します。

Windows Liveメール

長い時を経てもまだ選択肢に残る老舗の電子メールクライアント

Windows Live Mailは、Windows 8および10のMailアプリケーションに取って代わられた2012年最後更新されました。ただし、Live Mailの比較昔ながらの外観にもかかわらず、2つのプログラムはほぼ同じです。

Windows Live Mailは、私たちを含む多くの電子メールユーザーがより現代的ですが、最小限のデザインを好む3ペインレイアウト提供します。 RSSクラウドベース電子メールPOP3サポートし、添付ファイル送信したり、複数アカウント作業したりすることが容易になります

マイクロソフトのやり方が気に入っても、ウルトラスリムWindows 10アプリケーションがあまりにも制限されているのを見つけたら、従来のWindows Live Mailは賢明選択肢です。

 

 *

 

http://www.techradar.com/news/the-best-free-email-client

2016-12-01

アマゾン(amazonaws.com)が提供しているヤフー広告不正クリックサービス

アマゾン(compute.amazonaws.com)による大量の不正クリックで頭を悩ませているアフィリエイトサイト運営者(まとめでもキュレーションでもない)は多いことだろう。

ASPのV社によると、これは「提携媒体様のサイト表記等のチェック」名目でのアクセスとのことだが、オーガニック検索で辿り着けるページだけでなく、広告出稿ページにまで広告経由で大量にやって来るから頭が痛い。しかも、課金されやすいように分単位ときには秒単位ユーザーエージェントホストを変更し、ひたすら同じ広告クリックし続ける。リファラーなど一切ない。

例えば、このような具合であるサイトに関わる部分は*****にさせてもらった)。

ec2-52-198-49-221.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:05:15 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

ec2-52-198-49-221.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:05:25 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"

ec2-52-198-222-214.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:05:35 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

ec2-52-198-169-39.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:05:44 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

ec2-52-197-86-194.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:05:45 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-199-76-193.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:26 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-69-168-106.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:30 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-69-168-106.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:32 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

ec2-52-199-85-63.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:38 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2"

ec2-52-198-49-221.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:39 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0"

ec2-52-198-49-221.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:06:39 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0)"

ec2-52-198-49-221.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:07:06 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

ec2-52-68-194-244.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:07:17 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

ec2-52-198-243-110.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:08:11 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"

ec2-52-198-243-110.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:08:25 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/32.0"

ec2-52-196-112-20.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:08:48 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"

ec2-52-193-171-45.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:08:54 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0"

ec2-52-198-169-39.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:08:58 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0"

ec2-52-198-169-39.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:09:02 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2"

ec2-52-192-198-30.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:09:04 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Win64; x64; Trident/6.0)"

ec2-52-193-171-45.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:09:40 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko"

ec2-52-197-156-176.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:09:46 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko"

ec2-52-196-112-20.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:10:16 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-199-44-248.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:10:25 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2"

ec2-52-69-168-106.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:10:32 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"

ec2-52-199-85-63.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:10:52 +0900] ***** "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-199-44-248.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:11:08 +0900] ***** "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)"

ec2-52-68-45-242.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:11:08 +0900] ***** "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"

ec2-52-69-169-154.ap-northeast-1.compute.amazonaws.com - - [14/Nov/2016:06:11:26 +0900] ***** "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36"


1日でクリックされる広告は多いときで2,000件を超え、ヤフーリスティング広告管理画面の「無効クリック数」にはたった1日で1,000件を超える無効クリックが計上される始末だ。残念ながらヤフーシステムでもすべてのamazonaws.comを無効にできず、クリック調査を依頼してわずかながら返金されるも、アマゾンによる不正クリックは数多くが課金計上され、支払っている。

この現状に気づいていないアフィリエイトサイト運営者も多いことだろう。たとえば商標で出稿するなどクライアントガイドライン違反している広告であればどんどんクリックしてもらって結構だし、むしろそのようなサイト不正クリックで是非潰して欲しいところでもある。

だが、普通に出稿している広告にこのような異常なクリックをされるとたまったものではない。

amazonaws.comの地域属性アメリカなので、では都道府県単位限定出稿しても、普通に変わらず大量に不正クリックされる。

広告を引っ込めるわけにもいかいから狙われないようにキーワードを絞り込もうとするも、管理画面でクリックされた検索クエリーを確認すると、それはもう満遍なく不正クリックされている。

提携媒体サイト表記チェック名目にしては数が膨大過ぎて迷惑だという旨をASPのV社に返信したが、それに対する返信はなく、要するに「我慢しろ」ということなのだろう。

それではと、不正クリックサービス提供元であるAmazon Web Services (AWS) のabuseにサーバーの生ログを添えて通報すると、通報から10日経った頃に返ってきたメールは、

> We were unable to identify the customer responsible for the reported activity.

だった。利用者特定できなかったらしい(そんなアホな)。

特定できなかった理由は、

> Due to the frequency with which AWS public IP addresses can change ownership

とのことで(バカか)、もはや不正クリック代行業者どもが泣いて喜びそうなお粗末な現状である

アフィリエイトサイト運営者は今すぐサーバーの生ログをチェックし、広告URLに異様な足跡が残っていないか確認すべきだろう。ヤフーリスティング広告場合不正クリックによる返金期限は過去60日しか遡れない。

何より、このアマゾンの野放しサービスはどうにかならんか。

あ、そうそう、最近ASKA話題のギフハブらしき痕跡もあった。

ec2-52-198-19-198.ap-northeast-1.compute.amazonaws.com - - [23/Aug/2016:18:09:45 +0900] "GET ***** HTTP/1.1" 200 27625 "-" "Mechanize/2.7.0 Ruby/2.0.0p451 (http://github.com/sparklemotion/mechanize/)"

このギフハブってアマゾン不正クリックを走らせるプログラムか何かなの?

2016-10-17

http://anond.hatelabo.jp/20161017210053

一瞬、Mozilla を思いついたが、あれはそこまでファイルマネージャとしては使えなかったな

Nautilus は逆にファイルマネージャとしては良いが、ブラウザとしてはゴミだし

2016-03-04

window.OBR = window.OBR||{};(function(OBR){window.OB_releaseVer="01000501";window.OBR=window.OBR||{};OBR.k=OBR.k||;OBR.La=OBR.La||{};window.OBR$=function(d){return document.getElementById(d)};OBR.d=OBR.d||function(){var d={},a={v:function(){return d},h:function(a){d.X=a;d.cb=;d.startTime=(new Date).getTime()},startTime:function(){return d.startTime},log:function(a){var e=((new Date).getTime()-d.startTime)/1E3;1E3>d.cb.length&&d.cb.push(e+" >"+a)},printLog:function(){if(d.X.c.dj)window.console.log(d.cb.join("\n"));else{var a=d.X.b.Ia();a&&(a.innerHTML=d.cb.join("
"),a.style.display="block")}return d.cb.join("\n")}};a.h(OBR);return a}();OBR.printLog=OBR.d.printLog;OBR.H=function(){this.J=[]};OBR.H.prototype.add=function(d,a){var c;"string"===typeof d&amp;&amp;"function"===typeof a&amp;&amp;(c={},c.name=d,c.ai=a,this.J.push(c))};OBR.H.prototype.Qf=function(d){var a,c;OBR.d.log("remove event :"+d);a=0;for(c=this.J.length;a<c;a+=1)if(this.J[a]&amp;&amp;this.J[a].name&amp;&amp;this.J[a].name===d)try{this.J.splice(a,1)}catch(e){OBR.d.log("rm evnt err: "+e)}};</p&gt;

OBR.H.prototype.o=function(d,a,c){var e,b,f,g;a=a||[];c=!!c;OBR.d.log("event fire:"+d);e=0;for(b=this.J.length;e<b;e+=1)if(f=this.J&amp;&amp;this.J[e]?this.J[e].name:"",g=this.J&amp;&amp;this.J[e]?this.J[e].ai:null,f===d&amp;&g)try{g.apply(this,a)}catch(h){OBR.d.log("fire event *"+d+"* error: "+h)}!0===c&amp;&amp;this.Qf(d)};OBR.H.prototype.sa=function(){this.J=[]};OBR.b=OBR.b||function(){var d={},a={},c=document,e=OBR,b=null;a.v=function(){d.X=e;return d};a.h=function(a){e=a};a.Ba=function(){return function(){}};a.Gi=function(){var a=window.jQuery;return void 0!==a?!(/1\.(0|1|2|3|4)\.(0|1)/.test(a.fn.jquery)||/^1\.1/.test(a.fn.jquery)||/^1\.2/.test(a.fn.jquery)||/^1\.3/.test(a.fn.jquery)):!1};a.F=function(a){return null===a||isNaN(a)?null:e.n("outbrain_widget_"+a)};a.Ia=function(){return e.n("ob_holder")};a.ne=function(f){var g=a.Ia();null===g&amp;&amp;(g=e.b.createElement("div",</p&gt;

"ob_holder"),g.style.display="none",f?e.b.insertBefore(g,f):document.body.appendChild(g));return g};a.Vc=function(){if(!e.n(e.c.Pb)){var f=e.b.createElement("iframe",e.c.Pb),g=f.style;g.display="none";g.width="1px";g.height="1px";f.src="about:blank";(g=a.Ia())||(g=a.Va());e.b.Q(f,g)}};a.Va=function(){if(c.body)return c.body;var a;a=e.b.K("","","body",!0);return 0>=a.length?c.lastChild:a[0]};a.createElement=function(a,g,b,e){var d;a=c.createElement(a);"string"===typeof g&amp;&amp;a.setAttribute("id",g);"string"===

typeof b&amp;&amp;(a.style.cssText=b);for(d in e)e.hasOwnProperty(d)&amp;&amp;a.setAttribute(d,e[d]);return a};a.G=function(a){if(e.c.$d===e.c.Od)try{c.createStyleSheet().cssText=a}catch(g){OBR.d.log(g)}else{var b=c.createElement("style"),d=c.body?"string"===typeof c.body.style.WebkitAppearance:!1;b.type="text/css";c.getElementsByTagName("head")[0].appendChild(b);b[d?"innerText":"innerHTML"]=a}};a.N=function(a,g,b,d){var m=c.createElement("script");m.type=e.c.wj;m.src=a;m.charset="UTF-8";m.async=!!g;m.defer=!1;b&amp;&amp;

e.b.s(m,"load",function(a){var f=a.target;f&amp;&amp;setTimeout(function(){f.parentNode.removeChild(f)},3E3)});d&amp;&amp;e.b.s(m,"load",d);return m};a.Cl=function(a,g){var b=e.b.createElement("link",a);b.setAttribute("rel","stylesheet");b.setAttribute("type",e.c.Eh);g&amp;&amp;b.setAttribute("href",g);return b};a.ih=function(a){var g=e.n("ob_iframe");g&amp;&amp;(g.src=a)};a.Hf=function(){var a;a=isNaN(a)?1E5:a;return Math.floor(Math.random()*a)};a.nk=function(a,g,b){return a.replace(g,b)};a.Ll=function(){var f;if(f=OBR.n("objsonpp"))if(a.kj())a.Ka(f.parentNode)&amp;&amp;

f.parentNode.removeChild(f);else return OBR.n("objsonpp");f=c.createElement("iframe");f.id="objsonpp";f.tk&amp;&amp;(f.tk="seamless");(f.frameElement||f).style.cssText="width: 0; height: 0; border: 0";f.src="";c.body.appendChild(f);return f};a.R=function(a){var g,b;b=c.getElementsByTagName("head");try{b&amp;&amp;0<b.length?b[0].insertBefore(a,b[0].firstChild):(g=c.getElementsByTagName("script"),g[0].insertBefore(a,g[0].firstChild))}catch(d){e.d.log("Err insertToHead:"+d)}};a.Kl=function(a){a=a||OBR;return"function"!==</p&gt;

typeof a.H?(OBR.d.log("namespace.EventManager not function"),null):new a.H};a.O=function(a){return encodeURIComponent(a)};a.Ka=function(a){return null!==a};a.pj=function(f){var b,c=!1;if(a.Zc(f))return!1;b=f.Oe().recMode||"";f=f.Oe().dynamicWidgetLayout||"";b=e.c.rk[b]||"";"2"===b&amp;&amp;"1"===(e.c.sk[f]||"")&amp;&amp;(c=!0);c||"1"!==b&amp;&amp;"3"!==b||(c=!0);return c};a.Zc=function(a){return void 0===a||null===a};a.tj=function(b){return a.Zc(b)||""===b};a.getElementsByClassName=function(b,g){g||(g=document);return g.getElementsByClassName?

g.getElementsByClassName(b):a.K("class",b,"*",!0,!0,g)};a.K=function(b,g,e,d,m,l){var p,q,n;p=[];e=e||"*";d=!!d;m=!!a.tj(m);e=l?l.getElementsByTagName(e):c.getElementsByTagName(e);l=0;for(q=e.length;l<q;l+=1)n="class"===b?e[l].className:e[l].getAttribute(b),null!==n&amp;&amp;(!1===m&amp;&amp;(n=n.toLowerCase(),g=g.toLowerCase()),(n=""===b?!0:d?-1<n.indexOf(g):n===g)&amp;&amp;p.push(e[l]));return p};a.Wb=function(a,b,c){a.detachEvent?a.detachEvent("on"+b,c):a.removeEventListener&amp;&amp;a.removeEventListener(b,c,!1)};a.s=function(a,</p&gt;

b,c){a.attachEvent?a.attachEvent("on"+b,function(){c.call(a)}):a.addEventListener&amp;&amp;a.addEventListener(b,c,!1)};a.Q=function(a,b){try{b.appendChild(a)}catch(c){e.d.log("Fail insert into Dom:"+c)}};a.lb=function(b){b=e.n(b);!a.Zc(b)&amp;&amp;a.Ka(b.parentNode)&amp;&amp;b.parentNode.removeChild(b)};a.insertBefore=function(a,b){return b.parentNode.insertBefore(a,b)};a.isArray=function(a){return a instanceof Array?!0:"[object Array]"===Object.prototype.toString.call(a)};a.sb=function(a,b){var c=/htt(p|ps)?:\/\/127\.0\.0\.1(:\d\d\d\d)?/i;

return/^htt(p|ps)?:\/\/([\w\-]*|[\w\-]*\.[\w\-]*)\.outbrain\.com(:\d\d\d\d)?/i.test(a)||c.test(a)?a:b};a.al=function(a){a=a.replace(/^(\s*)/g,"");var b=c.createElement("div");b.innerHTML=a;return b.childNodes};a.Ua=function(a,b){return a?a.getAttribute(b):null};a.xa=function(a,b,c){a&amp;&amp;a.setAttribute(b,c)};a.I=function(a,b){var c=RegExp("[ '\"|]"+b+"[ '\"|]");a&amp;&amp;!c.test("|"+a.className+"|")&amp;&amp;(a.className+=" "+b)};a.ma=function(a,b){a&amp;&amp;typeof b===e.c.$k&amp;&amp;(a.classList?a.classList.remove(b):a.className=

a.className.replace(RegExp("(^|\\b)"+b+"(\\b|$)","gi")," "))};a.$=function(a,b){a=a.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");var c,e;try{return c=RegExp("[\\?&amp;]"+a+"=([^&amp;#]*)","i"),e=c.exec(decodeURIComponent(window.location.href.replace(/\+/g," "))),null===e?b:e[1]}catch(d){return b}};a.sh=function(a){"string"===typeof a&amp;&amp;0<a.indexOf("#")&amp;&amp;(a=a.substr(0,a.lastIndexOf("#")));return a};a.ie=function(a){var b=e.c.ga+"/strip_default.png";a.src!==b&amp;&amp;(a.alt="",a.title="",a.src=b)};a.Oh=function(){var a=</p&gt;

null,b,e,d=null;if("string"===typeof window.OB_MP_feed)a=window.OB_MP_feed;else if((b=c.getElementsByTagName("head"))&amp;&amp;0<b.length)for(e=b[0].getElementsByTagName("link"),b=0;b<e.length;b+=1)if(d=e[b],null!==d.type&amp;&amp;("application/rss+xml"===d.type||"application/atom+xml"===d.type)&amp;&amp;null!==d.href&amp;&amp;""!==d.href){a=d.href;break}return a};a.D=function(a,b){var c=null;a.currentStyle?c=a.currentStyle[b]:window.getComputedStyle&amp;&amp;(c=document.defaultView.getComputedStyle(a,null).getPropertyValue(b));return c};</p&gt;

a.xk=function(){var b=a.Ia(),g,c;a.Ka(b)&amp;&amp;(g=e.b.createElement("span","ob_a"),a.insertBefore(g,b),g.innerHTML=".",c=a.D(g,"color"),a.lb("ob_a"),g=e.b.createElement("a","ob_a"),g.setAttribute("href","void(0)"),g.innerHTML=".",a.insertBefore(g,b),b=a.D(g,"color"),a.lb("ob_a"),c="rgb(0, 0, 0)"===c||"#000000"===c?"#555":c,a.G(".ob-tcolor{color:"+c+"} .ob-lcolor{color:"+b+"} .ob-bgtcolor{background-color:"+c+"} .item-link-container:hover .ob-tcolor{border-color:"+c+"} "+(document.addEventListener?"":".odb_li:hover .ob-zapping-icon,.odb_div:hover .ob-zapping-icon,.item-container:hover .ob-zapping-icon,.ob-dynamic-rec-container:hover .ob-zapping-icon,.odb_li:hover .ob-textual-zapping-icon,.odb_div:hover .ob-textual-zapping-icon,.item-container:hover .ob-textual-zapping-icon,.ob-dynamic-rec-container:hover .ob-textual-zapping-icon{display:none !important;}")))};

a.Ke=function(b){var g=a.Ie("property","og:url","meta","content");null===g&amp;&amp;(g=a.Ie("rel","canonical","link","href"));null!==g||b||(g=window.location.href);null===g&amp;&amp;(g="");return g};a.Ie=function(b,g,c,e){var d=null;b=a.K(b,g,c,!1);null!==b&amp;&amp;0<b.length&amp;&amp;(d=b[0].getAttribute(e));return d};a.jh=function(b){var g,c,d;g=b.g("tracking",!1);c=b.g("comScoreEnabled",!0);d=e.c.je;!1===g&amp;&amp;(!0===c&amp;&amp;!1===d&amp;&amp;!b.Pe())&amp;&amp;(a.Vc(),g=b.q("pid",""),b=e.n(e.c.Pb))&amp;&amp;(b.src=e.c.ga+"/"+e.c.Ub+"3rd/comScore/comScore.htm#pid="+</p&gt;

g,e.c.je=!0)};a.Ei=function(){var b=a.Lb(8);"string"===typeof window.name&amp;&amp;(""===window.name||-1<window.name.indexOf("frame"))?(window.name=b,b=window.name):"string"===typeof window.name&amp;&amp;""!==window.name&amp;&amp;(b=window.name);return b=e.b.O(b.substring(0,9))};a.Lb=function(a){var b,c;b=[];a="number"===typeof a?a:8;for(c=0;c<a;c+=1)b.push("0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz".charAt(Math.floor(61*Math.random())));return b.join("")};a.me=function(a){for(var b="",c=0;c<a.length;c++)b=</p&gt;

b.concat(a[c]?"1":"0");return parseInt(b,2)};a.Xc=function(b){var g=b.getElementsByTagName("a")[0];if(null===b.offsetParent||0===b.offsetHeight||0===b.offsetWidth||0===b.clientHeight||0===b.clientWidth||"none"===a.D(b,"display")||"hidden"===a.D(b,"visibility"))return!1;var c=parseInt(a.D(b,"padding-top"),10)+parseInt(a.D(b,"padding-bottom"),10);return 0===b.clientHeight-c||g&amp;&amp;"none"===a.D(g,"display")?!1:!0};a.Oc=function(a){for(var b in e.La)if(e.La.hasOwnProperty(b)&amp;&amp;e.La[b].l===a)return e.La[b];

return null};a.Rl=function(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};a.Ga=function(a,b){return"function"!==typeof a?null:void 0===b?a():a(b)};a.kj=function(){return"Microsoft Internet Explorer"===navigator.appName};a.Fh=function(a,b){return a*b};a.Ge=function(a){if(!a||""===a)return[];a=a.replace("","").replace("http://","").replace("https://","").replace("www.","").replace("www2.","").split("/");a.pop();return 0<a.length?a:[]};a.ki=function(b,g){var c=a.Ge(b),e=[],d="";if(g>=c.length)d=

c.join(".");else{e[0]=c[0];for(d=1;d<=g;d+=1)e[d]=c[d];d=e.join(".")}return d};a.ti=function(){return"http"+("https:"===c.location.protocol?"s":"")};a.si=function(){var b,g;b=c.getElementById("widgetVersionSync");null===b&amp;&amp;(b=a.createElement("iframe","widgetVersionSync"),g=a.createElement("div",null,"display:none; height:0px; width:0px; border:none;"),g.appendChild(b),a.Va().appendChild(g));return b};a.ql=function(b){var g;g=window.OB_releaseVer;isNaN(g)||(isNaN(b)||g>=b)||(b=a.ti()+"://widgets.outbrain.com/external/sync/outbrainjs.html?needToBeVer="+

b.toString(),g=a.si(),g.src=b)};a.Sg=function(b){b=b.g("widgetVersionSync",0);isNaN(b)||""===b||(b=parseInt(b,10)||0,a.ql(b))};d.Rc=function(){if(b)return b;var a;try{var g=window.localStorage;g.setItem("OBtst","");g.removeItem("OBtst");a=g}catch(c){a={$b:{},setItem:function(a,b){this.$b[a]=b},removeItem:function(a){this.$b[a]=void 0},getItem:function(a){return"undefined"!==typeof this.$b[a]?this.$b[a]:null}}}return b=a};a.hg=function(a,b){d.Rc().setItem(a,b)};a.Qc=function(a){return(a=d.Rc().getItem(a))?

a:null};a.Gh=function(){d.Rc().removeItem("OB-USER-TOKEN")};a.h(OBR);return a}();OBR.ya=function(d,a,c,e,b,f,g,h,k){var m,l;m=this;l=0;k="function"===typeof k?k:OBR.b.Fh;m.start=function(){var p;l+=1;OBR.b.Ga(d,l)?OBR.b.Ga(a,l):(p=OBR.b.Ga(h,l))?OBR.b.Ga(e,l):(p=l===f&amp;&amp;1E3!==f)?OBR.b.Ga(e,l):(OBR.b.Ga(c,l),p=g?k(l,b):b,setTimeout(function(){m.start()},p))};m.start()};OBR.re=OBR.re||{fj:function(){return"complete"===document.readyState}};

OBR.Hc=function(){var d={},a=[];d.add=function(c){a.push(c)};d.remove=function(c){a.splice(c,1)};d.top=function(){return 0<a.length?a.shift():null};d.jj=function(){return 0>=a.length};d.Jl=function(){return a};d.qh=function(){a=[]};return d};

OBR.Ra=function(){function d(e,b){a.pb="resolve"===e?function(a){a&amp;&amp;a(b)}:function(a,g){g&amp;&g(b)};a.Pa=a.kk=function(){throw Error("Promise already completed.");};for(var f,g=0;f=c[g++];)f[e]&amp;&amp;f[e](b);delete c}var a={},c=[];a.pb=function(a,b){c.push({resolve:a,reject:b})};a.Pa=function(a){d("resolve",a)};a.kk=function(a){d("reject",a)};return a};

OBR.Ag=function(d){var a={},c=null,e,b;a.onClickOrAutoplay=void 0;a.onDisplayReady=void 0;a.onError=void 0;a.fetch=function(a){null===c?(c=a,b&amp;&amp;b(c,this),b=null):(c=a,OBR.Ja.of([this]))};a.shown=function(a){e=a;OBR.Ja&amp;&amp;OBR.Ja.pl(d.widgetId,d.playerId,e)};a.stopTimer=function(){if(this.tg){window.clearInterval(this.tg);var a=document.querySelector('[data-ob-player-id="'+d.playerId+'"] .timerNumber');a&amp;&amp;(a.textContent=a.parentElement.getAttribute("data-time"))}};a.placed=function(){OBR.Ja.ol(d.playerId)};

a.uj=function(a){b=a;c&amp;&amp;b(c,this)};a.Ue=function(){return d};a.Hl=function(){return e};a.Nl=function(){return d.when};return a};OBR.Fg=function(){var d={},a="00.000",c=null,e=null,b=0;d.start=function(){null===c&amp;&amp;(c=new Date);null!==e&amp;&amp;(b+=new Date-e)};d.stop=function(){var f=new Date(new Date-c-b),g=f.getUTCSeconds(),f=f.getUTCMilliseconds();e=new Date;return a=(9<g?g:"0"+g)+"."+(99<f?f:9<f?"0"+f:"00"+f)};return d};</p&gt;

OBR.rd=OBR.rd||function(){function d(){var a=window;a.googletag=a.googletag||{};a.googletag.cmd=a.googletag.cmd||[]}function a(a,g,c,e){var d=window;d.$revee&amp;&amp;d.googletag.cmd.push(function(){d.$revee.track({obpid:a,obsid:g,obdid:c,obpu:e});b.d.log("revee fire:"+e);b.d.log("revee fire id:"+c)})}var c={},e=!0,b;c.h=function(a){b=a;c.cc={}};c.Yb=function(f){if(f&amp;&amp;!1!==f.g("activateRevee",!1)){d();var g=f.q("pid",0),h=f.q("sid",0),k=f.q("did",0),m=f.ka();e||c.cc[k]?e&amp;&amp;(e=!1,f=b.b.N(b.c.U+"rva.outbrain.com/analytics-v1.js",

!0,!0,function(){m=document.location.href;a(g,h,k,m)}),b.b.R(f)):a(g,h,k,m);c.cc[k]||(c.cc[k]=!0)}};c.B=function(){e=!0;c.cc={}};c.h(OBR);return c}();OBR.c=OBR.c||function(){var d={},a={},c=OBR,e;a.Cg="opera";a.Od="msie";a.zg="firefox";a.xg="chrome";a.Eg="safari";a.Bg="mozilla";a.Al="boolean";a.$k="string";a.Vl="object";a.gl="undefined";a.Ul="number";a.Pb="ob_iframe";a.$e=!0;a.Ff=0;a.ec="outbrain_widget_";a.wj="text/javascript";a.Eh="このエントリーをはてなブックマークに追加ツイートシェア

2015-10-21

Array.ForEachがうまくいかないから

for(var i = 0; i < list.length; i++){
}

にしておいた。Windowsjsファイルスクリプトを食わせたら動いたけど、XulRunnerよ、Array.forEachは使えないんだなきっと。ふざけやがって。計6時間消費、Array.forEachを何とかつかってやろうと思っていたが。

MozillaMicrosoftなどに負けたのは、ふつうに使える開発ツールが無さすぎなんだよ。傾斜生産方式を見習えっての。

少し直してはアドオンパッケージングして、ロードさせてアプリ再起動させて実行、また直してはアドオンパッケージングして、ロードさせてアプリ再起動させて実行で、たかが1文字間違えていただけで見つけるのに数十分もかけさせられてたら萎えるわ。alertも使えないし、console.logかいうのも ctrl+shift+J で出る画面になにも表示されないし。

Visual Studioサイコーだね!!Java なんて手を出さなくて助かったわ。重くてすぐオチる Eplicse なんて使っていたらストレスたまるし。

2015-04-06

https://developer.mozilla.org/ja/ブラウザコンソール

             _.-~-.
           7''  Q..\
        _7         (_
      _7  _/    _q.  /
    _7 . ___  /VVvv-'_                                            .
   7/ / /~- \_\\      '-._     .-'                      /       //
  ./ ( /-~-/||'=.__  '::. '-~'' {             ___   /  //     ./{
 V   V-~-~| ||   __''_   ':::.   ''~-~.___.-'' _/  // / {_   /  {  /
  VV/-~-~-|/ \ .'__'. '.    '::                     _ _ _        ''.
  / /~~~~||VVV/ /  \ )  \        _ __ ___   ___ ___(_) | | __ _   .::'
 / (~-~-~\\.-' /    \'   \::::. | '_ ` _ \ / _ \_  / | | |/ _` | :::'
/..\    /..\__/      '     '::: | | | | | | (_) / /| | | | (_| | ::'
vVVv    vVVv                 ': |_| |_| |_|\___/___|_|_|_|\__,_| ''

Hi there, nice to meet you!

Interested in having a direct impact on hundreds of millions of users? Join
Mozilla, and become part of a global community that’s helping to build a
brighter future for the Web.

Visit https://careers.mozilla.org to learn about our current job openings.
Visit https://www.mozilla.org/contribute for more ways to get involved and
help support Mozilla.

---

If you don't want to see this message next time, run this JS statement:

    Tabzilla.disableEasterEgg()

が出力されて一瞬びっくりした。

2014-11-12

Google検索結果が文字化けする

UAを設定しないと変な文字列が返されるっぽいです

こんな感じに適当UAを設定しましょう

Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9) Gecko/2008052906 Firefox/3.0

2014-04-28

2ヵ月前に立てたスレが今頃まとめられて、壮絶にディスられてて辛い

http://b.hatena.ne.jp/entry/blog.livedoor.jp/itsoku/archives/38497062.html

昨日ブクマ10ぐらいのときに見て、こんなんブクマするなんてアホかと思ってた。

んで今日起きて見てみたらまだホッテントリにいるし、何でこんな糞スレが600ブクマも行ってんの・・・馬鹿なの?死ぬの?

しかも、転載禁止絡みでスレの内容とは全く関係なくブクマ付くっていう運の悪さね。

Node.jsの使い方覚えたばっかで、誰かに話したくてしょうがなかっただけなんだよ。

勢いで立てて、勢いでレスしてただけだよ。へたくそに決まってんじゃん。もう許してよ。

書き溜めてないからぜんぶ行き当たりばったりだし、糞スレに決まってんじゃん。

結局、初歩を教える前にめんどくさくなって放棄したけどわりと序盤で「あ、これ糞スレだな」って確信してたよ。

こんな糞スレ読む暇があったら公式とかドットインストールでも見てよ。ぜんぶ日本語から・・・

Node.js公式APIドキュメント

http://nodejs.jp/nodejs.org_ja/api/

MozillaJavaScript解説 (JavaScript仕様決めてるとこ)

https://developer.mozilla.org/ja/docs/Web/JavaScript

ドットインストール (3分ぐらいの動画を何十本か見るだけでプログラミング入門できるとこ)

http://dotinstall.com/lessons/basic_javascript_v2

2014-04-06

メリットデメリット分析落とし穴

日本では物事をメリットデメリットの両面から考えることを子供の頃から教わらず、教科書などには公正さを期するため物事の良い点悪い点の両方が書かれていることがあるとはいえ、そうした両面的な考え方が身についている子供が多いとは言いがたい。受験勉強にしたって勉強内容の公正さに対して疑問を持つことなく丸暗記に近い勉強ばかりしている有様である

これが社会に出ると丸覚えは機械的作業を行うだけの底辺労働者しか通用せず、高い結果を出すには学習内容の公正さを疑う視点が求められてくる。ここに至ってメリットだけでなくデメリットも考えねばならないことをようやく教わるのである。曰く、おいしい話には裏がある。「これはいける!」という新しい策を導入する時にはちゃんと悪影響の可能性も考えましょう。物事の悪い部分ばかり見て手を拱いていてはいけませんぞ、などなど。

一方、欧米では子供の頃から学校ディベートやライティングをしっかり教わり公正な思考力を鍛えられるし、家庭でも社会の暗部を見せられさまざまな視点からライフプランを考えるように促されることが多いというのは、アメリカかぶれの評論家が口を揃える有名な話であるディベートでは政策(やそれに類するもの)に対して賛成と否定の両派に分かれて激論が酌み交わされる、いや取り交わされる。本心は賛成派でも否定派のチームに入れられることやその逆のパターンも多い。こうして賛成にも否定にも回れるような柔軟で両面的な思考法が身につく。さら1980年あたりから欧米では多民族国家であることや同性愛問題の表面化などを背景にdiversity(多様性)を尊重する思潮が強まり民族や性や思想多様性学校でも明確に教わるようになった。最近Mozilla CEO性差別的法案を支援して問題になった件で「Mozilla Statement on Diversity」という声明を出したのは記憶に新しい。このように物事の両面性・多面性を重視する風潮・思考法になっている。

ttps://blog.mozilla.org/press/2014/03/mozilla-statement-on-diversity/

日本人の多くは社会に出ると「国際社会だし欧米のように多面的思考をしないといけない」と耳が痛いほど聞かされ、その一環としてメリットデメリットを考えることが大切なんだなと学び成長していくわけである。そしてメリットデメリットさえ考えてれば多面的思考法が出来ていると勘違いしてあぐらをかいている人も多い。

しかし、メリットデメリット分析には根本的な落とし穴がある。

1つには可変性である。例えば、自社の管理システムに新製品を導入する時には導入するメリットデメリットを考えてメリットが大きいと判断されれば導入するという単純な思考プロセスで問題ない場合もあるが、新しい人材を取り込む時には必ず成長性を考える必要がある。ある分野が得意だからってさらに伸びるとは限らないし、ある分野が苦手だからって苦手克服できないとも限らない。人材ならまだ分かりやすいが、管理システム場合はどうか?システム時代とともに適応していけるような柔軟性を備えているか、また経験にしたがってブラッシュアップしていけるような成長性を備えているか。そうした可変性も加味しなければならない場合が多い。

子育て学校教育においても、長所を伸ばすという聞こえのいい古い考え方が未だに蔓延しているが本当にもっと伸びるのかと言いたくなる。得意分野だと成功体験を積みやすい?いやいやそれは他人と比べるからで、比べなければ得意で伸びにくいものより苦手でも伸びやすもののほうが伸びしろがあるため成功体験を積みやすいのは明らかだろう。大切なのは成長の楽しさが得られるかどうかであって、得意なものをやるよう押し付けることではない。そのためには得意でもどれが伸びてどれが伸びないのか、苦手でも伸びるものがあるのではないか、伸びるとしてどれくらい伸びるのか、といった一段階緻密な検討を経て合理的に判断をしないといけない。なんでもかんでも得意分野を持て囃すような風潮はもう終わりにしよう。

これまで見てきたように良い所と悪い所だけ見て両面的に考えてるぞとドヤ顔する風潮は打ち破られるべき悪しき因習と言える。逆に言えばこれからの熾烈を極める国際社会競争においてきちんと可変性を加味した多面思考ができる人間けが生き残るとも言える。

メリットデメリット分析の2つ目の落とし穴もっと根本的なもので、定性分析であるである分析名前がついているから数理的な分析だと勘違いやすいがそうではない。多くの場合メリットデメリット分析定性的分析、つまり物事の良し悪しに関わる性質を列挙しているに過ぎない。だからメリットデメリットを量的に比較するのは難しく、比較できたとしてもそれはこじつけになりがちで、結局「メリットのほうが多い」「デメリットのほうが多い」といういい加減な形で分析結果を利用されてしまやすい。たまたまメリットのほうが多く思いついただけかもしれないし、数え方の問題で多いだけかもしれないし、数が多いだけで重要度の低い項目だらけかもしれないのに。

実はこれは、賛成派(メリット)と否定派(デメリット)が戦う競技ディベートにおいてもしばしば問題となる点であるディベート勝敗ディベート経験のある審判理屈をつけて決めているに過ぎない。論拠の数が多いから説得力があったとか、質問されて答えに窮したか説得力がなかったとか、おおよそ論理とは無関係価値判断で決まることが多いのだ。

ディベートだけでなく2ch信者VSアンチの論争にも言えることである。それが偏った事実の寄せ集めであるかどうかにはお構いなくとにかく論拠の数を沢山用意しておき、次々と論拠を提示しては主張を繰り返して圧倒し、反論・質問された時にも用意した論拠で即レスするようにすれば、たいていスレの風潮を支配できるという、あの荒らしまがいのやり口を思い出してほしい。この手の荒らしが手強いのは殆ど場合において定量的擁護または叩きを行うためのデータ存在しないか少ないからだ。そんな時は膨大な定性データ粘着的な調査力で収集して印象操作で圧倒するのが比較的容易である

2014-02-10

http://anond.hatelabo.jp/20140210111951

javascript自体オレオレ仕様からだよ。

もともとはMozilla自分とこで開発しているブラウザに合う仕様にしてたわけ。

で、たまたま年数を2桁で管理してたから、1900年から差分なわけよ。

web言語なんて大体がそんなもんよ。

嫌だったら自分ラッパーでも作れ。

それが嫌ならおとなしく使っとけや

2013-11-26

はてな】お問い合わせの件につきまして2013年11月25日 月曜日 午後2:19

From: "はてなサポート窓口" &lt;cs@hatena.ne.jp&gt; アドレスブックに追加アドレスブックに追加

To: xxx@yahoo.co.jp

詳細ヘッダー

こちらははてなサポート窓口です。

この度はご連絡いただきありがとうございました。

弊社にてご利用状況を調査し、不適切なご利用を確認いたしましたので、

対応を行わせていただいております

今後とも何かお気づきの点などございましたらご連絡下さい。

==========

はてなサポート窓口

cs@hatena.ne.jp

==========

&gt; 登録内容

&gt; ========================

&gt; 登録者 xxx様 (id:xxx)

&gt; メール xxx@yahoo.co.jp

&gt; カテゴリー 規約違反行為不適切情報について

&gt; 登録日時 2013/11/25 4:29:14 (東京)

&gt; 質問

&gt; --------

&gt; わしじゃー!!

&gt; 下記アカウント、明らかにスパム行為しとる。

&gt; http://b.hatena.ne.jp/nichiyan/

&gt; 即刻近藤さん協議して厳格に対応することを切に望む。

&gt; 利用環境

&gt; --------

&gt; Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36

2013-09-27

君たちが増田に書いた記事を全部削除してしまおう!

ハローエブリバディ。

皆様、自分増田に書いた恥ずかしい記事を削除したいとか考えちゃっていたりしませんか?

心当たりのあるあなたに。思い切って、全部の記事を削除してしまいましょう!

というわけで、増田の全記事を削除するシェルスクリプト作成いたしました。

以下に説明するので、皆様使ってみてくだされ。

1.まず、適当bashwgetが使えるunixマシンログインします。

Linuxmacでも大丈夫。でもmacwget入ってないかもしれません。curlでも行けるけど…今回はwgetで。

ユーザとかは特に関係ありません。

レンタルサーバであっても、wgetコマンドが使えるのならば動作するはずです。

まずはwgetと打ってパスが通っているかコマンドが使えるかチェック!

2.以下のスクリプトを、適当コピーしてmasuda_delete.shとでも名前をつけてログインしたマシンに保存します。

おっと、保存する前に「"{!!!!!!PLEASE INPUT MASUDA ID!!!!!}";」の部分に自分増田ID入力して、

「"{!!!!!PLEASE INPUT MASUDA PASSWORD!!!!!}"」の部分に増田ログインパスワードを入れるのを忘れないで!

大丈夫ローカルで実行するだけだからパスワード漏えいとかは気にする必要はありませんよ。

シェルスクリプトなので、実行属性を付けるのを忘れずに。

chmod +x masuda_delete.sh

で実行属性が付けられますよ。

  #! /bin/bash
  cookie="/home/${USER}/cookie"

  HATENA_ID="{!!!!!!PLEASE INPUT MASUDA ID!!!!!}"
  PASS="{!!!!!PLEASE INPUT MASUDA PASSWORD!!!!!}"

  URL="http://anond.hatelabo.jp/${HATENA_ID}/"
  LOGIN_URL="https://www.hatelabo.jp/login"
  ua='Mozilla/5.0 (iPhone; CPU iPhone OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Mobile/9A405 Safari/7534.48.3'


  #LOGIN
  wget -q \
         --user-agent="$ua" \
         --load-cookies="$cookie" \
         --save-cookies="$cookie" \
         --post-data="key=${HATENA_ID}&amp;amp;password=${PASS}&amp;amp;mode=enter&amp;amp;backurl=http://anond.hatelabo.jp/&amp;amp;autologin=1" \
         "${LOGIN_URL}" \
         -O - &gt; /dev/null
  echo "LOGIN END."
  while :
  do
  article_list=(`
      wget -q \
      --load-cookies="$cookie" \
      --save-cookies="$cookie" \
      "$URL" \
      -O - |egrep -o "edit\?id=[0-9]+"|egrep -o "[0-9]+"`)
  if [ 0 -eq ${#article_list[*]} ]
  then
  break
  fi
  for article_id in "${article_list[@]}"
  do
  src=`wget -q -O - \
      --load-cookies="$cookie" \
      --save-cookies="$cookie" \
      "${URL}/edit?id=${article_id}" `
  csrf=`\
       echo "$src"|egrep -o 'name="rkm"[^/]+'|\
       egrep -o "value=.+"|egrep -o '".+"'|\
       egrep -o '[^"]+'`
  wget -q -O - \
         --load-cookies="$cookie" \
         --save-cookies="$cookie" \
         "${URL}/edit" \
         --post-data="rkm=${csrf}&amp;amp;mode=confirm&amp;amp;id=${article_id}&amp;amp;delete=%8d%ed%8f%9c%82%b7%82%e9" &gt; /dev/null
  echo "DELETE ARTICLE_ID=${article_id}"
  done
  done
  echo "DELETE COMPLETE!"

3.作成したスクリプトファイルを実行します。

./masuda_delete.sh

時間はかかるけど、今までに書いた増田の全部の記事を削除しに行くよ!

いかがでしょうか?

自分過去をすすぎ落とすことによって、新たな人生が歩めるような気がしてきたんじゃないでしょうか?

それでは、これからも良い増田ライフを!

さあ、使ってみてくれ。

http://anond.hatelabo.jp/20130927131033

てか、はてダスーパーpre記法がことごとく使えないのは何とかならんですかね……

追記

ソース中の&amp;は半角の&に置換しないと動きませぬ……

増田システム勝手に置換してるせいです。もうしわけない……

2013-04-06

うーん、スラドこんなだったかなー

うーん、スラドこんなだったかなー

servowebkitの記事にはあまりコメントつかず。

しか机上の空論的外れ原発論争には熱中。

みんなtechcrunchやgigazinetweet,ブクマしてて、スラドから人減ったのかな。。

2012-07-30

『リーダブルコード』を読んで

仕事コード書いてて、「クラス名や変数名はわかりやす名前を付けないと」といったことに腐心していて、ふと思った。自分のやってることって、「技術」というよりも「わかりやすい文章の書き方講座」みたいだな、と。プログラミングにおいて、技術面以外でも重要なことがあるのだろう。

そんな問題意識があったので、ソースコードの読みやすさがテーマの『リーダブルコード』は自分マッチする気がした。

 

読みやすい、読みにくい、というのは人間主観に基づくものだ。

しか主観といっても「何を読みやすいと思うかは人それぞれ」などといった極端な相対主義は通用しない。読みやすコードと読みにくいクソには歴然とした差があるものだ。

この判断は、文芸批評などに近いかもしれない。本書の原題は"The Art of Readable Code"となっている。エンジニアリングでもサイエンスでもなく、まさにアートなのだ

 

自分としては本書のハイライトはこれ。

13.3 コードを小さく保つ

ソフトウェアプロジェクトを始めるときには、ソースコードは1つか2つしかない。素晴らしい。コードコンパイルして実行するなんて簡単だ。変更もしやすい。関数クラスをどこで定義しているかもすぐに思い出せる。

プロジェクトが進んでいくと、ファイルが増えていく。ディレクトリを分けてファイルを整理しなきゃいけなくなってくる。どの関数がどの関数を呼び出しているかがよくわからなくなってくる。バグを見つけるのもだんだん面倒になっていく。

最終的には、いろんなディレクトリファイルが散らばることになる。プロジェクトは巨大になって、すべてを把握できる人は誰もいなくなる。新しい機能を追加するのが苦痛になってくる。コードを扱うのが厄介になって楽しくなくなる。

あらゆる協調システムは成長する。それらを結び付ける複雑さはもっと速い速度で成長する。これは宇宙自然法則だ。

まりプロジェクトが成長しても、コードをできるだけ小さく軽量に維持するしかない。

 

コードの「重量」を意識する。軽量で機敏にしておく。

うそう、コードは「重い」。

機能追加やデバッグをするとなると、その「重い」ものを動かさなくてはならない。だから疲れる。

そして、コードはどんどん重くなっていく。私が仕事で書いているシステムもそうだ。

例外はないだろう。

PostgreSQL現在の形になったとき20万行ほどだったソースコードは、今では100万行ほどあります

Linuxカーネルコードは、1995年に25万行だったが、2010年には1400万行ある。

結局のところ、「使える」ソフトウェア肥大化せざるを得ないのだと思う。

多くのソフトウェア開発者昔ながらの「80/20ルールに魅了されている。80%の人々は20%の機能しか使わない、というのは大いに意味があるように見える。それであなた20%の機能だけ実装すればよく、それでも80%は売れると思い込む。

残念ながら、それは決して同じ20%ではないのだ。みんな異なる機能セットを使っている。

 

あなたが「ライト版」の製品マーケティングを始めて、「どうです、軽いでしょう。たった1MBだ」と人々に言い、彼らはとても喜んで、それが彼らにとって必須機能を持っているか聞くが、それがないと分かると彼らは買わない。

 

ジェイミー・ザウィンスキーは、オリジナルバージョンNetscape世界を変えたことについて議論しながら、そのことをよく説明している、「もしそういうことなら分かりやすいのだろうけど、Mozilla(Netscape 1.0)が大きいのは役にたたないゴミでいっぱいだからではない。Mozillaが大きいのはあなた必要が大きいからだ。あなたニーズが大きいのはインターネットが大きいからだ。小さくて貧弱なWebブラウザがたくさんあるが、それは役に立つことはほとんど何もしない。しかし輝く宝石完璧さは、私たちMozillaを書いたとき目的ではなかった」

 

現実世界で使えるソフトウェアを作ろうと思ったら、大量にコードを書かなければならない。大量のコードを読まなければならない。

からリーダブルコードなのだ

1.2 読みやすさの基本定理

 

コードは他の人が最短時間で理解できるように書かなければいけない。

 

「理解する」っていう言葉には、高いハードルを設けてある。「コードを理解する」というのは、変更を加えたりバグを見つけたりできるという意味だ。他のコード連携する方法も理解しておかなければいけない。

仮に、ソースコードの分量やソフトウェア機能が同じだった場合、リーダブルコードとそうでないコード比較すると、前者の方が圧倒的に「軽い」。

第Ⅱ部

君のコードの「精神的な荷物」を減らしたいと思っている。複雑なループ・巨大な式・膨大な変数を見ると、真剣に考えて記憶しなければいけないので、頭のなかに「精神的な荷物」が増えてしまう。これは「理解しやすい」と正反対のことだ。コードに「精神的な荷物」がたくさんあると、バグは見つからなくなるし、コードは変更しにくくなるし、何よりコードに触れるのが楽しくなくなる。

コードの重さに押しつぶされてしまわないよう、軽くてキレのあるリーダブルコードを書くべきなのだ

 

本書のテーマとは関係ないが、コードの「重さ」に関して思っていることを一つ。

テストコードを書いたりバージョン管理システムを使うことは、たとえるなら、キャスターを付けたり、テコの原理を使った器具を使うようなものだと思っている。

そういう特殊な器具を使うと、全体の重量は増すし、器具の使い方を覚える手間も増える。でもそれで、素手では到底持ち上げられないような重いモノだって動かせるようになる。腕力重要だが、ひと一人の限界は知れている。

 

ライブラリを使えば、自分で書くコードの量が減るので、コードを軽く保てる。

10.4

便利なライブラリシステムのことを考えてみよう。SQLデータベースJavaScriptライブラリHTMLテンプレートシステム。いずれも内部のことを考えずに使えている。つまり、君のプロジェクトから完全に切り離されているわけだ。結果として、君のプロジェクトコードは小さく保たれている。

もちろん、ライブラリの使い方を覚えなきゃいけないし、バージョンアップしたら動かなくなった、みたいな手間も発生するわけだが、そこはトレードオフで、たいていは元が取れるだろう。

普通は、ライブラリインストールや使い方を調べる手間と、自分で実装する手間を比べてしまう。コードを軽く維持できることを加味すると、実は思っている以上に恩恵があるのかもしれない。

ライブラリでどんなことができるか知らなければ使おうとも思わないわけで、まずは知ることが大事

13.4 身近なライブラリに親しむ

プログラマというのは、既存ライブラリで問題を解決できることを知らないことが多い。あるいは、ライブラリで可能なことを忘れていることが多い。ライブラリ機能を熟知して、実際に活用することが大切だ。

ここでささやかな提案だ。たまには標準ライブラリのすべての関数モジュール・型の名前を15分かけて読んでみよう。

 

ライブラリを全部覚えろと言ってるわけじゃない。どんなことができそうか感じ取るだけでいい。そすれば、新しいコードを書いているときに、「ちょっと待てよ。これは、APIで見たような……」と思い出すことができる。あらかじめやっておけば、すぐに役立つときが来るはずだ。そのうち最初からライブラリを使えるようになるだろう。

この、ライブラリドキュメント読んどけ、というのは、まったく同じことを指摘している人がいる。

標準のメソッドをとことん使いたおしていけばコードを圧倒的に簡潔にできるのです。StringRegexp・Array・Hash・Enumerable あたりだけで十分ですからリファレンスマニュアルは熟読しておきましょう。

...

誰も知らないようなメソッドライブラリを使ってもあまりわかりやすくはならないだろうと思います

...

もっとメジャーメソッドの組み合わせで書けるから必要ない」という意見に対しては、まったく少しも全然微塵も賛成できません。

プログラミング言語目的プログラム人間に理解しやすくすることです。プリミティブな操作を組み合わせた「結果として」Xという操作を実行できる場合、われわれが知りたいのは「結果として X になる」ということなのです。それを知るために、わざわざプリミティブな操作をすべて追っていかなければならないというのは理不尽まりありません。

したがって、わたしの結論はこうです。「ちょうど求める働きをするメソッドがあるのなら、どんどん使うべきである。 少なくともよく知られているメソッドに関しては」。

また、これはコメントを書くことにも応用できると思う。

6.8 情報密度の高い言葉を使う

多くの意味を含んだ言葉表現が数多く存在する。例えば、「ヒューリスティック」・「ブルートフォース」・「ナイーブソリューション」などがそうだ。コメントが長くてくどいと感じたら、こうした表現を使えないかかめよう。

いわば、コメントに関しても「自分で実装」するのではなく既存ライブラリを使え、ということだ。自分以外の誰かが頭をひねって説明を考えてくれるので、自分はがんばって説明しなくてもいいわけだ。

 

日頃コードを書いてて思うのが、「本質的コード」と「必要だが本質的でないコード」があるということ。

はじめは目的の処理を行うコードだけを書いて、短くてすっきりしていたのが、やがてデータ整合性チェックやら設定の読み書きやらの処理を書かなくてはならなくなる。ソースは長くなり、はじめよりも見通しが悪くなる。

そんなことを考えていたので、本書のこの部分を見たときは、まさに我が意を得たり、と思った。

10.7

プログラムの多くのコードは、その他のコードを支援するためだけに存在する。例えば、関数の事前処理や事後処理などがそうだ。こうした「グルー」コードは、プログラム本質的ロジックとは関係ないことが多い。

そしてこれも似たようなことが指摘されている。

読んでいくときはまず「何を読まないか」を考えたほうがいい。どんなに工夫しても全部を全部読むのでは時間がかかりすぎる。エラー処理や不要な分岐、あまり使われない場合分けなどは全部飛ばすようにする。ガード文がうまく使われているとこのステップが非常に楽である。逆に言うと、こういうところを楽にするために例外だとかガード文を使うのだ。

ガード節については本書でも「7.5 関数から早く返す」などでを使うことを勧められている。私もネストが浅くなるところがとても好きだ。

 

やっぱりツールは重要だと思った。コードの見た目に対する影響も大きい。

単語補完機能があれば、長い変数名も苦痛ではない。

2.5

長い名前を避ける理由はいくつもある。でも、「入力しにくい」というのは、もはや理由にならない。プログラミングに使うテキストエディタには「単語補完機能」がついている。この機能を知らないプログラマは以外と多い。

補完機能が充実してなかった頃は、短い名前の方が美徳とされていたような気がする。こういう常識環境によって変わってゆくのもあるので、どういう根拠でそうなっているのかを考えないと、環境が変わった後にダメな因習を引きずることになる。

ソースコードの縦の線をそろえるのが好きでよくやるので、本書の4.4節はとても心強い。

4.4 縦の線をまっすぐにする

整列すべきなのか?

縦の線が「視覚的な手すり」になれば、流し読みが楽にできるようになる。これは「似ているコードは似ているように見せる」のいい例だ。

でも、これが好きでないプログラマもいる。整列やその維持に手間がかかるというのだ。1行だけ更新したいのに、他の行も(それも空白だけ)変更しなければいけないので、「差分」が増えるという人もいる。

でも、試しにやってみてはどうだろうか。ぼくたちの経験では、プログラマ心配するほどの手間にはならない。もし手間になるようだったら、そとのきは止めればいい。

これに関しては、エディタの「矩形選択」(英語だと"column selection")機能が効いてくる。これがないと面倒でやってられない。EmEditorの矩形選択および矩形編集はとても素晴らしく、少ない労力で縦の線をそろえられる。最近使わなくなったが、サクラエディタもいけていた。Sublime Textはなかなかいいが、全角文字やタブ文字といった幅の違う文字があるとガタガタになるし、行末が揃ってないところの編集がうまくいかないし、矩形ペースト挙動イマイチ。使った事のある中では、EmEditorが一番。

かつては、ソースコードを変更したら、変更前の内容をコメントアウトして残しておいたものだった。しかバージョン管理システムを導入してから、この習慣はパッタリと無くなった。よいことだ。

 

読みさすさのため だ け に、それだけのために、変数関数を作っても、いいじゃない。そう思えるようになった。本書に明記してあったわけではないので、著者はそうは思ってないかもしれないが。

よくある説明は、くり返しを防ぐために変数関数を使いましょう、というものだ。同じ処理が複数箇所にあるなら、コピペなんてしないで、関数しましょうと。

じゃあ、その処理が一箇所にしかないならどうだろう。それでも変数に代入したり、関数を作ったりする意味はあるのだろうか。

私はあると思う。

たとえば本書の、「4.3 メソッドを使った整列」、「8.1 説明変数」、そして10.3節。

10.3

思いも寄らない恩恵

気づきにくいかもしれないけど、「コード独立していれば、format_pretty()の改善が楽になるから」だ。関数というのは、小さくて独立したものになっていれば、機能追加・読みやすさの向上・エッジケースの処理などが楽にできる。

もちろん場合によるが、複雑なことをしていると感じたなら、やる価値はある。テストコードも書けるし。

 

テストコードを書くのは本当によい習慣だと思う。

14.8

あとでテストを書くつもりでコードを書くと、おもしろいことが起きる。テストやすいようにコード設計するようになるのだ! このようにコードを書いていけば、いいコードが書けるようになる!

テストに優しい設計をすれば、振る舞いごとにうまく分割されて、自然コードが構成されていく。

再利用しやすコードを書きましょう、とはよく言われるが、作っているときは一箇所からしか呼ばれないことも多い。一応、再利用しやすそうなコードは書くのだが、時が経って実際に再利用するとなるとそれほどやりやすくなかった、なんてことになりがち。

テストを書くと、本番用のコードテストコードの二箇所から呼ばれることになる。開発段階から再利用できるのだ。

 

「8.3 ド・モルガンの法則を使う」。ド・モルガンの法則は、if文の条件を考えるときなどに、本当に使える。学校で習った論理学関係の事柄で、最も直接的に役に立ってるのがこれではないかと思う。

 

どういうプログラムにしたいかを、自然言語で説明して、その通りに作ってしまえばいい、というのは面白い

12.4

この「簡単な言葉で説明する」手法は、コードを書くこと以外にも適用できる。例えば、ある大学計算機センターにはこんな方針があった。プログラムデバッグに悩む学生は、部室の隅に置かれたテディベアに向かって最初に説明しなければいけないのである。驚くべきことに、問題を声に出して説明するだけで、学生は解決策が見つかるのだ。この方法は「ラバーダッキング」とも呼ばれている。

ラバーダッキングについては、『ハッカーズ大辞典』で見たことがある。あれもいい本だった。

これは言葉による説明に限らないと思う。関数クラスについて、「どんな風に使いたいか」を先に書いてしまって、その通り呼び出せるように中身を実装する、という手法に応用できる。

 

コメントとしてのソースコード、というコンセプトも面白いと思った。

14.6 テスト機能名前をつける

長くて変な名前にならないかと怖がることはない。他のコードから呼び出されるものではないので、長くなっても構わない。テスト関数名前コメントだと思えばいい。

「説明変数」もコメント的な側面が強いだろう。

コメントのようなソースコードを書けば、コメントが減るわけだ。コードコメントの不一致もなくなる。

 

本書のよいと思った点は、大げさな言い方になるが「世界観」が共有できるということ。

コードは読みやすい方がいい、こういうコードが読みやすい、というのもさることながら、何よりも、このような本が存在していること自体が、読みやすコードを書くことにはまとまった時間をかけて取り組む価値がある、というメッセージになっていて頼もしい。

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