iOS 13 SDK 気になったところ

SwiftUI

UI 開発がしやすく

RealityKit

拡張現実。

VisionKit

入力ソース(画像、カメラ)に対してアルゴリズムを適用するフレームワーク。 CoreML と組み合わせて使える。 Open CV や Machine learning を導入しなくてもある程度の画像認識が簡易にできるフレームワーク、というイメージ?

例えば、カメラを使用したテキスト解析ができる(OCR)。 今までは iOS の文字解析は Tessaract など外部ライブラリを使用していたが、公式で追加された。

動物の検出。

人間の領域を得る。

MapKit

ズームレベルの範囲が設定できるようになった。 マップの表示範囲の変更をデリゲートして監視して・・・みたいのはしなくてよくなる。

macOS Catalina

iOS ではないが、次の macOS のメジャーバージョンは Catalina(カタリナ)。 合衆国カルフォルニアには、サンタ・カタリナという島があるみたい。

また、 iPad アプリをこの macOS 以降動作させることが可能になる。 このプロジェクトの名前は、 Catalyst Project。

対象デバイス

iPhone 5s, iPhone 6, iPhone 6 Plus 対象外。 プロセッサで言うと A9 以降?

映画『AKIRA』の感想

AKIRA 〈Blu-ray〉

AKIRA 〈Blu-ray〉

1988年の映画だが、古さを感じ無い。
当時の近未来(2019年)を描いた SF 作品。
すごく良い。

映像

  • サイバーな雰囲気

    • ネオン
    • スラム
    • バイク
    • 漢字
  • 丼物をだす屋台は出てこない

色の使い方が印象的

f:id:daisuke-t-jp:20190817091604p:plain

  • AKIRA」の題字
  • 金田のバイク
  • 金田のジャケット
  • 金田のシャツ(ピンク)
  • 鉄雄のマント
  • 甲斐のネクタイ
オレンジ

f:id:daisuke-t-jp:20190817092233p:plain

  • レジスタンスグループが作業員に扮する時の服
  • 保存されている「アキラ」
  • 金田が拾って使うレーザーガン
灰色

f:id:daisuke-t-jp:20190817093409p:plain

  • 人工物
  • くず鉄。スクラップ。
  • 壊れる、やくに立たない建造物、ビル、橋

f:id:daisuke-t-jp:20190817092855p:plain

音楽

  • ガムランのような東南アジアの音楽が、サイバーパンクな雰囲気とマッチする。
    • これはこの映画の発見だろうか?
    • 北野武の映画「キッズ・リターン」のエンディングで流れる音楽 Kids Return も東南アジア系の音楽で非常にカッコよく、それを思い出した

キャラクター

  • 大友克洋の描くキャラクターは「鼻」がハッキリ描かれていて
  • いわゆるアニメアニメな美男美女ではなく
  • ほどよく現実味があるリアルな顔立ちで
  • それによりアニメのキャラクターが「記号化」しておらず
  • 「ひとりひとりの登場人物」の表情をみているだけで、面白くなる

ストーリー

  • SF なのだが
    • 腕力の強い偉そうなガキ大将と
    • そのガキ大将にいじめから助けてもらった子供
    • という誰でも共感しやすい普遍的な人間関係をベースに
    • 話が進んでいくので、それが SF としては奇妙な感じもするが
    • おかげで話はわかりやすい
  • 人が暴行されたり、死んだりするシーンが多い映画だが、あまり暗い雰囲気にはならない
    • それは主人公?の不良少年が
    • 明快な性格で
    • 一目惚れした女性を口説いたり
    • ドジを踏んだり
    • 仲間を守ったりする
    • 愛嬌があるキャラクターなので
    • 映画の途中途中での彼のシーンで一旦緊張がブレイクされる
    • そのため、残虐シーンもあるが、暗すぎたり、悲痛すぎたり、にならない
    • 最後まで映画を苦なく観続けられるバランスに作用している

セリフ

セリフが印象的で世界観のオリジナリティに一役かっている。
以下、好きなセリフ。

  • ピーキーすぎてお前にゃ、無理だよ
  • 指導! 指導! 指導! 指導! 指導! 指導! 以上!
  • 健康優良不良少年
  • おめェもボスになったんだろぉ? この瓦礫の山でよぉ
  • 金田ぁあああ!
  • 「さん」をつけろよデコスケやろう!

