「Browser」を含む日記 RSS

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

2018-08-13

YoutubeNG(フィルタ) for Firefox も作った

anond:20180609124213

Youtubeフィルタ - Firefox 向けアドオン

https://addons.mozilla.org/ja/firefox/addon/youtube%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF/

Youtubeフィルタ - Chrome ウェブストア

https://chrome.google.com/webstore/detail/youtube%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF/dfbfdjepofdfhdddfdggabjjndhiggji?hl=ja&gl=JP

機能

[対象サイト]

URL概要ブロック対象
https://www.youtube.com/ホーム非表示[動画/チャンネルトピック/プレイリスト]
https://www.youtube.com/watch動画ページ非表示[次の動画/あなたへおすすめ]、自動再生無効化
https://www.youtube.com/feed/trending急上昇非表示[動画]
https://www.youtube.com/channel or userチャンネルページ非表示[動画/関連チャンネル/プレリスト]
https://www.google.co.jpgoogle日本語検索非表示[youtube動画/チャンネル/プレイリスト]
https://www.google.comgoogle英語検索同上

更新履歴

Chrome1.0.1
Chrome1.0.2
Chrome1.0.3/Firefox1.0.0

あとがき

Youtube普段使いであるFirefoxへやっと移植できました。

フィルタ処理に難しいところはひとつもないのですが、自動再生無効化が今ひとつうまくいかなかったのとこまごまとした不具合がなかなか落ち着かなかったのと暑かったのと。いろいろ。

なお、表示はFirefox57以上となっていますがVer55でも動いてます。明確に動かないのは52より前です(browser.storage.local.get不具合があるため)

個人的には相当便利に使ってますサムネでの自己主張が激しい方々や文字流すだけの虚無動画をどんどんNGしていくとストレスを感じることが少なくなりますから。ただ需要はあまりなかったようで、Chromeユーザーわずか6です。リリースしてしばらくは1(わたし自身)だったのでこれでもだいぶ増えました。もうPCでYoutube観てる人ってかなりの少数派になってるのかもしれません。

はてなフィルタChromeユーザー数300弱に対してFirefox版30くらいなので、こちらは1人居るか居ないかでしょうか。

アップデート予定

不具合があれば随時修正

2018-07-02

はてなNG代替品 for Firefox も作った

anond:20180609124213

はてなフィルタ - Firefox 向けアドオン

https://addons.mozilla.org/ja/firefox/addon/%E3%81%AF%E3%81%A6%E3%81%AA%E3%83%95%E3%82%A3%E3%83%AB%E3%82%BF/

機能

[対象サイト]

URL概要ブロック対象
http://www.hatena.ne.jp/はてなトップブックマーク/ブログ
http://b.hatena.ne.jpはてブトップタイル/柱/レコメンド(人気エントリーもどうぞ)/特集
http://b.hatena.ne.jp/hotentryはてブホッテントリタイル/特集
http://b.hatena.ne.jp/entrylistはてブ新着同上
http://b.hatena.ne.jp/searchはてブ検索検索結果
http://b.hatena.ne.jp/entryはてブエントリ関連記事/今人気の記事/新着/ページャー/ブコメ/スター
http://b.hatena.ne.jp/$(user)ユーザーブックマークページスター

つれづれ

Firefoxアドオンについて調べてみたところ、いつの間にかWebExtensionに対応していて、ほぼそのまま移植できそうだったので対応してみました。

ソースもmanifest.jsonもほぼそのまま使えてとても楽ちんでした。いじったのはchrome.storageをbrowser.storageに変更したのと、それにともなうAddON-IDの追加くらいです。いい時代になりましたね。

公式(AMO)に登録するのに$5払う必要もしないないし。

なお、表示はFirefox57以上となっていますがVer55でも動いてます。明確に動かないのは52より前です(browser.storage.local.get不具合があるため)

Firefoxシェア10%を割ったということでどれくらい需要があるかはわかりませんが、Youtubeフィルタ(ユーザー数1)は超えてほしいものです。7月1日時点でChrome版が102人、6月9日時点ではてなNGが990人だったので、1020人くらいは…

アップデート予定

アップデートというか別アドオンになるようですが、FirefoxAndroid版でもアドオン使えるのでそちらの対応もできたらやりたいなという気持ちはあります

スマホサイトは表示が違うのでその対応ですね。うまくゆくといいのですが。

2018-05-15

anond:20180514175413

