このブログの中を検索する

2012/05/26

GoogleでのRの書き方スタイル

title: GoogleでのRの書き方スタイル
url: http://www13.atpages.jp/t6s5/docs/r-style-guide-j.html

snippet:
-----引用-----

TODOの書式 :

コード全体を通して TODO の書式を一貫させる.
TODO(ユーザ名): 予定の行動の明確な記述

常識を使うことと一貫性を持つこと :

もしコードを編集するなら, その周辺のコードを しばらく眺めてから, その書式を決めること. もし編集しているコードが if 節の前後に 空白を入れているなら, あなたもそれにならうこと. もし, 編集しているコードは注釈がアスタリスクの四角形で囲まれているなら, 新たに加える注釈もアスタリスクの四角形で囲うこと.

書き方のガイドラインを持つ意義は, コード書きの共通語彙を持つことで, どうやって書くかに悩まされることなく何を書きたいかに 集中できることにあります. 広く使われている書き方の規則をここに示したので, その共通語彙はわかるでしょう. しかし, 一部の グループで使われている書き方も重要です. もし, あるファイルに加えようとするコードが 既存のコードから極端に異なっているなら, その不連続性により, そのコードを読もうとするひとを コードの流れの外へと追い出してしまうでしょう. これを避けるよう努力すること.

-----引用-----

Rを使えるようになるための10のこと

title: Rを使えるようになるための10のこと
url: http://d.hatena.ne.jp/isseing333/20110917/1316231082

snippet:
-----引用-----

Rを使えるようになるための10のこと

Rは全く使ったことがない!JAVAとかC++とかガリガリ書けるけどRはよく分からない!という方々がすんなりRの世界に入れるよう、資料の探し場所や導入部分をまとめておきます。

-----引用-----

10分で分かるRパッケージの作り方

title: 10分で分かるRパッケージの作り方
url: http://www.slideshare.net/yokkuns/10r

snippet:
-----引用-----

10分で分かるRパッケージの作り方

パッケージのスケルトン作成の例 :
> package.skeleton(list=c("yahooWebSearch", "yahooBlogSearch"), name="RSearchYJ")

-----引用-----

scikits.learn : 機械学習の主な手法がほとんど入っているライブラリ

title: scikits.learn : 機械学習の主な手法がほとんど入っているライブラリ
url: http://d.hatena.ne.jp/isseing333/
http://scipy-lectures.github.com/_downloads/PythonScientific-simple.pdf

snippet:
-----引用-----

機械学習を実行するにあたって、今一番アツそうなのがscikits.learnというライブラリです。これはGoogle summer codeがきっかけで立ち上がったプロジェクトで、10人を超えるエンジニアが作っているようです。トップのUser Guideの中身をひと通り目を通しましたが、主な手法はほとんど入っています!欲を言えば、アンサンブル系がもっとあって欲しいですが。上記のパッケージでPythonをインストールしていれば、追加でパッケージを入れることなく、コンソール上でコードをコピペすれば結果を再現できます。Exampleにある画像も、ほとんどコピペで作成できます!(一部、改行やコメントの影響でエラーが出ました。)R使いな私としては、こういう手軽さがとても嬉しいですね。実際にRとどう住み分けるかは、引き続き考えなきゃいけないですが。

-----引用-----

Redmineでチケットを作成→gitでコミット→JenkinsによるCI実行

title: Redmineでチケットを作成→gitでコミット→JenkinsによるCI実行
url: http://d.hatena.ne.jp/mzp/20120506/dashbozu

snippet:
-----引用-----

一般的なソフトウェア開発現場では

  • Redmineチケットを作成する
  • gitコミットを繰り返し、中央レポジトリにpushする
  • JenkinsによるCIが実行される
  • 結果を確認し、Redmineのチケットを閉じる

という流れで作業が進んでいきます。これらの作業の中で、開発者は「適切な」タイミングでチェックとフィードバックをすることを求められます。適切なタイミングとは、例えば以下のようなものです。

  • Gitでpushしたタイミング ・・・ 開発者が仕様を勘違いしていないか
  • Jenkins のビルドが完了したタイミング・・・ビルドが壊れていないか
  • Redmineのチケットのステータスが変更になったタイミング ・・・ コードレビュー

