2019/03/12

AMAZON SNS Ruby On Rails にて実装した。

プッシュ通知の実装のしかたって、何が一番正解なのだろうか・・・。

デバイストークンはどこに貯める(保存)?
・Amazon SNS 側のみ。
・サーバー等に集約する。

結局のところ、両方が正しいのだろうか・・・

両方で管理してもあまり効率が良さそうで無い・・・ 
※最終的に何をしたいかで決まるが・・・。

大まかな流れ)
 デバイストークンを投げる(直接?サーバー経由?)

アプリケーションに登録とトピックへ登録

配信指示

・一斉送信をする場合は、トピックに登録するのを忘れずに。
・完全個別配信の場合は、トピックは無くてもよい。

SNSの不便な点

・デバイストークンの総数を取得する機能が無い。
100件づつ取得する機能はあるが、全て数えるとなるとすごく時間がかかる。
100万件とかあると地獄・・・・

・一斉配信はアプリケーションにトークン登録してからトピックへ登録する必要有り。
  export機能とかあってもよいのではないか?

--------

送信スペック
・トピックにて配信  10万件 程度なら、誤差1分もかからないかも。

ゴミ掃除
・トークンとか無効なやつは削除してあげた方が良い。

殴り書き中ですが、今日はここまで。気が向いたら、続きを!

2019/03/07

AMAZON SNS 管理画面 UIが変わった・・・。

AMAZON  SNS
今日アクセスしたら、昨日までみていた画面と変わっていて困惑中、、、
主に、google 関連のGCM  → FCM に表記が変わって、きれいなUIになっている。

2019/02/21

AMAZON SNS の証明書

AMAZON SNSでiOS用のプッシュ通知の証明書(.p12)は、
なぜかファイル名にマルチバイト文字があるとアップ時にエラーになる。
解決する方法は、半角英数字の文字のファイル名にすればアップできた。
なんだかなぁ。これくらいは対応してほしい。

2019/02/08

【iOS】SwiftでCGAffineTransformから角度・ラジアン・度数・スケールを計算する方法


メモ

Swift 4 でtransformから角度、ラジアン、ディグリー、スケールを求める 忘れがちなので・・・。


let transform = view.transform
let radians = atan2(transform.b, transform.a)
let degrees = radians * 180 / .pi
let scale = sqrt(abs(transform.a * transform.d - transform.b * transform.c))

import CoreGraphics

extension CGAffineTransform {
    var angle: CGFloat {
        return atan2(b, a)
    }
    
    var radians: CGFloat {
        return angle
    }
    
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }
    
    var scale: CGPoint {
        return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d))
    }
}

// 例として、適当な CGAffineTransform を作成
let transform = CGAffineTransform(rotationAngle: CGFloat.pi/4).scaledBy(x: 2.0, y: 1.5)

let angleInRadians = transform.radians
let angleInDegrees = transform.degrees
let scale = transform.scale

print("Angle in radians: \(angleInRadians)")
print("Angle in degrees: \(angleInDegrees)")
print("Scale: \(scale)")

2024/06/14 、コメント多めに書き直してみた。

import CoreGraphics

// CGAffineTransformの拡張機能を定義
extension CGAffineTransform {
    
    // 現在の変換の回転角度をラジアン単位で取得
    var angle: CGFloat {
        return atan2(b, a)
    }
    
    // 回転角度をラジアンで取得('angle'プロパティのエイリアス)
    var radians: CGFloat {
        return angle
    }
    
    // 回転角度を度数法で取得
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }
    
    // 現在の変換のスケールをCGPointとして取得
    var scale: CGPoint {
        return CGPoint(x: sqrt(a * a + c * c), y: sqrt(b * b + d * d))
    }
}

// 例として、回転とスケールを含むCGAffineTransformを作成
let transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4).scaledBy(x: 2.0, y: 1.5)

// 回転角度をラジアンで取得
let angleInRadians = transform.radians

// 回転角度を度数法で取得
let angleInDegrees = transform.degrees

// スケールを取得
let scale = transform.scale

// 結果を出力
print("Angle in radians: \(angleInRadians)") // 出力: 回転角度(ラジアン)
print("Angle in degrees: \(angleInDegrees)") // 出力: 回転角度(度数法)
print("Scale: \(scale)") // 出力: スケール

2025/03/21 、AIに添削してもらった

import CoreGraphics

// CGAffineTransformの拡張機能を定義
extension CGAffineTransform {
    // 現在の変換の回転角度をラジアン単位で取得
    var angle: CGFloat {
        // atan2(b, a)は、aが0の場合に問題が発生する可能性があるため、特別な処理を行う
        let angle = atan2(b, a)
        return angle
    }

    // 回転角度をラジアンで取得('angle'プロパティのエイリアス)
    var radians: CGFloat {
        return angle
    }

    // 回転角度を度数法で取得
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }

    // 現在の変換のスケールをCGPointとして取得
    var scale: CGPoint {
        // より正確なスケールを求めるために、aとdの平均の平方根を使用する
        let scaleX = sqrt(a * a + c * c)
        let scaleY = sqrt(b * b + d * d)
        return CGPoint(x: scaleX, y: scaleY)
    }
}

