About

地図会社で働いていたプログラマ。

2013年11月3日日曜日

Ubuntu 13.10にアップデートしたらEclipseのメニューが開けなくなった


こんな感じでメニューが開けなくなった。

以下のシェルスクリプトでEclipseを起動するようにすれば、メニューを開けるようになる。

2013年7月16日火曜日

GoogleTestでprivateメンバ関数をテストする

参考:http://code.google.com/p/googletest/wiki/AdvancedGuide#Private_Class_Members

テスト対象ソースを汚す必要のない方法2の方が良いかな。


方法1 friendを使用する

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <string>

// テスト対象のクラス
class ClassPrivateMethod1
{
// テストフィクスチャをフレンドにする
friend class ClassPrivateMethodTest1;
private:
 // このprivateメンバ関数のテストをしたい 
 std::string foo() { return std::string("This is a private method!"); }
};

// テストフィクスチャ
class ClassPrivateMethodTest1 : public ::testing::Test
{
public:
 virtual void SetUp() {}
 virtual void TearDown() {}
 // privateメンバ関数へのアクセサ
 virtual std::string foo() { return c.foo(); }
 
protected:
 ClassPrivateMethod1 c;
};

TEST_F(ClassPrivateMethodTest1, accessPrivateMethod)
{
 // アクセサを使ってprivateメンバ関数のテストができた!
 EXPECT_STREQ("This is a private method!", foo().c_str());
}

方法2 FRIEND_TESTマクロを使用する

// テスト対象のクラス
class ClassPrivateMethod2
{
// 特定のテストケースをフレンドにする
FRIEND_TEST(ClassPrivateMethodTest2, accessPrivateMethod);
private:
 // このprivateメンバ関数のテストをしたい 
 std::string foo() { return std::string("This is a private method!"); }
};

TEST(ClassPrivateMethodTest2, accessPrivateMethod)
{
 ClassPrivateMethod2 c;
 EXPECT_STREQ("This is a private method!", c.foo().c_str());
}


2013年6月16日日曜日

Python3系のurllibモジュールでHTTP/GET, POSTを行う


HTTP/GETでWebページを取得する

# -*- coding: utf-8 -*-
import urllib.request

if __name__ == '__main__':
    page_text = ""
    # urlopenはurllib.responseオブジェクトを返す
    # urllib.responseはfileのようなオブジェクトで、infoメソッドとgeturlが追加されたもの
    with urllib.request.urlopen('http://www.google.co.jp') as page:
        # WebページのURLを取得する
        print(page.geturl())
        # infoメソッドは取得したページのメタデータを返す
        print(page.info())
        # readlinesでWebページを取得する
        for line in page.readlines():
            page_text = page_text + line.decode('Shift_JIS')
    print(page_text)


2. HTTP/POSTでWebページにデータを送信する

# -*- coding: utf-8 -*-
import urllib.request

if __name__ == '__main__':

    # はてなのログインURL
    LOGIN_URL = "https://www.hatena.ne.jp/login"
    post_data = {
                 'name': 'ログインID',
                 'password': 'ログインパスワード',
                 'persistent': '1',
                 'location': 'http://b.hatena.ne.jp/?&login_date=1371363089666',
                }
 
    
    # POSTで送信するデータをURLエンコードする
    encoded_post_data = urllib.parse.urlencode(post_data).encode(encoding='ascii')
    
    page_text = ""
    # urlopenのdata引数を指定するとHTTP/POSTを送信できる
    with urllib.request.urlopen(url=LOGIN_URL, data=encoded_post_data) as page:
        # WebページのURLを取得する
        print(page.geturl())
        # infoメソッドは取得したページのメタデータを返す
        print(page.info())
        # readlinesでWebページを取得する
        for line in page.readlines():
            page_text = page_text + line.decode('utf-8')
    print(page_text)

2013年5月9日木曜日

VisualStudioでエンコーディングと改行コードを変える方法


「ファイル」→「保存オプションの詳細設定」


ダイアログでエンコーディングと改行コードを指定する。



2013年2月15日金曜日