-----引用-----

2012/05/23

長期的なビジョンを持つのは、金銭的に体力がないとできない

title: 長期的なビジョンを持つのは、金銭的に体力がないとできない
url: http://ufcpp.wordpress.com/2012/05/04/%E3%81%A9%E3%81%86%E3%81%97%E3%81%A6%E3%81%93%E3%81%86%E3%81%AA%E3%81%A3%E3%81%9F/
http://www.infoq.com/jp/articles/neal-gafter-on-java

snippet:
-----引用-----

以下の記事で、「Java に足りないのは長期的なビジョンと開発リソース」というような話も出ていたり。開発リソースを割くのはもちろん、こういうインフラに対して長期的なビジョンを持つっていうのも、金銭的に体力ないとできないんですよねぇ。

Javaの未来についてのNeal Gafter氏とのディスカッション

-----引用-----


2012/05/22

MASM, Easy Code Visual assembly IDE : アセンブラ言語のIDE

title: MASM, Easy Code Visual assembly IDE : アセンブラ言語のIDE
url: http://ja.wikipedia.org/wiki/Microsoft_Macro_Assembler
http://www.grc.com/smgassembly.htm
http://www.easycode.cat/English/index.htm

snippet:
-----引用-----

アセンブラ言語のIDE :
  • MASM : Microsoft Macro Assembler(マイクロソフト・マクロ・アセンブラ)

  • Easy Code Visual assembly IDE


-----引用-----

dapper-dot-net, DbExecutor : C#のMicro-ORM

title: dapper-dot-net, DbExecutor : C#のMicro-ORM
url: http://neue.cc/2012/01/17_363.html

snippet:
-----引用-----

C#のMicro-ORM :
  • dapper-dot-net
  • DbExecutor

-----引用-----

GCC-XML : C++の構文解析結果のメタデータをXML形式で出力するツール

title: GCC-XML : C++の構文解析結果のメタデータをXML形式で出力するツール
url: http://ufcpp.wordpress.com/2011/12/20/cxxi/

snippet:
-----引用-----

GCC-XML : C++構文解析結果のメタデータをXML形式で出力するツール

-----引用-----

銀の弾丸はない : 「AかBかどっちがいい?」みたいな質問の答えは、だいたい、「両方」もしくは「中間」になります = 中庸

title: 銀の弾丸はない : 「AかBかどっちがいい?」みたいな質問の答えは、だいたい、「両方」もしくは「中間」になります = 中庸
url: http://csharptan.wordpress.com/2011/12/25/net%e9%96%a2%e9%80%a3%e6%8a%80%e8%a1%93/

snippet:
-----引用-----

「AかBかどっちがいい?」みたいな質問の答えは、だいたい、「両方」もしくは「中間」になります。
  • GUICUIかと言われたら、両方。
  • 静的言語動的言語かと言われたら、両方。
  • ネイティブマネージかと言われたら、両方。
  • ウェブクライアントかと言われたら、両方。
  • オブジェクト指向型(OOP)関数型かと言われたら、両方。
それが現実です。
重要なのは、AとBそれぞれ、適切な利用場面がどこか、そして、選べるかどうかです。
「AもBも」といろいろ求められる昨今、AとB関係なく作れる部分と、そうでない部分をきっちりと分離しましょう。

-----引用-----

BDD とは? 振る舞いを決めた上で開発を進める手法(スペックファースト)

title: BDD とは? 振る舞いを決めた上で開発を進める手法(スペックファースト)
url: http://cs.gogo-asp.net/blogs/naoki/archive/2012/04/17/SpecFlow-_6830_-WatiN-_92302952287557305F30_-BDD-_6E30966E9950_.aspx

snippet:
-----引用-----

BDD は Behavior Driven Development の略で、振る舞いを決めた上で開発を進める手法(スペックファースト)の事です。

