へっぽこ技術ブログです

【プログラミング】【覚書】IntelliJ IDEAを起動した時にプロジェクトを開かないように設定ファイルをいじった

自分のPCではなかったのだけど、IntelliJ IDEAを起動した時にプロジェクトを開こうとしてフリーズしてしまう症状を治したので覚え書き。ちなみにPrepare何ちゃらとかいう表示のダイアログが表示されてました。タスクマネージャーからそのダイアログを削除してもダメでした。

 

環境:

Windows 10 Pro

IntelliJ IDEA 2019.1.3 Comm. Ed. 

 

対策:

IntelliJ IDEAの設定ファイル(XMLファイル)を書き換えて、起動時にプロジェクトを開かないようにした。

 

方法:

・C:¥Users¥(自分のアカウント名)¥.ideaC2019.1¥config¥options に ide.general.xml という名称で以下のファイルを作成する。既に ide.general.xml がある場合はファイルを編集して「reopenLastProject」の1行を追加する。

ファイル名:ide.general.xml


<application>

    <component name="GeneralSettings">

        <option name="reopenLastProject" value="false" />

    </component>

</application>


 

 

参考資料:MacOS版の例がこちらに書かれていたので、Windowsでは同じファイルがどこにあるかを適当に探して見つけて解決できた。感謝致します。

https://tutorialmore.com/questions-486856.htm

 

 

 というわけで、覚書

【VR】【Daydream】Unity最初の最初【覚書】

Unityをちょっとだけ使ってみる

※直前記事の続きです。

1. Unityエディターの構成

f:id:Hiesuke:20191112162945p:plain

  • Hierarchy … 配置されているオブジェクトの一覧
  • Scene … オブジェクト配置などを操作する画面
  • Game … ゲーム画面(カメラが写している風景)
  • Asset Store … 各種部品等を購入できるストア
  • Inspector … オブジェクトの詳細を表示/設定する
  • Project … 使用できるリソース(画像など)一覧
  • Console … エラーメッセージなどが表示される

 

2. SceneとGame

f:id:Hiesuke:20191112163445p:plain

Scene

 ・3D表示でアプリに登場させるオブジェクトたちの変更・配置などができる

 ・赤い矢印がX方向、緑色の矢印がY方向、青い矢印がZ方向

 

f:id:Hiesuke:20191112163930p:plain

Game

 ・実際のアプリ画面となる見た目が表示されている

 ・Cameraオブジェクトが映している風景である

 

 

※以降のアプリ作成作業は、一作業ごとにf:id:Hiesuke:20191112162507p:plain「Play」ボタンを押して動作確認しましょう。

3.地面を作る

 ・Hierarchyで新しいオブジェクトを作成する

   ・「Create」→「3D Object」→「Trrain」

 ・Inspectorで地面の設定を変更する

   ・TransformのPosition を、 X:-200、Y:-10、Z:-200 に変更

   ・f:id:Hiesuke:20191112164701p:plainを選んでドラッグ操作で地面を盛り上げる

4.物体(立方体)を作成する

 ・Hierarchyで新しい立方体オブジェクトを作成する

   ・「Create」→「3D Object」→「Cube」

 ・Inspectorで物体の設定を変更する

   ・TransformのPosition を、 X:0、Y:5、Z:5 に変更

 

      f:id:Hiesuke:20191112165209p:plain

              を使用して、移動・回転・拡大縮小することも可能

 

5.物体に物理法則を適用させる

 ・HierarchyでCubeを選択する

 ・InspectorでAdd Component→Physics→Rigidbody

 ・Hierarchy→Create→3D Object→Sphere

 ・Inspectorで物体(球体)の設定を変更する

   ・TransformのPosition --- X:0.1、Y:3、Z:5

 

 

【VR】【Daydream】Mirage Soloの開発環境をWindows10上に構築し、作成するまでの手順【覚書】

今更ながらMirage Soloを購入*1してVRアプリ開発に取り組んでみちゃったりしたので、忘れないように開発環境構築手順とアプリ開発までの手順を覚書として記します。

 環境:Windows 10 pro (1903)

 

言うまでもないけど、バージョンによって手順がコロコロ変わるのであくまでご参考で。 

 

■開発環境構築の手順

1. Unity Hubをダウンロードしてインストール

  https://unity3d.com/jp/get-unity/download    最新版でOK

 

2. Unity HubからUnityをインストール   ※Unity Hub 2.1.1の場合で記載

  ・左の一覧(メニュー)から「インストール」を選ぶ。

  ・右の「インストール」ボタンをクリック

  ・最新正式リリースバージョン*2のUnityを選んで「次へ」

  ・Android Build Support、Android SDK & NDK Tools、OpenJDKにチェックを入れて「実行」*3

 