// 例として、回転とスケールを含むCGAffineTransformを作成
let transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4).scaledBy(x: 2.0, y: 1.5)

// 回転角度をラジアンで取得
let angleInRadians = transform.radians

// 回転角度を度数法で取得
let angleInDegrees = transform.degrees

// スケールを取得
let scale = transform.scale

// 結果を出力
print("Angle in radians: \(angleInRadians)") // 出力: 回転角度(ラジアン)
print("Angle in degrees: \(angleInDegrees)") // 出力: 回転角度(度数法)
print("Scale: \(scale)") // 出力: スケール



2026/02/25 更にAIで添削

  • radians 削除
  • scale の計算式を修正(scaleX = sqrt(a²+b²), scaleY = sqrt(c²+d²)
  • 不正確なコメントを削除・整理

import CoreGraphics

extension CGAffineTransform {
    /// 回転角度をラジアン単位で取得
    var angle: CGFloat {
        return atan2(b, a)
    }

    /// 回転角度を度数法で取得
    var degrees: CGFloat {
        return angle * 180.0 / CGFloat.pi
    }

    /// スケールをCGPointとして取得
    var scale: CGPoint {
        let scaleX = sqrt(a * a + b * b)
        let scaleY = sqrt(c * c + d * d)
        return CGPoint(x: scaleX, y: scaleY)
    }
}

// 使用例
let transform = CGAffineTransform(rotationAngle: CGFloat.pi / 4).scaledBy(x: 2.0, y: 1.5)

print("角度(ラジアン): \(transform.angle)")   // 約 0.7854
print("角度(度数法): \(transform.degrees)")   // 約 45.0
print("スケール: \(transform.scale)")           // 約 (2.0, 1.5)


2019/02/07

【iOS】UIViewの当たり判定( swift )


UIViewの当たり判定メモ
    
    let myView:UIView = UIView

    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let v = myView.hitTest(point, with: event)




        return v
    }




こんな感じで取れる。
あたって入ればvの中にはあたったViewが入ってる。

ハズレならnil 


2019/01/09

Locale.availableIdentifiers の中身 iOS 12


iOS 12   iPhone7 にて確認して現在は797 種類あるようです。


let identifiers = Locale.availableIdentifiers


