ようこそ!浜村拓夫の世界へ

    ブログ内検索

    最近の記事

    ブックマーク数の多い記事

    Blog Translation

    Powered By FC2ブログ

    Powered By FC2ブログ
    ブログやるならFC2ブログ


    FC2ブログ LOGIN

    with Ajax Amazon

    プログラミング作業量の見える化

    このエントリーを含むはてなブックマーク はてなブックマーク - プログラミング作業量の見える化 あとで読む
    プログラミングをどれぐらい頑張ってやったか?を可視化する方法はあるだろうか?

    ・キーボードの打鍵数
    ・マウスのクリック数
    ・マウスの走行距離
    などを数値化、グラフ化することによって、作業量を可視化することができるだろう。

    メトリクスとは|metrics - 意味/定義/解説/説明 : IT用語辞典

    ソフトウェア開発で、ソースコードの品質を数値化して定量的に評価することや、その際の評価手法や基準などの体系のことを「ソフトウェアメトリクス」(software metrics)という。
    コードの規模や複雑さ、凝集度(互いに関連する要素のコード内での散らばり具合)、結合度(クラスやパッケージの独立性の高さ)などを専用のツールを使って計測し、一定の目標を定めて改善していく。



    コード メトリックス値 - Microsoft

    コード メトリックスとは、開発者が開発中のコードをより理解できるようにする、ソフトウェアの一連の基準です。
    開発者は、コード メトリックスを利用することで、作成し直したり、より徹底的なテストを実行したりする必要のある型やメソッドを把握できます。
    開発チームは、ソフトウェアの開発時に、リスクの可能性を特定し、プロジェクトの現在の状態を把握して、進行状況を追跡できます。



    人間の作業量や作業効率が、コードメトリクスにも反映されるだろう。

    単なる自己満足に過ぎないかもしれないが、キーボードやマウスを使った量が多ければ、頑張って作業したよな~!という満足感、達成感を得られると思う。

    ●キーボードとマウスの使用量を測定するソフト
    キーボードやマウスの使用量を測定するソフトが公開、配布されていた。

    タイプ数カウンターの詳細情報 : Vector ソフトを探す!

    キーボードタイプ数とマウスクリック数ををカウント、表示するソフトで1日のタイプ数やどのキーを何回押したかといった事が簡単にわかります。

    主な表示機能
    ・トータル、今日、平均のカウント数
    ・各種キーやボタン別にトータル、今日、平均のカウント数
    ・時間、曜日、キー別のグラフ表示



    タイピング打鍵数のカウントソフト「タイプ数カウンター」をしばらく使った結果

    自分が普段どのくらいタイピングしているのか細かくわかるようになっています。自分の練習成果を見てニヤニヤする人だときっと楽しめると思います(笑)



    タイプ数カウンター

    Hypnos (PC活動記録測定ソフト)の詳細情報 : Vector ソフトを探す!

    タスクトレイに常駐して、マウスのクリックや移動、キーを押した回数を時間ごとに記録してグラフ化します。
    グラフは体内時計の研究で使用するダブルプロットアクトグラムで表示しますので、あなたの体内時計が推定できます。
    21日間の活動を表示できるようにしましたので、より見やすくなりました。
    自分がきちんと24時間で活動してるかをチェックしてみてください。
    PCの前の引きこもり系の方は是非活動を測ってみてください。
    そして24時間で生活しましょう。
    画像の保存ができるようになりました。



    窓の杜 - 【NEWS】マウスやキーボードの操作量の推移を折れ線グラフで表示できるソフト

     「Hypnos(PC活動記録測定ソフト)」は、マウスの移動量やマウスクリック量、キーボードのタイピング量の推移を記録して、折れ線グラフで10日分を一覧表示できるタスクトレイ常駐型ソフト。折れ線グラフが日付ごと並列で表示されるので、たとえば自分が最も多くPCで作業を行っている時間帯を調べたいときなどに利用できる。



    Hypnos (PC活動記録測定ソフト)

    こういった機能が、IDEに標準で付いていれば、面白いのではないか?

    プロトコル指向プログラミング

    このエントリーを含むはてなブックマーク はてなブックマーク - プロトコル指向プログラミング あとで読む
    Swiftのプログラミング・パラダイムで、「プロトコル指向プログラミング」という考え方が提唱されていました。
    要は、Java(オブジェクト指向プログラミング)のインターフェースに相当する機能を、Appleで手を加えてより高機能にした仕組みを「プロトコル」と呼んでいました。

    Swiftで提供されている「プロトコル」という機能を活用すると、いろいろ便利になると宣伝されています。
    AndroidもSwiftを採用してくれたら、スマホアプリは全部SwiftでOKでしょうか!?

    ASCII.jp:グーグルの「Swift」採用はあり得るのか、アプリ開発言語を考える|Windows情報局ななふぉ出張所


    ●マルチパラダイムのSwift

    文化を調和させる: 関数型プログラミング、プロトコル志向プログラミング、オブジェクト指向プログラミングの優れたテクニックを取り入れる, with Daniel Steinberg - Realm is a mobile database: a replacement for SQLite & Core Data

    Swiftを始めるにあたって、たいていの場合は既存のObjective-Cのコードを単に書き換えるだけということが多いでしょう。これからお見せするのは、みなさんご存知のプログラミングのパラダイムである、オブジェクト志向プログラミング、関数型プログラミング、プロトコル志向プログラミングの手法をすべてミックスした、よりSwiftらしいコードを書くためのテクニックです。



    ・オブジェクト指向プログラミング
    ・プロトコル指向プログラミング
    それぞれ別のものとして、列挙しているんですね!


    ●インターフェースとプロトコルの違い

    Tumbling Dice — [Swift]Appleの新言語「Swift」のリファレンスを読む(16) - Protocols

    ■ Protocols(プロトコル)

    俗に言うインターフェースと言うやつです。Objective-Cでもその手の機構はプロトコルと呼ばれていたみたいなので、そのまま引き継いだのでしょう。

    普段はJavaとかC#とかをやってるので、どうしてもこの手のものを使用することに対して「実装する」(implement)って言ってしまうんですが、Swift(Objective-C)では「適合する」(conform to、adapt to)と呼んでいるそうです。個人的には非常に違和感があるんですが、仕方ないのでこの章ではそう呼びます。



    Swift におけるオプショナルなメソッドについて真面目に考える – NET BIZ DIV. TECH BLOG

    Objective-C におけるプロトコルを説明する際によく引き合いに出されるのが Java などのインターフェース(Interface)です。違いは、 Java などのインターフェースは実装(implements)するものであるのに対して、プロトコルは 採用(adopt)するものであることです。

    具体的にいうと、プロトコルでは実装が必須であるメソッドと必須でないメソッドを定義できます。
    したがって、Objective-C では、プロトコルを採用しているからといって 必ず is-a 関係になるわけではないため、動的にメソッドの実装の有無を判定する必要性が生じてしまいます。



    ・Javaのインターフェースに相当する機能は、Objective-Cのときからプロトコルと呼ばれていた。
    ・Swiftでも、Objective-Cの呼称を継承して、インターフェースのことをプロトコルと呼んでいる。

    ・インターフェースは、実装が必須。
    ・プロトコルは、実装が必須の場合と、必須ではない場合がある。
    =インターフェースよりも、プロトコルの方が、実現できる処理が多い。

    Swiftにおけるプロトコル指向プログラミング

    OOPで知られているように、クラスは以下を提供するのに使われる。

    ・カプセル化
    ・アクセス制御
    ・抽象化
    ・名前空間
    ・表現力
    ・拡張性

    実のところ、これらはすべて型の特性であり、クラスは型を実装する一つの方法にすぎないとAbrahams氏は言う。だが、クラスはプログラマに多大な犠牲を強い、次のようなことが起こるおそれがある。

    ・暗黙の共有。
    たとえば、2つのオブジェクトが第3のオブジェクトを参照している場合、2つのオブジェクトは互いにそのことを知らずに、第3のオブジェクトを変更できてしまう。共有を回避するため、参照するオブジェクトを複製すると、今度は効率がわるくなる。ロックを使って競合を避けるという方法もある。だが、これはさらに効率をわるくし、デッドロックにつながるおそれもある。コードはさらに複雑になる。これはバグがさらに増えることを意味する。

    ・継承問題。
    多くのオブジェクト指向言語では、スーパークラスを一つしか持つことができず、初期の段階で選ばなくてはならない。スーパークラスをあとから変更するのは、極めて困難だ。またスーパークラスは派生クラスにストアドプロパティを強制する。これは初期化の処理と、スーパークラスが求める普遍性を壊さないようにするのを複雑にする。さらに通常は、オーバーライドできるもの、そのやり方、いつすべきでないかに制約がある。こうした制約は通常、ドキュメントに残される。

    ・型関係の喪失。
    これはインターフェイスと実装の合体によるものだ。通常、実装できないベースクラスのメソッドに現れ、派生クラスのメソッド実装において、派生クラスにダウンキャストする必要がある。これは次のコードを使って説明された。



    プロトコル指向プログラミングは、以下の点で、より優れた抽象化の仕組みだという。

    ・バリュー型(クラスを除く)
    ・静的な型関係(動的ディスパッチを除く)
    ・レトロプロアクティブなモデリング
    ・モデルにデータを強制しない
    ・初期化の負担がない
    ・何が実装されなくてはならないかが明確

    大きなクラスをリファクタリングするときには、プロトコルと構造体を使って取り除くと、もっと改善できるだろう。



    Swiftには、関数型の参照透過性を活かして、テストを簡便に済ませる路線を追及して欲しいような気もしますが、まあそれはAppleが考えるべきことですね。
    土方プログラマーは、Apple様から支給されたSwiftを、ただ使う立場でしかないので、ウダウダ言っても仕方ないでしょう。
    まあ、でもSwiftがオープンソース化されたから、何らかのコミットは可能かな?

    詳解 Swift 改訂版
    荻原 剛志
    SBクリエイティブ
    2015-12-25
    ¥ 3,456

    プログラミング学習サイトまとめ

    このエントリーを含むはてなブックマーク はてなブックマーク - プログラミング学習サイトまとめ あとで読む
    オンラインでプログラミングを学習できるサイトのまとめがありました。

    プログラミング能力を「独学」で極める最強のWebサービス10選がヤバイ! | シェアしたくなる最新のWebサービス・ITニュース情報をチェック! APPGIGA!!(アプギガ)

    プログラミングの学習にはニーズがあり、商売にすれば儲けられそうな予感がしました。

    ゲーミフィケーションで、楽しく学べる仕組みを用意する。
    ・動画などで視覚的な理解を支援する。
    といった特徴がありますね?

    プログラミング学習サイトを実際に使ってみて、どのような工夫があるのか?調査してみたいと思います。


    さて、これからのキュレーションサイトは、インフォグラフィックを活用して、ビジュアル的な訴求力を高める必要性も感じました。
    同じまとめサイトでも、数字+インフォグラフィックで差別化を図れるかな?

    たのしいインフォグラフィック入門
    櫻田 潤
    ビー・エヌ・エヌ新社
    2013-05-27
    ¥ 2,376

    小さなプログラムを日々コツコツと作り続けていくこと

    このエントリーを含むはてなブックマーク はてなブックマーク - 小さなプログラムを日々コツコツと作り続けていくこと あとで読む
    一発逆転ホームランを狙って、大振り三振アウトになるよりも、
    コンパクトヒットでも、出塁する確率を高める打法の方が、堅実だよなー。

    プログラミングも大作狙って、成果がなかなか出せないよりも、
    小さなプログラム片でも、確実に作り込んで組み合わせていく方が、堅実だよなー。

    …と、思える記事があったので、メモ。

    ฅ(・ω・ฅ){ 妻子持ちの凡人プログラマが限られた時間で行う趣味の開発 } - Tbpgr Blog
    【“小さなプログラムを日々コツコツと作り続けていくこと”の続きを読む】

    ユニバーサル・シェル・プログラミングで簡単サーバー構築

    このエントリーを含むはてなブックマーク はてなブックマーク - ユニバーサル・シェル・プログラミングで簡単サーバー構築 あとで読む
    bashなどのシェルコマンドを活用したプログラミングが提唱されていた。

    ユニバーサル・シェル・プログラミング - Google検索

    當仲寛哲さんが発案、提唱されている開発手法で、「ユニケージ開発手法」というらしい。

    ユニケージ原論
    當仲 寛哲 / 山崎 裕詞 / 熊谷 章 / 熊野 憲辰 / 木ノ下 勝郎
    USP研究所
    2010-07-31
    ¥ 4,320


    【“ユニバーサル・シェル・プログラミングで簡単サーバー構築”の続きを読む】

    Amazon APIレスポンスの人物データのキー値

    このエントリーを含むはてなブックマーク はてなブックマーク - Amazon APIレスポンスの人物データのキー値 あとで読む
    Amazon Product Advertising APIで、本やCD、DVDの商品情報を取得すると、著者や演奏者、俳優など、関連する人物のデータが取得できます。
    Amazon APIが、ユーザーのリクエストに対して返してくるレスポンスデータを解析すると、人物データを構成する連想配列で、キー値に様々な文字列が割り当てられています。

    Amazon商品のビッグデータを活用するために、レスポンスデータの中にある人物データで、どんなキー値があるのか?調べてみました。

    ItemAttributes レスポンスグループ - Product Advertising API 開発者ガイド (API Version 2010-09-01)

    ItemAttributes レスポンスグループを使用すると、商品を説明する多数の属性を返すことができます。



    レスポンス要素 - Product Advertising API 開発者ガイド (API Version 2010-09-01)

    この章では、すべての ECS レスポンス要素について説明します。
    「親」パラグラフで、スラッシュ記号の左側の要素は親、右側の要素はその子です。



    ItemSearchについて

    ItemAttributes レスポンスグループの中に、関連する人物の名前が入っていて、キー値は以下のようだった。

    ・Actor → 俳優 (DVD)
    ・Artist → アーティスト (CD)
    ・Author → 筆者 (本)
    ・Creator → クリエーター (本、DVD)
    ・Director → 監督 (DVD)


    ・Composer → 作曲者 (CD) ※今は廃止?
    ・Conductor → 指揮者 (CD) ※今は廃止?
    ・Orchestra → オーケストラ (CD) ※今は廃止?

    こういう肩書の種類は、「role」という項目を設けて、その中に肩書の種類を属性情報として入れておけば、スッキリすると思うのだが、紆余曲折があってこうなってしまったのだろう。

    このうち、「Creator」の扱いが、変遷しているという情報があった。
    APIの利用方法=検索の方法で、注意が必要?

    AWS Developer Forums: ItemLookupでCreatorが返ってこない(DVD) - Discussion Forums

    Creatorを得るための裏技について
    amazonサイトで検索ボックスにASINを入力して個別の商品を検索することがあります。
    同じ考えでItemSearchでもKeywords=ASINデータとしてCondition=Allにすれば
    あたかもItemLookupで検索したかのような結果が得られます。



    Amazonの商品データを、MySQLのようなリレーショナルデータベースに格納しようとすると、正規化されたテーブルが大量にできてしまうかな?

    こういう場合は、mongoDB等のような、スキーマレスのドキュメント指向データベースに、いったんまとめてぶち込んでおくのが良いのかもしれない。

    まあ、APIにアクセスすれば、都度必要なデータは取得できるわけだから、Amazonのデータベースを丸ごとコピーする必要はないだろう。(てか、データもバカでかいだろうし、完コピは無理?)

    Androidアプリを作れるGo 1.4

    このエントリーを含むはてなブックマーク はてなブックマーク - Androidアプリを作れるGo 1.4 あとで読む
    Googleが開発しているプログラミング言語「Go」の最新バージョン1.4では、Androidアプリを作れるそうです。

    Androidアプリが開発可能になったGo 1.4が正式リリース - Publickey (2014年12月15日)

    Go 1.4で最大の新規機能はAndroidのサポートです。
    Go言語のコアとモバイルサブリポジトリ内のパッケージを用いて、Go言語だけで簡単なAndroidアプリケーションを開発することができるようになりました。



    米Google、Androidを正式にサポートした「Go 1.4」をリリース - SourceForge.JP (2014年12月12日)

    米Googleは12月10日、プログラミング言語「Go」の最新版「Google Go 1.4」をリリースした。
    正式にAndridがサポートされ、ランタイム実装のCからGoへの移行も進んでいる。
    Goは強い静的型付けを特徴とし、Pythonのような動的言語の開発スピードとC/C++のようなコンパイル言語の安定性を併せ持つことを目指す。



    Goは、Googleがゴリ押ししている、という以外で使うメリットがあるのでしょうか?

    [翻訳]なんでGoってみんなに嫌われてるの? - Qiita

    Goは、前述した40年に及ぶプログラミング言語研究の成果を窓から放り投げた近年では唯一の言語だ。他の新しい言語は、少なからず他の言語と張り合って機能を足そうとしている。
    Clojure、Scala、Rust、全部が「モダンなプログラミング理論」を言語設計に取り入れようとしている。

    Goは積極的にそうはしなかった。パターンマッチングはないし、ボローイングもない、純粋関数型プログラミングはないし、不変変数もない。オプショナル型もなければ、例外もない。クラスもなければジェネリクスもない。Goにはないものがたくさんある。

    そして、これは最初に馬鹿にするには十分なことだ。
    これは僕も同罪だ。最初にGoを見たときに、「え、例外がないの?やめとくわ」って思ったしね。



    Go でしか作れないシステムではない限り、Goを使う必然性はないのでしょう。
    どんなプログラミング言語でも、必要性に応じて、使いたい人が使えば良いだけの話です。
    今のところ、Androidアプリを作るなら、とりあえずJavaでOK?

    基礎からわかる Go言語
    古川 昇
    シーアンドアール研究所
    2012-11-21
    ¥ 2,376

    AmazonのSearch Index一覧

    このエントリーを含むはてなブックマーク はてなブックマーク - AmazonのSearch Index一覧 あとで読む
    自分が必要としている情報や商品について、一瞬で情報を取得したいです。。
    Amazonの商品情報を再整理して、自分専用の検索サービスを構築したいです。

    まずは、商品カテゴリーの見直しから着手!

    ●Amazonのsearch indexリスト

    Amazon アソシエイト(アフィリエイト) - ヘルプ

    サーチインデックスとは何ですか? 使用可能なサーチインデックスのリストはどこにありますか?

    サーチインデックス (Search Index): Amazon.co.jp では、1000万点を超える商品を取り扱っています。
    これらの商品をより簡単に、また迅速に見つけられるよう、Amazon では、サーチインデックスと呼ばれる仕組みによって、商品カテゴリが分けられています。
    現在、Amazon.co.jp で有効なサーチインデックスには、以下のようなものがあります。

    1. Apparel (アパレル&ファッション雑貨)
    2. Baby (ベビー&マタニティ)
    3. Beauty (コスメ)
    4. Blended (全商品・ただし、サポート外のSearchIndexがありますのでご注意ください)
    5. Books (和書)
    6. Classical (クラシック音楽)
    7. DVD
    8. Electronics (家電&カメラ)
    9. ForeignBooks (洋書)
    10. Grocery (食品&飲料)
    11. HealthPersonalCare (ヘルス&ビューティー)
    12. Hobbies (ホビー)
    13. Kitchen (ホーム&キッチン)
    14. Music (ミュージック)
    15. MusicTracks (曲名)
    16. Software (PCソフト)
    17. SportingGoods (スポーツ&アウトドア)
    18. Toys (おもちゃ)
    19. VHS
    20. Video (DVD & VHS)
    21. VideoGames (TVゲーム)
    22. Watches (時計)



    SearchIndex-ItemSearch パラメータの組合せ (JP)

    このサーチインデックスマトリックスは、使用可能な ItemSearch パラメータについて、JPサイトで使用できるSearchIndexごとにまとめたものです。

    SearchIndex: All
    SearchIndex: Apparel
    SearchIndex: Automotive
    SearchIndex: Baby
    SearchIndex: Beauty
    SearchIndex: Blended
    SearchIndex: Books
    SearchIndex: Classical
    SearchIndex: DVD
    SearchIndex: Electronics
    SearchIndex: ForeignBooks
    SearchIndex: Grocery
    SearchIndex: HealthPersonalCare
    SearchIndex: Hobbies
    SearchIndex: HomeImprovement
    SearchIndex: Jewelry
    SearchIndex: Kitchen
    SearchIndex: Music
    SearchIndex: MusicTracks
    SearchIndex: OfficeProducts
    SearchIndex: Shoes
    SearchIndex: Software
    SearchIndex: SportingGoods
    SearchIndex: Toys
    SearchIndex: VHS
    SearchIndex: Video
    SearchIndex: VideoGames
    SearchIndex: Watches



    これがsearch indexの基本です。
    でも、これだけではないようです。。
    AmazonのAPI経由で、最新のsearch indexのリストを取得する方法はあるのでしょうか?

    あまけんを見ると、Amazonの商品カテゴリーが31種類に区分されていました。
    =つまり、search indexは、31種類以上ある(使える)ということなのでしょうか?
    もしくは、31種類というのは、単にあまけんにおける独自の商品区分であり、Amazonが規定したsearch indexとは直接関係ないとか?
    (そんなこともないだろうけど、どうなんだろ?)

    http://amaken.wlaboratory.com/RankingPage/

    毎日のベストセラー商品をレコード。カテゴリごとのベストセラー商品をさかのぼってチェックできます。



    とりあえず、データベースを更新して、スクレイピングから見直してみます。

    Web API: The Good Parts
    水野 貴明
    オライリージャパン
    2014-11-21
    ¥ 2,376

    ゲストユーザーの管理方法

    このエントリーを含むはてなブックマーク はてなブックマーク - ゲストユーザーの管理方法 あとで読む
    今、教育用のアプリを作っています。

    ログインしなくても、問題を解いて、自分の成績(採点結果)を見られるように、ゲストモードを用意しようと思いました。
    ゲスト=ログインしていないユーザーを一意に判別する方法は、どうすればいいのか?検討してみました。
    Welcome Guest

    ●トラッキング技術
    結論から言うと、インターネットの広告で使われているトラッキング(ユーザー追跡)技術が参考になります。
    「アドテク トラッキング」 - Google検索

    IPアドレス・クッキー・JavaScript・UAなどを使わずユーザーを個別に追跡する方法 - GIGAZINE

    使用しているのはHTTPヘッダのETag(エンティティタグ)と呼ばれるもので、コンテンツが持つ固有値のこと。ブラウザでページを読み込んだとき、たとえばキャッシュしている画像のETagとサーバにある画像のETagのチェックサムを比較し、変わっていたら画像は新しいものということなので改めてダウンロードを行い、更新がないときはキャッシュを使用するので転送量が減らせるというわけです。
    このETagの情報をうまく利用することで、Cookieと同じようなことができている



    HTTP ETag - ウィキペディア

    ETag(エンティティタグ)は、HTTPにおけるレスポンスヘッダの1つである。
    これは、HTTPにおけるキャッシュの有効性確認の手段の1つであり、ETagを利用してクライアントから条件付きのリクエストを行うことができる。
    そうすることで、コンテンツが変わらなければレスポンスをすべて返す必要がなくなるので、キャッシュを効率化し、回線帯域を節約できるようになる。
    ETagは複数人が同時にリソースを上書きしてしまうことへの対策となる、楽観的並行性制御に使うこともできる。

    ETagはあるURLから得られる、ある特定のバージョンのリソースに対する、明確でない識別子である。
    そのURLにあるリソースに何かしらの変化があれば、ETagも新しい値となる。
    このように設定されたETagは、一種のフィンガープリントとなり、2つのリソースが同じかどうかを容易に判定できるようになる。
    あるETagは特定のURLに対してのみ意味を持つものであり、他のURLから得られたリソースのETagと比較しても何ら有意な結果は得られない。



    クッキーが使えない場合は、キャッシュ情報を使えばいいみたいです。

    でも、実装が面倒くさそうなので、クッキーが無効の場合は、「クッキーを有効にしてください」というメッセージを表示して、クッキーベースのゲストユーザー管理で充分かな?

    別に広告を配信するわけじゃないし~。

    改訂版 ネット広告ハンドブック

    日本能率協会マネジメントセンター
    2013-05-26
    ¥ 2,160


    【“ゲストユーザーの管理方法”の続きを読む】

    正規表現は大事!

    このエントリーを含むはてなブックマーク はてなブックマーク - 正規表現は大事! あとで読む
    コンピューターを使った作業で、同じことの繰り返しは、自動化したいです。
    テキスト処理(文字列の取り扱い)で、同じパターンが出てくるなら、正規表現を使えばOKですね?

    正規表現

    【“正規表現は大事!”の続きを読む】

    FC2Ad