読者です 読者をやめる 読者になる 読者になる

ふるすたっくえんじにあっぽい人の日記

ASP .NET MVC (C#)、.NET Framework、iOS (Objective-c) アプリ、Androidアプリ (Java)、AWS、たまにLAMPとかプロジェクトマネジメントあたりのお話

Visual Studio Code settings.json

全くブログ書いてなかった。。
3か月半ぶりですね。

ただのメモです。
Unity向けのsettings.jsonでございます。

{
	"files.exclude": {
		"**/.git": true,
		"**/.DS_Store": true,
		"**/*.meta" : true,
		"**/*.mat" : true,
		"**/*.unity" : true,
		"**/*.userprefs" : true,
		".settings" : true,
		"ProjectSettings" : true,
		"Library" : true,
		"Temp" : true,
		"obj" : true
	},
	"editor.referenceInfos": false,
	"editor.autoClosingBrackets": false,
	"editor.formatOnType": true
}


【C#】Google Cloud Datastoreで祖先のキーを指定して子エンティティを取得

なんかね、親エンティティのことを祖先って言うらしいよ。ancestoreですね。
このことを知らなかったおかげでハマりました。英語力ないorz

接続はこないだの記事参照で。リクエストのとこだけ。
【C#】コンソールアプリからGoogle Cloud Datastoreに接続 - チャラめがねdevの日記

            var queryBody = new RunQueryRequest
            {
                Query = new Query
                {
                    Kinds = new[] { new KindExpression { Name = "子エンティティのKind" } },
                    Filter = new Filter
                    {
                        PropertyFilter = new PropertyFilter
                        {
                            Property = new PropertyReference
                            {
                                Name = "__key__",
                            },
                            Operator = "HAS_ANCESTOR",
                            Value = new Value
                            {
                                KeyValue = new Key
                                {
                                    Path = new[]
                                    {
                                        new KeyPathElement
                                        {
                                            Kind = "親エンティティのKind",
                                            // 取得したい親エンティティのName or Idを指定。
                                        },
                                    },
                                },
                            },
                        },
                    },
                },
            };
            var request = new DatasetsResource.RunQueryRequest(datastoreService, queryBody, "データセットID");
            var result = request.Execute();


【Sql Server】ストアドでUpsert

MERGE INTOですね。メモです。
MERGE INTOが使えるのはSQL Server 2008以降だった気がします。

ALTER PROCEDURE [dbo].[Upsert]
	@Id int,
	@Data int,
AS
BEGIN
	BEGIN TRANSACTION;

	    SET NOCOUNT ON;
	
            MERGE INTO HogeTable AS A
            USING (SELECT @Id AS Id,@Data AS Data) AS B
            ON (A.Id = B.Id)
            WHEN MATCHED THEN
	        UPDATE SET Data = B.Data
	    WHEN NOT MATCHED THEN
                INSERT (Id,Data) VALUES(B.Id,B.Data);

	COMMIT TRANSACTION;
END


【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'))"


ブックマーク整理

https://color.adobe.com/ja/explore/most-popular/?time=month
paletton.com
0to255
www.materialpalette.com
blog.xin9le.net


【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();
        }