「サードパーティ」を含む日記 RSS

はてなキーワード: サードパーティとは

2016-08-09

golang半年近く使ってみて

後なんかweb系の企業golang採用多いので、ある程度詳しくなっておけば就職困らなそうという予防線

今のところが成功しなかったらeurekaとかmercariとか雇ってくれませんか!

どっちもユーザーです!(ペアーズでは3名ぐらい逢った、メルカリではバイクMacbook Air売ったなー。)

ポケモンGoとかやんねーし、地味に自分がよく使っているアプリサービスから成功パターンを得るのがいいのかなぁ

なんか、人との接点がうまくできているCtoCサービスがうまくいっているような感じが(CtoCなんだから当たり前か、何いってんだ)

人とコンバージョンしたいです。

2016-05-12

http://anond.hatelabo.jp/20160511210127

はてなゲーマー様や自称ゲーム市場事情通の皆さんってこういう木を見て森を見ない議論好きだよね。


海外サードパーティがきちんと自分たちゲーマーじゃないユーザーCS機に呼び込んで囲い込み、

その囲い込んだ非ゲーマーゲーマー調教する仕組みを整えてる。

から市場が拡大するし、拡大した市場ニッチゲームからAAAタイトルまでの売れる絶対数が増える。

自分たちできちんと自分たち商売の土壌をメンテナンスしてる。


じゃあ、国内はどうだろう?ゲーマーではないユーザーを囲い込むために非ゲーマーゲーム会社が目を向けると

自称優良顧客様がヒステリー起こしてわめき散らさないか

「こんな企業は終わりだ(俺を大事にしない企業など終わって欲しい)」だの、

ゲーマー大事にしないか日本市場は駄目なんだ(俺を大事しろ)」だの、

自分だけを見てないとヒステリー起こしてわめき散らすゴミカス巣窟だろ?

海外だってそういうゴミカスはそれなりの数居るんだけど、ゲーム会社そいつらの奴隷にはなってない。


なぜ日本だけそれが問題になって、海外ではそうならないのかの根本の原因は少子化

一番時間価値が低くて大量に浪費可能子供絶対数が減ってるんだからゲーム専用機市場新規ユーザーは減る。

ゲームだけで育ってきてゲームに嫌われたら人生終わりな老害も年をとるごとにゲームばかりやってられなくなって

自然減少してはいるんだけど、それ以上に少子化新規ユーザー絶対数が減ってるから老害割合はむしろ増えてしまってる。

から割合の増えた老害ヒステリー国内メインで活動するゲーム会社無視しづらい。今の日本の政治状況と同じだね。

ゲーム会社だけではどうにもならない問題だけど、ゲーム会社とその客がお互い足引っ張り合って

全員が不幸になる道をたどってるのが国内ゲーム専用機市場の唯一にして最大の問題

そこを何とかしないとどうにもならんよ。

タイトルの売り上げ比率という上っ面の問題だけ切り取って嘆いても何も変わらん。

2016-04-26

anond:20160426145507 の続き

anond:20160426124418anond:20160426145507 の続きだゾ。てか長えよ

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数動画アップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる認証プロキシSaaS アプリを筆者は作った。好評だったが、これはもちろん本来あるべきでない欠陥のexploitのはず。)

(略: 個人ユーザ向けのAPI設計ばかりで、雇用者上司アカウント管理するという観点がない。SAMLでは普通にできるのに、OAuthとなるとセキュリティ的に云々と言って拒むサービスばかり。別のUIで既にできてることをAPIにしても意味がない。これまでできなかったことをAPIで可能にするのではなく、単なるシングルサインオンでよければ他にある。実際Googleは個人向けにはOAuth活用しているが、Google Apps for BusinessはOAuth以外のシステムを使っている。)

(略: 主要な設計ミスは、外部サービスすべてを同等に疑うところ。管理者が各サービスの信用性を判断して権限を調節できるようにしないところ。これまでどれほど多くの製品OAuthの面倒さのために失敗してきたことか。)

普通実装における」OAuth代替

適切な OAuth ベース設計とはどのようなもの

ここまでで「普通実装における」OAuth がまったくおかしいということはわかりましたが、OAuth が実際うまくいくのはどういうときでしょうか。

初期の OAuth 規格および概念におおよそ付き従っているシステム一般的に言って、新しい規格ベースのよりもセキュアで、マシです。OAuth 1.0 の実装がすべてセキュアだというのではありませんが、たいてい問題は少ないです。こうしたシステムは通常、次のふたつのアプローチのどちらかに従っています:

はいえ、このように設計されている OAuth ベースシステムはごくごく希少で、しか一般的にこうしたシステムは、他のところで使われている OAuth とは似ても似つかぬものです。OAuth 1.0 規格の方に寄って頑張っていますが、公式には 1.0 は非推奨ですから、こうしたアプローチを使っているシステムはそのうち「アップデート」されて OAuth 2.0概念や追加機能すべてを加えて再構築され、セキュリティユーザビリティをだめにしてしまうことになります。これこそ筆者があらゆる OAuth ベースのものを見逃したくない理由です。もっと古く、もっと機能的な形式OAuth を使っていても、システムに「改善」が必要だという素敵な考えを管理者のだれかが閃いて台無しにしてしまうからです。ご迷惑をおかけしてすみませんと言うぐらいなら、まったく別のものを使うほうが良いですよね。

他の選択肢

他に手はないかと探すとき、人々はよく他の「フレームワーク」にはどんなものがあるかを知ろうとします。しかし、考え抜かれたセキュアな設計を実現するためには必ずしもフレームワーク必要というわけではありません。現状、OAuth とはどのようなものかについての意見サービスごとに異なっていますので、承認の具体的な動作の仕組みもまったく一定ではありません。そんな中でフレームワークを探しまわるのは、簡単にできることをいたずらに複雑化しているだけのことが多いです。唯一ほんとうに難しい要素、しっかりした規格の必要な要素は、使用する鍵パラメータ改竄を防ぐため変数署名する方法だけであり、この点に関して、ほとんどの OAuth ベース実装は一切何もしてくれません。

ウェブサービスの最大手である Amazon は、世界中企業サービス提供する一流プロバイダで、合計 30% 以上という途方もない市場シェア他者を圧倒していますAmazonアプローチは、自分アプリ認証情報を生成できるコントロールパネルへのアクセスを、すべてのアカウントおよびアカウント管理者提供することです。この認証情報で、どの Amazon サービス作業できるか、そのサービスでどの操作を実行できるか、どの権限作業しなければいけないかを指定できます。この認証情報必要に応じて「アカウントホルダ」の人が破棄することもできます

AmazonAPI における認証承認技術には、本質的制限が多く潜在的危険性のあるリダイレクトを一切必要しません。Amazonプロトコル認証情報は、直接送ることは一切なく、データ署名に使うのであって、これでブラウザを通してパラメータを送る必要のあるときにも改竄不可能にすることができるのです。

Amazon設計アカウントの利用状況を API の利用まで適切に把握できますし、API認証承認もすべて Amazonからスタートし、その際のアプリ認証情報も「Amazon の」コントロールパネルから生成されます。この認証情報はその後、いかなるトークン交換システムも使わず直接 API プロセスで使われます。この設計なら「普通実装における」OAuth が達成している真のセキュリティ目標をすべて達成し、かつ前述したセキュリティ上およびユーザビリティ上の問題をすべて回避しています

ひとつ言及せざるをえない短所は、Amazon権限システムが幾分わかりにくく、あまりユーザに優しくないということです。ただし、このことは何故かほとんどのコントロールパネルにも言えることで、いずれにせよ UI 設計問題であって、承認プロセス自体の失点ではありません。さらに、Amazonコントロールパネルはかなりキビキビ使えて、それ自体API でも使えます。この点たとえば Google場合のように、筆者の知る限りメタ API もなく、何をするにも何十もの手順が必要なのとは大違いです。

Amazon認証および承認メソッドは他のサービスプロバイダにも幾つかコピーされていますGoogle 自身企業向け製品の一部でこれを利用できるようにしていますGoogle 自身純粋OAuth 設計企業サービスに向いていないことを認めており、企業サービスには JSON Web Tokens (JWT) の利用を推奨しています

JWT はサービス間の SSOAPI 利用を可能にする規格です。多くの点で JWT は SAML に似ていますが、SAML はややこしくて、XML Security (名前と違って、まったくセキュアではない) の上に構築され、API 利用に向いていないのに比べ、JWT は SAML の主要な目標を、単純かつ使いやす方法で一切の面倒なく達成しています。HMAC 実装ひとつ用意し、JSON の構築と解析の方法を知っておけば JWT は使えます既製品をお求めでしたら、膨大な JWT ライブラリが既に存在していますよ。

ただ Google場合典型的な JWT 利用法よりも高度で、HMAC のかわりに、もっと高度ですがこの分野では人気の低い RSA デジタル署名を利用するよう要求していますGoogleコントロールパネルではアカウント管理者自分企業サービス用に新しい鍵ペアを生成でき、API ログイン署名するために使う秘密鍵ダウンロードできます。こちらのほうが HMAC よりセキュリティは高いですが、Googleプロセス全体を本当に無駄に複雑化していますコントロールパネルしょっちゅう完全に再設計して、前と同じことをしたいのに使い方が違っていて混乱する点は言うまでもありません。JWT 利用の実例必要なら他をあたるようお勧めします。

他に使われている技術は、サードパーティがどんな権限必要としているかをある種の XMLJSON ファイル定義してウェブサイト送信できるようにするサービスのものです。ユーザがあるページを自分アカウント訪問し、ファイルURL (あるいは中身) をそこに貼り付けると、その外部サービスあるいはアプリが求めている権限の一覧やそこに含まれ説明などが表示されるようになっています。それを見て認可したいと思うユーザは、認証情報を生成してそのサードパーティアプリあるいはサービスに貼り付けますユーザは後で無効にしたくなったら認証情報を破棄することができます。これも、開発者おかし負担を強いることなく、すべてのアカウントAPI サービスがあり、権限管理を備え、サービス自体からフローが始まる、実にセキュアな設計です。

承認管理のためにサービスから提供してもらう必要が本当にあるのは、適切な役職 (管理者アカウント所有者など) を持つユーザ自分に割り当てられた権限や (望むなら) 期限を持つ認証情報API 利用のために生成できる何らかのパネルだけです。こうした認証情報はその後、お好みのセキュアな認証システムを通して利用することができます。たとえば HTTP Basic Authentication over HTTPS のような単純なもの、これは事実上どの HTTP ライブラリにも入っていますし、HTTP Digest Authentication、これはもっとセキュアでありながらほとんどの良質なライブラリサポートされていますし、その他 HMAC, RSA, 楕円関数など認証情報ネットに通す必要のない暗号学的テクノロジー活用した認証プログラムに基づくものなら何でも使えます特に HMAC は、承認認証実装するほとんどすべての人 (Amazon や、一部の OAuth 実装も含む) によって既に使われています

こういった種々の実績あるテクニックは、セキュアなプラットフォームを作るために CSRF 対策など複数フレームワーク同士の相性を勉強する必要があるという重荷を軽くしてくれますし、一般的に、既存アーキテクチャワンタッチで装着できるようなモジュール化の実装が可能です。ユーザアプリ認証情報が盗まれる可能性をなくしてくれます。ややこしい CSPRNG を常に使用する必要もありません。このようなシステムOAuth の生まれるずっと前から存在しており、現在でも一般的です。OAuth は、ユーザ認証情報要求したり他に弱点があったりするような一部の劣悪な設計システムよりはセキュリティが良いかもしれませんが、既にある真の設計を置き換えるものではありません。OAuth が解決すると主張する問題点は実のところ、既存の良く設計されたシステムには存在していませんし、「普通実装における」OAuth は実のところ、解決すると主張する問題の多くを招き入れるばかりか、最初存在していなかった問題まで生じさせています宣伝文句と違って、OAuth にすれば自然と驚くほどセキュアになるというわけではなく、むしろ数々の短所実装の困難さを考えれば、他の考え抜かれた選択肢のほうがはるかに優れています

