20210513のMacに関する記事は16件です。

【Node.js】ダウンロードアプリ版のアンインストール、nvmでの再インストール(mac版)

Node.jsのインストールはどのように行いましたか? 公式サイトからアプリをダウンロードしてインストールするのは簡単な方法ですが、あまりオススメしません 理由はバージョンコントロールが面倒になるからです。nvmまたはnodebrewを使ってインストールする方法がオススメです。 既にダウンロードアプリ版でNode.jsをインストールしてしまった方向けに、 既存のNode.jsのアンインストールから、nvmで再インストールする方法について紹介します。 Node.jsのアンインストール npmのアンインストール npmのアンインストール npm uninstall -g npm ホームディレクトリに移動して.npmフォルダの削除 cd ~ rm -rf .npm nodeコマンドのフルパスを探してこちらも消しておく which node rm -rf /usr/local/bin/node 消えていることを確認 (いずれも-bash: **: command not foundとなる) node -v npm -v nvmを使ったNode.jsの再インストール nvmのインストール curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.0/install.sh | bash % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 13527 100 13527 0 0 45392 0 --:--:-- --:--:-- --:--:-- 45240 => Downloading nvm from git to '/Users/***/.nvm' => Cloning into '/Users/***/.nvm'... remote: Enumerating objects: 286, done. remote: Counting objects: 100% (286/286), done. remote: Compressing objects: 100% (252/252), done. remote: Total 286 (delta 32), reused 110 (delta 21), pack-reused 0 Receiving objects: 100% (286/286), 146.78 KiB | 514.00 KiB/s, done. Resolving deltas: 100% (32/32), done. => Compressing and cleaning up git repository => Appending nvm source string to /Users/***/.bash_profile => Appending bash_completion source string to /Users/***/.bash_profile => Close and reopen your terminal to start using nvm or run the following to use it now: export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion .bash_profileに追加されていることが確認できたらコマンドの有効化 source ~/.bash_profile nvmのバージョン確認 nvm --version 0.35.0 Node.jsのバージョン確認 nvm ls-remote ... v14.15.4 (LTS: Fermium) v14.15.5 (LTS: Fermium) v14.16.0 (LTS: Fermium) v14.16.1 (LTS: Fermium) v14.17.0 (Latest LTS: Fermium) v15.0.0 v15.0.1 v15.1.0 v15.2.0 v15.2.1 v15.3.0 v15.4.0 v15.5.0 v15.5.1 v15.6.0 v15.7.0 v15.8.0 v15.9.0 v15.10.0 v15.11.0 v15.12.0 v15.13.0 v15.14.0 v16.0.0 v16.1.0 バージョンを選択してインストール(必要に応じて複数バージョンをインストール) nvm install v14.17.0 インストールされたバージョンの確認 nvm ls v12.22.1 v14.17.0 -> v16.1.0 default -> v14.17.0 node -> stable (-> v16.1.0) (default) stable -> 16.1 (-> v16.1.0) (default) iojs -> N/A (default) unstable -> N/A (default) lts/* -> lts/fermium (-> v14.17.0) lts/argon -> v4.9.1 (-> N/A) lts/boron -> v6.17.1 (-> N/A) lts/carbon -> v8.17.0 (-> N/A) lts/dubnium -> v10.24.1 (-> N/A) lts/erbium -> v12.22.1 lts/fermium -> v14.17.0 使用するバージョンを選択(必要によって切り替え) nvm use v14.17.0 バージョンが切り替わっていることを確認 node -v v14.17.0
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Next.js + TypeScript + Tailwind CSS プロジェクトの環境構築手順

Next.js + TypeScript + Tailwind CSS プロジェクトの環境構築手順をまとめました。 はじめに node と npm はインストールが済んでいる前提で、進めていきます。 動作環境 node -v v15.7.0 npm -v 7.4.3 また、この記事の内容はmacOS (Apple Silicon)で実行しています。 Windowsをご利用の方は適宜読み替えていただければと思います。 1.Next.jsのプロジェクトを作成 Next.jsのプロジェクトを作成(フォルダが作成されるので、作業用ディレクトリ直下で行う) npx create-next-app - What is your project named? とプロジェクト名を聞かれるので、任意のプロジェクト名を入力します。今回は next-sample とします。 すると入力した名前のフォルダが作成されます。 ローカルサーバーを起動します。 // 作成したプロジェクトへ移動 cd next-sample npm run dev ブラウザからhttp://localhost:3000にアクセスして、以下の画面が表示されればNext.jsの準備は完了です! 2.TypeScriptの導入 必要なパッケージをインストールします。 npm i -D typescript @types/react @types/node 元々、作成されているpages/以下のjsファイルをtsファイルに書き換えます。 mv pages/_app.js pages/_app.tsx mv pages/index.js pages/index.tsx tsconfig.jsonはnpm run devすると自動的に作られるので、用意する必要はありません。 再度、npm run devを実行して、Next.jsをインストールした際に確認した画面が表示されれば、TypeScriptの導入は完了です。 3.Tailwind CSSの導入 こちらの公式ページを参考にTailwind CSSをインストール npm i -D tailwindcss@latest postcss@latest autoprefixer@latest 次に設定ファイルの作成 npx tailwindcss init -p 実行すると、tailwind.config.js と postcss.config.js が生成されます。 tailwind.config.js の purgeの設定を行います。 tailwind.config.js module.exports = { - purge: [], // この行を削除 + purge: ['./pages/**/*.{js,ts,jsx,tsx}', './components/**/*.{js,ts,jsx,tsx}'], // この行を追加 darkMode: false, // or 'media' or 'class' theme: { extend: {}, }, variants: { extend: {}, }, plugins: [], } styles/globals.cssの内容を書き換えます。 styles/globals.css @tailwind base; @tailwind components; @tailwind utilities; これでTailwind CSSの準備も完了です! あとは ./pages/index.tsxのclassNameに用意されているユーティリティクラス を設定して、適用されれば動作確認も完了です! pages/index.js <h1 className="text-red-400 text-5xl"> Welcome to <a href="https://nextjs.org">Next.js!</a> </h1> 参考文献 Install Tailwind CSS with Next.js Tailwind CSS Cheat Sheet
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MinecraftでMODを開発したい#5