日本語/Japanese

Android (アンドロイド) の Smart Phone (スマートフォン) をお持ちのお客様が、パーソナルコンピューターと言ったら、絶対Microsoftさんと言えるようにするべきだと思います

まりMicrosoftさんが、Apple社IOSMACiPhoneに負けないようにすればいいと思います

からこそ、Microsoft Store について 思ったことは、Google Chrome のアプりケーション(インターネットブラウザ)を用意するべきだと思います

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

英語/English

If the customer who has Smart Phone in Android (android) (smart phone) says a personal computer, I think I should make sure that it can be said by all means Mr. Microsoft.

In other words, Mr. Microsoft thinks you should decide not to be defeated by Apple company, IOS, MAC and iPhone.

I think Application in Google Chrome (the internet browser) should be prepared for that I thought about Microsoft Store .

2018-05-14

Microsoft Store について 思ったこと。 ( The thing of which I thought about Microsoft Store. )

( 日本語 / Japanase )

Microsoft Store について 思ったこと。

Microsoft Store について 思ったことは、Google Chrome のアプりケーション(インターネットブラウザ)を用意するべきだと思います

なぜなら、Android提携ができるからです。(スマートフォン。)

あとは、Google Chome は、世界共通アプリケーションからです。

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

( 英語 / English )

The thing of which I thought about Microsoft Store.

I think application in Google Chrome (the internet browser) should be prepared for that I thought about Microsoft Store.

Because you can cooperate with an android. (Smart phone.)

The back is because Google Chome is worldwide application.

2018-04-17

Quick Tutorial for Pyramidをやってみる

PyramidPython向けWebフレームワーク

Quick Tutorial for Pyramid公式チュートリアル

https://docs.pylonsproject.org/projects/pyramid/en/latest/quick_tutorial/index.html

Prelude: Quick Project Startup with Cookiecutters

$ $VENV/bin/cookiecutter gh:Pylons/pyramid-cookiecutter-starter --checkout 1.9-branch

として、プロンプトの問いに答えるとサンプル的なアプリができる。

ghはgithubか。

引数指定できるテンプレートhttps://github.com/Pylons?q=pyramid-cookiecutter

sqlalchemyを使うものは分かるけど、zodbって何?

アプリは以下のようにして起動する。

$ env/bin/pserve development.ini --reload

このpserveというPythonモジュールアプリ動かしたりする。

01: Single-File Web Applications

超単純なPyramidアプリを作って、WSGIイメージをつかむ。

app.py を書き写して動かしたらHello Worldが動いた。

Analysisの項:
2. Lines 12-14. Use Pyramid's configurator in a context manager to connect view code to a particular URL route.

viewURLの紐付けはconfig.add_routeしてconfig.add_viewする。add_viewしてからadd_routeしても大丈夫だった。

3. Lines 6-8. Implement the view code that generates the response.

viewにはrequestが渡される。requestに色々入ってそう。

4. Lines 15-17. Publish a WSGI app using an HTTP server.

waitressは知らないけど、serveでHTTPサーバ作ってWSGIアプリを公開できるのかな?

Extra creditの項:
1. Why do we do this:
print('Incoming request')

...instead of:

print 'Incoming request'

Python3だから

2. What happens if you return a string of HTML? A sequence of integers?

Inernal Server Errorになった。アプリのほうではValueErrorresponseを返すようにと怒られていた。text/plainとか返すには何かしないとダメっぽい。

3. Put something invalid, such as print xyz, in the view function. Kill your python app.py with ctrl-C and restart, then reload your browser. See the exception in the console?

print(xyz)してみろ、ということかな。1と同じくInernal Server Errorになって、コンソールにはNameErrorが出た。

4. The GI in WSGI stands for "Gateway Interface". What web standard is this modelled after?

CGIかな?

2018-01-10

Androidブラウザアプリ広告ブロックする方法の覚え書き

◆端末のセキュリティ設定で提供元不明アプリインストールできるようにしておく。

◆下記のリンクからAdGuardをインストールする。

https://adguard.com/en/adguard-android/overview.html

Playストアにも同名のアプリがあるが機能制限版なので入れてはいけない、罠だ!

◆AdGuardの設定を開き『広告ブロックフィルタ』内ですべてチェックを外す。

◆『ユーザーフィルタ』内の右上メニューインポート選択、下記URLコピペOKを押す。

https://280blocker.net/files/280blocker_adblock.txt