これからサービス設計をして API アクセス提供することになっている方はどうか、ご自分が実現しようとなさっているのが何なのかを本当に考えてください。他の人がやっていることをコピーするだけで済ませたり宣伝を丸呑みしたりしないでください。どうしてもコピーしなければいけないなら、Amazon (これが最善です) や Rackspace, IBM SoftLayer, Linode, VULTR, Zoho, Zoom ほか、API の素直で健全認証システムを構築する方法について現時点で多少なりとも理解のあるところをコピーするようにしてください。

2016 年 4月 Insane Coder

http://no-oauth.insanecoding.org/

anond:20160426124418 続き

プレビューまでは全文見えるんだけどな。すまんやで。しかもまだ続く anond:20160426150324

anond:20160426124418 の続き

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくありますGoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、アプリ認証情報 (client_id と client_secret) を盗んだ人ができる悪行にいくつか言及しています。以下に、この攻撃と組み合わせることで (これまで筆者の知る限り公表されていない) 危険行為を実行可能にする問題をいくつか取り上げますさらに皆様の独創性にかかれば、「秘密」のはずのものを盗んだ人が悪用できる方法は他にも発見できるはずです。

セキュアでないトークン

トークンベース認証は多くの開発者にとって新しい概念です。そのため誤解も多く、EVS のようなもの設計する開発者の中にも、ただ何かの設計ガイドライン (たとえば OAuth) に従って API の動作を決めれば、あるいは他のプラットフォームのしていることをコピーすれば、自分プラットフォーム自動的にセキュアになるはずだと考える人が少なくありません。しかし何かをセキュアにするには、その要素ひとつひとつを余さずセキュアにする必要があり、それらの組み合わせすべてをセキュアにする必要があり、全体の枠組みもセキュアにする必要があります。思い出してください、全体のセキュリティ強度はその弱点の強度に等しいのですから、何らかの大まかなフレームワークを固守することだけに頼りきって、その通りに使う限り何をやってもセキュアだ、などと安心するわけにはいきません。OAuth ベースフレームワークそれ自体は、その内部要素のセキュリティを確保することに関しては殆ど何もしてくれません (ある種の要素で、あからさまにセキュリティを害するものだけは別)。

トークンベースシステムで少しでもセキュリティらしさを出すには、最低でもトークン生成に暗号学的にセキュアな擬似乱数生成器 (CSPRNG) を使う必要がありますが、この話題はあまりよく理解されていません。さらに悪いことに、一般的スクリプト言語の適切な CSPRNG 用 API は非常に少なく、しかしそうしたスクリプト言語が、人気ある最新サービスの多くを設計する際の基礎となっていることが多いのです。

もし生成されるトークン予測可能であれば、攻撃者はトークンを推測するだけで別のユーザになりきって悪意ある行為をすることができてしまます。筆者は、fortune 500 クラス大企業による OAuth ベースサービス一種の単調増加 ID (おそらくデータベースフィールド?) をそのままトークンに使っているのを見たことがあります。他にも、生成されるトークンがすべて単調関数の出力のようなサービスもありました。よく調べてみると、それは現在時刻に基づく非常に単純なアルゴリズムでした。こうしたシステムでは、まず自分としてログインし、現在トークン ID を見て、その後の ID を予測すれば、続く任意ユーザになりかわってトークン交換その他の操作にそれを使うことができるでしょう。他のテクニックと組み合わせれば、もっと標的を絞った攻撃も可能です。

このクラス攻撃は前述のセキュリティ文書で「4.5.3. オンライン推測による新規トークン取得の脅威」や「4.6.3. アクセストークン推測の脅威」に分類されています。この問題には解決策があるとはいえ、現時点でこの間違いを犯しているサービスの膨大さと、この間違いの犯しやすさを考えると、任意OAuth ベースサービスが外部レビューセキュリティを証明してもらえる可能性はあまり高くありません。

本欄の主眼ではありませんが、乱数に対する攻撃の中には、セキュリティを固めた CSPRNG を使っていないと OAuth ベースサーバを完全に破壊してしまえるものもあります。こうした問題は他のシステムでも非常に困ったものではありますが、動作のすべてが乱数のやりとりの上に成り立っている普通OAuth 実装では、より一層この問題が際立ちます。こうしたトークンは EVS のサーバ側で生成され、「普通実装における」OAuth がよくやる使い方ではサーバ信頼性を奪い、関連するトークンすべての予測可能性を高めていきます。最新の攻撃手法を防げるセキュリティ強化 CSPRNG が用意できないのであれば、もっとハードルの低い別のプロトコルに乗り換えたほうが良いでしょう。

一方、一部の OAuth ベース実装乱数必要性クライアント側に移すような構造になっていることも注目しましょう。色んな意味で、これは問題を別の場所に移しただけではありますが、サーバ側のアタックサーフィスを減らすのは事実です。これによって、少なくとも情報強者利用者は、信頼できるサービスをセキュアに使うことが可能になります。ただし情報弱者脆弱なまま放置ですが。今回の例に当てはめてみると、この種のセットアップでは AFCP の開発者が頑張って EVS をセキュアに使えるようにすることと、EVS 自体が陥落する危険回避することは可能ですが、ABC や XYZ が EVS をセキュアに利用するかどうかは別問題です。

クロスサイトリクエストフォージェリ (CSRF)

本論に入る前に指摘しておきたいのですが、CSRF 攻撃はその名前に反して、外部サイトからスタートする必要はありません。CSRF 攻撃というのは、自サイトへのリンクユーザが貼れる、掲示板メッセージングソフトのようなサイト自体からでもスタート可能なのです。

色々な手法CSRF に立ち向かうべく設計された数々のテクニックフレームワークがあります。これらのシステムの多くは、OAuth ベースのもの統合すると使いものにならなくなったり、サイト攻撃さらしかねない行為を促すことがあります

CSRF を防止するひとつの仕組みとして、ブラウザから送られる referer (原文ママ) が外部サイトを指していないことを確認するというものがあります。多くの OAuth 実装ユーザ特定の外部サイトから連れてくるよう要求しまから、この防御策は執行できません。OAuth サーバリダイレクトする膨大なサードパーティドメイン、また関係する URL やドメインの完全なリストは明文化されていないうえに折々で変更があるため、EVS のドメインとページ全体をホワイトリストにするのは不可能です。

また、EVS の提供者が寝返って AFCP を攻撃しようとする可能性がないかどうかも検討する必要がありますOAuth の背後にある原則ひとつOAuth ベースサービス側が利用者を信用しないことです、しかし同時に、利用者側には CSRF 回避策を見なかったことにしてサービス側を完全に信用することを要求しています理想認証システムというものがあるとすれば、一方通行ではなく相互レベルの不信を確立するでしょうに。

転送元と転送先のどちらかだけの、部分的ホワイトリストというのも難しいことがあります。使っている CSRF 対策フレームワークによりますが、機能オンオフ中間がなく、特定のページや転送元だけを無効にすることができないかもしれないので、その場合 EVS 利用者CSRF 対策フレームワークを一切使用できなくなります

OAuthCSRF 攻撃を防ぐ CSRF トークン指定するようにと、オプショナルな state パラメータ定義していますしかしながら、OAuth ベースサービス一般的state の長さや文字種を制限し、要求どおりそのままでさないことがあるようです。そこで、おかし互換性問題が起こるため、多くの OAuth ベースサービス利用者リダイレクトのエンドポイントにおける CSRF 防御をすべてオフにせざるをえない状況に追いこまれています。これは「10.14. コード・インジェクションと入力バリデーション」に分類されていますstate パラメータの別の懸念は、EVS 側で stateアクセスのある人はだれでも、リクエスト改竄して、それ以外はまったく有効なままのパラメータを付けて AFCP にブラウザを送り返すことができるという点です。

OAuth ベース API の利用者は、自分アプリサービス登録する際にひとつか複数の URI をカッチリ決めておくよう求められるという制限も課せられています。これは redirect_uri に使えるホワイトリスト URI です。この仕組みにひそむ重大なユーザビリティ問題は後述するのでひとまず措くとして、この制限のせいで開発者は、state パラメータや他の潜在的危険の伴うアイディア姑息な工夫をこらし、泥沼に沈んでいくはめになっています。多くの OAuth ベースサーバは、ホワイトリスト URI をひとつしか許可していなかったり redirect_uri との完全一致のみ有効パラメータの追加を認めなかったりしています。このせいで開発者たちは CSRF 対策フレームワークの利用をやめたり、あらゆる危険ものstate パラメータに詰めこもうとし始めたり、浅薄システムを自前で作り出したりしています。その結果、redirect_uri と state の組み合わせによってはユーザ不適切なページに誘導する危険性が出てきます。これは「10.15. オープンリダイレクト」に分類されます

こうしたリダイレクトの問題は、パラメータをしっかり認証していないせいで、それ自体悪用可能なのですが、これを前述の「OAuth サービスへの偽装」問題と組み合わせるとユーザ大惨事をもたらしかねません。盗んだ client_id と client_secret を使えば、悪いやつらは AFCP とまったく同じ情報認証できるので、本物の AFCP にも見ぬけないようなリダイレクトを作ることができます。また、悪意あるユーザも、本来自分の持っていない AFCP 内の権限を取得するような state パラメータの利用方法改竄方法を見つけることができるかもしれません。その際には、おそらく盗んだ認証情報も使うことでしょう。概して、「普通実装における」OAuth の低品質設計のせいで、また特定の分野に関する教育レベルが低い外部開発者の直面する問題のせいで、OAuth ベース利用者に対する攻撃はしばしば、本来あるべき状態よりもずっと容易になっています

ここで読む意義のあるものとして、さらに「3.5. リダイレクト URI」「3.6. state パラメータ」「4.4.1.8. redirect-uri に対する CSRF 攻撃の脅威」があります

章のまとめ

セキュリティに関して言えば、「普通実装における」OAuth仕事ぶりはとてもひどいです。OAuth が目指していると思われるセキュリティ目標の多くは、達成されていません。さらに、OAuth ベースサービスの中には、種々の攻撃に対して無防備でいることを利用者公然要求するものがありますサービスをセキュアに使える場合も、そのことが知られているとは限らず (サービス側の、トークン生成手法といった重要セキュリティ詳細が明文化されていないうえにクローズドソースなため)、OAuth は今なお多くの低品質プログラミング習慣を招いていますOAuth は外部の開発者を守る点でほとんど何もしませんが、そうした開発者が使っている各種フレームワークの方はといえば、こちらも真のセキュリティ提供していなかったり、厳しい自制と注意がなければセキュアに使えなかったりする代物です。

この記事についていえば、個人的蔓延していると思った問題の一部を取り上げたものに過ぎません。この中には、極度に低質な、一切 OAuth の規格で義務付けられていない慣習を、他所OAuth に使っているのを見たまま開発者コピーした結果というものもあります