MinecraftでMODの開発をします 試行錯誤を書いていくだけのものになります 概要 MODをjar形式にし、一般の人に配布して使えるように 動作環境 2021/05/12 Version Mac OS Big Sur 11.1 IntelliJ IDEA 2021.1.1 AdoptOpenJDK (HotSpot) 1.8.0_282 Minecraft 1.16.5 Forge 36.1.0 目次 - 設定 - 確認 設定 build.gradleのversionを1.16.5-1.0.0に変更 IntelliJ IDEAのGradle Tool Windowを開き、Tasks > build > buildをダブルクリックで実行 確認 IntelliJ IDEAの画面下側に表示される実行ログに「BUILD SUCCESSFUL」と表示され、build/libs/にexamplemod-1.16.5-1.0.0.jarが生成されたことを確認してください。 他のMODを導入する時と同様に、jarファイルをMinecraftのmodsフォルダに入れてランチャーからMinecraftを起動 タイトル画面の「Mods」ボタンを押し、MOD一覧に「Titanium Mod」が表示されていることを確認 また、ワールドに入ってアイテム・ブロック・レシピが正しく追加されていることを確認 導入できていた 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MinecraftでMODを開発したい#4

MinecraftでMODの開発をします 試行錯誤を書いていくだけのものになります 概要 MOD一覧などに表示される情報の登録 動作環境 2021/05/12 Version Mac OS Big Sur 11.1 IntelliJ IDEA 2021.1.1 AdoptOpenJDK (HotSpot) 1.8.0_282 Minecraft 1.16.5 Forge 36.1.0 目次 - リソースパックの情報 - mods.toml - ロゴ画像 - build.gradle リソースパックの情報 src/main/resources/pack.mcmeta { "pack": { "description": "Example Mod Resources", "pack_format": 6 } } mods.toml src/main/resources/META-INF/mods.toml modLoader = "javafml" loaderVersion = "[36,)" license = "The Unlicense" issueTrackerURL = "https://www.xxxxxx.com [[mods]] modId = "examplemod" version = "${file.jarVersion}" displayName = "Example Mod" displayURL = "https://www.xxxxxxxxxx.com logoFile = "logo.png" credits = "xxx" authors = "xxxxx" description = "練習用MOD" [[dependencies.examplemod]] modId = "forge" mandatory = true versionRange = "[36,)" ordering = "NONE" side = "BOTH" [[dependencies.examplemod]] modId = "minecraft" mandatory = true versionRange = "[1.16.5,1.17)" ordering = "NONE" side = "BOTH" MODの読み込みや一覧表示に使われる情報を記述 licenseはMODの利用条件を指定 このMODは例なので「Unlicense」という極めて緩いライセンスを採用 デフォルトはAll rights reserved(すべての権利を留保する)で、著作権法上の例外や別途の許諾を除き、複製や再配布などを禁止 Modpackでの利用や改変、再配布などをどこまで許容するか考え、自分で利用条件を決めたり、既存のライセンスを選ぶ issueTrackerURLは不具合の報告を受け付けるURL、logoFileはロゴ画像のファイル名、creditsは謝辞をそれぞれ指定 issueTrackerURL、displayURL、logoFile、credits、authorsは無くても問題なし descriptionなどでTOMLの複数行文字列を使うと、改行コードをCRLFにして保存した時にCRが正常に表示されないため、LF(\n)だけで改行しています。改行コードをLFにして保存すれば、複数行文字列も問題なく使える ロゴ画像 src/main/resources/logo.png build.gradle 元のbuild.gradleからの変更点 groupをcom.ドメイン名.examplemodに、archivesBaseNameをexamplemodに変更 ビルド時に出力されるファイルの名前は(archivesBaseName)-(version).jar minecraft { runs {内の4つのexamplemodをexamplemodに置換(今回は同じのため置換なし) JSONファイルの自動生成を行う時に必要になる設定 jar {とmanifest {との間に行を追加し、compileJava { options.encoding = 'UTF-8' }を挿入 コード内コメントに日本語が入っていた時の文字化けを防ぐため、文字コードを指定 jar { manifest { attributes([内のSpecification-TitleとImplementation-TitleをExample Modに、Specification-VendorとImplementation-Vendorを任意のものに変更 jarファイル内のMETA-INF/MANIFEST.MFに記載される情報 確認 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MinecraftでMODを開発したい#3