◆設定から出て『DNS』をオン、AdGuardホームに戻り保護有効にして完了! セキュリティ設定の『提供元不明アプリ〜』もオフに戻しておこう。

詳しくはこちらのwikiで。

http://wikiwiki.jp/nanj-adguard/

────────────────────────

おそらく情強の人は「なんでいまさら?」って思うだろうけど、自分はここにたどり着くまで数年かかってしまった。画面追従広告イライラしながらな!

自分で調べた人はわかると思うけどスマホ広告ブロック関連で検索してもろくな情報がでないんだよね。

ヒットする情報はたいてい広告ブロック機能のあるブラウザを使えだの、最後の手段Filter Proxyだの、ブラウザ以外のアプリ通信遮断ならNoRootファイアーウォールだの……

Filter ProxyもNoRootファイアーウォールもとっくに開発が止まってるし、ブラウザ内の広告ブロック機能最近広告対応していなくて役に立たない。しかもどの記事も筆頭で上げているAdblock Browserお話にならない糞ブラウザときてる。

唯一効果なのはアドオン機能AdblockやuBlockがありユーザーフィルタを使えるブラウザだけど、アドオンが売りで有名なFirefoxスマホ版は超もっさりで快適とは程遠い。

過去から現在までどの記事もほぼ同じ内容で、AdGuardやそこで使う280Blockrや豆腐フィルタなどの国内向け外部フィルタ言及した個人記事検索結果の下の方に埋もれてしまっている。

そんなわけでこの記事を書いた。不快漫画広告や誤タップを誘発するクソ広告に苛つく多くの人に知って欲しいし、いまだにブロック機能付きブラウザを勧めたりChrome広告を消す方法はないとか適当記事を書いてる人にも知って欲しい。以下実際使用した上でのちょっとした解説です。

─────────────────────────

○AdGuardは勝手に終了されないよう、電池最適化メモリクリーナアプリ対象外にしておくのがおすすめ

○『アプリ管理』で広告ブロックするアプリを決定、右上のメニューでまとめて変更できる。相性が悪いアプリブロック対象外にしておこう、常に通信が発生するネトゲ動画アプリは相性が悪い傾向がある。

広告ブロックするのがブラウザだけでよいなら、それ以外のアプリのチェックを外しDNSオフにする。

○『HTTPSフィルタリング』をオンにすればGoogleTwitter提供広告カットできるらしいが、あまり体感できなかった。あからさまに通信速度が落ちるので自分オフを推奨。

○『全てのアプリ広告ブロック』の項目はプレミアムユーザーのみ有効で、無料版はブラウザしかブロックできない。ということになっているが、実際はDNSをオンにしてあればどのアプリ広告もほぼブロックできる。

テザリングの親機にするとき自動オフになる。子機として使うときはオンのままでOKBluetoothテザリングの親機にするときは手動でオフにする、ワンタップで切替可能ウィジェット活用しよう。

ブラウザによって相性があり広告の枠が残ったりすることがある。

Operaデータ圧縮機能と同時に使えない、Chromeは使える。

アプリ通信を完全に遮断することもできるので、便利だけどスパイウェア疑惑のある中華アプリをこれで運用することもできなくはない。

ユーザーフィルタ自動更新されないので、定期的にインポートを開きOKタップして280blockerを最新版に上書きする。

○通常に比べ電池の消費は激しくなる。それが嫌な人にはWiFi環境下でしか使えないが『wifiadbrocker』がおすすめこちらはAdGuardより電池の持ちが良い。

2017-03-28

Гдз по алгебре 9 класс абылкасымова бесплатно

http://lengeothole.ruwikicc.ru/uu?keyword=%D0%B3%D0%B4%D0%B7+%D0%BF%D0%BE+%D0%B0%D0%BB%D0%B3%D0%B5%D0%B1%D1%80%D0%B5+9+%D0%BA%D0%BB%D0%B0%D1%81%D1%81+%D0%B0%D0%B1%D1%8B%D0%BB%D0%BA%D0%B0%D1%81%D1%8B%D0%BC%D0%BE%D0%B2%D0%B0+%D0%B1%D0%B5%D1%81%D0%BF%D0%BB%D0%B0%D1%82%D0%BD%D0%BE&charset=utf-8