▿ 797 elements
  - 0 : "eu"
  - 1 : "hr_BA"
  - 2 : "en_CM"
  - 3 : "en_BI"
  - 4 : "rw_RW"
  - 5 : "ast"
  - 6 : "en_SZ"
  - 7 : "he_IL"
  - 8 : "ar"
  - 9 : "uz_Arab"
  - 10 : "en_PN"
  - 11 : "as"
  - 12 : "en_NF"
  - 13 : "ks_IN"
  - 14 : "es_KY"
  - 15 : "rwk_TZ"
  - 16 : "zh_Hant_TW"
  - 17 : "en_CN"
  - 18 : "gsw_LI"
  - 19 : "ta_IN"
  - 20 : "th_TH"
  - 21 : "es_EA"
  - 22 : "fr_GF"
  - 23 : "ar_001"
  - 24 : "en_RW"
  - 25 : "tr_TR"
  - 26 : "de_CH"
  - 27 : "ee_TG"
  - 28 : "en_NG"
  - 29 : "fr_TG"
  - 30 : "az"
  - 31 : "fr_SC"
  - 32 : "es_HN"
  - 33 : "en_AG"
  - 34 : "ccp_IN"
  - 35 : "ru_KZ"
  - 36 : "gsw"
  - 37 : "dyo"
  - 38 : "so_ET"
  - 39 : "zh_Hant_MO"
  - 40 : "de_BE"
  - 41 : "nus_SS"
  - 42 : "km_KH"
  - 43 : "my_MM"
  - 44 : "mgh_MZ"
  - 45 : "ee_GH"
  - 46 : "es_EC"
  - 47 : "kw_GB"
  - 48 : "rm_CH"
  - 49 : "en_ME"
  - 50 : "nyn"
  - 51 : "mk_MK"
  - 52 : "bs_Cyrl_BA"
  - 53 : "ar_MR"
  - 54 : "es_GL"
  - 55 : "en_BM"
  - 56 : "ms_Arab"
  - 57 : "en_AI"
  - 58 : "gl_ES"
  - 59 : "en_PR"
  - 60 : "ff_CM"
  - 61 : "ne_IN"
  - 62 : "or_IN"
  - 63 : "khq_ML"
  - 64 : "en_MG"
  - 65 : "pt_TL"
  - 66 : "en_LC"
  - 67 : "iu_CA"
  - 68 : "ta_SG"
  - 69 : "jmc_TZ"
  - 70 : "om_ET"
  - 71 : "lv_LV"
  - 72 : "es_US"
  - 73 : "en_PT"
  - 74 : "vai_Latn_LR"
  - 75 : "en_NL"
  - 76 : "to_TO"
  - 77 : "cgg_UG"
  - 78 : "en_MH"
  - 79 : "ta"
  - 80 : "zu_ZA"
  - 81 : "shi_Latn_MA"
  - 82 : "es_FK"
  - 83 : "ar_KM"
  - 84 : "en_AL"
  - 85 : "brx_IN"
  - 86 : "te"
  - 87 : "chr_US"
  - 88 : "yo_BJ"
  - 89 : "fr_VU"
  - 90 : "pa"
  - 91 : "tg"
  - 92 : "kea"
  - 93 : "ksh_DE"
  - 94 : "sw_CD"
  - 95 : "te_IN"
  - 96 : "fr_RE"
  - 97 : "th"
  - 98 : "ur_IN"
  - 99 : "yo_NG"
  - 100 : "ti"
  - 101 : "es_HT"
  - 102 : "es_GP"
  - 103 : "guz_KE"
  - 104 : "tk"
  - 105 : "kl_GL"
  - 106 : "ksf_CM"
  - 107 : "mua_CM"
  - 108 : "lag_TZ"
  - 109 : "lb"
  - 110 : "fr_TN"
  - 111 : "es_PA"
  - 112 : "pl_PL"
  - 113 : "to"
  - 114 : "hi_IN"
  - 115 : "dje_NE"
  - 116 : "es_GQ"
  - 117 : "en_BR"
  - 118 : "kok_IN"
  - 119 : "pl"
  - 120 : "fr_GN"
  - 121 : "bem"
  - 122 : "ha"
  - 123 : "ckb"
  - 124 : "es_CA"
  - 125 : "lg"
  - 126 : "tr"
  - 127 : "en_PW"
  - 128 : "tt"
  - 129 : "en_NO"
  - 130 : "nyn_UG"
  - 131 : "sr_Latn_RS"
  - 132 : "gsw_FR"
  - 133 : "pa_Guru"
  - 134 : "he"
  - 135 : "qu_BO"
  - 136 : "ps_AF"
  - 137 : "lu_CD"
  - 138 : "mgo_CM"
  - 139 : "sn_ZW"
  - 140 : "en_BS"
  - 141 : "da"
  - 142 : "ps"
  - 143 : "ln"
  - 144 : "pt"
  - 145 : "hi"
  - 146 : "lo"
  - 147 : "ebu"
  - 148 : "de"
  - 149 : "gu_IN"
  - 150 : "wo_SN"
  - 151 : "seh"
  - 152 : "en_CX"
  - 153 : "en_ZM"
  - 154 : "fr_HT"
  - 155 : "fr_GP"
  - 156 : "pt_GQ"
  - 157 : "lt"
  - 158 : "lu"
  - 159 : "es_TT"
  - 160 : "ln_CD"
  - 161 : "vai_Latn"
  - 162 : "el_GR"
  - 163 : "lv"
  - 164 : "en_KE"
  - 165 : "sbp"
  - 166 : "hr"
  - 167 : "en_CY"
  - 168 : "es_GT"
  - 169 : "twq_NE"
  - 170 : "zh_Hant_HK"
  - 171 : "kln_KE"
  - 172 : "fr_GQ"
  - 173 : "chr"
  - 174 : "hu"
  - 175 : "es_UY"
  - 176 : "fr_CA"
  - 177 : "ms_BN"
  - 178 : "en_NR"
  - 179 : "mer"
  - 180 : "shi"
  - 181 : "es_PE"
  - 182 : "fr_SN"
  - 183 : "bez"
  - 184 : "sw_TZ"
  - 185 : "wae_CH"
  - 186 : "kkj"
  - 187 : "hy"
  - 188 : "dz_BT"
  - 189 : "en_CZ"
  - 190 : "teo_KE"
  - 191 : "teo"
  - 192 : "en_AR"
  - 193 : "ar_JO"
  - 194 : "yue_Hans_CN"
  - 195 : "mer_KE"
  - 196 : "khq"
  - 197 : "ln_CF"
  - 198 : "nn_NO"
  - 199 : "es_SR"
  - 200 : "en_MO"
  - 201 : "ar_TD"
  - 202 : "dz"
  - 203 : "ses"
  - 204 : "en_BW"
  - 205 : "en_AS"
  - 206 : "ar_IL"
  - 207 : "es_BB"
  - 208 : "bo_CN"
  - 209 : "nnh"
  - 210 : "teo_UG"
  - 211 : "hy_AM"
  - 212 : "ln_CG"
  - 213 : "sr_Latn_BA"
  - 214 : "en_MP"
  - 215 : "ksb_TZ"
  - 216 : "ar_SA"
  - 217 : "smn_FI"
  - 218 : "ar_LY"
  - 219 : "en_AT"
  - 220 : "so_KE"
  - 221 : "fr_CD"
  - 222 : "af_NA"
  - 223 : "en_NU"
  - 224 : "es_PH"
  - 225 : "en_KI"
  - 226 : "en_JE"
  - 227 : "lkt"
  - 228 : "en_AU"
  - 229 : "fa_IR"
  - 230 : "pt_FR"
  - 231 : "uz_Latn_UZ"
  - 232 : "zh_Hans_CN"
  - 233 : "ewo_CM"
  - 234 : "fr_PF"
  - 235 : "ca_IT"
  - 236 : "es_GY"
  - 237 : "en_BZ"
  - 238 : "ar_KW"
  - 239 : "pt_GW"
  - 240 : "fr_FR"
  - 241 : "am_ET"
  - 242 : "en_VC"
  - 243 : "es_DM"
  - 244 : "fr_DJ"
  - 245 : "fr_CF"
  - 246 : "es_SV"
  - 247 : "en_MS"
  - 248 : "pt_ST"
  - 249 : "ar_SD"
  - 250 : "luy_KE"
  - 251 : "gd_GB"
  - 252 : "de_LI"
  - 253 : "it_VA"
  - 254 : "fr_CG"
  - 255 : "pt_CH"
  - 256 : "ckb_IQ"
  - 257 : "zh_Hans_SG"
  - 258 : "en_MT"
  - 259 : "ha_NE"
  - 260 : "en_ID"
  - 261 : "ewo"
  - 262 : "af_ZA"
  - 263 : "os_GE"
  - 264 : "om_KE"
  - 265 : "nl_SR"
  - 266 : "es_ES"
  - 267 : "es_DO"
  - 268 : "ar_IQ"
  - 269 : "fr_CH"
  - 270 : "nnh_CM"
  - 271 : "es_SX"
  - 272 : "es_419"
  - 273 : "en_MU"
  - 274 : "en_US_POSIX"
  - 275 : "yav_CM"
  - 276 : "luo_KE"
  - 277 : "dua_CM"
  - 278 : "et_EE"
  - 279 : "en_IE"
  - 280 : "ak_GH"
  - 281 : "rwk"
  - 282 : "es_CL"
  - 283 : "kea_CV"
  - 284 : "fr_CI"
  - 285 : "ckb_IR"
  - 286 : "fr_BE"
  - 287 : "se"
  - 288 : "en_NZ"
  - 289 : "en_MV"
  - 290 : "en_LR"
  - 291 : "es_PM"
  - 292 : "en_KN"
  - 293 : "nb_SJ"
  - 294 : "ha_NG"
  - 295 : "sg"
  - 296 : "sr_Cyrl_RS"
  - 297 : "ru_RU"
  - 298 : "en_ZW"
  - 299 : "sv_AX"
  - 300 : "ga_IE"
  - 301 : "si"
  - 302 : "wo"
  - 303 : "en_VG"
  - 304 : "ff_MR"
  - 305 : "ky_KG"
  - 306 : "agq_CM"
  - 307 : "mzn"
  - 308 : "fr_BF"
  - 309 : "naq_NA"
  - 310 : "mr_IN"
  - 311 : "en_MW"
  - 312 : "de_AT"
  - 313 : "az_Latn"
  - 314 : "en_LS"
  - 315 : "ka"
  - 316 : "sk"
  - 317 : "sl"
  - 318 : "sn"
  - 319 : "sr_Latn_ME"
  - 320 : "fr_NC"
  - 321 : "so"
  - 322 : "is_IS"
  - 323 : "twq"
  - 324 : "ig_NG"
  - 325 : "sq"
  - 326 : "fo_FO"
  - 327 : "sr"
  - 328 : "tzm"
  - 329 : "ga"
  - 330 : "om"
  - 331 : "en_LT"
  - 332 : "bas_CM"
  - 333 : "se_NO"
  - 334 : "ki"
  - 335 : "nl_BE"
  - 336 : "ar_QA"
  - 337 : "gd"
  - 338 : "sv"
  - 339 : "kk"
  - 340 : "rn_BI"
  - 341 : "es_CO"
  - 342 : "az_Latn_AZ"
  - 343 : "kl"
  - 344 : "or"
  - 345 : "es_AG"
  - 346 : "ca"
  - 347 : "en_VI"
  - 348 : "km"
  - 349 : "os"
  - 350 : "sw"
  - 351 : "en_MY"
  - 352 : "kn"
  - 353 : "en_LU"
  - 354 : "fr_SY"
  - 355 : "ar_TN"
  - 356 : "en_JM"
  - 357 : "fr_PM"
  - 358 : "ko"
  - 359 : "fr_NE"
  - 360 : "ce"
  - 361 : "fr_MA"
  - 362 : "gl"
  - 363 : "ru_MD"
  - 364 : "es_BL"
  - 365 : "saq_KE"
  - 366 : "ks"
  - 367 : "fr_CM"
  - 368 : "lb_LU"
  - 369 : "gv_IM"
  - 370 : "fr_BI"
  - 371 : "en_LV"
  - 372 : "en_KR"
  - 373 : "es_NI"
  - 374 : "en_GB"
  - 375 : "kw"
  - 376 : "nl_SX"
  - 377 : "dav_KE"
  - 378 : "tr_CY"
  - 379 : "ky"
  - 380 : "en_UG"
  - 381 : "es_BM"
  - 382 : "en_TC"
  - 383 : "es_AI"
  - 384 : "ar_EG"
  - 385 : "fr_BJ"
  - 386 : "gu"
  - 387 : "es_PR"
  - 388 : "fr_RW"
  - 389 : "gv"
  - 390 : "lrc_IQ"
  - 391 : "sr_Cyrl_BA"
  - 392 : "es_MF"
  - 393 : "fr_MC"
  - 394 : "cs"
  - 395 : "bez_TZ"
  - 396 : "es_CR"
  - 397 : "asa_TZ"
  - 398 : "ar_EH"
  - 399 : "fo_DK"
  - 400 : "ms_Arab_BN"
  - 401 : "ccp"
  - 402 : "en_JP"
  - 403 : "sbp_TZ"
  - 404 : "en_IL"
  - 405 : "lt_LT"
  - 406 : "mfe"
  - 407 : "en_GD"
  - 408 : "es_LC"
  - 409 : "cy"
  - 410 : "ug_CN"
  - 411 : "ca_FR"
  - 412 : "es_BO"
  - 413 : "en_SA"
  - 414 : "fr_BL"
  - 415 : "bn_IN"
  - 416 : "uz_Cyrl_UZ"
  - 417 : "lrc_IR"
  - 418 : "az_Cyrl"
  - 419 : "en_IM"
  - 420 : "sw_KE"
  - 421 : "en_SB"
  - 422 : "pa_Arab"
  - 423 : "ur_PK"
  - 424 : "haw_US"
  - 425 : "ar_SO"
  - 426 : "en_IN"
  - 427 : "fil"
  - 428 : "fr_MF"
  - 429 : "en_WS"
  - 430 : "es_CU"
  - 431 : "es_BQ"
  - 432 : "ja_JP"
  - 433 : "fy_NL"
  - 434 : "en_SC"
  - 435 : "yue_Hant_HK"
  - 436 : "en_IO"
  - 437 : "pt_PT"
  - 438 : "en_HK"
  - 439 : "en_GG"
  - 440 : "fr_MG"
  - 441 : "de_LU"
  - 442 : "tzm_MA"
  - 443 : "es_BR"
  - 444 : "en_TH"
  - 445 : "en_SD"
  - 446 : "nds_DE"
  - 447 : "shi_Tfng"
  - 448 : "ln_AO"
  - 449 : "as_IN"
  - 450 : "en_GH"
  - 451 : "ms_MY"
  - 452 : "ro_RO"
  - 453 : "jgo_CM"
  - 454 : "es_CW"
  - 455 : "dua"
  - 456 : "en_UM"
  - 457 : "es_BS"
  - 458 : "en_SE"
  - 459 : "kn_IN"
  - 460 : "en_KY"
  - 461 : "vun_TZ"
  - 462 : "kln"
  - 463 : "lrc"
  - 464 : "en_GI"
  - 465 : "ca_ES"
  - 466 : "rof"
  - 467 : "pt_CV"
  - 468 : "kok"
  - 469 : "pt_BR"
  - 470 : "ar_DJ"
  - 471 : "yi_001"
  - 472 : "fi_FI"
  - 473 : "zh"
  - 474 : "es_PY"
  - 475 : "ar_SS"
  - 476 : "mua"
  - 477 : "sr_Cyrl_ME"
  - 478 : "vai_Vaii_LR"
  - 479 : "en_001"
  - 480 : "nl_NL"
  - 481 : "en_TK"
  - 482 : "fr_DZ"
  - 483 : "en_SG"
  - 484 : "ca_AD"
  - 485 : "si_LK"
  - 486 : "sv_SE"
  - 487 : "pt_AO"
  - 488 : "vi"
  - 489 : "xog_UG"
  - 490 : "xog"
  - 491 : "en_IS"
  - 492 : "nb"
  - 493 : "seh_MZ"
  - 494 : "es_AR"
  - 495 : "sk_SK"
  - 496 : "en_SH"
  - 497 : "ti_ER"
  - 498 : "nd"
  - 499 : "az_Cyrl_AZ"
  - 500 : "zu"
  - 501 : "ne"
  - 502 : "nd_ZW"
  - 503 : "el_CY"
  - 504 : "en_IT"
  - 505 : "nl_BQ"
  - 506 : "da_GL"
  - 507 : "ja"
  - 508 : "rm"
  - 509 : "fr_ML"
  - 510 : "rn"
  - 511 : "en_VU"
  - 512 : "rof_TZ"
  - 513 : "ro"
  - 514 : "ebu_KE"
  - 515 : "ru_KG"
  - 516 : "en_SI"
  - 517 : "sg_CF"
  - 518 : "mfe_MU"
  - 519 : "nl"
  - 520 : "brx"
  - 521 : "bs_Latn"
  - 522 : "fa"
  - 523 : "zgh_MA"
  - 524 : "en_GM"
  - 525 : "shi_Latn"
  - 526 : "en_FI"
  - 527 : "nn"
  - 528 : "en_EE"
  - 529 : "ru"
  - 530 : "yue"
  - 531 : "kam_KE"
  - 532 : "fur"
  - 533 : "vai_Vaii"
  - 534 : "ar_ER"
  - 535 : "rw"
  - 536 : "ti_ET"
  - 537 : "ff"
  - 538 : "luo"
  - 539 : "fa_AF"
  - 540 : "nl_CW"
  - 541 : "es_MQ"
  - 542 : "en_HR"
  - 543 : "en_FJ"
  - 544 : "fi"
  - 545 : "pt_MO"
  - 546 : "be"
  - 547 : "en_US"
  - 548 : "en_TO"
  - 549 : "en_SK"
  - 550 : "bg"
  - 551 : "ru_BY"
  - 552 : "it_IT"
  - 553 : "ml_IN"
  - 554 : "gsw_CH"
  - 555 : "qu_EC"
  - 556 : "fo"
  - 557 : "sv_FI"
  - 558 : "en_FK"
  - 559 : "nus"
  - 560 : "ta_LK"
  - 561 : "vun"
  - 562 : "sr_Latn"
  - 563 : "es_BZ"
  - 564 : "fr"
  - 565 : "en_SL"
  - 566 : "bm"
  - 567 : "es_VC"
  - 568 : "ar_BH"
  - 569 : "guz"
  - 570 : "bn"
  - 571 : "bo"
  - 572 : "ar_SY"
  - 573 : "es_MS"
  - 574 : "lo_LA"
  - 575 : "ne_NP"
  - 576 : "uz_Latn"
  - 577 : "be_BY"
  - 578 : "es_IC"
  - 579 : "sr_Latn_XK"
  - 580 : "ar_MA"
  - 581 : "pa_Guru_IN"
  - 582 : "br"
  - 583 : "luy"
  - 584 : "kde_TZ"
  - 585 : "es_AW"
  - 586 : "bs"
  - 587 : "fy"
  - 588 : "fur_IT"
  - 589 : "hu_HU"
  - 590 : "ar_AE"
  - 591 : "en_HU"
  - 592 : "sah_RU"
  - 593 : "zh_Hans"
  - 594 : "en_FM"
  - 595 : "fr_MQ"
  - 596 : "ko_KP"
  - 597 : "en_150"
  - 598 : "en_DE"
  - 599 : "ce_RU"
  - 600 : "en_CA"
  - 601 : "hsb_DE"
  - 602 : "sq_AL"
  - 603 : "en_TR"
  - 604 : "ro_MD"
  - 605 : "es_VE"
  - 606 : "tg_TJ"
  - 607 : "fr_WF"
  - 608 : "mt_MT"
  - 609 : "kab"
  - 610 : "nmg_CM"
  - 611 : "ms_SG"
  - 612 : "en_GR"
  - 613 : "ru_UA"
  - 614 : "fr_MR"
  - 615 : "zh_Hans_MO"
  - 616 : "de_IT"
  - 617 : "ccp_BD"
  - 618 : "ff_GN"
  - 619 : "bs_Cyrl"
  - 620 : "tt_RU"
  - 621 : "nds_NL"
  - 622 : "es_KN"
  - 623 : "sw_UG"
  - 624 : "yue_Hans"
  - 625 : "ko_KR"
  - 626 : "en_DG"
  - 627 : "bo_IN"
  - 628 : "en_CC"
  - 629 : "shi_Tfng_MA"
  - 630 : "lag"
  - 631 : "it_SM"
  - 632 : "os_RU"
  - 633 : "en_TT"
  - 634 : "ms_Arab_MY"
  - 635 : "sq_MK"
  - 636 : "es_VG"
  - 637 : "bem_ZM"
  - 638 : "kde"
  - 639 : "ar_OM"
  - 640 : "kk_KZ"
  - 641 : "cgg"
  - 642 : "bas"
  - 643 : "kam"
  - 644 : "wae"
  - 645 : "es_MX"
  - 646 : "sah"
  - 647 : "zh_Hant"
  - 648 : "en_GU"
  - 649 : "fr_MU"
  - 650 : "fr_KM"
  - 651 : "ar_LB"
  - 652 : "en_BA"
  - 653 : "en_TV"
  - 654 : "sr_Cyrl"
  - 655 : "mzn_IR"
  - 656 : "es_VI"
  - 657 : "dje"
  - 658 : "kab_DZ"
  - 659 : "fil_PH"
  - 660 : "se_SE"
  - 661 : "vai"
  - 662 : "hr_HR"
  - 663 : "bs_Latn_BA"
  - 664 : "nl_AW"
  - 665 : "dav"
  - 666 : "so_SO"
  - 667 : "ar_PS"
  - 668 : "en_FR"
  - 669 : "uz_Cyrl"
  - 670 : "ff_SN"
  - 671 : "en_BB"
  - 672 : "ki_KE"
  - 673 : "en_TW"
  - 674 : "naq"
  - 675 : "en_SS"
  - 676 : "mg_MG"
  - 677 : "mas_KE"
  - 678 : "en_RO"
  - 679 : "en_PG"
  - 680 : "mgh"
  - 681 : "dyo_SN"
  - 682 : "mas"
  - 683 : "agq"
  - 684 : "bn_BD"
  - 685 : "haw"
  - 686 : "yi"
  - 687 : "nb_NO"
  - 688 : "da_DK"
  - 689 : "en_DK"
  - 690 : "saq"
  - 691 : "ug"
  - 692 : "cy_GB"
  - 693 : "fr_YT"
  - 694 : "jmc"
  - 695 : "ses_ML"
  - 696 : "en_PH"
  - 697 : "de_DE"
  - 698 : "ar_YE"
  - 699 : "es_TC"
  - 700 : "bm_ML"
  - 701 : "yo"
  - 702 : "lkt_US"
  - 703 : "uz_Arab_AF"
  - 704 : "jgo"
  - 705 : "sl_SI"
  - 706 : "pt_LU"
  - 707 : "uk"
  - 708 : "en_CH"
  - 709 : "asa"
  - 710 : "en_BD"
  - 711 : "lg_UG"
  - 712 : "nds"
  - 713 : "qu_PE"
  - 714 : "mgo"
  - 715 : "id_ID"
  - 716 : "en_NA"
  - 717 : "en_GY"
  - 718 : "zgh"
  - 719 : "pt_MZ"
  - 720 : "fr_LU"
  - 721 : "dsb"
  - 722 : "mas_TZ"
  - 723 : "en_DM"
  - 724 : "ta_MY"
  - 725 : "es_GD"
  - 726 : "en_BE"
  - 727 : "mg"
  - 728 : "ur"
  - 729 : "fr_GA"
  - 730 : "ka_GE"
  - 731 : "nmg"
  - 732 : "en_TZ"
  - 733 : "eu_ES"
  - 734 : "ar_DZ"
  - 735 : "id"
  - 736 : "so_DJ"
  - 737 : "hsb"
  - 738 : "yav"
  - 739 : "mk"
  - 740 : "pa_Arab_PK"
  - 741 : "ml"
  - 742 : "en_ER"
  - 743 : "ig"
  - 744 : "se_FI"
  - 745 : "mn"
  - 746 : "ksb"
  - 747 : "uz"
  - 748 : "vi_VN"
  - 749 : "ii"
  - 750 : "qu"
  - 751 : "en_PK"
  - 752 : "ee"
  - 753 : "ast_ES"
  - 754 : "yue_Hant"
  - 755 : "mr"
  - 756 : "ms"
  - 757 : "en_ES"
  - 758 : "ha_GH"
  - 759 : "it_CH"
  - 760 : "sq_XK"
  - 761 : "mt"
  - 762 : "en_CK"
  - 763 : "br_FR"
  - 764 : "en_BG"
  - 765 : "es_GF"
  - 766 : "tk_TM"
  - 767 : "sr_Cyrl_XK"
  - 768 : "ksf"
  - 769 : "en_SX"
  - 770 : "bg_BG"
  - 771 : "en_PL"
  - 772 : "af"
  - 773 : "el"
  - 774 : "cs_CZ"
  - 775 : "fr_TD"
  - 776 : "zh_Hans_HK"
  - 777 : "is"
  - 778 : "ksh"
  - 779 : "my"
  - 780 : "mn_MN"
  - 781 : "en"
  - 782 : "it"
  - 783 : "dsb_DE"
  - 784 : "ii_CN"
  - 785 : "eo"
  - 786 : "iu"
  - 787 : "en_ZA"
  - 788 : "smn"
  - 789 : "en_AD"
  - 790 : "ak"
  - 791 : "en_RU"
  - 792 : "kkj_CM"
  - 793 : "am"
  - 794 : "es"
  - 795 : "et"
  - 796 : "uk_UA"