SpecFlow WatiN などがこの代表的なツールです。SpecFlow は Visual Studio 内での仕様の作成と実施をサポートし、WatiN はブラウザーを使用して、エンド ツー エンドの自動システム テストを実行できるようにします。

サンプルコード
using NSpec;

class describe_specifications : nspec
{
    void when_creating_specifications()
    {
        //some of these specifications are meant to fail so you can see what the output looks like
        it["true should be false"] = () => true.should_be_false();
        it["enumerable should be empty"] = () => new int[] { }.should_be_empty();
        it["enumerable should contain 1"] = () => new[] { 1 }.should_contain(1);
        it["enumerable should not contain 1"] = () => new[] { 1 }.should_not_contain(1);
        it["1 should be 2"] = () => 1.should_be(2);
        it["1 should be 1"] = () => 1.should_be(1);
        it["1 should not be 1"] = () => 1.should_not_be(1);
        it["1 should not be 2"] = () => 1.should_not_be(2);
        it["\"\" should not be null"] = () => "".should_not_be_null();
        it["some object should not be null"] = () => someObject.should_not_be_null();
        //EXPERIMENTAL - specify only takes a lambda and does
        //its best to make a sentence out of the code. YMMV.
        specify = ()=> "ninja".should_not_be("pirate");
    }
    object someObject = null;
}

サンプルスペック出力
describe specifications
  when creating specifications
    true should be false - FAILED - Expected: False, But was: True
    enumerable should be empty
    enumerable should contain 1
    enumerable should not contain 1 - FAILED - Expected: not collection containing 1, But was:...
    1 should be 2 - FAILED - Expected: 2, But was: 1
    1 should be 1
    1 should not be 1 - FAILED - Expected: not 1, But was: 1
    1 should not be 2
    "" should not be null
    some object should not be null - FAILED - Expected: not null, But was: null
    ninja should not be pirate

-----引用-----

The ICSI Netalyzr : 自分の回線にBuffer Bloat問題が有るかを調べられるツール

title: The ICSI Netalyzr : 自分の回線にBuffer Bloat問題が有るかを調べられるツール
url: http://netalyzr.icsi.berkeley.edu/

snippet:
-----引用-----

The ICSI Netalyzr
自分の回線にBuffer Bloat問題が有るかを調べられるツール
インターネット接続の情報取得サイト

-----引用-----

Domain Name Speed Benchmark : DNSのベンチマークを測定、最も高速なDNSサーバを探す

title: Domain Name Speed Benchmark : DNSのベンチマークを測定、最も高速なDNSサーバを探す
url: http://www.grc.com/dns/benchmark.htm
http://raven.air-nifty.com/night/2010/11/grcdns-benchmar.html

snippet:
-----引用-----

Domain Name Speed Benchmark
DNSのベンチマークを測定、最も高速なDNSサーバを探すツール
ポッドキャスト「Security Now!」のSteve GibsonによるDNS性能測定ツール

Google ChromeがDNSプリフェッチを取り入れたり、Google自身がDNSサーバを立ち上げたりして、DNS名前解決スピードがWebブラウジングの快適さにかなり関係しているということが徐々に認識されてきた。DNS Benchmarkは、公開されているDNSサーバに対してクエリを送信し、そのレスポンスを測定する。

測定している値は3種類ある。ひとつめはCached lookupsで、DNSサーバのキャッシュからの応答速度を測定する。まずクエリーを送信してレスポンスを待つ。この応答時間は無視する。次に同じクエリーを送信して、そのレスポンス時間を測定する。1回目のクエリーによって、その名前がキャッシュされたはずである。本当にキャッシュから返答しているかどうかを、レスポンス内のビットで確認する。DNSサーバは、さまざまなユーザから同じサーバ名のクエリーを受け取っている。実運用での名前解決は、キャッシュからの返答がほとんどであろう。この値にもっとも重きを置いて評価する。

