ASUSTORのNAS「AS3202T」でSSL対応Webサーバーを立てる

OneDrive、GoogleDriveの同期、各ノートPCのバックアップ用に購入したAS3202Tですが標準機能としてWebサーバーが立てられます、SSL対応で。
ただしNAS自体の性能がそこまで高い訳ではないのでアクセスの少ない身内用とかそんな用途です。

調べてもSSL対応のところまで書いてる記事がなかったので自分用にメモ。
前提条件としてドメイン取得済みでDNSサービスにも登録済みとします。

続きを読む

XamarinでAndroidアプリをフルスクリーンで表示させる

Xamarin.Nativeの場合

MainActivity.csに以下を追加

var systemUiFlags = SystemUiFlags.LayoutStable
			| SystemUiFlags.LayoutHideNavigation
			| SystemUiFlags.LayoutFullscreen
			| SystemUiFlags.HideNavigation
			| SystemUiFlags.Fullscreen
			| SystemUiFlags.ImmersiveSticky;
Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(int)systemUiFlags;

Xamarin.Formsの場合

Android 4.4以下はNativeと同じでいいんですけど、Android 5以降はなぜかステータスバーの内容だけ消えて表示領域が取り残される謎状態になります。

対応としてはbase.OnCreateのあとに以下を追加します。

	if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
	{
		this.Window.AddFlags(WindowManagerFlags.Fullscreen);
		this.Window.AddFlags(WindowManagerFlags.KeepScreenOn);
	}

OnCreate全体を見るとこんな感じ

protected override void OnCreate(Bundle bundle)
{
	base.OnCreate(bundle);

	if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
	{
		this.Window.AddFlags(WindowManagerFlags.Fullscreen);
		this.Window.AddFlags(WindowManagerFlags.KeepScreenOn);
	}

	global::Xamarin.Forms.Forms.Init(this, bundle);
	LoadApplication(new App());

	var systemUiFlags = SystemUiFlags.LayoutStable
				| SystemUiFlags.LayoutHideNavigation
				| SystemUiFlags.LayoutFullscreen
				| SystemUiFlags.HideNavigation
				| SystemUiFlags.Fullscreen
				| SystemUiFlags.ImmersiveSticky;
	Window.DecorView.SystemUiVisibility = (StatusBarVisibility)(int)systemUiFlags;
}

Androidで横固定にする(回転あり)

[Activity (Label = "XamarinNativeApp5.Android", MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.SensorLandscape)]

ScreenOrientation = ScreenOrientation.SensorLandscapeを指定する。
ScreenOrientation.Landscapeだと片方の横固定にしかならず、反対側の横にはならない。

ユーザーの画面回転に依存させるならScreenOrientation.UserLandscapeを使う

【Xamarin】Visual Studio 2017でiOSのビルドを行うまでのメモ

環境

  • MacBook Pro (Retine, 13-inch, Early 2013)
    macOS Sierra(クリーンインストール)、Core i5、RAM 8GB
  • VAIO Z (2015)
    Windows 10 Pro build 1703 (Creators Update)
    Core i5、RAM 16GB
    Visual Studio Enterprise 2017 Version 15.1

手順

  1. Macのシステム環境設定から共有を選ぶ。
  2. リモートログインに☑を入れてsshログインに必要なアカウントとIPアドレスをメモ。
  3. MacにXamarin Studioをダウンロードしてインストールする。
    https://www.xamarin.com/download-it
  4. Xamarin Studioのインストールが完了するとXcodeのインストールに誘導されるので従いApp Storeからダウンロードしてインストールする。
  5. Xcodeのインストールが終わったら一度起動してライセンスに同意する。
  6. Xamarin Studioを起動して安定版の更新を行う。
    (ベータやアルファやってもいいけど何かあった時に自力で解決出来る人のみ)
  7. Windows側でVisual Studioから新規CrossPlatformプロジェクトを作る。
  8. [ツール]→[オプション]→[Xamarin]→[iOSの設定]→[Xamarin Mac Agentの検索]
  9. 用意したMacを選択(出てこないなら2でメモったIPアドレスとアカウントで接続)
    パスワード要求されたらMacにログインする時のやつを入力
  10. スタートアッププロジェクトをiOSにしてデバッグデバイスを選択してビルド!