.NET 空文字列とSystem.Emptyの違い


結論から言うと同じ。ただし、.NET Framework 2.0の頃は違った。
2.0以降を使う場合は、コーディング規約や可読性を優先するべし。

What is the difference between String.Empty and “” (empty string)?
http://stackoverflow.com/questions/151472/what-is-the-difference-between-string-empty-and-empty-string?lq=1

In .Net pre 2.0, "" creates an object while String.Empty creates no object. So it is more efficient to use String.Empty.
.NET 2.0以前では空文字列はオブジェクトを生成していた。一方、String.Emptyは作成しない。そのためString.Emptyの方が効率が良かった。

"" would only have created an object once anyway due to string interning. Basically the performance tradeoff is peanuts - readability is more important.
空文字列はどのみち一回だけしかオブジェクトを生成しないため、基本的にはパフォーマンストレードオフは大したことない。可読性を優先するべき。

2013年2月11日月曜日

[翻訳] ロケットはC++で書かれている


reedit: We are SpaceX Software Engineers - We Launch Rockets into Space - AMA
http://www.reddit.com/r/IAmA/comments/1853ap/we_are_spacex_software_engineers_we_launch/



We are software engineers at SpaceX. We work on:
  • Code that goes on rockets and spacecraft.
  • Code that supports the design and manufacturing process of rockets and spacecraft.
We work on everything from large-scale web applications to tiny embedded computing platforms. We build tech stacks on C#/MVC4/EF/MSSQL via REST to Javascript/Knockout/Handlebars/LESS, C++/Embedded Linux, Python, LabVIEW… which all together enables us to build, launch, and monitor stuff that goes to space.
[SpaceX]: 僕たちはSpaceXという会社のエンジニアで、以下のコードを書いているんだ。
  • ロケットと宇宙船のコード
  • ロケットと宇宙船の設計、製造を支援するためのコード

また、僕らは大規模なWebアプリから小さな組み込むソフト等なんでもやる。C# MVC4, EF, MSSQLベースでREST APIをJavascript, Knockout, Handlebars, LESSで使ったり、組み込みLinuxのC++、Python、LabView ・・・などを使っている。

[–]wakanooms 226 ポイント  前
Hello! I have several questions for you guys, I am currently studying for a degree in Astrophysics so what you guys do definitely applies to me! :)
For the space industry, what do you guys find to be the most used/useful programming language, and also which language is best to begin learning in order to progress to others? (I have very very little programming experience and am very interested in getting started as every aspect of the industry/research seems to require a basic understanding in some form of programming)

[質問者]: やあ、いくつか質問してもいいかな。僕は現在天体物理学を勉強しているので、あなた達のやっていることは僕にも関係すると思うんだ。宇宙業界ではどのプログラミング言語が一番使われる/使えるんだい?またどの言語から始めるのがいいのかな?(僕はプログラミングの知識が全然無いけど、業界で必要とされているのでチャレンジしてみたいんだ)

[–]spacexdevttySpaceX[S] 251 ポイント  前
For all software engineers (not space related) C is a great language to get started. It forces you to learn about how the CPU works, how memory works, etc., but high enough you’re not writing assembly. Once you’ve mastered C take a look at C++.

宇宙に関係なくすべてのエンジニアにとって、Cは最初の言語にうってつけだと思うよ。Cは君にCPUやメモリがどのように動くか教えてくれ、かつアセンブリほど低級でもない。CをマスターしたらC++もみてみるといいよ。


[–]droogans 32 ポイント  前
I've heard that the conveniences that C++ provides do not outweigh the cost in complexity that big projects usually create when using some of the advanced features of C++. What advantages do you experience using C++ over C?

[質問者]: 大規模プロジェクトでは、C++の利便性は複雑性を上回ると聞いてるけど、CではなくC++使うことのメリットを感じたことがあるかい?


[–]spacexdevttySpaceX[S] 93 ポイント  前
Encapsulation is the big one
[SpaceX]: カプセル化が一番かな。