OAuth ベースサービス開発者もその利用者側の開発者も、OAuth ベースプラットフォーム実装したり利用したりするためには、ここでリンクした文書をすべて読んで理解する必要があります。挙げられている 50 クラス攻撃も、各クラスの深刻度も完全に把握する必要がありますし、そのうえで「実装仕様書セキュリティガイドラインには漏れがないとは限らない」ことにも留意すべきです。この記事は公式文書にない問題をいくつか取り上げているとはいえ、OAuth セキュリティ問題の表面をなでているに過ぎないことも覚えておくべきです。ここに混ざって、公式 OAuth 提案に加えられる変更点はどれもまったく新たなセキュリティ問題を引き起こすものですが、残念ながら変更はよくあることなのです。そこで各々が、乱数生成やセキュリティ調査技術といった OAuth 以外のセキュリティ関連分野も理解していなければ、OAuth でそれなりのレベルセキュリティを実現することはできません。

真のセキュリティをお探しの方には、よそを探すようお勧めします。最後の章で OAuth の代わりになる選択肢をいくつか取り上げます

ユーザビリティ関連

(略: ふつう実装では、サービス側がプラグを引き抜くようにして自由利用者出禁にできる。ビジネス的にもまずいし、悪意あるユーザが API 利用者を騙って出禁になるとアプリへの DoS になる。)

(略: サービスからは API 利用者という大きすぎる単位しか見えないので、たとえばビデオカメラアプリ単位で利用帯域などを制限せざるを得ないが、そうするとそのビデオカメラは、一部ヘビーユーザのせいで他のユーザが締め出される事態になる。OAuth 以外のサービスならふつうユーザ単位対策としてユーザ開発者アカウントを取得してもらうのも面倒すぎる。ていうか手動プロセスを挟んでたり。)

(略: ふつう実装SaaS モデルしか見ていないので、URI を持たない AFCP のような社内ソフトや、ビデオカメラのようなデスクトップアプリには使えない。アプリcURL 的なもので API を叩こうとしても、JavaScript必要だと言い張るサービスもある。グローバル企業が地域別にドメインを分けていたら URI が足りない。客ひとりひとりにサブドメインを与える製品だと URI が足りない。足りるとしても追加・更新メタ API で簡単にできない。ひとつの URI ですべてのリクエストをこなすのセキュリティ問題もあり、ロードバランス等の必要性も出るし、社内ソフトデスクトップアプリに余計なウェブサイトへの依存性を加えることになる。httpサーバlocalhostで立てるとかアホか。)

(略: オープンソースしづらい)