ここまでで開発環境はできあがり。

Javaの開発環境(JDK)とAndroidの開発環境(Android Studio)をインストールするように指示しているブログがふつ~ですが、今は(?) これらのツール群がUnityに付いてるので改めてインストールする必要はないようです。ただしデカいです。*4

 

アプリ開発の手順

1. Unity HubからUnityプロジェクトを新規作成

  ・左の一覧(メニュー)から「プロジェクト」を選ぶ。

  ・右の「新規作成」ボタンをクリック

  ・プロジェクト名を入力して「作成」

    ※Unityエディターが起動します。

 

2. Daydream開発用にプロジェクト設定をする

  ・Unityエディターの「File」メニューから「Build Settings...」を選ぶ

  ・Platformとして「Android」を選んで「Switch Platform」ボタン

  ・Build Settings ダイアログを閉じる

  ・Unityエディターの「Edit」メニューから「Project Settings...」を選ぶ

  ・左の一覧から「Player」を選ぶ

  ・右の「Campany Name」に会社名(or 組織名や個人名)を入力 ※アルファベットで

  ・Settings for Android の「Other Settings」をクリックし展開する

  ・Graphics APIs のVulkanを選んで「-」をクリックして削除する

  ・Minimum API LevelsをDaydreamのバージョンに合わせる ※現在のMirage SoloはAndroid 8.0

  ・Settings for Android の「XR Settings」をクリックし展開する

  ・「Virtual Reality Supported」のチェックボックスにチェックを入れる

  ・「Virtual reality SDKs」の「+」ボタンをクリックし「Daydream」を選ぶ

  ・「Depth Format」を「24-bit depth | 8-bit stencil」にする

  ・「Positional Head Tracking」が「Supported」であることを確認する

  ・Project Settings ダイアログを閉じる

 

3. VR用のライブラリ(google VR SDK)をプロジェクトにインポートする

  ・場所:https://github.com/googlevr/gvr-unity-sdk/releases

       「GoogleVRForUnity_X.XXX.X.unitypackage」 ※Xの部分はバージョン番号

 

 以上で、開発を行う準備が整ったはずです。

 

作ったアプリを Mirage Soloにインストール(Build & Run)するには Mirage Soloの設定画面で開発者モードにしておく必要があります。Mirage Soloの「設定」画面から「すべての設定」を選んで「システム」→「端末情報」と選び、出ている「ビルド番号」を何度か続けて選ぶと開発者モードが解放されます。ちなみにAndroid開発者には必須の知識です

 

以上、とりあえず

覚書

*1:正確に言うと異動前の部署で昨年6月に購入したのだがそのときにはアプリを動かすだけで開発はしなかった

*2:2019.09.11現在はUnity 2019.2.4f1

*3:Daydream機はAndroid端末です

*4:すでにインストールしてある人はそれを使うことで容量を抑えられます。その後、Unityでの設定が必要になりますが。

【JavaFX】JavaFXのWeb資料 覚書

OracleのサイトにあるJavaFX関連の解説ページURLを記録しておく。

 

Canvasの使い方をこれで勉強した。

  JavaFX: JavaFXグラフィックスの操作

  https://docs.oracle.com/javase/jp/8/javafx/graphics-tutorial/index.html

cssのところを読んでやってみた。

  JavaFX: JavaFXスタート・ガイド

  https://docs.oracle.com/javase/jp/8/javafx/get-started-tutorial/index.html

 

NetBEANS IDEで作業するようになってるけど、自分はIntelliJ IDEA Com.Ed. でやった。当然だけど特に問題なし(読み替えは多少あるけど)。

 

自分への覚書

おしまい

 

【Windows】Windows10の回復メディア作成ツールでハマった件(覚書)

メーカー製PCなんてとんと買わない(仕事では山ほど毎年新規でいじるけど店頭販売品とはちと違う)ので知らなかったのですが、昔はたいていPCに添付されていた再セットアップ用リカバリーメディア(回復メディア)がWindows10になって付かなくなってたんですね。

で、Windows10には「回復メディア作成ツール」って標準機能が付いたので、ができてそれを使うようになった、と。 知人がノートPCを購入して相談に乗ってたので、そのとき初めて知りました。

 

その「回復メディア作成ツール」でハマったので覚書。

 

USBメモリを使って回復メディアを作ろうとしていたのですが、「回復ドライブを作成できません」 との表示が出て途中で止まっちゃう。何度やっても。まともなエラーメッセージはなく、「回復ドライブの作成中に問題が発生しました。」の文章のみ。

 

