2022年8月24日水曜日

emacs の lsp で変数が使われている参照先の一覧を表示する方法

emacs の lsp で変数が使われている参照先の一覧を表示する方法

概要

いつも忘れるのでメモ

そもそもの emacs + lsp などの設定はこちら

環境

  • macOS 11.6.8
  • emacs 28.1

コマンド

lsp-find-references

2022年8月20日土曜日

ITパスポート勉強方法メモ

ITパスポート勉強方法メモ

概要

せっかく合格したので勉強方法をメモ

前提

基本情報も応用情報も合格済み

勉強方法

過去問だけやりました
参考書などは購入していません

アプリはこちら

Webはこちら

これをひたすらやり続けました

とりあえず正答率を100%にして不安な部分はキーワードをネットで調べてより理解を深めました

勉強期間

2週間くらいです

感想

実際に出題された問題のうち 30% くらいは完全初見の問題でした
それでも問題をよく読み回答欄から消去法などで回答を絞れば回答できました
参考書まで読んで補足レベルまでカバーできているほうが初見率も下がったかなと思います

100問あるのでとりあえずどんどん回答しました
計算問題など時間がかかるやつは見直しにチェックして余った時間でじっくり回答しまいした
が、よく考えないと解けなさそうな問題は1問くらいしかなかったかなと思います

とにかく100問が長く感じました
疲れるので集中力を保てるようにしましょう

最終的には10分前くらいに退室しました

点数

全体で 825/1000 でした
分野別だと以下のとおりです

  • ストラテジ・・・790/1000
  • マネジメント・・・745/1000
  • テクノロジ・・・850/1000

不安なところがなかったので満点もあるかなーとか思ったんですが全然届きませんでした

最後に

FEとAPがあってもさすがにノー勉強だと合格できなかったかなと思います

点数は最後に確認できるのですが合格かどうかはなぜかあとから大臣が判断するみたいなのでおとなしく合格証を待ちましょう

2022年8月18日木曜日

Google Play Console からアプリを削除する方法

Google Play Console からアプリを削除する方法

概要

申請するしかないので申請します

環境

  • Google Play Console 2022/08/24 時点

申請する

https://support.google.com/googleplay/android-developer/contact/publishing

ここにアプリの情報を記載して申請するだけです

「デベロッパー アカウント ID *」は Google Play Console にログインして確認します

「以下の一般的な問題やリクエストから選択してください。」は「アプリの削除をリクエストしたい」にします

「どのようなことでお困りですか? *」には「別アプリとして公開したのでこのアプリの削除をお願いします。」としました

なぜかスクリーンショットも必須なのでスクリーンショットを添付しましょう
アプリの一覧画面でも添付しておけば大丈夫です

削除できる条件

  • アプリが良好な状態である(Google によって削除、停止されていない)
  • アプリのインストール数が全期間を通じて 0 である
  • アプリが 24 時間公開停止状態である(インストール数が 0 になるようにしてください)

たぶんこれをクリアするのが指南の技です

2022年8月17日水曜日

alembic でテーブル作成時にデータを insert する方法

alembic でテーブル作成時にデータを insert する方法

概要

bulk_insert を使うと簡単です

環境

  • Ubuntu 18.04
  • Python 3.10.2
  • alembic 1.8.1

サンプルコード

def upgrade():
    # ### commands auto generated by Alembic - please adjust! ###
    version_table = op.create_table('version',
                                    sa.Column('id', sa.Integer(), nullable=False),
                                    sa.Column('version', sa.String(length=10), nullable=True),
                                    sa.PrimaryKeyConstraint('id'))
    op.bulk_insert(version_table,
                   [{'id': None, 'version': "1.1.1"},
                    {'id': None, 'version': "2.2.2"}]) 
    # ### end Alembic commands ###

2022年8月16日火曜日

Python で class の中に class を定義する方法とメリット

Python で class の中に class を定義する方法とメリット

概要

Python では内部クラスを定義することができます
簡単な使い方の紹介とメリットを紹介します

環境

  • macOS 11.6.8
  • Python 3.10.2

内部クラスを使わない場合

  • vim team.py
class Team():

    def __init__(self, team_name: str):
        self.team_name = team_name


class Coach():

    def __init__(self, name: str):
        self.name = name


class Player():

    def __init__(self, name: str):
        self.name = name
  • vim team1.py
from team import Team, Player, Coach

class Team1(Team):

    def __init__(self, team_name: str):
        super().__init__(team_name)
        self.player = Player("p1")
        self.coach = Coach("c1")

    def show_name(self):
        print(self.team_name)
        print(self.player.name)
        print(self.coach.name)


if __name__ == '__main__':
    team1 = Team1("team1")
    team1.show_name()
  • python team1.py
team1
p1
c1

内部クラスを使う場合

  • vim team.py