MinecraftでMODの開発をします 試行錯誤を書いていくだけのものになります 概要 特殊な機能を持たないブロックの追加 動作環境 2021/05/12 Version Mac OS Big Sur 11.1 IntelliJ IDEA 2021.1.1 AdoptOpenJDK (HotSpot) 1.8.0_282 Minecraft 1.16.5 Forge 36.1.0 目次 プログラムの記述 Block Stateの記述 ブロックモデルの記述 アイテムモデルの記述 テクスチャの配置 翻訳設定 ルートテーブルの記述 確認 プログラムの記述 src/main/java/com/ドメイン名/examplemod/ExampleMod.java package com.tntmodders.examplemod; import net.minecraft.block.AbstractBlock; import net.minecraft.block.Block; import net.minecraft.block.SoundType; import net.minecraft.block.material.Material; import net.minecraft.block.material.MaterialColor; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraftforge.common.ToolType; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @Mod(ExampleMod.MOD_ID) public class ExampleMod { public static final String MOD_ID = "examplemod"; public ExampleMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); Blocks.register(modEventBus); Items.register(modEventBus); } public static class Blocks { private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID); public static final RegistryObject<Block> EXAMPLE_BLOCK = BLOCKS.register("example_block", () -> new Block(AbstractBlock.Properties .of(Material.METAL, MaterialColor.METAL) .requiresCorrectToolForDrops() .strength(5.0F, 6.0F) .sound(SoundType.METAL) .harvestTool(ToolType.PICKAXE) .harvestLevel(1) )); public static void register(IEventBus eventBus) { BLOCKS.register(eventBus); } } public static class Items { private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID); public static final RegistryObject<Item> EXAMPLE_BLOCK = ITEMS.register("example_block", () -> new BlockItem(Blocks.EXAMPLE_BLOCK.get(), new Item.Properties() .tab(ItemGroup.TAB_BUILDING_BLOCKS))); public static final RegistryObject<Item> EXAMPLE_INGOT = ITEMS.register("example_ingot", () -> new Item(new Item.Properties() .tab(ItemGroup.TAB_MATERIALS))); public static void register(IEventBus eventBus) { ITEMS.register(eventBus); } } } BLOCKS.register("example_block", ...)でブロックの登録名を指定 ブロックIDはexamplemod:example_blockとなります。 BlockクラスのインスタンスはMinecraftのブロックの種類を表す 硬さや爆破耐性など、ブロックの種類によって変わる性質を保持 AbstractBlock.Properties.of(Material.METAL, MaterialColor.METAL)で、燃えるかどうかなどの基本的な性質をまとめたMaterialと、地図上の表示色であるMaterialColorを指定 requiresCorrectToolForDropsで、ブロックを回収するために適切な道具が必要であると設定 strength(5.0F, 6.0F)でブロックの硬さと爆破耐性を指定 第一引数は硬さで、数値が大きいほど壊すために時間がかかる 第二引数は爆破耐性で、数値が大きいほど爆発で壊れにくくなる sound(SoundType.METAL)でブロックの設置、破壊、上を歩いた時などに発生する音の種類を指定 harvestTool(ToolType.PICKAXE)でブロックを回収するための適正な道具の種類を指定 斧(AXE)、ツルハシ(PICKAXE)、シャベル(SHOVEL)、クワ(HOE)の中から選ぶ 指定しない場合は、どの道具を使っても早く壊せなくなる harvestLevel(1)でブロックを回収するために必要な道具の素材水準を指定 初期値は-1で、0が木か金、1が石、2が鉄、3がダイヤモンドの道具を要求 BlockItemは、プレイヤーのインベントリの中にある時など、アイテムとしてのブロックを表すクラス ほとんどのブロックは破壊されると対応するアイテムをドロップし、対応するアイテムを右クリックするとブロックをワールドに設置する このような対応関係を示すための、Itemを継承したクラス tab(ItemGroup.TAB_BUILDING_BLOCKS)で通常のアイテムと同様に、クリエイティブタブを指定します。今回は「建築ブロック」タブを指定 Block Stateの記述 src/main/resources/assets/examplemod/blockstates/example_block.json { "variants": { "": { "model": "examplemod:block/example_block" } } } ブロックの状態とモデルとの対応をJSONで記述 今回は状態を扱わないので、モデルを1つ指定 ブロックモデルの記述 src/main/resources/assets/examplemod/models/block/example_block.json { "parent": "minecraft:block/cube_all", "textures": { "all": "examplemod:block/example_block" } } 今回は正六面体のフルブロックで全面同じテクスチャを使う アイテムモデルの記述 src/main/resources/assets/examplemod/models/item/example_block.json { "parent": "examplemod:block/example_block" } 今回はブロックのモデルを指定 テクスチャの配置 src/main/resources/assets/examplemod/textures/blockのファイル構造を構築 そこにブロックの各面に表示される16×16ピクセルのpng画像ファイルexample_block.pngを配置する 翻訳設定 英語翻訳 src/main/resources/assets/examplemod/lang/en_us.json { "block.examplemod.example_block": "Block of Example", "item.examplemod.example_item": "Example Item" } 日本語翻訳 src/main/resources/assets/examplemod/lang/ja_jp.json { "block.examplemod.example_block": "お試しブロック", "item.examplemod.example_item": "お試しアイテム" } ルートテーブルの記述 src/main/resources/data/examplemod/loot_tables/blocks/example_block.json { "type": "minecraft:block", "pools": [ { "rolls": 1, "entries": [ { "type": "minecraft:item", "name": "examplemod:example_block" } ], "conditions": [ { "condition": "minecraft:survives_explosion" } ] } ] } ブロックを適正な道具で破壊した際にドロップするアイテムをJSONで記述 今回は常にお試しアイテムをアイテムとして1つドロップするよう指定 フォルダ名が複数形なので注意 "condition": "minecraft:survives_explosion"により、他のブロックと同様、爆発により壊された時に1/(爆発力)の確率でアイテムをドロップするようになる 確認 ブロックとして確認できたが、ドロップはしなかった 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacCatalystを使い方を解説