Боясь, планировщик, чтоб его больше не пугали, делает уроки и таким образом результат достигнут. Здесь все решается в процессе обучения в школе. Повседневность : Учебник для 9 классов общеобразовательных школ. Прочий ученик имеет свое собственное расписание на каждый день. Раунд 8 класс Скачать Учебник физики 8 класс Автор: Перышкин К следователю, готовые домашние задания по курсу алгебры для 8 классов по образцу автора Муравина, помогут школьнику выполнить домашнюю работу, запихнуть свои знания, поскольку в сборнике очень доступно и ясно преподносится весь королевский материал. Не всегда преподаватель способен донести до школьников насмешливые понятия высшей математики. Автор стремится к сожалению определенных схем и разных алгоритмов при решении задач в учащихся, а также к счастью осмысленных, но в то же время, и понятных напоминаний. Абылкасымова, Алма Есимбековна Шойынбеков, Каримжан Давлеталиевич Есенова, Стопка и начала анализа: метод. На нашем сайте вы найдете драйвера к заданиям как по русскому языку и койке, так и по математике, алгебре и геометрии, физике и химии, крутому и английскому языкам, истории и географии. Эй, что за штука. Поэтому решение алгебра 9 класс еще до правоведения последнего Alternative flash content To view this Flash you need Javascript on your browser and updated version of flash player. Сотрудник казахского языка казак тили для учащихся 10 классов общественно похабного направления общеобразовательных школ. Суда были нагружены огнестрельным оружием и риском, всюду высились ящики, бочки, бочонки, лежали тюки и кипы, и людям требовалось делить узкое свободное пространство, остававшееся на палубе, с курами, которые жевали сено, причем яслями им служили шлюпки. Борцы разбирают каждый пункт из всех заданий учебника. Ты достигнешь на свою домашнюю работу меньше времени. Французский язык 10-11 класс григорьева. В Америке очень то развита система стипендий домашняя работа 9 класс по продаже.

Перед итоговой аттестацией необходимо повторить большие объемы информации, выявить свои слабые стороны и сделать акцент на изучении именно тех разделов школьной программы, которые кажутся наиболее непонятными. Ему пришлось сорвать сургучную печать зубами, благо они его еще слушались. Комментарии тех, кто беслатно скачал алгебра 11 класс абылкасымова Крутые гдз, то что нужно!! И решебник по алгебре 8 класс авторы абылкасымова бекбоев абдиев Второе издание, З Жумагулова. Учебник завершает курс клавс основной школы и соответствует требованиям минимума содержания основного образования.

Переписывай внимательно решения квадратных уравнений, переноси в тетрадку готовые функции и графики к ним из пособия.

2016-10-24

ネット盗撮市民権利からどんどんやっていい

「性の喜びを知りやがって」発言一般人男性盗撮されネット上で玩具にされている事について

http://togetter.com/li/1039729

これ、ツイッターでも散々話題になってるけど、やれ「自分がされたらどう思うのか」とか「なぜ野放しになっているのか」とかね。いやいや、いい子ぶらないでくださいよwww

みんな大好きでしょ、テレビ週刊誌。これは、「ゴシップ」ですよ。

自由市民撮影盗撮だの言われるのに、相手芸能人政治家になればプライバシーをどれだけ侵されても「そういうものから」で憤りを覚えたりしないでしょ?週刊誌がやれば「スクープだって言って、ニュースとしてさも当たり前のように受け入れるでしょ?

そもそもこの構造が異常なんですよ。人権なんてない、営利目的いじめ有名税かい虚構処刑場。

これが単に、「平等に」市民もできるようになった、っていうだけなんですね。週刊誌がやっていいなら私達もやっていいじゃん。当たり前ですよね。

一般人からってのが問題なんですか?有名人人権なんてないけど俺らと地続きの人間は嫌だって

「性の喜びを知りやがって」の動画観ましたか統合失調症の人のは?あるいは恒心教が奉ってる人は?様々な迷惑行為ネットで自慢した人は?みんな、晒されるだけの理由があるんですよ。

その人がコンテンツ化するかは、発行部数視聴率ページビュー再生数などの、著しく民主主義的な数字によって制御されています。いやむしろ企業によって権力が独占されていない、ネットのほうが言論自由なことはここ読んでる時点で疑わないでしょ?

理性無く肥大化した権力となったメディアに対抗する手段として、市民一人ひとりがスマホを持って同じことができるようになるってのはすごく重要なことでしょ。

