【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 – A color tool for finding lighter and darker colors based on any color
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();
        }





【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開いたりしなきゃいけないんだから。