【C#】コンソールアプリからGoogle Cloud Datastoreに接続

お久しぶりでございます。
タイトルの通りコンソールアプリからGoogle Cloud Datastoreに接続でございます。

最近GCPと戦ってるんです。だるだる。
つってもGCPからAWSにお引っ越しするだけですけども。
お引っ越しなので当然エンティティは作成済のものとします。
あとGoogle Developers ConsoleからP12キーを作成しといてくださいねー。

とりあえずライブラリインストールから。
NuGet便利ねー。pm installなり、UIからやるなりしてください。
今回はbeta2を使ってます。正式版出てないし、サンプルもない。
http://www.nuget.org/packages?q=Google.Apis.Datastore


はい。サンプルコード。
どーせ全件かっさらってSQL Serverにつっこむだけなので今回はrunQueryで。
lookupとか他のものはドキュメント参照。
Entityの実装気に食わん。GetValueにしようよ。まじで。って思うのはぼくだけでしょうか。気が向いたら書こう。
つーかAndroidもだけどGoogleの実装ってほんといまいち。って思うのはぼくだけでしょうか。
https://developers.google.com/resources/api-libraries/documentation/datastore/v1beta2/csharp/latest/


using Google.Apis.Auth.OAuth2;
using Google.Apis.Datastore.v1beta2;
using Google.Apis.Datastore.v1beta2.Data;
using Google.Apis.Services;
using System;
using System.Diagnostics;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

namespace DatastoreTest.Hoge
{
    class Program
    {
        static void Main(string[] args)
        {
            var certificate = new X509Certificate2(@"作成したP12ファイルのパス", "notasecret", X509KeyStorageFlags.Exportable);
            var credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("OAuth/サービスアカウント/メールアドレスの文字列")
            {
                Scopes = new[] { DatastoreService.Scope.Datastore, DatastoreService.Scope.UserinfoEmail }
            }.FromCertificate(certificate));

            var service = new DatastoreService(new BaseClientService.Initializer
            {
                HttpClientInitializer = credential,
            });

            var queryBody = new RunQueryRequest()
            {
                Query = new Query
                {
                    Limit = 1,
                    Kinds = new [] { new KindExpression { Name = "Hoge" } },
                },
            };
            var request = new DatasetsResource.RunQueryRequest(service, queryBody, "プロジェクト名");
            var response = request.Execute();
            response.Batch.EntityResults.ToList().ForEach(x =>
            {
                Console.WriteLine(x.Entity.Key.Path.First().Name);
                x.Entity.Properties.ToList().ForEach(y =>
                {
                    Console.WriteLine(y.Key);
                });
            });
            Console.ReadLine();
        }
    }
}




RedmineのWikiでハマった

Wikiで日本語使ったページ作るとInternal Server Error
ほんとにInternal Server Errorとしか出ず。まぁたぶん文字コードかなとググること20分。

↓これで解消
community.bitnami.com



これですね。
file\apps\redmine\htdocs\vendor\bundle\ruby\2.0.0\gems\actionpack-4.2.0\lib\action_dispatch\middleware\static.rb
from "path = File.join(@root, p)"
to "path = File.join(@root, p.force_encoding('UTF-8'))"


【Android】debug hash key

ターミナルなんて使う必要ないねん。

    PackageInfo info;
        try {
            info = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md;
                md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String something = new String(Base64.encode(md.digest(), 0));
                Log.e("hash key", something);
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }





【Android】Android Studioでjar生成(gradle)

ブログ書かなすぎですね。はい。
ネタがないんすよ。はい。
自社サービスとか自作アプリとか作ってないとなかなかね。はい。
ソースコードとか出せないんでね。はい。

いっつも忘れるのでAndroid Studioでjar生成
最近だとbuild.gradleに書けばおkみたいなライブラリが多くて助かるんですが。
ソースコードしかない場合ね。

Android Studio起動します。
Welcome画面でImport Non-Android Studio Project→ソースコードディレクトリを選択
インポート終わったらapp/build.gradleに以下を追記
パスはよしなに書き換えてください。


