Skip to content

Instantly share code, notes, and snippets.

@wilfrem
wilfrem / gist:5490000
Created April 30, 2013 16:46
ASP.NETとServiceStackのメモ
ASP.NETはweb.configに書かれているhandlerを呼び出すため、リクエストごと(not スレッド)にServiceのインスタンスを生成する
一方、AppHostは起動時に1インスタンス生成される
その結果、ServiceStackでは1プロセスあたり、AppHost一つ、Serviceが複数という構成になる。
OrmLiteのConnectionはautoDisposeConnection=falseの場合は、AppHostが持つFactoryの中に持つことになる。
AppHostが実質シングルトンなので、OrmLiteのConnectionはシングルトンになる→リクエスト間でレースコンディションを発生させる可能性がある
autoDisposeConnection=trueの場合はリクエストごとに接続を生成するために(内部でプーリングしてるだろうけど)、トランザクションでレースコンディションは発生させない
@wilfrem
wilfrem / gist:5494961
Last active February 23, 2016 09:09
Windowsでveewee入れてvagrantのvirtual boxを作る方法

Windowsでveewee入れてvagrantのvirtual boxを作る方法

まずはrubyとrubyのdevelopment kitを入れる

  • ダウンロード先
  • インストール方法
  • この辺りが参考になりました
@wilfrem
wilfrem / ServiceStackDTOSample.cs
Created June 8, 2013 13:37
ServiceStackのDTOのサンプル
namespace ServiceStackDTOSample{
[Api("アイテムをItemIDを元に取得")]
[Route("/items/{id}", "GET")]
public class GetItem : IReturn<Item>
{
public string Id { get; set; }
}
[Api("アイテムを追加する")]
[Route("/items", "POST")]
public class AddItem : IReturn<Item>
@wilfrem
wilfrem / xamarin_gmap.md
Created June 23, 2013 17:21
Xamarin(Mono) AndroidでGoogle Maps API for Android v2を使うためのメモ

使うためのポイント

  • Google Maps API for Android v2をつかうためにはGoogle Play Serviceを叩く必要がある
  • Google Play Serviceを叩くクライアントは現状jarでしか提供されてない
  • jarをC#で使うためにはBinding Libraryが必要(サンプルので可。どちらにしてもIndie以上のライセンスが必要)
  • また、Google Play Serviceは4系向けなので、2系対応にはfragment対応が必要
  • Google APIに鍵登録必要なので注意
  • 必要となるパーミッションが分かりにくいので注意

##必要なパーミッション

@wilfrem
wilfrem / xamarin.android.application.md
Created June 29, 2013 08:50
Xamarin AndroidでApplicationクラスを作成する方法

Xamarin AndroidでApplicationクラスを作成する方法

多分目的

  • なんか各ActivityでGlobalに使えるコンテキスト的なクラスが欲しいんじゃね?という時に使う

やり方

  • Applicationを継承したクラスを作る
  • protectedなコンストラクタ(引数ついてる方)を呼び出せるようなpublicなコンストラクタを使う
  • Application属性を付ける(勝手にAndroidManifestに追記してくれます)
@wilfrem
wilfrem / AntiUIChattering.cs
Created July 1, 2013 17:07
チャタリング防止機構。Monitor使うのはやめたほうがいいかな……
/// <summary>
/// AndroidUIスレッドのチャタリングを防ぐための機構
/// </summary>
public static class AntiUIChattering
{
public static EventHandler<T> WrapHandlerWithArgs<T>(EventHandler<T> funcForUIEvent)
{
return (sender, e)=>{
if(!Monitor.TryEnter(funcForUIEvent))
return;
@wilfrem
wilfrem / gist:5915339
Created July 3, 2013 03:52
Xamarin.AndroidでJavaインターフェイスを継承したいだけなのにIJavaObjectとかIDisposalとかも一緒に実装しなきゃいけなくなってウザイとき
Java.Lang.Objectを継承しなさい。C#で。
そうすると、勝手にDisposeとかJavaのポインタとか実装してくれる。
@wilfrem
wilfrem / LuaUTF8.cs
Created July 10, 2013 16:40
UTF8文字列がソースコードに入っているとLuaのコンパイラが死ぬので、それを防ぐために非ASCII文字をLuaのエスケープシーケンスに置き換えるための拡張メソッド
public static class ScriptExtensions
{
static Regex rxNonAscii = new Regex (@"\P{IsBasicLatin}", RegexOptions.Compiled);
public static byte[] ToUTF8Bytes(this string text){
return System.Text.Encoding.UTF8.GetBytes (text);
}
public static string EncodeNonAsciiForLua(this string script){
return rxNonAscii.Replace (script, (m) =>
string.Join ("", m.Value.ToUTF8Bytes().Select ((it) => @"\" + it.ToString ().Trim ()))
);
@wilfrem
wilfrem / gist:6149336
Last active December 20, 2015 14:49
Linux上でJenkins+mono+NuGet.exeを動かすためのメモ
まずはJenkinsの設定でmsbuildのパスとしてxbuildのパスを教える
NuGetを動かすためにはMicrosoft.Build.dllが必要なのでダウンロードしてNuGet.exeに置く
http://headsigned.com/article/running-nuget-command-line-on-linux
(libmono-microsoft-build*ではダメだったので、多分バージョン違いかDLL違いかと。。。)
環境変数EnableNuGetPackageRestoreをtrueに設定する
mozroots --import --ask-remove を実行し、mozillaの証明書をmonoにインストール
@wilfrem
wilfrem / gist:6201158
Created August 10, 2013 16:55
ServiceStackのAuthPlugin(AuthFeature)でうっかりオープンリダイレクタ脆弱性を作らないようにする方法
AuthPluginは/authがContinueパラメータを受け取り、認証後はContinueパラメータで指定されたURLにリダイレクトする設計になっています
そして、Continueはホストも含めたフルURLを指定するため、オープンリダイレクタになってしまう危険性があります
対処法としては
AuthServiceクラスはstaticプロパティとしてValidateFnを持っており、これにdelegateをセットすると認証前にValidateFnにセットしたdelegateが呼び出されるようになります
なので、ValidateFnに入れるdelegateでContinueをチェックするようにし、ホワイトリストに無いhostを指定されたらリダイレクトせずに400/404を投げれば良い