(略: トークンが定期的に期限切れになるので可用性が下がる。たとえばビデオカメラから複数の動画をアップロードしている途中で切れたらムキーってなる。再認証して途中からできるのもそれはそれで CSRF の温床。AFCP のような場合は期限切れがあってはならないので、パスワード等を預かる

OAuthのことを1ミリも知らない俺が

OAuth ディスの記事を酒の勢いで訳してみたゾ。前半はつまらないから、「章のまとめ」か、それ以降だけ読むといいゾ。なぜか後半が切れてた。こっちだけでいいゾ anond:20160426145507 anond:20160426150324

http://insanecoding.blogspot.com/2016/04/oauth-why-it-doesnt-work-and-how-to-zero-day-attack.html

OAuth がうまくいかない理由と、既存サービスゼロデイ攻撃方法

OAuth とは

認証 (authentication: 本人確認) と承認 (authorization: 権限付与) のシステムを設計し、API を規定し、複数の異なるシステムを統合するために用いられる提案をまとめたものです。

OAuth には色々な種類があり、version 1.1a や 2、その各部の上に他の規格を乗せたものなどが存在します。世の中に出回っている数々の実装によって、具体的な利用状況は大きく異なります。

おことわり

前にも OAuth について書いたことがあり、たくさんの反響をいただきました。前回の記事に対する批判の一部を避けるため、今回の記事について先に断っておきたいのですが、この記事は OAuth の使われる典型的な場面に焦点を当てており、論じられる点のほとんどは、何らかの方法OAuth を利用する大手サービスのほとんどすべてに当てはまるということです。

言いかえると、OAuth を用いているあらゆるプラットフォームが壊れているとは限りません。OAuth にはバリエーションが多いうえに、2.0 だけに限っても 76 ページに渡るパターンがありますので、OAuth に基づいた何かに適合していながらもセキュアであり、使っても問題ないものは存在しうると言えます。ですから、あなたお気に入りOAuth 実装や設計が、ここで論じられる問題の一部または全部を免れていることもありえます。確率は低いですが。

また、OAuth を使っているものの中には規格を誤用しているものがあるとか、OAuth はその使い方を強制しているわけではないとか言う人もいるかもしれません。どちらにせよ、ここでは特定の OAuth ベースの規格について述べるのではなく、現状で大手が OAuth をどう利用しているかについてを、それが規格に適っているかどうかに関わりなく論じるつもりです。こうすることで、多くの読者に影響を与えることになるでしょう。危険な方法OAuth を使っているサービス利用者であっても、また自ら OAuth ベースサービスを管理していて、他のみんなが作っているのを真似てプラットフォームを作ろうと思っている人だとしても関係があるのです。

記事の構成

この記事は長くなりますし、言ってみればほとんどの章はそれ自体でひとつの記事として十分なほどの話題を扱いますので、大まかな流れをご説明しておきましょう。

この記事は、現在 OAuth 業界でおこなわれていることを調査した結果のまとめです。OAuth を使う製品のすべてにこの記事のあらゆる点が当てはまるというのではなく、危険だったり無価値だったりするサービスの背後に見つかった慣例や根本原因を紹介する記事です。

この前書きのあとは、まず OAuthセキュリティ欠陥を分析することから始めるつもりです。こうした欠陥の中には、セキュリティコミュニティでよく知られていて、書籍などですでに分析されている一般原則が当てはまるものもあります。しかしこの記事では書籍化されていないケースも扱いますし、有名な欠陥についても、平均的な開発者および責任者に理解しやすく、対策の必要性がはっきりするように工夫するつもりです。

その後は、OAuth の主要素が一般的に言ってどのように実装されており、そうした普通の実装がどのようにサービスを使いものにならなくするのか、すなわちそのサービスで達成できることを極度に、不適切に、かつ意図に反して低下させてしまうのかを分析します。ごく一部のケースでは回避策の足がかりになるかもしれないテクニックについて論じますが、そういうのを実装する馬鹿らしさにも注目します。こうした記述の中では繰り返し何度も、OAuth を使う人たちがどれほど自分と自分のビジネスにとって損なことをしているのかが説明されます。

最後に、OAuth が適切に使われうる数少ない場面と、すでに利用されている OAuth の代替品を簡単に取り上げます。代替技術に関する調査の結果を提供するつもりですが、その中には Amazon のような大企業がセキュアで使いやすく信頼性の高い API を実現するために何をしているかの報告も含まれるでしょう。

責任ある情報公開

いま普通に使われているかたちにおける OAuth の欠陥の幾つかを悪用すれば、大手サービスに対して強力な攻撃を仕掛けることができます。OAuth に対する攻撃は何も新しいものではありません。IBM や Oracle を含め、懸念した IETF メンバーOAuth ベースサービスに対する攻撃を 50 クラスも記述した 71 ページもの文書を 3 年以上前に出したように、また筆者も前回の記事でこうした点のいくつかを議論したようにです。それにも関わらず、OAuth ベースシステムの主要なセキュリティ欠陥は非常に蔓延しています。

筆者は、いくつかの大手企業の役員や開発者に、そこの OAuth ベースシステムが抱えるセキュリティ欠陥を指摘したことがあります (そのうちのひとつは 4 年前のことです) が、全員、自社システムを修正するために一切何もしませんでした。まるで、OAuth の人気度からして、他の現実的な解決策をひとつも聞いたことがなく、それゆえに OAuth が最もセキュアな選択肢に違いないと決めてかかっているようです。どうも、OAuth のコア原則に対する攻撃のデモを文書化した情報も、聞いたことがないか、肩をすくめて無視するかしているようです。そこで、この情報をもっと広く拡散することによって、影響のある人たちの尻を蹴りとばしてあげたい、そしてサービスを設計あるいは管理している人たちにモーニングコールの役割を果たしてあげたいと願っています。

というわけで、OAuth ベースの何かを提供あるいは利用するご自分のサービスを調べて、こうした欠陥の一部あるいは全部が存在することに気づいたなら、どうぞ責任をもってこの情報を取り扱ってください。ご自分のサービスを適切にアップデートしたり、関係する問題に対応するようビジネスパートナーに適切な圧力をかけたりしてください。

ここで言及されている情報やリンクされている情報は今のところ既存のサービス悪用できるかもしれませんが、どうぞ責任ある行動をとり、他人のもの破壊するのではなく改善することを目指してください。この記事は、自社サービス不適切に実装している人たちへのモーニングコールのつもりで、その改善を促すために書いているのであり、悪用したがっているハッカーたちのハウツーもののつもりではないのです。

想定する利用形態

この記事では、ふたつのシナリオに注目して、その場面でどのように OAuth が組み合わされているのか、そしてなぜうまくいかないのかを検討します。記事を通して何度もこれらのシナリオに戻ってきますので、頭に入れておくことは大事です。

まず、Exciting Video Service (略して EVS) というサービスを思い描いてみましょう。ユーザが動画をアップロードしたり友人と共有したりできて、完全公開にしたりアクセス制限を設定したりできるようになっています。また EVS は動画のアップロードや削除、およびだれが視聴できるかの権限管理に OAuth ベースの API を提供しています。

ただ、例としてこの想像上のサービスに焦点をあてますが、論じられる問題はあらゆるサービスにも当てはまります。ファイルであろうと文書ストレージであろうと、カレンダー管理やオンライン会議、ディスカッショングループ、はたまたリソース管理であろうと OAuth ベース API を提供する他のいかなるものであろうとです。また、筆者は本当にどの特定の動画サービスのことも言っていないということを覚えておいてください。問題点の一部あるいは全部は、OAuth を使っている既存の動画サービスに当てはまるかもしれませんが、EVS がそのサービスのことを指すわけではありません。どれが当てはまるかは読者への練習問題ということにしてもいいですね。

ひとつめのシナリオとして、ビデオカメラの製造会社を想定しましょう。そのビデオカメラには、録画した内容を EVS にアップロードする機能のあるソフトウェアを付属させたいと思っています。つまり、ユーザビデオカメラを自分のコンピュータに接続して、その独自ソフトウェアを開き、ビデオカメラからアップロードしたい動画を選んでしばらくすると、それが EVS にアップロードされているというものです。

ふたつめのシナリオとしては、ある中小企業が職員用に EVS で 50 アカウントを購入し、全職員が動画をアップロードして同じ部門の職員と共有できるようにする、ということにしましょう。この会社は A Friendly Custom Platform (AFCP) というソフトウェアで職員と所属部門の管理をしており、この AFCP サービスを EVS に統合したいと考えています。望んでいるのは、管理者が AFCP を使ってだれかを営業部門に配置したら、その職員が自動的営業部門メンバー所有の動画すべてに対するアクセス権を取得するということです。営業部門からいなくなった人には逆のことが起こるようにもしてほしいと思うはずです。

問題点

セキュリティ関連
認証情報の盗難 / アクセス権の詐称

トークンベースの認証システム (OAuth のコア) が現在よく利用されている最大の理由のひとつには、「適切に実装されれば」サードパーティアプリサービスに各ユーザの認証情報 (パスワード等) を提供しなくて済むという点があります。サードパーティに個人ユーザの認証情報を渡すのは、以下の理由から望ましくありません:

上記の問題点は、OAuth だけでなくあらゆるトークンベースの認証システムでも回避できます。よく OAuth の強みとして挙げられていますが、独自というわけでは全然なくて、他にも同じ強みを実現しつつ OAuth の弱点のない選択肢はあるのです。

さて、確固とした土台に基づいてはいるものの、「普通の実装における」OAuth は、上記の問題を回避しようとして以下のような手順に沿ってシステムに情報を提供します:

  1. ユーザサードパーティアプリ/サービス (たとえば AFCP) を訪ねて、特定のサービスと統合したいことを知らせる。
  2. AFCP は、EVS でホスティングされた特別なログインページを出してユーザに EVS の認証情報を入力させる。
  3. EVS は、その指定したアクセスレベルユーザが本当にサードパーティ (AFCP) へ与えたいのか確認する。
  4. EVS は AFCP に一種のトークン (複数の場合もある) を提供し、各種 API コールに使えるようにする。

このトークンユーザの認証情報ではありませんから、そしてひとりのユーザひとつアプリの組み合わせだけに有効で、指定された権限しか持たず、あとから破棄されるようになっていますから、きちんと前述の問題点を回避しているように思えます。しかし実際には、ちゃんとした土台を核として持っているにも関わらず、OAuth の普通の実装で使われているこのフローは、上に挙げた問題すべてに対処しているとは言えません。

この設計はそもそも危険なスタート地点から始まっています。セキュアなプラットフォーム設計の第一原則は、危険な地点から始まったものは既にダメ、逆転不可能、ということです。手順 1 のせいで、EVS 自体ではなく EVS を利用するサービスから始まっているので、ユーザは最初の一歩からして中間者攻撃を受けたような状態にあります。これは、かかってきた電話に個人情報や口座番号などを教えるようなもので、自分の使っているサービスの者だと名乗っていますが、番号が本物かどうか分からなかったり非通知だったり、という場面のコンピュータ版だと言えます。最近はこういう詐欺がたくさんありますから具体例を挙げる必要はありませんね。要点は、接続を開始する相手が信用できなければ、その接続は一切信用できないということです。EVS 自体の側から手順を始めるのでない限り、上に挙げた目標をすべて実現する API 利用のためのセキュアな認証システムは設計不可能です。

(略: 手順 2 で、それっぽいページに誘導すれば認証情報を盗める)

(略: そうした詐欺を企業自体が後押ししているような風潮もある)

(略: スタンドアロンアプリなら、ログインを詐称する必要すらない)

この種の攻撃は前述のセキュリティ文書で「4.1.4. 脆弱性を突かれたブラウザ組み込みブラウザを使ったエンドユーザ認証情報のフィッシング脅威」として分類されています。提案されている解決策は?

クライアントアプリユーザに直接認証情報を求めることは避けるべきだ。加えて、エンドユーザフィッシングや良い習慣について教育を受けることもできる。良い習慣は、たとえば信用できるクライアントにしかアクセスしないことだ。OAuth は悪意あるアプリに対していかなる防御策も提供していないので、エンドユーザインストールするネイティブアプリすべての信頼性に自分で責任を負う。

さらに

クライアント開発者は、ユーザから直接に認証情報を集めるようなクライアントアプリを書くべきではなく、システムブラウザのような信用できるシステムコンポーネントにこの役目を移譲すべきだ。

基本的に言って、OAuthセキュリティガイドラインは、OAuth を利用する開発者ユーザを攻撃しようとすべきではないとか、悪いことをしてはならないと言っています。外部の開発者が悪いことをしないことに頼るというのは、正気のサービス設計者が依拠するセキュリティモデルではありません。

私の知る主要な OAuth ベースサービスはほぼすべて、ここに概説した手法で攻撃可能です。

OAuth こそセキュリティの新たな金字塔だとお考えの皆さん、目を覚ましてください! 「普通の実装における」OAuth は、始まる前から負けていますよ。OAuth が存在するよりずっと前に実装された数多くのシステムはセキュアで、この問題を効率的に回避しています。残念なことに、あまりに多くのサービスが、せっかくセキュアだったのにインセキュアな OAuth モデルに移行してきました。だれかが開発者管理者に「OAuthもっとセキュア」「先取り思考」「将来への投資」とか何とか素敵な (しかし具体性の皆無な) バズワードを並べたてたからでしょう。ほとんどの場合、こうした変更は本当に既存の問題に対応しているのか、あるいは以前のシステムより幾らかでも良くしてくれるのかどうかをレビューすることさえなく実装されています。

OAuth サービスに偽装

OAuth ベースサービス設計でよく見かける間違いは、ブラウザ用に、パラメータひとつとして client_secret (あるいは同様のもの) を受け取るエンドポイントを提供することです。OAuth の client_id と client_secret パラメータは、基本的に言ってサードパーティプラットフォーム固有の API ユーザ名とパスワードと等価ですから、EVS の API を利用する開発者だけにしか知られるべきではありません。パスワード同然のものなのですから、client_secret パラメータは「絶対に」ユーザブラウザを通して送信すべきではありません (ヒント: パラメータ名の中に secret という言葉が入っているよ)。アプリサービスユーザがその client_id と client_secret を見つけることができる場合、そのユーザはそのサービスのふりをすることができ、潜在的には何かイケナイことができてしまうということになります。さらに注意すべき点として、client_secret パラメータを別の名前にするサービスもありますから、ご自分の関係するサービスをよくチェックして、他のパラメータも秘密にする必要があるのかどうかを調べてください。残念ながら、重要な変数が自分の素性をいつも表に出しているとは限らないため、この問題は意外と多く存在しています。加えて、client_id だけ使う認証フローOAuth の上に乗せるサービスも出てくるでしょう。これには用心してください。特定の状況では、そういう client_id はまさしく client_secret 同然の働きをするのですから。

「普通の実装における」OAuth は、ウェブブラウザを使ってユーザを複数のウェブサイトに移動させるわけで、ひとつサイトから別のサイトに client_id と client_secret (あるいは同様のもの) を送ってもらう必要があります。そうやって、たとえば AFCP と EVS の間でこれらをやりとりするわけですから、ユーザブラウザの HTTP ログをモニタリングすれば、本当に見えてしまいます。これはアプリに組み込まれた独自ブラウザ各種でも、単に右クリックすれば何らかのネットワーク・ログ機能を持つ何らかの inspector にアクセスできてしまう場合などには可能です。

EVS と連携した AFCP にこの欠陥があると、AFCP に少しでもアクセス権限のある職員に本来の権限より多い権限を取得させてしまい、本来アクセスできないはずのところに許可が下りてしまう危険があります。別の例では、仮に FacebookGMail 用の OAuth エンドポイントを利用しているとして、client_id と client_secret の両方がブラウザを通して送信される場合、Facebookユーザは全員 GMail に対して Facebookのもののふりをすることができてしまうということです。

この問題は、OAuth エンドポイントユーザウェブブラウザから平文で client_secret を送ってくることを期待するときにはいつも存在します。あるいはそうする必要があると誤解した API 利用者が、埋め込むべきでないところに secret を埋め込むときもです。この脆弱性が存在している可能性が高いのは、エンドポイントが client_secret (または同等品) と redirect_uri の両方を期待する (あるいはオプションとしてでも受け付ける) 場合です。redirect_uri パラメータは、今回のケースで言うと EVS がユーザログインさせたあとでそのブラウザをどこに送るべきか指示するために使うよう設計されています。そうやって redirect_uri がエンドポイントへの転送に使われている場合、その処理はユーザブラウザで実行されることが期待されているわけです。主要な OAuth 文書はどちらも、client_secret と redirect_uri の両方をこうした用途に使うようなケースを指示したり求めたりはしていません。

ざっと検索してみたところ、残念なことに、潜在的に違反の可能性があるそういった OAuth ベース API がたくさん見つかります。GoogleOAuth の色々な利用方法を提案していますが、その中に、両方を一緒に使うことを広めるフローひとつあります:

client_secret: 開発者コンソールで取得したクライアントパスワード (Android, iOS, Chrome アプリとして登録した場合のオプション)

Citrix もこんな間違いをしています:

(略: 以下、実際に脆弱だと確認したわけではないが、secret と redirect を併記しているサイトが列挙されている。)

Google で 2 分検索しただけでこのリストができました。皆様がもうちょっと労力をかければ、ずっと多く見つかることでしょう。ただし、上記リストは、こうしたサービスのどれかが脆弱だとか、誤用しやすすぎるということを直接に示すものではありません。色々な要素があり、たとえば Zendesk は特にこのケースでは redirect_uri パラメータリダイレクトに使わないと明言していますし、アプリからエンドポイントを呼ぶときはフル機能版ブラウザではなく curl を使うべきだとさえ書いて、開発者が危険なことをするような誤解を極力避けようとしています。それでも、経験の浅い開発者はこうしたエンドポイントを独自ブラウザで読もうとするかもしれません。さらに、この組み合わせが世に出回っているというだけで開発者の警戒心が下がっていき、経験を積んだ OAuth ベースサービス開発者でさえも似たような状況で潜在的ヤバイ誤用を気にせず適用するようになってきています。特に client_secret が別の名前になって、「秘密を守る」という概念が失われている場合はそうです。

サービスがこの点に関して壊れている指標となるのは、人気のある複数の OAuth ライブラリがこのサービスでうまく動かないときです。そういうサービス一般的にいって独自の「SDK」を提供しており、サードパーティ開発者が選んだライブラリではこのフランケンシュタイン的な OAuth が使えないと苦情が来たときにはその SDK を使うよう指示します。こうしたカスタマイズは気付かれないまま進行することも多くあります。開発者の大多数は、SDK が提供されているなら、わざわざ手元のソフトで頑張らずに済ませたいと思うものですから。

この種の攻撃は前述のセキュリティ文書で「4.1.1. クライアント機密情報を取得する脅威」に分類されています。しかしサーバウェブブラウザを使用を要求し client_id と client_secret (または似た用途のもの) を同時に渡させるという具体的な攻撃パターンには一言も言及がありません。おそらく、その文書の執筆陣の予想では、こんな馬鹿げたサービスはだれも設計しないだろうし、その API を使う開発者もそれを独自のウェブブラウザや SDK で使ったりはしないだろうと思っていたのでしょう。こうした開発者OAuth の規格からバラバラに取り出した要素をグチャグチャに混ぜて接着しておいて、自分のプラットフォームOAuth 本来のセキュリティを保持していると思っています。そのツギハギのせいでどんな新しい問題が入り込むかもしれないのに、そこは一顧だにしません。残念ながら、これが近年の OAuth 業界によくあるやり方で、この既に猛威をふるっている問題は、パレード参加者がどんどん増えて、人が使っている手法や、使っている「と思う」手法をコピーしていくことで、とどまるところを知らない連鎖になっています。

おそらく、上記のサービスを使っているシステムのうち、この問題のせいで悪用可能なものは多数あることと思います。特にデスクトップアプリでは、コンパイルされたアプリバイナリから秘密情報がそのまま取り出せることは、サービス側で何も危険なことを要求していなくてもよくあります。GoogleOAuth の使い方を多数提供しているうちで、client_secret と redirect_uri を両方受け取るエンドポイントのことが書いてあるのはたったひとつだけだというのは重要な点です。少なくとも Google の場合、redirect_uri があっても、このエンドポイントウェブブラウザベースアプリには推奨していません。しかし、だからといって実際に独自ブラウザでそれを使う人や、このフロー標準的ブラウザ用のエンドポイントコピーする人が一切いなくなるはずがありません。それに加え、Google は例外なのであって、世の中にはセキュアな OAuth フローを受け入れず client_secret (や同等品) を常に渡すよう要求する愚かなサービスが今も満ちあふれており、そのフローウェブブラウザを通るときでさえも要求しているのです。さらに悪いことに、こうしたサービスの多くはユーザウェブブラウザを通して「しか」利用できないのですが、これは後ほど詳述します。

前掲のセキュリティ文書は、 Permalink | 記事への反応(3) | 12:44

2016-03-13

大手家電メーカーは、もうコタツ作ってないのね

炬燵のヒーター部分が壊れた。メーカー保証はとっくの昔に切れてる年数。

なのでヒーター部分だけ交換しようと思ったが、その前にコタツ丸ごと新品だと値段どのくらいなんだろ?

と試しに調べてみたら

http://kakaku.com/kaden/kotatsu/

並んでるのは「YAMAZEN」とか「コイズミ」とか「東谷」とか馴染みのないメーカーばかり。

大手家電メーカーは揃ってコタツから撤退してたのね。知らんかった。

厳密に言えばパナソニック住宅設備扱いの掘りごたつは作ってるけど。

因みにウチのコタツナショナル

石油ファンヒーターから大手家電メーカーが一斉に撤退したのは、ナショナルFFストーブでの死亡事故を受け

購入顧客を把握できない、定期点検義務付けられてない、なのに永久安全保証しろ、ではやってられん

でそうなったのは知ってたけど、コタツ業界もこんなことになってたとは。

まあ考えてみれば日本しか売れないガラパゴス商品だし(イランには「コルシ(Korsi)」と呼ばれる同様な暖房器具

あるそうだが←wikipediaで知った)、電化製品としての機能はこれ以上あまり発展なさそうで差異化が難しいし

いざヒーター部分が壊れたにしても、ヒーター部分の交換だけで済ませちゃって買い替え需要もあまり望めないから

撤退も宜なるかなって感じだわ。

ヒーター部分を探す。こちらもなかなか寡占化が進んでる。「こたつユニット」と呼ぶのか。

http://www.amazon.co.jp/b/ref=amb_link_69775869_35?ie=UTF8&node=85240051&pf_rd_i=3895761=289254069

山善 (YAMAZEN) はメトロ電気工業からOEMらしい。

すぐ使いたいと家人から要望があったので家電量販店にてメトロ電気工業の品を購入。

こたつユニットの取り付けネジの位置コタツの机部分のネジの位置が異なるのでボルトオンとはいかず。

市販金属ステーを介して取り付け。

昔は取り付けネジの位置をあえて各社変えることで交換用こたつユニットサードパーティ排除してたのか知らんが

こたつ及び補給部品供給から撤退するなら、残存メーカーボルトオン取り付けできる製品生産を依頼するとか

変換キット用意するとかしてほしいと思った。

2016-02-06

Twitterの表示が変わる?

Twitterの表示が来週から変わるらしい。日本Twitter文化は割と全ツイート読みな気がする。一部ユーザーテスト的に新しい仕様にしてるみたいだけど評判はイマイチSNSに割く時間が減っている?なんて思ったが前述したように全ツイート読む日本人には不向きすぎる。今や多くの企業Twitter情報を発信している。フィード配信より速いかつ、個人的には見やすいため重宝している。これからは「リスト」で管理しなければいけない時代がやってきそう。そもそもサードパーティアプリも潰れてしまうのか?パターンを選択できるようにできないのか?

来週からの変更がツイ廃たちにどう影響していくのかウォッチ案件

2015-09-19

iOS9の広告ブロック機能の件について

まず、Apple広告ブロックしているのではない。

広告ブロックアプリを作っているのはAppleとは関係のない個人または法人

何の広告ブロックするかしないかの選択基準サードパーティーアプリを作っている個人または法人によって異なる。

Google Analyticsで解析可能にするしないの選択も当然サードパーティアプリ制作側次第と思われる。

どの広告ブロックアプリを選択するかはユーザー次第であり、もちろん広告ブロックアプリを使用しないという選択肢ユーザーにある。

そして、PCブラウザには大昔から広告ブロック機能があった。

今までPCからだと普通に出来ることが、スマホだとなぜかできないことこそが異常事態だった。

しかしながら、今現在も多くのユーザーPCブラウザのABPなどの拡張機能存在も知らないし利用していない。

常に一定数のユーザーけが広告ブロック機能を利用するし、しないユーザー永遠にしない。

現状から考えるとWEB広告マーケティングに何らかの影響が出ることはないだろう。

2015-09-02

FEifは任天堂っぽくない

良くも悪くもセンスサードパーティっぽすぎる

サードパーティっぽいキャラクター世界観(恋愛アダルト要素含む)

サードパーティっぽく食材を組み合わせて料理ができること

サードパーティっぽい武器スキルの種類やネーミングセンス

サードパーティっぽい複雑なシステム(弓が槍に強いとかそういった直感理解できない明らかにゲームのために作られたような法則)

もしあれが中堅どころのサードパーティが新作として出したゲームだったなら…

2015-02-12

LINE Q使ってみました。iOS版です

http://anond.hatelabo.jp/20150211212201

App Storeレビューが極端に低く、最初サードパーティアプリかと疑いました。低評価の大部分は管理質問が消されたなど)やユーザーに対するもので、アプリ品質に関してのものは少ないようです