class Team():

    def __init__(self, team_name: str):
        self.team_name = team_name


    class Coach():

        def __init__(self, name: str):
            self.name = name


    class Player():

        def __init__(self, name: str):
            self.name = name
  • vim team1.py
from team import Team

class Team1(Team):

    def __init__(self, team_name: str):
        super().__init__(team_name)
        self.player = self.Player("p1")
        self.coach = self.Coach("c1")

    def show_name(self):
        print(self.team_name)
        print(self.player.name)
        print(self.coach.name)


if __name__ == '__main__':
    team1 = Team1("team1")
    team1.show_name()

結果は同じです

考察

内部クラスを使った場合 Player と Coach クラスを import する必要がなくなります
これが一番のメリットで例えば Player と Coach クラスをいろいろな場所で使う場合にはいろいろな場所に import 文を書かなくてはいけません
しかし内部クラスにすることで親クラスを継承するだけで使えるようになるので毎回 import を書かなくて済みます
親クラスを継承していれば内部クラスは使えるので単純に self で参照することで使えます

デメリットとしては内部クラスとして定義したクラスを他のモジュールから import することができない点です
必ず親クラスである Team クラスを継承することが前提になるので例えば Coach クラスだけを使いのにわざわざ Team クラスを継承するように書かなければいけないのは面倒になります

個人的には必ず継承するような共通クラスを作るような場合には内部クラスをガンガン使っていいかなと思っています
ただ内部クラスの全部を使うわけではなく一部を使いたいというケースでは微妙で内部クラスとして定義したクラスは使っていてもいなくてもメモリ展開はされてしまうので余計なリソースを使いたくない場合には使用しないほうがいい場合もあります

内部クラスから親クラスのメソッドなどを self を介してアクセスすることはできないのでそこも注意が必要です
もし親クラスにアクセスしたい場合には親クラスをDIする必要があります

2022年8月14日日曜日

Quasar 超入門

Quasar 超入門

概要

Quasar は Vue3 用のユーザインタフェースです
今回はどんな感じで使えるのか試してみました

環境

  • macOS 11.6.8
  • nodejs 18.4.0
  • yarn 1.22.19
  • quasar 2.7.7

CLI インストール

専用の CLI があるのでこれをインストールします

  • yarn global add @quasar/cli

Quasar アプリの作成

プロジェクト的なのを作成します
今回は Web アプリを作成しますがどうやら spa/pwa/ssr/bex/electron/capacitor/cordova といろいろ選択できるようです

  • yarn create quasar

以下のように選択画面になるので「App with Quasar」を選択します

? What would you like to build? › - Use arrow-keys. Return to submit.
❯   App with Quasar CLI, let's go! - spa/pwa/ssr/bex/electron/capacitor/cordova
    AppExtension (AE) for Quasar CLI
    Quasar UI kit

するとプロジェクト名や TypeScript を使うのかとか Lint をどうするのかとか CSS どうするのかとかいろいろと聞かれます
とりあえず今回は全部デフォルトを使うので続けてエンターしていれば OK です

プロジェクトが作成できるまで待ちましょう

とりあえず動かす

プロジェクトが作成できたら動かしてみます

  • cd quasar-project
  • quasar dev

これで http://localhost:8080/#/ にアクセスするとデモ画面が表示されます

何か書き換えてみる

コンポーネントがいろいろとあるので使ってみましょう

とりあえずボタンアイコンを使ってみます

  • vim src/pages/IndexPage.vue
<template>
  <q-page class="flex flex-center">
    <q-icon name="today" class="text-orange" size="2em" />
  </q-page>
</template>

<script>
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'IndexPage'
})
</script>

これで再度ページを確認すると以下のようにアイコンに変わっているのが確認できると思います

最後に

Quasar をインストールして簡単なアプリを作成するところまでやってみました
vuetify と同じようにあいろいろなコンポーネントが用意されているので簡単に UI を作ることができます

タグは <q-xxx> という感じで定義されているので q から始まるコンポーネントを追加していくことになりそうです

参考サイト

2022年8月13日土曜日

Ubuntu18.04 に nodejs 16 と yarn をインストールする方法

Ubuntu18.04 に nodejs 16 と yarn をインストールする方法

概要

nvm を使った方法はこちらを御覧ください
今回は apt を使ってインストールする方法を紹介します

環境

  • Ubuntu18.04
  • nodejs 16.16.0
  • yarn 1.22.15

nodejs のインストール

  • curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
  • sudo apt-get install -y nodejs

yarn のインストール

  • sudo corepack enable

最後に

nodejs をした際に yarn を apt でインストールするための手順が表示されるのですが今回は corepack を使ってインストールしました

yarn の公式手順としては corepack を使うのが合ってそうだが実際どれが正しいのかは不明です

参考サイト