branch10480’s blog

Topics that I've learned.

SwiftUI Tutorial メモ - 1 -

参考

Apple公式の以下チュートリアルをやってみました🙌

Creating and Combining Views

以降、メモです🖋

メモ

SwiftUI のライフサイクルを持つアプリは App プロトコルに準拠している。

その構造の body プロパティでは1つ以上の scene を返す。scene とは表示コンポーネントを順番に提供するもの。

続きを読む

編集距離がわからないのでまとめてみる🤔

参考

編集距離について勉強してもあまりしっくり来ず YouTube で動画を探していたところ、説明が非常に分かりやすい動画を見つけました。

大変感謝です🙇🏻‍♂️

情報工学概論(アルゴリズムとデータ構造)09動的計画法02編集距離 - YouTube

編集距離

2つの文字列が与えられた時どちらかに変更を何回か加えてもう一つの文字列にする 編集操作回数の最小値 のことをいいます。

S: snowy
T: sunny

S と T を何回か編集操作をして同じ文字列にする場合を考えます。

続きを読む

パッケージ管理 (2)~ Red Hat系 - 1

Red Hat系

rpm コマンドでのパッケージ管理

RPM は Red Hat社が開発したパッケージ管理システムで、現在は Red Hat Enterprise Linux, Fedora, CentOS などで使用されています。

RPMパッケージ名は以下の形式になっています。

例 bash

bash-4.2.46-30.el7.x86_64.rpm
セクション 説明
bash パッケージ名称
4.2.46 バージョン
30.el7 リリース番号
x86_64 CPUアーキテクチャ
.rpm 拡張子

パッケージのインストール

-i オプションでインストールができます。

インストールの家庭を表示するために -v オプションと -h オプションも併用するのが一般的です。

オプション 説明
-i (-install) パッケージのインストールを行う
-v 詳細な情報を表示する
-h (-hash) 進行状況を # を使って表示する

例 zshをインストールする

続きを読む

パッケージ管理 (1) ~ Debian ~

そもそもパッケージとは?

以下などを1つのファイルにまとめたものです。

  • 実行プログラム
  • 設定ファイル
  • ドキュメント ...etc

このパッケージを管理する方法はディストリビューションによって異なります。

ディストリビューション種類 パッケージ管理形式 コマンド/ツール
Debian GNU/Linux Debian形式 dpkg コマンド、 APTツール
Red Hat Enterprise Linux PRM形式 rpm コマンド

パッケージ管理システムは以下について管理します。

  • どのパッケージがインストールされているか把握
  • パッケージの依存関係の解決
  • パッケージ同士の競合を発生させないインストール・アンインストール

パッケージ管理システムでコンパイル済みのバイナリパッケージを扱う場合はソースコードからのインストールとは異なり、動作環境に依存するようになります。

そのため、以下について適切なものを選択する必要があります。

続きを読む

スタティックリンクとダイナミックリンク

スタティックリンクダイナミックリンク について勉強したのでまとめてみようと思います!

リンクとは?

プログラム本体からライブラリの関数を呼び出せるようにすることです。

リンクには2種類あります。

  1. スタティックリンク(静的リンク)
  2. ダイナミックリンク(動的リンク)

スタティックリンク(静的リンク)

プログラムをコンパイルする際に実行ファイル内にライブラリ内機能を実行ファイルないに埋め込む形式です。

ただしスタティックリンクで同じライブラリ機能を複数の実行ファイルから呼び出した場合、その同じライブラリ機能が呼び出すプログラムの数だけ重複して埋め込まれるというデメリットがあります。

ダイナミックリンク(動的リンク)

実行ファイルへライブラリ機能を直接埋め込むのではなく、 実行時にライブラリ機能を呼び出す リンクをダイナミックリンクといいます。

ちなみに、ダイナミックリンクによって呼び出されるライブラリを 共有ライブラリ と呼ばれ、 lib〜.so〜 という名前が付けられています。

共有ライブラリは通常以下に保存されています。

/lib

or

/usr/lib

【iOS】window.rootViewController入れ替え時のアニメーション

重要な点は、UIView.transitionanimationsでViewControllerの入れ替えをするのではなく、先に入れ替え処理を書いてからUIView.transitionを呼び出すこと。(animations引数は空のクロージャ。)

class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?

    ...
    
    func setRootViewController(_ vc: UIViewController) {
        guard let window = window else {
            return
        }
        window.rootViewController = vc
        UIView.transition(
            with: window,
            duration: 0.5,
            options: .transitionFlipFromLeft,
            animations: {},
            completion: { _ in })
    }

}

こんな感じでアニメーションさせられます。

f:id:branch10480:20210418202325g:plain:w320

アニメーションの種類は他にもあるので .transitionFlipFromLeft に定義ジャンプして確認してみてください。

ページ送りやフェードのアニメーションもできます。

参考

Swap rootViewController with animation?

【Android】 テキストの部分装飾

iOSでは NSMutableAttributedString を使いますが、Androidの場合は SpannableStringBuilder を用いるようです。

この例では以下の装飾を加えています。
target 文字列と一致する部分に

  1. フォント色を赤色
  2. フォントを太字
val textView = findViewById<TextView>(R.id.description_textview)
val message = textView.text.toString()
val target = getString(R.string.auto_renewal)
val firstIndex = message.indexOf(target)
val endIndex = firstIndex + target.length
val color = ResourcesCompat.getColor(
        applicationContext.resources,
        R.color.viewfinder_laser,
        null
)
SpannableStringBuilder(message).let {
    it.setSpan(ForegroundColorSpan(color), firstIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    it.setSpan(
            StyleSpan(android.graphics.Typeface.BOLD),
            firstIndex,
            endIndex,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
    textView.setText(it, TextView.BufferType.SPANNABLE)
}