色々なサイトをみて試行してみたけど有効だったのは『古いUSB2.0規格のUSBハブを経由してUSBメモリを接続して試した』場合のみだった。USB3のポートにUSB3(3.1)のUSBメモリを繋げて作成していたのだけどコレがいけなかった模様。2.0規格のUSBメモリを買っておけばよかった、しっぱいしっぱい。

 

おしまい

【Windows】ディスプレイだけ表示されなくなる状態を設定変更して回避した話

状況

・メーカー製ノートPCにWindows 10をクリーンインストールしたものを共有PCとして設置してある
・使用後にディスプレイを開いたまま放置されると、電源はオンのまま画面が何も映っていない状態になる
・マウス、キーボード、電源ボタンのどれを操作しても画面表示が復帰しない。
・電源ボタン長押しで強制的に電源オフするしかない。

対処方法

・「電源オプション」を表示する。
 (コントロールパネルから選ぶか、タスクトレイの電源アイコンを右クリックして選ぶ)
・いま選ばれている電源プランの「プラン設定の変更」リンクをクリックする。
・「ディスプレイの電源を切る」の選択を『適用しない』に変更する。
・「コンピューターのスリープ状態にする」の選択を『5分』などの適当な時間にする。
・「変更の保存」をクリックしてウインドウを閉じる。

これで放置されていても5分後等にスリープ状態になる(画面も暗くなる)が、マウスを動かすなどすればスリープから復帰して画面表示も同時に復帰するようになった。
メーカー製PCに素のWindowsをインストールしたので電源管理周りのデバイスドライバのせいなのかなぁと思うけど真相はわかりません。ちなみに Windows 10 のバージョン1803ってやつです。←2018年の3月版。今は1809がデフォなのかな?

おしまい

【AdventCalendar】【Python】pygameを始めよう。というか、始めた

この記事は横浜医療情報専門学校プログラミングクラブのAdvent Calendar 12月18日分の記事です。というか、忘れてたので急いで書いてます。


adventar.org

 

最近は訳あってプログラミング言語として Pythonばかり使ってるんですが、プログラミング言語の教育やら啓蒙(大げさ)のためには、「上辺と底辺の2つの値を入力して台形の面積を計算するプログラム」とか興味の湧かない計算をネタに学ぶのではなく、「なんか知らんけどカーソルキーで絵が動く」とか面白っぽいネタが必要と考えています。(ちなみに前者は昔に某高校の非常勤講師を受けた時に高校の先生がやっていた内容です。それを全否定してカリキュラム作り直しちゃいましたけど...)

 

という訳で、PythonでもGUIアプリを作る方法を調べたのですが、最初に調べた限りではどこのサイトでもどの書籍でも tkinter というライブラリを使う方法が紹介されていたんですよね。

そこで tkinter を使う方法を試行錯誤して、作品としてアクションゲーム(っぽいやつ)を作ってみたのですが、たくさんの敵キャラを動かしてみたところそれはもうカクカクで実用的ではない。その時に出した結論は『Pythonってアクションゲーム作りには向かない」でした。

 

しかし、ひょんなことから日経ソフトウェアのバックナンバーを見る機会があってその中で書かれていた記事が「pygameライブラリを使ってPythonでゲームを作る」ってやつだったので試したところこれがかなりイケルやつでした。まあ pygameライブラリって10年以上前からあるらしいんですが、出会いってそういうものですよね。出会ってなければ間違った結論のままだったわけで、そういうことって多いんだろうなと改めて実感。

 

とりあえず作りかけのアクションゲーム(っぽいもの)を以下に置いておきます。あくまで作りかけなので悪しからず。こなれたコードになってないことも悪しからず。


# ばくだんくん

import pygame
import random

##### Global Variables #####
SCREEN_WIDTH = 452   #画面のサイズ
SCREEN_HEIGHT = 352  #
COLOR_BLACK = (0,0,0)  # 黒
COLOR_RED =(255,0,0)   # 赤
DX = [-1, 0, 1, 0]   # 向きごとの移動分
DY = [0, -1, 0, 1]   #
stageNumber = 1  # 現在のステージ番号
bombKazu = 1   # 持っている爆弾の数。初期数は1つ
bombLength = 1   # 爆弾の威力。初期は1つ先のマスまで
mapAll = open("./mapdata.txt", "r").readlines()

