Morghen Lethe

プログラミングの備忘録、趣味の事とか書いていきます。

homebrewのインストールで error: Not a valid ref: refs/remotes/origin/master が出た時の対処法

公式からコマンド叩いたらこのエラーが出たのに何でだろうって思って調べたらISSUEが出てた。

github.com

下記コマンドで無事インストールできた。

rm -fr $(brew --repo homebrew/core)
brew tap homebrew/core

docker-composeでpythonコマンドを実行するメモ

docker-compose.ymlを用いてDjangoプロジェクト作成までやっていることを前提としてます。

migrationとかcreatesuperuserやるとき、docker-composeコマンド経由で命令出せるのかなと思って調べてたらあったので試してみた結果のメモです。

docker-compose run [サービス名] [実行したいコマンド]
で出来ました。

叩いたコマンド
docker-compose run --rm web python manage.py migrate

docker-compose run --rm web python manage.py createsuperuser

--rmつけないと上記コマンドを実行するたびコンテナが増えるので、つけとくと良いと思いました。

訂正(2021-02-05 17:50)

docker-compose runじゃなくてdocker-compose execでいけました。(汗

docker-compose exec web python manage.py migrate

docker-compose exec web python manage.py createsuperuser

こんな感じですね。

Java開発環境の構築メモ(Spring Tools 4 Eclipse 設定編)

インストールまで完了したので、設定を行っていく。

起動時の設定

「SpringToolSuite4.exe」をダブルクリックして、Spring Tools 4を起動する。
そうすると、作業フォルダを設定する画面が開くので、任意のフォルダを指定する。

f:id:hiropon_drg:20200409112441p:plain

デフォルトだと、ユーザーフォルダ内のドキュメントフォルダが指定されている。
問題なければ「Launch」をクリックする。

f:id:hiropon_drg:20200409113315p:plain

この画面が出たら起動成功。

ビルドツール(Gradle)の設定

続いてビルドツール(Gradle)をインストールしていく。

「Help」→「Eclipse Marketplace」をクリックする。

f:id:hiropon_drg:20200409113915p:plain

ウィンドウが開いたら「Gradle」と入力して検索する。
「Buildship Gradle Integration 3.0」がヒットするので「Install」ボタンをクリックする。

f:id:hiropon_drg:20200409114235p:plain

次に「Update」をクリックして最新の状態にしておく。

f:id:hiropon_drg:20200409114303p:plain

ライセンス規約の確認画面が表示されるので、内容を確認して「I accept the terms of the license agreement」を選択して「Finish」をクリックする。

f:id:hiropon_drg:20200409114704p:plain

アップデートが始まる(右下にUpdating Softwareと表示される)ので、しばらく待機する。
アップデートが完了したらアプリの再起動を求められるので「Restart Now」をクリックしてアプリを再起動する。

f:id:hiropon_drg:20200409114921p:plain

これで設定は完了!

Java開発環境の構築メモ(Windows10 + OpenJDK 11 + Spring Tools 4 Eclipse)

①OpenJDKのダウンロード~環境変数設定

OpenJDK11を下記URLよりDLする。

https://openjdk.java.net/

jdk.java.net/13」をクリックする。(OpenJDK11じゃないけど問題ない)

f:id:hiropon_drg:20200407082616p:plain

「Archive」をクリックする。

f:id:hiropon_drg:20200407082635p:plain

下にスクロールすると「11.0.2 (build 11.0.2+9)」があるのでWindows 64bitの「zip」をクリックする。

f:id:hiropon_drg:20200407082652p:plain

ダウンロードが完了したら、解凍してCドライブ直下に配置する。

f:id:hiropon_drg:20200407084219p:plain

そしたら次は、環境変数の設定をする。
タスクバーにある虫眼鏡の検索から「環境変数」と入力し「システム環境変数の編集」をクリックする。
システムのプロパティが開くので、右下の「環境変数」をクリックする。

f:id:hiropon_drg:20200407084248p:plain

「Path」を選択して「編集」をクリックする。

f:id:hiropon_drg:20200407084334p:plain

「新規」をクリックして「C:\jdk-11.0.2\bin」と入力する。

f:id:hiropon_drg:20200407084610p:plain

そしたらOKを押してウィンドウを閉じていく。

f:id:hiropon_drg:20200407084707p:plain

これでOpenJDK11の設定は完了!
コマンドプロンプトで下記コマンドを実行するとバージョン確認が出来る。

java -version
javac -version

②Spring Tools 4のインストール

Spring Tools 4を下記URLよりDLする。

https://spring.io/tools

f:id:hiropon_drg:20200407090356p:plain

私がDLした時のファイル名は「spring-tool-suite-4-4.6.0.RELEASE-e4.15.0-win32.win32.x86_64.self-extracting.jar」となっていた。
ファイルはユーザーフォルダ等に移動しとく。(これは任意のフォルダでOK)

コマンドプロンプトで下記のコマンドを打ち込んでエンターを押す。

java -jar spring-tool-suite-4-4.6.0.RELEASE-e4.15.0-win32.win32.x86_64.self-extracting.jar

f:id:hiropon_drg:20200407090410p:plain

そうすると解凍が始まって「sts-4.6.0.RELEASE」フォルダが作られている。
「SpringToolSuite4.exe」をダブルクリックすることで、Spring Tools 4を起動出来る。

これでSpringTool4の設定のインストールも完了!
(解凍しただけなので、インストールではないかもしれない…)

次はSpringTool4の設定をしていこう。

Docker for Windowsのインストール方法(ver2.2.0.4)

Dockerを触ってみようと思い立ったので、インストール方法とかまとめるよ!
OSはWindows 10 Proだよ!
Dockerのバージョンは2.2.0.4だよ!

では進めていきます。

Hyper-Vの有効化

まずは、Hyper-Vの有効化から。
これをしないとDocker動かない。

コントロールパネルの「プログラムと機能」から
f:id:hiropon_drg:20200324084859j:plain

左にある「Windowsの機能の有効化または無効化」をクリック。
f:id:hiropon_drg:20200324084949j:plain

Hyper-V」にチェックを入れる。
f:id:hiropon_drg:20200324085151j:plain

そして設定を有効にするために、Windowsを再起動する。
f:id:hiropon_drg:20200324085317j:plain

続いて、Dockerのダウンロードをする。

Docker for Windowsのダウンロード

下記サイトよりexeファイルをダウンロードします。
docs.docker.com

Download from Docker Hubをクリックして
f:id:hiropon_drg:20200324085351j:plain

Get Dockerをクリックするとダウンロードが始まる。
f:id:hiropon_drg:20200324085510j:plain

次にインストールをしていく。

Docker for Windowsのインストール

ダウンロードした「Docker Desktop Installer.exe」をダブルクリックして、インストーラーを起動する。

元からチェックが2つ付いているので、そのままOKをクリックする。
f:id:hiropon_drg:20200324085740j:plain

※補足
Enable required Windows Features
必要なWindows機能を有効にするかどうか。

Add shortcut to desktop
デスクトップにショートカットを作成するかどうか。

Use Windows containers instead of Linux containers
Linuxコンテナーの代わりにWindowsコンテナーを使用するかどうか。
(後で設定変更可能らしい)

OKを押すとインストールが始まる。
f:id:hiropon_drg:20200324090345j:plain

しばらくすると、インストールが完了する。
f:id:hiropon_drg:20200324090423j:plain

Windowsを再起動する。

そうすると、こんな画面が表示された。(自動では表示されないかも)
f:id:hiropon_drg:20200324090509j:plain

そして、右下のタスクバーにはくじらさんのマークが!
f:id:hiropon_drg:20200324090521j:plain

これでDockerのインストールまで完了!
簡単だね~!

【Android】BottomSheetBehaviorの実装方法メモ

記事見てみると、サポートライブラリが旧情報しか無かったので困惑した為、メモを残そうと思う。
AndroidXで実装する!

こんな感じで実装出来た!

f:id:hiropon_drg:20200319085708j:plain
ButtonSheetBehavior

ボタンを押したら、BottomSheetBehaviorの機能を使って、リストを下から表示させるというもの。

注意点として、レイアウトは「coordinatorlayout」を使わないと実装出来なかった事かな。
使わないでも実装出来るのかは謎い。詳しい人教えて欲しいっす。

レイアウトが他にもいくつかあって、いまいち使い分け方が理解出来ていないので、自分の中での課題ですね。

開発環境

Android Studio = 3.5.3
compileSdkVersion = 29
targetSdkVersion = 29
minSdkVersion = 21
サポート ライブラリ = Androidx
Lang = Java

ソース

package com.hiropon.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import com.google.android.material.bottomsheet.BottomSheetBehavior;


public class MainActivity extends AppCompatActivity {

    private BottomSheetBehavior behavior;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // BottomSheetの処理
        View bottomSheet = findViewById(R.id.bottom_sheet);
        behavior = BottomSheetBehavior.from(bottomSheet);
        behavior.setState(BottomSheetBehavior.STATE_HIDDEN);

        ArrayAdapter<String> menu_adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);
        menu_adapter.add("test1");
        menu_adapter.add("test2");
        menu_adapter.add("test3");
        menu_adapter.add("test4");
        menu_adapter.add("test5");

        ListView menuList = findViewById(R.id.list_menu);
        menuList.setAdapter(menu_adapter);

        Button btnPlayer1 = findViewById(R.id.Button1);
        btnPlayer1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                if (behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
                    behavior.setState(BottomSheetBehavior.STATE_HIDDEN);
                } else {
                    behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
                }
            }
        });

    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/Button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="B1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:translationZ="2dp"
        tools:layout_editor_absoluteX="-179dp"
        tools:layout_editor_absoluteY="-16dp">

        <LinearLayout
            android:id="@+id/bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/white"
            android:orientation="vertical"
            app:behavior_hideable="true"
            app:behavior_peekHeight="200dp"
            app:layout_behavior="@string/bottom_sheet_behavior">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="15dp"
                android:layout_marginTop="15dp"
                android:text="Menu"
                android:textSize="18sp" />

            <ListView
                android:id="@+id/list_menu"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:divider="@color/colorWhite" />

        </LinearLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