アプリLINEと同じようにシンプルで良いデザインですが、かなりGoogle+アプリに似ているなと思いました。購読したジャンル(購読情報プロフィールで公開されます)に寄せられた質問タイムライン形式で流れます

んで中身ですが、まあ小中学生ならこんなものかなあと言う印象です。特に酷いとは感じません。小中学生が皆マトモなら少年法なんていりませんしね、色々馬鹿なことをやって成長していくもんです

2014-12-11

Windows クリーンインストール手順について

 自身、年に数回やっている事なのでメモとして残しておく。 ただし Win 8 以降に関しては当てはまらない事も有るかも知れない。


1. 下記をあらかじめダウンロードしておき、CD-RWUSB メモリに書き込んでおく。

 a.最新の Windows サービスパックWindows インストールメディアが最新サービスパックを含んでいればもちろん不要

 b.チップセットドライバIntel場合インテルチップセットソフトウェアインストールユーティリティhttp://www.intel.com/p/ja_JP/support/highlights/sftwr-prod/inf

 c.SCSI or AHCI ドライバWin Vista 以降は標準で AHCI に対応したので不要

 d.対応する最新の DirectX http://support.microsoft.com/kb/179113/ja (なお AMDビデオデバイス場合は不適合でブルースクリーンとなる事がある)

 e.各種デバイスドライバ特にビデオと有線ネットワーク必須

2. BIOS 設定を確認する。 AHCI が使えるなら、AHCI にしておく。 ブート順序(どのディスクデバイスから起動するか)も設定する。

3. Windowsクリーンインストールする。

  この際、起動デバイスをどのようにパーティショニング(分割)するかを考え、起動用パーティションを確保する。 既存パーティションをそのまま使う人もいるが、面倒であってもいったんパーティションを削除して新たに確保し直す事を推奨する。

4. チップセットドライバインストールする。

  これは Windows サービスパックや他ドライバよりも先にインストールする事が推奨される。

 http://www.intel.com/jp/support/chipsets/inf/sb/CS-009270.htm

5. Windows サービスパックインストールする。

  他に何かをインストールしていると、それが要因となってサービスパックインストールに失敗する事例があるため、チップセットドライバの次に優先的にインストールする事を推奨する。

6. DirectXインストールする。

  Win XP の頃まではビデオオーディオドライバよりも先にインストールする事が推奨されていたが、Vista 以降はマザーボード事情により左右されるようになったので、この時点でインストールしなければならないとは言い切れない。 DirectX の最適なインストール時点は、個々の事情に合わせて調査する必要がある。

  ちなみに現在DirectXWeb インストーラ http://www.microsoft.com/ja-jp/download/details.aspx?id=35 が主流であるため、8.項以降にインストールしても問題は無いのだろうと推察される。

7. ビデオデバイスがあれば装着し、そのドライバインストールする。 場合によっては適宜設定を行う。

  Windows はもともと標準ビデオドライバを内蔵しているが、(たとえオンボードビデオであっても)より適合したドライバでそれを上書きする事を推奨する。

8. オンボードデバイスオーディオ、有線ネットワークなど)のドライバインストールする。 また、後のトラブルを避けるために、ネットワーク名を半角英数字だけに変更する事を推奨する(※1)。

9. その他のデバイスを装着し、ドライバインストールする。

  要するに、ハードウェアデバイスインストール順序は、より「内蔵」度の高いものから、低いものへと行うのが原則である

10. Windows アップデートを使えるようにする。

  Windows の状態によっては、Windows アップデート自体がすぐに使えない事がある。 そのような場合Windows アップデートを行おうとすると、Windows から指示が出されるので、それに従う。

  ここで失敗する場合インターネット接続問題がある可能性が考えられる。 ネットワーク設定を確認する。

11. ライセンス認証を行う。

  メーカーPC におけるプリインストール Windows場合不要

12. Windows Genuine 検証を行う。

  http://windows.microsoft.com/ja-jp/windows/genuine たとえメーカーPC であっても、中古品場合検証を推奨する。

13. Windows アップデートで、まず Internet Explorerバージョンを上げておく。

  先にこれをやっておく事で、古い IE の余計なアップデートパッチ適用しなくて済む。

14. Windows アップデートを行う。

15. この時点で、システムバックアップを作っておく事を推奨する。

以上


※1

 実際に起きた問題例として、サードパーティ製のファイアウォールソフトが、日本語を含むネットワーク・アダプタ名を認識出来なかった、という事があった。

 これに限らず、海外製のソフトを使う事が多い場合フォルダ名やファイル名などは、極力、半角英数字だけを使うようにした方がトラブルを避けられる。 本来、そうであってはならない事ではあるが。

2014-09-18

http://anond.hatelabo.jp/20140918102534

Windowsでの動作が公式サポートされてる、ってのはどっから読み取ったの?

サードパーティインストーラが紹介されてるだけ、って何回も書いてあんじゃん?

通じてないの?

https://www.ruby-lang.org/ja/installation/

サードパーティツール

多くのRubyistたちは様々な特徴を持つサードパーティツールを使ってRubyインストールしています

ツールには様々な利点がありますが、オフィシャルサポートしている方法ではありません。 しかし、それぞれのコミュニティが心強い助けになるでしょう。

書いてあることの意味がわからないの?

お前偉そうにDISってるけど、初心者様じゃん。

http://anond.hatelabo.jp/20140918100139

$ gem search -r html

頭に$がついてんのはLinux(Unix)の一般ユーザプロンプトの意味よ。

Windowsコマンドプロンプトは「>」でしょ。

Rubyのインストールページだってサードパーティインストーラ紹介してるだけじゃん。

公式ソースビルドだけでしょ。

2014-09-05

Twitterってすげえ頭いいな。

APIを公開してサードパーティサービスガンガン作らせる

サードパーティサービスで人気、不人気の差が出てくる

人気のサービス公式パクる

サードパーティサービス圧力かけて潰す

こうすることでユーザーにとって本当に必要サービスだけを追加していく。

実に頭のいい戦略だね。

2014-09-03

http://anond.hatelabo.jp/20140902151456

全体に何を言ってるかよくわからんかったが、WWW::Mechanizeだけ使ったことがあって心当たりがあったので調べてみた。

出典は↓のサイト
http://d.hatena.ne.jp/kitamomonga/20110628/ruby_mechanize_2_0