準備 Macのバージョン確認 まずMacのバージョンを確認します。 1.デスクトップ画面左上のAppleマークをクリック 2.「このMacについて」をクリック 3.開いたウィンドウでMacのバージョンを確認 ※Macのバージョンが10.15以降でなければMacCatalystで作ったアプリが動きません。 Xcodeのバージョン確認 次は、Xcodeのバージョン確認です。 もしXcodeがインストールされていなければApp Storeからダウンロードしてください。 1.Xcode.appを起動する 2.デスクトップ画面左上の「Xcode」をクリック 3.「About Xcode」をクリック 4.開いたウィンドウでXcodeのバージョンを確認 ! ※Xcodeのバージョンは11.0以降でなければMacCatalystが使用できません。 MacCatalystを使ってみる では、実際にMacCatalystを使ってアプリをMac対応させていきます。 使用した環境 開発環境  バージョン   MacOS   10.15.7   Xcode   11.3.1   MacCatalystの機能を有効にする 1.MacCatalystを使いたいアプリをXcodeで開く 2.プロジェクト設定の [TARGETS > General > Deployment Info > Mac] にチェック 3.アラートが出てくるので「Enable」をクリック ! 4.ビルド先がMy Macに設定されているのを確認して ▶ をクリックしてビルド 5.「Build Succeeded」が表示され、アプリが正常に動けば成功です      
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacCatalystで注意するべき3つのこと

iPad対応アプリしか移植できない MacCatalystでアプリをMacに移植するには、iPad対応が必須です。 iPhone対応アプリのMac移植をすることもできますが、その場合もiPad対応が必要になります。 移植元アプリの対応OS MacCatalystが使えるか iPhone & iPad 〇 iPhoneのみ ✕ iPadのみ 〇 デバイス間の仕様の違い MacとiPadでは様々な点で違いがあります。 移植元のアプリによっては以下の違いに注意する必要があります。 操作方法の違い Macではキーボード&マウス、iPadではタッチパネルのようにMacとiPadでは操作方法が違います。 MacCatalystでは自動でキーボード&マウス操作に対応してくれるので、基本的に気にする必要はないですが、特殊な操作方法を実装している場合等は注意が必要かもしれません。 内蔵カメラ・マイク・センサー等の有無 Macの場合、カメラやマイクを内蔵していないものもあります。 その場合でも外部接続でカメラやマイクは使えますが、ジャイロセンサーをはじめとした各種センサーはMacに非対応なので、iPadのセンサーを使った機能はMacでは実現できないものと考えた方がいいでしょう。 アプリ画面のサイズ iPadではアプリ画面がスクリーンのサイズで固定されますが、Macの場合はアプリ画面のサイズを自由に変更することができます。そのため、アプリ画面のレイアウトについて調整が必要になってくる場合もあります。 旧バージョンだと使用不可 開発する場合、開発環境はXcodeのバージョン11.0以降が必要で、アプリを動かすだけでも、macOS 10.15以降が必要になります。 アプリを旧バージョンのMacにも対応させたい場合は注意が必要です。     MacCatalystの注意点を解説しました。 次回はいよいよMacCatalystの使い方を説明していきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[備忘録]MacのVSCodeでtabを可視化する

設定画面を開く # ショートカット ⌘ + , "User">"Commonly Used">"Editor:Render Whitespace">"boundary"を選択 tabが可視化される before after
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacCatalystを使っているアプリを紹介!あなたも使っているかも

Twitter 言わずと知れた大手SNSアプリ。 一時期Mac版のアプリが廃止されていましたが、 MacCatalystアプリとして復活しました。 「MacもTwitterも使ってる!」という人は一度使ってみては? Twitter Apple Developper Apple関連の記事や動画を見ることができるアプリです。 同じ画面でアプリ開発をしながら情報収集もできるので、 Mac開発者からするとありがたいアプリです。 Apple Developer その他MacCatalystアプリ ・GoodNotes 5 メモ・PDF管理 ・Rosetta Stone 言語学習 ・LookUp 英語辞典 ・Jira Cloud プロジェクト管理 ・Dice by PCalc ダイスゲーム ・HabitMinder 健康習慣の管理 ・Firey Feeds フィードリーダー ・Zoho Sign 電子署名 ・Zoho Books 会計 ・Post-it 付箋アプリ ・King’s Corner トランプゲーム ・Triplt 旅行計画管理 参考: https://apps.apple.com/jp/story/id1479230371   MacCatalystアプリを紹介しました。 ほかにもMacCatalystを使ったアプリはまだまだあります。 あなたが何気なく使っているアプリも実はMacCatalystアプリだったり...? 次回はMacCatalystの注意点を解説します。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MinecraftでMODを開発したい#2