参考リンク

Bottom Sheets の実装方法 - ユーザーインターフェイス - Android 開発入門

[Android] ListView + Bottom Sheet でマテリアルな一覧画面を作ってみた - Qiita

BottomSheetBehaviorを使う - Qiita

縦または横一列に要素を並べるリニアレイアウト (LinearLayout) - ユーザーインターフェイス - Android 開発入門

[Android]CoordinatorLayout利用してみた。 - Qiita

【Android】Buttonの形を丸型にする

開発環境

Android Studio 3.5.3
compileSdkVersion = 29
targetSdkVersion = 29
minSdkVersion = 21

ソース

適当なxmlファイル名(今回はcircle_button.xml)で作って下記の通り記述する。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid
        android:color="#FFF388"/>
</shape>

※補足
android:shape="oval"の記述で、ボタンが楕円形になる。
ボタンのカラーは黄色にしてます。

そして、作ったcircle_button.xmlをdrawableフォルダにつっこむ。

このままだと楕円なってしまう(レイアウトの設定次第ではあると思う)ので、activity_main.xmlでボタンのwidthとHeightを同じサイズする。

<Button
        android:id="@+id/Button1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="B1"
        android:background="@drawable/circle_button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

今回は「android:layout_width」と「android:layout_height」を「50dp」に設定している。
あとは、上記の通り「android:background」を追加して、作ったcircle_button.xmlを設定("@drawable/circle_button")してあげれば完成!