2018/11/09

ドメイン料 更新。。。

お名前.COMにてドメインを取得してから1年かぁ。

あー、自動更新ONにしてたので、決済を通してしまった・・・。

まぁー良いけど。

練習がてら、自分でドメインを取得して、Bloggerでの設定など、

結構簡単にできました。

このドメイン更新費用に見合った、勉強をできたらと思ってます。

あと、このブログに広告を貼り付けてあるので、

興味のある物があれば、クリックなどしてくれると嬉しいです。

目標は、来年のドメインの更新料くらいはと思ってます。

2018/11/02

UIWebViewの使用禁止だなぁ

公式にも確認しましたが、

とうとう、 UIWebViewがduplicateとなったようです。。。。

iOS技術者の皆さん、もう、WKWebviewをつかってますよね?

ターゲットがiOS 11以上なら、storyboardからでも

組み込めるようになっているので、試してみてください。

2018/10/31

Swift 4 での π

メモ

M_PI  ではなく   Double.pi  にする。

M_PIは、非推奨となっている。

2018/10/28

2018/10/24

MOBIUS FINAL FANTASY #001 をアップしました。

超久々に起動してみた。

試しに、Steam版 + Windows10 で録画を試してみした。



2018/10/15

Kotlin初心者

Kotlinをそろそろ、覚えていこう・・・。