MinecraftでMODの開発をします 試行錯誤を書いていくだけのものになります 概要 特殊な機能を持たないアイテムの追加 動作環境 2021/05/12 Version Mac OS Big Sur 11.1 IntelliJ IDEA 2021.1.1 AdoptOpenJDK (HotSpot) 1.8.0_282 Minecraft 1.16.5 Forge 36.1.0 目次 プログラムの記述 アイテムモデルの記述 テクスチャの配置 翻訳設定 確認 プログラムの記述 src/main/java/com/ドメイン名/examplemod/ExampleMod.java package com.ドメイン名.examplemod; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.RegistryObject; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; import net.minecraftforge.registries.DeferredRegister; import net.minecraftforge.registries.ForgeRegistries; @Mod(ExampleMod.MOD_ID) public class ExampleMod { public static final String MOD_ID = "examplemod"; public ExampleMod() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); Items.register(modEventBus); } public static class Items { private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID); public static final RegistryObject<Item> TITANIUM_INGOT = ITEMS.register("example_item", () -> new Item(new Item.Properties() .tab(ItemGroup.TAB_MATERIALS))); public static void register(IEventBus eventBus) { ITEMS.register(eventBus); } } } MOD_IDはmods.tomlに記載したものと一致する必要があり、すべて小文字の必要がある ITEMS.register("example_item", …)でアイテムの登録名を指定 アイテムIDはexamplemod:example_itemとなる ItemクラスのインスタンスはMinecraftのアイテムの種類を表す。耐久上限や最大スタック数など、アイテムの種類によって変わる性質を保持している tab(ItemGroup.TAB_MATERIALS)でクリエイティブタブ「その他」に表示されるよう指定 この指定を行わなかった場合、クリエイティブタブからは取得できなくなる アイテムモデルの作成 src/main/resources/assets/examplemod/models/item/example_item.json { "parent": "minecraft:item/generated", "textures": { "layer0": "examplemod:item/example_item" } } テクスチャの配置 src/main/resources/assets/examplemod/textures/itemのファイル構造を構築 そこにアイテムのアイコンになる16×16ピクセルのpng画像ファイルexample_item.pngを配置する 翻訳設定 英語翻訳 src/main/resources/assets/examplemod/lang/en_us.json { "item.examplemod.example_item": "Example Item" } 翻訳が設定されていない言語の代わりとしても表示される 日本語翻訳 src/main/resources/assets/examplemod/lang/ja_jp.json { "item.examplemod.example_item": "お試しアイテム" } 文字コードはUTF-8で保存 確認 参考文献
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[備忘録] MacのVSCodeでターミナルを開く