f:id:hiropon_drg:20200312085357j:plain
circle_button

こんな感じになります。

参考リンク

[Android] shapeを使ってカスタムボタン作成

【Android】動く丸形ボタンを drawable だけで作ってみた | PisukeCode - Web開発まとめ

[Android] SHAPEタグを使って出来ること〜画像ファイルを使わずにボタンや背景をカスタマイズする〜 | Developers.IO

http://android-note.open-memo.net/sub/button__make_round_shape_button.html

【Android】BottomSheetDialogの実装方法メモ

こんな感じで実装出来た!

f:id:hiropon_drg:20200309090815j:plain
ButtonSheetDialog

開発環境

Android Studio = 3.5.3
compileSdkVersion = 29
targetSdkVersion = 29
minSdkVersion = 21
サポート ライブラリ = Androidx Lang = Java

ソース

openDialogメソッドに書いてあります。
ボタンとかレイアウトは適当です。

package com.hiropon.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

import com.google.android.material.bottomsheet.BottomSheetDialog;

public class MainActivity extends AppCompatActivity {

    private BottomSheetDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btnPlayer1 = findViewById(R.id.Button1);
        btnPlayer1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                openDialog();
            }
        });

        Button btnPlayer2 = findViewById(R.id.Button2);
        btnPlayer2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                openDialog();
            }
        });
    }

    private void openDialog() {
        View view = getLayoutInflater().inflate(R.layout.layout_bottom_sheet, null);
        dialog = new BottomSheetDialog(this);
        dialog.setContentView(view);
        ImageButton btn1 = (ImageButton) view.findViewById(R.id.btn1);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),"ImageButton1が押されました",Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        ImageButton btn2 = (ImageButton) view.findViewById(R.id.btn2);
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),"ImageButton2が押されました",Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        ImageButton btn3 = (ImageButton) view.findViewById(R.id.btn3);
        btn3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(),"ImageButton3が押されました",Toast.LENGTH_SHORT).show();
                dialog.dismiss();
            }
        });
        dialog.show();
    }
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/Button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.306"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.498" />

    <Button
        android:id="@+id/Button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button2"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.709"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.498" />