検索ワードは、  「Kotlin、初心者、入門 」 とか

見つかった、サイトを一通り眺めている最中です。

意外と難しくないぞ!

2018/09/06

grep コマンド って使ってますか?

よく使うので。メモがてら、

grepコマンドはテキストの中を検索する物に使いますが、

別のコマンドと一緒に使うとより便利になるかと思います。


cat コマンドと併用する。
cat   aaaa.txt  | grep  "mytext"

こんな感じに書けば、

cat でコンソールに出力した内容から、 特定の文字列の行を抽出する事ができます。

他にも、

ls -al  | grep   log_201801

と書けば

ls -al で出力された一覧から log_201801 のなまえのファイル一覧を表示できます。

du -ah  | grep   log_2018

とかは、ファイルの容量の単位をつけた状態で見れるから役立つかも。

Swift ログ出力


ログ出力メモ

Swift

フラグで持たせても良いし、buildで分けるのでもよい。
class MyLog{
        static func d(_ str:String){
        #if DEBUG               print(str)
        #endif    }
}

こんな感じに使う。
MyLog.d("aaaa")


2018/08/28

【iOS】UIStackViewでマージンとか設定したい。

メモ

疑問:UIStackViewで中の奴らにマージンを設定したい。
結論:無理なんで、UIViewを入れろ。

-------

iOSのAutoLayoutでUIStackViewを使って縦に積み重ねて行く場合、

途中で空白を指定したい場合ってあったりしますか?

ViewとViewの間に10pt隙間を空けたいとか。

試しに topやbottom に10pt 指定してもエラー出るし。。。。

ああ。。。

じゃUIStackView をやめて地道に 指定して行こうと・・・。

ふと。

間に縦10pt指定した、Viewをおいてしまえばよいのでは?

と思い、Viewをドラック&ドロップ。