##### Class #####
class MyChar(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        
        self.muki = 0
        self.jyoutai = 0
        
        self.images = []
        for i in range(4):
            self.images.append(pygame.image.load("./img/my" + str(i) + ".png"))
        self.image = self.images[self.muki]
        colorkey = self.image.get_at((0,0))
        print(colorkey)
        self.image.set_colorkey(colorkey)
        self.rect = self.image.get_rect()

    def changeImage(self):
        self.image = self.images[self.muki]
        
        
class TekiChar(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        
        self.muki = 0
        self.jyoutai = 0
        
        self.images = []
        for i in range(3):
            self.images.append(pygame.image.load("./img/teki" + str(i) + ".png"))
        self.image = self.images[self.muki]
        self.rect = self.image.get_rect()

    def update(self):
        if self.jyoutai <= 0:
            self.muki = random.randrange(4)
            self.jyoutai = 32
            xnext = (self.rect.x - 100) // 32 + DX[self.muki]
            ynext = (self.rect.y      ) // 32 + DY[self.muki]
            if maps[ynext][xnext] != "0":
                self.jyoutai = 0
        else:
            self.image = self.images[(self.rect.x + self.rect.y) % 3]
            self.rect.x += DX[self.muki]
            self.rect.y += DY[self.muki]
            self.jyoutai -= 1



class Bomb(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        
        self.jyoutai = 0

##### SubRoutine #####
def gamenByouga():
    screen.fill(COLOR_BLACK)
    for y in range(11):
        for x in range(11):
            #pygame.draw.rect(screen, (255,255,255), (x * 32, y * 32, 32, 32))
            if maps[y][x] == "8":
                screen.blit(imgBlock, (x * 32 + 100, y * 32))
            elif maps[y][x] == "9":
                screen.blit(imgWall, (x * 32 + 100, y * 32))
            elif maps[y][x] == "G":
                screen.blit(imgDoor, (x * 32 + 100, y * 32))
            else:
                screen.blit(imgFloor, (x * 32 + 100, y * 32))

def mapsSetup():
    global tekiCharGroup
    tekiCharGroup = pygame.sprite.Group()
    global maps
    maps = []
    for y in range(11):
        maps.append(list(mapAll[(stageNumber - 1) * 12 + y]))
        for x in range(11):
            if maps[y][x] == "M":
                myChar.rect.x = 32 * x + 100
                myChar.rect.y = 32 * y
                maps[y][x] = "0"
            elif maps[y][x] == "E":
                tekiChar = TekiChar()
                tekiChar.rect.x = 32 * x + 100
                tekiChar.rect.y = 32 * y
                tekiCharGroup.add(tekiChar)
                maps[y][x] = "0"
    print(maps)
            
#######################################################
##### GAME START
pygame.init()
screen = pygame.display.set_mode((SCREEN_WIDTH,SCREEN_HEIGHT))
gameclock = pygame.time.Clock()

### Charcter Generate
myCharGroup = pygame.sprite.Group()
myChar = MyChar()
myCharGroup.add(myChar)
tekiCharGroup = pygame.sprite.Group()
tekiChar = TekiChar()
tekiCharGroup.add(tekiChar)

##### Char Tile #####
imgFloor = pygame.image.load("./img/tileFloor.png").convert()
imgBlock = pygame.image.load("./img/tileBlock.png").convert()
imgWall = pygame.image.load("./img/tileWall.png").convert()
imgDoor = pygame.image.load("./img/tileDoor.png").convert()



##### Stage Start
mapsSetup()

for sprite in myCharGroup.sprites():
    print(sprite)
for sprite in tekiCharGroup.sprites():
    print(sprite)

endflag = 0

while endflag == 0:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            endflag = 1

    keypress = pygame.key.get_pressed()
    if myChar.jyoutai == 0:
        if (keypress[pygame.K_LEFT]):
            myChar.muki = 0
            myChar.jyoutai = 8
        elif (keypress[pygame.K_UP]):
            myChar.muki = 1
            myChar.jyoutai = 8
        elif (keypress[pygame.K_RIGHT]):
            myChar.muki = 2
            myChar.jyoutai = 8
        elif (keypress[pygame.K_DOWN]):
            myChar.muki = 3
            myChar.jyoutai = 8
        myChar.changeImage()
    else:
        myChar.rect.x += (DX[myChar.muki] * 4)
        myChar.rect.y += (DY[myChar.muki] * 4)
        myChar.jyoutai -= 1
            
    gamenByouga() # 背景となるマップや残り時間などを描画
    tekiCharGroup.update() # 敵の移動処理
    tekiCharGroup.draw(screen) #敵の描画
    myCharGroup.draw(screen) #自機の描画

    gameclock.tick(30)
    pygame.display.flip()

pygame.quit()

うん、pygameいいよ皆さん始めましょう。というか、やっつけな記事でごめんなー。


明日の記事は、みんなのアイドル 五段パイセンによる『在学生向けポエム「横浜医療情報専門学校を卒業したあと学校と在校生に対して思うこと」』です。お楽しみに〜〜!