Ctrl + `
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

M1 mac book airを購入後インストールしたもの

M1 Mac book airを購入したので、購入後すぐにやったこと。ハマったことも一緒に掲載 GUI系ソフトウェアをインストール GUI系は何の問題もなくインストール完了 公式ページ、App storeからからダウンロードするだけ。 - sequel pro - google chrome - VS code - atom - sourse tree - fork - docker for mac - adobe(Ai, Ps など) - Jetbrains(RubyMine) - slack - evernote - monosnap - goodnote - xcode - Dispaly Menu - Magnet CUI系ソフトウェア homebrew ターミナルの設定を 「Rossetaを使用して開く」 に変更して、インストール、、はNG NG な方法 $ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" homebrew公式通りに行う homebrew公式 mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew ~/.zshrc export PATH=$HOME/.nodebrew/current/bin:$PATH 動作確認 sh $ brew help パスを通す homebrew系のインストール rbenv $ brew install rbenv mysql@5.7 $ brew install mysql@5.7 $ brew services start mysql@5.7 redis $ brew install redis $ brew services start redis imagemagick $ brew install imagemagick yarn $ brew install yarn nodebrew $ brew install nodebrew rbenv, Ruby3.0 $ ruby upgrade ruby-build $ rbenv install 3.0.0 パスを通す ~/.zshrc export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init - zsh)" AWS CLI 2 $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" $ sudo installer -pkg AWSCLIV2.pkg -target / Jupyter Lab $ pip3 install jupyterlab ※pip3とpython3は標準でインストール済み yarn brewでいれると安定版をいれるのがすこしめんどくさいので、npmでインストール $ node -v v14.17.0 $ npm install -g yarn
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Xdebug のインストール PHP デバッグ Mac Big Sur

Xdeubgのインストールにとてつもなく膨大な時間を費やした。 環境 mac OS Big Sur バージョン 11.3.1 $ brew list | grep php php@7.4 phpmyadmin 結論 ↓どおりにインストールしてエラーを解決しながらやっていくと、Xdebugをインストールできた。 Homebrew で php7.4 + Xdebug をインストール しかし、peclでのインストールにおいてエラー発生。 pecl install xdebug ・・・エラー省略。 asm goto' constructs are not supported yet これは、↓曰く Command Line Tools for xcode (CLT)のバージョンの問題らしい。 https://bugs.php.net/bug.php?id=80939&edit=1 ↓で確かめてみると $ clang --version Apple clang version 11.0.0 (clang-1100.0.33.17) Target: x86_64-apple-darwin19.6.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin そこで、 CLTのアップデートを行った。 ちなみに、CLTには2種類あって①システムにインストールされているCLT ②Xcodeのパッケージに埋め込まれているCLT があるとのこと。 brew upgrade でのエラー対処からCommand Line Toolsについてまとめてみる アップデート方法は↑の記事に書かれている通り。 一度システムにインストールされているのCLTを削除。再度インストール。 $ sudo rm -rf /Library/Developer/CommandLineTools $ sudo xcode-select --install 晴れて、バージョンアップに成功。 $clang --version Apple clang version 12.0.5 (clang-1205.0.22.9) Target: x86_64-apple-darwin20.4.0 Thread model: posix InstalledDir: /Library/Developer/CommandLineTools/usr/bin 再度、peclでxdebugをインストールすると、成功。 $ pecl install xdebug ・・・ Build process completed successfully Installing '/usr/local/Cellar/php@7.4/7.4.19/pecl/20190902/xdebug.so' install ok: channel://pecl.php.net/xdebug-3.0.4 Extension xdebug enabled in php.ini Installing '/usr/local/Cellar/php@7.4/7.4.19/pecl/20190902/xdebug.so' の部分をメモって、php.iniに書く。 php.iniの探し方↓ $ /usr/local/opt/php@7.4/bin/php -r "echo phpinfo();" | grep "php.ini" php.ini zend_extension="/usr/local/Cellar/php@7.4/7.4.19/pecl/20190902/xdebug.so" これでやっとVSCodeでのPHPをデバッグできる。 と思ったら、VSCodeでデバッグ開始しても、ブレークポイントで止まらない。 そこで、VSCodeのextensionでインストールしたPHP Debugのドキュメントを見てみると There are other ways to tell Xdebug to connect to a remote debugger, like cookies, query parameters or browser extensions. I recommend remote_autostart (Xdebug v2)/start_with_request (Xdebug v3) because it "just works". There are also a variety of other options, like the port, please see the Xdebug documentation on remote debugging for more information. Please note that the default Xdebug port changed between Xdebug v2 to v3 from 9000 to 9003. The extension still defaults to 9000, so make sure your configuration in launch.json and php.ini match. つまり、「Xdebugのバージョンに合わせて書け」とのこと。(意訳) あと、「Xdebugのバージョンv2からv3に合わせてポート番号が9000から9003に変わった。launch.jsonとphp.ini確かめろよ」とのこと。 筆者の場合だと以下を追記するとブレークポイントで止まるようになった。 php.ini zend_extension="/usr/local/Cellar/php@7.4/7.4.19/pecl/20190902/xdebug.so" [PHP] xdebug.mode = debug xdebug.start_with_request = yes ←こいつをonにすることでプレー区ポイントで止まった。 ;デフォルトは9003 xdebug.client_port = 9003
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel new で Laravelを始めるまでの記録

はじめに この資料は、 laravel new コマンドを使うために行った設定諸々のメモです。 参考になればと思います。 特記事項 全てのコマンドはやった結果であり、「なぜ」については「こうやった結果うまくいっている」(必要な物を入れていった結果のまとめ)と捉えていただけたらと思います。 環境 MacOS 11.2.3 入ってるもの一覧 brew phpbrew (過去に入れたことがあるやつが入ってた) やったこと 事前準備的なもの phpbrew 更新 とりあえず最新化で。 phpbrew self-update 必要なパッケージのインストール brew でインストール。 brew install phpbrew でPHPインストール phpbrew i 7.4.19 +bz2="$(brew --prefix bzip2)" +zlib="$(brew --prefix zlib)" phpbrew switch 7.4.19 phpbrew known --update で有効なバージョンを確認できます。 確認 $ php -v PHP 7.4.19 (cli) (built: May 10 2021 21:09:33) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies $ 拡張モジュールをインストール phpbrew ext install iconv mbstring json curl filter openssl fileinfo 次の laravel new でモジュールエラーになった場合に、このコマンドで入れます。(エラーになって入れてを繰り返した結果がこちらです) Laravel インストール laravel new api api は、任意の名前です。 成功したら /api 以下にLaravel モジュールが出来上がります。 確認 php artisan serve で、ブラウザから http://localhost:8000 とアクセスし、Laravelのページが表示できたらOK。 以降、Laravel に必要な個別設定を行ってください!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MinecraftでMODを開発したい#1

MinecraftでMODの開発をします 試行錯誤を書いていくだけのものになります 概要 環境構築をする 動作環境 2021/05/12 Version Mac OS Big Sur 11.1 IntelliJ IDEA 2021.1.1 AdoptOpenJDK (HotSpot) 1.8.0_282 Minecraft 1.16.5 Forge 36.1.0 目次 IntelliJ IDEAのインストール Forgeのインストール Example Modの削除 IntelliJ IDEAのインストール ダウンロードページから「Community」をダウンロード ダウンロードしたインストーラを実行し、デフォルト設定のまま画面に従ってインストール IntelliJ IDEAを起動し、タイトル画面で「New Project」を選択 「Project SDK」から「Download JDK」を選択 「Version」に「1.8」、「Vendor」に「AdoptOpenJDK (HotSpot)」を指定し、「Download」 「Project SDK」に「adopt-openjdk-1.8」が選択されていることを確認する Forgeのインストール ダウンロードページから1.16.5を選択し、「Download Recommended」の「Mdk」をダウンロード ダウンロードしたzipファイルを解凍し、任意の場所に移動させておく IntelliJ IDEAを起動して解凍したファイルを選択 自動で読み込みが始まるので、右下の進捗表示が完了するまで待つ 画面右側のTool Window Barにある「Gradle」を選択し、GradleのTool Windowを開く Tasks > fg_runsと階層を下りて「genIntellijRuns」をダブルクリックすると、実行構成が自動で作成される 「BUILD SUCCESSFUL」の表示がでれば成功 Terminalから$ ./gradlew genIntellijRunsを実行でもできる Gradle Tool Window左上の同期ボタン(Reload All Gradle Projects)を押す 画面右上の「TitaniumMod [genIntellijRuns]」などと表示されている実行構成選択ボタンを押して「runClient」を選択 実行ボタンを押して、Minecraftが起動すれば成功 起動しない場合、Terminalから$ ./gradlew runClientを実行すると起動できる場合がある Example Modの削除 src/main/java/にあるcom.example.examplemodを削除 com.exampleが残るので削除 src/main/javaを右クリックし、New > Packageからcom.ドメイン名.examplemodパッケージを作成 com.ドメイン名.examplemodを右クリックし、New > Java ClassからExampleModを作成 src/main/resources/META-INF/mods.tomlを開き、modId="examplemod"をmodId="examplemod"に変更(*今回はMOD名を変更しないため変更なしとする) changelog.txt、CREDITS.txt、LICENSE.txt、README.txtを削除 参考文献 https://www.tntmodders.com/tutorial/env-1165/ https://qiita.com/niwasawa/items/ca565091468abce48f53
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

週刊 DICOMデコーダーを創る (2)

本日はtag, VR, lengthを読み取ってみる 需要の程は不明ですが,知識の整理も兼ねて今日も作っていきます. 今日はtag, VR, 値長さを読み取るところまでやってみます. 前回はViewController.swiftにまとめていましたが,本格的に読み取り始めることにするので,新たにDicomDataクラスを作成します. DicomData.swift class DicomData{ var dicomData : Data! init(withData data:Data) { dicomData = data // dicomデータかチェック // ヘッダは128バイトのファイルプリアンブル // 続く4バイトにプレフィックスが続く if dicomData.count < 132{ print("file size error") return } if dicomData.getStringWithRange(start: 128, length: 4) != "DICM"{ print("file type error") return } print("dicom file loaded") } } データ要素の読み取り VR一覧 PS3.5 p23に一覧が記載されています. 各VRには対応するデータ内容がどのような値型で格納されているかを示しています. DICOM規格ではかなり厳密に区別されていますが,実際には値として入っているのは 数字・文字列・バイト列(バイナリ)だけです. VR 内容 備考 AE 文字列 AS 年齢を表す文字列 AT tag, elementを表す16bit符号なし整数 CS 文字列 DA 日付を表す文字列 DS 固定小数点か浮動小数点を表す文字列 DT 日時を示す文字列 FL 32bit浮動小数点数 FD 64bit浮動小数点数 IS 整数列 整数を表す文字列 LO 文字列 LT 文字列 OB byte列 ここにdataが入る * OF 浮動小数点ワードの列 * OW その他のワード列 dataが入る * PN 人名が入る文字列 SH 文字列 SL 32bit符号付き整数 SQ 項目のシーケンス * SS 16bit符号付き整数 ST 文字列 TM 時間を表す文字列 UI 文字列 UL 32bit符号なし整数 UN 内容が不明のバイト列 * US 16bit符号なし整数 UT 文字列 * 各データ要素は, group element VR 値長さ 値 1byte 1byte 2byte 2byte = UInt16 値長さで指定された分だけ で構成されているが,*をつけたOB, OW, OF, SQ, UT, UNは group element VR 予約領域(使用しない) 値長さ 値 1byte 1byte 2byte 2byte 4byte = UInt32 値長さで指定された分だけ で構成される点に注意が必要です. VRに続く2byteに値長さは格納されておらず,2byteあけて4byte分使って値が格納されています. これはdicomの各tagに対応するデータは日時であったり人名であったり,基本的に小さなデータを格納しているが,例えばOBやOWには16bit高解像度CTの画素値が入ったりするので,その容量を示すためには2byte長で表すことができる最大数(=16bit符号なし整数 max 65,535)となるので,データとして60KB程度のものしか格納できなくなります. そのため,OBやOWなど画素を収納する部分は4byteでデータ容量を表すことができ,4,294,967,295byte = 4GB程度のデータが格納可能となります. 関数作成 新たにDicomDataクラスを作ったので,そちらに各読み取り関数を実装していきます. 今回実装するのは, 指定した長さ分のバイト列→文字列へasciiテーブルで変換するクラス 16bit符号なし整数 32bit符号なし整数 現在読み取りしているファイルアドレスを移動させるseek関数 です. DicomData.swift var currentPosition : Int = 0 func readUInt16() -> UInt16{ let data = dicomData[currentPosition ... currentPosition+1].map{$0} currentPosition += 2 return UInt16(data[1]) << 8 + UInt16(data[0]) } func readUInt32() -> UInt32{ let data = dicomData[currentPosition ... currentPosition+3].map{$0} currentPosition += 4 return UInt32(UInt16(data[3])) << 24 + UInt32(UInt16(data[2])) << 16 + UInt32(UInt16(data[1])) << 8 + UInt32(UInt16(data[0])) } func readChar(length:Int) -> String{ let pos = currentPosition currentPosition += 2 return dicomData[pos...pos+length-1].map{String(Unicode.Scalar($0))}.joined() } func seek(offset : Int){ currentPosition += offset } readChar関数は前回と同様にString(Unicode.Scalar($0))で実装します. readUInt16 readUInt32はWindowsの.NET frameworkには存在するのですが,swiftでは見当たりませんでした(間違っていたらすいません). bit演算のシフトを用いて実装します. 例えば 16 A2 15 DAのバイナリが順に並んでいたとき,little endianであれば4byteとったときに DA 15 A2 16 = 3658850838と読み取る必要があります それぞれをbitで表すと DA(=218) 1101 1011 15(= 21) 0001 0101 A2(=162) 1010 0010 16(= 22) 0001 0110 です. これを左にそれぞれ24bit, 16bit, 8bitずらすことで 1101 1011 0000 0000 0000 0000 0000 0000 0000 0000 0001 0101 0000 0000 0000 0000 0000 0000 0000 0000 1010 0010 0000 0000 0000 0000 0000 0000 0000 0000 0001 0110 として,これらを足し合わせて(bit演算の四則演算は癖があるので確認してください) (今回は単純に + でいいですが) 1101 1010 0001 0101 1010 0010 0001 0110 = 0xDA15A216 とすることで得られます. 読み取り func analyzeData(){ currentPosition = 128 + 4 while currentPosition <= 1950 { let position = currentPosition let group = readUInt16() let element = readUInt16() let vr = readChar(length: 2) if ["OB", "OW", "OF", "SQ", "UT"].contains(vr){ // VRの続きの2byteは意味をなさないので飛ばす currentPosition += 2 let length = readUInt32() print("Address: 0x\(String(position, radix: 16))(\(position)), tag: (\(String(format: "%04x", group)), \(String(format: "%04x", element))), VR: \(vr), Length: \(length)") currentPosition += Int(length) }else{ let length = readUInt16() print("Address: 0x\(String(position, radix: 16))(\(position)), tag: (\(String(format: "%04x", group)), \(String(format: "%04x", element))), VR: \(vr), Length: \(length)") currentPosition += Int( length) } } } 今回は試しに1950バイト目まで読み取ってみます 格納されたデータの内容は読み飛ばして,tag, VR, lengthのみ読んでいます 出力は Address: 0x84(132), tag: (0002, 0000), VR: UL, Length: 4 Address: 0x90(144), tag: (0002, 0001), VR: OB, Length: 2 Address: 0x9e(158), tag: (0002, 0002), VR: UI, Length: 28 Address: 0xc2(194), tag: (0002, 0003), VR: UI, Length: 46 Address: 0xf8(248), tag: (0002, 0010), VR: UI, Length: 22 Address: 0x116(278), tag: (0002, 0012), VR: UI, Length: 8 Address: 0x126(294), tag: (0008, 0008), VR: CS, Length: 38 Address: 0x154(340), tag: (0008, 0016), VR: UI, Length: 28 Address: 0x178(376), tag: (0008, 0018), VR: UI, Length: 46 Address: 0x1ae(430), tag: (0008, 0020), VR: DA, Length: 8 Address: 0x1be(446), tag: (0008, 0030), VR: TM, Length: 6 Address: 0x1cc(460), tag: (0008, 0050), VR: SH, Length: 0 Address: 0x1d4(468), tag: (0008, 0060), VR: CS, Length: 2 Address: 0x1de(478), tag: (0008, 0070), VR: LO, Length: 0 Address: 0x1e6(486), tag: (0008, 0080), VR: LO, Length: 0 Address: 0x1ee(494), tag: (0008, 0081), VR: ST, Length: 0 Address: 0x1f6(502), tag: (0008, 0090), VR: PN, Length: 0 Address: 0x1fe(510), tag: (0008, 1030), VR: LO, Length: 0 Address: 0x206(518), tag: (0008, 1050), VR: PN, Length: 0 Address: 0x20e(526), tag: (0008, 2110), VR: CS, Length: 2 Address: 0x218(536), tag: (0008, 2112), VR: SQ, Length: 4294967295 です. 先程示したとおり,VRがOB, OW, OF, SQ, UTは挙動が違うので分けています. 現時点ではアドレスとVR,データ長が表示されているだけで,各tagが何を示すのかはわかりませんが,これは対応表があります. またそのうち実装しますが,今見えている中で大事なのは (0002, 0010)のUIが入っているデータで,UIなので文字列が入っています. 内容は,1.2.840.10008.1.2.4.50という文字列で,これも対応表がありますが, JPEG Baseline (Process 1) で圧縮転送していることを示しています. ここを読み取って,どのような方法で最終の画像データをデコードするのかを決めることになります. データ 転送形式 1.2.840.10008.1.2 Implicit VR Little Endian Default Transfer Syntax 1.2.840.10008.1.2.1 Explicit VR Little Endian Transfer Syntax 1.2.840.10008.1.2.1.99 Deflated Explicit VR Little Endian 1.2.840.10008.1.2.2 Explicit VR Big Endian 1.2.840.10008.1.2.4.50 JPEG Baseline (Process 1) 1.2.840.10008.1.2.4.70 JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14 [Selection Value 1]) 1.2.840.10008.1.2.4.80 JPEG-LS Lossless Image Compression 1.2.840.10008.1.2.4.81 JPEG-LS Lossy (Near-Lossless) Image Compression 1.2.840.10008.1.2.4.90 JPEG 2000 Image Compression (Lossless Only) 1.2.840.10008.1.2.4.91 JPEG 2000 Image Compression 1.2.840.10008.1.2.4.100 MPEG2 Main Profile 1.2.840.10008.1.2.5 RLE Lossless 本来はすべての伝送方法に対応してデコードできるようにする必要がありますが, 現時点では上記から一部を実装する予定です. 今回のログですが,最初のほうは順調に読めていますが,最後のVRがSQの部分で変になってしまっています. このSQが曲者で,正しく実装するのはなかなか難しそうなのですが,データを階層化して入れ子のようにまとめるためのVRです. 今後どのように実装していくかはまだ悩み中ですが,次回はSQを関して実装していこうと思います. ではまた.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む