iOS ってヒラギノフォントを対応はしているのですが、
UILabelで英字の jg などの 特定の文字だけ、下の部分が切れてしまいます。
sizetofit() とかやっても切れます。
AutoLayoutでも駄目です。
この仕様はどうにかしてほしい・・・・。
対策案)
・Layoutを作成するとき、高さを明示的に固定で大きめに取る
・ソース上で個々に対応する(検索すれば、いろいろ出てきます)
これくらいしか対策が思いつ来ません。
ある程度、開発が進んで個数が多い場合は、あとからきつくなる問題です。
技術的な知見や日々の記録、日常の些細な変化などを綴る雑記ブログです。専門的な技術解説から日記のようなライトな話題まで、特定のジャンルに縛られず、気になったことや面白いと感じた出来事を幅広く発信しています。筆者の視点で切り取った多様なコンテンツが楽しめる、自由な雑記空間を目指しています。
2019/04/11
2019/03/12
AMAZON SNS Ruby On Rails にて実装した。
プッシュ通知の実装のしかたって、何が一番正解なのだろうか・・・。
デバイストークンはどこに貯める(保存)?
・Amazon SNS 側のみ。
・サーバー等に集約する。
両方で管理してもあまり効率が良さそうで無い・・・
※最終的に何をしたいかで決まるが・・・。
大まかな流れ)
デバイストークンを投げる(直接?サーバー経由?)
↓
アプリケーションに登録とトピックへ登録
↓
配信指示
・一斉送信をする場合は、トピックに登録するのを忘れずに。
・完全個別配信の場合は、トピックは無くてもよい。
SNSの不便な点
・デバイストークンの総数を取得する機能が無い。
100件づつ取得する機能はあるが、全て数えるとなるとすごく時間がかかる。
100万件とかあると地獄・・・・
・一斉配信はアプリケーションにトークン登録してからトピックへ登録する必要有り。
export機能とかあってもよいのではないか?
--------
送信スペック
・トピックにて配信 10万件 程度なら、誤差1分もかからないかも。
ゴミ掃除
・トークンとか無効なやつは削除してあげた方が良い。
殴り書き中ですが、今日はここまで。気が向いたら、続きを!
デバイストークンはどこに貯める(保存)?
・Amazon SNS 側のみ。
・サーバー等に集約する。
結局のところ、両方が正しいのだろうか・・・
両方で管理してもあまり効率が良さそうで無い・・・
※最終的に何をしたいかで決まるが・・・。
大まかな流れ)
デバイストークンを投げる(直接?サーバー経由?)
↓
アプリケーションに登録とトピックへ登録
↓
配信指示
・一斉送信をする場合は、トピックに登録するのを忘れずに。
・完全個別配信の場合は、トピックは無くてもよい。
SNSの不便な点
・デバイストークンの総数を取得する機能が無い。
100件づつ取得する機能はあるが、全て数えるとなるとすごく時間がかかる。
100万件とかあると地獄・・・・
・一斉配信はアプリケーションにトークン登録してからトピックへ登録する必要有り。
export機能とかあってもよいのではないか?
--------
送信スペック
・トピックにて配信 10万件 程度なら、誤差1分もかからないかも。
ゴミ掃除
・トークンとか無効なやつは削除してあげた方が良い。
殴り書き中ですが、今日はここまで。気が向いたら、続きを!
2019/03/07
AMAZON SNS 管理画面 UIが変わった・・・。
AMAZON SNS
今日アクセスしたら、昨日までみていた画面と変わっていて困惑中、、、
主に、google 関連のGCM → FCM に表記が変わって、きれいなUIになっている。
今日アクセスしたら、昨日までみていた画面と変わっていて困惑中、、、
主に、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
- 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での設定など、
結構簡単にできました。
このドメイン更新費用に見合った、勉強をできたらと思ってます。
あと、このブログに広告を貼り付けてあるので、
興味のある物があれば、クリックなどしてくれると嬉しいです。
目標は、来年のドメインの更新料くらいはと思ってます。
あー、自動更新ONにしてたので、決済を通してしまった・・・。
まぁー良いけど。
練習がてら、自分でドメインを取得して、Bloggerでの設定など、
結構簡単にできました。
このドメイン更新費用に見合った、勉強をできたらと思ってます。
あと、このブログに広告を貼り付けてあるので、
興味のある物があれば、クリックなどしてくれると嬉しいです。
目標は、来年のドメインの更新料くらいはと思ってます。
2018/11/02
UIWebViewの使用禁止だなぁ
公式にも確認しましたが、
とうとう、 UIWebViewがduplicateとなったようです。。。。
iOS技術者の皆さん、もう、WKWebviewをつかってますよね?
ターゲットがiOS 11以上なら、storyboardからでも
組み込めるようになっているので、試してみてください。
とうとう、 UIWebViewがduplicateとなったようです。。。。
iOS技術者の皆さん、もう、WKWebviewをつかってますよね?
ターゲットがiOS 11以上なら、storyboardからでも
組み込めるようになっているので、試してみてください。
2018/10/31
2018/10/28
2018/10/24
2018/10/15
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
とかは、ファイルの容量の単位をつけた状態で見れるから役立つかも。
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を直接指定すれば・・・。
あ、できた。
覚えておこう。
疑問: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 との事で、自滅さえしなければ、ドン勝できるとの事です・・・・。
良かっら、高評価、チャンネル登録をお願いします。
PUBG MOBILE 初めて見ました。
んで、ついでにアプリのプレイを録画もしております。
いつまで続くかはわかりませんが、頑張って行きたいと思います。
時間の都合上、アーケードモードをメインに録画を行っています。
アーケードモードだと、1試合 10分 もあれば、決着がつくので、録画もしやすいです。
今は、ただ録画しているだけですが、上達していく所を見てもらえればと思います。
もちろん、チャンネル登録もお待ちしております。
目標 1000人登録です、相互チャンネル登録も依頼をしていただければ、
登録するのでよろしくお願いします。
下記は、初見プレイでのドン勝、動画です。
なんと、初めてのプレイでドン勝をしてしまいました!!!
って だいぶガッツポーズ最初したのですが、
調べたら、低レベル帯は、ほぼすべてbot との事で、自滅さえしなければ、ドン勝できるとの事です・・・・。
良かっら、高評価、チャンネル登録をお願いします。
2018/06/13
Realm って auto increment は、まだ実装されてないだね。。。
スマホアプリの開発案件で、Realm を使う事になったのですが、
auto increment の機能は、まだ実装されていないとの事。
公式に下記が乗ってました。
DBの設計書をみたら、
PrimaryKey の 型が Stringとなってたので、おいこれ間違ってね?
と突っ込んだら、Realmはまだ、対応してないから、
ユニークな値を生成してStringとしてやるのが普通らしい。
web のDB設計なら、int とかの整数値型にして、auto increment 属性つければOK
ってのが当たり前と思ってたんですけどね・・・。
もっと勉強せねば!
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での提案は避ける形かな?
切れると、脆弱性などが見つかっても
有償サポート? になるとかならないとか。
よく調べて無いけど、どうなるのかな?
サーバー側をJAVAで開発した場合、
脆弱性が見つかってもすぐサポートきれるからやばいってこのなのかな?
ん〜 結局どうなんだろうか。
android もJavaで開発できるけど、どうなるとか、気になります。
だからkotlinをだしたとか?
まぁ、とりあえず様子見だけど Javaでの提案は避ける形かな?
Androidアプリのリソース件
複数解像度(xxxdpi,xxdpiなど)に合わせて、
画像を用意するの面倒。
そう思ったことは、ないでしょうか。
実際に実践で利用した小技を紹介します。
それは、
幅や、高さをdipで指定するだけ。
要は、
xmlのレイアウトのwidthとheightにdip単位で値を入れて上げる。
wrapで指定しちゃうと画像のピクセルサイズがで表示されてしまうので、あからさまに変になりますが、
dipで指定すれば、結構、いい感じになってくれます。
是非、お試しあれ。
画像を用意するの面倒。
そう思ったことは、ないでしょうか。
実際に実践で利用した小技を紹介します。
それは、
幅や、高さをdipで指定するだけ。
要は、
xmlのレイアウトのwidthとheightにdip単位で値を入れて上げる。
wrapで指定しちゃうと画像のピクセルサイズがで表示されてしまうので、あからさまに変になりますが、
dipで指定すれば、結構、いい感じになってくれます。
是非、お試しあれ。
登録:
投稿 (Atom)