このサイトによれば、
2011年6月27日に、Rubyスクレイピングライブラリ Mechanize のバージョン 2.0 が公開されました。」
「1.0.0 以前から警告されていましたが、WWW モジュールが実際に削除されました。Mechanize 2.0 では WWW::Mechanize という記述は単にエラーが出ます。」
らしい。

まりWWW::Mechanizeの名前で使えたのは3年前。それ以前から警告が出ていたようだから元増田WWW::Mechanizeを警告なしで使っていたとすれば、少なくともそれ以上前コードなわけだ。

Perlと違い、RubyではMechanizeは標準ライブラリではなく、単なるサードパーティライブラリだ。それが3年以上無変更で動かないからといってRubyという言語自体否定するのは、ちょっと飛躍が過ぎるんじゃないか。

Perlが3年以上一切互換性を破壊する変更をしていならそれは結構だけど、結局それは、(よく言えば)枯れた言語からという理由もあるだろう。単にPerlが死につつあるのを、Rubyをダシにして抵抗したいだけに見える。

私も以前はPerlを使っていたが、今とはなってはまったく使う気がしないね

2014-06-28

1. 株式会社ベクターについて

ベクター: http://www.vector.co.jp/

言わずと知れた老舗ソフトウェアダウンロードサイト。毎日更新されるコンテンツは「新着ソフトレビュー」くらいなのに毎月7800万PVの高○○を誇る。(巷で人気のはてなは全サービスで2億PV/月らしい!ワーオ!)ベクターの広告掲載料はPVあたり0.05円だとか。今は…、…といった企業の広告が掲載されている。

世間に高い印度象を与えた遠隔操作ウイルスバスター事件に対するHIT-BITの印象はどうだったろうか。スーパーハッカー自己満足のために起こした事件とか?

スーパーハカーといえばやはり遠隔操作遠隔操作でCDトレイがガコンガコンだろうか。そう考えるとEjectコマンドユーザー会なんか完全にブラックハット集団だろ……何人いるのか知らないけど

この騒動の中で耳慣れないソフトウェアが複数登場した。例えばこういうものだ。



我々が普段ホッテントリで目にするアプリとは何か違う。例えばサーバ→鯖→マカレルのような発想と同じ匂いを感じずにはいられない。それに「パケット警察」よりも"SoftEther社のパケット監視ツール"と言われたほうがピンと来る。

ベクターにはこういったゆるキャラ的名称を持つアプリケーションが数多く登録されているのである

私は空気読みができる人間だ。つまり何が言いたいかを改めて申し上げると、エバーノート活用法と聞けば、自分の時間を犠牲にしてでもライフハックMethod収集に勤しむ意識高い系ライフハッカーや、Markdown対応と言われればナンでもカンでも有り難がる技術系アーリーアダプターの方々や、はてブなどのソーシャルメディアに居を構える人たちと、ベクターユーザはどこか違うということを思わせる印象操作である

増田一族の皆さんは日本で一番使われているWebブラウザをご存知だろうか? ……その通り、IE9である。ところがだ・私は10年以上、隔週一度の頻度ではてなブックマークを利用してきたが、いまだにIE9のハック記事がホッテントリ入りしたのを知らない。ちなみにOperaもない。

やはりはてブなどのソー(略)たちとは何かが違うのである

さて、ベクタソフトウエアライブラリを持ち上げる話に戻ろう。

ベクターで人気のアプリケーションで「めもりーくりーなー」をご存知だろうか。不要になったメモリ領域を回収するシステムメンテナンスツールなのだが、実態は大量にメモリ確保をするものだ。Windowsメモリが不足すると使用頻度の低いメモリ領域をシステムディスク上のスワップ領域(仮想メモリ)に追いやり、物理メモリを確保する。それが空きメモリ復活のからくりである

遠い昔、メモリ最適化ツールとして「ただ数を足したり引いたりするだけのプログラム」が持て囃されたことがあったが、めもりーくりーなーのコア部分はメモリ確保のAPIコールをするだけで済んでしまうので、足したり引いたりほども難しくはないのである

そんなツールが人気のベクタソフトウェアライブラリというと誤謬(ごびゅう)があるかもだが、そんなベクターが月あたり7800万PVである。ワオ。「そんな」とか言えない。そんなベクターからは毎日収録ソフトアップデート通知が来るが、再インストールとほぼ同じ手間をそうそう小まめに行う人間がいかほどいるだろうか。注目ソフトウェアを取り上げる「ベクターソフトウェアニュース」ははてブと違って1日1回の更新だし、メールマガジンベックルだって手作業での編集だ。それでもはてな2億PVに対してベクター7800万PVなのである。それを620万のUUが支えているので、1人あたり12PV余り稼いでいる計算になる。今のはてなは2億PVに対し4000万UU(U'ェ'U)→1人あたり5PV。情報の更新量で言えば個人ブログスターダム層とあまり変わらないのではないだろうか。MLBに例えるならブログ界の野茂英雄とも言える旧イケハヤ書店さんが今年3月に100万PV/50万UU達成を記念して焚き付けを行なっていたが、同程度の情報更新量とするとイケハヤ100万パワーとベクター7800万パワーの差は一体何なのか。火事場のクソ力vs平時のキン肉マン並みの差である。(ちなみに超人界の神々が1億パワーであることもご考慮いただきたい)これは何か常連にしか見えない㊙コンテンツがあるとしか思えない数値である

(そういえばはてなダイアリーからニコニコのブロマガにもらわれて行ったベックルハリー先生は、映像でもお見かけする機会が増えて、以前より増してご活躍のようですね。ニコニコ静画のコンテスト新作の絵師さんを決めたそうで気になります)

注: 「めもりーくりーなー」はCodeZine「マンガで分かるプログラミング用語辞典」マンガでわかるJavaScript / Javaプログラミング、最近ではnoteでも連載中のクロノスクラウン 柳井 政和さんの著作です。実際にはメモリー最適化のためのニーズに合わせたUIを備えているため、前述した原理だけのアプリケーションではありません。



ベクターはおかげさまで25周年!今年が平成26年、つまり平成も25周年を過ぎたところ。ベクターは日本の年号が「平成」に変わったのと同時期に創業した会社なのであります。平成の始まりは1988年2月。その頃あなたは何をしていましたか? まだ生まれていませんか?それとも友達が続々とファミコンを手に入れていく中、1人だけMSXを買ってもらってデータレコーダーで5分かけてロードした後、ただひたすらゴジラと戦う3DダンジョンRPGや、アスキー徳間書店の雑誌に載っているプログラムリストを打ち込んで、F5を押しては"Syntax error"を出すという流れ作業の話をして「ふーん」と言われるだけの交友関係に何かコレジャナイ感を感じていた頃でしょうか?もしかしたらアイドルから一転してラ・ムーを結成した菊池桃子さんとHelloみかんに衝撃を受け、自称親衛隊を辞めようかどうしようか、辞めるとしたら世間的に許されるのかどうかと迷っていた頃……という方もいらっしゃるのではないでしょうか? そのころベクターはもう走り出していたんですね!!!!!!!!!!!!!<3

199x年から始まったソフトウェアライブラリサイトVector」の累計ダウンロード数は、1999年に1億DLを達成した後、毎年1億(ときたま2億)ずつ堅調に増加して今年19億DL達成

本業がオンラインゲーム事業になってしまったベクターだが(「創星紀アステルゲート」大好評サービス中)、ソフトウェアライブラリは依然として健在だ。7800万PVを支える620万UUに7800万のベクター体験を提供している。(わーお)

ベクター体験と言えば、最近では「XPフォーエバー」が人気だった。XPが意味するユーザー・エクスペリエンス(UX)が後発OS(というかiOS)に受け継がれた現在においても、WindowsXPは走り続けているらしい。そして走り続けなければならない。定年退職と同じだ。ゴールが年々遠のいていくんだ。プログラマー定年説だって昔は30歳だった。それがいつの間にか35歳定年説になっている。40歳になる日もそう遠くはないだろう。30歳が若くない?そんな言い分が通用するのはアイドルスポーツ選手プログラマーくらいのものではないのか。政治家なら40歳で若手。そもそも一日中イスに座りっぱなしで政治家ほども動かず、身のこなしと言えば手を動かすくらい、チェリーの黒軸キーより重いものは打つことがない仕事がなぜ「体力勝負」と言われるのか。「プログラマーやってたんで体力には自身があります!(*°∀°)=3」とか引越し業の面接で言えんの?1日じゅう立ち仕事で刃物を扱ってる床屋の主人を差し置いて体力自慢できんの?

私は空気読みができる人間だ。落ちのない小話がそう何度も通用するとは思わない。本題に戻ろう。

さて、増田一族の皆さんはベクターのご当地ゆるキャラをご存知だろうか。その名も「べく太」である。心優しき少年ではあるが学校での成績がずば抜けて悪く、テストでは全問不正解の上、自分の名前を「べく犬」と書いてマイナス点をもらう奇才ぶり。友達はそこそこいるが、成績の悪さや自身のずっこけエピソードにより、知らない人にも名前を知られている有名人気質。得意科目は射撃とあやとり。手に座布団を持ったスタンディングポジションから就寝までの速さを競う競技昼寝の速さにおいて世界クラスの実力を持つ。いつも((ミ゚o゚ミ))の影にいるため主人公とは思われない彼だが、劇場版長編のび太の結婚前夜」ではアレをナニされても決してああはしないという彼の秘められた人間性が描かれている。

そんなのび太が最も輝いていたのがシステムメンテナンスツールの紹介記事であった。

他とは比べ物にならないほど豊富にあるハードウェアの性能を引き出すため、Windowsの世界ではさまざまなチューンナップ技術が磨かれてきた。メモリ最適化レジストリクリーニングディスクキャッシュの最大化、RAMディスク利活用ビジュアルテーマ/アニメーション無効化、IEの常駐、スタートアッププログラムの削減、サービスプログラム無効化、EXEの圧縮、RARの活用、標準ツールよりも高度なサードパーティディスクデフラグメモリデフラグ……、やることはいっぱいだ!でもこんなに手間をかけられるWindowsかわいいなあ!そうやってPCチューンの腕を日々/.J で研鑚しあうマイルドハッカー達は磨き抜いたファイルコピースピード一喜一憂したものである

特にベクターには日本人により日本語で説明された扱いやすいメンテツールが数多く登録されていた。使い方を誤れば手塩にかけて育ててきたWindowsに打撃を与えかねない分野であるため、「日本人にとっての分かりやすさ」は重要視される要素だ。そんな分かりやすいツールをさらに親しみやすく紹介する子供だましが紹介記事におけるべく太の役目である