調べたら、やはりこのセリフ自体の趣向に需要があるみたいで、LINE スタンプがあるみたいだ

おわりに

Android アプリ「弥勒菩薩タイマー」をリリース

遠い未来にこの世界を救済してくれる弥勒菩薩(マイトレイヤー)が、いつ現れるかを計測するタイマーアプリです。

ちなみに、弥勒菩薩がいつ救済するのかについては、図書館が調査した結果もあったりします。
釈尊の死後、56億7千万年後に弥勒菩薩が衆生を救済するという話の出典が知りたい。 | レファレンス協同データベース

誰を死刑執行したかの公表は2007年から始まった

過去のほかのケースでは、どうなのでしょうか。法務省はかつて死刑の執行そのものを公表していませんでしたが、平成10年11月から、執行した事実と人数の公表を始め、平成19年12月からは、当時の鳩山邦夫法務大臣の意向で、死刑囚の名前、犯罪事実、執行場所を公表するようになりました。


  • 平成10年(1998年) 11月より前
    • その事実を公表しない
    • 報道される情報は、政府からの公開情報ではなくリークなど私的な情報が元になる
  • 平成10年11月以降
    • 執行した事実と人数を公表
      • 名前など死刑囚を特定できる情報は公表しない
  • 平成19年(2007年)12月以降
    • 死刑囚の名前・犯罪事実・執行場所を公表

C言語で医療費控除額を計算する

コード

医療費控除の額がよくわからなかったので、C言語でコードを書いて試してみた。

GitHub にもある。

#include <stdio.h>
#include <math.h>
#include <assert.h>

static int get_medical_expenses_deduction(int payed, int insurance, int income);

int main(int argc, const char * argv[]) {
  // テスト
  assert(get_medical_expenses_deduction(200000, 0, 3000000) == 100000);
  assert(get_medical_expenses_deduction(200000, 50000, 3000000) == 50000);
  assert(get_medical_expenses_deduction(1000000, 0, 3000000) == 900000);
  assert(get_medical_expenses_deduction(1000000, 0, 1000000) == 950000);
  assert(get_medical_expenses_deduction(1000000, 0, 0) == 1000000);

  return 0;
}


/**
 * 医療費控除額を得る
 *
 * @param payed その年に支払った医療費
 * @param insurance 保険金などで補填される金額(生命保険など)
 * @param income その年に得た総所得
 *
 * @return 医療費控除額
 */
static int get_medical_expenses_deduction(int payed, int insurance, int income) {
  static const double income_coe = 0.05;    // 総所得にかける係数
  static const int income_border = 2000000; // 総所得の閾値
  static const int default_val2 = 100000;   // 控除から引くデフォルトの値
  static const int deduction_max = 2000000; // 控除の最高額
  
  
  // 基本となる控除額を算出する
  int val = payed - insurance;
  if(val < 0) {
    val = 0;
  }
  
  
  // 控除から引く額を算出する
  int val2 = default_val2;
  if(income < income_border) {
    // 総所得が閾値未満
    // -> 総所得に係数をかけた額を使用する
    val2 = ceil(income * income_coe);
  }
  
  
  // 控除額を計算する
  int deduction = val - val2;
  if(deduction > deduction_max) {
    deduction = deduction_max;
  }
  if(deduction < 0) {
    deduction = 0;
  }
  
  return deduction;
}

参照

InterfaceBuilder を使用せずにコード内で UIButton のアクションをバインドする

ある UIButton に対して TouchUpInside のイベントにアクションをバインドしたいとき、インターフェースビルダーを使わずに、コードで実現すると下のようになる。

@IBOutlet weak var button: UIButton!

class ViewController: UIViewController {

  override func viewDidLoad() {
    button.addTarget(self,
                     action: #selector(buttonAction(sender:)),
                     for: .touchUpInside)
  }

  @objc func buttonAction(sender: UIButton) {
    // アクションを書く!
  }
}

Mac の性能がよくなく、インターフェースビルダーの動きが緩慢な場合は、インターフェースビルダーの使用は最低限アウトレットだけのバインドだけに留めて、アクションなどはコードで設定すると、作業がはかどる。