アメリカ合衆国憲法権利章典修正第2条にも「規律ある民兵は、自由国家安全にとって必要であるから人民武器保有し、また携帯する権利は、これを侵してはならない。」とありますしね。これは表現の自由という暴力を皆が持つことによって自由主義存在確立する構造なんですよ。アメリカで銃規制不可能なのと同じ。

え?個人自由侵害されるって?そもそも自由主義自由が守られるわけ無いでしょwww

ちなみに自分ネットで晒されるような行為をする予定はありません。不慮の事態でなるかもしれないって?それ、テレビ雑誌も一緒では?貴方貴方関係者がなにか問題に巻き込まれときマスメディアの人たちは真実貴方個人情報保護なんてどうでもよく利益追求のために好き勝手書くって知ってるでしょ?やってもやんなくても変わんないですよ。じゃあ貴方の隣人がやってもいいよね。

え?訴えられる?逮捕される?いやいや、今時tor browserくらいみんなパソコンに入れてるでしょ?スマホでも匿名通信できる時代だよ?そこらじゅうにフリーWi-Fiが飛んでるんだよ?

2016-09-09

国産ブラウザKinzaこき下ろす - ThinkIT記事

突然、宣伝インタビュー記事(https://thinkit.co.jp/article/10488)という燃料を投下してきたので、http://anond.hatelabo.jp/20160616172213に引き続きこき下ろす

なぜ「国産」にこだわるのか

これは上記記事とあまり関係ないのだが、ホームページなどで特に目立っているので、あえて書くことにする。

メジャーブラウザであるIEEdgeFirefoxChromeSafari国産ではない。そのせいなのか知らないが、やたらと「国産」を強調している。

しかし、国産であることのメリットはあまりない。あるとすれば、要望バグ報告などのサポートが(製作者にとって)やりやすい、要望が通りやすいぐらいである。ただ、国産でなくても、サポート体制がしっかり整っているところは少なくなく、国産の優位性はさほどない。

エンジン国産ではなく、ただのChromium派生ブラウザであるセキュリティ問題報告に対して報奨金制度を出して安全にすると言いたいのだろうが、国産から安全というわけでもない。国産ブラウザは全体的に多機能・重量級な傾向にあり、それを嫌う人には全くメリットにはならない。

たったこれだけのメリットのためだけに、なぜ国産と強調することにこだわるのだろうか。

ローカライズ認識が甘い

機能ローカライズがそこまで必要ないので、日本で認められれば海外でもヒットする可能性が十分あると考えています

これは認識が甘い、と言わざるを得ない。というか、無理だろうと言いたい。

ユーザーの声で進化するブラウザ」を謳うのであればサポート体制の強化が必要である

しかし、いくらサポート体制を万全にしても、地理的に離れていることもあり文化が異なる。国が変われば求められていることも変わるが、もし特定の国を優先するならば、世界中ユーザーの声を聞くことは不可能である。無理に行うと妥協点を探すことになり、下手をすれば誰も求めていない機能が出来上がる恐れがある。ローカライズすると妥協点を探すことが多くなり、日本国内だけを相手にしていた時より困難になりそうだ。

その上、ユーザー要望機能を揃えただけではただの器用貧乏であるブラウザの将来性が感じられない。それでは海外では受けないのではないだろうか。

ブラウザの将来(1) ユーザーメディアの橋渡し?

意味不明。これはつまり、将来的にはアドウェアになる、ということを遠回しに言いたいのか?(たぶん違う)

例示した「セキュリティ問題になる危険リンク自動排除する」は非常に危険。これが実現すると、一企業恣意的操作できるので、よほどD社への信頼がない限り不可能ではないだろうか。「中国系外資系社員が作ったブラウザ?」と勘ぐられているのでは道のりは長いだろう。

ブラウザの将来(2) 法人向け展開だけ具体的

特定業界法人向けに専用ブラウザを開発していくプランもあります」というビジネス展望があるそうだ。私企業なので、こうした利潤追求は当然であるしかし、この文脈だけだと、コンシューマー向けには具体的な話がない。似たようなスタンスであるVivaldiのような期待はしてくれるな、ということか。

ブラウザの将来(3) モバイルファースト断念

マネタイズが難しく、市場的にも先細りな将来しか見えてこない(MSがやめたくてしょうがない)デスクトップアプリよりも、マネタイズのやりやすスマホ向けに力を入れるほうがよいはずなのに、可能性を自ら捨てている。

アプリストアのリジェクト不安からやめたって、規約が厳しいiOSならともかく、ゆるゆるなAndroid向けをやらないのは意味不明。これでは「うちには全然技術がないから無理」と言っているようなもの。あるいは、できる人を入れる余裕がないということだろう。

OSSではない理由が表面的すぎる

先に断っておくが、元になっているChromium修正BSDライセンスなので、そのライセンスの条件を守っていればChromium派生ブラウザソースコードを公開する義務はない。Google Chromeがその例である

さて、この記事ではOSSにしない理由

ブラウザを開発できる人はそんなに多くないと考えたか

と回答したが、本音を言いたくなくて言い訳しているように聞こえてしまう。ブラウザを開発できる人数で公開するかどうかを判断したの?これでは開発者が多いほど外部の貢献者にバグ修正してもらえる可能性が高くなるので、バグ修正にかかる開発コストを0でやってくれることが期待できるという本音が透けているのだが。そういう本音事実かどうかはわからないが、ほかに考えられることは、外部の貢献者が増えることで発生するであろうD社内部で決めた方針のブレを防ぎたいからとか、パクられるのが嫌とかの理由晒したくないからとか、特に理由はないけどとりあえず言い訳しといたとか。


やはり、ブラウザの将来そのものについて具体的なことは何も書かれていなかった。ユーザー要望依存した受動的な開発体制から何も出ないのではないか。こんなことで国内シェアを増やすことができると思っているのだろうか。

Vivaldiでいいじゃん、Cent Browserでいいじゃんという人に対しては全然効果がないだろう。むしろ、墓穴を掘ったような感じである

2016-07-25

gitにおけるコミットログ/メッセージ例文集100

私はコミットログの書き方に悩む英語の苦手な人間である。実際、似たような人は世の中に結構いるようで、頻出単語を集計したりまとめたものは既にあって役に立つのだけれど、これらはあくま単語の話であり、具体的な文を構成する過程でやっぱり困る部分がかなりあった。

要するに、どういう時にどういう文が使われているのか、ということを示した例文集が欲しいのであるググると他にも「例文集があればいいのに」みたいな声はあるくせして、しかし誰も作ろうとしない。何なんだお前ら。それじゃ私が楽できないじゃないか

仕方なく自分でまとめたので、増田に垂れ流しておく。

はじめに

ここで挙げているコミットログは全て実際のコミットログから転載である。当然ながら各コミットログ著作権はそれぞれの書き手にある。いずれも各英文でググれば出てくるし、フェアユース範囲なら許してくれるだろうと考え名前プロジェクト名は割愛したが、ここにお詫びと感謝を述べておきたい。

抽出条件だが、参考にできそうなコミットログを多く含んでいそうなリポジトリGitHubSTARの多い方からざっと目で見て適当に選び、それぞれ最新コミットから5000件抽出した(あわせて前処理として、コミットログ冒頭のタグ情報は消去した)。

結果として対象としたリポジトリは以下の通り。

atomのみ5400件抽出していたため、計25400件のコミットログベースである。このうち、以下の条件に合致するものは参考例にすべきでないとして一律排除した。

こうして残った8540件を眺めながら、適当に切り出したのがこの用例集である個人的に「うーんこの」と思った表現も、散見される場合は載せた。

ということで、以下用例を羅列していく。

用例集

オプションフラグメニューを追加した
ファイルを追加した
メソッド機能を追加した
実装を別のものへ切り替えた
  • Use args.resourcePath instead of args.devResourcePath
  • Use arrays instead of while loops
  • Use auto instead of repeating explicit class names
  • Use weak pointer instead of manual bookkeeping
  • Change all uses of 'CInt' to 'Int32' in the SDK overlay
  • Change Integer#year to return a Fixnum instead of a Float to improve consistency
新しく何かに対応した/機能上の制約を取り払った
何かを使うようにした
より好ましい実装に改良した
何かを出来ない/しないようにした
  • Don't bail reading a metadata instance if swift_isaMask isn't available
  • Don't exit until the parent asks for an instance
  • Don't include Parent pointer in Nominal/BoundGeneric TypeRef uniquing
  • Don't use MatchesExtension for matching filters
  • Don't use ES6 class for AutoUpdater windows class
  • Don't use MatchesExtension for matching filters
  • Avoid `distinct` if a subquery has already materialized
  • Avoid infinite recursion when bad values are passed to tz aware fields
オブジェクトの内容や挙動確認やすくした
Assertを追加した
不要コードを除去した
コードを移動した
名前修正した
さなバグタイポ修正した, 警告を潰した
バグや好ましくない挙動修正した
テストコメントドキュメントを追加した
テストを削除した
テストコメント修正した
ドキュメント修正した

表現傾向とまとめ

以上の用例をふまえ、今回の参考ログ8540件から先頭の単語を出現回数で並べると次のようになった。

Add1149
Fix1014
Update584
Remove566
Use382
Don't260
Make228
Move178
Change103
Rename85
Improve76
Avoid68
Allow65
Implement60
Handle58

コミットログの基本形はもちろん動詞 + 名詞である名詞固有名詞複数形、不可算名詞が多いが、単数形場合冠詞は a が使われるか、あるいは省略される。the はまず使われない。

何かを追加した、という表現では非常に広く Add が使われる。メソッドからテストドキュメントに至るまで大概これでまかなえる。

一方、何かを修正した、という表現では広く Fix が使われる。「何か」は typocrash といった単語からメソッド名まで幅広い名詞を取るが、動名詞はあまり取らないのと、that節は取らないのでその点は注意が必要である

Fix は「何かが正しく動くようにした」ことを示し、正しい動作内容が何かを説明しない。そこで正しい動作内容に言及したい場合Make sure が使われる(こちらはthat節が取れる)。ただし Fix よりもニュアンス的に重い表現と思われ、Fix を使わず Make sure ばかり使うのはちょっとキモいのではないかと思う(Ensure はさらに重い表現っぽい)。

また、Fixtypo 以外でのドキュメント修正に対して使われることは稀である。対して Update はドキュメントコメントテストに使われ、本体コード修正に対しては使われない。本体コード修正にあわせてテスト更新したなら Update が使われる。ただ、テスト機構それ自体バグ修正したなら Fix である

無駄な何かを単純に除去したなら Remove を使う。これまでのもの(A)からのもの(B)に切り替えたのであれば Use B instead of A か Change A to B が使われる。新たに何かを利用するようにしたのであれば Use を、利用を取りやめた場合Don't use を使うことが多い。

何かをしないようにしたなら Don't を、内部実装効率化なら Make A + 比較級/形容詞Improve が使われる。

中身の変更を伴わない単なる名前の変更なら Rename A to B、コード機能論理上の場所を移動させたなら Move A to B である

この辺はリファクタリングと呼ばれる行為と思うが、Refactor というぼんやりした動詞はあまり使われず、このように変更内容の種類に応じて動詞が使い分けられている。

余談

コミットログにはWhyを書くべきだ、というのを何かで見かけたので because とか since を使ったログがどの程度あるかを調べたが、8540件のうち22件だった。基本的に短く、シンプルに、一目で意味が取れるログが好まれる傾向がある。例えば get rid of とか2件しか使われておらず、圧倒的に remove である

一方で、シンプル単語だけど開始単語としては使われないものもある。例えば次のような単語である。Expand(9)、Extend(8)、Print(5)、Optimize(5)、Publish(4)、Append(4)、Modify(3)、Manage(2)、Revise(2)、Dump(2)、Insert(2)、Migrate(2)、Enhance(1)、Edit(1) 。いずれもカッコ内は8540件に対する冒頭での登場回数である。結局、より一般的平易な単語で表せたり、Refactor同様に抽象度が高すぎると使われないのだろう。

おわりに

8000件もログを見たおかげで、迷いなくコミットメッセージが思いつくようになったのが個人的には今回書いてて最大の収穫だった。たぶんカンニングペーパーを作る行為それ自体効率のいい学習になるという話と同じだと思う。

このまとめも100以上用例を転載してあるので、それを読むだけでも多少は効果があるんじゃないかと思う。同じようにコミットログ書きたくねぇなぁ英語わっかんねぇなぁと思っている人にとって、何か役に立つところがあれば幸いである。

2016-03-26

Accessクエリが楽すぎて

長らくODBC接続Accessからクエリデータを触っていた

テーブルの結合とかGUIでできてすごい楽

が、標準PCOffice入れててもAccessは入ってない現場もそこそこ多い

Accessクエリに代わるようなソフトってなんかないですか

Object Browserは使ったことあるけど、GUIメインで操作するというものではない感じ

とにかくAccessクエリに慣れてしまって、自前でAccess単品で買おうかってくらい

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="このエントリーをはてなブックマークに追加ツイートシェア

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