今ではべく太も良く読まれた記事のランキングしかお目にかかれなくなってしまった。今や世間は萌え擬人化を通り越してゆるキャラブームである。いやブームさえ通り越して文化である。べく太はゆるいというよりマイルドなためかこのブームに乗っかろうという動きはまだ見せていない。これは残念なことである。(はてなもゆるキャラ路線をやめてしまうのだろうか

ところどころかいつまんで述べたため、いくぶん主題がぶれた印象はあるが、

ベクターとはそういう社会的責任を持つサイトなのである




そんなベクターユーザリーチすることを考えないで、一足飛びに海外にロンする発想はちょっとチョンボしすぎなんじゃないの。その前にIEのセキュリティ問題で右往左往する人たちを相手にするのが先でしょ。そのあとは日本人口のメイン層である前期高齢者な。

情報社会を牽引する立場のソフトウェア開発者とは言っても、テストコード書いてこまめにリファクタリングしていくらでもデプロイしては動作確認できる人たちばかりじゃないの。一次請けから渡された画面設計書をメンバーに一人一枚ずつ手渡してアサイン完了、がんすけで開発スケジュールを引きつつ「これでどうだ?」とメンバー一人一人と納期交渉をするSEもいるの。ソースコードとほぼ同じ内容なので、スケジュールには含まれ得ない詳細設計書を「まぁ気持ちは分からんでもないが本来はそういうもの」という理由で実装前提出させたりするの。すべてが決まって検討課題がメンバーメンタル面だけになった時点でキックオフミーティングを始めるのが開発フローになっていたりするの。

これに対して事あるごとに穏やかな語り口で「私は雑用ですから」とつぶやくSEもいて、彼の場合は画面設計書をメンバーひとりひとりに渡して顔を伏せつつ実に申し訳なさそうな口調で「これぐらいでお願いできませんか」と納期交渉をしつつがんすけ2スケジュールを引く人でした。

そんながんすけダウンロードできるのもベクターソフトウェアライブラリなのであるがんすけ / がんすけ2 / (窓の杜にもあるよ) / (公式です)

話がそれたので本題に戻そう。

タイプは違うが、両者とも大差なくマッチョメンであった。SEなのに。ここから少し余談を挟むが、その後面接をしたとある派遣会社の派遣プロマネマッチョマンであったが、マッチョメンに出会ったのはそれくらいなので特に私の人生がマッチョメンで占められているという話でなはい。

私も筋トレすれば強くてたくましいSEになれるのかな、、、

いやスケジュールが押したからって突然開催されるようになった朝会に、シドニアの騎士のOPを歌いながら入ってくるようなSEは私の目指すところではないな。戦いの場への入場曲はもういいので設計をして下さい、設計を。適切な設計で工数を減らすのは、あなた方の役目でしょ。あなたの敵はここにはいません。何も打ち砕かなくていいのです。そんなことよりぴょんぴょんしましょう。ぴょんぴょんのほうがメンタル的に優しくていいです。ぴょんぴょんですよぴょんぴょん。

このままで、果たして定年までぴょんぴょん続けられるのかな……。定年……って何歳だっけ……。

元々は55歳か。それが20年で60歳になって……さらに20年経って65歳が当たり前になったのね。じゃあ、あと20年したら70歳が定年かぁ……今働き盛りの人たちは70歳から年金受給者だね☆ 平均寿命が延びたぶん定年がずれていくということは「人は働くために生まれる」というのがこの国の常識なんだろうね。(だって政治家は自分を選んでくれた選挙区の空気を読んで法律に反映させる役職でしょ?) そんでもって現在の定年が65歳、日本人平均寿命は80代前半。最高齢が110代なので医療福祉諸々の発展で平均寿命と定年があと30年延びる可能性も?95歳で定年!?いやいやいや……そのころには日本人人生観も変わってるだろうから……いやいやいや……変わってるかなあ。

だったらプログラマーは何歳定年説になっているんだろう。IE9をシェアNo.1に押し上げるような職場に勤めていれば何も心配ないのかな……また大きなパラダイムシフト──という言葉がもうずいぶん久しぶりだけど──が起きてプログラマー定年が上がるのかな……パラダイムシフトじゃ上がらないかな……ライブラリツールのほうが大事かな……(大体、オブジェクト指向だって末端のアプリケーションエンジニアにとっては「例にならえばいいだけのもの」だったし)……何かを速く便利に自動化するツールよりも、テストコードを書けばそれに合うライブラリを探してきてくれるエージェント指向システムが実現されないかな。今のところ再利用可能なコードを探す手段はドキュメントを検索するのと、ソーシャルふにゃふにゃで誰かに教わることくらいしか無いし。そんなパラダイムシフトが早いとこ起きないかなー起きればいいなー「お前が起こすんだよ」とか言う奴ぜったいいるだろうけどおれはおこせないしなー。

結局、定年って定まってないんだよね。不定年だよ。定年は不定年。同じ境遇の人間が多数いればその都度社会が対策とってくれるだろうし、先のことを気にしても仕方が無いよね。──ってことでハラオチ。




そんな私のベクター体験を元に、ベクターユーザからも訴求されそうなはてなブックマークUIを考案するのが本稿の主題である



(Dan the full stuck engineer.)

Shared by iNotes - Sync Note with iOS

2014-04-09

オブジェクト指向 v.s. 関数型プログラミング

近年、関数型プログラミング重要はいろんなところで叫ばれています

Javaの最新バージョン関数型プログラミングに関する新機能が加わりました。

Rubyも昨今、関数型プログラミングへのサポートが手厚くなってきています

プログラミング教科書大手オライリーからJavascript関数型プログラミングを行うための解説書が発行されました。

関数型プログラミングへの注目度は高まってきています

おそらく、みなさんは既にオブジェクト指向が何か、を知っています

でも関数型プログラミングとは何か、胸を張って語れる人は、周りに見当たらないかと思います

実際、オブジェクト指向によってプログラミングする方法は、わかりやすい解説があちこちにある一方で、

関数型プログラミングとは何か、何が良いのか、ということについての、よいまとめは見つけることはできませんでした。

この記事を読む方の中で、「関数型プログラミングを取り入れるか・取り入れないか」で切実に悩んでいる人は、おそらくいないでしょう。

この記事はあまりかいところに立ち入りません。関数型プログラミングを使う側の立場に立って、利点や向き・不向き、それが導くスタイルを書きました。

みなさんは鳥のように飛んで、高い空から関数型プログラミングとは何か、何が良いのか、を見渡してください。

ふたつのアプローチ比較

オブジェクト指向アプローチは、名前をつけてプログラムを整理する

関数型プログラミングアプローチは、汎用部品でなんとかする

オブジェクト指向アプローチ

Googleが近年リリースした言語、Goには、”継承”を直接サポートする仕組みが無いことが話題になりました。

また、Mac OSXの基幹ライブラリCore Foundationは、ライブラリ自体C言語で書かれているにもかかわらず、その設計方針は明確にオブジェクト指向です。

継承クラスは、オブジェクト指向必須条件ではありません。

オブジェクト指向本質とは、何でしょうか。

その本質とは"名前をつけて対象を識別し、それを扱うこと"、にあります

最もプリミティブなオブジェクト指向対象は、ファイルハンドラです。あるファイルを開いて、読み込んで、あるいは書き込んで、ファイルを閉じる。

これらの処理をまとめたら、わかりやすいですよね?

対象に関する処理を、対象の周りにまとめる。これがオブジェクト指向の基礎的な理念です。

識別することとイコール比較できることは、とても良く似ています

イコールによる比較は、オブジェクト指向では鬼門であることが知られています

PointクラスインスタンスとColoredPointクラスイコール演算をどう決めればいいかに、正解はありません(詳しくは"effective java"をご参照ください)。

また名前をつけて識別する対象は、フワフワしていてはいけません。

たとえば、"軍人階級"をオブジェクトにしたとしましょう。"大佐"クラスのある兵士名前フィールドや、性別フィールドを持っているでしょう。

ところで彼が昇格したときに何が起こるでしょうか。

新たに"少将"クラスインスタンスが作られます。"大佐"クラスを破棄する前に、名前性別、その他沢山のデータを引き継がなくてはいけません。フィールドを増やしたい場合はその都度コード修正を加える必要があります(*)。

なるべくイコール比較を避けたい。対象不安定なものはいけない。では何に名前をつけて、識別するか。そこにオブジェクト指向技術者の熟練度が現れるのです。

関数型プログラミングアプローチ

一方、関数型プログラミングでは、特定の何かに名前をつけるより、極力、汎用部品でなんとかしようとしま

さな関数を、集めて撚り合わせて、新しい関数を作る。

関数自体リストなどのデータ構造に詰めることもよく行われます

実は、関数型プログラミングというのは本質を表していません。

その真の名は、"値指向プログラミング"です。

関数をはじめとして、リスト・ツリーのようなコンテナ手続きを抽象化したもの、回路を抽象化したもの

あらゆる対象を値として、合成し、ときに分解し、新しい値を作ります

変数という概念必要ありません。

変数適用する処理を作りあげることが、とても簡単だからです。

四則演算定義されたデータを詰めたデータ構造もまた、四則演算可能だったり。

値をイコール比較することも、なんのそのです。

誤解を恐れずに言うと、オブジェクト指向トップダウンなのに対し、関数型プログラミングボトムアップです。

関数型プログラミングの利点

読みやすい・理解やす

関数型プログラミングサポートする言語には、沢山の汎用部品定義されています

このような構造インターフェイスとして、様々なライブラリが組まれているので、

たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて、

パーサーを理解できれば、JSONパーサー・ XMLパーサー・markdownパーサー・C++パーサー ... などを理解するのはとても容易です。

理解やすいこと。これが関数型プログラミングの大きな利点です。

追記:

また、汎用部品と型のお陰で、ライブラリドキュメントが圧倒的にひきやすい、というメリットも有ります

Haskellな人がPythonにトライした結果 - Togetterまとめ

書きやす

関数型プログラミングは「厳密な事前設計必要とするため、簡単なことをやるのにも時間が掛かる」。

よく誤解されていますが、これはウソです。

スクラッチプログラムするのは、非常に手軽です。

>> map (*2) [1,2,3]
[2,4,6]

邪魔な”儀式”や、"おまじない"のコードが徹底的に撤廃されているためです。

関数型プログラミングコードは、潔癖かつ濃密です。

たとえばC言語でint hoge(int x,int y)が定義されているときhoge(3)はなんの意味も持ちませんが(コンパイルコケますが)、関数型プログラミングでは意味があり、実際に有用です。

上の例では、「掛け算をする」(*)関数は、二引数関数ですが、それに引数を渡して作られた「2を掛ける」関数(*2)は、一引数関数になります

関数型プログラミングでは、「簡単なことは簡単にでき、複雑なことは複雑にできる。ただし、間違ったことは殆どできないか、全くできない」。

多くのバグは、コンパイルエラーとして検出されます

また、静的型付けの力によって、コード補完は非常に強力になっていますインテリセンスの比ではないです。

たとえば、関数中のある表記の型を任意に表示できます(GHC/TypedHoles - HaskellWiki)。

やがてやってくる未来には、プログラムテキストエディタで書くことは時代遅れになっているでしょう。

統合環境サポートで、バグミスの少ない、スムーズプログラミングができます

そしてその環境で動くプログラミング言語は、関数型プログラミングサポートした言語なのです。

いつ関数型プログラミング

以下の様な兆候を感じたら、あなたはそのプログラム関数型プログラミングで書くべきです。

一般に、オブジェクト同士の相互作用が複雑になるほど、オブジェクト指向では手に負えなくなっていきます

そういうときは、オブジェクトを直接扱わず、替わりにその"相互作用"を扱うことで、複雑さを軽減するアプローチ有効です。

それこそが関数型プログラミングアプローチです。

オブジェクト指向の利点

初心者にとっては読みやすい・理解やす

特にオブジェクト指向有効なのはプログラミング初心者がそのコードをいじるかもしれないときです。

関数型プログラミングは、強固さと柔軟さの代償として、高い学習コストを伴います

そのため、初学者にとってはハードルが高いのです。

扱う対象があまり複雑でない時は、書きやす

オブジェクト間の相互作用が複雑でなく、着目している(名前をつけている)概念が安定しているとき

そして、プログラムをいじる人たちの間で共通理解が図れているならば、オブジェクト指向が有利です。

関数型プログラミングの得意分野はなにか

数値計算

遅延評価という機能によって、レガシー言語で扱えなかった、巨大な数を扱うことができます

分数を扱うことができます虚数もです。

関数型プログラミングで書かれたプログラムは、正確さが要求される、金融関連の業界で使われています

テキスト処理

手続きとしてパーサーを記述できるので、テキスト処理プログラムはより理解やすく、メンテナンスやすものになります

関数型プログラミングを知らない人は、「正規表現おk」と言いますが、

彼の書いた複雑な正規表現は、半年後には(書いた本人でさえ)理解できなくなっていることでしょう。

並行処理

手続き一般を扱うことができるので、途中で割り込みのある手続きの表現も容易です。

関数型プログラミングサポートしていない言語ではコルーチン(ファイバー)などをつかってなんとかするしかありません。

さもなくば、非並行処理では普通に関数として記述できるところを、並行処理のために、Builder,Strategy,Command,Interpreterパターンを駆使して書き直すことになります

Javascript使いの方は、Deferredなどの構造を使うでしょう(http://qiita.com/KDKTN/items/4c6986049d204f0645d8)。

C++使いの方はBoostで頑張りましょう。破滅的に解りにくいコンパイルエラーメッセージと格闘してください。

レシピ

もう少し簡単な例をあげます

あなたは、あるレシピにしたがって、自動的料理を行うマシン制御プログラムを書いているとしましょう。

料理レシピは、"手続き"ですよね?たとえば、カレー

1. まず玉ねぎを炒める。

2. 飴色になったら、肉を加えて炒める。

3. 野菜を加える。

4. 水を加えて煮る。

5. スパイスを加える。

しかあなたはこの手続きを関数として表現できるでしょうか。

…できませんよね?何故ならば、各ステップの"間に"、マシンのロボアームの位置や動きを調整する処理が必要からです。

これをオブジェクト指向でやろうとすると、各ステップ副作用として、それらの処理を行うことになります

そうすると、マシンが二機に増えた時などの変更量は、絶望的なものになります

あるいは関数として表現するのを諦め、手順全体をDSL記述できるようにします。

このアプローチ関数型プログラミング的です。しか関数型プログラミングサポートした言語の助けなしでは、そのDSL記述するために沢山のユーティリティコードを書かなくてはならないでしょう。

オブジェクト指向アプローチでこの問題をエレガントに解こうとすると、クラス化の粒度を上げる事になります

野菜クラスフライパンクラス、ボイルクラスフライクラス、焼き加減クラス、アームクラス野菜の大きさクラス、切り方クラス、焼き方クラス、"焦げたよ"クラスetc...

こうすると早晩レシピプログラムコードから消え去ることになります。上記のたった5行は、依存性注入のオブジェクトグラフを構築するコードに取って代わることになります。そこには沢山の挙動制御オプションとして付記されているのです。

カレーなど、ある種のレシピ限定することで、見た目の理解やすさを得ることができますが、一方それは表現力を損なうことを意味します。

C言語などではマクロを使うこともできますが、それは結局、関数型プログラミングアプローチ意味するところと同じになります。すなわち、補助のために沢山のコードを書くことになるでしょう。

GUI

iOSのAppstoreアプリは、"無料"と書かれたボタンを押すと、それが"インストール"ボタンに変わり、それをもう一度押すと、ダウンロードの進捗を表すインジケータに変わり、それを押すとダウンロードキャンセルできます

このように、位置は同じなのに、ステートに依って見た目と機能が変わるボタンは複雑です。

これをオブジェクト指向で実現しようとすると、

1. 三つの異なるボタンを同じ位置に置くか

2. 同じボタンが三つの異なる機能を持つか

という下らない問題にぶつかります

一方関数型では、"機能"、"見た目"、"状態"、を独立に扱って、それらを合成してボタンを作るので、迷うことはありません。

「同じ位置にあるUIオブジェクトは、コード上で(インスタンスとして)独立して、他から干渉を受けない」

この条件が満たされているうちは、オブジェクト指向GUIを実現することに無理はありません。

しかし、携帯端末のような小さい画面で、多くの機能を達成するためには、UI要素はコンテキスト依存的に複雑になりがちです。

近年、PCのディスプレイの大きさは、頭打ちになってきました。

画素数は増えているのですが、MacにおけるRetinaのように、複数ピクセルひとつドットを表すようになってきています

これは、ひとつの画面に置かれるボタンなどのUI要素の数は、これから先の未来で増えることはない、ということを意味します。

したがって、未来GUIプログラミングは、注意深く機能ピックアップして制限するというデザイナー努力を脇におけば、

関数型プログラミングの力を頼るしか無いでしょう。

はじめよう、関数型プログラミング

まり

Haskell さいこうなのおおおおおおおおおおおおおおおおおお!! おしっこ漏れちゃうのおおおおおおおおおおおおおおおおおおおお(゜∀。)ワヒャヒャヒャヒャヒャヒャ

1. google:すごいHaskellたのしく学ぼう を注文する。

2. Download Haskell自分のPCに導入する。

3. コンソールghciと入力して、対話コンソールを立ち上げる。

4. 次の関数コンソールに打ち込んで、結果を見る。即値で書かれているところとかをいろいろ変更してみて、感動する。

take 4 $ map (*2) [1..]

5. ステップ1で買った教科書を読んで、学ぶ。


追記:

いかがでしたか

ちまたには、関数型プログラミングの利点は変数が無いことだ、とか、より安全から、とか、より速いから、などという妄言が満ち溢れています

オブジェクト指向関数型プログラミングは、水と油ではありません。プログラマ自分プログラムに最適なアプローチを選ぶことができます

一般にはあまり知られていないことですが、Haskellにもオブジェクト指向へのサポートがあるんです(Lensライブラリ、これを使用したサードパーティライブラリ最近増えてきています)。

この記事を読んだオブジェクト指向プログラマあなたが、少しでも関数型プログラミングに(そしてHaskell)興味を持ってくださって、ホームセンター大人用オシメのコーナーが大賑わいになれば幸いです。。

2014-03-15

IIJ GIOが驚くほどクソ

国内クラウド大手IIJ GIOが驚くほどクソっていう話を書きます

IIJ GIOとは

クラウドならIIJ GIO(ジオ)- IIJの高品質クラウドサービス にあるように、クラウド上にいろんなサービスを乗せてくれるヤツです。

まぁAWSでいいじゃんって話が出ると思うので、AWSとの違いをまとめてくれた方がいましたので紹介します。IIJ GIO にあって AWS にない(なさそうに見える)10のサービス - yoshidashingoの日記 なお、このエントリー以降にAWS進化していて、中国リージョンの開設やVDIサービス提供アナウンスされています

なんでIIJ GIOを選ぶの?

一つには国内ベンダーっていう安心感ですかね。どこに登記されてるとも知れないAWSに任せると、いきなり「今度このへんのラックメンテするからEC2インスタンス落ちるよ」みたいのがあったりしますしね。

あとは、運用監視サービスをやってますAWSだとCloudWatchみたいな簡易なやつしかないですが、GIOだとアプリログとかポート監視もやってくれます。まぁAWSでもサードパーティ運用をやってくれる会社はありますが。

ところが…

残念ながら、上記の「選ぶ理由」はどれも裏切られます

不定期メンテ普通にありますし、ろくに通知もないです(電話1本とか)。内容も、ネットが切れるとかサーバを落としてくれとか割りとデカめです。国内ベンダーからちゃんとしてるだろうというファジーな期待は裏切られます

運用監視サービス、これがまたゴミです。監視カスタマイズなんかお願いしようものなら「これが仕様なんで…」と突っぱねられますポーリング間隔ですらカスタマイズできません。あと運用。「このアラートは即電話ね」と決めていても、24/365対応している現場人間適当バイトなので、ろくに伝わっていなくて見逃される、みたいのもザラです。

結論

AWSサードパーティ運用サービスが安くて安心

2013-12-25

単純に好きっていうことはストーカーと紙一重なんじゃないかなと思っ

そりゃはてなサービスも好きだけど、TwitterFacebook特に好きで周りの人がたくさんインターネットにいて、いろんな情報が入ってきて楽しい

なかでも「ふぁぼ」とか「いいね」とかは結構敏感になっていて、もらえるとやっぱり嬉しいし、好きな子の好きだなーと思ったポストにはひたすらにリアクションする。はてなスターみたいに好きだと思ったら連打できればいいのにね。

ちょっとプログラミングをかじっていて、TwitterFacebookAPIなら簡単に叩ける。何が始まるかって言うと、サードパーティクライアントがよく出来ている・Webインターフェースが良さげって言っても知りたい情報を得る為にずっと画面に張り付くなんていくら時間があっても無駄だ「自動化だ!Push通知だ!」という結論。

TwitterはStreamingAPIとかが整備されててめっちゃリアルタイムにいろんなことがわかる。Facebookクロールさせなきゃいけない、面倒だ、何もしてない。

そんでTwitterでいろいろするものを作った。

まず手始めに好きな子ツイートしたら、それをPushスマートフォンに通知するようなアプリを書いた。iPhone使ってるからBoxcarとかを駆使すればすぐできる。

次に隠れているAPIを使って、好きな子が「ふぁぼ」を送ったら、それをPush通知するアプリを書いた。

とりあえず、そんなところ。他にも、いろいろ通知させてるアプリあるけれど、エゴサとかプロフィール更新とか、どうでもいい。

今のところ、その好きな子は鍵垢でも何でも無いし、ツイートとかふぁぼとか、その子に関する全てをDBに叩き込んでる。アイコンの変更とかBioの更新フォローステータスとか、その子の全部。ポストが日に50前後からそんなにTwitterやってるわけではないけれど、Facebookもそんなにしてるわけではないし、インターネットで知りうる情報って自分からの子にしてみればTwitterくらいなものから

で、今晩、クリスマスイヴちょっとの子関係を顧みて自分のやってることを考えた。

「アレ、俺のやってることってストーカーじゃね?」

いろんなことがインターネットコンテンツとして漂流するこの時代

どこまでがセーフで、どこからストーカーか。

いろんな人のいろんな情報が渦巻く増田に一石を投じる。

2013-09-11

弓使いのモンハン持ち@モンスターハンター4

もうすぐモンハン4発売

http://www1.capcom.co.jp/monsterhunter/4/

ということで、弓使いの自分としてはいわゆる「モンハン持ち」をしてやりこみたい。

(前作の 3G操作がままならなくて諦めた)

なぜモンハン持ちが必要なのか?

どうすればモンハン持ちができるか?

3DSLL の場合
3DS場合(自分がこれ)

モンハン持ちをするにあたって、今回講じた策

住友 3M のクッションゴム CC-04 を採用
このクッションゴムを試してみた理由
  • 小さくて丸形。
    • 直径8mm、厚さ2mm。
  • 透明。
  • 片面しか貼りつかない。
使ってみた感想(MH3G にてテスト)
  • かなりいい!
  • 2枚をソフトウェア十字キーの左右にそれぞれ貼ったが、下画面を見なくとも指先で場所がわかり、誤動作も少ない。
    • また、左右のクッションの間が十字キー上下の中心線に来るので、カメラ上下も2枚貼るだけで(谷の部分を指先で捕捉すれば)わかり、便利。
  • 厚みが2mmとふつう耐震パッド等より薄いため、本体が閉じれる。
  • べたつかない。
    • 本体を閉じても上画面側にひっつかない。
貼る際の注意点
さいごに

PSP 時代に弓使いであったがために 3DS だと弓きつそうだしちょっと… と思っている人の後押しになれば幸いです。

ログイン ユーザー登録
ようこそ ゲスト さん