【C#】Google Cloud Datastoreで祖先のキーを指定して子エンティティを取得
なんかね、親エンティティのことを祖先って言うらしいよ。ancestoreですね。
このことを知らなかったおかげでハマりました。英語力ないorz
接続はこないだの記事参照で。リクエストのとこだけ。
【C#】コンソールアプリからGoogle Cloud Datastoreに接続 - ふるすたっくえんじにあっぽい人の日記
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'))"
【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ができます。