[–]rellim7 146 ポイント  前
What experience/schooling does one need to get a job with spaceX? Or intern even?
SpaceXで働くにはどんな経験や勉強が必要ですか?


[–]spacexdevttySpaceX[S] 206 ポイント  前
We all come from a diverse background of companies and schools. Most of us are Computer Science students but we definitely have a good amount of EE, Physics, Math, Computer Engineering, and even some self-taught engineers here. For Flight Software, C++ and algorithm/data structure knowledge are very important. For Enterprise Information Systems, C# or Front End experience + great algorithm/data structure knowledge. For Launch Engineering (the team that uses LabVIEW), awesome LabVIEW + great algorithm/data structure knowledge. See the trend? Study math and know your sorting algorithms.
[SpaceX]: 皆様々なバックグラウンド(企業や学校)を持っている。そのほとんどはコンピュータサイエンスだけど、電気工学、物理学、数学、コンピュータ工学、また独習したエンジニアもいる。飛行関連のソフトウェアにはC++、アルゴリズムとデータ構造がとても重要で、エンタープライズシステムはC#かフロントエンドとアルゴリズムとデータ構造の知識が必要になってくる。Launch EngineeringはLabVIEW、アルゴリズムとデータ構造かな。


[–]cochico 109 ポイント  前
wow, you all look really young. How old are you and how did you end up in that (awesome) job ?
[質問者]: 君たちはとても若く見えるね、何歳ぐらい?どうやってそのクールな仕事を得たんだ?


[–]spacexdevttySpaceX[S] 121 ポイント  前
We did a quick informal poll and we think the average software engineer age is about 30.
How did we get here? We applied through the website or were contacted by a recruiter. :)
[SpaceX]: アンケートをとったところ、ソフトウェアエンジニアの平均年齢は約30歳ぐらいだった。どうやって仕事をえたかって?ウェブサイトで応募するかリクルーターを通じてかな。


[–]adrianbedard 37 ポイント  前
I'm studying computer engineering in college. What do I need to know before I can properly intern with SpaceX.

今大学でコンピュータ工学を勉強している。SpaceXでインターンする前に何を勉強したらいい?


[–]spacexdevttySpaceX[S] 51 ポイント  前
On the software side, actual coding experience (hobby or class projects) look great on your resume. We also love to see passion about space; feel free to dork out on your resume or interview. We use C++ a lot but there is also plenty of Python, C# and even some Matlab is used here. Some experience with lower-level systems such as the networking stack doesn’t hurt. Align yourself with a professor and attach yourself whatever he or she is working on. High altitude balloon projects are now relatively easy to get started with a few friends and can be very applicable.

ソフトウェアに関しては、実際のコーディング経験(趣味か授業等)があるといいね。あと、宇宙に関する情熱。僕らはC++でたくさん書いてるけど、Python、C#やMatlabも使ってる。ネットワーク等の低水準システムの経験もあると良い。まずは教授とよく相談して何か初めてみて。高所でのバルーンプロジェクトは友達なんかと比較的簡単に始めやすいと思う。






2013年2月5日火曜日

Windows 8にSQL Server 2008 R2をインストールする


Windows 8 ProにSQL Server 2008 R2をインストールしようとしたらこんなメッセージが出た。



Installing SQL Server on Windows 8
http://blogs.msdn.com/b/psssql/archive/2012/09/01/installing-sql-server-on-windows-8.aspx
Now for SQL Server 2008 R2 (this is the same experience as SQL 2008). First, let me stop and tell you the support compatibility story:
  • SQL Server 2005 and any previous version is NOT supported on Windows 8/Windows Server 2012
  • SQL Server 2008 is supported on Windows 8/Windows Server 2012 but requires a minimum of Service Pack 3
  • SQL Server 2008 R2 is supported on Windows 8/Windows Server 2012 but requires a minimum of Service Pack 1
  • SQL Server 2012 RTM is supported on Windows 8/Windows Server 2012



SQL Server 2008 R2はSP1のみがWindows8に対応しているみたい。以下からダウンロードしてインストールできた。
http://www.microsoft.com/ja-jp/download/details.aspx?id=26729