task clearJar(type: Delete) {
    delete 'build/libs/' + 'sample.jar'
}
task makeJar(type: Copy) {
    from('build/intermediates/bundles/release/')
    into('release/')
    include('classes.jar')
    rename('classes.jar', 'sample.jar')
}
makeJar.dependsOn(clearJar, build)

syncして
terminalでプロジェクト直下に移動
で、以下のコマンド実行。

./gradlew app:clean app:assembleDebug app:makeJar



上のサンプルの場合だとapp/release/sample.jarができます。


【その他】勝手にIDEランキング

今年入ってからASP.NET MVCとかiOSとかAndroidとかUnityとかCocos2d-xとかいろいろやりすぎて、もはやわけがわからん。

ちなみに最近使ってる言語たち。。
Visual C#
C#
Objective-c
Java
C++
PHP

6言語を使いこなすわたくし。
いや、C++は使いこなしてないから5言語。

あ、ぼくの下で働きたい人募集中。
インフラからサーバーサイドからWebからクライアントサイドからUI/UXまで何でもござれ。
あと自分の食いぶち困らないくらいには営業も。営業職には敵わないけど。

ってことで勝手にIDEランキング


1位 Visual Studio 2012

神です。
インテリセンス素晴らしい。軽い。
今回のランキングで唯一の有償ですしね。しかも高い。
つーか忙しくてまだ2013に移行してません。


2位 Xcode6

ここ最近ようやくまともになりましたね。
Xcode4とかメモリ食い続ける一方だったらから非力なマシンだと1時間に1回再起動必要だったもんね。
そこそこ軽快になってきたので、あとはもうちょいショートカット充実させてほしいですね。
インテリセンスちょっとお馬鹿。候補出しすぎやねん。
デバッグちょっとしにくいのが難点。


3位 Android Studio

Eclipse大嫌いな私としては待望のIDE
IntelliJがベースですね。
インテリセンスが大文字は大文字でちゃんと入力して出してくれないからいまいち。
Windows版でToolWindowをFloating Modeにしたときにフォームで実装してくれるとうれしい。
あとC++書けるようにしてー


4位 NetBeans

可もなく不可もなく。
あんま軽快じゃない。
まぁデプロイ楽。
サーバーのソースコード直接いじれるならvimでもいいんじゃね?


5位 MonoDevelop

こちらも可もなく不可もなく。
特にノーコメント。


6位 Eclipse

うん、嫌い。使いにくい。


7位 Unity

使いにくすぎ。
せめてMono Develop統合せーや。
ただでさえ、Xcode開いたり、Eclipse開いたり、Android Studio開いたりしなきゃいけないんだから。


【その他】フリーランスとは

うーん、ひさしぶり。ちょっと多忙。

独立してから思うこと。一口にフリーランスって言っても色々あるんよ。
ここではエンジニアの場合。大きく2つ。



・常駐型
どっかの企業に常駐して月〜金 1日8時間とかで仕事するやつですね。
派遣社員とやること変わらない感じ。
金溜まったら契約切って旅行行ったりと、まさにフリーな感じ。うらやましい。

・法人化してないだけ型
法人化してないだけで、仕事内容は法人と変わりません。
社長って肩書きはないけど、社長みたいなもん。
仕事内容はBtoBだったりBtoCだったりするけど。

まぁなにが言いたいって、一般的にフリーランスって言うと常駐型をイメージする方が多いみたいですが、ぼくは法人化してないだけ型なので常駐型と一緒にしないで欲しいと。普通に考えたら社長が何年も他の会社の正社員やったりしないよねと。自分の事業あるんですけどと。
常駐型と法人化してないだけ型は全然違うぞと。



あ、全然初見とかで社員とかにお誘い頂くのは何とも思わないどころか、普通にありがたいですw
ぼくがこんな考えだってわかるわけないですしねw

さ、仕事すっかー