ふたつめはUncached lookups。DNSサーバのキャッシュからではなく、相手ドメインのDNSサーバからの応答時間を測定する。たとえばeVNKhHzjoW.amazon.comのような、実際にはあり得ないサブドメイン名を生成し、DNSサーバにクエリーを送信する。他のユーザがこの名前を過去に問い合わせたことはあり得ないから、キャッシュに乗っていない。DNSサーバはDNSの階層をたどっていって、amazon.comのDNSサーバからの応答を得る。

三つめはDotcom lookupsで、測定対象のDNSサーバとインターネットの接続状態を確認する。eVNKhHzjoW.comのようなあり得ないドメイン名を生成し、.comのDNSサーバに問い合わせが行くようにして、応答時間を測定する。

-----引用-----

google-gdataを使ってBloggerブログを操作するサンプルコード

title: google-gdataを使ってBloggerブログを操作するサンプルコード
url: http://code.google.com/p/google-gdata/source/browse/trunk/clients/cs/samples/blogger/ConsoleSample.cs
http://code.google.com/p/google-gdata/

snippet:
-----引用-----

using System;
using System.Text;
using Google.GData.Client;
using System.Net;
using System.Xml;
using System.Text.RegularExpressions;

namespace BloggerDevSample
{
    class ConsoleSample
    {
        /** Lists the user's blogs. */
        static void ListUserBlogs(Service service)
        {
            Console.WriteLine("\nRetrieving a list of blogs");
            FeedQuery query = new FeedQuery();
            // Retrieving a list of blogs
            query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
            AtomFeed feed = null;
            feed = service.Query(query);
            foreach (AtomEntry entry in feed.Entries)
            {
                Console.WriteLine("  Blog title: " + entry.Title.Text);
            }
        }

        /** Lists the user's blogs and returns the URI for posting new entries
         * to the blog which the user selected.
         */
        static Uri SelectUserBlog(Service service)
        {
            Console.WriteLine("\nPlease select a blog on which to post.");
            FeedQuery query = new FeedQuery();
            // Retrieving a list of blogs
            query.Uri = new Uri("http://www.blogger.com/feeds/default/blogs");
            AtomFeed feed = service.Query(query);

            // Publishing a blog post
            Uri blogPostUri = null;
            if (feed != null)
            {
                foreach (AtomEntry entry in feed.Entries)
                {
                    // Print out the title of the Blog
                    Console.WriteLine("  Blog name: " + entry.Title.Text);
                    Console.Write("  Post to this blog? (y/n): ");
                    if (Console.ReadLine().Equals("y"))
                    {
                        // find the href in the link with a rel pointing to the blog's feed
                        for (int i = 0; i < entry.Links.Count; i++)
                        {
                            if (entry.Links[i].Rel.Equals("http://schemas.google.com/g/2005#post"))
                            {
                                blogPostUri = new Uri(entry.Links[i].HRef.ToString());
                                Console.WriteLine("  Your new posts will be sent to " + blogPostUri.AbsoluteUri.ToString());
                            }
                        }
                        return blogPostUri;
                    }
                }
            }
            return blogPostUri;
        }

        /** Creates a new blog entry and sends it to the specified Uri */
        static AtomEntry PostNewEntry(Service service, Uri blogPostUri)
        {
            Console.WriteLine("\nPublishing a blog post");
            AtomEntry createdEntry = null;
            if (blogPostUri != null)
            {
                // construct the new entry
                AtomEntry newPost = new AtomEntry();
                newPost.Title.Text = "Marriage!";
                newPost.Content = new AtomContent();
                newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
                    "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
                    "<p>He is the last man on earth I would ever desire to marry.</p>" +
                    "<p>Whatever shall I do?</p>" +
                    "</div>";
                newPost.Content.Type = "xhtml";
                newPost.Authors.Add(new AtomPerson());
                newPost.Authors[0].Name = "Elizabeth Bennet";
                newPost.Authors[0].Email = "liz@gmail.com";

                createdEntry = service.Insert(blogPostUri, newPost);
                if (createdEntry != null)
                {
                    Console.WriteLine("  New blog post created with title: " + createdEntry.Title.Text);
                }
            }
            return createdEntry;
        }