</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    android:orientation="horizontal"
    android:background="#ffffff">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/btn1"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@mipmap/ic_launcher" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Button1"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/btn2"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@mipmap/ic_launcher" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Button2"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:orientation="vertical">

        <ImageButton
            android:id="@+id/btn3"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:background="@mipmap/ic_launcher" />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="Button3"/>
    </LinearLayout>
</LinearLayout>

Visual Studio Codeの日本語化手順 - Windows10

Ver 1.42

Visual Studio Codeを起動する。

ViewタブのCommand Paletteをクリックする。

configure display languageと入力してリストに出てきたらクリックする。(途中で予測変換でリストに表示された)

install additional languagesをクリックする。

Japanese Language Pack for Visual Studio Codeを選択してインストールする。

Visual Studio Codeを再起動する。

以上

【Android】画面の固定方法

AndroidManifest.xml内の<activity>タグ内に下記を追記する。

横画面固定の自動回転有り

android:screenOrientation="sensorLandscape"

横画面固定の自動回転無し

android:screenOrientation="landscape"

縦画面固定はlandscapeのところをportraitにすれば良いと思う。
自分では横画面しか試してないので、縦画面を試す時になったら必要に応じて確認し、当記事を修正する。

【Android】Android Studioで実機デバッグ手順

1. 開発者向けオプションを表示させる

設定→端末情報のにある「ビルド番号」を連続でタップする。 そうすると設定の所に開発者オプションが表示される。

2. 開発向けオプションのUSBデバッグをONにする

3. Google USB ドライバーのインストール確認

SDK Manager」で「SDK Tools」のタブを開く。
Google USB Driver」がインストールされていることを確認します。
されていなければインストールする。

3. PCと端末をUSBで接続する

つなぐと、Android端末側に接続を許可して良いかのメッセージ?が表示されるので許可する。 私の場合は、初回に表示されなかった?(スルーしてた?)と思う。 ↓

4. Android Studioでプログラムを実行する

Android Studioを起動して、実行時のデバイス選択画面に該当の端末が表示されるので選択して実行ボタンをクリックする。
私の場合は、No Deviceとなって端末と接続しているのに表示がされず、それでも実行してみたら下記のエラーが表示された。

Session 'app': Installation did not succeed. The application could not be installed.

もう1度、端末とPCを接続し直したら、認証メッセージが表示されて許可したらデバイス選択画面に端末が表示された。
その後、実行したら無事にデバッグが出来た。

解決^-^

【Android】Android Studioで仮想デバイスが起動しない(原因はHyper-Vが有効化されている)

