「Json」を含む日記 RSS

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

2017-02-23

.iniファイル

このまえSIerPHPプロジェクトで、パラメーターを設定ファイルに外だししようって話になって「.iniファイルの読込ルーチンはどうする? だれか作れる? ○○さんがもってるかも」って話になってたから、PHPなら標準でxmljsonの読込関数がありますよって言ってみたけど「あ、こいつまた小難しいこと言ってる」みたいな空気になって流されたな。

ホットエントリ内閣府CSVやばいって記事で思い出した。

2017-02-18

[]続・ブクマ1000超えしている11記事の内どれだけ重複するIDがあるか(JSON

エントリー: http://anond.hatelabo.jp/20170216041052

遊びでJSONブックマークデータを取れるようにしたので2日後のデータを。

7,604個の公開されたID11,986回のブックマークを行い、3,714回の非公開ブックマークと合わせて15,700回のブックマークにより11個の1000ブクマ超え記事を生み出していた。

前回より高頻度重複IDが減っているのは[あとで読む]タグブクマが消化されたのか、手作業で数えた私が間違えていたのか、スパマーにそういう習性があるのか、ちょっとからない。

エントリーでチェックした1000ブックマーク以上されている11記事中n記事ブックマークしているID

11, 5 ID

10, 4 ID

9, 10 ID

8, 15 ID

7, 31 ID

6, 52 ID

5, 99 ID

4, 226 ID

3, 555 ID

2, 1481 ID

重複なし, 5126 ID

(注: n重複のID数の中にn+1重複のID数は含まれていない。つまり10重複のID数の中に11重複のID数は含まれていない。)

ブクマ公開非公開url
25941860734(28%)ttp://www.nakahara-lab.net/blog/archive/7308
19721485487(25%)ttps://togetter.com/li/1079883
17331367366(21%)ttp://omocoro.jp/kiji/101534/
13851019366(26%)ttp://qiita.com/shu223/items/9e3a50e092c2997fe6d2
12751026249(20%)ttp://ironna.jp/article/5686
1231999232(19%)ttp://blog.tinect.jp/?p=36441
1163915248(21%)ttps://togetter.com/li/1078513
1135790345(30%)ttp://www.lifehacker.jp/2017/02/170205_free_alternatives.html
1130839291(26%)ttp://careersupli.jp/lifehack/eiga/
1053827226(21%)ttp://anond.hatelabo.jp/20170206102543
1029859170(17%)ttp://appmarketinglabo.net/staba-sns/

2016-07-18

Vimフィルタコマンドで使うUNIXコマンド

http://vim-jp.org/vimdoc-ja/change.html#filter

Vimにはフィルタコマンドといって、テキスト任意UNIXコマンドで処理するExコマンドが用意されている。

用意されていて、実際強力なんだけど、Vim組み込み機能で間に合うことも多くて、下記以外はあまり使っていない気がする。

以前はVim正規表現に慣れないからとPerlを使ってたりもしたけれど、Vim正規表現も悪くないかなとなって。こう。

何かおすすめUNIXコマンドがあったら教えてください。

bc

簡単計算をするときに使う。1行に計算式を書いて「:.!bc<CR>」あるいは「!!bc<CR>」とすると計算ができる。

(小数を扱いたいときは-lオプション指定する)

「<C-r>=」で代用できる。

sh

長めのコマンドを実行するときに使う。「:%!sh<CR>」とすると書いたシェルスクリプトを実行できる。

最近Bashの<C-x><C-e>で良い気がしてる。こちらだとヒストリで戻って<C-x><C-e>として再編集することもできるので。

column

簡単な整列をするのに使う。ビジュアルモード選択して「!column -t<CR>」とすると整列ができる。

(デフォルトのセパレータがスペース二つなので、一つにしたければ-oオプション指定して「!column -to' '<CR>」という風にする)

vim-easy-alignやvim-aligntaが入っているならそれでいいかも。

jq, xmllint, pup

それぞれJSONXMLHTMLを整形するのに使う。JSONは「:%!jq .<CR>」、XMLは「:%!xmllint --format -<CR>」、HTMLは「:%!pup<CR>」。

ただ「jq . <JSONファイル> | vim -」としていたりして、直接Vimの中で使ってない場合が多いかも。

awk

連番を振る時、重複行を削除する時、指定した列を抜き出す時、などなど、色々なことに使える。

それぞれ「:%!awk '{printf"\%-6d \%s\n",NR,$0}'<CR>」、「:%!awk '\!a[$0]++'<CR>」、「:%!awk '{print$2}'<CR>」といった風にする。

tee

保存するために管理者権限必要場合sudoと一緒に使う。「:%!sudo tee %<CR>」とすると保存できる。

編集中のテキストを何処かに残すため……と思ったけど:wで事足りる。

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/

2016-04-21

転職は5年勤めてから

の方が良い。

後悔しかしませんよ

追記 :

プログラミング技術はある程度自分で調べればわかるから設計ベストプラクティス教えて欲しいな。さすがにTOPページでjson取ってくんのはあんま良くねーと思っちゃった。俺が作ったんだけど。

まぁ、結構勉強になったから良しとする。

追記 : 2015/08/12

社内勉強会を定期的にやってる。今日分析系の話。傾向を分析するのではなく何を分析するかが重要らしい。っ俺の考えと違うかも知れないがすごく意識が変わった。

てか思った。そもそも、傾向分析する必要あんの?減少傾向であれば回復するのは厳しくねっかほぼ無理じゃね?以下の例がうちの会社がやってること。

会員数が減った → 退会した会員の様々な傾向を分析しよう!

これはマジであん意味ない。今日の勉強会の答えは

具体的な原因を突き止めてそれらの傾向を分析する的な感じ。

でもそんなのめんどくさくね?

俺の考えは以下。

会員数が減った → SEOを強化(減った数以上に増やす)。そんなチマチマした改善工数かけんなら新しい機能新規事業を行う。

つーか、そんなに改善点があるアプリじゃないですよ、って言ってあげたかった。mixiみてよ、足跡消したりクソゲー増やしたのが原因じゃないでしょ。飽きられただけ。あとお客を動かす施策意味の無さ。メルマガ、お得系。そんなん変わんねーよアホかよ。

っかこんなん考えること自体が嫌だわ。ちゃんと考えてる同世代は偉いし優秀だわ。ホントはちゃんと考えなきゃいけないね

追記 : 2015/08/14

憂鬱でなければ仕事じゃない」

それなりに偉くなると会議が増える。僕らみたいな下っ端は「いろいろ抱えてて大変だなー」って思う。ように言い聞かせる。そもそも会議ってなんのためにやるんだろう?僕が考えた結果

「モノを実現するための話し合い」

時間も掛けた結果ってのが不透明なまま。不透明って言い方は違うかな?要はないも得ていない安定の不毛会議。これに気付いてるのは僕ら20代の連中だけ。 上記の定義だと会議夢物語を語る場だから会社楽しいかもね。そこは勘違いしちゃいけない、憂鬱でなければ仕事じゃない

追記 : 2015/08/19

会議議事録重要さ。簡単で良い。ある程度の発言をまとめておけばそれ見て答えが出るので物事スムーズにいく。延びる会社ってのはホワイトボードが多いしなー。

あとxamarinの発表。プレゼンの下手さに感動。

ほとんどライブラリ使えるの?とか知らねーよ、だいたい使えるわ。UI共通化は?出来ねーって言ったでしょ。細かいバグはありそうだけど、相当実用的。でも多分これは導入されねぇな!みんなモチベ低い!

ほかプロジェクトが詰んでたやつ、stackoverflowに載ってたっぽい。もっとGoogle翻訳使えよ!!周知しよ、難癖つけられそう笑

追記 : 2015/08/22

すごく重要な話があった。すごく憂鬱になる話。

でもプログラミングが出来る環境は維持されるみたいなんで良かった。SIerときは全員技術者だったから良かったな。っか楽。

よく技術者営業対立があるけど、極端な話、全員営業やる。全員技術者やる。どっちが良い方向になるかわかんねーよな。

営業キツイよなー、成果出なきゃやり甲斐が生まれないでしょ。

もう、みんなプログラミングやろ!楽しいよ!多分

追記 : 2015/08/24

空気が重い。卒論思い出す。

いろいろ考えるから憂鬱な話はあとに効くみたい。

この状況を覚悟してたけど、まさか想定してるなかで最悪な状況に出くわすとか笑。

「一生面倒みる覚悟がないなら助けるな」

大学教授に言われた言葉が身に染みる。多分あの人は地獄をみるだろう。

追記 : 2015/08/26

面談。褒められた。評価評価うるせぇ。評価給料からあんま興味ねーよそこには。給料転職したんじゃねーよ、前の会社の方がよっぽど給料いいわ。技術者出身経営者がいる会社に入りたかったなほんとに。

っかangularjsすごいいいなと。双方向データバインディングHTML拡張フロントと完全分離出来るのがあつい。

追記:2015/09/07

夏休み終了。海外はいいなーやっぱ。いろんな人間見てるだけで楽しーわ、ってことで憂鬱会社まり

僕が設計実装した機能を他プロジェクトに移行する案件で同期に任せてたんだけど、いろいろ未完成すぎて仕事増えた。詰みそうなとこ教えて「問題ないっすよ」って言ってたのに問題ありあり詰んだわ。nugetエグい(近々、エグいの書く)。まぁ、回避たか問題ないけどさ。

追記:2015/09/16

ちょー出世した。事業責任者的な感じ。給料めっちゃあがる。転職して半年プログラムが楽しくてひたすら組んでただけ。前の職場でも無理矢理リーダーさせられたし、無駄な運は持ってるなーと感じる。ひたすら組んでると開発効率だったり、何が出来るか、未来があるかってのを想像するのが好きなんで、それをキャッキャ言いながら楽しそうに話すことと、詰んだときゴリ押し回避方法を生み出すのが得意なんで、出来る奴だなーと思われてるっぽい。

これからはひたすらプログラム組むことは難しくなりそうだなー。あと結果と周りの目、いきなり入ってきた奴が急に出世するから嫌な感じだよね。まだ20代半ばよ、気が重すぎる。まぁ、半年後に急降下する可能性があるから気が楽になったわ。

追記:2015/09/30

今日、いろいろ発表された。なんか抜擢されたかおかしいなーって思ってて、抜擢された奴らを見たらびびった。全員、世渡り上手(俺も)。ちょっとガッカリ自分でもちょっとコード書ける方だなーと思ってたけど、それが理由ではなかったのね。まぁ、同世代スーパーエリートばかりなのになんかおかしいと思った。

もうasp mvc飽きたなー。angular楽しいからまだいいけど。

最近rails楽しいちょっとしたキュレーションサイトを構築中だけど、コード量がaspと比べるとビビるわ。複数モデル使えるとかビックリマークすげーとか。gemもコレねぇかなーとか思ったらだいたいありそう、何より日本語情報多すぎ!但し、サイトいつ出来るかなー。

追記:2015/10/15

やっぱ感情的な人はあんまりきじゃないなー。柔軟じゃなさ過ぎ。極端だけど、討論番組とか見てても感情的な人っておかしからなー。俺も感情だけで転職したけど大失敗だったし。ただ、久しぶりに会いたいって思う人は感情的な人が多い。不思議

っか雇われの身だったらなにかをやってやるって気持ちで臨むと終わるないろいろと。っかなにもしないでも金貰えることは常に頭に入れておかん人間的におかしくなるね。

追記:2015/10/19

いやーやっぱ俺のこと好かねー人多いなー。予想通りっすね。つーか底辺突っ走ってきて就活時期にアルバイトしなきゃいけねーなって思ってた俺が降格なんてビビるはずねぇだろボケ調子乗ってたら激安家賃の家にすまねーだろぅがよぅ!

って感じで愚痴はこれまで。

つーか、整合性は細かい部分じゃなくて決定した時にガツっと決めた方がいいな。まじでいちいち考慮したプログラムかいてられんよ、クソめちゃくちゃなコードになるし。そういう点ではjsはすげー勉強になった。ただ、結構プログラム本質を突いていてjs馬鹿に出来んなーと身を持って感じました。常に整合性を保つってのはその場しのぎのコードになりますね。

追記:2015/12/07

好きなことでお金を稼ぐって非常に難しいことがわかった。俺が転職したのもスキルアップじゃなくて好きなことやりたいって気持ちだったのね。すげー勘違いしてた。後悔してもしょうがないから資格を取ろう。

追記:2016/02/11

小学生の頃と悩みが同じ。希望が持てた一年前の方がずっとマシだ

転職は5年勤めてから

の方が良い。

後悔しかしませんよ

追記 :

プログラミング技術はある程度自分で調べればわかるから設計ベストプラクティス教えて欲しいな。さすがにTOPページでjson取ってくんのはあんま良くねーと思っちゃった。俺が作ったんだけど。

まぁ、結構勉強になったから良しとする。

追記 : 2015/08/12

社内勉強会を定期的にやってる。今日分析系の話。傾向を分析するのではなく何を分析するかが重要らしい。っ俺の考えと違うかも知れないがすごく意識が変わった。

てか思った。そもそも、傾向分析する必要あんの?減少傾向であれば回復するのは厳しくねっかほぼ無理じゃね?以下の例がうちの会社がやってること。

会員数が減った → 退会した会員の様々な傾向を分析しよう!

これはマジであん意味ない。今日の勉強会の答えは

具体的な原因を突き止めてそれらの傾向を分析する的な感じ。

でもそんなのめんどくさくね?

俺の考えは以下。

会員数が減った → SEOを強化(減った数以上に増やす)。そんなチマチマした改善工数かけんなら新しい機能新規事業を行う。

つーか、そんなに改善点があるアプリじゃないですよ、って言ってあげたかった。mixiみてよ、足跡消したりクソゲー増やしたのが原因じゃないでしょ。飽きられただけ。あとお客を動かす施策意味の無さ。メルマガ、お得系。そんなん変わんねーよアホかよ。

っかこんなん考えること自体が嫌だわ。ちゃんと考えてる同世代は偉いし優秀だわ。ホントはちゃんと考えなきゃいけないね

追記 : 2015/08/14

憂鬱でなければ仕事じゃない」

それなりに偉くなると会議が増える。僕らみたいな下っ端は「いろいろ抱えてて大変だなー」って思う。ように言い聞かせる。そもそも会議ってなんのためにやるんだろう?僕が考えた結果

「モノを実現するための話し合い」

時間も掛けた結果ってのが不透明なまま。不透明って言い方は違うかな?要はないも得ていない安定の不毛会議。これに気付いてるのは僕ら20代の連中だけ。 上記の定義だと会議夢物語を語る場だから会社楽しいかもね。そこは勘違いしちゃいけない、憂鬱でなければ仕事じゃない

追記 : 2015/08/19

会議議事録重要さ。簡単で良い。ある程度の発言をまとめておけばそれ見て答えが出るので物事スムーズにいく。延びる会社ってのはホワイトボードが多いしなー。

あとxamarinの発表。プレゼンの下手さに感動。

ほとんどライブラリ使えるの?とか知らねーよ、だいたい使えるわ。UI共通化は?出来ねーって言ったでしょ。細かいバグはありそうだけど、相当実用的。でも多分これは導入されねぇな!みんなモチベ低い!

ほかプロジェクトが詰んでたやつ、stackoverflowに載ってたっぽい。もっとGoogle翻訳使えよ!!周知しよ、難癖つけられそう笑

追記 : 2015/08/22

すごく重要な話があった。すごく憂鬱になる話。

でもプログラミングが出来る環境は維持されるみたいなんで良かった。SIerときは全員技術者だったから良かったな。っか楽。

よく技術者営業対立があるけど、極端な話、全員営業やる。全員技術者やる。どっちが良い方向になるかわかんねーよな。

営業キツイよなー、成果出なきゃやり甲斐が生まれないでしょ。

もう、みんなプログラミングやろ!楽しいよ!多分

追記 : 2015/08/24

空気が重い。卒論思い出す。

いろいろ考えるから憂鬱な話はあとに効くみたい。

この状況を覚悟してたけど、まさか想定してるなかで最悪な状況に出くわすとか笑。

「一生面倒みる覚悟がないなら助けるな」

大学教授に言われた言葉が身に染みる。多分あの人は地獄をみるだろう。

追記 : 2015/08/26

面談。褒められた。評価評価うるせぇ。評価給料からあんま興味ねーよそこには。給料転職したんじゃねーよ、前の会社の方がよっぽど給料いいわ。技術者出身経営者がいる会社に入りたかったなほんとに。

っかangularjsすごいいいなと。双方向データバインディングHTML拡張フロントと完全分離出来るのがあつい。

追記:2015/09/07

夏休み終了。海外はいいなーやっぱ。いろんな人間見てるだけで楽しーわ、ってことで憂鬱会社まり

僕が設計実装した機能を他プロジェクトに移行する案件で同期に任せてたんだけど、いろいろ未完成すぎて仕事増えた。詰みそうなとこ教えて「問題ないっすよ」って言ってたのに問題ありあり詰んだわ。nugetエグい(近々、エグいの書く)。まぁ、回避たか問題ないけどさ。

追記:2015/09/16

ちょー出世した。事業責任者的な感じ。給料めっちゃあがる。転職して半年プログラムが楽しくてひたすら組んでただけ。前の職場でも無理矢理リーダーさせられたし、無駄な運は持ってるなーと感じる。ひたすら組んでると開発効率だったり、何が出来るか、未来があるかってのを想像するのが好きなんで、それをキャッキャ言いながら楽しそうに話すことと、詰んだときゴリ押し回避方法を生み出すのが得意なんで、出来る奴だなーと思われてるっぽい。

これからはひたすらプログラム組むことは難しくなりそうだなー。あと結果と周りの目、いきなり入ってきた奴が急に出世するから嫌な感じだよね。まだ20代半ばよ、気が重すぎる。まぁ、半年後に急降下する可能性があるから気が楽になったわ。

追記:2015/09/30

今日、いろいろ発表された。なんか抜擢されたかおかしいなーって思ってて、抜擢された奴らを見たらびびった。全員、世渡り上手(俺も)。ちょっとガッカリ自分でもちょっとコード書ける方だなーと思ってたけど、それが理由ではなかったのね。まぁ、同世代スーパーエリートばかりなのになんかおかしいと思った。

もうasp mvc飽きたなー。angular楽しいからまだいいけど。

最近rails楽しいちょっとしたキュレーションサイトを構築中だけど、コード量がaspと比べるとビビるわ。複数モデル使えるとかビックリマークすげーとか。gemもコレねぇかなーとか思ったらだいたいありそう、何より日本語情報多すぎ!但し、サイトいつ出来るかなー。

追記:2015/10/15

やっぱ感情的な人はあんまりきじゃないなー。柔軟じゃなさ過ぎ。極端だけど、討論番組とか見てても感情的な人っておかしからなー。俺も感情だけで転職したけど大失敗だったし。ただ、久しぶりに会いたいって思う人は感情的な人が多い。不思議

っか雇われの身だったらなにかをやってやるって気持ちで臨むと終わるないろいろと。っかなにもしないでも金貰えることは常に頭に入れておかん人間的におかしくなるね。

追記:2015/10/19

いやーやっぱ俺のこと好かねー人多いなー。予想通りっすね。つーか底辺突っ走ってきて就活時期にアルバイトしなきゃいけねーなって思ってた俺が降格なんてビビるはずねぇだろボケ調子乗ってたら激安家賃の家にすまねーだろぅがよぅ!

って感じで愚痴はこれまで。

つーか、整合性は細かい部分じゃなくて決定した時にガツっと決めた方がいいな。まじでいちいち考慮したプログラムかいてられんよ、クソめちゃくちゃなコードになるし。そういう点ではjsはすげー勉強になった。ただ、結構プログラム本質を突いていてjs馬鹿に出来んなーと身を持って感じました。常に整合性を保つってのはその場しのぎのコードになりますね。

追記:2015/12/07

好きなことでお金を稼ぐって非常に難しいことがわかった。俺が転職したのもスキルアップじゃなくて好きなことやりたいって気持ちだったのね。すげー勘違いしてた。後悔してもしょうがないから資格を取ろう。

追記:2016/02/11

小学生の頃と悩みが同じ。希望が持てた一年前の方がずっとマシだ

2016-03-08

はてブ2階を表示するブックマークレット

最近2階が覗きたくなることが増えたので書いた。2階があればブクマ数の周りに2階のリンクを追加する。

javascript:void[].map.call(document.querySelectorAll("a.entry-info,.entry>a.entry-link,.users a"),function(e,n){n=new XMLHttpRequest,n.open("GET","/entry/jsonlite/"+e.href),n.responseType="json",n.onload=function(t,o){(t=n.response)&&e.insertAdjacentHTML("beforebegin",((o=t.count)+" upper"+(o>1?"s":"")).link(t.entry_url))},n.send()});

http://b.hatena.ne.jp/以下のページで使えるはず。

minify前
void [].map.call(document.querySelectorAll('a.entry-info,.entry>a.entry-link,.users a'),function(u,x){
  x=new XMLHttpRequest();
  x.open('GET','/entry/jsonlite/'+u.href);
  x.responseType='json';
  x.onload=function(j,c){
    if(!(j=x.response))return;
    u.insertAdjacentHTML('beforebegin',((c=j.count)+' upper'+(c>1?'s':'')).link(j.entry_url))
  };
  x.send();
});

2015-05-28

お前らマイクロサービスマイクロサービスいいながら

お前らマイクロサービスマイクロサービスいいながらアプリケーションレイヤーをぶった切って複数ティアに分割すんの、本当に大好きだよな。

アプリケーションレイヤー間の呼び出しがコード呼び出しなのを、HTTPJSON使って呼び出すようにすればマイクロサービスなのか?

そんな密結合な分散システムいらねーよ

2015-05-01

anond:20150501130334

カーマ

まさか連番関数をこの目で見るとは思わなかった。

日立から来た人の作品だそうで。

ちなみに、弊社の場合はその人の年齢は30歳

お前、今まで何して生きてきたんだよというレベル

しかも、その程度でも、とある上場企業ではエース級だったらしい。

いいな、それ。最高だよ。

今度は、複数要素をわざわざ文字列で、"apple,google,facebook"などを渡してやがる。

一体何のためのjson配列だ。クソが。

この仕様の素晴らしいところは、わざわざ見やすいように

"apple, google, facebook"

ってカンマの後にスペースを入れると事故るところだ。

ご丁寧に、内部で、送信された要素は受け入れられる要素かチェックしているらしいが、どうやらsplitで切った値でまんま照合してやがるから、見やすいように入れたスペースも一緒に取ってきてしまって事故る。

あああああああああああああああ

2014-11-25

清水亮と小4なりすまし

清水亮が書いたブログが、IPA認定天才プログラマかいうお触れ込みでバズってるが、気になったことがあったのでひとつ

http://wirelesswire.jp/management_theory_by_programmer/201411231032.html

小4なりすまし話題になってた時、俺もプログラムを解析してたんだが、1つ適当なことが書いてある。

"わざとらしい黒板、そして真ん中に表示されている数字ですが、これはいかにも「このサイト賛同しています」という人たちのアクセスカウントリアルタイムに表示されているように見えますが、実際には乱数勝手カウントアップされていきます。"

画像Exifまでは見つけられなかったが、JavaScriptのminifyを解除して読むくらいはしたし、奴らのソースはちゃんと、score.jsonかいうのを取りに行っていたぞ。

そして、最初の1分は-300したスコアから初めて1分ごとにスコア更新、その間は0.2秒間隔で線形補間っていう処理をしてた。

そうなると、ロードしたタイミングスコアがずれるのは仕方がないが、乱数勝手カウントアップされていきますってのは清水亮にしては適当すぎないか。

もちろん、サーバーサイドまで読めるわけじゃないから乱数じゃないということを否定出来ないけど、

30分くらい毎秒score.jsonを記録した感じでは、単調増加だったしバズるほど数は大きくなってたので、乱数適当カウントアップと決めつけるのもどうかと思う。

そして、それを「IPA認定天才プログラマ」とか書きながら、盲目的に信じこんでる奴らもどうかと思う。

どうでもいいと思ったが、首相シェアされたりTVでも紹介されてたりしてちょっと可哀想だなと思ったので書いてみた。

2014-11-03

連休なので、はてなNGフィルターを作ったらクソ快適になった話

Chrome拡張機能としてリリースしましたよ!

はてなNG - Chrome ウェブストア
https://chrome.google.com/webstore/detail/%E3%81%AF%E3%81%A6%E3%81%AAng/mbgdnfmdelffjdhkdggilmphfdihnmcj

機能

[対象サイト]

はてなhttp://www.hatena.ne.jp/

はてなブックマーク内ページ(http://b.hatena.ne.jp/

結果

はてなの閲覧がめちゃくちゃ快適になりました!

目障りなサイトアカウントは見なくて済むし、ブコメページのノイジーなコメントも連打スターもなくなってスッキリ

更にワンクリックで気楽にNGフィルターオンとオフの切り替えが出来るようにした事で、NGありなしの状態が一目瞭然で比較できて、はてなエントリーの傾向、ブックマーカーの傾向もよく分かるという新しい発見も!追)そして自分がどんなに偏ってるかの発見も!

動機

ホットエントリーに上がってくる、まとめ系、はてな村系、虚構系なんかは個人的にどうにも苦手で、それについて以前増田で書いたら多くのご批判、ご意見を頂きました。

はてな代替サービスを教えてちょ

http://anond.hatelabo.jp/20140929012633

人気コメントが「無いなら自分で作れば」って感じで、成る程、ほんじゃまぁやってみるかと。一度Chrome拡張機能を作ってもみたかったので。

で、NGリストを登録してはてな公式ページフィルタリングする方向で作ろうと決めました。あと、どうにも気になっていたのがkiya氏系のスター連打。この対策機能に盛り込もうと。構想が固まって、勉強がてらある程度の試作を作ってみました。したらなかなか良い出来なんじゃないかと、手前味噌だけど自分だけで使ってるのは勿体無い、面白いから皆さん使ってみて下さいよーって事で、この連休Chromeウェブストア公開用に一気に作り込みました。

技術

ざっくりと。

Chrome拡張機能HTMLJavaScript制作できます

それらをマニフェストファイル(manifest.json)というJSON形式の設定ファイルで、タイトル、説明、権限アイコンなどと共に紐付けして設定します。

これらが入ったフォルダChrome拡張機能ページから読み込ませれば動作します。

Googleに$5払ってデベロッパー登録し、バナー必要データを用意すればChromeウェブストアで一般公開もできます


拡張機能スクリプトが動作する環境は大きく分けて4つで、マニフェストファイルで設定できます

  1. background:常にChromeの裏で動くスクリプトを設定します。
    今回はユーザーがタブを切り替えた時にそのタブページがNGサイトかどうか判定しそれによりアイコンの表示を変えるスプリクト等を設定しました。
  2. browser_action:アドレスバーの右側の拡張アイコンクリックした時に表示されるポップアップ画面とスクリプトを設定します。
    普段HTMLページをコーディングするのと同じ感覚です。今回はBootflatベース制作しました。
  3. content_scripts:特定ページに対するスクリプトを設定します。
    今回は「http://www.hatena.ne.jp/」と「http://b.hatena.ne.jp/*」に対してスタイルDOM操作をするスクリプトを設定しました。
  4. options_page:オプションページを設定します。
    今回は使用していません。

このマニフェストにはバージョンがあって、現在使用できるのは2.0のみになっていますChrome拡張機能製作方法はググれば先人達情報が沢山出てきますが、このバージョンが古い情報もありますので注意しないとハマってしまます

参考にしたサイトは様々ですが、検索で出てきた日本語サイトでざっくりと把握させていただき最終的には公式サイトが一番確実でした。

http://dev.screw-axis.com/doc/chrome_extensions/マニフェストバージョンは1.0が対象のようです)

http://qiita.com/sqrtxx/items/19fd2114430e9e1fb57f

http://blog.fenrir-inc.com/jp/2012/09/jquery-chrome-extension.html

https://developer.chrome.com/extensions

https://developer.chrome.com/extensions/api_index


制作環境Haxe + Sublime Text です。

まとめ

Chrome拡張機能開発は思ったよりは簡単でした。JavaScriptが出来る人は一度試してみると楽しいかもしれません。と、同時にインストールする拡張機能によってブラウザが重たくなる理由もわかりました。ブラクラになる程重い処理を裏でぶん回す事も簡単に出来てしまうので、なるほどなーと。

そんな感じで開発したのですが、機能はてな様の現在のページデザイン依存しております。ですので、はてなサイトデザインが改変した際には動作しなくなったりレイアウト崩れしてしま場合があります。ご了承くださいませ。その他バグなどご報告下さいましたら出来るだけ対応いたしますのでご感想など聞かせていただければ嬉しいです。

2014-10-03

WEBアプリ仕事に就きたいけど、業界ウォッチしてると不思議技術まみれで不安になる

27歳で

WEB業界転職しようとおもってひっしこいて勉強+サイト制作やってるんだけど

HTMLCSS一通りおぼえてJavascriptもおぼえて今はPHP勉強

業界ウォッチしてると

サーバーサイドの仕事は謎な技術が多いよね

PHPだとcomposerとかいうのからpackagistとかいうのやらテスト?なにそれな話だし

テンプレートエンジンがどうとかJSON(これはjavascript勉強してるときにも出てきたけど)やらなんや

いろいろありすぎる

unixのことも覚えないとだし

とにかく

なにを覚えたら就職できるのか不安しかたがない

終わりが見えないし、入社できる基準がわからない

2014-08-04

http://anond.hatelabo.jp/20140801103805

2014-07-02

http://anond.hatelabo.jp/20140701172722

いろいろ試した。

これ1エントリずつじゃないととれないんやね。

例えば、増田に書いた記事のブクマ数取得したいなら、http://anond.hatelabo.jp/YYYYMMDDHHMMSSパラメータに渡さないといけない。

TopHatenarってサイトみたいに、URLを渡したら、そのブログ内のブクマを全部カウントしてくれるようなものじゃないんやね。

勘違いしてたわ。

そういうのは自分やらないかんのやね。

みたいな感じのブックマークレット的なやつを自分で作る必要があるってことか。

ググった限りでは、パブリックに公開されてるブログURLを渡して、そのディレクトリ以下のすべてのブクマを出してくれるTopHatenarとかはあったけど、増田は無理だったから。

自分で作るしかないか。

web系とか全然やったことないけど勉強がてらがんばって作ってみるかな・・・

最後なっちゃったけど、不躾な質問厨に丁寧に答えてくれてありがとう

2014-06-23

はてなスターの☆100☆みたいな表現って

省略された100個で両脇に2個で合計102個なのか?

JSONで見てみたらそうなってたけど、ずっと全部で100個だと思ってたよ……

2014-05-23

Xvideosサムネを取得するAPIが使えなくなったので、急いで自作した

みなさん、こんにちは

爆速を目指してエロサイトを作った者です。

爆速のエロサイト作ったったwww


XVIDEOSサムネが取得出来なくなった

XVIDEOSサムネイルを取得するWeb API作りました

http://erokenji.hatenablog.com/entry/2014/02/02/190129

俺が作ったこのサイトでもこのWeb APIを利用させて頂いていたのですが、昨日から急に利用が出来なくなりました。(サーバーダウン?)

このままだと更新作業に支障が出て来るので、劣化版ですが緊急で同様のAPI自作しました。

エロサイト製作されている方は俺よりも技術力をお持ちと思いますので必要無いかとは思いますが、もしかしたら困っている人が居るかもということでノウハウを共有します。

必要な物

プログラムの流れ
  1. PHPGET動画URLを取得。
  2. GETしたURLからサムネURLスクレイピングして、最後の【数字.jpg】の部分を【0~30.jpg】にして配列に格納。
  3. 格納した配列json_encodeでJSON形式に変換する。
  4. 変換したJSONecho関数で表示させる。


最後

WebAPIとして一般公開したいのですが、まだ完成度が低く自分1人で使うだけでも重いので、作成方法ノウハウとして公開しました

もしもこのままオリジナルAPIが復旧しない場合は、別途サーバーを用意してAPIの公開・もしくはソースの配布を行いたいと思っていますので、改良方法作成ノウハウをご存知のかたは是非トラバブコメをお願いします。

Xlist : http://xlist.info

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-06

http://anond.hatelabo.jp/20140306130434

元増田です。

なるほど、そういうDBがあるのか。

XML的なデータ構造JSON記述し、プロセス間通信等で使えば実装が楽なのは経験済みだし、ハッシュちょっとしたデータ構造の構築・操作に重宝していた。

そういうのをまんまDBに格納できるのであれば、また一つ引き出しが増えて更に楽できそうだ。

なんともありがたい。

2014-02-09

http://anond.hatelabo.jp/20140209174842

欲しいjsonデータがnested(入れ子)になってて詰んだ

いくらぐぐっても.ajaxで入れ子のjasonからデータを取得するサンプルがない。。。。

Web apijquery

Jqueryで外部のWeb apiからjsonデータを引っ張ってきて、そのデータをtableに出力することって可能ですか。

具体的には$.ajaxをつかえばいいんですか

マジでnoobからからねえ。とりあえず知ってる単語並べてみた。

2013-09-20

コンピュータ教育のあり方

振り返ると

現在二十代後半の自分小学校でのコンピュータ教育が始まったタイミング世代です。

始めは「学校コンピュータ導入しました」みたいな申し訳程度な感じだったと記憶しています

  

小学校  

小学校でのコンピュータ教育の内容としてはCD-ROMを配布され、ODへ挿れるとソフトウェアが書き込まれたISO自動起動して、そのソフトウェア上でコンピュータを学ぶという形式だったはずです。

学習ソフトウェア勝手フルスクリーンになるわけですが、今思えば無知小学生OSの設定を変えてしまわない配慮だったのだと思います

実はこのあたりの記憶曖昧なので学習ソフトウェアの内容は以下のような感じだったはずです。

これ以外もあったような気がしなくも無いですが、前提として私は小学生男子なので興味のないもの記憶からすっぽり抜け落ちている可能性が高いです。

  

この中で一番出来が良いのはパラパラマンガツールで、おそらくはプレゼンテーションなどを学ばせるためのものだったのでしょう。

時代を考えるとFlashが出始めの頃でありユーザーインタフェース機能Flash作成ツールから影響を受けていたようです。

ポケモン戦闘シーンを完全再現したことでクラス内でヒーロになったのでこのツールには思い入れが深いですw

感覚として元も近いFlash作成ツールはParaFla!で、ParaFla!とペイントを足して2で割ってタイムラインシーケンスが無い感じでした。

  

地図を学ぶゲーム比較的良い出来で、ユーザーインタフェースシムシティな感じでしたね。思いっきり影響を受けてるようでした。

確かストーリー仕立てになっていてクリックしてるだけで進み、地図記号とか学べるんじゃなかったかなあ?と記憶曖昧です。

  

この学習ソフトウェア、どうコンピュータ教育に活かされていたか?と言えば、何にも活かされていませんでした。

教師は軽くマウスキーボードの使い方を指導するだけで、あとは良い言葉を選ぶなら生徒の自主性に任せて、変な設定等を行わないように監視しているだけでした。

どういう指導要領になっていたかは知りませんが、コンピュータによるオートメーションを過剰評価して授業もオートメーション化出来るかも?と国は考えたのでしょうか?

まあコンピュータ教育が導入された最初期ですから実験的な意味合いも多分に含まれていたと思います

中学校

中学校へ入ると学ばされたのはMS Officeです。

パソコンの起動方法からまりローマ字入力(小学校ひらがな入力)、そしてMS Officeへと入りいます

このあたりは民間パソコン教室と変わりがないかも知れません。

小学校で行われていた学習のオートメーション化への期待は無惨にも崩れたらしく、教師は手取り足取り教えてくれます

  

しかしおそらくは民間パソコン教室と違う部分もあります

それは新規フォルダや新規ファイル作成方法メールWebブラウザの使用方法、その他今現在皆さんが日常的に使うであろうソフトウェア指導が全く無いです。

どうやら学習のオートメーション化は不可能だと気づいたため、今度は思いっき実用に振ってMS Officeマスターを育てるという選択をしたようです。

  

でもこの指導にもおかしな点は沢山ありました。

Wordでは文字の大きさや色、背景色、ワードアートの使用法、図の挿入、印刷などが中心に指導されます

ワードプロセッサソフトが大好きな方は気付いたと思います。そうですWordなのにマークアップ指導が一切ありません。

完全に見た目の変更の仕方と印刷だけの指導であり、Wordなのにアウトラインとか完全に無視です。

  

Excel指導は酷いものでした。

見た目中心の指導を行うことはWordと変わらないですが、Excel関数指導に入ると関数意味ほとんど教えず「B1へ=SUM(A1:A5)と入力してください。はいA1からA5が足された答えがB1に表示されました。次は...」といった感じです。

生徒は教師の指示通り入力するだけで応用とかそういうの全くわかりません。しっかり理解してるのは見た目の変更の仕方くらいです。

  

時代ですね。こうして互換無視オフィスファイルは作られていったのでした。国がそう教えてましたから。

あっそうそうPowerpointとかAccessは授業でやりませんでした。

  

高校

端的に言うのならば同上。

しかPowerpointが追加されました。流石にPowerpointも教えないといけないと気付いたのでしょうか?

  

高校によっては工業高校商業高校高専ではもっとマシな指導をしていた可能性はあります

ただやっぱり社会人から見るとツッコミ入れたくなるような指導が一部で取られていたと思います。国も手探りですから

  

大学

この年齢くらいになると学校の授業で覚えたと言うよりも独学でパソコンを習得してる生徒が殆どになっていました。

全くと言って良いほど学校の授業からは得たものがなく、エロ画像探しのほうがコンピュータリテラシーを僕に与えてくれました。

  

そして大学時代教授ゴリ押しからOSWindowsからEmacsに変わりました。

  

これを教えて欲しかった

今のコンピュータ教育がどうなっているかは知りません。

はてブ小学生向けにビジュアルプログラミングScratch流行り始めてるんだなと知ったくらいでコンピュータ教育の授業の内情がどうなっているか全く知らないです。

なので僕が少年期に受けたコンピュータ教育を前提として「こうだったら良かったのに」というのを書きます

  

データ整理整頓

コンピュータを扱うにおいデータ管理というのは非常に大事です。

何故判りやすファイル名を付けるのか?何故フォルダを作るのか?そういうことをしっかりと指導しなくてはなりません。

とりあえず僕も誰かに教える気になって書いてみたいと思います

  

保存されるデータの種類

保存されるデータの種類は基本的に3種類存在します。

今だけ使えれば良いデータはどうせ直ぐに破棄するデータなので用途合致すればどんな風に作っても構いません。チャットやっててウケを狙うためにネットからダウンロードする時にファイル名を「a.jpg」にするとかそういうことです。どうせ消します。

  

注意しなければいけないのは残り2つです。残り2つは前提として後々見たり使ったりするデータです。

このデータファイル名を「a.txt」とかにしたら何のデータか全くわかりません。

まり後々使ったりするってことは探すってことです。探すのに判りにくいファイル名にしてたら意味もなく違うファイルを開いて探しまわることになります最近流行の「名前重要」です。

  

探すってことは探す場所重要になってきます

このジャンルデータはある特定のフォルダ(ディレクトリ)に保存すると決めておけば探すとき非常に楽です。

そのため各OSは、例えばWindowsならば「マイドキュメント」や「マイピクチャ」「マイミュージック」などを用意してくれてます(ソフトウェア空気を読んでデフォルトの保存先をそういうのにする)。

せっかく用意してくれているので使うようにし、もし自分フォルダを作るとき名前重要ですから判りやすフォルダにしておきましょう。

  

例えばTwitterであるジャンルの話を同好の士に読んでもらいたい場合どうしますか?ハッシュタグを付けますよね?

そうやって名前を判りやすくしておけば自分以外の他人が使う時も非常に楽なのです。

  

「でもよく使うデータを深い階層に置いてたら面倒じゃん」っていう意見もっともです。

実はそのために「デスクトップ」という階層や「ショートカット」があるんですね。

デスクトップアイコンだらけの人ってたまに居ますけど、きっとそういう人はコンピュータ教育は受けたけど保存されるデータの種類を知らない人です。あなたは悪くないですコンピュータ教育が悪い。

  

データの中身

世の中には目の見えない人が居ます。そんな人たちがコンピュータを使えるように「読み上げソフト」ってのがあります

あいろんな意味で"文字通り"読み上げるためのソフトウェアなわけですが、このソフトは何も編綴もないテキストデータを読み上げるとめちゃくちゃ棒読みです。

それが更に平仮名ばかりで句読点もないテキストだと読み上げソフト棒読みで一気に読みあげて目の見えない人はものすごく聞き取りにくいです。こんなテキストは目の見える僕たちでさえ読みにくいです。

そこで僕達は漢字を使ったり句読点を使ったりして可能な限り読みやすします。実はこれがデータの中身にとって重要なのです。

  

句読点は文章を判りやすくする目印ですが、これを付けることをコンピュータ世界では「マークアップ」と言います

読み上げソフトマークアップされた文章だと、何処がタイトルで何処が本文というのが判別できるようになり、更に強調マークアップされている部分では音量を上げたりするので目の見えない人は非常に聞き取りやすくなります

  

もしここまで読んである点に気が付いた人はかなり賢いです。その点とは「目が見えないのは機械も同じ」という点です。

マークアップされた文章は機械にとっても非常に判別がしやすい文章であり、実例をあげるのであれば検索するときに使う「Google」が検索結果へWebページのタイトルを載せてくれるのも、マークアップされたタイトルを拾い上げているからなんです。

Wordでも「見出し」と指定された行は機械的に判別され、アウトライン機能で文書の管理が非常にしやすくなったりします。

PDFでも同じでアウトライン表示されたり、読み上げソフトPDF対応していたらマークアップに合わせて読みあげてくれます

  

少しだけ専門的になりますが、データベースとして使われているCSVファイルJSONファイルも特定の記号を使われているのでコンピュータは楽に判断できるのです。

更にしっかりとマークアップしておけばPDF電子書籍でよく使われているEPUBに変換するなど、他形式への変換が失敗しにくくなる利点もあります

  

コンピュータ教育のあり方

今まで行なってきたコンピュータ教育は正直「コンピュータ教育をしてますよ」という体裁だけを保っている教育の仕方だと思います

コンピュータが使われるようになったか教育に導入し、MS Officeが使われるようになったかMS Officeを教え、IT市場が大きくなったかプログラミングを教える。

高速に変わっていくコンピュータの状況に合わせてしっかり教育対応して居るように見えますが、現状のコンピュータ教育が見ているのはコンピュータの上っ面だけです。だから教育も上っ面になる。

コンピュータ教育ではタブレット端末の導入を現在検討しているらしいですが、どうみてもこれは上っ面な判断です。

  

コンピュータで高速に変わっていってるのは上っ面だけであり基礎の部分は。ハッカーが使ってそうないわゆる黒い画面、つまり端末(コマンドプロンプト/ターミナル)の頃とあまり変わってません。

その基礎を教えずしてOfficeだのビジュアルプログラミングだのを教えても生徒が得るものは何もないと言って良いと思います

正直この記事は総合職さんやプログラマさん、エンジニアさんから見たら「なにそんな当たり前の常識的なことをドヤ顔で記事にしてんの?」って嘲笑されるような内容です。

その嘲笑されるような内容をコンピュータ教育はできていないわけです。

これWindowsじゃなくたって教えられること、最新ハードじゃない中古PC-98だって教えられること、中学生以上は持ってそうなスマホだって教えられることです。

  

ただ教えてれば良いとするコンピュータ教育のあり方を今こそ議論していく必要があるんじゃないですか?とここに主張したい。

2013-08-12

RDF記述フォーマット

最近はやりのLOD(Linked Open Data)のデータフォーマットについてメモ

例はWikipediaコピペもっと違いが分かりやすい例があると良いのだが。

XML

&lt;rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"&gt;
  &lt;rdf:Description rdf:about="http://en.wikipedia.org/wiki/Tony_Benn"&gt;
    &lt;dc:title&gt;Tony Benn&lt;/dc:title&gt;
    &lt;dc:publisher&gt;Wikipedia&lt;/dc:publisher&gt;
  &lt;/rdf:Description&gt;
&lt;/rdf:RDF&gt;

N3: notation3

@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt;.

&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt;
  dc:title "Tony Benn";
  dc:publisher "Wikipedia".

Turtle: Terse RDF Triple Language

@prefix dc: &lt;http://purl.org/dc/elements/1.1/&gt;.

&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt;
  dc:title "Tony Benn";
  dc:publisher "Wikipedia".

N-Triples

&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt; &lt;http://purl.org/dc/elements/1.1/title&gt; "Tony Benn".
&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt; &lt;http://purl.org/dc/elements/1.1/publisher&gt; "Wikipedia".

N-Quads: Extending N-Triples with Context

&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt; &lt;http://purl.org/dc/elements/1.1/title&gt; "Tony Benn" &lt;http://en.wikipedia.org/wiki/Tony_Benn&gt;.
&lt;http://en.wikipedia.org/wiki/Tony_Benn&gt; &lt;http://purl.org/dc/elements/1.1/publisher&gt; "Wikipedia" &lt;http://en.wikipedia.org/wiki/Tony_Benn&gt;.

JSON-LD

{
  "@context":
  {
    "dc": "http://purl.org/dc/elements/1.1/"
  },
  "@id": "http://en.wikipedia.org/wiki/Tony_Benn",
  "dc:title": "Tony Benn",
  "dc:publisher": "Wikipedia"
}

2013-08-02

Sails.jsを使ってpixiv検索サービス作った

Pixearch(ピクサーチ)

http://pixearch.net/

node.jsMongoDB勉強がてらpixiv画像タグ検索サービス作りました

はてブタグ検索のようにpixiv投稿された最近画像pixiv内でのブックマーク数でフィルタをかけて検索できるのが特徴です。

検索したり、タグをたどって、ダラダラと良い絵を眺めるのを目的としています

一応スマホからも見られるはず。

普段はブログを書いたりしてないので、今回学んだことのメモがてらの投稿です。

使ったもの

MongoDBを試そうと思ったのがサービスを作り始めた発端です。

Web部分はmongoDBと相性が良さそうなnode.js採用

MVCフレームワークで何か適当ものはないかとググってSails.jsが良さそうだったので今回採用しました。

ホスティング

今回はせっかくnode.js採用したので、噂のnode.jsPaaSのnodejitsuを試しに使っています

500MB分の容量のMongoDB最初から使えるのも大きかったです。

とりあえず最小のプランにしてるのでどのくらい捌けるのか気になるところ。

作ってみての感想
Sails.js

Web開発用のモジュール自分で用意するのがめんどいなー、という人向けな印象。

このくらいの規模のものだったらサクッと作れました。

ただある程度の規模のちゃんとしたサービスを作るのには色々足りてないので、自分カスタマイズしたりできる人じゃないと使うのは辛そうです。

後、ドキュメントも公式のものだけだと説明されてない機能結構あったりします。

デフォルトだとDBMySQL対応していて、MongoDBを使うにはsails-mongoを入れる必要がありました。

開発中に困ったことは、nodejitsuで動かそうとしてsails-mongoでエラーが出て、調べてみたらauthenticationに対応していないというバグがあったことでした。

手元で直したのでpull requestを送ろうかと思ったら既に他の人が送っていて、3日前ぐらいに取り込まれているので今は大丈夫なはず。

https://github.com/balderdashy/sails-mongo/pull/36

現在進行形で色々Issueが上がって修正がされているのでそのうちこなれてくるのに期待。

かいところで設計考慮がちゃんとされてるなーと感じたところも多かったので、node.jsで開発してる人は一回試してみると勉強になりそうです。

MongoDB

最初コレクション操作に戸惑ったのですが、結局JS連想配列なので思ったより早く馴染みました。

$setとか$gteとか特殊な意味を持つキーがいくつかあるので、その辺を把握できてから色々と捗りました。

MySQLに比べて特に更新系で複雑なクエリが発行できるので、ORMで使うと十全に機能を発揮できないのではないかな、と思ったり。

ご存知スキーマレスなので、何も考えずにデータを突っ込んでるとIntegerで保存したい値がStringになっててソートときに困ったりするので要注意。

指定した容量を超えたら自動で消してくれるCapped Collectionがあると知ったので、今回みたいな容量が限られてる場合に便利かなと試してみたのですが、このオプション有効にしたコレクションだとデータアップデートや削除ができなくなりました。

おそらく、追加しかしないログのようなデータの保存に使うもののようです。

nodejitsu

まだ微妙な部分も多かったですが、デプロイとかコマンド一発でできて、設定管理がpackage.jsonでできたりして面白かったです。

今回は、特に問題が起きたとき環境sshで入ったりできないので、表示されてるログだけで問題を調査するのに苦労しました。

MongoLabとMongoHQというMongoDBの外部ホスティングサービスが上述したように使えるのですが、無料の容量を超えて使うにはそこそこお金が掛かるのでモリモリ容量を使うものを考えている場合は注意がいります。(もちろん値段に見合ったプロダクトを提供してくれると思いますが)

ということで、せっかく作ったので是非試してみてください。

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