 frame部分の heightを10 に・・・・。

あれ?

いれても 50とかに戻るんですけど・・・・。

Constraint の方に 10を直接指定すれば・・・。

あ、できた。

覚えておこう。

2018/06/26

PUBG MOBILEをはじめました。

こんにちは、

PUBG MOBILE 初めて見ました。

んで、ついでにアプリのプレイを録画もしております。

いつまで続くかはわかりませんが、頑張って行きたいと思います。

時間の都合上、アーケードモードをメインに録画を行っています。

アーケードモードだと、1試合 10分 もあれば、決着がつくので、録画もしやすいです。

今は、ただ録画しているだけですが、上達していく所を見てもらえればと思います。

もちろん、チャンネル登録もお待ちしております。

目標 1000人登録です、相互チャンネル登録も依頼をしていただければ、

登録するのでよろしくお願いします。

下記は、初見プレイでのドン勝、動画です。

なんと、初めてのプレイでドン勝をしてしまいました!!!




って  だいぶガッツポーズ最初したのですが、

調べたら、低レベル帯は、ほぼすべてbot との事で、自滅さえしなければ、ドン勝できるとの事です・・・・。

良かっら、高評価、チャンネル登録をお願いします。

2018/06/13

Realm って auto increment は、まだ実装されてないだね。。。

スマホアプリの開発案件で、Realm を使う事になったのですが、
auto increment の機能は、まだ実装されていないとの事。

公式に下記が乗ってました。

```java
public class Person extends RealmObject {
    @PrimaryKey
    private String id = UUID.randomUUID().toString();
    private Date createdAt = new Date();
    private String name;
}  


DBの設計書をみたら、
PrimaryKey の 型が Stringとなってたので、おいこれ間違ってね?
と突っ込んだら、Realmはまだ、対応してないから、
ユニークな値を生成してStringとしてやるのが普通らしい。

web のDB設計なら、int とかの整数値型にして、auto increment 属性つければOK
ってのが当たり前と思ってたんですけどね・・・。

もっと勉強せねば!

2018/05/23

Oracle Java 有料になるの?

なんか、JAVAのサポートがすごく短く、すぐ切れてしまうようになるとの事。

切れると、脆弱性などが見つかっても

有償サポート? になるとかならないとか。

よく調べて無いけど、どうなるのかな?

サーバー側をJAVAで開発した場合、

脆弱性が見つかってもすぐサポートきれるからやばいってこのなのかな?

ん〜 結局どうなんだろうか。

android もJavaで開発できるけど、どうなるとか、気になります。

だからkotlinをだしたとか?

まぁ、とりあえず様子見だけど Javaでの提案は避ける形かな?

Androidアプリのリソース件

複数解像度(xxxdpi,xxdpiなど)に合わせて、
画像を用意するの面倒。

そう思ったことは、ないでしょうか。

実際に実践で利用した小技を紹介します。

それは、

幅や、高さをdipで指定するだけ。

要は、
xmlのレイアウトのwidthとheightにdip単位で値を入れて上げる。

wrapで指定しちゃうと画像のピクセルサイズがで表示されてしまうので、あからさまに変になりますが、
dipで指定すれば、結構、いい感じになってくれます。

是非、お試しあれ。

Visual Studio Live Share リアルタイムの共同開発

タイトルやつ、
すっげー。興味あり。
通常業務そっちのけで、試したい。

リアルタイムでshare しながら記載できるとかすごい。

ハッカソンとかしてみたい。

Visual Studio Live Sha