表題の通り、仮想デバイスが起動しないので、解決方法を調べていたらどうやらHyper-Vが有効になっていると起動しないらしい。
私の場合だと、ずっと起動中の画面で先に進まない状態になった。

Hyper-Vを無効化したら起動するようになった。

参考URLは下記
qiita.com

解決^-^

【Django】ワークフローのメモ

django-admin startproject XXXX

で、プロジェクト作成後のフロー。

  1. アプリケーションの作成
  2. モデル作成(models)・有効化とマイグレーション(Migration)
  3. URL設定(urls.py)・ルーティング
  4. ビュー(views.py)の作成
  5. テンプレート(templates)の作成
  6. 静的ファイル(static files)の作成と配置

アプリケーションの作成

①コンソールで下記コマンドを実行する。

python manage.py startapp XXXX

※XXXXは任意の名称を入れる。

モデル作成(models)・有効化とマイグレーション(Migration)

①models.pyにクラスを作成する。

class XXXX(models.Model):
    title = models.CharField(max_length=255)
    text = models.TextField()
    author = models.ForeignKey(
        'auth.User',
        on_delete=models.CASCADE,
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

※XXXXは任意の名称を入れる。

②モデルの有効化
プロジェクト設定ファイル YYYY/settings.py (※YYYYはプロジェクト名) のINSTALLED_APPSに下記を追加する。

INSTALLED_APPS = [
    'XXXX.apps.XXXXConfig', # 追加
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

※XXXXはアプリケーション名。
※XXXXConfigは、該当アプリケーション内のapps.pyのクラス名を入れる。

from django.apps import AppConfig

class XXXXConfig(AppConfig):
    name = 'ZZZZ'

その後に下記コマンドを実行する。

python manage.py makemigrations XXXX

※XXXXはアプリケーション名。
makemigrationsを実行することで、Djangoにモデルに変更があったこと(この場合、新しいものを作成しました)を伝え、そして変更を マイグレーションの形で保存する。
migrationsフォルダ内に0000_initial.pyのようなファイルが作成されている。
下記コマンドを実行すると、SQL文を確認することが出来る。 python manage.py sqlmigrate XXXX 0001

マイグレーション
下記コマンドを実行する。

python manage.py migrate

これで、モデルのテーブルをデータベースに作成できる。
makemigrationsで作成したファイルは消える。

URL設定(urls)・ルーティング

作成したアプリケーションにURL設定を行う。
設定ファイルが無い場合は、urls.pyを新規作成する。
````python:urls.py

作成例

from django.urls import path from . import views

app_name = 'XXXX'

urlpatterns = [ # ここにURL情報を入れていく ] ```` app_nameにはapps.pyに記載したnameと同じ名称を入れれば良いと思う。

ビュー(views)の作成

views.pyに作成するページ(URL)分のクラスとかを設定する。

テンプレート(templates)の作成

templatesフォルダ内にページ分のhtmlファイルを作成する。

静的ファイル(static files)の作成と配置

cssとかjsファイルがあれば、作成する。
配置はstaticフォルダ(フォルダ名は任意)とかを作成して、その中に入れる。
そして、プロジェクト設定ファイル YYYY/settings.py (※YYYYはプロジェクト名) の中に下記を追加する。

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]  # './static'

以上

【Django】テーブル名の指定方法

Django テーブル名の指定方法

modelds.pyにクラスを作ってマイグレーションしたらテーブル名が「アプリ名_クラス名」となってしまった。
テーブル名は自由に決めたいと思って調べてみたら、作成したクラス内に下記コードを入れるとテーブル名が設定される事が分かった。

class Todo(models.Model):
    ...カラム名とか書いていくが省略

    class Meta:
        db_table = 'todo_list' 

【Android】Androidで音楽プレイヤー作成

シンプルでさくさく動く音楽プレイヤーを作ろうと思って開発をはじめました。

とりあえずは、再生したり、ボリューム調整したり出来るようになった。
経過時間も表示出来るようになった。

f:id:hiropon_drg:20191211235041j:plain

■残課題
- 曲名の表示 - 次の曲と前の曲ボタンの作成 - プレイリスト機能追加