        /** Creates a new blog entry and sends it to the specified Uri */
        static void PostAndDeleteNewDraftEntry(Service service, Uri blogPostUri)
        {
            Console.WriteLine("\nCreating a draft blog post");
            AtomEntry draftEntry = null;
            if (blogPostUri != null)
            {
                // construct the new entry
                AtomEntry newPost = new AtomEntry();
                newPost.Title.Text = "Marriage! (Draft)";
                newPost.Content = new AtomContent();
                newPost.Content.Content = "<div xmlns='http://www.w3.org/1999/xhtml'>" +
                    "<p>Mr. Darcy has <em>proposed marriage</em> to me!</p>" +
                    "<p>He is the last man on earth I would ever desire to marry.</p>" +
                    "<p>Whatever shall I do?</p>" +
                    "</div>";
                newPost.Content.Type = "xhtml";
                newPost.Authors.Add(new AtomPerson());
                newPost.Authors[0].Name = "Elizabeth Bennet";
                newPost.Authors[0].Email = "liz@gmail.com";
                newPost.IsDraft = true;

                draftEntry = service.Insert(blogPostUri, newPost);
                if (draftEntry != null)
                {
                    Console.WriteLine("  New draft post created with title: " + draftEntry.Title.Text);
                    // Delete the newly created draft entry
                    Console.WriteLine("  Press enter to delete the draft blog post");
                    Console.ReadLine();
                    draftEntry.Delete();
                }
            }
        }

        /** Display the titles for all entries in the previously selected blog. */
        static void ListBlogEntries(Service service, Uri blogUri)
        {
            if (blogUri != null)
            {
                Console.WriteLine("\nRetrieving all blog posts");
                // Retrieve all posts in a blog
                FeedQuery query = new FeedQuery();
                Console.WriteLine("  Query URI: " + blogUri.ToString());
                query.Uri = blogUri;
                AtomFeed feed = service.Query(query);
                foreach (AtomEntry entry in feed.Entries)
                {
                    Console.WriteLine("  Entry Title: " + entry.Title.Text);
                }
            }
        }

        /** Display title for entries in the blog in the hard coded date range. */
        static void ListBlogEntriesInDateRange(Service service, Uri blogUri)
        {
            Console.WriteLine("\nRetrieving posts using query parameters");
            // Retrieve all posts in a blog between Jan 1, 2006 and Apr 12, 2007
            FeedQuery query = new FeedQuery();
            query.Uri = blogUri;
            query.MinPublication = new DateTime(2006, 1, 1);
            query.MaxPublication = new DateTime(2007, 4, 12);
            AtomFeed feed = service.Query(query);
            foreach (AtomEntry entry in feed.Entries)
            {
                Console.WriteLine("  Entry Title: " + entry.Title.Text);
            }
        }

        /** Change the contents of the newly created blog entry. */
        static AtomEntry EditEntry(AtomEntry toEdit)
        {
            Console.WriteLine("\nUpdating post");
            // Edit the new entry
            if (toEdit != null)
            {
                toEdit.Title.Text = "Marriage Woes!";
                Console.WriteLine("  Press enter to update");
                Console.ReadLine();
                toEdit = toEdit.Update();
            }
            return toEdit;
        }

        /** Delete the specified blog entry. */
        static void DeleteEntry(AtomEntry toDelete)
        {
            Console.WriteLine("\nDeleting post");
            // Delete the edited entry
            if (toDelete != null)
            {
                Console.WriteLine("  Press enter to delete the new blog post");
                Console.ReadLine();
                toDelete.Delete();
            }
        }