繋がらない時

  • SSH キーが作れないって言われる
    Mac側で別のユーザーを作って試してみて。
  • The root assemblyうんたらかんたらiOS.exe conflicts with another assemblyって言われる
    Visual StudioかXamarin Studioのバージョンが古いかも!
    もしくはXamarin Studioが安定版じゃないかも!
    確認してプロジェクト作り直してみて。
    >The root assembly conflicts with another assembly

Vagrant 1.9.3 に更新して Errno::EADDRNOTAVAIL が出た時の対応

このようなエラーが出た場合の対処方法

C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.9.3/lib/vagrant/util/is_port_open.rb:21:in `initialize’: The requested address is not valid in its context. – connect(2) for “0.0.0.0” port 80 (Errno::EADDRNOTAVAIL)

Vagrantfileにforwarded_portを指定しているなら「host_ip: “127.0.0.1”」を追加する。

config.vm.network :forwarded_port, guest: 22, host: 2231, id: “ssh”
ならば
config.vm.network :forwarded_port, guest: 22, host: 2231, host_ip: “127.0.0.1”, id: “ssh”
とする。

MySQLのSELECT句で * と id で異なるidのレコードが取得出来る場合の対応

以下2つのSQLで取得出来るレコードのidが異なった。

SELECT * FROM table WHERE hoge = fuga LIMIT 1;

SELECT id FROM table WHERE hoge = fuga LIMIT 1;

ほしいデータとして正しいのは上のクエリ、しかし実行したいのはしたのクエリである。
原因はMySQLのLIMITクエリ最適化らしく、LIMITの指定が少ない場合、インデックスが使用されることがあるらしい。

詳しくは以下
8.2.1.19 LIMIT クエリーの最適化

どうすればいいかというと、ORDER BY句でちゃんと並び替えればいい。

SELECT id FROM table WHERE hoge = fuga ORDER BY id LIMIT 1;

idはPKなのでORDER BY指定しなくてもid昇順で取ってくると思ってたけどそうでもないだな…

PhpStormに完全に乗り換えた

PhpStormを購入した、からはや1ヶ月が経過してどうだったかという話。

結論から書くと「自分は」完全に乗り換えるに至った。
「自分は」と書いたのは人によってはNetBeansで十分な条件を満たしてる可能性が大いにあるから。

まずPhpStormがNetBeansより優れている点

  • 参照元検索がNetBeansより精度が高い
    そもそも乗り換えた理由がこれ。
    SymphonyでNetBeansだと出てこなかった参照元がPhpStormだと出た。
  • IDEからVagrantが叩ける
    これは地味に便利
    2016-07-24 (4).png
  • IDEからSSHが繋がる
    Windows環境で使うには非常に便利
    キャプチャ.PNG
  • gistに直接コードを投げれる
  • メモリ使用量がNetBeansより少ない
    NetBeans使ってた時はメモリ1GBとか普通に使ってたけど、PhpStormは多くて500MBぐらいで済んでる。
  • ダークテーマがある
    NetBeansはエディタのテーマ編集できたけど、IDE全体のテーマを編集することが(多分)できない。
    PhpStormはIDE全体を(3種類だけど)変更出来る。
  • エディタのテーマにVisual Studio 2012/2013がある
    NetBeansでも頑張ればできるけど、用意されてるので楽
    http://www.phpstorm-themes.com/themes-list?title=Visual+Studio&field_tags_tid=All&field_tags_tid=All

逆にNetBeansが優れている点

  • 無料
    初年度1万円弱、2年目7000円強、3年目5000円半ばの金額を払えない、もしくは30日間のトライアルの結果払う価値を感じなかった場合はNetBeansでよい。
  • 日本語対応
    中学1年レベルの簡単な英語すら読む気のない人は自動的にこっち。
  • 複数のプロジェクトを同時に開ける
    このせいでメモリ使ってる説はあるけど個人的には便利でPhpStormで開けないのが悔やまれる。

こんなところです。
参照元検索の精度+ダークテーマで俺的にはもう乗り換えるしかなかったんですけど、まさかSSHまで叩けるとは思ってなくて複数プロジェクト開けないのは残念だけどNetBeansから完全に移行しました。