        /** Get the comments feed URI for the desired blog entry. */
        static Uri SelectBlogEntry(Service service, Uri blogPostUri)
        {
            Console.WriteLine("\nPlease select a blog entry on which to comment.");
            FeedQuery query = new FeedQuery();
            query.Uri = blogPostUri;
            AtomFeed feed = service.Query(query);
            Uri commentPostUri = null;

            if (feed != null)
            {
                foreach (AtomEntry entry in feed.Entries)
                {
                    // Print out the title of the Blog
                    Console.WriteLine("  Blog entry title: " + entry.Title.Text);
                    Console.Write("  Post a comment on this entry? (y/n): ");

                    if (Console.ReadLine().Equals("y"))
                    {
                        // Create the Post URL for adding a comment by finding this entry's id number.

                        // Find the href in the link with a rel pointing to the blog's feed.
                        for (int i = 0; i < entry.Links.Count; i++)
                        {
                           
                            if (entry.Links[i].Rel == "edit")
                            {
                                string commentUriStart = Regex.Replace(blogPostUri.ToString(), "/posts/default", "");
                                string selfLink = entry.Links[i].HRef.ToString();
                                string entryId = Regex.Replace(selfLink, blogPostUri.ToString() + "/", "");
                                // Build the comment URI from the blog id in and the entry id.
                                commentPostUri = new Uri(commentUriStart + "/" + entryId + "/comments/default");
                                Console.WriteLine("  Your new comments will be sent to " + commentPostUri.ToString());
                                return commentPostUri;
                            }
                        }
                    }
                }
            }

            return commentPostUri;
        }

        static AtomEntry PostNewComment(Service service, Uri commentPostUri)
        {
            Console.WriteLine("\nCommenting on a blog post");
            AtomEntry postedComment = null;
            if (commentPostUri != null)
            {
                // Add a comment.
                AtomEntry comment;
                comment = new AtomEntry();
                comment.Title.Text = "This is my first comment";
                comment.Content.Content = "This is my first comment";
                comment.Authors.Add(new AtomPerson());
                comment.Authors[0].Name = "Blog Author Name";
                postedComment = service.Insert(commentPostUri, comment);
                Console.WriteLine("  Result's title: " + postedComment.Title.Text);
            }
            return postedComment;
        }

        static void ListEntryComments(Service service, Uri commentUri)
        {
            if (commentUri != null)
            {
                Console.WriteLine("\nRetrieving all blog post comments");
                // Retrieve all comments on a blog entry
                FeedQuery query = new FeedQuery();
                Console.WriteLine("  Query URI: " + commentUri.ToString());
                query.Uri = commentUri;
                AtomFeed feed = service.Query(query);
                foreach (AtomEntry entry in feed.Entries)
                {
                    Console.WriteLine("  Comment Title: " + entry.Title.Text);
                }
            }
        }

        static void DeleteComment(AtomEntry commentEntry)
        {
            Console.WriteLine("\nDeleting the comment");
            if (commentEntry != null)
            {
                // Delete the comment.
                Console.WriteLine("  Press enter to delete the new comment post");
                Console.ReadLine();
                commentEntry.Delete();
            }
        }

        static void Main(string[] args)
        {
            Service service = new Service("blogger", "blogger-example");

            // ClientLogin using username/password authentication
            string username;
            string password;
            if (args.Length != 2)
            {
                Console.WriteLine("Usage: BloggerDevSample.exe <username> <password>");
                return;
            }
            else
            {
                username = args[0];
                password = args[1];
            }

            service.Credentials = new GDataCredentials(username, password);

            ListUserBlogs(service);
            Uri blogPostUri = SelectUserBlog(service);
            AtomEntry createdEntry = PostNewEntry(service, blogPostUri);
            PostAndDeleteNewDraftEntry(service, blogPostUri);
            ListBlogEntries(service, blogPostUri);
            ListBlogEntriesInDateRange(service, blogPostUri);
            AtomEntry editedEntry = EditEntry(createdEntry);
            DeleteEntry(editedEntry);
            Uri commentPostUri = SelectBlogEntry(service, blogPostUri);
            AtomEntry commentEntry = PostNewComment(service, commentPostUri);
            ListEntryComments(service, commentPostUri);
            DeleteComment(commentEntry);

            Console.WriteLine("Press enter to quit");
            Console.ReadLine();
        }
    }
}

-----引用-----